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

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.mzph.cn/diannao/24816.shtml

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

相关文章

【中颖】SH79F9202 串口通信

头文件 uart.h #ifndef UART_H #define UART_H#include "SH79F9202.h" #include "LCD.h" #include "timer2.h" #include "timer5.h" #include "cpu.h" #include "key.h" #include "io.h" #include &qu…

Meta Llama 3 RMSNorm(Root Mean Square Layer Normalization)

Meta Llama 3 RMSNorm&#xff08;Root Mean Square Layer Normalization&#xff09; flyfish 目录 Meta Llama 3 RMSNorm&#xff08;Root Mean Square Layer Normalization&#xff09;先看LayerNorm和BatchNorm举个例子计算 LayerNormRMSNorm 的整个计算过程实际代码实现结…

OpenCV的核心数据结构

Mat类 Mat类是OpenCV中最重要的数据结构之一&#xff0c;用于表示图像和矩阵数据。Mat类封装了多维数组&#xff0c;并提供了多种操作图像数据的方法和函数。 Mat类的主要属性和方法 构造函数&#xff1a; Mat()&#xff1a;创建一个空的Mat对象。Mat(int rows, int cols, int…

Linux内核epoll

Linux网络IO模型 同步和异步&#xff0c;阻塞和非阻塞 Linux下的五种IO模型 同步和异步&#xff0c;阻塞和非阻塞 Linux 下的五种I/O模型&#xff1a; 阻塞IO&#xff08;Blocking IO&#xff09; BIO 非阻塞IO&#xff08;No Blocking IO&#xff09; IO复用&#xff08;se…

Linux系统管理磁盘管理004

本章主要讲述详细lvm扩容。 操作系统&#xff1a; CentOS Stream 9 扩容目标&#xff1a; jianglv扩容到600MB 扩容前 [rootlocalhost ~]# lvdisplay lgb--- Logical volume ---LV Path /dev/lgb/nginx_lvmLV Name nginx_lvmVG Name …

DEJA_VU3D - Cesium功能集 之 121-底图机制

前言 编写这个专栏主要目的是对工作之中基于Cesium实现过的功能进行整合,有自己琢磨实现的,也有参考其他大神后整理实现的,初步算了算现在有差不多实现小140个左右的功能,后续也会不断的追加,工作原因可能无法像以前那样周更2-3篇,但是闲下来还是会不定期的更新,Cesium不…

手把手教你实现条纹结构光三维重建(1)——多频条纹生成

关于条纹结构光三维重建的多频相移、格雷码、格雷码相移、互补格雷码等等编码方法&#xff0c;我们在大多数平台上&#xff0c;包括现在使用语言大模型提问&#xff0c;都可以搜到相关的理论&#xff0c;本人重点是想教会你怎么快速用代码实现。 首先说下硬件要求&#xff0c;…

从0到1:企业办公审批小程序开发笔记

可行性分析 企业办公审批小程序&#xff0c;适合各大公司&#xff0c;企业&#xff0c;机关部门办公审批流程&#xff0c;适用于请假审批&#xff0c;报销审批&#xff0c;外出审批&#xff0c;合同审批&#xff0c;采购审批&#xff0c;入职审批&#xff0c;其他审批等规划化…

7-7 二分搜索

7-7 二分搜索 分数 10 全屏浏览 切换布局 作者 王东 单位 贵州师范学院 二分搜索。 输入样例&#xff1a; 第一行输入一个数n&#xff0c;第二行输入n个数&#xff0c;第三行输入要查的值。 12 11 14 23 25 68 78 84 97 155 201 310 479 97输出样例&#xff1a; 输出ke…

云计算期末复习(3)

Amazon云计算 习题 私有IP、公有IP和弹性IP的区别在哪里? EC2的实例一旦被创建就会动态地分配公共IP地址和私有IP地址。私有IP地址由动态主机配置协议(DHCP)分配产生。 私有IP、公有IP和弹性IP的主要区别在于它们的使用场景、可达性和管理方式&#xff1a; 私有IP&#xff1a…

