[LeetCode] 53. 最大子序和

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。

分析

  • 动态规划

解法

  • 记录每个位置的连续子数组最大和,计算每个位置时考虑是否加上上一位的最大和连续数组

  • 时间复杂度O(\(n\)),n为数组长度

  • 空间复杂度O(\(1\))

class Solution {
    public int maxSubArray(int[] nums) {
        // 初始化当前位置连续子数组最大和
        int pre = 0;
        // 初始化最终结果
        int max = nums[0];
        // 遍历数组
        for (int x : nums) {
            // 计算当前位置连续子数组最大和
            pre = Math.max(pre + x, x);
            // 更新最终结果
            max = Math.max(max, pre);
        }
        return max;
    }
}

//class Test{
//    public static void main(String[] args) {
//        Solution test = new Solution();
//        int[] nums = {-2,1,-3,4,-1,2,1,-5,4};
//        System.out.println(test.maxSubArray(nums));
//    }
//}
上一篇:mysql按照秒、分钟、小时、天、月、年统计数量


下一篇:53 Spring Cloud使用Sleuth在应用中进行日志跟踪