1150. Check If a Number Is Majority Element in a Sorted Array

Given an array nums sorted in non-decreasing order, and a number target, return True if and only if target is a majority element.

A majority element is an element that appears more than N/2 times in an array of length N.

 

Example 1:

Input: nums = [2,4,5,5,5,5,5,6,6], target = 5
Output: true
Explanation: 
The value 5 appears 5 times and the length of the array is 9.
Thus, 5 is a majority element because 5 > 9/2 is true.

Example 2:

Input: nums = [10,100,101,101], target = 101
Output: false
Explanation: 
The value 101 appears 2 times and the length of the array is 4.
Thus, 101 is not a majority element because 2 > 4/2 is false.

 

Constraints:

  • 1 <= nums.length <= 1000
  • 1 <= nums[i] <= 10^9
  • 1 <= target <= 10^9

Rust Solution

struct Solution;

impl Solution {
    fn is_majority_element(nums: Vec<i32>, target: i32) -> bool {
        let mut first: Option<usize> = None;
        let mut last: Option<usize> = None;
        let n = nums.len();
        for i in 0..n {
            if nums[i] == target {
                if first.is_none() {
                    first = Some(i);
                }
                last = Some(i);
            }
        }
        if let Some(first) = first {
            last.unwrap() - first + 1 > n / 2
        } else {
            false
        }
    }
}

#[test]
fn test() {
    let nums = vec![2, 4, 5, 5, 5, 5, 5, 6, 6];
    let target = 5;
    assert_eq!(Solution::is_majority_element(nums, target), true);
}

Having problems with this solution? Click here to submit an issue on github.