Bird
Raised Fist0
DSA Cprogramming~20 mins

Majority Element Moore's Voting Algorithm in DSA C - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Moore's Voting Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of Moore's Voting Algorithm on given array
What is the output of the following C code that implements Moore's Voting Algorithm to find the majority element?
DSA C
#include <stdio.h>

int findMajority(int arr[], int size) {
    int count = 0, candidate = -1;
    for (int i = 0; i < size; i++) {
        if (count == 0) {
            candidate = arr[i];
            count = 1;
        } else if (arr[i] == candidate) {
            count++;
        } else {
            count--;
        }
    }
    return candidate;
}

int main() {
    int arr[] = {2, 2, 1, 1, 1, 2, 2};
    int size = sizeof(arr) / sizeof(arr[0]);
    int majority = findMajority(arr, size);
    printf("%d\n", majority);
    return 0;
}
A2
B1
C0
DNo majority element
Attempts:
2 left
💡 Hint
Remember Moore's Voting Algorithm finds the candidate that may be the majority element by counting occurrences.
❓ Predict Output
intermediate
2:00remaining
Output when no majority element exists
What will the following C code print when the input array has no majority element?
DSA C
#include <stdio.h>

int findMajority(int arr[], int size) {
    int count = 0, candidate = -1;
    for (int i = 0; i < size; i++) {
        if (count == 0) {
            candidate = arr[i];
            count = 1;
        } else if (arr[i] == candidate) {
            count++;
        } else {
            count--;
        }
    }
    // Verify candidate
    count = 0;
    for (int i = 0; i < size; i++) {
        if (arr[i] == candidate) count++;
    }
    if (count > size / 2) return candidate;
    else return -1;
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int size = sizeof(arr) / sizeof(arr[0]);
    int majority = findMajority(arr, size);
    printf("%d\n", majority);
    return 0;
}
A-1
B1
C5
D0
Attempts:
2 left
💡 Hint
The code verifies if the candidate appears more than half the time before returning it.
🧠 Conceptual
advanced
2:00remaining
Why Moore's Voting Algorithm works
Which of the following best explains why Moore's Voting Algorithm correctly finds the majority element?
ABecause it sorts the array and picks the middle element.
BBecause it uses recursion to divide and conquer the array.
CBecause it counts the frequency of all elements using extra space.
DBecause it cancels out pairs of different elements, leaving the majority element as the candidate.
Attempts:
2 left
💡 Hint
Think about how the algorithm reduces the count when encountering different elements.
🔧 Debug
advanced
2:00remaining
Identify the bug in Moore's Voting Algorithm implementation
What is the bug in the following C code implementing Moore's Voting Algorithm?
DSA C
#include <stdio.h>

int findMajority(int arr[], int size) {
    int count = 0, candidate = 0;
    for (int i = 0; i < size; i++) {
        if (count == 0) {
            candidate = arr[i];
            count = 1;
        } else if (arr[i] != candidate) {
            count++;
        } else {
            count--;
        }
    }
    return candidate;
}

int main() {
    int arr[] = {3, 3, 4, 2, 4, 4, 2, 4, 4};
    int size = sizeof(arr) / sizeof(arr[0]);
    int majority = findMajority(arr, size);
    printf("%d\n", majority);
    return 0;
}
AThe candidate is not initialized to -1.
BThe count increments when element is different instead of decrementing.
CThe array size calculation is incorrect.
DThe function does not verify the candidate after selection.
Attempts:
2 left
💡 Hint
Check the condition that changes the count variable inside the loop.
🚀 Application
expert
3:00remaining
Majority Element in a Stream of Data
You receive a stream of integers one by one and want to find the majority element at any point using Moore's Voting Algorithm. Which approach below correctly maintains the majority candidate and count as new elements arrive?
AStore all elements in an array and run Moore's Voting Algorithm from scratch after each new element.
BInitialize candidate to -1 and count to 0. For each new element, always increment count and update candidate to the new element.
CInitialize candidate and count to 0. For each new element, if count is 0, set candidate to element and count to 1; else if element equals candidate, increment count; else decrement count.
DUse a hash map to count frequencies and update candidate when a frequency exceeds half the total elements.
Attempts:
2 left
💡 Hint
Moore's Voting Algorithm can be adapted to streams by updating candidate and count incrementally.

