输出数组最小子集之和

子数组的最大累加和问题

http://www.nowcoder.com/questionTerminal/554aa508dd5d4fefbf0f86e5fe953abd

本题目要求时间复杂度为O(n),一开始我也是有点懵逼的,看了下题解,发现很多不符合题目标准,本题的测试数据也无法覆盖全面,有些解答有些问题。故自己写了一下详细的解题思路。
1.首先我觉得这道题跟分治法没有什么关系。
2.原理就是从一端推数据,可以从index=1开始推进判断,如果"前一个值" + "当前值" > "当前值",那么保留累加结果至当前值,这个怎么理解呢?其实意思就是就是需要把符合当前条件的累加和向右推,一旦发现累加后还不如当前值,那么前面所有数据就可以放弃了。
3.这里我从 1遍历至(length-1)的位置,最后的位置没有必要去遍历,如果最后一个值是正,那么与倒数第二个相加就可以了,反之,舍弃最后一个值。

public int maxsumofSubarray (int[] arr) {

        for (int i = 1; i < arr.length - 1; i++) {

            if(arr[i] + arr[i-1]>arr[i]){

                arr[i] = arr[i] + arr[i-1];

            }
        }

        return arr[arr.length - 1] > 0 ? arr[arr.length - 1] + arr[arr.length - 2] : arr[arr.length - 2];

    }
全部评论
解析的简单明了,看了之前几个实例都没说清楚。
1 回复 分享
发布于 2020-11-06 10:38
其实你这个思路对了,但是明显的过不了全部测试 比如 8 1 -5 -9 -8 -8 -6 -7这个数组,最大值产生在第二位
点赞 回复 分享
发布于 2020-11-18 23:28
哈罗,你的题解有问题,示例一如果后面加一个负数比如-2,答案就错了。应该说是这题后台数据不全才是最大的问题。
点赞 回复 分享
发布于 2020-11-19 09:02
arr里面如果只有一个数会直接报错吧
点赞 回复 分享
发布于 2020-11-19 22:30
很明显不对
点赞 回复 分享
发布于 2020-11-28 19:30
(1,-1,-2,-3)就不对了,看来后台数据还真是有问题
点赞 回复 分享
发布于 2021-02-18 10:50
如果数组长度为1,return的时候arr.length - 2直接报错呀……
点赞 回复 分享
发布于 2021-03-27 10:39

相关推荐

蚂蚁 基架java (n+6)*16 签字费若干
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
7
收藏
分享
牛客网
牛客企业服务