LeetCode 53. Maximum Subarray

LeetCode 53. Maximum Subarray (最大子序和)

题目

链接

https://leetcode-cn.com/problems/maximum-subarray

问题描述

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

示例

这边有动态规划的思想在里面,从头到尾遍历,如果和小于0,那么直接无视,重新开始,和大于0,就加上之前的和。每次都保留当前最大的和,直到输出。

提示

1 <= nums.length <= 105
-104 <= nums[i] <= 104

思路

这边有动态规划的思想在里面,从头到尾遍历,如果和小于0,那么直接无视,重新开始,和大于0,就加上之前的和。每次都保留当前最大的和,直到输出。

复杂度分析

时间复杂度 O(n)
空间复杂度 O(1)

代码

Java

    public static int maxSubArray(int[] nums) {
        int ans = nums[0];
        int sum = 0;
        for (int num : nums) {
            if (sum >= 0) {
                sum += num;
            } else {
                sum = num;
            }
            ans = Math.max(sum, ans);
        }
        return ans;
    }
posted @ 2020-02-11 22:06  cheng102e  阅读(85)  评论(0编辑  收藏  举报