题目
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
思路
本题采用摩尔投票法效果最佳,即假设某个元素为众数,票数+1,如果后面的元素与这个元素值不相等,则相互抵消,票数-1,如果一定存在众数,则所有数的票数和一定大于0
代码
下面展示 代码片
.
// An highlighted block
class Solution {
public int majorityElement(int[] nums) {
int votes = 0,x =0,count=0;
for(int num:nums){
if(votes == 0){
x = num;
}
if(x == num){
votes++;
}else{
votes--;
}
}
//用于判断没有众数的情况
for(int num:nums){
if(num == x){
count++;
}
if(count > nums.length/2){
return x;
}
}
return 0;
}
}