输入n个整数,输出出现次数大于等于数组长度一半的数。
输入描述:
每个测试输入包含n个空格分割的n个整数,n不超过100,其中有一个整数出现次数大于等于n/2。
输出描述:
输出出现次数大于等于n/2的数。
解题思路
摩尔投票法的核心就是一一抵消,删除不同的数。
因为要找过半的数,用一个变量count记录读取每个变量变化的次数,一个变量temp记录可能过半的数。
先让count = 1,然后让temp = vec[0],然后往后遍历一遍。
碰到和temp相同的数就给count++,否则就count—,如果count变成0,就让temp=vec[i] (v数组遍历过程中的当前值),并让count = 1。
如此遍历一遍,因为有一个数过半,所以temp最后肯定存储的是过半的数
1 | class Solution { |
参考:
https://www.zhihu.com/question/284969980/answer/440979325