DeepSeek    LeetCode 3636. 查询超过阈值频率最高元素 Rust实现
核心解题思路这道题是静态区间众数查询问题。最优解法是分块预处理 位置列表二分查找1. 分块将数组分成大小为 √n 的块2. 预处理块间众数pmx[i][j] 表示从块 i 到块 j 的众数3. 位置列表每个元素的所有出现位置用于二分统计频率4. 查询优化候选众数 中间完整块的众数 左右零散部分的所有元素Rust 实现1. 方案一分块最优解rustuse std::collections::HashMap;use std::cmp::Ordering;impl Solution {pub fn subarray_majority(nums: Veci32, queries: VecVeci32) - Veci32 {let n nums.len();let size (n as f64).sqrt() as usize 1;let block_cnt (n size - 1) / size;// 1. 预处理每个元素的所有出现位置let mut pos: HashMapi32, Vecusize HashMap::new();for (i, num) in nums.iter().enumerate() {pos.entry(num).or_insert_with(Vec::new).push(i);}// 2. 预处理块间众数 pmx[i][j]let mut pmx vec![vec![0; block_cnt]; block_cnt];for i in 0..block_cnt {let mut cnt: HashMapi32, usize HashMap::new();let mut mode 0;let mut max_cnt 0;for j in i..block_cnt {let start j * size;let end std::cmp::min((j 1) * size, n);for k in start..end {let num nums[k];let c cnt.entry(num).or_insert(0);*c 1;let c *c;if c max_cnt || (c max_cnt num mode) {max_cnt c;mode num;}}pmx[i][j] mode;}}// 辅助函数统计元素 x 在区间 [l, r] 内的出现次数let count_freq |x: i32, l: usize, r: usize| - usize {if let Some(lst) pos.get(x) {let left lst.binary_search(l).unwrap_or_else(|e| e);let right lst.binary_search((r 1)).unwrap_or_else(|e| e);return right - left;}0};// 3. 处理每个查询let mut ans Vec::with_capacity(queries.len());for query in queries {let l query[0] as usize;let r query[1] as usize;let threshold query[2] as usize;let lb l / size;let rb r / size;// 同一块或相邻块直接暴力统计if lb rb || lb 1 rb {let mut cnt: HashMapi32, usize HashMap::new();let mut mode 0;let mut max_cnt 0;for i in l..r {let num nums[i];let c cnt.entry(num).or_insert(0);*c 1;let c *c;if c max_cnt || (c max_cnt num mode) {max_cnt c;mode num;}}ans.push(if max_cnt threshold { mode } else { -1 });continue;}// 候选众数中间块的众数 左右零散部分的所有元素let mut candidates Vec::new();candidates.push(pmx[lb 1][rb - 1]);// 左零散部分 [l, (lb1)*size - 1]for i in l..(lb 1) * size {candidates.push(nums[i]);}// 右零散部分 [rb*size, r]for i in rb * size..r {candidates.push(nums[i]);}// 去重优化candidates.sort_unstable();candidates.dedup();// 统计每个候选的频率let mut best_num -1;let mut best_freq 0;for num in candidates {let freq count_freq(num, l, r);if freq threshold {if freq best_freq || (freq best_freq num best_num) {best_freq freq;best_num num;}}}ans.push(best_num);}ans}}2. 方案二优化版使用 BTreeMap 保持顺序rustuse std::collections::{HashMap, BTreeMap};use std::cmp::Ordering;impl Solution {pub fn subarray_majority(nums: Veci32, queries: VecVeci32) - Veci32 {let n nums.len();let size (n as f64).sqrt() as usize 1;let block_cnt (n size - 1) / size;// 预处理位置列表let mut pos: HashMapi32, Vecusize HashMap::new();for (i, num) in nums.iter().enumerate() {pos.entry(num).or_insert_with(Vec::new).push(i);}// 预处理块间众数let mut pmx vec![vec![0; block_cnt]; block_cnt];for i in 0..block_cnt {let mut cnt: HashMapi32, usize HashMap::new();let mut mode 0;let mut max_cnt 0;for j in i..block_cnt {let start j * size;let end std::cmp::min((j 1) * size, n);for k in start..end {let num nums[k];let c cnt.entry(num).or_insert(0);*c 1;let c *c;if c max_cnt || (c max_cnt num mode) {max_cnt c;mode num;}}pmx[i][j] mode;}}// 统计频率的闭包let count_freq |x: i32, l: usize, r: usize| - usize {pos.get(x).map(|lst| {let left lst.binary_search(l).unwrap_or_else(|e| e);let right lst.binary_search((r 1)).unwrap_or_else(|e| e);right - left}).unwrap_or(0)};// 处理查询queries.into_iter().map(|q| {let l q[0] as usize;let r q[1] as usize;let threshold q[2] as usize;let lb l / size;let rb r / size;// 相邻块暴力if lb rb || lb 1 rb {let mut cnt: HashMapi32, usize HashMap::new();let mut mode 0;let mut max_cnt 0;for i in l..r {let num nums[i];let c cnt.entry(num).or_insert(0);*c 1;let c *c;if c max_cnt || (c max_cnt num mode) {max_cnt c;mode num;}}return if max_cnt threshold { mode } else { -1 };}// 构建候选集let mut candidates Vec::with_capacity((rb - lb 1) * 2 1);candidates.push(pmx[lb 1][rb - 1]);// 左右边界元素for i in l..(lb 1) * size {candidates.push(nums[i]);}for i in rb * size..r {candidates.push(nums[i]);}// 去重并排序candidates.sort_unstable();candidates.dedup();// 找最优解let mut best (-1, 0); // (num, freq)for num in candidates {let freq count_freq(num, l, r);if freq threshold (freq best.1 || (freq best.1 num best.0)) {best (num, freq);}}best.0}).collect()}}3. 方案三简单版适合小数据rustuse std::collections::HashMap;impl Solution {pub fn subarray_majority(nums: Veci32, queries: VecVeci32) - Veci32 {// 预处理每个元素的出现位置let mut pos: HashMapi32, Vecusize HashMap::new();for (i, num) in nums.iter().enumerate() {pos.entry(num).or_insert_with(Vec::new).push(i);}// 统计频率的闭包let count_freq |x: i32, l: usize, r: usize| - usize {if let Some(lst) pos.get(x) {let left lst.binary_search(l).unwrap_or_else(|e| e);let right lst.binary_search((r 1)).unwrap_or_else(|e| e);return right - left;}0};// 处理每个查询queries.iter().map(|q| {let l q[0] as usize;let r q[1] as usize;let threshold q[2] as usize;let mut best_num -1;let mut best_freq 0;// 遍历所有不同元素for (num, _) in pos.iter() {let freq count_freq(num, l, r);if freq threshold {if freq best_freq || (freq best_freq num best_num) {best_freq freq;best_num num;}}}best_num}).collect()}}复杂度分析方案 预处理时间 单次查询时间 空间复杂度分块 O(n√n) O(√n log n) O(n √n²) O(n)简单版 O(n) O(U log n) O(n)关键要点1. 分块大小sqrt(n) 平衡预处理和查询复杂度2. 位置列表使用二分查找快速统计频率3. 候选优化只需检查中间块众数和边界元素4. 去重候选列表去重减少重复统计5. Rust 特性使用 HashMap、Vec::binary_search、闭包等测试示例rust// 在 Solution 结构体中fn main() {let nums vec![1, 3, 2, 3, 3, 2, 2, 1];let queries vec![vec![0, 7, 3],vec![0, 4, 2],vec![1, 5, 3],];let result Solution::subarray_majority(nums, queries);println!({:?}, result); // 输出: [2, 3, -1]}

相关新闻

Geist字体家族:解决现代数字设计字体难题的完整方案

Geist字体家族:解决现代数字设计字体难题的完整方案

Geist字体家族:解决现代数字设计字体难题的完整方案 【免费下载链接】geist-font 项目地址: https://gitcode.com/gh_mirrors/ge/geist-font 你可能遇到过这样的困扰:设计网页时找不到合适的字体组合,写代码时眼睛疲劳看不清字符&…

2026/7/21 18:12:09 阅读更多 →
轻松搞定跨平台资源管理:智能下载器让素材收集效率提升10倍

轻松搞定跨平台资源管理:智能下载器让素材收集效率提升10倍

轻松搞定跨平台资源管理:智能下载器让素材收集效率提升10倍 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 还在为…

2026/7/23 9:39:35 阅读更多 →
深度解析:鸣潮游戏模组AES加密破解与PAK文件修改技术实践

深度解析:鸣潮游戏模组AES加密破解与PAK文件修改技术实践

深度解析:鸣潮游戏模组AES加密破解与PAK文件修改技术实践 【免费下载链接】wuwa-mod Wuthering Waves pak mods 项目地址: https://gitcode.com/GitHub_Trending/wu/wuwa-mod 鸣潮模组(WuWa-Mod)是一个专注于《鸣潮》游戏的高级模组开…

2026/7/21 18:12:13 阅读更多 →

最新新闻

大一学生想学数据分析,先学 Excel 还是 AI 工具?

大一学生想学数据分析,先学 Excel 还是 AI 工具?

刚踏入大学校园,不少经管、人文、计算机专业的新生都萌生了学习数据分析的想法,但几乎所有人都会陷入同一个选择困境:入门阶段优先深耕 Excel,还是直接上手各类 AI 分析工具?当下生成式 AI 普及,很多短视频…

2026/7/24 0:49:45 阅读更多 →
大学生想做数据分析,大学四年完整准备路径

大学生想做数据分析,大学四年完整准备路径

在数字化转型加速的当下,数据分析已成为互联网、金融、零售、制造业通用核心岗位。LinkedIn 2026 年统计 2500 条国内数据分析招聘需求显示,SQL、Python、可视化工具、AI 辅助分析四大能力是企业筛选应届生的硬性标准,仅 32% 应届毕业生在校完…

2026/7/24 0:49:45 阅读更多 →
Power BI | 为啥你的 Power BI 刷新巨慢?

Power BI | 为啥你的 Power BI 刷新巨慢?

数据源慢?服务器性能不够? 为什么你的报表刷新巨慢,可能是你没搞懂查询折叠✦ 本期核心问题 不是数据源慢,是你把1200万行全拉到本地算。 01、刷新6分钟,谁都不承认 小李负责的销售日报,每天早上8:30自动刷…

2026/7/24 0:49:45 阅读更多 →
从注射到口服:Lipfendra如何重塑高胆固醇血症长期管理的日常场景【海得康】

从注射到口服:Lipfendra如何重塑高胆固醇血症长期管理的日常场景【海得康】

高LDL-C是动脉粥样硬化性心血管疾病的核心可控危险因素,而ASCVD至今仍是全球排名第一的死亡原因,全球范围内有超过数亿患者需要长期接受强化降脂治疗。过去数十年间,临床降脂治疗始终存在难以破解的“疗效与便捷性矛盾”:他汀类药…

2026/7/24 0:49:45 阅读更多 →
WAIC2026 洞察:具身智能驶入量产时代,望获 OS 筑牢国产实体 AI 底层根基

WAIC2026 洞察:具身智能驶入量产时代,望获 OS 筑牢国产实体 AI 底层根基

为期数日的 2026 世界人工智能大会(WAIC)圆满落幕,作为全球人工智能产业风向标,本届大会清晰勾勒出行业迭代新方向。过往数年,人形机器人、服务机器人参展,大多以舞蹈互动、特技翻转、趣味展演吸引观众目光…

2026/7/24 0:48:45 阅读更多 →
Spring 源码系列(8): 依赖注入(DI)在源码里如何发生

Spring 源码系列(8): 依赖注入(DI)在源码里如何发生

引子 你只写了 Autowired private UserService userService;,对象就自动出现了。这背后 Spring 到底做了什么? 本篇回答三件事:① DI 发生在哪一步;② Autowired 和 Resource 的区别在源码层如何体现;③ 字段 / 构造器…

2026/7/24 0:48:45 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