给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入:[3,2,3]
输出:3
示例 2:
输入:[2,2,1,1,1,2,2]
输出:2
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/majority-element
解题思路
遍历一遍数组,用两个变量辅助记录,一个记录多数元素的出现次数,一个记录多数元素的索引
因为多数元素出现次数大于数组长度一半,所以我们可以假定第一个元素是目标,然后出现次数设为1
后续遍历时遇到相同元素计数加一,反之减一
当计数为零时将目标元素更换为当前遍历到的元素,继续往后遍历数组重复刚才的做法
这样到最后辅助变量记录的索引一定会指向多数,因为它出现次数比其他所有元素出现次数加起来都多
代码
class Solution {
public int majorityElement(int[] nums) {
int count = 0, index = 0;
for (int i = 0; i < nums.length; i++) {
if (count == 0) {
index = i;
}
if (nums[i] == nums[index]) {
count++;
} else {
count--;
}
}
return nums[index];
}
}