LeetCode-in-Rust

169. Majority Element

Easy

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:

Follow-up: Could you solve the problem in linear time and in O(1) space?

Solution

impl Solution {
    pub fn majority_element(arr: Vec<i32>) -> i32 {
        let mut count = 1;
        let mut majority = arr[0];

        // For Potential Majority Element
        for &num in arr.iter().skip(1) {
            if num == majority {
                count += 1;
            } else {
                if count > 1 {
                    count -= 1;
                } else {
                    majority = num;
                }
            }
        }

        // For Confirmation
        count = 0;
        for &num in arr.iter() {
            if num == majority {
                count += 1;
            }
        }

        if count >= (arr.len() / 2) + 1 {
            majority
        } else {
            -1
        }
    }
}