首页 > 其他分享 >【小学数学向】最大子数组和

【小学数学向】最大子数组和

时间:2023-02-03 13:11:33浏览次数:40  
标签:nums 小学 number param length let 数组 max 数学

正规解法
状态转移方程 f(i)=max

var maxSubArray = function(nums) {
    let pre = 0, maxAns = nums[0];
    nums.forEach((x) => {
        pre = Math.max(pre + x, x);
        maxAns = Math.max(maxAns, pre);
    });
    return maxAns;
};

作者:LeetCode-Solution
链接:https://leetcode.cn/problems/maximum-subarray/solution/zui-da-zi-xu-he-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

蠢蠢的二维dp

/**
 * @param {number[]} nums
 * @return {number}
 */
var maxSubArray = function(nums) {
    let memo = Array.from(new Array(nums.length + 1),
        x => Array(nums.length).fill(null))
    memo[1] = nums
    let max = -Infinity
    /** @param {number} i start position
        @param {number} j length*/
    let dp = function(i,j) {
        let a = memo[j][i]
        if (memo[j][i] === null) 
            a = memo[j][i] = Math.max(dp(i,j - 1) + nums[i + j - 1], 
                dp(i + 1,j - 1) + nums[i])
        max = Math.max(a,max)
        return a
    }
    dp(0, nums.length)
    return max
};

改成递推 + 滚动数组,还是超时了,这其中有一些边界问题,很值得细细品味(比如j从0开始)

/**
 * @param {number[]} nums
 * @return {number}
 */
var maxSubArray = function(nums) {
    let memo1 = Array(nums.length).fill(0)
    let memo2 = []
    let max = -Infinity
    /** @param {number} i start location
        @param {number} j subarr.length */
    for (let j = 1;j <= nums.length;j++) {
        // 5个数,最后一个i应该是,5 - 2 + 1(位序)
        // 转换成数组下标就是len - j了
        for (let i = 0;i <= nums.length - j;i++)
            max = Math.max(memo2[i] = memo1[i] + nums[i + j - 1],max)
        memo1 = memo2;memo2 = []
    }
    return max
};

标签:nums,小学,number,param,length,let,数组,max,数学
From: https://www.cnblogs.com/dou-fu-gan/p/17088870.html

相关文章

  • java数组中的异常类型整理
    java数组中的异常类型整理对于程序中出现异常,是很多程序员不想看到的情况,因为这就需要我们去查询异常的原因,然后进行一些处理异常的操作。在java数组操作时,也会有一些异常......
  • Codeforces 1354 D. Multiset(树状数组)
    题意;要你实现一个求第k大数的数据结构。树状数组模板题。AC代码:constintN=1e6+50;inta[N];intn,q;voidadd(intp,intval){while(p<=n){a[p]+=va......
  • POJ 2299 Ultra-QuickSort(树状数组+离散化 或 归并排序求逆序)
    DescriptionInthisproblem,youhavetoanalyzeaparticularsortingalgorithm.Thealgorithmprocessesasequenceofndistinctintegersbyswappingtwoadjace......
  • 树状数组
    树状数组的作用    实际上,树状数组算是线段树的小弟角色,树状数组能解决的问题线段树一定能解决,而线段树能解决的问题树状数组却不一定能解决。两者都是在区间进行操......
  • . 楼兰图腾 (树状数组)
    题目描述在完成了分配任务之后,西部314来到了楼兰古城的西部。相传很久以前这片土地上(比楼兰古城还早)生活着两个部落,一个部落崇拜尖刀(‘V’),一个部落崇拜铁锹(‘∧’),他们......
  • 用数组模拟大数快速幂
    #include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<vector>#include<stdlib.h>#include<queue>#include<map>#include<iomanip>#include<ma......
  • POJ 3468(树状数组+区间修改)
    题目描述给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一:1、“Clrd”,表示把A[l],A[l+1],…,A[r]都加上d。2、“Qlr”,表示询问数列中第l~r个数的和......
  • HDU1098 Ignatius's puzzle (数学归纳法)
    Description:Ignatiusispooratmath,hefallsacrossapuzzleproblem,sohehasnochoicebuttoappealtoEddy.thisproblemdescribesthat:......
  • JS根据一个数组过滤另一个数组对象
    constarr1=[{id:1,name:'aaa'},{id:2,name:'bbb'},{id:3,name:'ccc'},{id:4,name:'ddd'}]constarr2=[{uid:2,uname:'eee......
  • Excel函数学习
    1.单条件求和=SUMIF(条件区域,求和条件,实际求和区域)2.多条件求和=SUMIFS(需要求和区域,条件区域1,求和条件1,条件区域2,求和条件2,......)3.单元格所在行位置=ROW(单......