思路:
从头开始,如果遇到2个不同的数,就都删除,一直到最后,剩下的数就是出现次数大于n/2的。
可以推广到找出现次数大于n/k的情况,即遇到k个不同的数,删除,剩下的数就是出现次数大于n/k的。
时间复杂度O(N),空间复杂度:O(1)。
java code:
public class Solution {
public int majorityElement(int[] nums) {
int count = 0, candidate = 0;
for(int i = 0; i < nums.length; ++i) {
if(count == 0) {
candidate = nums[i];
count = 1;
}else {
if(candidate == nums[i]) {
count++;
}else {
count--;
}
if(count > nums.length / 2 + 1) return candidate;
}
}
return candidate;
}
}
本文介绍了一种高效查找数组中出现次数超过n/2次的元素的算法,该算法通过不断消除不同元素对来缩小搜索范围,最终找到目标元素。适用于需要快速定位主导元素的应用场景。
138

被折叠的 条评论
为什么被折叠?



