【Leetcode】169. Majority Element
@(Leetcode)
题目链接:https://leetcode.com/problems/majority-element/description/
思路:题目是说找到数组里面出现次数大于size/ 2的元素。很容易想到的两种方法是:
1. 利用map统计数目。
2. 排序取中间的那个数字。
我的两种方法的代码如下:
1.
class Solution {
public:
int majorityElement(vector<int>& nums) {
if (nums.size()== 1) return nums[0];
map<int, int> times;
for (int i= 0; i< nums.size(); i++) {
if (times.count(nums[i])== 0) {
times.insert(pair<int, int>(nums[i], 1));
} else {
times[nums[i]]++;
if (times[nums[i]]> nums.size()/ 2) return nums[i];
}
}
}
};
- 2.
class Solution {
public:
int majorityElement(vector<int>& nums) {
sort(nums.begin(), nums.end());
return nums[nums.size()/ 2];
}
};
Leetcode上面还给出了其他解法:暴力求解、随机选取、分治和Boyer-Moore Voting Algorithm,链接如下:
https://leetcode.com/problems/majority-element/solution/
其他解法下面这篇博客也有提到:
http://blog.youkuaiyun.com/u012501459/article/details/46820823
关于Boyer-Moore Voting Algorithm:
official website:
http://www.cs.utexas.edu/~moore/best-ideas/mjrty/index.html
example:
http://www.cs.utexas.edu/~moore/best-ideas/mjrty/example.html
感谢!