牛客-NC19-子数组的最大累加和问题

NC19. 子数组的最大累加和问题(easy)


方法一:直接遍历法(最优解)

思路:这里注意题目对时间、空间复杂度的要求,所以我们不能使用动态规划来写(虽然后面提交了也没有超时)。我们首先默认数组中的第0个元素是最大的,然后从下标1开始,遵循以下规则:(1)保证每个位置的值至少比原始的大;(2)每次遍历都更新ret,用于保存当前最大的累加和。于是,可以写出以下代码:

import java.util.*;


public class Solution {
   
    /** * max sum of the subarray * @param arr int整型一维数组 the array * @return int整型 */
    public int maxsumofSubarray (int[] arr) {
   
        // write code here 
        // 特判
        if (arr == null || arr.length == 0) return 0;
        if (arr.length == 1) return arr[0];
        // 直接遍历法
        int ret = arr[0];
        for (int i = 1; i < arr.length; i++) {
   
            // 保证每个位置的值至少比原始的大
            arr[i] = Math.max(arr[i], arr[i - 1] + arr[i]);
            // 每次遍历都更新ret,用于保存当前最大的累加和。
            ret = Math.max(arr[i], ret);
        }
        // 返回该值
        return ret;
    }
}

时间复杂度: O(N),最坏情况下,需要遍历所有数组元素,即子数组为整个数组。
空间复杂度: O(1), 未使用额外的空间。

全部评论

相关推荐

点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-02 18:35
简历上把1个月实习写成了3个月,会进行背调吗?
码农索隆:一个月有一个月的实习经历,三个月有三个月的实习经历
点赞 评论 收藏
分享
06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-04 14:23
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务