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

LeetCode53.最大子数组和

时间:2023-09-21 15:23:08浏览次数:35  
标签:最大 LeetCode53 int nums minSum 数组 maxSum sumUtilPos

要求最大连续子数组的和,可以这样考虑,比如现在我想求下标 i~j,i<j 这一范围内子数组的和,那么我可以分别先求出 0~i-1 范围和 0~j 范围两个子数组的和,可得Sum[i~j]=Sum[0~j]-Sum[0~i-1] ,这就是本题解法的核心思想。

解法详细描述:先从下标0开始,遍历 nums 数组,求出到当前下标位置的子数组和,得到 sumUntilPos 数组,再遍历  sumUntilPos  数组,从当前位置往前找该数组中值最小的元素,然后用当前位置的元素减去该值最小元素,即可获以当前位置为终点,最大的子数组之和是多少。最后选取其中求出的最大的子数组和返回。

class Solution {
    public int maxSubArray(int[] nums) {
        int sum = 0;
        int maxSum = -0xffff;
        int minSum = 0;
        int n = nums.length;
        int[] sumUtilPos = new int[n];
        for(int i=0;i<n;i++){
            sum += nums[i];
            sumUtilPos[i] = sum;
        }
        for(int j=0;j<n;j++){
            if(sumUtilPos[j]-minSum > maxSum)
                maxSum = sumUtilPos[j]-minSum;
            if(minSum > sumUtilPos[j])
                minSum = sumUtilPos[j];
        }
        return maxSum;
    }
}

 

 

标签:最大,LeetCode53,int,nums,minSum,数组,maxSum,sumUtilPos
From: https://www.cnblogs.com/rockdow/p/17720037.html

相关文章

  • vue通过 v-for循环出来的数组给元素 加不同的颜色
    直接上代码:1<divv-for="(item,i)incolorList":key="i">2<divclass="cmn-color">3<div:style="{'background':item}"></div><span>开发{{i+1}}</span>4</d......
  • 二维数组
    for(inti=0;i<array.GetLength(0);i++){for(intj=0;j<array.array.GetLength(1);j++){Console.WriteLine(array[i,j]);}//0,00,10,2//1,01,11,2}基本概念1.二维数组是使用两个下标(索引)来确定元素的数组两个下标可以理解为行标和列......
  • 稀疏数组
    稀疏数组稀疏数组介绍当一个数组中大部分元素为0,或为同一值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方式是:记录数组一共有几行几列,有多少个不同值把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模publicclassarrayDemo9{publ......
  • 【js】数组的几个常用方法
    filter、map、forEachfilterfilter()方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。注意:filter()不会对空数组进行检测。注意:filter()不会改变原始数组。语法:array.filter(function(currentValue,index,arr),thisValue)参数说明......
  • 124. 二叉树中的最大路径和
    二叉树中的路径被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中至多出现一次。该路径至少包含一个节点,且不一定经过根节点。路径和是路径中各节点值的总和。给你一个二叉树的根节点root,返回其最大路径和。示例1:输入:root=......
  • 数组变异方法和非变异方法的总结
    区别:1.操作数组的方法中,分为变异方法和非变异方法。2.其中,变异方法意味着会改变原数组,而非变异方法则只会返回一个新数组,不会修改原始数组数组变异方法:push()//数组尾部追加一个元素pop()//数组尾部弹出一个元素shift()//数组头部弹出一个元素unshift()//数组头部插入一个......
  • 树状数组
    树状数组(\(\text{fenwicktree}\))是主要用于前缀信息维护的一维数组——《信息学奥林匹克辞典》基础树状数组维护信息维护一个数列的元素的操作可进行的操作单点修改,即修改数列中其中一个元素的值区间查询,即查询数列中连续一段区间的值进行某种运算存储方法......
  • 单调队列与最大子序和问题
    HDU-1003-MaxSum题意:给定一个长度为$n$的序列$a_1,a_2,a_3,\cdot\cdot\cdota_n(-10^3\lea_i\le10^3,1\len\le10^5)$,找出其中一个和最大的连续子段,并输出最大的和、该子段的起始下标。思路一:DP设$f_i$:以$a_i$结尾的最大子序和。因为......
  • JavaScript数组filter方法
    1.数组filter方法作用筛选数组,将满足条件的元素放入新数组中2.语法:array.filter(function(item,index,arr){})第一个参数:item,必须,当前元素的值第二个参数:index,可选,当前元素在数组中的索引值第三个参数:arr,当前元素所处的数组对象3.filter方法特点(1)函......
  • ES6中数组新增了的扩展
    扩展运算符的应用ES6通过扩展元素符...,比如 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列console.log(...[1,2,3])//123console.log(1,...[2,3,4],5)//12345[...document.querySelectorAll('div')]//[<div>,<div>,<div>]主要用于函数调用的时候......