乱序数组,有一个数字个数超过数组的一半,求该数字

package demo;

public class P40 {
//乱序数组,有一个数字个数超过数组的一半,求该数字
//思路:不同数字抵消次数的最后结果,或者分区找第(length/2)小的数字
//变种:出现次数为总数一半
//思路:分为目标是最后一个/不是的情况,对最后一个数出现次数计数。
//	      如果抵消完计数==一半则就是最后一个,否则不是最后,那么就是最后次数为0的candidate
	public static void main(String[] args) {
		int[] arr= {1,3,3,6,3,3,5};
		System.out.println(moreThanHalf(arr));
	}
	
	static int moreThanHalf(int[] arr) {
		int candidate=arr[0];
		int times=1;
		
		for(int i=1;i<arr.length;i++) {
			if(times==0) {
				candidate=arr[i];
				times=1;
			}
			if(candidate==arr[i]) {
				times++;
			}
			else {
				times--;
			}
		}
		return candidate;
	}

}
posted @   fighterk  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示