zoukankan      html  css  js  c++  java
  • leetcode maximum subArray

    题目为:

    Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

    For example, given the array [−2,1,−3,4,−1,2,1,−5,4],
    the contiguous subarray [4,−1,2,1] has the largest sum = 6.

    这个解法的思路很简单。设两个变量,一个是如果以当前元素为最长子数组的最后一个元素,所能达到的最大值max_ending_here。另一个是已知的最大值max_so_far。

    其实是一个动态规划问题。

     
    max_subarray(A[n]) = max( max_subarray(A[n-1]), A[n], max_subarray(A[n-1)(+)A[n] );  

    也就是说,已知一个数组A[n]及其最大子数组max_subarray(A[n]),我们添加一个元素A[n+1]进去。则有三种可能的情况:

    1. 添加进去元素的数组A[n+1]不影响A[n]的最大子数组。

    2. 单独的A[n+1]

    3. 以max_subarray(A[n])和A[n+1]以及两者之间的元素组合起来生成的数组。

    其中,如果在增长过程中,现有的数组段的和是负数,马上就可以抛弃,因为在这种情况下,max_subarray要是包含这一段,值肯定会比不包括这一段要大。

    代码

    	    int maxSubArray(int A[], int n) {  
    		        int max = Integer.MIN_VALUE;  
    		        int sum = Integer.MIN_VALUE;  
    		        for(int i=0;i<n;i++)  
    		        {  
    		            sum = sum<0?A[i]:A[i]+sum;  
    		            if(sum>max)  
    		                max=sum;  
    		        }  
    		        return max;  
    		    }  
    		
    

      

  • 相关阅读:
    NYOJ题目916胖子小的百宝袋
    NYOJ题目893十字架
    NYOJ题目874签到
    设计模式之Singleton
    Elo rating system 模拟
    JDBC之SqlHelper
    《Thinking in Java》十四章类型信息_习题解
    NYOJ题目842整除的尾数
    NYOJ题目840吃花生
    NYOJ题目839合并
  • 原文地址:https://www.cnblogs.com/elnino/p/5473543.html
Copyright © 2011-2022 走看看