← All problems

3737. Count Subarrays with Majority Element I

MediumOpen on LeetCodeProblem statement

Problem Statement

3737. Count Subarrays With Majority Element I

Medium


You are given an integer array nums and an integer target.

Return the number of subarrays of nums in which target is the majority element.

The majority element of a subarray is the element that appears strictly more than half of the times in that subarray.

 

Example 1:

Input: nums = [1,2,2,3], target = 2

Output: 5

Explanation:

Valid subarrays with target = 2 as the majority element:

So there are 5 such subarrays.

Example 2:

Input: nums = [1,1,1,1], target = 1

Output: 10

Explanation:

​​​​​​​All 10 subarrays have 1 as the majority element.

Example 3:

Input: nums = [1,2,3], target = 4

Output: 0

Explanation:

target = 4 does not appear in nums at all. Therefore, there cannot be any subarray where 4 is the majority element. Hence the answer is 0.

 

Constraints:

Java — prefix sum

Source file
class Solution {
    public int countMajoritySubarrays(int[] nums, int target) {
        int n = nums.length, ans = 0, cumsum = 0;
        int[] prefixSum = new int[n + 1];
        for (int i = 0; i < n; i++) {
            if (nums[i] == target)
                cumsum++;
            prefixSum[i + 1] = cumsum;
        }
        for (int i = 0; i <= n; i++)
            for (int j = i + 1; j <= n; j++)
                if (prefixSum[j] - prefixSum[i] > (j - i) / 2f)
                    ans++;
        return ans;
    }
}