最简单的办法:可以直接先排序 复杂度nlogn
或者我们可以使用候选的方法
先把第一个数当作候选,给他一个初始次数为1,往后遍历,如果是相同的,则次数加1.如果不同,则次数减一。当次数减为0之后,候选的数移动到当前遍历的位置。最后将整个数组遍历完之后,谁是候选的数,谁就是次数最多的数。
注意:还要最后考虑一下,最多的数是不是超过了一半。
import java.util.*;
public class Solution {
public int MoreThanHalfNum_Solution(int [] array) {
int candidate = array[0];
int nTimes = 1;
for(int i=1;i<array.length;i++){
if(nTimes == 0){
candidate = array[i];
nTimes=1;
}else{
if(candidate==array[i]){
nTimes++;
}else{
nTimes--;
}
}
}
int num = 0;
for(int a : array){
if(a==candidate){
num++;
}
}
return (num>array.length/2)?candidate:0;
}
}