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