寻找重复子问题,自相似性
如果从头部没有太好的思路,就从尾部思考
设函数f(i)为从(0, i]的最大和的连续子数组,是闭区间,包含i
容易得出如下递推公式:
f(i) = max( f(i-1), 0) + nums[i] i>=1时间
f(0) = nums[0]
根据递推公式写入如下代码:
public class Test53 {
@Test
public void test() {
int[] nums = new int[]{-2,1,-3,4,-1,2,1,-5,4};
System.out.println(maxSubArray(nums));
}
//f(i) = max(f(i-1), 0) + nums[i];
public int maxSubArray(int[] nums) {
int[] max = new int[nums.length];
max[0] = nums[0];
int result = max[0];
for(int i=1; i<nums.length; i++) {
max[i] = Math.max(max[i-1], 0) + nums[i];
result = Math.max(result, max[i]);
}
return result;
}
}