/**
* 采用阵地攻守的思想:
* (1)第一个数字作为第一个士兵,守阵地;count = 1;
* (2)遇到相同元素,count++;
* (3)遇到不相同元素,即为敌人,同归于尽,count--;当遇到count为0的情况,又以新的i值作为守阵地的士兵,继续下去,到最后还留在阵地上的士兵,有可能是主元素。
* (4)再加一次循环,记录这个士兵的个数看是否大于数组长度的一半即可。
*/
public class Solution {
public int MoreThanHalfNum_Solution(int[] array) {
//第一个数字作为第一个士兵,守阵地;count = 1
int num = array[0]; //士兵
int count = 1;
//遇到相同元素,count++;遇到不相同元素,即为敌人,同归于尽,count--; 循环结束后,到最后还留在阵地上的士兵num,有可能是主元素
for (int i = 1; i ) {
if (count==0) {
num = array[i];
}
if (array[i] == num) {
count++;
} else {
count--;
}
}
//再加一次循环,记录这个士兵的个数看是否大于数组长度的一半即可
int count2=0;
for(int i=0;i){
if(array[i]==num){
count2 ++;
}
}
//返回结果
return count2>(array.length/2)? num:0;
}
}