题目描述

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
 1 #include<iostream>
 2 #include<string>
 3 #include<algorithm>
 4 #include<map>
 5 #include<vector>
 6 using namespace std;
 7 class Solution {
 8 public:
 9     int MoreThanHalfNum_Solution(vector<int> numbers) {
10         sort(numbers.begin(), numbers.end());
11         int count = 1;
12         int c = numbers[0];
13         int c1;
14         int count1 = 0;
15         for (int i = 1; i < numbers.size(); i++)
16         {
17             if (numbers[i] == c)
18             {
19                 count++;
20                 
21             }
22             else
23             {
24                 if (count1 < count)
25                 {
26                     count1 = count;
27                     c1 = c;
28                 }
29                 count = 1;
30                 c = numbers[i];
31             }
32         }
33         if (count1 >= (numbers.size() / 2))
34             return c1;
35         else
36             return 0;
37 
38     }
39 };
40 int main()
41 {
42     vector<int> vet{1,2,3,4,5,6,8,2,3 };
43     Solution s;
44     cout << s.MoreThanHalfNum_Solution(vet) << endl;
45     system("pause");
46     return 0;
47 }

 

posted on 2017-05-25 15:10  无惧风云  阅读(169)  评论(0)    收藏  举报