LeetCode315 计算右侧小于当前元素的个数(树状数组)
离散化+树状数组
class Solution:
def countSmaller(self, nums: List[int]) -> List[int]:
clean = list(set(nums))
clean.sort()
n = len(clean)
bit = [0] * (n + 1)
def lowbit(x): return x & (-x)
def add(pos, x):
if pos < 1: return
while pos <= n:
bit[pos] += x
pos += lowbit(pos)
def query(pos):
count = 0
while pos > 0:
count += bit[pos]
pos -= lowbit(pos)
return count
rank, l, ans = {}, len(nums), []
for i in range(n): rank[clean[i]] = i + 1
for i in range(l - 1, -1, -1):
cur = query(rank[nums[i]] - 1)
ans.append(cur)
add(rank[nums[i]], 1)
ans.reverse()
return ans
分类:
ACM
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