Majority Element Moore's Voting Algorithm in DSA C - Time & Space Complexity
We want to understand how the time needed to find the majority element grows as the input size increases.
Specifically, how many steps does Moore's Voting Algorithm take when the input array gets bigger?
Analyze the time complexity of the following code snippet.
int findMajorityElement(int arr[], int n) {
int count = 0, candidate = -1;
for (int i = 0; i < n; i++) {
if (count == 0) {
candidate = arr[i];
}
if (arr[i] == candidate) {
count++;
} else {
count--;
}
}
return candidate;
}
This code finds the majority element by keeping track of a candidate and its count while scanning the array once.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Single for-loop scanning the array once.
- How many times: Exactly n times, where n is the array size.
As the array size grows, the number of steps grows directly in proportion.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 steps |
| 100 | About 100 steps |
| 1000 | About 1000 steps |
Pattern observation: Doubling the input size roughly doubles the work done.
Time Complexity: O(n)
This means the time to find the majority element grows linearly with the size of the input array.
[X] Wrong: "Since there are two loops in some versions, the time complexity is O(n²)."
[OK] Correct: The algorithm uses only one main loop that runs n times; any second pass is separate and also linear, so overall time is still O(n), not squared.
Understanding this linear time solution shows you can find efficient answers by clever counting, a skill valued in problem solving.
"What if we added a verification step that counts the candidate's occurrences after finding it? How would the time complexity change?"
Practice
Solution
Step 1: Understand the problem Moore's Voting Algorithm solves
It is designed to find the majority element, which is the element that appears more than half the time in the array.Step 2: Compare other options
Sorting, finding smallest, or reversing are unrelated to majority element detection.Final Answer:
To find the element that appears more than half the time -> Option BQuick Check:
Majority element = element with > n/2 occurrences [OK]
- Confusing majority element with most frequent element
- Thinking it sorts the array
- Assuming it finds smallest or largest element
Solution
Step 1: Identify correct variable initialization
Moore's Voting Algorithm starts with count = 0 and candidate = -1 (or any invalid index) to indicate no candidate chosen yet.Step 2: Check other options
Other options start count or candidate incorrectly, which can cause logic errors.Final Answer:
int count = 0, candidate = -1; -> Option AQuick Check:
Start with no candidate and zero count [OK]
- Starting count at 1 instead of 0
- Assigning candidate to 0 prematurely
- Swapping order of variables
int arr[] = {2, 2, 1, 1, 1, 2, 2};
int n = 7;
int count = 0, candidate = -1;
for (int i = 0; i < n; i++) {
if (count == 0) {
candidate = arr[i];
}
if (arr[i] == candidate) {
count++;
} else {
count--;
}
}
printf("%d", candidate);Solution
Step 1: Trace the candidate and count updates
Start count=0, candidate=-1
i=0: count=0, candidate=2, count=1
i=1: arr[i]=2 == candidate=2, count=2
i=2: arr[i]=1 != candidate=2, count=1
i=3: arr[i]=1 != candidate=2, count=0
i=4: count=0, candidate=1, count=1
i=5: arr[i]=2 != candidate=1, count=0
i=6: count=0, candidate=2, count=1Step 2: Final candidate after loop
Candidate is 2 after loop ends.Final Answer:
2 -> Option CQuick Check:
Majority element found = 2 [OK]
- Not resetting candidate when count hits zero
- Confusing candidate with last element
- Ignoring count decrement on mismatch
int count = 0, candidate = -1;
for (int i = 0; i < n; i++) {
if (count == 0) {
candidate = arr[i];
}
if (arr[i] != candidate) {
count++;
} else {
count--;
}
}Solution
Step 1: Check count update logic
Correct logic: increment count if element equals candidate, decrement otherwise.
Given code increments count when arr[i] != candidate, which is wrong.Step 2: Confirm candidate update and loop correctness
Candidate updates correctly when count == 0.
Loop runs correctly for all elements.
Candidate initialization is valid.Final Answer:
Count increment and decrement conditions are reversed -> Option DQuick Check:
Increment on match, decrement on mismatch [OK]
- Swapping increment and decrement conditions
- Not updating candidate when count is zero
- Incorrect loop bounds
int arr[] = {3, 3, 4, 2, 4, 4, 2, 4, 4}, how can you verify if the candidate found by Moore's Voting Algorithm is actually a majority element?Solution
Step 1: Understand Moore's Voting Algorithm limitation
The algorithm finds a candidate but does not guarantee it is majority if none exists.Step 2: Verify candidate by counting occurrences
Count how many times candidate appears in array.
If count > n/2, candidate is majority; else no majority element.Final Answer:
Count occurrences of candidate and check if it is more than n/2 -> Option AQuick Check:
Verify candidate count > n/2 to confirm majority [OK]
- Assuming candidate is always majority without check
- Checking candidate position instead of count
- Confusing majority with max element
Ready to prove it?
Pass the test and this pattern moves unknown
