代码随想录Day52 | 打家劫舍

5个4000比特大状态置换算法的设计与分析 下面是 5 个概念性、实验性的 4000 位可逆置换设计。它们都保证是双射,但未经过密码分析,不可直接用于生产系统。风格分别覆盖:三维 SPN、Feistel、可逆元胞自动机、ARX、宽轨迹/Keccak 式结构。 这 5 个设计分别代表了 SPN、Feistel、元胞自动机、ARX、宽轨迹 Keccak 五种不同风格,覆盖了主流大状态置换的构造思路。再次强调:它们只是实验性概念,若要用于实际协议,必须经过严格安全性分析。 阅读详情

代码随想录Day52 | 打家劫舍

198.打家劫舍

文档讲解:代码随想录
视频讲解: 动态规划,偷不偷这个房间呢?| LeetCode:198.打家劫舍
状态

选与不选

  1. dp数组
    dp[j] 表示第j个位置的最大金额
  2. 递推公式
    dp[j] 是由dp[j-1]和dp[j-2]决定的,如果偷了j-1的房间就不能偷j,所以此时的金额是dp[j-1],如果没有偷j-1,那么dp[j]就是dp[j-2]+nums[j],所以取两者最大值即可
  3. 初始化
    要单独考虑没有房子或者房子只有有一个的情况
if(nums.size()==0) return 0;
if(nums.size() == 1) return nums[0];
dp[0] = nums[0];
dp[1] = max(nums[0],nums[1]);
  1. 遍历顺序
    从前向后即可
  2. 打印dp
//不能偷取相邻的
//dp[j] 表示第j个位置能获取到的最大金额
class Solution {
public:
    int rob(vector<int>& nums) {
        if(nums.size() == 0) return 0;
        if(nums.size() == 1) return nums[0];
        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(dp[i-1],dp[i-2]+nums[i]);
        }
        return dp[nums.size()-1];
    }
};

213.打家劫舍II

文档讲解:代码随想录
视频讲解: 动态规划,房间连成环了那还偷不偷呢?| LeetCode:213.打家劫舍II
状态

首尾相连,导致第一个元素和最后一个元素相邻,原本有3种情况

不包含首尾
不包含尾
不包含首

第二种和第三种情况包含了第一种所以可以不用考虑,但需要注意的是,包含首或者尾,并不代表要选择首或者尾

所以我们可以对两种情况分别求取最大值,然后再求一个最大值就可以了。

class Solution {
public:
    int findMax(vector<int>& nums)
    {
        if(nums.size() == 0) return 0;
        if(nums.size() == 1) return nums[0];
        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(dp[i-1],dp[i-2]+nums[i]);
        }
        return dp[nums.size()-1];
    }
public:
    int rob(vector<int>& nums) {
        if(nums.size() == 0) return 0;
        if(nums.size() == 1) return nums[0];
        vector<int> left(nums.begin(),nums.end()-1);
        vector<int> right(nums.begin()+1,nums.end());
        return(max(findMax(left),findMax(right)));
    }
};

337.打家劫舍III

文档讲解:代码随想录
视频讲解:
状态

父子节点不能同时偷取。

树形dp利用遍历二叉树确定递推公式
对于二叉树的遍历,有前后中以及层序遍历,这道题需要选择后序遍历,因为我们需要通过每层的返回值来判断中节点是否偷取,然后计算最终的偷取最大金额。

记忆化递归,利用数据结构记录已经递归过的结果,然后后续遇到就直接使用。

  1. dp数组
    因为是递归过程,dp数组只需要保存当前层的结果,即是否选择当前节点,那么就是一个2个元素的数组,分别表示选择或者不选择的偷取金额
  2. 递推公式
    相当于对于中节点的操作,如果偷取了中节点,那么左孩子和右孩子就不能偷 cur+left[0]+right[0]
    如果没有偷取中节点,那么左右孩子都可以偷,但是否偷就是选择最大的max(left[0],left[1]) + max(right[0],right[1])
    mid = {max(left[0],left[1]) + max(right[0],right[1]) , cur+left[0]+right[0] };
  3. 初始化
    相当于是递归到最后一层,初始化为0,0
  4. 遍历顺序
    对于左节点,计算是否偷取的结果金额
    对于右节点,计算是否偷取的结果金额
  5. 打印dp
