首页 > 其他 > 详细

LeetCode OJ平台上Maximum Subarray题目O(n)复杂度解决方式

时间:2014-07-23 15:45:59      阅读:276      评论:0      收藏:0      [点我收藏+]

原始题目例如以下,意为寻找数组和最大的子串,返回这个最大和就可以。

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.

最普通的方法就是两层循环来寻找,复杂度为O(n^2).

在木易先森的指导下,有一个极其简单的O(n)复杂度的方法:

-    先找出数组max值,假设max小于0 ,啥也别说了,直接返回max.

-    设置辅助变量currentmax=0;数组从头至尾扫描一遍

     -    假设currentmax + A[i] <= 0,意味着这个子串对于我们寻找最大和是没有不论什么帮助的,此时,直接再置currentmax = 0

     -    假设currentmax + A[i] > 0,意味着这个子串的和是有意义的,将这个和跟max比較,时刻保持max的值是当前最理想的最大值

-    最后返回max就可以

源码例如以下:

public class Solution {
    public static int maxSubArray(int[] A) {
        if(A.length == 0)
            return 0;
        int max = A[0];
        for(int i = 0; i < A.length; i ++)
            if(A[i] > max)
                max = A[i];
        if(max <= 0)
            return max;
        int currentmax = 0;
        for(int i = 0;i < A.length; i ++){
        	currentmax += A[i];
        	if(currentmax <= 0){
        		currentmax = 0;
        		continue;
        		}
        	else{
        		if(currentmax > max)
        			max = currentmax;
        	}
        	}
        return max;
        }
}


LeetCode OJ平台上Maximum Subarray题目O(n)复杂度解决方式,布布扣,bubuko.com

LeetCode OJ平台上Maximum Subarray题目O(n)复杂度解决方式

原文:http://www.cnblogs.com/hrhguanli/p/3862873.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!