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

灰太狼 2023-02-18 01:44 116阅读 0赞

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

遍历一次数组,两两删去不同的数字,剩下的数字为可能值,还要遍历一次数组确实这个可能值出现的次数。

  1. class Solution {
  2. public:
  3. int MoreThanHalfNum_Solution(vector<int> numbers) {
  4. int size = numbers.size();
  5. if (size == 0) return 0;
  6. stack<int> s;
  7. for(int i = 0; i < size; i++) {
  8. if(s.empty()) s.push(numbers[i]);
  9. else if (s.top() != numbers[i]){
  10. s.pop();
  11. }else {
  12. s.push(numbers[i]);
  13. }
  14. }
  15. if(s.empty()) return 0;
  16. else {
  17. int num = s.top();
  18. int count = 0;
  19. for(int i = 0; i < size; i++) {
  20. if(num == numbers[i]) count++;
  21. }
  22. if( count > size/2) return num;
  23. else return 0;}
  24. }
  25. };

大佬的代码:

  1. class Solution {
  2. public:
  3. int MoreThanHalfNum_Solution(vector<int> numbers) {
  4. int n = numbers.size();
  5. //map 记录出现次数
  6. map<int, int> m;
  7. int count;
  8. for (int i = 0; i < n; i++) {
  9. count = ++m[numbers[i]];
  10. if (count > n/2) return numbers[i];
  11. }
  12. return 0;
  13. }
  14. };

发表评论

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

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

相关阅读