虽然效率较低,但是一次ac了。
找数组中出现次数大于一半数组大小的数字。
// 169. Majority Element
int Solution::majorityElement(vector<int>& nums)
{
unordered_map<int, int> m;
for (int i = 0; i < nums.size(); ++i)
{
unordered_map<int, int>::iterator f = m.find(nums[i]);
if (f != m.end())
{
f->second++;
if (f->second >(nums.size() / 2))
return f->first;
}
else
{
m.insert(make_pair(nums[i], 1));
}
}
return nums[0];
}
Runtime: 24 ms, faster than 60.45% of C++ online submissions for Majority Element.
Memory Usage: 11.4 MB, less than 34.29% of C++ online submissions for Majority Element.
当然这道题目有更快的方法,参考摩尔投票法,就是抵消的思想,如果两个数字不相同,就抵消掉,然后剩下的最后一个肯定是符合条件的
https://leetcode.com/problems/majority-element/discuss/51613/O(n)-time-O(1)-space-fastest-solution
class Solution {
public:
int majorityElement(vector<int>& nums) {
int major = nums[0];
int count = 1;
for (int i = 1; i < nums.size(); ++i)
{
if (nums[i] == major)
{
count++;
if (count > nums.size() / 2)
return major;
}
else
{
count--;
if (count == 0)
{
major = nums[i +1];
++i;
count = 1;
}
}
}
return major;
}
};