Question
Link : https://leetcode.com/problems/majority-element/
Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋
times.
You may assume that the array is non-empty and the majority element always exist in the array.
Code
这个是一个还可以的版本吧。即找一个个数超过一半的元素,先把数组排序,然后直接去中间的数即为我们要找的数了。(C++ : 40ms)
class Solution {
public:
static bool compare(const int &lhs, const int &rhs){
return lhs < rhs;
}
int majorityElement(vector<int>& nums) {
if(nums.size() == 1)
return nums[0];
sort(nums.begin(), nums.end(), compare);
return nums[nums.size() / 2];
}
};
然后又稍微改进了一下,遍历一下数组,用哈希表存储每个值出现的次数。然后遍历哈希表判断那个值出现个数大于数组长度一半则为我们需要找的数。(C++ : 30ms)
class Solution {
public:
int majorityElement(vector<int>& nums) {
int len = nums.size();
map<int, int> counts;
map<int, int>::iterator it;
for(int i = 0; i < len; i++){
it = counts.find(nums[i]);
if(it == counts.end())
counts.insert(pair<int, int>(nums[i], 1));
else
it->second += 1;
}
for(it = counts.begin(); it != counts.end(); it++){
if(it->second > len / 2){
return it->first;
}
}
}
};