您的位置:首页 > 其它

42 - 最大子数组 II

2017-09-19 18:00 309 查看
2017.9.19

居然写了一天的题

public class Solution {
/*
* @param nums: A list of integers
* @return: An integer denotes the sum of max two non-overlapping subarrays
*/
public static int maxTwoSubArrays(List<Integer> nums) {
// write your code here
int size = nums.size();
if(size <= 1){
return Integer.MIN_VALUE;
}
if(size == 2){
return nums.get(0) + nums.get(1);
}
Integer []arr = new Integer[size];
arr = nums.toArray(arr);
int []left = new int[size];
left[0] = arr[0];
//Arrays.fill(left, Integer.MIN_VALUE);
int []right = new int[size];
//Arrays.fill(right, Integer.MIN_VALUE);
/**** left[i] 中记录 第i个元素左边的最大值,包含第i个元素。
* left[i] 中记录 第i个元素左边的最大值,包含第i个元素。
* ***
*/
int maxTmp = arr[0];
int sumTmp = arr[0];
for(int i = 1; i < size-1; i++){
if(sumTmp < 0){
sumTmp = Math.max(sumTmp, arr[i]);
}
else{
sumTmp +=arr[i];
}
maxTmp = Math.max(maxTmp, sumTmp);
left[i] = maxTmp;
}
maxTmp = arr[size - 1];
sumTmp = arr[size - 1];
right[size - 1] = arr[size-1];
for(int i = size-2; i >0 ; i--){
if(sumTmp < 0){
sumTmp = Math.max(sumTmp, arr[i]);
}
else{
sumTmp +=arr[i];
}
maxTmp = Math.max(maxTmp, sumTmp);
right[i] = maxTmp;
}
int max = Integer.MIN_VALUE;
for(int i = 0; i < size-1; i++){
System.out.println("i:" + i + ",left: " + left[i] + ",right:" + right[i+1]);
max = Math.max(max, left[i] + right[i+1]);
}
System.out.println(max);
return max;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: