思路:
方法1:使用hash表一边统计每个数字出现的次数,一边判断当前数字的个数是否已经超过了总个数的一半。如果超过了就是答案。
方法2:因为题目一定存在出现次数超过一半的数字,所以使用ans记录当前出现的最多的数字,最多的数字每出现一次cnt就加1,其他数字每出现一次cnt就减1,当cnt为0时,说明之前的区间被分为多段,每一段出现最多的数字和其他数字各占一半。因为题目答案一定存在,所以最后一段的出现次数最多的数字一定就是答案。
总结:
评论区大佬的理解
代码:
class Solution {
public int majorityElement(int[] nums) {
int ans = 0;
int cnt = 0;
for(int num : nums) {
if(cnt == 0) {
ans = num;
cnt++;
}
else if(num == ans) {
cnt++;
}
else {
cnt--;
}
}
return ans;
}
}
参考: