博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[剑指offer] 数组中出现次数超过一半的数字
阅读量:5963 次
发布时间:2019-06-19

本文共 1356 字,大约阅读时间需要 4 分钟。

本文首发于我的个人博客:

题目描述

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

解题思路

三种解法:

  • 法1:借助hashmap存储数组中每个数出现的次数,最后看是否有数字出现次数超过数组长度的一半;
  • 法2:排序。数组排序后,如果某个数字出现次数超过数组的长度的一半,则一定会数组中间的位置。所以我们取出排序后中间位置的数,统计一下它的出现次数是否大于数组长度的一半;
  • 法3:某个数字出现的次数大于数组长度的一半,意思就是它出现的次数比其他所有数字出现的次数和还要多。因此我们可以在遍历数组的时候记录两个值:1. 数组中的数字;2. 次数。遍历下一个数字时,若它与之前保存的数字相同,则次数加1,否则次数减1;若次数为0,则保存下一个数字,并将次数置为1。遍历结束后,所保存的数字即为所求。最后再判断它是否符合条件。

参考代码

法1:

import java.util.HashMap;import java.util.Map;public class Solution {    public int MoreThanHalfNum_Solution(int [] array) {        HashMap
map = new HashMap
(); int length = array.length; for(int i=0; i
entry : map.entrySet()) { if(entry.getValue()*2>length) return entry.getKey(); } return 0; }}

法2:

import java.util.Arrays;public class Solution {    public int MoreThanHalfNum_Solution(int [] array) {        Arrays.sort(array);        int half = array.length/2;        int count = 0;        for(int i=0; i
half) return array[half]; else return 0; }}

法3:

public class Solution {    public int MoreThanHalfNum_Solution(int [] array) {        int res = array[0], count = 1;        for(int i=1; i
array.length/2 ? res : 0; }}

转载地址:http://uunax.baihongyu.com/

你可能感兴趣的文章
SQL Server代理(3/12):代理警报和操作员
查看>>
Linux备份ifcfg-eth0文件导致的网络故障问题
查看>>
2018年尾总结——稳中成长
查看>>
JFreeChart开发_用JFreeChart增强JSP报表的用户体验
查看>>
度量时间差
查看>>
通过jsp请求Servlet来操作HBASE
查看>>
Shell编程基础
查看>>
Shell之Sed常用用法
查看>>
3.1
查看>>
校验表单如何摆脱 if else ?
查看>>
<气场>读书笔记
查看>>
Centos下基于Hadoop安装Spark(分布式)
查看>>
3D地图的定时高亮和点击事件(基于echarts)
查看>>
mysql开启binlog
查看>>
设置Eclipse编码方式
查看>>
分布式系统唯一ID生成方案汇总【转】
查看>>
并查集hdu1232
查看>>
Mysql 监视工具
查看>>
从前后端分离到GraphQL,携程如何用Node实现?\n
查看>>
Linux Namespace系列(09):利用Namespace创建一个简单可用的容器
查看>>