Practice

(1/5)
1. What is the main purpose of Moore's Voting Algorithm in arrays?
easy
A. To sort the array in ascending order
B. To find the element that appears more than half the time
C. To find the smallest element in the array
D. To reverse the array elements

Solution

  1. 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.
  2. Step 2: Compare other options

    Sorting, finding smallest, or reversing are unrelated to majority element detection.
  3. Final Answer:

    To find the element that appears more than half the time -> Option B
  4. Quick Check:

    Majority element = element with > n/2 occurrences [OK]
Hint: Majority element appears more than half times [OK]
Common Mistakes:
  • Confusing majority element with most frequent element
  • Thinking it sorts the array
  • Assuming it finds smallest or largest element
2. Which of the following is the correct initialization step in Moore's Voting Algorithm in C?
easy
A. int count = 0, candidate = -1;
B. int count = 1, candidate = 0;
C. int candidate = 0, count = 0;
D. int candidate = -1, count = 1;

Solution

  1. 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.
  2. Step 2: Check other options

    Other options start count or candidate incorrectly, which can cause logic errors.
  3. Final Answer:

    int count = 0, candidate = -1; -> Option A
  4. Quick Check:

    Start with no candidate and zero count [OK]
Hint: Initialize count=0 and candidate invalid (-1) [OK]
Common Mistakes:
  • Starting count at 1 instead of 0
  • Assigning candidate to 0 prematurely
  • Swapping order of variables
3. What is the output of the following C code snippet using Moore's Voting Algorithm?
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);
medium
A. 1
B. 0
C. 2
D. No majority element

Solution

  1. 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=1
  2. Step 2: Final candidate after loop

    Candidate is 2 after loop ends.
  3. Final Answer:

    2 -> Option C
  4. Quick Check:

    Majority element found = 2 [OK]
Hint: Track count and candidate changes stepwise [OK]
Common Mistakes:
  • Not resetting candidate when count hits zero
  • Confusing candidate with last element
  • Ignoring count decrement on mismatch
4. Identify the bug in this Moore's Voting Algorithm implementation snippet:
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--;
  }
}
medium
A. Candidate initialized incorrectly
B. Candidate is not updated when count is zero
C. Loop does not run for all elements
D. Count increment and decrement conditions are reversed

Solution

  1. 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.
  2. Step 2: Confirm candidate update and loop correctness

    Candidate updates correctly when count == 0.
    Loop runs correctly for all elements.
    Candidate initialization is valid.
  3. Final Answer:

    Count increment and decrement conditions are reversed -> Option D
  4. Quick Check:

    Increment on match, decrement on mismatch [OK]
Hint: Increment count on match, decrement on mismatch [OK]
Common Mistakes:
  • Swapping increment and decrement conditions
  • Not updating candidate when count is zero
  • Incorrect loop bounds
5. Given an array 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?
hard
A. Count occurrences of candidate and check if it is more than n/2
B. Check if candidate is at the first position of the array
C. Verify if candidate is the maximum element in the array
D. No verification needed; candidate is always majority

Solution

  1. Step 1: Understand Moore's Voting Algorithm limitation

    The algorithm finds a candidate but does not guarantee it is majority if none exists.
  2. 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.
  3. Final Answer:

    Count occurrences of candidate and check if it is more than n/2 -> Option A
  4. Quick Check:

    Verify candidate count > n/2 to confirm majority [OK]
Hint: Always verify candidate count > n/2 after algorithm [OK]
Common Mistakes:
  • Assuming candidate is always majority without check
  • Checking candidate position instead of count
  • Confusing majority with max element
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard