题目:
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋
的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
解析:
本题中定义的众数为出现次数大于⌊ n/2 ⌋的元素,而且一定存在。那么解题思路是在数组中不断找一对不相等的数,然后删去,最后剩下的数一定是众数。代码如下:
public int majorityElement(int[] nums) {
// 连续删除一对相同的数,最后剩下的不可消除的数即为众数。
int result = nums[0];// 用于记录众数,假设数组中的第一个数是众数
int count = 0;// count为目前可以删除的数的数量。找到一个相同元素则count++,找到一个不同元素则count--;
for (int num : nums) {
if (num == result)// 如果两个数相同就不能抵消,count++。
count++;
else {
if (count > 0)// 如果两个数不同且可以抵消的数的数量>0,则count--,表示消去一对数。
count--;
else
result = num;// 如果两个数不同但目前不可以消除数了,则将该数记录为众数。
}
}
return result;
}