子数组的最大累加和

子数组的最大累加和问题

https://www.nowcoder.com/practice/554aa508dd5d4fefbf0f86e5fe953abd?tpId=196&tags=&title=&diffculty=0&judgeStatus=0&rp=0

第一种:
设置初始sum为0。从左往右加,并更新最值。当sum小于0时候,此时再往右加,只会让后面更小,因此sum设置为0;时间复杂度是o(n)。空间复杂度是o(1)。

public int maxsumofSubarray (int[] arr) {
        // write code here
        int sum =0;
        int res = Integer.MIN_VALUE;
        for(int a:arr){
            if(sum<0) sum=0;
            else {
                sum+=a;
                res = Math.max(res,sum);
            }
        }
        return res;
    }

第二种:
可以使用前缀和,然后从左往右遍历,每次更新最小的前缀和。每遍历一次,用当前的前缀和-当前最小的前缀和,并更新最大值。时间复杂度是o(n),空间复杂度是o(n);

全部评论

相关推荐

11-28 17:48
中山大学 C++
点赞 评论 收藏
分享
jack_miller:我给我们导员说我不在这里转正,可能没三方签了。导员说没事学校催的时候帮我想办法应付一下
点赞 评论 收藏
分享
qz鹿:*** 祝他毕业就失业
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务