题目
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.
找出数量超过半数的元素。前提:输入的数组非空
思考
- 排序后中位数即所求,因为结果元素数量超过⌊ n/2 ⌋。
- 使用两两不同的数抵消的方法,因为结果元素数量超过⌊ n/2 ⌋,所以抵消之后剩下的数肯定就是结果。
答案
c++
1.
复杂度取决于sort。
class Solution {
public:
int majorityElement(vector<int>& nums) {
vector<int> temp(nums);
sort(temp.begin(), temp.end());
return temp[nums.size() / 2];
}
};
2.
复杂度为O(n)。
class Solution {
public:
int majorityElement(vector<int>& nums) {
int current = nums[0], count = 1;
for (int i = 1; i < nums.size(); i++) {
if (count == 0) {
current = nums[i];
count = 1;
} else {
if (nums[i] == current) count++;
else count--;
}
}
return current;
}
};