数组中出现次数超过一半的数字(二十八)
题目描述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为 9
的数组{1,2,3,2,2,2,5,4,2}
。由于数字 2
在数组中出现了 5
次,超过数组长度的一半,因此输出 2
。如果不存在则输出 0
。
代码(已在牛客上 AC)
投票法.
class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
if (numbers.empty()) return 0;
int vote = 0, count = 0;
for (int i = 0; i < numbers.size(); ++i) {
if (count == 0) vote = numbers[i];
count += (vote == numbers[i]) ? 1 : -1;
}
count = 0;
for (auto &d : numbers)
if (d == vote) count ++;
if (count > numbers.size() / 2) return vote;
return 0;
}
};