剑指offer:数组中出现次数超过一半的数字
Posted zhangxiaoyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer:数组中出现次数超过一半的数字相关的知识,希望对你有一定的参考价值。
http://blog.csdn.net/qq_27703417/article/details/70948850
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
采用阵地攻守的思想:第一个数字作为第一个士兵,守阵地;count = 1;遇到相同元素,count++;遇到不相同元素,即为敌人,同归于尽,count--;当遇到count为0的情况,又以新的i值作为守阵地的士兵,继续下去,到最后还留在阵地上的士兵,有可能是主元素。再加一次循环,记录这个士兵的个数看是否大于数组一般即可。
public int MoreThanHalfNum_Solution(int [] array) { int length = array.length; int result = array[0]; int time = 1 ; //找数 for (int i = 1 ;i < length ; i++) { if (0 == time) { result = array[i] ; time++ ; } else if (array[i] == result) { time++; } else { time-- ; } }
if(time==0){return 0;}
//数数
int count = 0; for(int i=0;i<array.length;i++){ if(array[i]==result){ count++; } if(count>=array.length/2+1) return result; } return 0; }
以上是关于剑指offer:数组中出现次数超过一半的数字的主要内容,如果未能解决你的问题,请参考以下文章