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;
}
}
居然写了一天的题
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;
}
}
相关文章推荐
- lintcode 42 最大子数组 II 解析
- 42. 最大子数组 II
- lintcode(42)最大子数组 II
- lintcode--42. 最大子数组 II
- lintcode-42-最大子数组 II
- Lintcode 最大子数组 II
- 剑指42_连续子数组中的最大和
- 最大子数组 II
- lintcode -- 最大子数组II
- LintCode:最大子数组 II
- 【剑指offer】面试题42:连续子数组的最大和
- [LeetCode] Maximum Average Subarray II 子数组的最大平均值之二
- [Lintcode]Maximum Subarray II 最大子数组 II
- LintCode-最大子数组 II
- 最大子数组(I, II, III,IV,V)和最大子数组乘积 (动态规划)
- 42、连续子数组的最大和
- 最大子数组 II
- 剑指Offer-42:连续子数组的最大和
- 最大子数组 II-LintCode
- 【剑指offer】面试题 42:连续子数组的最大和