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

剑指offer-28、数组中出现次数超过⼀半的数字

剑指offer-28、数组中出现次数超过⼀半的数字
📅 发布时间:2026/6/17 18:25:24

题⽬描述

数组中有⼀个数字出现的次数超过数组⻓度的⼀半,请找出这个数字。例如输⼊⼀个⻓度为 9 的数组 {1,2,3,2,2,2,5,4,2} 。由于数字 2 在数组中出现了 5 次,超过数组⻓度的⼀半,因此输出 2 。如果不存在则输出 0 。

思路及解答

哈希表法(HashMap)

哈希表法通过统计每个数字的出现次数来解决问题。遍历数组时,使用哈希表记录每个数字出现的次数,一旦发现某个数字的出现次数超过数组长度的一半,立即返回该数字。

public class Solution {public int MoreThanHalfNum(int[] nums) {// 创建哈希表,key为数字,value为出现次数Map<Integer, Integer> map = new HashMap<>();for (int num : nums) {// 获取当前数字的出现次数并加1,若不存在则初始化为0再加1int count = map.getOrDefault(num, 0) + 1;// 若当前数字出现次数已超过数组长度一半,则返回该数字if (count > nums.length / 2) {return num;}map.put(num, count); // 更新哈希表}return 0; // 如果不存在多数元素,返回0(但题目假设总是存在)}
}
  • 时间复杂度​:O(n),其中 n 是数组的长度。我们只需遍历数组一次。
  • ​空间复杂度​:O(n),最坏情况下需要存储所有不同的数字。

排序法

排序法的思路非常巧妙:​由于多数元素的数量超过数组长度的一半,那么将数组排序后,中间位置的元素一定是多数元素。

public class Solution {public int majorityElement(int[] nums) {Arrays.sort(nums); // 对数组进行排序return nums[nums.length / 2]; // 返回中间位置的元素}
}

摩尔投票法(Boyer-Moore Voting Algorithm)

  1. 如果使⽤ hashmap 直接统计,需要额外的空间,我们不希望使⽤额外空间;
  2. 如果使⽤排序之后再统计,需要时间复杂度为O(nlogn), 我们希望时间复杂度更低⼀点。

摩尔投票法是一种高效且空间复杂度低的算法。其核心思想是通过票数的抵消来找出多数元素。算法维护一个候选众数 candidate 和其票数 count。遍历数组时,若 count 为0,则选择当前数字作为候选;若当前数字与候选相同,则票数加1,否则减1。由于多数元素的存在,最终剩下的候选一定是多数元素。

public class Solution {public int majorityElement(int[] nums) {int candidate = 0; // 候选众数int count = 0;     // 票数统计for (int num : nums) {if (count == 0) { // 如果票数为0,选择当前数字作为候选candidate = num;}// 如果当前数字与候选相同,则票数加1,否则减1count += (num == candidate) ? 1 : -1;}// 可选:验证candidate是否真的是多数元素(根据题目假设,通常不需要)// 但如果题目要求不存在多数元素时返回0,则需要验证步骤count = 0;for (int num : nums) {if (num == candidate) count++;}return count > nums.length / 2 ? candidate : 0;}
}
  • 时间复杂度​:O(n),只需遍历数组两次(一次投票,一次验证)。
  • ​空间复杂度​:O(1),只使用了常数个额外变量

本文来自在线网站:seven的菜鸟成长之路,作者:seven,转载请注明原文链接:www.seven97.top

相关新闻

  • Redis是如何高效管理有限内存的?
  • PB9的数据窗口中文说明
  • PyPI包名的命名规则与pip的兼容性机制——为什么pip install sCIKit.-_LEarN也能成功

最新新闻

  • 北京黄金回收实用全指南:5家正规门店深度评测,附地址与避坑攻略 - 互联网科技品牌测评
  • 2026年辽宁资产评估专业报考指南:择校思路与院校简析 - 品牌2026
  • 3大理由:为什么开源音频编辑器Audacity能成为创作神器?
  • ⚠️2026年6月海淀LV回收清单|别盲目出手!选错门店直接亏损 - 逸程
  • 济南梵克雅宝首饰回收测评:2026年七家机构实力排行,添价收珠宝鉴定专业度摘得头名 - 薛定谔的梨花猫
  • 163MusicLyrics:一键获取网易云与QQ音乐歌词的终极工具

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

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

关于尧图

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

服务项目

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

快速链接

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

联系方式

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

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