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

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

题目:

题解:

class Solution:def countRangeSum(self, nums: List[int], lower: int, upper: int) -> int:pre = list(accumulate(nums, initial=0))nums = sorted(pre)mx = len(nums)b = BIT(mx + 1)ans = 0# 统计[x-upper,x-lower]的个数for i, x in enumerate(pre):j = bisect_left(nums, x) + 1r = bisect_right(nums, x - lower)    # <= x - lower , 注意原先应该-1,但是下标从1开始再+1l = bisect_left(nums, x - upper)     # < x - lower , 注意原先应该-1,但是下标从1开始再+1ans += b.query(r) - b.query(l)b.add(j, 1)return ansclass BIT:def __init__(self, n: int):self.tree = [0] * n  # 树状数组self.original = [0] * n  # 原数组def update(self, i: int, val: int) -> None:self.original[i] = max(self.original[i], val)while i < len(self.tree):self.tree[i] = max(self.tree[i], val)i += i & -idef query_max(self, L: int, R: int) -> int:mx = 0while R >= L:r = R & (R - 1)# 查询先进行比较,看下一个r在不在查询范围内if r >= L:# 在查询范围内,直接从树状数组拿值比较mx = max(mx, self.tree[R])R = relse:# 只走一步,从原数组拿值比较mx = max(mx, self.original[R])R -= 1return mx# 统计 <= R 的元素个数def query(self, R: int) -> int:res = 0while R > 0:res += self.tree[R]R &= (R - 1)return resdef add(self, i: int, val: int) -> None:while i < len(self.tree):self.tree[i] += vali += i & -i

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 深入理解 AWS CodePipeline
  • leetcode169:多数元素
  • 使用 宝塔面板 部署 php网站
  • 操作系统|day4.Linux、Linux内核、Linux负载、Linux文件存储
  • Java Bean Validation 注解:@NotEmpty、@NotBlank 和 @NotNull 的区别
  • 笔面试编程题总结
  • 详解pd.pivot_table
  • 计算机网络——网络层(多协议标签交换MPLS、软件定义网络SDN)
  • SQL Server端口设置完整详细步骤
  • 900565Z error Failed opening bolt
  • C# 设计模式之装饰器模式
  • 在Linux中宏观的看待线程
  • leetcode17. 电话号码的字母组合,dfs深度优先搜索
  • JC/T 2436-2018 木塑家具板材检测
  • Java 中的 ArrayList 和 LinkedList 在性能上有什么不同?
  • css选择器
  • Django 博客开发教程 8 - 博客文章详情页
  • JavaScript DOM 10 - 滚动
  • Javascript基础之Array数组API
  • Python中eval与exec的使用及区别
  • 大数据与云计算学习:数据分析(二)
  • 回顾 Swift 多平台移植进度 #2
  • 基于Android乐音识别(2)
  • 计算机常识 - 收藏集 - 掘金
  • 聚类分析——Kmeans
  • 力扣(LeetCode)22
  • 你不可错过的前端面试题(一)
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 软件开发学习的5大技巧,你知道吗?
  • 移动端解决方案学习记录
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • ​MySQL主从复制一致性检测
  • ​比特币大跌的 2 个原因
  • ​力扣解法汇总946-验证栈序列
  • # Panda3d 碰撞检测系统介绍
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #DBA杂记1
  • #Java第九次作业--输入输出流和文件操作
  • #pragma预处理命令
  • (3)llvm ir转换过程
  • (c语言)strcpy函数用法
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (回溯) LeetCode 131. 分割回文串
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
  • .“空心村”成因分析及解决对策122344
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .NET Core 项目指定SDK版本
  • .Net IOC框架入门之一 Unity
  • .NET MAUI Sqlite程序应用-数据库配置(一)
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道