题目描述

 

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

 

解题思路

 

考虑记录两个值:一个是数组中的数字,另一个是他出现的次数。每遍历到一个数字,如果与保存值相同,则次数加1,否则减1;若次数减到0,则把记录值换成下一个数字。最后得到次数大于0的数字后,再从头遍历记录它出现的次数,同样进行上述步骤,若最后次数仍大于0,则为所需值。

 

代码

 

 1 class Solution {
 2 public:
 3     int MoreThanHalfNum_Solution(vector<int> numbers) {
 4         if(numbers.size() == 0)
 5             return 0;
 6         int mh = numbers[0];
 7         int count = 1;
 8         for(int i = 1; i < numbers.size(); i++){
 9             if(numbers[i] == mh){
10                 count++;
11             }
12             else{
13                 count--;
14                 if(count == 0 && i+1 != numbers.size()){
15                     mh = numbers[i + 1];
16                 }
17             }
18         }
19         if(count > 0){
20             count = 0;
21             for(int i = 0; i < numbers.size(); i++){
22                 if(mh == numbers[i])
23                     count++;
24                 else 
25                     count--;
26             }
27         }
28         if(count > 0)
29             return mh;
30         else
31             return 0;
32     }
33 };

 

相关文章:

  • 2021-09-26
  • 2022-02-16
  • 2022-01-09
  • 2021-07-22
  • 2022-12-23
  • 2021-08-17
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-12-11
  • 2021-06-29
  • 2021-06-20
  • 2021-06-28
  • 2021-10-22
  • 2022-12-23
相关资源
相似解决方案