Given an array nums of size n, return the majority element.
The majority element is the element that appears more than ⌊n / 2⌋ times. You may assume that the majority element always exists in the array.
Input: nums = [3,2,3]
Output: 3
Input: nums = [2,2,1,1,1,2,2]
Output: 2
Could you solve the problem in linear time and in O(1) space?
class Solution {
public:
int majorityElement(vector<int>& nums) {
sort(nums.begin(), nums.end());
int n = nums.size();
return nums[n/2];
}
};
class Solution {
public:
// Moore voting
int majorityElement2(vector<int>& nums) {
int count = 0;
int major = 0;
for (int num : nums) {
if (count == 0)
major = num;
if (major == num)
count++;
else count--;
}
return major;
}
};