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

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

 

 1 class Solution {
 2 public:
 3     //法一:排序,找到中间那个,然后遍历求出中间那个出现的次数,如果大于一般就返回中间数,否则返回0
 4     //法二:选择一个计数器,初始值为1,从第二个数开始遍历,如果这个数和前一个数相同那么计数器加1,否则减1.
 5     //如果计数器的值为0,那么重新选择下一个元素为起始,计数器重新置位1。
 6     int MoreThanHalfNum_Solution(vector<int> numbers) {
 7         int len=numbers.size();
 8         if(len==0) return 0;
 9         int result=numbers[0];
10         int count=1;
11         for(int i=1;i<len;i++)
12         {
13             if(count==0)
14             {
15                 count=1;
16                 result=numbers[i];
17             }
18             else
19             {
20                if(numbers[i]==result)
21                 count++;
22                 else count--;
23             }
24         }
25         //判断reslut是否符合条件
26         count=0;
27         for(int i=0;i<len;i++)
28         {
29             if(result==numbers[i]) count++;
30         }
31         return  count>len/2?result:0;
32     }
33 };

 

posted on 2017-11-23 16:35  wsw_seu  阅读(192)  评论(0编辑  收藏  举报

导航