代码随想录算法训练营day39

news/2024/9/25 4:26:04/

1.打家劫舍

1.1 题目

. - 力扣(LeetCode)

1.2 题解

class Solution 
{
public:int rob(vector<int>& nums) {if(nums.size()==1)return nums[0];//确实dp数组的含义,dp[i]表示长度为i+1的数组能够偷得最大价值vector<int> dp(nums.size(), 0);//确定递推逻辑//dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);//初始化dp[0] = nums[0];dp[1] = max(nums[0], nums[1]);//递归for (int i = 2; i < nums.size(); i++){dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);}return dp[nums.size() - 1];}
};

2.打家劫舍II

2.1 题目

. - 力扣(LeetCode)

2.2 题解

class Solution 
{
public:int rob(vector<int>& nums) {if (nums.size() == 1)return nums[0];if(nums.size()==2)return max(nums[0],nums[1]);//只考虑首元素,不考虑尾元素vector<int> nums1(nums.begin(), nums.end()-1);int result1 = rob2(nums1);//只考虑尾元素,不考虑首元素vector<int> nums2(nums.begin()+1, nums.end());int result2 = rob2(nums2);return max(result1, result2);}int rob2(vector<int>& nums){//确定dp数组的含义,dp[i]表示nums长度为i+1的数组能够偷取的最大价值vector<int> dp(nums.size(), 0);//初始化dp[0] = nums[0];dp[1] = max(nums[0], nums[1]);//遍历for (int i = 2; i < nums.size(); i++){dp[i] = max(nums[i] + dp[i - 2], dp[i - 1]);}return dp[nums.size() - 1];}
};

3.打家劫舍III

3.1 题目

. - 力扣(LeetCode)

3.2 题解

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int rob(TreeNode* root) {//dp数组表示dp[0]表示不偷当前节点,dp[1]表示偷当前节点vector<int> result = reverse(root);return max(result[0], result[1]);}vector<int> reverse(TreeNode* node){//确定递归终止条件if (node == nullptr)return { 0,0 };vector<int> leftdp = reverse(node->left);vector<int> rightdp = reverse(node->right);//偷当前节点int value1 = node->val + leftdp[0] + rightdp[0];//不偷当前节点int value2 = max(leftdp[0], leftdp[1]) + max(rightdp[0], rightdp[1]);return{ value2,value1 };}
};

http://www.ppmy.cn/news/1530116.html

相关文章

PHP中如何比较两个对象

在PHP中&#xff0c;比较两个对象并不是一件直接明了的事情&#xff0c;因为对象之间的比较通常依赖于它们的属性和状态&#xff0c;而这些属性和状态可能非常复杂且多样化。PHP提供了几种方式来比较对象&#xff0c;但每种方式都有其特定的用途和限制。 1. 使用和运算符 在P…

【AI小项目5】使用 KerasNLP 对 Gemma 模型进行 LoRA 微调

目录 一、项目简介概述时间主要工作和收获技术栈数据集结果参考 二、完整代码概览设置安装依赖选择一个后端导入包 加载数据集加载模型微调前的推理欧洲旅行例子光合作用例子 LoRA 微调微调后的推理欧洲旅行例子光合作用例子 改进方向 三、背景知识补充Fine-tune&#xff08;微…

服务器管理:从零开始的服务器安装与配置指南

在现代IT环境中&#xff0c;服务器的安装和配置是每个运维工程师必须掌握的基本技能。本文将详细介绍如何从零开始安装和配置一台服务器&#xff0c;确保内容通俗易懂&#xff0c;并配以代码示例和必要的图片说明。 一、准备工作 在开始安装服务器之前&#xff0c;需要准备以…

关于es的一个多集群、多索引切换的实现

首先是封装了一个类里定义了关于集群名称和集群节点&#xff1b;以及关于索引的名称和集群的名称做一个关联&#xff1b;将多个集群封装存储得到类中 /*** es集群类*/ Data public class EsClusterConfig implements Serializable {/*** 集群名称*/private String name;/*** 集…

算法练习题26——等差素数数列 (2017年蓝桥杯试题B)

题目描述 我们知道&#xff0c;素数是只能被1和它自身整除的正整数&#xff0c;比如&#xff1a;2, 3, 5, 7, 11, 13, 17, 19, 23, 29 等。 类似地&#xff0c;如果一个数列中的所有元素都是素数&#xff0c;并且这些素数构成了一个等差数列&#xff08;即公差相等&#xff0…

【Linux探索学习】第一弹——Linux的基本指令(上)——开启Linux学习第一篇

前言&#xff1a; 在进入Linux学习之前&#xff0c;我们首先要先做好以下两点&#xff1a;1、已经基本掌握C语言或C&#xff0c;2、已经配置好了Linux的环境&#xff0c;做完以上两点后我们就开始Linux的学习&#xff0c;今天我们首先要学习的就是Linux中最基础的操作&#xff…

CSS的文本属性

text-align属性 指定文本的水平对齐方式 left: 文本居左对齐&#xff08;默认值) right: 居右对齐 center&#xff1a;居中对齐 .p1{text-align: left;}.p2{text-align: right;}.p3{text-align: center;} text-decorration属性 规定添加到文本的修饰&#xff0c;下划线&am…

React基础教程(10):React Hooks

9.1 使用hooks理由 高阶组件为了复用,导致代码层级复杂。生命周期的复杂。写成函数组件,无状态组件,因为需要状态,又写成了class,成本高9.2 useState(保存组件状态) const [state, setState] = useState(initialState);案例:点击按钮修改name