当前位置: 首页 > news >正文

Golang | Leetcode Golang题解之第327题区间和的个数

题目:

题解:

import "math/rand" // 默认导入的 rand 不是这个库,需要显式指明type node struct {ch       [2]*nodepriority intkey      intdupCnt   intsz       int
}func (o *node) cmp(b int) int {switch {case b < o.key:return 0case b > o.key:return 1default:return -1}
}func (o *node) size() int {if o != nil {return o.sz}return 0
}func (o *node) maintain() {o.sz = o.dupCnt + o.ch[0].size() + o.ch[1].size()
}func (o *node) rotate(d int) *node {x := o.ch[d^1]o.ch[d^1] = x.ch[d]x.ch[d] = oo.maintain()x.maintain()return x
}type treap struct {root *node
}func (t *treap) _insert(o *node, key int) *node {if o == nil {return &node{priority: rand.Int(), key: key, dupCnt: 1, sz: 1}}if d := o.cmp(key); d >= 0 {o.ch[d] = t._insert(o.ch[d], key)if o.ch[d].priority > o.priority {o = o.rotate(d ^ 1)}} else {o.dupCnt++}o.maintain()return o
}func (t *treap) insert(key int) {t.root = t._insert(t.root, key)
}// equal=false: 小于 key 的元素个数
// equal=true: 小于或等于 key 的元素个数
func (t *treap) rank(key int, equal bool) (cnt int) {for o := t.root; o != nil; {switch c := o.cmp(key); {case c == 0:o = o.ch[0]case c > 0:cnt += o.dupCnt + o.ch[0].size()o = o.ch[1]default:cnt += o.ch[0].size()if equal {cnt += o.dupCnt}return}}return
}func countRangeSum(nums []int, lower, upper int) (cnt int) {preSum := make([]int, len(nums)+1)for i, v := range nums {preSum[i+1] = preSum[i] + v}t := &treap{}for _, sum := range preSum {left, right := sum-upper, sum-lowercnt += t.rank(right, true) - t.rank(left, false)t.insert(sum)}return
}
http://www.lryc.cn/news/420779.html

相关文章:

  • Django5实战
  • 网址管理功能 Webstack
  • 【热工与工程流体力学】第1章 流体及其主要物理性质,流体的粘性,压缩性,流体的质量力和表面力(西北工业大学)
  • TCP和UDP区别,各自的应用场景
  • Java开发工具IDEA
  • VIVADO IP核之DDS直接数字频率合成器使用详解
  • Vue3 插槽 使用笔记
  • Vue2与Vue3响应式原理对比
  • Android系统Android.bp文件详解
  • eNSP 华为静态路由配置
  • Type-C PD芯片:引领智能充电与数据传输的新时代
  • 天气查询 免费
  • VC 与 VS(visual studio) 的对应版本
  • Qt使用lupdate工具生成.ts文件
  • 编程-设计模式 1:工厂方法模式
  • Linux 快速构建LAMP环境
  • 【C/C++】语言基础知识总复习
  • 【漏洞修复】Tomcat中间件漏洞
  • 10.动态路由绑定怎么做
  • 操作ArkTS页面跳转及路由相关心得
  • Vue2-低版本编译兼容-基础语法-data-methods-双向数据绑定v-model
  • 提取“c语言的函数定义“脚本
  • pytorch学习(十二):对现有的模型进行修改
  • 服务器虚拟内存是什么?虚拟内存怎么设置?
  • 深度学习入门指南(1) - 从chatgpt入手
  • Python学习笔记(六)
  • 大数据安全规划总体方案(45页PPT)
  • 第20周:Pytorch文本分类入门
  • 记一次 SpringBoot2.x 配置 Fastjson请求报 internal server 500
  • OSPF笔记