找出一个数组中出现次数超过半数的元素(保证答案存在)
思路:只要有两个数不一样就把他们移除,最后剩下的就是答案
int
moore_voting(vector<
int
> &num)
{
int
curIdx =
0
, count =
1
;//num[curIdx]
暂存次数最多元素
for
(
int
i =
1
; i < num.size(); ++i)
{
num[i] == num[curIdx] ? ++count : --count;//--count就是移除了
if
(!count)
{
curIdx = i;
count =
1
;
}
}
return
num[curIdx];