当前位置: 首页 > article >正文

动态规划19:53. 最大子数组和

动态规划解题步骤:

1.确定状态表示:dp[i]是什么

2.确定状态转移方程:dp[i]等于什么

3.初始化:确保状态转移方程不越界

4.确定填表顺序:根据状态转移方程即可确定填表顺序

5.确定返回值

题目链接:53. 最大子数组和 - 力扣(LeetCode)

题解:

1.状态表示:dp[i]表示以i位置元素为结尾的连续子数组中,最大和连续子数组的元素和

2.状态转移方程:dp[i]=max(dp[i-1]+nums[i],nums[i]) 以i位置元素为结尾的连续子数组有两种情况:一是仅有i位置元素组成一个子数组;二是由i位置元素和前面的元素组成一个子数组

3.初始化:dp[0]=nums[0] 根据状态转移方程,以nums[0]为结尾的子数组只有情况一

4.填表顺序:从左向右填写

5.返回值:返回dp数组中的最大元素,即连续子数组的最大和

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        //dp[i]表示以i位置元素为结尾的所有连续子数组中最大的子数组和
        //dp[i]=max(dp[i-1]+nums[i],nums[i])
        size_t n=nums.size();
        //处理边界条件
        if(n==1) return nums[0];
        //创建dp表
        vector<int> dp(n);
        //初始化
        dp[0]=nums[0];
        //填表
        for(int i=1;i<n;++i)
            dp[i]=max(dp[i-1]+nums[i],nums[i]);
        //返回值
        int ans=-0x3f3f3f3f;
        for(auto e:dp) if(e>ans) ans=e;
        return ans; 
    }
};

http://www.kler.cn/news/362108.html

相关文章:

  • 基于SSM+微信小程序的家庭记账本管理系统(家庭1)
  • php中的错误和异常捕获
  • 代码随想录-哈希表-两个数组的交集
  • C语言位运算
  • SpringBoot实现的智能个人理财平台
  • DORA 机器人中间件学习教程(6)——激光点云预处理
  • solidworks管理员运行install.bat提示[sC]0penService 失败 5:拒绝访问。请按任意键继续...
  • YOLO11改进 | 注意力机制 | 添加SE注意力机制
  • U盘文件删除后的全面恢复指南
  • 纯css实现瀑布流! 附源码!!!
  • Android Studio Gradle版本、插件以及Android API对应关系(持续更新)
  • 二百六十八、Kettle——同步ClickHouse清洗数据到Hive的DWD层静态分区表中(每天一次)
  • docker 误删gitlab文件,另类的删库跑路,如何进行恢复?
  • css 不管目录结构层级。父元素有很多块子元素,孙子元素。希望从左往右从上往下排列
  • MySQL程序介绍<二>
  • TensorRT推理端到端
  • Nodejs上传阿里云oss图片案例
  • jupyter notebook 笔记
  • uniapp-components(封装组件)
  • 可能不常用到的Git命令
  • Springboot实现阿里云短信验证服务+Redis缓存
  • 手撕布隆过滤器:原理解析与面试心得
  • QT-子项目管理
  • 【JavaScript fetch API】简介和使用
  • 牛只行为及种类识别数据集18g牛只数据,适用于多种图像识别,目标检测,区域入侵检测等算法作为数据集。数据集中包括牛只行走,站立,进食,饮水等不同类型的数据
  • SpringBoot接收RequestBody数据时,参数大写接收不到数据以及解决办法