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

【剑指 Offer 39】数组中超过一半的数字

题目:

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例:

输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2

思考:

  • 方法一:投机取巧

  • 将数组排序,出现次数超过一半的数字肯定在数组中间的那个位置

题解:

class Solution {public int majorityElement(int[] nums) {Arrays.sort(nums);return nums[nums.length / 2];}
}

思考:

  • 方法二:哈希表辅助

  • 使用一个 map,key 存数组中的数字,val 存出现的次数

  • 当有数字出现次数超过数组长度一半时,直接返回

题解:

class Solution {public int majorityElement(int[] nums) {Map<Integer,Integer> map = new HashMap<>();for(int num : nums){map.put(num,map.getOrDefault(num,0)+1);if(map.get(num)> nums.length>>1) return num;}return 0;}
}

思考:

  • 方法三,摩尔投票法

  • 众数和非众数投票,初始票数为 0,为 0 时假设当前数字为众数

  • 遍历数组,是众数 +1,不是众数 -1,为 0 就接着继续重新来

  • 最后得到众数

题解:

class Solution {public int majorityElement(int[] nums) {int vote = 0;int x = 0;for (int i = 0; i < nums.length; i++) {if (vote == 0) x = nums[i];if (x == nums[i]) vote++;else vote--;}return x;}
}
http://www.lryc.cn/news/119935.html

相关文章:

  • list.stream.filter,List<List>转换为List
  • 手机里视频太大怎么压缩?压缩教程分享
  • Spring-Cloud-Loadblancer详细分析_3
  • 使用 VScode 开发 ROS 的Python程序(简例)
  • 2022年03月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • HarmonyOS/OpenHarmony应用开发-ArkTSAPI系统能力SystemCapability列表
  • 【01】基础知识:typescript安装及使用,开发工具vscode配置
  • 用C++实现的RTS游戏的路径查找算法(A*、JPS、Wall-tracing)
  • helm 制作应用的离线安装包
  • RN实现混合式开发-内嵌html
  • 2000-2022年全国各地级市绿色金融指数数据
  • MachineLearningWu_13/P60-P64_Tensorflow
  • centos7实现负载均衡
  • Django笔记之数据库函数之日期函数
  • 系统架构师---开发方法---敏捷开发
  • 数据中心液冷技术:规模扩张的新里程碑
  • 页面静态化(模板引擎Freemarker)
  • 详细记录Pycharm配置已安装好的Conda虚拟环境
  • photoshop生成器引入到electron项目(electron与photoshop建立通信)
  • Stable Diffuion webui Mac版本安装过程
  • ARM64 指令用法学习整理
  • stable-diffusion 模型效果+prompt
  • uniapp 小兔鲜儿 - 首页模块(1)
  • selenium.webdriver Python爬虫教程
  • USB-SC-09编程电缆驱动程序安装说明
  • ONVIF对讲功能漫谈
  • 计算文本相似度
  • oracle 增加控制文件
  • OpenFeign超时时间设置不生效问题排查
  • Go和Java实现原型模式