尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

LeetCode 每日一题笔记 日期:2026.06.25 题目:3737. 统计主要元素子数组数目 I

LeetCode 每日一题笔记 日期:2026.06.25 题目:3737. 统计主要元素子数组数目 I
📅 发布时间:2026/6/25 18:58:52

LeetCode 每日一题笔记

0. 前言

  • 日期:2026.06.25
  • 题目:3737. 统计主要元素子数组数目 I
  • 难度:中等
  • 标签:数组、前缀和、哈希表

1. 题目理解

问题描述
给定数组nums和整数target,统计连续非空子数组数量,满足target是该子数组的主要元素。
主要元素定义:该数字在子数组出现次数严格大于子数组长度的一半。
转换条件:将target记 +1,其余数字记 -1,子数组区间前缀和 > 0 等价于满足条件。

示例

输入:nums = [1,2,2,3], target = 2
输出:5
解释:合法子数组为 [2]、[2]、[2,2]、[2,2,3]、[1,2,2],共5个。

2. 解题思路

核心观察

  1. 数值映射:nums[j]==target→ +1,其他 → -1;区间和>0 即满足主要元素条件。
  2. 暴力双层循环枚举全部子数组,累加合法计数;优化方案用前缀和+哈希表将复杂度从O(n2)O(n^2)O(n2)降至O(n)O(n)O(n)。
  3. 设前缀和preSum[j],区间[i,j]和 >0 等价preSum[j] - preSum[i-1] > 0→preSum[i-1] < preSum[j]。

算法步骤

暴力版:

  1. 枚举子数组起点i;
  2. 从i向后累加映射值sum;
  3. sum>0则计数+1;
  4. 遍历完成返回总数。

优化前缀和哈希版:

  1. 维护前缀和与哈希表统计历史前缀和频次;
  2. 遍历更新当前前缀和,累加哈希表中小于当前值的前缀和数量;
  3. 将当前前缀和存入哈希表,最终返回总计数。

3. 代码实现

packagelc3737;classSolution{publicintcountMajoritySubarrays(int[]nums,inttarget){intn=nums.length;intans=0;for(inti=0;i<n;i++){intsum=0;for(intj=i;j<n;j++){sum+=nums[j]==target?1:-1;if(sum>0)ans++;}}returnans;}}

4. 代码优化说明

importjava.util.HashMap;classSolution{publicintcountMajoritySubarrays(int[]nums,inttarget){// 哈希表存储前缀和出现次数,初始前缀和0出现1次HashMap<Integer,Integer>map=newHashMap<>();map.put(0,1);intpreSum=0,res=0;for(intnum:nums){// 映射转换,简化三元运算分支preSum+=num==target?1:-1;// 累加所有小于当前preSum的历史前缀和数量,替代内层循环map.forEach((k,v)->{if(k<preSum)res+=v;});map.put(preSum,map.getOrDefault(preSum,0)+1);}returnres;}}

5. 复杂度分析

  • 双层暴力循环原版
    时间复杂度:O(n2)O(n^2)O(n2),两层嵌套枚举所有子数组,适合小数组;存在内层if判断分支。
    空间复杂度:O(1)O(1)O(1),仅常数临时变量。
  • 前缀和哈希优化版
    时间复杂度:O(n)O(n)O(n),单次遍历数组,哈希查询统计替代二层循环,大幅减少循环次数。
    空间复杂度:O(n)O(n)O(n),哈希表存储全部前缀和;消除二层循环,仅保留必要条件判断。

6. 总结

  • 核心:数值映射转化问题为区间前缀和大于0计数;
  • 优化亮点:前缀和+哈希表消去二层循环,降低时间复杂度;减少循环嵌套分支,提升大数据下运行效率;
  • 关键转换:target次数 > 子数组长度/2等价区间映射和 > 0,是解题核心数学转化。

相关新闻

  • 如何用Outfit字体快速打造专业品牌视觉?9种字重免费开源指南
  • 深入Star Citizen p4k文件解压:技术原理与实战应用
  • 经典算法专区:找树左下角的值(一)

最新新闻

  • 【课程设计/毕业设计】基于 Django 的网络设备分时租赁管理系统设计与实现 基于 Django 的一体化网络设备租赁管控系统设计与实现【附源码、数据库、万字文档】
  • 揭秘Ryujinx:深度解析C构建的高性能Nintendo Switch模拟器实战指南
  • 计算机毕业设计之基于jsp的超市进货管理系统设计与实现
  • Java国密SM4算法实战:从原理到CBC模式完整实现
  • LangChain 文本分割器完全指南:从原理到实战选择
  • API安全实战指南:从OWASP Top 10威胁到微服务防护体系构建

日新闻

  • 利用微PE工具箱进行系统安装教程
  • 渗透测试十大核心工具实战指南:从信息搜集到报告生成全流程解析
  • 暗黑破坏神2存档编辑器:网页版角色修改工具完全指南

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号