0. 题目

1. 排序+逻辑
n 个数里面有一个数的个数大于 n/2
这个数比较小: A[0] = A[n/2] — A[0] 、A[n/2] 都是答案
这个数比较大:A[n/2] = A[n-1] — A[n/2] 、 A[n-1] 都是答案
这个数不大不小:A[n/2] != A[0] A[n/2] != A[n] — A[n/2] 是答案
根据上面可以发现 A[n/2] 是答案
class Solution {
public:
int majorityElement(vector<int>& nums) {
sort(nums.begin(), nums.end());
int size = nums.size();
return nums[size/2];
}
};
2. map
统计每个数字的个数,当发现某个数的个数 大于 n/2 的时候就是答案
class Solution {
public:
int majorityElement(vector<int>& nums) {
map<int,int> map;
int num = -1;
for (auto iter = nums.begin(); iter != nums.end(); ++iter) {
num = *iter;
if (map.find(num) != map.end()) {
map[num] = map[num] + 1;
if (map[num] > nums.size()/2) {
return num;
}
} else {
map[num] = 1;
}
}
return nums[0];
}
};
博客介绍了如何在一组数中找到众数,通过排序+逻辑的方法以及利用map统计每个数字出现的次数,当某数出现次数大于n/2时,即为众数。重点在于分析A[n/2]在不同情况下的意义。
4787

被折叠的 条评论
为什么被折叠?



