Problem Description
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.
Examples
Example 1: Input: nums = [3,2,3] Output: 3 Example 2: Input: nums = [2,2,1,1,1,2,2] Output: 2
Python Solution
def majorityElement(nums: List[int]) -> int:
count = 0
candidate = None
for num in nums:
if count == 0:
candidate = num
count += 1 if num == candidate else -1
return candidate
Java Solution
class Solution {
public int majorityElement(int[] nums) {
int count = 0;
Integer candidate = null;
for (int num : nums) {
if (count == 0) {
candidate = num;
}
count += (num == candidate) ? 1 : -1;
}
return candidate;
}
}
C++ Solution
class Solution {
public:
int majorityElement(vector& nums) {
int count = 0;
int candidate = 0;
for (int num : nums) {
if (count == 0) {
candidate = num;
}
count += (num == candidate) ? 1 : -1;
}
return candidate;
}
};
JavaScript Solution
/**
* @param {number[]} nums
* @return {number}
*/
var majorityElement = function(nums) {
let count = 0;
let candidate = null;
for (const num of nums) {
if (count === 0) {
candidate = num;
}
count += num === candidate ? 1 : -1;
}
return candidate;
};
C# Solution
public class Solution {
public int MajorityElement(int[] nums) {
int count = 0;
int? candidate = null;
foreach (int num in nums) {
if (count == 0) {
candidate = num;
}
count += num == candidate ? 1 : -1;
}
return candidate.Value;
}
}
Complexity Analysis
- Time Complexity: O(n) where n is the length of the input array
- Space Complexity: O(1) as we only use two variables
Solution Explanation
This solution uses the Boyer-Moore Voting Algorithm:
- Key concept:
- Voting algorithm
- Counter technique
- Majority element
- Algorithm steps:
- Initialize counter
- Update candidate
- Count votes
- Find majority
Key points:
- Linear time
- Constant space
- No sorting needed
- Always exists