You are given an integer array nums and two integers l and r. Your task is to find the minimum sum of a subarray whose size is between
l and r (inclusive) and whose sum is greater than 0.
Return the minimum sum of such a subarray. If no such subarray exists, return -1.
A subarray is a contiguous non-empty sequence of elements within an array.
Input: nums =[3,-2,1,4], l =2, r =3Output: 1Explanation:
The subarrays of length between `l = 2` and `r = 3` where the sum is greater
than 0 are:*`[3, -2]`with a sum of 1*`[1, 4]`with a sum of 5*`[3, -2, 1]`with a sum of 2*`[-2, 1, 4]`with a sum of 3Out of these, the subarray `[3, -2]` has a sum of 1, which is the smallest
positive sum. Hence, the answer is1.
Input: nums =[-2,2,-3,1], l =2, r =3Output: -1Explanation:
There is no subarray of length between `l` and `r` that has a sum greater than
0. So, the answer is-1.
#include<vector>#include<climits>classSolution {
public:int minimumSubarraySum(std::vector<int>& nums, int l, int r) {
int n = nums.size(), ans = INT_MAX;
for (int len = l; len <= r; ++len) {
int sum =0;
for (int i =0; i < len; ++i) sum += nums[i];
if (sum >0) ans = std::min(ans, sum);
for (int i = len; i < n; ++i) {
sum += nums[i] - nums[i-len];
if (sum >0) ans = std::min(ans, sum);
}
}
return ans == INT_MAX ?-1: ans;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
funcminimumSubarraySum(nums []int, l, rint) int {
n, ans:= len(nums), 1<<31-1forlength:=l; length<=r; length++ {
sum:=0fori:=0; i < length; i++ { sum+=nums[i] }
ifsum > 0&&sum < ans { ans = sum }
fori:=length; i < n; i++ {
sum+=nums[i] -nums[i-length]
ifsum > 0&&sum < ans { ans = sum }
}
}
ifans==1<<31-1 { return-1 }
returnans}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
classSolution {
publicintminimumSubarraySum(int[] nums, int l, int r) {
int n = nums.length, ans = Integer.MAX_VALUE;
for (int len = l; len <= r; ++len) {
int sum = 0;
for (int i = 0; i < len; ++i) sum += nums[i];
if (sum > 0) ans = Math.min(ans, sum);
for (int i = len; i < n; ++i) {
sum += nums[i]- nums[i-len];
if (sum > 0) ans = Math.min(ans, sum);
}
}
return ans == Integer.MAX_VALUE?-1 : ans;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
classSolution {
funminimumSubarraySum(nums: IntArray, l: Int, r: Int): Int {
var ans = Int.MAX_VALUE
for (len in l..r) {
var sum = nums.take(len).sum()
if (sum > 0) ans = minOf(ans, sum)
for (i in len until nums.size) {
sum += nums[i] - nums[i-len]
if (sum > 0) ans = minOf(ans, sum)
}
}
returnif (ans ==Int.MAX_VALUE) -1else ans
}
}
1
2
3
4
5
6
7
8
9
10
classSolution:
defminimumSubarraySum(self, nums: list[int], l: int, r: int) -> int:
n, ans = len(nums), float('inf')
for length in range(l, r+1):
s = sum(nums[:length])
if s >0: ans = min(ans, s)
for i in range(length, n):
s += nums[i] - nums[i-length]
if s >0: ans = min(ans, s)
return-1if ans == float('inf') else ans
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
impl Solution {
pubfnminimum_subarray_sum(nums: Vec<i32>, l: i32, r: i32) -> i32 {
let n = nums.len();
letmut ans =i32::MAX;
for len in l..=r {
letmut sum: i32= nums.iter().take(len asusize).sum();
if sum >0 { ans = ans.min(sum); }
for i in len asusize..n {
sum += nums[i] - nums[i-len asusize];
if sum >0 { ans = ans.min(sum); }
}
}
if ans ==i32::MAX { -1 } else { ans }
}
}