乱序数组,有一个数字个数超过数组的一半,求该数字
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;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?