题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
题解:遍历数组, 用两个数字来进行计算遍历的结果, 一个数字是time, 一个数字是result, 如果time == 0, 则result 就等于要遍历的 数字, 如果time > 0, 如果result与数组遍历的数字相同, 那么++time, 否则--time, 则最后的result可能是我们要的结果, 由于不能保证result是不是我们要的结果 所以我们最后要核对result出现的次数 然后看看是不是我们要的结果。
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
int length = numbers.size();
int time = 0, result = 0;
if (length <= 0)
return result;
for (int i = 0; i < length; ++i)
{
if (time == 0)
{
result = numbers[i];
++time;
}
else if(result == numbers[i])
{
++time;
}
else
{
--time;
}
}
int count = 0;
for (int i = 0; i < length; ++i)
{
if (result == numbers[i])
++count;
}
if (count > (length >> 1))
return result;
return 0;
}
};