[39]数组中出现次数超过一半的数字
题目
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
例如:输入一个长度为 9 的数组{1,2,3,2,2,2,5,4,2}
由于数字中2在数组中出现了5次,超过数组长度的一半。因此输出为2
思路
如果一个数大于一半,这个数最后的数量肯定大于其他所有数的数量之和
如果
count
=0 ,val
=xcount
!= 0val
== x,count
++val
!= x ,count
–
代码
class Solution {
public:
int moreThanHalfNum_Solution(vector<int>& nums)
{
int count = 0, val = -1;
for(auto x : nums)
{
if(count==0)
{
val = x;
count = 1;
}
else
{
if(x == val)
count++;
else
count--;
}
}
return val;
}
};