Majority Element
Clarify the problem:
- The problem requires finding the majority element in an array, which is an element that appears more than n/2 times, where n is the size of the array.
- We need to implement a function that takes an array of integers as input and returns the majority element.
Analyze the problem:
- Input: An array of integers.
- Output: The majority element.
- Constraints:
- The array is non-empty.
- The majority element always exists in the array.
Design an algorithm:
- We can solve this problem using the Boyer-Moore Voting Algorithm.
- The algorithm uses a variable to keep track of the potential majority element and a counter to maintain the count.
- We initialize the potential majority element as the first element of the array and the count as 1.
- We iterate over the remaining elements of the array.
- If the current element is equal to the potential majority element, we increment the count.
- If the current element is different from the potential majority element, we decrement the count.
- If the count becomes zero, we update the potential majority element to the current element and reset the count to 1.
- At the end of the iteration, the potential majority element will be the majority element.
Explain your approach:
- We will implement a function called
majorityElement
that takes an array of integers as input. - We initialize two variables:
majority
to store the potential majority element andcount
to maintain the count. - We set
majority
to the first element of the array andcount
to 1. - We iterate over the array starting from the second element.
- If the current element is equal to
majority
, we incrementcount
by 1. - If the current element is different from
majority
, we decrementcount
by 1. - If
count
becomes zero, we updatemajority
to the current element and setcount
back to 1. - Finally, we return
majority
as the majority element.
- We will implement a function called
Write clean and readable code:
pythondef majorityElement(nums): majority = nums[0] count = 1 for i in range(1, len(nums)): if nums[i] == majority: count += 1 else: count -= 1 if count == 0: majority = nums[i] count = 1 return majority
Test your code:
python# Test case 1 # Input: [3, 2, 3] # Majority element: 3 # Expected output: 3 assert majorityElement([3, 2, 3]) == 3 # Test case 2 # Input: [2, 2, 1, 1, 1, 2, 2] # Majority element: 2 # Expected output: 2 assert majorityElement([2, 2, 1, 1, 1, 2, 2]) == 2
Optimize if necessary:
- The provided solution already uses the optimal Boyer-Moore Voting Algorithm for finding the majority element.
- There is no need for further optimization.
Handle error cases:
- The code assumes that the input array is non-empty.
- If the input array is empty, the behavior is undefined.
Discuss complexity analysis:
- Let n be the size of the input array.
- The time complexity of the solution is O(n) since we iterate over the array once.
- The space complexity is O(1) since we use a constant amount of extra space to store the
majority
andcount
variables.