数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为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 };