难度:简单
数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回
-1
。请设计时间复杂度为O(N)
、空间复杂度为O(1)
的解决方案。示例 1:
输入:[1,2,5,9,5,9,5,5,5] 输出:5示例 2:
输入:[3,2] 输出:-1示例 3:
输入:[2,2,1,1,1,2,2] 输出:2
分析:
时间和空间的限制,用摩尔投票算法可以解决 。
代码:
class Solution {
public int majorityElement(int[] nums) {
int k = 0, candidate = 0;
//pairing
for (int i = 0; i < nums.length; i++) {
if (k == 0) {
k = 1;
candidate = nums[i];
} else {
if (candidate == nums[i]) k++;
else k--;
}
}
//counting
int count = 0;
for (int num : nums
) {
if (num == candidate)
count++;
}
return count > nums.length / 2 ? candidate : -1;
}
}