标签:
题目:
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。
思路:
保存两个值:一个数组中的数字、一个出现的次数
如果当前值和保存的数字相同,则次数加1;如果不同,则次数减1;当次数为0时,保存当前数字、置次数为1。
代码:
class Solution { public: int MoreThanHalfNum_Solution(vector<int> numbers) { if(numbers.size()==0) return 0;//好吧,OJ说这里应该为0 int res=numbers[0]; int cnt=1; for(int i=1;i<numbers.size();++i) { if(numbers[i]==res) cnt++; else { if(cnt) cnt--; else//次数为0时 { res=numbers[i]; cnt++; } } } if(CheckMoreThanHalf(numbers,res)) return res; else return 0; } private: bool CheckMoreThanHalf(vector<int> numbers, int res) { int count=0; for(int i=0;i<numbers.size();++i) { if(numbers[i]==res) count++; } if(count>numbers.size()/2) return true; else return false; } };
标签:
原文地址:http://www.cnblogs.com/buxizhizhou/p/4722215.html