子数组的最大累加和

子数组的最大累加和问题

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

看了前面的解答,都有问题,自测调试用示例1的输入输出都通过不了。我的想法是:
总的来说,解题思路就是从前往后推,要保证每个位置的值都起码比原本的大。注意每次都要用m保存当前时刻的最大累积和,最后直接返回就ok。

class Solution {
public:
    int maxsumofSubarray(vector<int>& arr) {
        int m = arr[0]; // 保存最大累加和
        for(int i = 1 ; i<arr.size() ; i++)
        {
            arr[i] = max(arr[i] , arr[i-1]+arr[i]);
            m = max(m, arr[i]);
        }
        return m;
    }
};
全部评论
还是有个小问题,最大值可能就是第一个数所以第四行改成 int m = arr[0];
14 回复 分享
发布于 2021-01-09 00:13
大家赶紧把这大佬的答案顶上去把,楼1楼2问题多多。。
2 回复 分享
发布于 2020-11-19 09:04
妙啊,不过楼上老兄说的是,确实需要写 m = arr[0]
2 回复 分享
发布于 2021-01-20 13:38
题目保证没有全为负数的数据.所以累加和至少为0.注意:单个元素也算是一个长度为1的序列
1 回复 分享
发布于 2021-03-03 22:39
长度为1 ,就错了
1 回复 分享
发布于 2021-05-31 19:51
用给的例子算的话结果是错的啊
1 回复 分享
发布于 2021-08-16 23:28
动态规划
点赞 回复 分享
发布于 2020-12-24 15:48
确实,累加和可能是负数,不能用0
点赞 回复 分享
发布于 2021-03-03 10:55
m初始化为arr[0],但是这个方法也很巧妙了
点赞 回复 分享
发布于 2021-04-17 11:04
这个也是有问题的吧,m初始化为0 是有问题的,假如最大和为负数,则这就是错的,应该赋值为Integer.MIN_VALUE
点赞 回复 分享
发布于 2021-04-27 23:31
题目中声明了 数组中不会有全为负数的数据,所以最大和至少为0
点赞 回复 分享
发布于 2021-05-27 13:50
当长度为1时,这个答案就错啦。应该改为: public class Solution { /** * max sum of the subarray * @param arr int整型一维数组 the array * @return int整型 */ public int maxsumofSubarray (int[] arr) { // write code here int n=arr.length; if(n==1){ return arr[0]; } int max=0; for(int i=1;i
点赞 回复 分享
发布于 2021-06-04 21:34
当测试用例为[1,-2] [1,-2,-3] 这样的数据时,结果是不对的,预期结果是1,但是实际输出确实0,题目只是保证数据不是全为负数,这里面应该还有逻辑要考虑
1 回复 分享
发布于 2021-06-07 08:50
这个是有问题的
点赞 回复 分享
发布于 2021-06-21 19:57
应该初始化为数组第一个元素
点赞 回复 分享
发布于 2021-07-14 08:14
感谢大家批评指正!已更正
点赞 回复 分享
发布于 2021-08-03 15:03
问个问题,[1,-2]的子数组有[],[1],[-2],[1,-2],它的最大累加和不是1吗?
点赞 回复 分享
发布于 2021-09-18 23:56

相关推荐

11-15 18:39
已编辑
西安交通大学 Java
全村最靓的仔仔:卧槽,佬啥bg呢,本也是西交么
点赞 评论 收藏
分享
评论
108
14
分享
牛客网
牛客企业服务