Given an integer arrays, find a contiguous subarray which has the largest sum and length should be greater or equal to given length
Return the largest sum, return 0 if there are fewer than k elements in the array.
k
.Return the largest sum, return 0 if there are fewer than k elements in the array.
Example
Example 1:
Input:
[-2,2,-3,4,-1,2,1,-5,3]
5
Output:
5
Explanation:
[2,-3,4,-1,2,1]
sum=5
Example 2:
Input:
[5,-10,4]
2
Output:
-1
Notice
- Ensure that the result is an integer type.
k
>0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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 < k) { return 0 ; } int [] minPresum = new int [nums.length + 1 ]; int sum = 0 ; int maxSum = Integer.MIN_VALUE; for ( int i = 1 ; i <= nums.length; i++) { sum += nums[i - 1 ]; minPresum[i] = Math.min(minPresum[i - 1 ], sum); if (i >= k) { maxSum = Math.max(maxSum, sum - minPresum[i - k]); } } return maxSum; } } |
No comments:
Post a Comment