首页 > 其他分享 >Leecode 最大子数组和

Leecode 最大子数组和

时间:2024-09-21 13:55:34浏览次数:3  
标签:pre 最大 nums int max Leecode num 数组

思路1:先了解前缀和的概念, pre[a] =\sum_{j=0}^{a}sums(j) ,这题的答案可以转换为:将前缀和pre数组的下标作为x,下标对应的值作为y,建立坐标系得到一条pre折线,找到折现所有最小值与最大值差值最大的(最小值在前最大值在后)值就是本题的答案,也是与买卖股票最佳时机思路一样了

思路2:对于以nums[j]元素为结尾的最大字串和f(j) 只需要根据前一个元素的f(j-1)来推算,即Max(f(j-1)+nums[j], nums[j]),这样只需要遍历nums数组并使用pre数组记录以当前元素为结尾的最大子数组的和即可空间复杂度为O(n)时间复杂度为O(n),因为只需要所有子数组的最大值,pre数组可以使用一个变量代替空间复杂度为O(1),时间复杂度为O(n)

思路1代码如下:

    public static int maxSubArray(int[] nums){
        int currentMin =0; //记录截至到当前前缀和的最小值,初始值为pre[0] =0
        int currentPreSum = 0; //记录截至到当前元素的前缀和
        int max = Integer.MIN_VALUE; //记录所有当前前缀和与最小值的差值中最大的
        for (int num : nums) {
            currentPreSum+=num;
            max= Math.max(currentPreSum-currentMin,max);
            currentMin = Math.min(currentMin,currentPreSum);
        }
        return max;
    }

思路2代码如下:

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

标签:pre,最大,nums,int,max,Leecode,num,数组
From: https://blog.csdn.net/weixin_51161807/article/details/142406412

相关文章

  • Leecode 滑动窗口最大值
     使用了双向链表输入:nums=[1,3,-1,-3,5,3,6,7],和k=3输出:[3,3,5,5,6,7]解释过程中队列中都是具体的值,方便理解,具体见代码。初始状态:L=R=0,队列:{}i=0,nums[0]=1。队列为空,直接加入。队列:{1}i=1,nums[1]=3。队尾值为1,3>1,弹出队尾值,加入3。队列:{3}i=2,nums[......
  • C++ 数组声明和初始化
    显式初始化数组元素如果指明了维度,那么初始值的总数量不应该超出指定的大小。如果维度比提供的初始值数量大,则用提供的初始值初始化靠前的元素,剩下的元素被初始化成默认值(参见3.3.1节,第88页):constunsigneds=3;intial[sz]={0,1,2};//含有3个元素的数组,元素值分......
  • JavaScript --- 3种数组去重的方法
     方法1<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="wi......
  • JavaScript --- 数组常用方法(3)
    foreach遍历<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content=&......
  • [leetcode刷题]面试经典150题之3删除有序数组中的重复项(简单)
    题目 删除有序数组中的重复项给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。考虑 nums 的唯一元素的数量为 k ,你......
  • 代码随想录算法训练营第一天 | 209. 长度最小的子数组 59. 螺旋矩阵 58. 区间和 Java
    209.长度最小的子数组题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/description/解题思路思路1:暴力解法通过两个for循环,找出所有的可能的区间,并比较出最小区间思路2:滑动窗口因为需要找出的是连续的一个子数组,所以可以模拟一个从左到右滑动的一个......
  • 配置 sql server 最大内存 sqlserver内存最佳配置
    sqlserver微软安装根据业务特点来考虑1、分析产品业务数据的增长量预估某些关键业务数据在一定时间内的增长量,预估数据在未来的增长数据,2、了解产品业务操作类型。考虑业务是以查询为主还是以更新为主。从而选择多大的内存。SQLserver配置1、服务端的SQLserver配置管......
  • JavaScript 数组操作
    在javascript中操作2d、3d或4d数组对于ai模型训练和图像/音频/视频分析是必要的。下面是一些使用纯javascript进行数组操作的有用函数,无需使用tensorflow.js等矩阵包。二维数组的转置functiontranspose_2d_array(arr){vartranspose_colnum=arr.length;v......
  • JavaScript 数组方法:综合指南
    数组是javascript中最基本的数据结构之一。使用数组,您可以在单个变量中存储多个值。javascript提供了许多内置方法来操作数组,使它们具有令人难以置信的通用性。在这篇文章中,我们将探讨所有内置数组方法以及如何在javascript项目中有效地使用它们。核心方法forea......
  • JavaScript 中的数组分组(4)
    JavaScript中的数组分组(2024)数组分组在JavaScript中并不是什么新鲜事。数组分组是JavaScript中的一项新功能,可帮助开发人员根据特定特征将数组中的元素组织成组。这使得查找和使用数据变得更加容易。现在的问题是它是如何运作的?好吧,在最新和现代的方法出现之前,开发人员将......