Problem:
Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.
Explanation:
从一个数组中找到一个子数组使得元素之和最大
My Thinking:
设dp[i]是以i为末元素的子数组最大值,那么满足dp[i]=max(nums[i],dp[i-1]+nums[i]),即要么是到他前面一个元素的子数组最大值+他自己的值,要么就是他自己的值,两者去最大即可。
My Solution:
class Solution {
public int maxSubArray(int[] nums) {
int[] dp=new int[nums.length];
int max=nums[0];
dp[0]=nums[0];
for(int i=1;i<nums.length;i++){
dp[i]=Math.max(nums[i],dp[i-1]+nums[i]);
max=Math.max(dp[i],max);
}
return max;
}
}
Optimum Thinking:
Optimum Solution: