数组中出现次数超过一半的数字
思路:采用阵地攻守的方法
第一个元素作为第一个士兵,镇守阵地,times=1;当遇到相同的元素,则当做是朋友,times++,当遇到不同的元素,当做是敌人,则同归于尽。如果times==0,表示阵地没有士兵,则令下一个士兵作为坚守阵地,且times=1;循环遍历结束后,最后留在阵地的元素可能是主元素。
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
if(numbers.empty() || numbers.size()==0)
return 0;
int res=numbers[0];
int times=1;
for(int i=1;i<numbers.size();i++)
{
if(times==0)
{
res=numbers[i];
times=1;
}
else if(res==numbers[i])
times++;
else
times--;
}
if(times>=1)
{
times=0;
for(int i=0;i<numbers.size();i++)
{
if(numbers[i]==res)
times++;
}
if(2*times<numbers.size())
return 0;
else
return res;
}
else
return 0;
}
};