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

C++算法第十二天

本篇文章,我们继续学习动态规划

第一题

题目链接

面试题 17.16. 按摩师 - 力扣(LeetCode)

题目解析

代码原理

代码编写

细节问题处理

这里的细节问题就是当n == 0时的这种情况

完整源代码

class Solution {

public:

    int massage(vector<int>& nums) {

        int n = nums.size();

        //细节处理

        if(n == 0)

        return n;

        //建表

        vector<int> f(n), g(n);

        //初始化

        f[0] = nums[0], g[0] = 0;

        //填表

        for(int i = 1; i < n; i++)

        {

            f[i] = g[i - 1] + nums[i];

            g[i] = max(f[i - 1], g[i - 1]);

        }

        //返回结果

        return max(g[n - 1], f[n - 1]);

    }

};

第二题

题目链接

213. 打家劫舍 II - 力扣(LeetCode)

题目解析

代码原理

代码编写

class Solution {

public:

    int sloutionway(vector<int>& nums,int left,int right)

    {

        if(left > right) return 0;

        int n = nums.size();

        //建表

        vector<int>f(n),g(n);

        //初始化

        f[left] = nums[left];

        //填表

        for(int i = left + 1; i <= right; i++)

        {

            f[i] = g[i - 1] + nums[i];

            g[i] = max(f[i - 1], g[i - 1]);

        }

        return max(f[right], g[right]);

    }

    int rob(vector<int>& nums) {

        int n = nums.size();

        return max(sloutionway(nums, 1, n - 1), nums[0] + sloutionway(nums, 2, n - 2));

    }

};

第三题

题目链接

740. 删除并获得点数 - 力扣(LeetCode)

题目解析

下面的示例二也是一样的道理,总结一下还是选和不选的问题,只不过只有第一次删除才获得点数,后面删除的cur[i] + 1和cur[i] - 1都不加点数

代码原理

代码编写

class Solution {

public:

    int deleteAndEarn(vector<int>& nums) {

        const int N = 10001;

        //数组预处理

        int arr[N] = {0};

        for(auto cur: nums) arr[cur] += cur;

        //建表

        vector<int> f(N),g(N);

        //初始化

        f[0] = arr[0];

        //填表

        for(int i = 1; i < N; i++)

        {

            f[i] = g[i - 1] + arr[i];

            g[i] = max(f[i - 1], g[i - 1]);

        }

        return max(f[N - 1], g[N - 1]);

    }

};

本题总结

遇到与《选和不选》相关且数字有序(无序)有可能还是数字不连续的,需要先预处理一下原先的数组,之后在预处理好的新数组里面进行一次打家劫舍问题即可。

本篇文章的内容就先到这里,我们下期文章再见。

记得一键三联哦!!!


http://www.kler.cn/a/448096.html

相关文章:

  • ChatGPT与领域特定语言的集成
  • Marin说PCB之POC电路layout设计仿真案例---06
  • arm Rk3588 更新固件
  • RunCam WiFiLink连接手机图传测试
  • 智能工厂的设计软件 三种处理单元(NPU/GPU/CPU)及其在深度学习框架中的作用 之5(腾讯云AI代码助手 之3)
  • 物联网:全面概述、架构、应用、仿真工具、挑战和未来方向
  • 一起学Git【番外篇:如何在Git中新建文件】
  • OpenCV图像分割
  • UITableView实现通讯录效果
  • 【漏洞-Oracle】未设置口令复杂度校验、密码有效期
  • ELK系列-(六)Redis也能作为消息队列?(上)
  • 使用Python实现量子密钥分发:构建安全通信的未来
  • scala基础学习(数据类型)-字符串
  • Oracle筑基篇-调度算法-LRU的引入
  • 【MogDB】MogDB5.2.0重磅发布第十篇-支持PLSQL嵌套子程序
  • React:组件、状态与事件处理的完整指南
  • 软件测试之边界值分析法
  • 【分享-POI工具,Excel字段取值容错小工具】
  • 基于Controller模式部署RocketMQ集群
  • 【蓝桥杯选拔赛真题96】Scratch风车旋转 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析
  • tomcat的安装以及配置(基于linuxOS)
  • centos集群部署seata
  • Mono里运行C#脚本1
  • arXiv-2024 | 当视觉语言导航遇见自动驾驶!doScenes:基于自然语言指令的人车交互自主导航驾驶数据集
  • 【hackmyvm】eigthy 靶机wp
  • 无人机视频传输系统的通信能耗优化