描述
给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。
思路:
用一个计数器count来统计这个超过一半的数res的个数,如果当前元素是res,++count,如果不是,--count, 在count==0的时候,更新res.
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param numbers int整型vector
* @return int整型
*/
int MoreThanHalfNum_Solution(vector<int>& numbers) {
// write code here
int count = 1;
int result = numbers[0];
for(int idx = 1; idx < numbers.size(); ++idx)
{
if(count == 0) //count = 0的时候更新result
{
count = 1;
result = numbers[idx];
}else {
//如果当前元素是res,++count,如果不是,--count
count = (result == numbers[idx])? ++count: --count;
}
}
return result;
}
};