代码随想录算法训练营第三十九天-动态规划-213. 打家劫舍 II

news/2025/1/31 12:34:09 标签: 算法, 动态规划, c++, leetcode
  • 与上一题基本一样,只不过房间形成一个环,就需要在首尾考虑状况多一些
  • 这不是多一些状况的问题,是完全不知道如何选择的问题
  • 这种状况详细分析一下就是要分成三种情况
    • 第一种:不考虑首元素,也不考虑尾元素,只考虑中间的元素,那么中间的元素只需要按照上一题的方式来考虑就可以了,因为剔除了首尾元素,肯定就不会出现连续抢劫店家的情况
    • 第二种:不考虑尾元素,只考虑从到倒数第二家的情况
    • 第三种:不考虑首元素,只考虑从第二家到最后一家的情况
    • 这三种情况当中,第二种与第三种情况是包含了第一种情况的
    • 只考虑第二种与第三种情况下,就会把一个环形问题转化成线性问题(同上一题一样了)
    • 所以这个问题变变成去除尾元素的最值,与去除头元素最值的这两个值谁更大了
class Solution {
private:
    int commonRob(std::vector<int>& values) {
        if (values.size() == 1) {
            return values.at(0);
        }
        int dp[101];
        memset(dp, 0, sizeof(dp));
        dp[0] = values[0];
        dp[1] = std::max(values[0], values[1]);
        for (int i = 2; i < values.size(); ++i) {
            dp[i] = std::max(dp[i - 2] + values[i], dp[i - 1]);
        }
        return dp[values.size() - 1];
    }
public:
    int rob(vector<int>& nums) {
        if (nums.size() == 0) {
            return 0;
        }
        if (nums.size() == 1) {
            return nums.at(0);
        }
        std::vector<int> v1(nums.begin(), nums.end() - 1);
        std::vector<int> v2(nums.begin() + 1, nums.end());
        return std::max(commonRob(v1), commonRob(v2));
    }
};
  • 汇总

http://www.niftyadmin.cn/n/5838666.html

相关文章

4.用户 组

4.用户 组 **1. 用户和组信息获取****2. 链接文件操作****3. 错误处理****4. Makefile 编写****5. 系统编程基础****6. 练习与作业****7. 总结** 1. 用户和组信息获取 getpwuid&#xff1a; 函数原型&#xff1a;struct passwd *getpwuid(uid_t uid);功能&#xff1a;根据用户I…

「全网最细 + 实战源码案例」设计模式——桥接模式

核心思想 桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;将抽象部分与其实现部分分离&#xff0c;使它们可以独立变化。降低代码耦合度&#xff0c;避免类爆炸&#xff0c;提高代码的可扩展性。 结构 1. Implementation&#xff08;实现类…

AI协助探索AI新构型的自动化创新概念

训练AI自生成输出模块化代码&#xff0c;生成元代码级别的AI功能单元代码&#xff0c;然后再由AI组织为另一个AI&#xff0c;实现AI开发AI的能力&#xff1b;用AI协助探索迭代新构型AI将会出现&#xff0c;并成为一种新的技术路线潮流。 有限结点&#xff0c;无限的连接形式&a…

玩转大语言模型——使用langchain和Ollama本地部署大语言模型

系列文章目录 玩转大语言模型——使用langchain和Ollama本地部署大语言模型 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 玩转大语言模型——使用GraphRAGOllama构建知识图谱 玩转大语言模型——完美解决Gra…

AI DeepSeek-R1 Windos 10 环境搭建

1、安装&#xff1a; 下载 Python |Python.org CUDA Drivers for MAC Archive | NVIDIA pip 和virtualenv Download Ollama on Windows 如下图 2、下载模型 deepseek-r1 ollama run deepseek-r1 或者可以ollama run deepseek-r1:8b 或 3、安装一个可视化对话Chatbox 下载 …

代码随想录算法训练营第三十九天-动态规划-337. 打家劫舍 III

老师讲这是树形dp的入门题目解题思路是以二叉树的遍历&#xff08;递归三部曲&#xff09;再结合动规五部曲dp数组如何定义&#xff1a;只需要定义一个二个元素的数组&#xff0c;dp[0]与dp[1] dp[0]表示不偷当前节点的最大价值dp[1]表示偷当前节点后的最大价值这样可以把每个节…

SpringBoot AOP 和 事务

SpringBoot 整合 AOP 动态代理技术 JDK 动态代理 JDK 动态代理是 Java 自带的一种代理方式。它要求目标类必须有接口&#xff0c;基于这个接口&#xff0c;JDK 在运行时会动态生成一个代理对象。这个代理对象和目标对象就像 “拜把子” 的兄弟&#xff0c;因为它们都实现了相同…

arm-linux-gnueabihf安装

Linaro Releases windows下打开wsl2中的ubuntu&#xff0c;资源管理器中输入&#xff1a; \\wsl$gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz 复制到/home/ark01/tool 在 Ubuntu 中创建目录&#xff1a; /usr/local/arm&#xff0c;命令如下&#xff1a; …