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;  
    		    }  
    		
    

      

  • 相关阅读:
    关于游戏的配乐说法
    初识构建之法
    战略-战术-攻略
    《SRE google 运维解密》读书笔记1---第一部分
    什么,又是流程有问题?
    Scaling Memcache At Facebook
    技术博客开篇之言
    redis的一次迁移
    原生js--什么是闭包?
    原生js--事件绑定、事件监听器及事件解绑
  • 原文地址:https://www.cnblogs.com/elnino/p/5473543.html
Copyright © 2011-2022 走看看