代码随想录算法训练营第36期DAY50

news2025/6/20 6:20:36

DAY50

如果写累了就去写套磁信吧。

198打家劫舍

  1. class Solution {
  2. public:
  3.     int rob(vector<int>& nums) {
  4.         vector<intdp(nums.size());
  5.         dp[0]=nums[0];
  6.         if(nums.size()==1return nums[0];
  7.         dp[1]=max(nums[0],nums[1]);
  8.         for(int i=2;i<nums.size();i++){
  9.             dp[i]=max(dp[i-1],dp[i-2]+nums[i]);
  10.         }
  11.         return dp[nums.size()-1];
  12.     }
  13. };

213打家劫舍ii

数组成环,分三种情况:

  1. 不考虑首尾
  2. 不考虑首,仅考虑尾
  3. 不考虑尾,仅考虑首

注意,考虑不代表必选。

那么情况2 3 就已经包括了情况1。

写函数来解决,就不用挪数组。

注意是从dp[start]开始赋值

  1. class Solution {
  2. public:
  3.     int getres(vector<int>nums,int start,int end){
  4.         vector<intdp(nums.size());
  5.         if(start==end) return nums[start];
  6.         dp[start]=nums[start];
  7.         dp[start+1]=max(nums[start],nums[start+1]);
  8.         //注意i的初值
  9.         for(int i=start+2;i<=end;i++)
  10.         dp[i]=max(dp[i-2]+nums[i],dp[i-1]);
  11.         return dp[end];
  12.     }
  13.     int rob(vector<int>& nums) {
  14.         if(nums.size()==1return nums[0];
  15.         int res1=getres(nums,0,nums.size()-2);
  16.         int res2=getres(nums,1,nums.size()-1);
  17.         if(res1>res2) return res1;
  18.         else return res2;
  19.     }
  20. };

337打家劫舍 iii--树形DP

能想到:后序遍历,把孩子信息传到父节点:若孩子之和没有大于父节点,则买入父节点。反之买入孩子之和。还要注意一些复杂的逻辑。还是不会。

节点之间的状态影响进一步计算,那么是动态规划

状态dp表示抢或不抢,抢的话,就不能动两个孩子;不抢的话,就要考虑动孩子了。

  1. 暴力递归

超时了:

  1. /**
  2.  * Definition for a binary tree node.
  3.  * struct TreeNode {
  4.  *     int val;
  5.  *     TreeNode *left;
  6.  *     TreeNode *right;
  7.  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
  8.  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  9.  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  10.  * };
  11.  */
  12. class Solution {
  13. public:
  14. //这个递归还挺难想
  15.     int rob(TreeNode* root) {
  16.         if(root==nullptr) return 0;
  17.         if(root->left==nullptr&&root->right==nullptr) return root->val;
  18.         int val1=root->val;
  19.         if(root->left) val1+=rob(root->left->left)+rob(root->left->right);
  20.         if(root->right) val1+=rob(root->right->left)+rob(root->right->right);
  21.         int val2=rob(root->left)+rob(root->right);
  22.         return max(val1,val2);
  23.     }
  24. };

  1. 动态规划

记录当前偷与不偷得到的最大金额。

树形DP,在树上做状态转移。

求一个节点,偷与不偷两个状态分别所得到的金钱,返回值是一个长度为2的数组。

  1. /**
  2.  * Definition for a binary tree node.
  3.  * struct TreeNode {
  4.  *     int val;
  5.  *     TreeNode *left;
  6.  *     TreeNode *right;
  7.  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
  8.  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  9.  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  10.  * };
  11.  */
  12. class Solution {
  13. public:
  14.     vector<intgetres(TreeNode* cur){
  15.         if(cur==nullptrreturn {0,0};
  16.         vector<int> left=getres(cur->left);
  17.         vector<int> right=getres(cur->right);
  18.         int val1=cur->val+left[0]+right[0];
  19.         int val2=max(left[0],left[1])+max(right[0],right[1]);
  20.         return {val2,val1};
  21.     }
  22.     int rob(TreeNode* root) {
  23.         vector<int> res=getres(root);
  24.         return max(res[0],res[1]);
  25.     }
  26. };

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

嵌入式Linux中使用PWM应用编程详解

大家好,今天给大家分享一下,如何使用linux系统中PWM实现应用端的控制,以及PWM控制详解。 第一:PWM基本原理 PWM,英文名Pulse width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字…

【Python机器学习】PCA——特征提取(1)

PCA的一个重要应用是特征提取。特征提取背后的思想是&#xff0c;可以找到一种数据表示&#xff0c;比给定的原始表示更适合于分析。特征提取很有用&#xff0c;它的一个很好的应用实例就是图像。图像由像素组成&#xff0c;通常存储于红绿蓝强度。图像中的对象通常由上千个像素…

Python可视化 | 使用matplotlib绘制面积图示例

面积图是数据可视化中的一个有效工具&#xff0c;用于说明时间上的关系和趋势。它们提供了一种全面的、视觉上迷人的方法&#xff0c;通过熟练地将折线图的可读性与填充区域的吸引力相结合来呈现数值数据。 在本文中&#xff0c;我们将学习更多关于在Python中创建面积折线图的…

Polar Web【简单】PHP反序列化初试

Polar Web【简单】PHP反序列化初试 Contents Polar Web【简单】PHP反序列化初试思路EXP手动脚本PythonGo 运行&总结 思路 启动环境&#xff0c;显示下图中的PHP代码&#xff0c;于是展开分析&#xff1a; 首先发现Easy类中有魔术函数 __wakeup() &#xff0c;实现的是对成员…

时光正好保剑锋的抱治百病与成年人的世界

《时光正好》&#xff1a;保剑锋的“抱治百病”与成年人的世界在繁忙的都市里&#xff0c;每个角落上演着各自的人生戏码。而在这些戏码中&#xff0c;由保剑锋主演的《时光正好》无疑成为了近期引人注目的焦点。这部电视剧以其真实而深刻的剧情&#xff0c;让我们看到了成年人…

【教学嘞-64-01】20240607颜色找茬-0-255随机底色

背景需求 AI对话大师到期了&#xff0c;后续无法使用了&#xff0c;这是我用AI对话大师写的最后一个代码 代码展示 颜色找茬&#xff1a;找出不同颜色的色块 AI对话大师&#xff0c;阿夏 2025年6月7日from PIL import Image, ImageDraw import randompath rC:\Users\jg2yXRZ\…

vite常识性报错解决方案

1.导入路径不能以“.ts”扩展名结束。考虑改为导入“xxx.js” 原因&#xff1a;当你尝试从一个以 .ts 结尾的路径导入文件时&#xff0c;ESLint 可能会报告这个错误&#xff0c;因为它期望导入的是 JavaScript 文件&#xff08;.js 或 .jsx&#xff09;而不是 TypeScript 文件&…

毫米波雷达深度学习技术-1.6目标识别2

1.6.4 自动编码器和变体自动编码器 自编码器包括一个编码器神经网络&#xff0c;随后是一个解码器神经网络&#xff0c;其目的是在输出处重建输入数据。自动编码器的设计在网络中施加了一个瓶颈&#xff0c;它鼓励原始输入的压缩表示。通常&#xff0c;自编码器旨在利用数据中的…

cleanmymacx最新破解版百度云免费下载 cleanmymac激活码分享

CleanMyMac X4.15.3 中文破解版是一款 mac 系统清理软件&#xff0c;是一款专业的 Mac 清理、优化和维护工具&#xff0c;可以帮助用户清理系统垃圾、卸载不需要的应用程序、优化系统性能、保护隐私和安全等&#xff0c;让用户的 Mac 始终保持高效、安全和稳定。 CleanMyMac X4…

[经验] 涠洲岛在广西吗 #职场发展#知识分享#媒体

涠洲岛在广西吗 广西涠洲岛&#xff0c;是中国南海上的一颗闪亮明珠&#xff0c;位于广西北部湾沿海&#xff0c;东经108.71度&#xff0c;北纬21.54度&#xff0c;距离北海市区30公里&#xff0c;是中国最大的海岛之一&#xff0c;风景秀丽&#xff0c;气候温和。岛上山青水秀…

【进阶篇-Day2:JAVA包、抽象类、接口、多态】

目录 1、包2、抽象类2.1 抽象类的定义2.2 抽象类的注意事项2.3 abstract关键字的冲突 3、接口3.1 接口的介绍3.2 接口中的成员特点3.2.1 接口中的成员特点3.2.2 类和接口之间的各种关系 3.3 抽象类和接口的对比 4、多态4.1 多态的介绍4.2 多态的前提4.3 多态的成员访问特点4.4 …

Java线程本地变量ThreadLocal

ThreadLocal ThreadLocal有什么用 通常情况下&#xff0c;我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的专属本地变量该如何解决呢&#xff1f; JDK中的ThreadLocal类正是为了解决这样的问题&#xff0c;ThreadLocal类主要解决的就是让每…

SpringBoot+Vue网上购物商城系统(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 系统角色对应功能 用户商家管理员 系统功能截图

测试基础11:测试用例设计方法-等价类划分

课程大纲 1、概述 1.1测试用例设计方法意义 穷举测试&#xff1a;每种输入都测一次。最完备&#xff0c;但不现实。 使用设计方法&#xff0c;用最少的数据&#xff08;成本&#xff09;&#xff0c;实现最大的测试覆盖。 1.2常用设计方法 ①等价类划分 ②边界值分析 ③错误推…

vue3自定义组件并全局导入

自定义组件&#xff1a;幕布 涉及的效果&#xff1a;点击出现幕布并且内容可变动 使用的技术&#xff1a;vue3的slot componentcomponents curtain&#xff08;组件页面&#xff09;&#xff1a; <template><div class"curtain"><slot></s…

在UI界面中实现3d人物展示

简要原理(设置双摄像机): 为需要展示的3D人物单独设置一个摄像机(只设置为渲染人物层级),主要摄像机的方向与人物方向一致,但摄像机需要需要旋转180,设置的角度自行进行微调创建一个Render Texture类型的组件用于存储摄像机渲染的内容UI上设置需要展示的图片区域,图片…

线性表和链表

一&#xff0c;线性结构 1.Array Array文档&#xff1a;可以自行阅读相关文档来了解Array class array.array(typecode[, initializer]) array.append(x)&#xff1a;添加元素到数组末尾 array.count(x)&#xff1a;计算元素出现次数 array.extend(iterable)&#xff1a;将迭代…

ipables防火墙

一、Linux防火墙基础 Linux 的防火墙体系主要工作在网络层&#xff0c;针对 TCP/IP 数据包实施过滤和限制&#xff0c;属于典 型的包过滤防火墙&#xff08;或称为网络层防火墙&#xff09;。Linux 系统的防火墙体系基于内核编码实现&#xff0c; 具有非常稳定的性能和高效率&…

SpringBoot的Mapper文件什么时候需要使用@Param注解

解决&#xff1a;nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘XXX‘ not found 关于加注解&#xff0c;其他博客说的很清楚&#xff01;但是有的人会遇见明明使用的springboot2.x以上版本&#xff0c;仍然提示需要加注解&#xff01;这是为…

SQL Server设置默认Schema (修正运行版)

目录 方法 1&#xff1a;执行 USE 命令 方法 2&#xff1a;执行 ALTER USER 命令 方法 3&#xff1a;在查询中包含Schema 总结 在 SQL Server 中&#xff0c;通过 JDBC 设置会话的默认Schema并不是很直接&#xff0c;但可以使用一些变通方法来实现。以下是一些管理默认Sche…