题目来源:
leetcode题目,网址:面试题 17.10. 主要元素 - 力扣(LeetCode)
解题思路:
首先,顺序遍历数组,将不同的数字消去,最后留下的数字若计数小于等于 0,则不存在主要元素。然后遍历数组,对最后留下的数字计数,判断其是否是主要元素。
解题代码:
class Solution {
public int majorityElement(int[] nums) {
int res=0;
int cnt=0;
for(int num:nums){
if(num==res){
cnt++;
}else{
cnt--;
if(cnt<0){
res=num;
cnt=1;
}
}
}
if(cnt<=0){
return -1;
}
int count=0;
for(int num:nums){
if(num==res){
count++;
}
}
return count>nums.length/2?res:-1;
}
}
总结:
官方题解也是一样的思路。通过 Boyer-Moore 投票算法得到可能的主要元素或表名不存在主要元素,然后判断可能的主要元素是否是主要元素。