栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

剑指 Offer 42. 连续子数组的最大和(leetcode每日打卡)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

剑指 Offer 42. 连续子数组的最大和(leetcode每日打卡)

目录

题目描述

思路

代码1

代码2 

代码3


题目描述

输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。

要求时间复杂度为O(n)。

搞不懂lc是怎么搞得空间复杂度消耗,麻了

示例1:

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

思路

特别明显的一道动态规划题

代码1
class Solution {
    public int maxSubArray(int[] nums) {
        if(nums.length==0){
            return 0;
        }
        int len=nums.length;
        int dp[]=new int[len];
        dp[0]=nums[0];
        int res=dp[0];
        for(int i=1;i 

添加备注

执行用时:1 ms, 在所有 Java 提交中击败了97.83%的用户

内存消耗:44.5 MB, 在所有 Java 提交中击败了95.08%的用户//这个有问题  LC

通过测试用例:202 / 202

时间复杂度O(N)

空间复杂度O(N)

代码2

不创建新数组,直接在原数组上进行改动

class Solution{

public int maxAraay(int []nums){

    if(nums.length==0){return 0;}
    int res=num[0];
    for(int i=1;i 

执行用时:1 ms, 在所有 Java 提交中击败了97.83%的用户

内存消耗:44.9 MB, 在所有 Java 提交中击败了56.19%的用户

通过测试用例:202 / 202

时间复杂度O(N)

空间复杂度O(1)

代码3
class Solution {
    public int maxSubArray(int[] nums) {
    int pre = 0, maxAns = nums[0];
        for (int x : nums) {
            pre = Math.max(pre + x, x);
            maxAns = Math.max(maxAns, pre);
        }
        return maxAns;
    }
}

执行结果:

通过

显示详情

添加备注

执行用时:1 ms, 在所有 Java 提交中击败了97.83%的用户

内存消耗:44.8 MB, 在所有 Java 提交中击败了70.80%的用户

通过测试用例:202 / 202

时间复杂度:O(n),其中 n为nums 数组的长度。我们只需要遍历一遍数组即可求得答案。
空间复杂度:O(1)。我们只需要常数空间存放若干变量。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/361153.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号