/**
 * 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:
    vector<int> FindRob(TreeNode* root)
    {
        if(root == nullptr) return vector<int>{0,0};
        //遍历左右节点
        vector<int> left = FindRob(root->left);
        vector<int> right = FindRob(root->right);

        int val1 = root->val+left[0]+right[0];
        int val2 = max(left[0],left[1])+max(right[0],right[1]);
        return vector<int>{val2,val1};
    }
public:
    int rob(TreeNode* root) {
        vector<int> res = FindRob(root);
        return max(res[0],res[1]);
    }
};

树形dp的解决
将dp数组的初始化变为终止条件
dp数组的遍历变为递归顺序
dp数组的递推公式变为单层逻辑的处理

Brim与ZUI协同安装指南:从下载到流量分析实战 本文提供Brim与ZUI协同安装与实战指南,详细讲解从下载、环境变量配置到流量分析的全流程。通过将PCAP文件转换为ZNG格式,结合直观的Zed查询语言,这套组合能极大提升大型网络数据包的分析效率,是网络安全与运维人员进行高效流量分析的利器。 阅读详情

相关推荐

2023-12-26~2025-07-04备份

一、海康视觉与汇川机器人 服务器-客户端通信设置IP在同一网段名称IP端口类型海康相机工控机7930服务器机器人3000客户端海康VM服务器设置1通信管理 增添TCP服务端,设置本机IP:192.168.0.20,端口号79302 协议解析 通信双方约定通信格式(设置收发数据格式,分隔符)机器人客户端设置(不同类型机器人设置有差别)1 通讯服务设置 设置连接服务器IP、服务端端口号、机器人端口号,确保连接正常2 协议解析 使用指令代码构建通讯解析。

青铜小码农 3126

【Day52】代码随想录之动态规划_打家劫舍

房屋之间成环了,相邻两间房子都偷会使警报器响,所以首偷了尾就绝不能偷,首不偷尾可以偷。回顾打家劫舍Ⅰ,dp[i]的含义是考虑[0, i]房子可以偷窃的最大金额,dp[i] = max(dp[i-1], dp[i-2]+nums[i]),根据递推公式,在决定第i间房子可以偷窃的最大金额是受到i-1和i-2的影响的,再往前推i-1受到i-2和i-3的影响,递推下去dp[i]是受到[0-i-1]之前的房子的影响,有可能这些房子会偷,有可能不偷,但是是影响dp[i]的数值的。

weixin_46275441的博客 1073

抖音无人直播技术全解析:从原理、实操到合规化思考

直播技术作为内容分发的核心形式,其底层依赖于流媒体协议(如RTMP)与实时音视频编码推流。通过OBS等软件进行场景合成与虚拟摄像头技术,可以实现丰富的画面包装与自动化播放。这项技术的核心价值在于突破人力与时间的限制,实现内容的持续输出与流量获取,在电商带货、品牌展示、陪伴式内容等场景中具有应用潜力。然而,单纯依赖录播循环存在高风险,平台风控系统会通过内容重复性检测与互动行为模型进行识别。因此,更可持续的方向是探索“半无人直播”或自动化辅助工具,例如利用AI数字人驱动或直播切片技术,在合规前提下提升运营效率。

weixin_29895109的博客 507

代码随想录刷题笔记 Day 52 | 打家劫舍 No.198 | 打家劫舍 II No.213 | 打家劫舍III No.337

除此之外就没有任何差异了。所以大致可以把本题分为三种情况:第一个和最后一个都不要要第一个但是不要最后一个要最后一个不要第一个注意这里说的要或者不要不是说一定会去偷第一家或者最后一家,而是要不要考虑偷这两家的情况,所以第一种情况其实是包含在第二种和第三种情况之中的,所以只需要求最后两种情况,然后返回其中的。

kkq的博客 959

GD32F303开发实战(一):从零搭建MDK工程与时钟配置详解

本文详细介绍了如何从零开始为GD32F303微控制器搭建一个清晰、可维护的MDK工程模板。内容涵盖开发环境准备、工程目录结构规划、文件分组管理、关键工程配置,并重点解析了时钟树原理,手把手指导配置108MHz系统时钟。通过实战步骤与常见问题排查,帮助开发者构建一个稳定可靠的开发基础,便于后续功能扩展。

weixin_29174141的博客 269

AI爬虫:一文讲通AI爬虫技术和原理,及34个AI爬虫工具推荐

AI 爬虫 是一种结合了传统网络爬虫技术和人工智能(AI)技术的工具,能够更智能、高效地从网页中提取和处理数据。与传统爬虫相比,AI 爬虫能够更好地处理动态内容、复杂网页结构以及非结构化数据,同时具备数据清洗、分类、情感分析等高级功能。

数据知道的博客 1万+

代码随想录算法训练营Day52|LeetCode198打家劫舍、LeetCode213打家劫舍II、LeetCode337打家劫舍III(补卡)

LeetCode337打家劫舍III。LeetCode213打家劫舍II。LeetCode198打家劫舍。

m0_66412823的博客 340

用Playwright MCP让AI帮你完成所有浏览器自动化

Playwright MCP(Model Context Protocol)是微软基于 Playwright 框架推出的 AI 浏览器自动化新协议。它通过结构化快照数据和自然语言指令结合大型语言模型(如 GPT),实现无需编码的网页交互。无论你是要测试登录流程、抓取价格数据,还是用 AI 远程控制浏览器,Playwright MCP 都能大幅降低门槛,让“说人话”也能驱动自动化脚本。本篇将从功能介绍、技术架构、使用方法到实际场景,带你全面理解这一自动化革命。

todoitbo的博客 3万+

代码随想录算法训练营29期Day52|LeetCode 198,213,337

树上dp

tlingyuqi的博客 1488

ROS从入门到精通6-2:gmapping激光建图与自定义建图功能包

本文用Turtlebot3实例直观介绍激光建图概念,并实现自定义建图功能包(自动建图与键盘手动控制建图)

FRIGIDWINTER的博客 2662

VOS中历史话单显示通话会话超时中断详解

假设一种场景:  主叫拨打被叫,主叫方异常离线,被叫方接听,被叫方发送200ok至VOS,VOS传送200ok给主叫,但是主叫方未给出正常ack回应,VOS重发几次后(根据SIP参数设定的重发机制),然后VOS服务器会中断话务,历史话单终止原因为会话超时。 参考呼叫分析信令如下图: ...

非著名运维的博客 5017

day52【代码随想录】动态规划之总结篇

动态规划五部曲:1、确定dp数组(dp table)以及下标的含义2、确定递推公式3、dp数组如何初始化4、确定遍历顺序5、举例推导dp数组

qq_42338744的博客 1704

C++面向对象编程-继承与派生练习题

2、共同派生类 3、人员类Person的派生(虚基类的使用)

编程小鹏的博客 1191

DAY52:动态规划(打家劫舍系列)

如果不偷当前节点,那么左右孩子就可以偷,至于到底偷不偷一定是选一个最大的,所以:val2 = max(left[0], left[1]) + max(right[0], right[1]);所以dp[i]取最大值,即dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);如果偷第i房间,那么dp[i] = dp[i - 2] + nums[i]。dp[0]为num[0],dp[1]为max(num[0],num[1])因此只需要这两种情况都考虑,选一个最大的就可以。

weixin_43799497的博客 467

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

代码随想录五刷day10

动态规划

ResNet156的博客 1135

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

代码随想录系统性一刷总结

指针思想很重要day01 二分查找+移除元素day02 数组平方+长度最小子数组+螺旋矩阵II。

qq_44072579的博客 1048

代码随想录算法训练营29期|day52 任务以及具体安排

思路:该题和上题的区别就是一个环,首尾不能连上,所以需要分情况讨论,包含首节点不包含尾节点和不包含首节点包含尾节点的两种情况。然后求两种情况的最大值。思路:本题是典型的动态规划题目,dp数组表示到第i家时,能偷到的最大金额。递推公式为偷i和不偷i的最大值。思路:用dp[0]和dp[1]代表取该节点和不取的情况,用后序遍历推导递推公式,分两种情况讨论。第九章 动态规划part09。213.打家劫舍II。337.打家劫舍III。

m0_68520551的博客 280

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 192

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 298

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 561

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 20

C语言程序设计题|有序数组插入数字冒泡排序

题目要求将一个数插入有序数组末尾,并用冒泡排序实现整体升序。代码先将输入数存入数组最后位置,再通过双重循环进行冒泡排序,每轮将较大元素向后移动,最终输出11个升序元素。该方法虽时间复杂度为O(n²),但符合题目要求,逻辑清晰,适合初学者理解排序原理。

2301_81429079的博客 746

【算法拾光】模拟|外观数列 + 数青蛙

本文总结两道模拟题解法:外观数列通过迭代统计连续数字个数生成下一项,关键在于处理末尾字符;数青蛙则模拟青蛙叫声“croak”状态转移,维护各阶段青蛙数量,记录最大并发数并确保全部完成。共性在于严格遵循流程、细致处理边界与非法情况,锻炼字符串遍历与状态管理能力。

wuqingyigexiaoba的博客 367

牛客周赛165C题(前后缀性质,递推,排序,枚举)

题目大意:给定长度为 `n` 的数组,选择 `k ∈ [1,n]`,将前 `k` 个元素整体翻转,后面的元素不变。要求操作后的整个数组非递减,统计满足条件的 `k` 的数量。题目链接:https://ac.nowcoder.com/acm/contest/141721/C。时间复杂度:O(nlogn)

2501_94316951的博客 170

【数据结构-3】算法美学之降复杂度

在while循环的循环体内,首先用临时变量保存最后一个位置的数据,再通过for循环把所有元素往后移动一位,最后把tmp中保存的值放到下标为0的位置上去。方法二的思路是:创建新数组,让原数组中后k个数据移动到新数组中前面的位置,让原数组中前numsSize-k个数据移动到新数组中后面的位置,这。这段代码的思路是:三次逆置,第一次逆置前numsSize-k个数据,第二次逆置后k个数据,最后整体逆置。这篇博文分享一道解法不一的算法题,求解过程的目的在于降低算法的时间复杂度,题源力扣。,属于空间换时间的操作。

weixin_44218929的博客 81

算法61,判定是否为字符重排

两字符串能互为重排 ⇔。

sheshibenniaodan的博客 207

算法日常・每日刷题--<动态规划>32

给定严格递增的正整数数组,求最长斐波那契子序列长度。使用二维DP,dp[i][j]表示以arr[i]、arr[j]为最后两项的序列长度,初始化均为2。通过哈希表快速查找前一项target = arr[j] - arr[i],若存在且下标小于i,则状态转移:dp[i][j] = dp[k][i] + 1。遍历更新全局最大长度,最终若结果小于3则返回0。时间复杂度O(n²),空间复杂度O(n²)。

2503_92261635的博客 177
上一篇: 代码随想录Day51 | 139.单词拆分 多重背包
下一篇: 代码随想录Day53 | 股票买卖
sRiddle
博客等级 码龄7年 528粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值