利用动态规划解决求最大子数组(最大子数组,即连续的数组中的某x个数相加和最大,x最小为1)。
算法思想:求整个最大子数组,可以分解为求前n - 1个数的最大子数组和最后一个数。这两个部分比较大小求出最大的。如果前者大,则在同理细化。
算法实现
class Solution {
public int maxSubArray(int[] nums) {
int n = nums.length;
int[] dp = new int[n];
dp[n - 1] = nums[n - 1];
int max = dp[n - 1];
// 分而治之思想
for (int i = n - 2; i >= 0; i--) {
dp[i] = nums[i] + (dp[i + 1] > 0 ? dp[i +1] : 0);
max = Math.max(max, dp[i]);
}
return max;
}
}