题目:
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array [−2,1,−3,4,−1,2,1,−5,4]
,
the contiguous subarray [4,−1,2,1]
has the largest sum = 6
.
方法:
题目只要求最大的数值,很明显的DP提示,建立一个DP-array,遍历array,DP-array初始值等于array的初始值。
遍历过程中,如果DP-array的上一个值与array的当前值之和大于等于0并且DP-array的上一个值大于等于0,那么DP-array的当前值等于这个和;否则当前值等于array的当前值。
Code:
public class Solution {
public int maxSubArray(int[] A) {
// Start typing your Java solution below
// DO NOT write main() function
if(A==null || A.length==0) return 0;
int[] dp = new int[A.length];
dp[0] = A[0];
for(int i=0; i<A.length; i++){
if(i>0){
int tmp = A[i] + dp[i-1];
if(tmp>=0 && dp[i-1]>=0) dp[i] = tmp;
else dp[i] = A[i];
}
}
Arrays.sort(dp);
return dp[A.length-1];
}
}
总结:
第一个自己完成的DP题目,纪念下。个人感觉画出所有可能,不断地尝试构思是窍门吧。