Java教程

LeetCode——剑指 Offer 42. 连续子数组的最大和(Java)

本文主要是介绍LeetCode——剑指 Offer 42. 连续子数组的最大和(Java),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

题目描述

题干:
输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
要求时间复杂度为O(n)。

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

题解思路

返回连续子数组和最大值,直接强制命令你时间复杂度为O(n)

明显你提示你最佳答案是一次循环就可以解决,当然也不排除有更佳的办法

这里我们采用一次循环的做法,每次添加新元素后比较和新元素作比较

如果没有当前新元素大,说明前面的和为负数,所以直接保存当前元素,否则就保存和

之后每次比较当前和和以前保存的和,取出最大值即可

正确代码

    public int maxSubArray(int[] nums) {
        int pre = 0, ans = nums[0];
        for (int num : nums) {
            pre = Math.max(num, pre + num);
            ans = Math.max(pre, ans);
        }
        return ans;
    }

总结

官方给出了一个分支线段树的方法,不过确实不是我现在能参悟的

在维护和修改的方面来说确实是高,希望自己了解了线段树之后可以灵活运用到类似题目上

如果文章存在问题或则和有更好的题解,欢迎在评论区斧正和评论,各自努力,你我最高处见
这篇关于LeetCode——剑指 Offer 42. 连续子数组的最大和(Java)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!