169. Majority Element
Difficulty: Easy
Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋
times.
You may assume that the array is non-empty and the majority element always exist in the array.
Example 1:
Input: [3,2,3]
Output: 3
Example 2:
Input: [2,2,1,1,1,2,2]
Output: 2
Solution
思路1
使用map
映射,时间复杂度为
O
(
n
)
O(n)
O(n)。
Language: C++
class Solution {
public:
int majorityElement(vector<int>& nums) {
if (nums.empty()) return nums.empty();
map<int, int> m;
int num = nums.size() / 2;
for (auto i : nums){
if (++m[i] > num)
return i;
}
return 0;
}
};
思路2
计数法,时间复杂度为
O
(
N
)
O(N)
O(N),空间复杂度更小。
题意给出一定存在一个数超过长度的一半,遇见不同减一,相同加一。OK
class Solution {
public:
int majorityElement(vector<int>& nums) {
int count = 0, ans;
for (auto i : nums){
if (count == 0)
ans = i;
count += (ans == i)? 1 : -1;
}
return ans;
}
};