题目:
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为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()==) return ;//好吧,OJ说这里应该为0 int res=numbers[];
int cnt=; for(int i=;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 ;
}
private:
bool CheckMoreThanHalf(vector<int> numbers, int res)
{
int count=;
for(int i=;i<numbers.size();++i)
{
if(numbers[i]==res) count++;
} if(count>numbers.size()/) return true;
else return false;
}
};