/**
* 找出一个数组中出现次数超过一半长度的某个数字,没有则输出0:此消彼长法
* 既然有一个数超过了一半长度,那么它就比其他所有数字出现次数的总和还要大,
* 我们用res保存结果,time保存次数,那么有:下一个数字相同,time++,否则time--,最后一次把time
* 变成1的数就是所求,最后检查是否超过了一半
*/
import java.util.*;
public class Solution {
public int MoreThanHalfNum_Solution(int [] a) {
if(a==null) return 0;
int n=a.length;
if(n==0) return 0;
if(n==1) return a[0];
int res=a[0]; //找到最后一次把值变成1的数字,否则不存在
int times=1;
for(int i=1;i<n;i++){
if(times==0){
times++;
res=a[i];
}else if(a[i]==res)
time++;
else
time--;
}
//判断是否真滴超过一半
int cnt=0;
for(int i=0;i<n;i++)
if(a[i]==res)
cnt++;
if(cnt>n/2+1) res=0;
return res;
}
}
求一个数组中出现次数超过一半的某个数字,如果不存在返回0
最新推荐文章于 2021-07-21 13:15:45 发布