DeepSeek    LeetCode 3636. 查询超过阈值频率最高元素 Java实现
核心解题思路这道题是典型的静态区间众数查询问题。最直接的方法是预处理每个元素出现的位置然后对每个查询在候选元素中二分统计区间频率复杂度在题目的约束下是可行的 (n ≤ 10^4, queries ≤ 5*10^4)。更高效的解法是分块预处理把数组分成大小约为 sqrt(n) 的块预处理出 pmx[i][j] 表示第 i 块到第 j 块的众数。查询时将区间分为“中间完整块 左右零散部分”候选众数只可能是中间块的预处理的众数以及左右零散部分出现过的元素。用位置列表 二分查找来统计这些候选元素在区间内的实际出现次数找出满足阈值且频率最高的最小元素。Java 实现1. 方案一位置列表 二分查找简单版javaimport java.util.*;class Solution {public int[] subarrayMajority(int[] nums, int[][] queries) {// 1. 预处理每个元素的所有出现位置MapInteger, ListInteger pos new HashMap();for (int i 0; i nums.length; i) {pos.computeIfAbsent(nums[i], k - new ArrayList()).add(i);}int[] ans new int[queries.length];for (int i 0; i queries.length; i) {int l queries[i][0], r queries[i][1], threshold queries[i][2];int bestNum -1, bestFreq 0;// 2. 遍历所有不同的元素作为候选可优化为只遍历高频候选for (Map.EntryInteger, ListInteger entry : pos.entrySet()) {int num entry.getKey();ListInteger list entry.getValue();// 二分查找区间 [l, r] 内的出现次数int left lowerBound(list, l);int right upperBound(list, r);int freq right - left;if (freq threshold) {if (freq bestFreq || (freq bestFreq num bestNum)) {bestFreq freq;bestNum num;}}}ans[i] bestNum;}return ans;}private int lowerBound(ListInteger list, int target) {int lo 0, hi list.size();while (lo hi) {int mid lo (hi - lo) / 2;if (list.get(mid) target) lo mid 1;else hi mid;}return lo;}private int upperBound(ListInteger list, int target) {int lo 0, hi list.size();while (lo hi) {int mid lo (hi - lo) / 2;if (list.get(mid) target) lo mid 1;else hi mid;}return lo;}}2. 方案二分块最优解ACjavaimport java.util.*;class Solution {public int[] subarrayMajority(int[] nums, int[][] queries) {return new BlockDiv(nums).queryAll(queries);}class BlockDiv {private int n, size, blockCnt;private int[] nums;private int[][] pmx; // pmx[i][j] 块 i 到块 j 的众数private MapInteger, ListInteger pos;public BlockDiv(int[] nums) {this.n nums.length;this.size (int) Math.sqrt(n) 1;this.blockCnt (n size - 1) / size;this.nums nums;// 预处理块间众数pmx new int[blockCnt][blockCnt];for (int i 0; i blockCnt; i) {MapInteger, Integer cnt new HashMap();int mode 0, maxCnt 0;for (int j i; j blockCnt; j) {for (int k j * size; k Math.min((j 1) * size, n); k) {int num nums[k];int c cnt.getOrDefault(num, 0) 1;cnt.put(num, c);if (c maxCnt || (c maxCnt num mode)) {maxCnt c;mode num;}}pmx[i][j] mode;}}// 预处理每个元素的位置列表pos new HashMap();for (int i 0; i n; i) {pos.computeIfAbsent(nums[i], k - new ArrayList()).add(i);}}// 查询区间 [l, r] 的答案private int query(int l, int r, int threshold) {int lb l / size, rb r / size;// 同一块或相邻块暴力统计if (lb rb || lb 1 rb) {MapInteger, Integer cnt new HashMap();int mode 0, maxCnt 0;for (int i l; i r; i) {int num nums[i];int c cnt.getOrDefault(num, 0) 1;cnt.put(num, c);if (c maxCnt || (c maxCnt num mode)) {maxCnt c;mode num;}}return maxCnt threshold ? mode : -1;}// 候选众数中间块的众数 左/右零散部分的所有元素ListInteger candidates new ArrayList();candidates.add(pmx[lb 1][rb - 1]);for (int i l; i (lb 1) * size; i) candidates.add(nums[i]);for (int i rb * size; i r; i) candidates.add(nums[i]);int bestNum -1, bestFreq 0;for (int num : candidates) {ListInteger list pos.get(num);if (list null) continue;int left lowerBound(list, l);int right upperBound(list, r);int freq right - left;if (freq threshold) {if (freq bestFreq || (freq bestFreq num bestNum)) {bestFreq freq;bestNum num;}}}return bestNum;}public int[] queryAll(int[][] queries) {int[] res new int[queries.length];for (int i 0; i queries.length; i) {res[i] query(queries[i][0], queries[i][1], queries[i][2]);}return res;}private int lowerBound(ListInteger list, int target) {int lo 0, hi list.size();while (lo hi) {int mid lo (hi - lo) / 2;if (list.get(mid) target) lo mid 1;else hi mid;}return lo;}private int upperBound(ListInteger list, int target) {int lo 0, hi list.size();while (lo hi) {int mid lo (hi - lo) / 2;if (list.get(mid) target) lo mid 1;else hi mid;}return lo;}}}复杂度· 方案一预处理 O(n)每次查询 O(U log n)U 为不同元素个数最坏 O(n log n)· 分块方案预处理 O(n√n)每次查询 O(√n log n)

相关新闻

Unity TextMeshPro字体背景框Bug:Shader调试与SDF渲染原理深度解析

Unity TextMeshPro字体背景框Bug:Shader调试与SDF渲染原理深度解析

1. 项目概述:从一次恼人的UI Bug说起 最近在做一个Unity项目,UI部分自然用上了TextMeshPro(简称TMP),这几乎是Unity UI开发的标配了。功能开发一切顺利,直到测试同学丢过来一张截图,问我&#x…

2026/10/11 13:38:01 阅读更多 →
C++插件框架设计:从动态库加载到工业级实现全解析

C++插件框架设计:从动态库加载到工业级实现全解析

1. 项目概述:为什么我们需要一个C插件框架? 在桌面应用、游戏引擎、音视频处理软件,甚至是大型服务器后台的开发中,我们常常会遇到一个核心矛盾:如何在保持核心系统稳定、高效的同时,又能灵活地扩展功能&am…

2026/10/9 9:21:22 阅读更多 →
单片机芯片烧录全流程解析与实战指南

单片机芯片烧录全流程解析与实战指南

1. 芯片烧录与程序下载基础认知当第一次接触单片机开发时,很多新手会对"烧录"这个术语感到困惑。其实在电子工程领域,烧录(Programming)指的是将编译好的机器码写入芯片内部存储器的过程,就像给空白的笔记本…

2026/10/8 19:26:21 阅读更多 →

最新新闻

软件系统项目实施方案怎么写?六个板块与避坑指南

软件系统项目实施方案怎么写?六个板块与避坑指南

简介:面向互联网领域的软件项目立项与交付场景,这份方案文档系统梳理了从需求分析、总体设计、详细设计到系统开发、实施试运行、验收及正式维护的完整项目周期,并覆盖项目管理组织、范围、进度、风险、质量、配置、文档与保密等关键模块&…

2026/10/12 12:47:59 阅读更多 →
优先队列实战指南:从二叉堆原理到Top-K与任务调度

优先队列实战指南:从二叉堆原理到Top-K与任务调度

PriorityQueue这个类,在各种语言的底层库里都存在,但很多开发者对它的认识停留在“一个会自动排序的队列”这种程度。实际用下来,它是一门非常重要的算法数据结构,在任务调度、Top-K问题、图搜索、事件驱动等场景里都是心脏级别的…

2026/10/12 12:47:59 阅读更多 →
软考高项成本管理:估算、预算与挣值分析考点精讲

软考高项成本管理:估算、预算与挣值分析考点精讲

备考软考高项的考生,一提到项目成本管理,很多人第一反应就是背公式、算挣值。这个章节确实贯穿上午选择题和下午案例题,是拿分性价比非常高的部分——它不依赖死记硬背,更看重对管理逻辑的理解。第11章的上半部分主要在讲成本管理…

2026/10/12 12:47:58 阅读更多 →
Linux图形栈分层详解:X.Org、GTK、Qt与GNOME/KDE的关系

Linux图形栈分层详解:X.Org、GTK、Qt与GNOME/KDE的关系

很多人第一次接触 Linux 桌面时,都会被这一串名字绕晕:X Window、X.Org、GTK、Qt、GNOME、KDE,看起来都跟“图形界面”有关,但到底谁是谁?我之前带新人时发现,最有效的解释方式不是按名词一个个背&#xff…

2026/10/12 12:47:58 阅读更多 →
Zynq7020开发板Linux实验全流程:从环境搭建到PL端协同开发

Zynq7020开发板Linux实验全流程:从环境搭建到PL端协同开发

1. 为什么这块Zynq7020开发板值得拿来跑Linux实验手里这块Zynq7020开发板,在嵌入式圈子里算是老面孔了。它最特别的地方在于芯片内部同时集成了ARM Cortex-A9双核处理器(PS端)和FPGA可编程逻辑(PL端),这种&…

2026/10/12 12:47:58 阅读更多 →
openai/gpt-oss-120b 接入 TaoToken 统一 Key 通道:从 endpoint 到 Base URL 的可复制配置

openai/gpt-oss-120b 接入 TaoToken 统一 Key 通道:从 endpoint 到 Base URL 的可复制配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 12:46:57 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →