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

Leetcode 3624. Number of Integers With Popcount-Depth Equal to K II

  • Leetcode 3624. Number of Integers With Popcount-Depth Equal to K II
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3624. Number of Integers With Popcount-Depth Equal to K II

1. 解题思路

这一题就是一个segment tree的变体,唯一的区别在于其操作不同于一般的简单求和或者求最大最小值,而是返回一个合并后的Counter即可。

而关于segment tree的相关内容,网络上实在是有很多了,我自己反正也有一篇博客《经典算法:Segment Tree》作为备忘,这里就不过多展开了,有兴趣的读者自己查查了解下即可。

2. 代码实现

给出python代码实现如下:

class SegmentTree:def __init__(self, arr):self.length = len(arr)self.tree = self.build(arr)def feature_func(self, *args):ret = defaultdict(int)for cnt in args:for k, v in cnt.items():ret[k] += vreturn retdef build(self, arr):n = len(arr)tree = [defaultdict(int) for _ in range(2*n)]for i in range(n):tree[i+n][arr[i]] += 1for i in range(n-1, 0, -1):tree[i] = self.feature_func(tree[i<<1], tree[(i<<1) | 1])return treedef update(self, idx, val):idx = idx + self.lengthself.tree[idx] = defaultdict(int)self.tree[idx][val] += 1while idx > 1:self.tree[idx>>1] = self.feature_func(self.tree[idx], self.tree[idx ^ 1])idx = idx>>1returndef query(self, lb, rb):lb += self.length rb += self.lengthnodes = []while lb < rb:if lb & 1 == 1:nodes.append(self.tree[lb])lb += 1if rb & 1 == 0:nodes.append(self.tree[rb])rb -= 1lb = lb >> 1rb = rb >> 1if lb == rb:nodes.append(self.tree[rb])return self.feature_func(*nodes)class Solution:def popcountDepth(self, nums: List[int], queries: List[List[int]]) -> List[int]:def fn(num):if num == 1:return 0num = Counter(bin(num)[2:])["1"]return 1 + fn(num)nums = [fn(num) for num in nums]segment_tree = SegmentTree(nums)ans = []for query in queries:if len(query) == 3:_, idx, val = querysegment_tree.update(idx, fn(val))else:_, l, r, k = querycnt = segment_tree.query(l, r)ans.append(cnt[k])return ans

提交代码评测得到:耗时6716ms,占用内存94.28MB。

http://www.dtcms.com/a/290317.html

相关文章:

  • nerf-2020
  • Python 列表操作—基础和进阶技巧
  • spring简单项目实战
  • H3C技术考核
  • ACE 插入元件
  • SQL审计、Archery实战记录
  • 深入解析Hadoop YARN:三层调度模型与资源管理机制
  • [Python]函数调用链中局部变量的内存影响:通过memory_profiler分析
  • AR巡检和传统巡检的区别
  • 在 Angular 应用程序中使用 Genkit 的完整指南
  • 基于ArcFace损失函数训练的人脸特征提取模型
  • IDEA 同时修改某个区域内所有相同变量名
  • AR技术:应急响应的加速利器
  • AR技术:石化行业培训的“游戏规则改变者”
  • Swap Face 使用遇到的问题
  • 识别PDF中的二维码
  • ASP.NET Core Web API 中集成 DeveloperSharp.RabbitMQ
  • (二)Unity3d-ROS联合仿真:运行Unity-Robotics-Hub
  • java解析nc气象数据
  • HOT100——图篇Leetcode207. 课程表
  • Trae开发uni-app+Vue3+TS项目飘红踩坑
  • Cosmos
  • PostgreSQL 终端命令详解及实际应用案例
  • 【LINUX操作系统】搭建web网络服务器
  • Softhub软件下载站实战开发(二十):Docker部署全攻略
  • 前后端分离项目进阶1---前端
  • 对称加密技术详解:原理、算法与实际应用
  • 在本地WSL中的CentOS 7子系统中部署Ewomail邮件服务器
  • 面试150 全排列
  • Claude Code 启动提示 Note: Claude Code might not be available in your country. 解决