一,题目描述
二,题目分析
1.根据题目的描述,只需要求出数组中出现次数超过一半的元素
2.思路1 统计各个元素的出现次数,显然出现次数超过一半的元素一定是出现次数最多的元素
3.思路2 对给定的数组排序,因为数组中一定存在 多数元素 ,故排序后数组的中间位置一定是 多数元素
4.思路3 摩尔投票法:从第一个数开始count=1,遇到相同的就加1,遇到不同的就减1,减到0就重新换个数开始计数,总 能找到最多的那个
三,代码解答
1.思路2
class Solution {
public:
int majorityElement(vector<int>& nums) {
sort(nums.begin() , nums.end());
return nums[(nums.size()/2)];
}
};
public int majorityElement(int[] nums) {
int count = 1;
int maj = nums[0];
for (int i = 1; i < nums.length; i++) {
if (maj == nums[i])
count++;
else {
count--;
if (count == 0) {
maj = nums[i + 1];
}
}
}
return maj;
}