首页 > 其他分享 >动态规划:剑指 Offer 42. 连续子数组的最大和

动态规划:剑指 Offer 42. 连续子数组的最大和

时间:2023-04-17 15:23:37浏览次数:36  
标签:初始化 遍历 乘积 Offer int 42 数组 dp

题目描述:

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

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

 

提示:

  • 1 <= arr.length <= 10^5
  • -100 <= arr[i] <= 100

 

 

 

class Solution{
    public int maxSubArray(int nums[]){
        int res = nums[0];//3.初始化
        for(int i=1;i<nums.length;i++){//4.遍历
            nums[i]+=Math.max(nums[i-1],0);//状态定义1.dp[i] = nums[i] //2.状态转移:dp[i]+=Math.max(nums[i-1],0)
            res = Math.max(res,nums[i]);
        }
        return res;//5.返回坐标
    }
}

 

dp五部曲:
        1.状态定义(确定dp数组及其下标含义):dp[i]为长度为i的绳子剪成m段最大乘积为dp[i]
        2.状态转移(确定递推公式):dp[i]有两种途径可以转移得到
            2.1 由前一个dp[j]*(i-j)得到,即前面剪了>=2段,后面再剪一段,此时的乘积个数>=3个
            2.2 前面单独成一段,后面剩下的单独成一段,乘积为j*(i-j),乘积个数为2
            两种情况中取大的值作为dp[i]的值,同时应该遍历所有j,j∈[1,i-1],取最大值
        3.初始化(dp数组初始化):初始化dp[1]=1即可
        4.遍历顺序:显然为正序遍历
        5.返回坐标:返回dp[n]

标签:初始化,遍历,乘积,Offer,int,42,数组,dp
From: https://www.cnblogs.com/zhz123567/p/17325942.html

相关文章

  • 远程的文件转换成byte数组
    1、使用OkHttp3库来将远程的GIF文件转换成InputStreamOkHttpClientclient=newOkHttpClient();Requestrequest=newRequest.Builder().url("http://xxxxx/resources/upload/20230414/3_yk_anim_cn_64_1.gif").build();......
  • 【剑指 Offer】 31. 栈的压入、弹出序列
    【题目】输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列{1,2,3,4,5}是某栈的压栈序列,序列{4,5,3,2,1}是该压栈序列对应的一个弹出序列,但{4,3,5,1,2}就不可能是该压栈序列的弹出序列。 示例1:......
  • es6 数组对象求和
    letlist=[{id:1,price:2},{id:2,price:4},{id:3,price:6},{id:4,price:8},];letres=list.reduce((sumData,key,index,arrData)=>{console.log('a',sumData);//上⼀次调⽤回调时返回的累积值c......
  • 数组4
    #include<string>#include<iostream>usingnamespacestd;inlinevoidtest(constchar*title,boolvalue){ cout<<title<<"returns"<<(value?"true":"false")<<endl;}intmain(){ strings1="DEF&q......
  • 【剑指 Offer】 29. 顺时针打印矩阵
    【题目】输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 示例1:输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例2:输入:matrix= [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7] 限制:0<=matrix.leng......
  • 13 数组基本概述
    1.数组基本概述 2.数组的基本使用 ......
  • NumPy 秘籍中文第二版:二、高级索引和数组概念
    在本章中,我们将介绍以下秘籍:安装SciPy安装PIL调整图像大小比较视图和副本翻转Lena花式索引位置列表索引布尔值索引数独的步幅技巧广播数组简介NumPy以其高效的数组而闻名。之所以成名,部分原因是索引容易。我们将演示使用图像的高级索引技巧。在深入研究索引之前,我们将安装必......
  • 2642. 设计可以求最短路径的图类
    题目链接:2642.设计可以求最短路径的图类方法一:Dijkstra解题思路每次调用\(shortestPath(st,ed)\)时,就通过\(Dijkstra\)算法计算\(st\)->\(ed\)的最短路。代码朴素写法classGraph{private:vector<vector<int>>adj;inte[110][110],n;public:G......
  • 数组3
    #include<iostream>usingnamespacestd;intmain(){ intLine1[]={1,0,0}; intLine2[]={0,1,0}; intLine3[]={0,0,1}; int*pLine[3]={line1,line2,line3}; cout<<"Matrixtest:"<<endl; for(inti=0;i<3;i++){ for(intj=0;j<3;j++) ......
  • 数组2
    #include<iostream>usingnamespacestd;voidrowSum(inta[][4],intnRow){ for(inti=0;i<nRow;i++){ for(intj=1;j<4;j++) a[i][0]+=a[i][j]; }}intmain(){ inttable[3][4]={{1,2,3,4},{2,3,4,5},{3,4,5,6}}; for(inti=0;i<3;i++){ for(intj=0;j<......