LeetCode 53. Maximum Subarray

来源:互联网 发布:mac版qq文件夹在哪里 编辑:程序博客网 时间:2024/06/03 13:57
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.


解题思路:
sum: 初始值是数组的第一个元素,找到第一个正数后,再给sum赋初值,然后指针向后移,保证sum的和大于0
maxsum: 存放最大的子数组和,初值先赋值为第一个元素值
首先找到第一个正数,在找正数的过程中,将最大的复数赋值给maxsum,这样就可以保证数组全负时,maxsum仍然是最大值。
如果找到了正数,则先将第一个正数的值赋值给sum,每次加上一个正的数组元素时,都对sum和maxsum进行判断,保存最大值,如果加上了一个负的数组元素,但sum还是为正数,就直接将数组元素累计在sum中,如果加上负的数组元素后,sum小于等于0,先sum和maxsum的值进行判断,保存最大的值,然后指针再向后移,判断出现的第一个正数,并和maxsum比较,以防后面的元素拉低了第一个出现正数的值。

public class Solution {    public int maxSubArray(int[] nums) {        int lastpos;        int sum=nums[0],maxsum=nums[0];        int i=0;        while(i<nums.length){            if(nums[i]<=0){                if(nums[i]>maxsum){                    maxsum=nums[i];   //记录下最大的非正数数值                }                i++;            }else{                sum = nums[i];                maxsum=maxsum>sum?maxsum:sum;                break;    //找到了第一个正数            }        }        if(i<nums.length){  //说明数组中有正数            i++;            while(i<nums.length){                if(sum+nums[i]>0 && nums[i]<=0){                    sum =sum + nums[i];                    i++;                }else if(nums[i]>0){                    sum =sum + nums[i];                    maxsum=maxsum>sum?maxsum:sum;                     i++;                }else{                    maxsum=maxsum>sum?maxsum:sum;                     i++;                    while(i<nums.length && nums[i]<=0){ //找到第一个正数                        i++;                    }                    if(i>=nums.length){                        return maxsum;                    }else{                        sum=nums[i];                        maxsum=maxsum>sum?maxsum:sum;                        i++;                     }                                    }                            }                }       // maxsum=maxsum>sum?maxsum:sum;        return maxsum;    }}

原创粉丝点击