Description
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:
nums[1..1] = [2]nums[2..2] = [2]nums[1..2] = [2,2]nums[0..2] = [1,2,2]nums[1..3] = [2,2,3]
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:
1 <= nums.length <= 10001 <= nums[i] <= 1091 <= target <= 109
Solutions
The code finds all subarrays where a given target value appears more than half the time (i.e., it's the majority element). It uses two nested loops: the outer loop picks each starting index i, and the inner loop extends the subarray to each ending index j, counting how many times target appears via count. After each extension, it checks if that count is strictly more than half the current subarray's length (count * 2 > j - i + 1) — if so, it increments the result counter res. The final return value is the total number of such majority subarrays.
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var countMajoritySubarrays = function(nums, target) {
const n = nums.length;
let res = 0;
for (let i = 0; i < n; i++) {
let count = 0;
for (let j = i; j < n; j++) {
if (nums[j] === target) count++;
if (count * 2 > j - i + 1) res++;
}
}
return res;
};