Leecode53 最大和子序列
阿新 • • 發佈:2018-12-19
///動態規劃 dp[i]=Math.max(dp[i-1]+nums[i],nums[i]);挺簡單的,下面這個,就是直接輸出最大值,但是沒有記錄下具體數字序列是多少 public class Leecode51 { public static void main(String[] args) { int a[]={-2,11,-4,13,-5,-2}; System.out.println(maxSubArray(a)); //output:20 } static int maxSubArray(int[] nums) { int len=nums.length; int [] dp=new int[len]; dp[0]=nums[0]; for (int i = 1; i < len; i++) { dp[i]=Math.max(dp[i-1]+nums[i],nums[i]); } int max=Integer.MIN_VALUE; for (int i = 0; i <len ; i++) { max=Math.max(max,dp[i]); } return max; } }
public class Leecode51 { public static void main(String[] args) { int a[]={-2,11,-4,13,-5,-2}; System.out.println(maxSubArray(a)); } static int maxSubArray(int[] nums) { int len=nums.length; int [][] dp=new int[len][len]; int start,end; start=0; end=0; int max=Integer.MIN_VALUE; dp[0][0]=nums[0]; for (int j = 1; j<len; j++) for (int i = 0; i<j; i++) {//////思考這個下標開始的地方。 dp[i][j]=Math.max(dp[i][j-1]+nums[j],nums[j]); if(dp[i][j]>max) { start=i; end=j; max=dp[i][j]; } } System.out.println("start"+start); System.out.println("end"+end); return max; } }