leetcode 169. Majority Element 摩尔投票法

野性酷女 2022-06-08 07:28 261阅读 0赞

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.

就是使用HashMap直接计数。

代码如下:

  1. import java.util.HashMap;
  2. import java.util.Map;
  3. public class Solution {
  4. public int majorityElement(int[] nums)
  5. {
  6. Map<Integer, Integer> map=new HashMap<Integer, Integer>();
  7. for(int i=0;i<nums.length;i++)
  8. map.put(nums[i], map.getOrDefault(nums[i], 0)+1);
  9. for (Integer key : map.keySet())
  10. {
  11. if(map.get(key) >= (nums.length+1)/2)
  12. return key;
  13. }
  14. return 0;
  15. }
  16. }

下面是C++的做法,就是使用map做一次遍历操作

代码如下:

  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <map>
  5. using namespace std;
  6. class Solution
  7. {
  8. public:
  9. int majorityElement(vector<int>& nums)
  10. {
  11. map<int, int> mmp;
  12. for (int a : nums)
  13. {
  14. if (mmp.find(a) == mmp.end())
  15. mmp[a] = 1;
  16. else
  17. mmp[a] += 1;
  18. }
  19. for (map<int, int>::iterator i = mmp.begin(); i != mmp.end(); i++)
  20. {
  21. if (i->second >= (nums.size() + 1) / 2)
  22. return i->first;
  23. }
  24. return 0;
  25. }
  26. };

其实这道题考察的是摩尔投票法,代码如下:

  1. #include <iostream>
  2. #include <vector>
  3. #include <map>
  4. #include <unordered_map>
  5. #include <set>
  6. #include <unordered_set>
  7. #include <queue>
  8. #include <stack>
  9. #include <string>
  10. #include <climits>
  11. #include <algorithm>
  12. #include <sstream>
  13. #include <functional>
  14. #include <bitset>
  15. #include <numeric>
  16. #include <cmath>
  17. #include <regex>
  18. #include <iomanip>
  19. #include <cstdlib>
  20. #include <ctime>
  21. using namespace std;
  22. class Solution
  23. {
  24. public:
  25. int majorityElement(vector<int>& nums)
  26. {
  27. int count = 0, num = INT_MIN;
  28. for (int i : nums)
  29. {
  30. if (count == 0)
  31. {
  32. count = 1;
  33. num = i;
  34. }
  35. else if (i == num)
  36. count++;
  37. else
  38. count--;
  39. }
  40. return num;
  41. }
  42. };

发表评论

表情:
评论列表 (有 0 条评论,261人围观)

还没有评论,来说两句吧...

相关阅读

    相关 投票

    背景: leetcode 169题求一个数组中,出现次数大于 n/2;的元素 如果在一个遍历中解决这个问题?? 答案就是摩尔投票法。 摩尔投票法:用一个计数器,每次当计

    相关 投票

    提问: 给定一个int型数组,找出该数组中出现次数大于数组长度一半的int值。 解决方案: 遍历该数组,统计每个int值出现次数,再遍历该数组,找出出现次数大于数组长度一半的

    相关 投票

    摩尔投票 问题背景 在一个大厅中,每位票民手中都有一张票他可以给自己喜欢的候选人偷一票,我们现在已知每个票民的投票结果。 问:如何通过一次遍历找到票数超过一半的

    相关 8-1投票

    > 不同的数字进行一对一“火并”(原理不再赘叙), > 如果存在众数,“火并”之后留下了的一定是,最后还需要进行验证。 先上模板:         ![watermar