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.
Example 1:
Input: nums = [3,2,3]
Output: 3
Example 2:
Input: nums = [2,2,1,1,1,2,2]
Output: 2
Constraints:
n == nums.length
1 <= n <= 5 * 10^4
-10^9 <= nums[i] <= 10^9
Follow-up: Could you solve the problem in linear time and in O(1) space?
Solution
If an element appears more than half, then it will remain at the last, even after encountering with others.
So use prev_num
to keep track of previous number, and cnter
, when it’s a new element, decrease the counter, if counter is 0, replace with the new element. The element remains to the last is the majority element.
Time complexity: o ( n ) o(n) o(n)
Space complexity: o ( 1 ) o(1) o(1)
Code
class Solution:def majorityElement(self, nums: List[int]) -> int:prev_num, prev_cnt = nums[0], 1for each_num in nums[1:]:if each_num != prev_num:prev_cnt -= 1if prev_cnt == 0:prev_num = each_numprev_cnt = 1else:prev_cnt += 1return prev_num