题目描述;

JZ39 数组中出现次数超过一半的数字


思路一:哈希表

class Solution {
public:
  	int MoreThanHalfNum_Solution(vector<int> numbers) {
      	if (numbers.size() == 0) return numbers[0];
      	unordered_map<int, int> mp;
      	int res = 0, cnt = 0;
      	for (int& num : numbers) {
          	++mp[num];
          	if (mp[num] > cnt) {
              	res = num;
              	cnt = mp[num];
            }
        }
      	return res;
    }
}
时间复杂度:O(n),空间复杂度:O(n)
提交结果:答案正确 运行时间:9ms 占用内存:1408KB 
使用语言:C++ 用例通过率:100.00%

思路二:Boyer-Moore 投票算法

class Solution {
public:
  	int MoreThanHalfNum_Solution(vector<int> numbers) {
      	int candidate = -1;
      	int count = 0;
      	for (int& num : nums) {
          	if (num == candidate) ++count;
          	else if (--count < 0) {
              	candidate = num;
              	count = 1;
            }
        }
      
      	return candidate;
    }
}

😿😿😿😿😿😿