面试题 17.10. 主要元素

本题不难,如果要求时间复杂度 O(N),空间复杂度 O(1),只能用投票算法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
int majorityElement(vector<int>& nums) {
int n = -1;
int count = 0;
for (auto x : nums) {
if (count == 0 || x == n) {
n = x;
count++;
} else {
count--;
}
}
count = 0;
for (auto x : nums) {
if (x == n) count++;
}
if (count > nums.size() / 2) return n;
return -1;
}
};