猿创征文 |【算法面试入门必刷】动态规划-线性dp(三)

【算法面试入门必刷】动态规划-线性dp(三)

  • 前言
  • 算法入门刷题训练
    • 题目AB36:连续子数组最大和
      • 题目分析
      • 理论准备
      • 题解
      • 题解
  • 小结

个人主页:一二三o-0-O的博客
技术方向:C/C++客户端资深工程师(直播+音视频剪辑)
‍作者简介:数据结构算法与音视频领域创作者
系列专栏:牛客网面试必刷
专栏目标:帮助伙伴们通过系统训练,掌握数据结构与算法,收获心仪Offer
推荐一个找工作神器:牛客刷题网 【面试经验|实习招聘内推,求职就业一战解决】
如果对您有帮助的话,欢迎点赞收藏,关注不迷路

【算法入门必刷】数据结构-栈篇系列文章:
【算法入门必刷】数据结构-栈(一)
【算法入门必刷】数据结构-栈(二)
【算法入门必刷】数据结构-栈(三)
【算法入门必刷】数据结构-栈(四)
【算法入门必刷】数据结构-栈(五)

【算法入门必刷】动态规划-线性dp篇系列文章:
【算法面试入门必刷】动态规划-线性dp(一)
【算法面试入门必刷】动态规划-线性dp(二)
【算法面试入门必刷】动态规划-线性dp(三)

前言

开启刷题,请点击右边链接进行跳转点击这里

在这里插入图片描述

算法入门刷题训练

题目AB36:连续子数组最大和

题目分析

描述
给定一个长度为 n 的数组,数组中的数为整数。
请你选择一个非空连续子数组,使该子数组所有数之和尽可能大,子数组最小长度为1。求这个最大值。

题目要求求出连续子数组的最大和。首先有两个关键点,连续以及最大和。因此我们可以定义dp[i]为以第i-1个数字为结尾的数组的最大和,根据这样的状态定义我们可以得出递推公式:dp[i] = max(dp[i-1] + nums[i],nums[]i)

理论准备

任何算法都有相对应的算法模板或者有规律的解题步骤。对于动态规划来讲,做DP相关的算法题要熟练掌握下面DP解题步骤,这样有助于在面对到各种各样的题目时能够提高解题效率:

DP解题步骤:

  1. 首先要确定dp数组:是一维,二维还是三维;以及下标的含义是什么?
  2. 根据确定好的dp数组,给出递推公式,也叫状态转移方程。
  3. 确定dp数组是否需要初始化,初始化为多少。
  4. 确定遍历的顺序;这一步在背包相关的DP题目中非常重要。
  5. 根据测试用例进行验证

题解

具体的解决方案如下:

  1. 首先确定dp数组:是一维,二维还是三维;以及下标的含义是什么?
// 这里使用一维dp
// dp[i]为以第i-1个数字为结尾的数组的最大和
vector<int> dp(n);
  1. 根据确定好的dp数组,给出递推公式。
// 根据题目分析得出了以下递推公式:
// 以第i-1个数字为结尾的数组的最大和等于(以第i-2个数字为结尾的数组的最大和加上第i-1个数字)与(第i-1个数字)中的较大值
dp[i] = max(v[i],dp[i-1] + v[i]);
  1. 确定dp数组是否需要初始化,初始化为多少。
// 根据本题的边界条件,只需要将dp[0]赋值为数组的第一个元素即可
dp[0] = v[0];
  1. 确定遍历的顺序;这一步在背包相关的DP题目中非常重要。
// 本题从小到大遍历
for(int i{1};i<n;++i){
        
}
  1. 根据测试用例进行验证:选择所有的测试用例带入验证即可。

题解

具体的解决方案如下:

  1. 完整代码如下:
#include 
#include 
#include 
using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> v(n);
    for(int i{};i<n;++i){
        cin >> v[i];
    }
    
    vector<int> dp(n);
    dp[0] = v[0];
    int result = max(dp[0],INT_MIN);
    for(int i{1};i<n;++i){
        dp[i] = max(v[i],dp[i-1] + v[i]);
        if(dp[i] > result) result = dp[i];
    }
    
    cout << result;
    
    return 0;
}
// 64 位输出请用 printf("%lld")

当提交成功后,会展示如下界面,那么恭喜这道题目就通过了!
猿创征文 |【算法面试入门必刷】动态规划-线性dp(三)_第1张图片

小结

祝愿所有的伙伴都能拿到自己心仪的Offer!伙伴们点击右边链接立刻开启刷题吧:牛客——刷题网

你可能感兴趣的:(#,牛客网面试必刷,算法,面试,动态规划,职场和发展,连续子数组的最大和)