代码随想录打卡Day39

今天是打家劫舍专题,三道题全都看了讲解,第一次做感觉确实是无从下手。。。不过了解了原理之后代码很快就写出来了。

198.打家劫舍

这道题使用一维dp数组,首先确定dp数组的含义,dp[i]为考虑偷下标[0, i]家的情况下所能获得的最大收益,对于每一家,都有两个状态,偷与不偷,当选择偷时,则收益为当前房子的金币 + 上上个房子的最大收益(上上个房子不一定非要偷),当选择不偷时,其收益为上个房子的最大收益(可偷可不偷)。

class Solution {
public:int rob(vector<int>& nums) {//1.确定dp[i]的含义:考虑下标在[0, i]的房间的情况下,所能偷的最多的钱为dp[i]//2.确定递推公式  dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);//3.dp数组初始化 dp[0] = nums[0], dp[1] = max(nums[0], nums[1]);//4.确定遍历顺序:从小到大遍历//5.打印数组(省略)vector<int> dp(nums.size());//初始化dp[0] = nums[0];if(nums.size() > 1)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.back();}
};

213.打家劫舍II

这个环形问题我一开始想的是用求余操作来解决,但是想了半天也没想出来用求余怎么做,于是还是去看视频了。。这个环形问题主要还是拆解成两个线性问题,首元素和尾元素不能同时纳入考虑范围,所以构造两个数组,一个是不包含尾元素的向量,另一个是不包含首元素的向量,这就转换成了上一道题的思路,分别对两个线性表求最大收益,取其中的较大值返回即可。

class Solution {
public:int rob(vector<int>& nums) {//1.确定dp[i]的含义:考虑下标在[0, i]的房间的情况下,所能偷的最多的钱为dp[i]//2.确定递推公式  dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);//3.dp数组初始化 dp[0] = nums[0], dp[1] = max(nums[0], nums[1]);//4.确定遍历顺序:从小到大遍历//5.打印数组(省略)if(nums.size() == 1) return nums[0];//考虑首元素而不考虑尾元素的情况vector<int> nums1(nums.begin(), nums.end() - 1); //[0, nums.size() - 2]//考虑尾元素而不考虑首元素的情况vector<int> nums2(nums.begin() + 1, nums.end()); //[1, nums.size() - 1]vector<int> dp1(nums1.size());vector<int> dp2(nums2.size());dp1[0] = nums1[0];dp2[0] = nums2[0];if(dp1.size() > 1){dp1[1] = max(nums1[0], nums1[1]);dp2[1] = max(nums2[0], nums2[1]);}for(int i = 2; i < nums1.size(); i++){dp1[i] = max(dp1[i - 2] + nums1[i], dp1[i - 1]);dp2[i] = max(dp2[i - 2] + nums2[i], dp2[i - 1]);}  return max(dp1.back(), dp2.back());}
};

337.打家劫舍III

这道题是树形dp,以前从来没见过,感觉对我来说确实还是太难了。这道题需要用一个大小为2的一维数组保存每一个节点偷与不偷时的最大收益,通过递归遍历二叉树的所有节点,得到每个节点偷与不偷时的最大收益,这里直接定义一个返回向量的递归遍历函数,当选择偷根节点时,左右孩子都不能偷,则收益为root -> val + left_dp[1] + right_dp[1],选择不偷根节点时,则返回左右孩子各自的最大收益的总和(并不是根节点没偷就一定要偷其左右孩子),则收益为max(left_dp[0], left_dp[1]) + max(right_dp[0], right_dp[1])。在主函数中直接拿一个向量接住调用遍历函数且输入参数为根节点root时的结果,再返回向量中的较大值即可。

class Solution {
public:vector<int> Travelsal(TreeNode* root){//确定终止条件if(root == NULL) return {0, 0};//后序遍历,dp[0]为偷时的最大金币,dp[1]为不偷时的最大金币vector<int> left_dp = Travelsal(root -> left);  //左孩子节点偷与不偷vector<int> right_dp = Travelsal(root -> right); //右孩子节点偷与不偷vector<int> root_dp;//根节点选择偷,左孩子和右孩子都不能偷root_dp.push_back(left_dp[1] + right_dp[1] + root -> val);//根节点选择不偷,则左孩子和右孩子可偷可不偷,取决于哪种状态的收益更大root_dp.push_back(max(left_dp[0], left_dp[1]) + max(right_dp[0], right_dp[1]));return root_dp;}int rob(TreeNode* root) {vector<int> dp = Travelsal(root);return max(dp[0], dp[1]);}
};

明天就可以休息了,nice!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/429130.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ | Leetcode C++题解之第423题从英文中重建数字

题目&#xff1a; 题解&#xff1a; class Solution { public:string originalDigits(string s) {unordered_map<char, int> c;for (char ch: s) {c[ch];}vector<int> cnt(10);cnt[0] c[z];cnt[2] c[w];cnt[4] c[u];cnt[6] c[x];cnt[8] c[g];cnt[3] c[h] - …

YOLOv10 简介

YOLOv10&#xff0c;由清华大学的研究人员基于 Ultralytics Python 包构建&#xff0c;引入了一种全新的实时目标检测方法&#xff0c;该方法解决了以往 YOLO 版本中后处理和模型架构方面的不足。通过消除非极大值抑制&#xff08;NMS&#xff09;并优化各种模型组件&#xff0…

【解决】chrome 谷歌浏览器,鼠标点击任何区域都是 Input 输入框的状态,能看到输入的光标

chrome 谷歌浏览器&#xff0c;鼠标点击任何区域都是 Input 输入框的状态&#xff0c;能看到输入的光标 今天打开电脑的时候&#xff0c;网页中任何文本的地方&#xff0c;只要鼠标点击&#xff0c;就会出现一个输入的光标&#xff0c;无论在哪个站点哪个页面都是如此。 我知道…

十四、运算放大电路

运算放大电路 1、理想运算放大器的概念。运放的输入端虚拟短路、虚拟断路之间的区别; 2、反相输入方式的运放电路的主要用途&#xff0c;以及输入电压与输出电压信号的相位 3、同相输入方式下的增益表达式(输入阻抗、输出阻抗)

Redis-01 入门和十大数据类型

Redis支持两种持久化方式&#xff1a;RDB持久化和AOF持久化。 1.RDB持久化是将Redis的数据以快照的形式保存在磁盘上&#xff0c;可以手动触发或通过配置文件设置定时触发。RDB保存的是Redis在某个时间点上的数据快照&#xff0c;可以通过恢复RDB文件来恢复数据。 2.AOF持久化…

55. QTableWidget的基本使用

1. 说明 在软件界面开发中,基本上离不开数据的展示以供客户查看一些比较关注的信息,比如公司做一个员工个人信息管理系统,需要一个界面能够展示员工个人基本信息,实现这种效果可以采用多种形式,其中比较简单的一种是使用QT提供的QTableWidget控件,这个控件已经封装了一些…

LeetCode 面试经典150题 190.颠倒二进制位

复习知识&#xff1a;正数的原码、反码、补码相同&#xff0c;负数的反码在其原码的基础上, 符号位不变&#xff0c;其余各个位取反&#xff0c;负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后1 (即在反码的基础上1)。 题目&#xff1a;颠倒给定的 32 位无符号…

Springboot3 + MyBatis-Plus + MySql + Uniapp 商品加入购物车功能实现(最新教程附源码)

Springboot3 MyBatis-Plus MySql Uniapp 商品加入购物车功能实现&#xff08;针对上一篇sku&#xff09; 1、效果展示2、后端代码2.1 model2.2 mapper server serverImpl 参照上一篇自动生成2.3 controller 3、前端代码3.1 index.js3.2 shop-info.vue3.3 ShopBottomButton.v…

计算机毕业设计hadoop+spark+hive新能源汽车销售数据分析系统 二手车销量分析 新能源汽车推荐系统 可视化大屏 汽车爬虫 机器学习

《HadoopSparkHive新能源汽车销售数据分析系统》开题报告 一、选题背景与意义 1.1 选题背景 随着全球对环境保护意识的增强和能源结构的转型&#xff0c;新能源汽车市场迅速崛起。新能源汽车的销售数据不仅反映了市场趋势和消费者偏好&#xff0c;还为企业决策、政府监管和政…

【玉米田】

题目 代码 #include <bits/stdc.h> using namespace std; typedef long long LL;const int mod 1e8; const int M 1 << 12; LL f[13][M]; int g[13]; vector<int> state; vector<int> p[M]; int n, m; bool check(int x) {return !(x & x <&…

“一屏显江山”,激光显示重构「屏中世界」

【潮汐商业评论/原创】 2024年国庆期间&#xff0c;曾感动过无数国人的舞蹈诗剧《只此青绿》改编的同名电影即将上映&#xff0c;而这一次观众们不必走进电影院&#xff0c;在家里打开官方合作的海信激光电视也能享受到同等的视听效果&#xff0c;这是激光电视在观影场景领域的…

java 获取集合a比集合b多出来的对象元素

public class OrderListEntity {/*** deprecated 对象集合的处理* param aData 集合a* param bData 集合b* return 返回集合a比集合b多出来的部分, 通过id判断*/public static List<OrderListEntity> AHasMoreThanBData(List<OrderListEntity> aData, List<Ord…

Stable Diffusion 使用详解(11)--- 场景ICON制作

目录 背景 controlNet 整体描述 Canny Lineart Depth 实际使用 AI绘制需求 绘制过程 PS打底 场景模型选择 设置提示词及绘制参数 controlnet 设置 canny 边缘 depth 深度 lineart 线稿 效果 背景 这段时间不知道为啥小伙伴似乎喜欢制作很符合自己场景的ICON。…

鸿蒙开发(HarmonyOS)组件化浅谈

众所周知&#xff0c;现在组件化在移动开发中是很常见的&#xff0c;那么组件化有哪些好处&#xff1a; 1. 提高代码复用性&#xff1a;组件化允许将应用程序的不同功能模块化&#xff0c;使得这些模块可以在不同的项目中重复使用&#xff0c;从而提高开发效率并减少重复工作。…

LabVIEW编程能力如何能突飞猛进

要想让LabVIEW编程能力实现突飞猛进&#xff0c;需要采取系统化的学习方法&#xff0c;并结合实际项目进行不断的实践。以下是一些提高LabVIEW编程能力的关键策略&#xff1a; 1. 扎实掌握基础 LabVIEW的编程本质与其他编程语言不同&#xff0c;它是基于图形化的编程方式&…

行业人工智能研究-Python自监督方式学习图像表示算法

学术界人工智能研究落后于工业界 摘要 行业或工业界在人工智能研究上超出学术界&#xff0c;并占据着大量的计算力&#xff0c;数据集和人才诱人的薪水和明朗的预期吸引大量人才离开学术界&#xff0c;涌入行业或工业界即使&#xff0c;比如Meta开源其人工智能模型&#xff0…

小程序地图展示poi帖子点击可跳转

小程序地图展示poi帖子点击可跳转 是类似于小红书地图功能的需求 缺点 一个帖子只能有一个点击事件&#xff0c;不适合太复杂的功能&#xff0c;因为一个markers只有一个回调回调中只有markerId可以使用。 需求介绍 页面有地图入口&#xff0c;点开可打开地图界面地图上展…

python:编写一个函数查找字符串中的最长公共前缀

最近在csdn网站上刷到一个题目&#xff0c;题目要求编写一个函数查找字符串中的最长公共前缀&#xff0c;题目如下&#xff1a; 给出的答案如下&#xff1a; from typing import List def longestCommonPrefix(strs:List[str]) -> str:if len(strs) 0:return i 0 #代…

2024/9/21 数学20题

常见概率可加性&#xff1a;

网络安全详解

目录 引言 一、网络安全概述 1.1 什么是网络安全 1.2 网络安全的重要性 二、网络安全面临的威胁 2.1 恶意软件&#xff08;Malware&#xff09; 2.2 网络钓鱼&#xff08;Phishing&#xff09; 2.3 中间人攻击&#xff08;Man-in-the-Middle Attack&#xff09; 2.4 拒…