- 思路
方法一:先排序,再取中间的数,则一定是众数
方法二:LeetCode官方题解中的投票算法,感觉思路真的很棒,首先假设第一个数为众数记为suf,遍历数组,若与suf相等的数则count+1,若不相等则-1,当count==0时,将suf改为此时的元素值,这样去掉了相等数量的两个元素后,当最后剩下的元素中众数一定还是多于其他元素,一直会保持count>0,suf还为众数
int majorityElement(int* nums, int numsSize){
for(int gap = floor(numsSize/2); gap>0; gap = floor(gap/2)){
for(int i=gap; i<numsSize; i++){
if(nums[i] < nums[i-gap]){
int value = nums[i];
nums[i] = nums[i-gap];
int j=i-gap;
for(; j>=0 && nums[j] > value; j = j-gap)
nums[j+gap] = nums[j];
nums[j+gap] = value;
}
}
}
return nums[numsSize/2];
}
int majorityElement(int* nums, int numsSize){
int suf, count=0;
for(int i=0; i<numsSize; i++){
if(count == 0){
suf = nums[i];
}
if(nums[i] == suf){
count++;
}
else{
count--;
}
}
return suf;
}