Maximum Subarray

来源:互联网 发布:ubuntu火狐下载的软件 编辑:程序博客网 时间:2024/05/29 16:55

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.


public class Solution {    public int maxSubArray(int[] nums) {        //soFar 存储到位置i时的最大值        //endHere存储包含位置i的最大值        int soFar = nums[0],endHere = nums[0];        for(int i = 1; i < nums.length; i++){            //关键点            //如果endHere + nums[i] < nums[i],为什么要包含前面的?所以直接从nums[i]开始            //动态规划,保证包含到nums[i]时,和最大,如果包,肯定包含i-1位            endHere = Math.max(endHere + nums[i],nums[i]);            //如果包含位置i时的最大值比之前的大,那么就替换原来的最大值            //比方e.g中i = 4 时,endHere = 3, soFar = 4            //         i = 5 时,endHere = 5, soFar = 5            if(endHere> soFar){                soFar = endHere;            }        }        return soFar;    }}


0 0
原创粉丝点击