Welcome to Subscribe On Youtube
795. Number of Subarrays with Bounded Maximum
Description
Given an integer array nums
and two integers left
and right
, return the number of contiguous non-empty subarrays such that the value of the maximum array element in that subarray is in the range [left, right]
.
The test cases are generated so that the answer will fit in a 32-bit integer.
Example 1:
Input: nums = [2,1,4,3], left = 2, right = 3 Output: 3 Explanation: There are three subarrays that meet the requirements: [2], [2, 1], [3].
Example 2:
Input: nums = [2,9,2,5,6], left = 2, right = 8 Output: 7
Constraints:
1 <= nums.length <= 105
0 <= nums[i] <= 109
0 <= left <= right <= 109
Solutions
-
class Solution { public int numSubarrayBoundedMax(int[] nums, int left, int right) { return f(nums, right) - f(nums, left - 1); } private int f(int[] nums, int x) { int cnt = 0, t = 0; for (int v : nums) { t = v > x ? 0 : t + 1; cnt += t; } return cnt; } }
-
class Solution { public: int numSubarrayBoundedMax(vector<int>& nums, int left, int right) { auto f = [&](int x) { int cnt = 0, t = 0; for (int& v : nums) { t = v > x ? 0 : t + 1; cnt += t; } return cnt; }; return f(right) - f(left - 1); } };
-
class Solution: def numSubarrayBoundedMax(self, nums: List[int], left: int, right: int) -> int: def f(x): cnt = t = 0 for v in nums: t = 0 if v > x else t + 1 cnt += t return cnt return f(right) - f(left - 1)
-
func numSubarrayBoundedMax(nums []int, left int, right int) int { f := func(x int) (cnt int) { t := 0 for _, v := range nums { t++ if v > x { t = 0 } cnt += t } return } return f(right) - f(left-1) }