Given an integer arrays, find a contiguous subarray which has the largest sum and length should be greater or equal to given length k
.
Return the largest sum, return 0 if there are fewer than k elements in the array.
Notice
Ensure that the result is an integer type.
Example
Given the array [-2,2,-3,4,-1,2,1,-5,3]
and k = 5
, the contiguous subarray [2,-3,4,-1,2,1]
has the largest sum = 5
.
java
public class Solution {
/*
* @param nums: an array of integer
* @param k: an integer
* @return: the largest sum
*/
public int maxSubarray4(int[] nums, int k) {
// write your code here
if (nums == null || nums.length == 0 || k <= 0 || nums.length < k) {
return 0;
}
int[] preSum = new int[nums.length + 1];
preSum[0] = 0;
int max = Integer.MIN_VALUE;
int min = 0;
for (int i = 1; i <= nums.length; i++) {
preSum[i] = preSum[i - 1] + nums[i - 1];
if (i >= k && max < preSum[i] - min) {
max = preSum[i] - min;
}
if (i >= k) {
min = Math.min(min, preSum[i - k + 1]);
}
}
return max;
}
}
python
class Solution:
"""
@param: nums: an array of integer
@param: k: an integer
@return: the largest sum
"""
def maxSubarray4(self, nums, k):
# write your code here
if nums is None or len(nums) == 0 or k <= 0 or len(nums) < k:
return 0
preSum, maxVal, minVal = [0] * (len(nums) + 1), float('-inf') ,0
for i in range(1, len(nums) + 1):
preSum[i] = preSum[i - 1] + nums[i - 1]
if i >= k and maxVal < preSum[i] - minVal:
maxVal = preSum[i] - minVal
if i >= k:
minVal = min(minVal, preSum[i - k + 1])
return maxVal