Leetcode 53. Maximum Subarray

来源:互联网 发布:java web编程实战宝典 编辑:程序博客网 时间:2024/04/30 17:36
/** * Kadane's algorithm */ public class Solution {    public int maxSubArray(int[] nums) {        int max_so_far = nums[0];        int max_ending_here = nums[0];                for (int i=1; i<nums.length; i++) {            max_ending_here = Math.max(max_ending_here+nums[i], nums[i]);            max_so_far = Math.max(max_ending_here, max_so_far);        }                return max_so_far;    }}/** * divide and conquer * a1a2...an * the maximum sum is located at three places a1...a((1+n)/2-1)), ...a((1+n)/2)..., a((1+n)/2+1)...an */
/** * dynamic programming appraoch * suppose f(n) is the maximum contiguous subarray ending at index n, * To calculate the solution for any element at index “i” has two options * EITHER added to the solution found till “i-1“th index * OR start a new sum from the index “i”. * then f(n) = max(f(n-1)+nums[n], nums[n]); */ public class Solution {    public int maxSubArray(int[] nums) {        int max;        int len = nums.length;        if (len == 0) return 0;        int[] dp = new int[len];        dp[0] = nums[0];        max = nums[0];        for (int i=1; i<len; i++) {            dp[i] = Math.max(dp[i-1]+nums[i], nums[i]);            if (max < dp[i]) max = dp[i];        }        return max;    }}



0 0
原创粉丝点击