基于Flask的python后端,组合支付记录,充值余额+赠送余额+微信支付功能实现详解

手里一个项目 涉及到订单补差价的支付问题&#xff0c;记录下代码与逻辑 该系统基于Flask框架&#xff0c;并支持多种支付方式的组合&#xff0c;包括直接微信支付、充值账户余额支付和赠送账户余额支付。 本文将详细介绍这一差价支付功能的实现细节&#xff0c;代码主要包括四…

46-1 护网溯源 - 钓鱼邮件溯源

一、客户提供钓鱼邮件样本 二、行为分析 三、样本分析 对钓鱼邮件中的木马程序1111.exe文件进行了分析,提交了360安全大脑沙箱云和微步在线云沙箱。 360安全大脑沙箱云显示,该1111.exe文件存在危险,因此在解压时需要谨慎操作,以免触发木马程序。 建议使用360压缩软件进行…

面试(02)————Java集合篇

目录 一、为什么数组索引是从0开始&#xff1f;如果从1开始不行吗&#xff1f; 二、ArrayList底层的实现原理是什么&#xff1f; ​编辑三、ArrayList list new ArrayList(10)中的list扩容几次&#xff1f; 四、如何实现数组与List之间的转换&#xff1f; 五、ArrayList…

Swift 序列(Sequence)排序面面俱到 - 从过去到现在(三)

概述 在上一篇 Swift 序列(Sequence)排序面面俱到 - 从过去到现在(二) 博文中,我们介绍了如何构建一个自定义类型中“多属性”排序的通用实现。 而在本课中我们将再接再厉介绍 iOS 15+ 中新的排序机制,并简要剖析就地排序(In-place sorting)对运行性能有着怎样的显著影…

基础乐理入门

基础概念 乐音&#xff1a;音高&#xff08;频率&#xff09;固定&#xff0c;振动规则的音。钢琴等乐器发出的是乐音&#xff0c;听起来悦耳、柔和。噪音&#xff1a;振动不规则&#xff0c;音高也不明显的音。风声、雨声、机器轰鸣声是噪音&#xff0c;大多数打击乐器&#…

【RK3568】制作Android11开机动画

Android 开机 logo 分为两种&#xff1a;静态显示和动态显示。静态显示就是循环显示一张图片&#xff1b;动态显示就是以特定帧率顺序显示多张图片 1.准备 android logo 图片 Android logo最好是png格式的&#xff0c;因为同一张图片的情况下&#xff0c;png 格式的比 jpg和b…

线性表和链表

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

shell编程(二)——字符串与数组

本文为shell 编程的第二篇&#xff0c;介绍shell中的字符串和数组相关内容。 一、字符串 shell 字符串可以用单引号 ‘’&#xff0c;也可以用双引号 “”&#xff0c;也可以不用引号。 单引号的特点 单引号里不识别变量单引号里不能出现单独的单引号&#xff08;使用转义符…

ChatTTS增强版V2,批量导出srt,语速控制,情感控制,支持朗读数字,问题修复

ChatTTS增强版最新版本已经发布&#xff0c;本次更新我主要增加了多文本批量、SRT导出、语速控制、情感控制、停顿控制等新功能&#xff0c;并针对上一版本中存在的数字读音异常、随机uv_break等问题进行了修复。 视频版本 【ChatTTS增强版V2&#xff0c;批量导出srt&#xff…

Java - Date类与Calendar类

在Java中&#xff0c;Date 类和 Calendar 类都被用于处理日期和时间&#xff0c;但它们之间存在一些重要的差异。下面是对这两个类的简要说明以及它们之间的主要区别。 Date 类 java.util.Date 类表示一个特定的时间点&#xff08;精确到毫秒&#xff09;。它包含自1970年1月…