【Leetcode】連續子數組的最大和

思路:

(1) dp[i]:以第i項結束的最大和,答案是dp[i]中的最大值,所以要求兩次最值!!!
(2) dp[i] = max(dp[i-1] + nums[i], nums[i]);
dp[i-1] < 0時,dp[i] = nums[i];
dp[i-1] > 0時,dp[i] = dp[i-1] + nums[i];
所以如上
(3) dp[0] = nums[0];

代碼:

    public int maxSubArray(int[] nums) {
    	int[] dp = new int[nums.length];
    	int i = 0, max = nums[0];

    	if(nums.length == 1)
            return nums[0];

    	dp[0] = nums[0];

    	for(i=1; i<nums.length; i++){
    		dp[i] = Math.max(dp[i-1]+nums[i], nums[i]);
    		max = Math.max(dp[i], max);
    	}

    	return max;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章