代码随想录day50|198.打家劫舍、213.打家劫舍II、337.打家劫舍 III

news2024/12/28 17:40:29

198.打家劫舍 (中等

leetcode题目链接:198. 打家劫舍 - 力扣(LeetCode)

文章讲解:代码随想录 (programmercarl.com)

视频讲解:动态规划,偷不偷这个房间呢?| LeetCode:198.打家劫舍_哔哩哔哩_bilibili

题目描述

解题思路

对于第i家,有两种情况 :1.偷第i家。2.不偷第i家。那么偷不偷第二家其实和前两家有关。

如果偷了第i-2家,那么第i家就可以偷,如果偷了第i-1家,那么第i家就不能偷。

那么我们可以用动态规划的思路来解决这个问题。

1.dp数组及下标含义

dp[i]表示到第i家时,偷窃到的最大金额dp[i]。

2.递推公式

如果偷第i-2家,那dp[i] = dp[i-2] + nums[i]

如果偷第i-1家,那么dp[i] = dp[i-1]

故dp[i] = max(dp[i-1] , dp[i-2]+nums[i])

3.初始化

dp[0] = 0。

dp[1] = max (nums[0],nums[1])。

4.遍历顺序

从前往后偷。

题目代码

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 - 2] + nums[i], dp[i - 1]);
        }
        return dp[nums.size() - 1];
    }
};

213.打家劫舍II(中等

leetcode题目链接:213. 打家劫舍 II - 力扣(LeetCode)

文章讲解:代码随想录 (programmercarl.com)

视频讲解:动态规划,房间连成环了那还偷不偷呢?| LeetCode:213.打家劫舍II_哔哩哔哩_bilibili

题目描述

 

解题思路 

本题和上一题不同的情况就在于首位两个元素选不选的情况。

那么我们可以分成三种情况:

1.首位元素都不考虑,只考虑中间元素。

2.首元素考虑,尾元素不考虑。

3.首元素不考虑,尾元素考虑。

上面三种情况也就成了打家劫舍1的题,而对于情况1,在2和3中以及包含。故返回一个2 ,3最大值即可。

题目代码

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

337.打家劫舍 III(中等

题目代码

class Solution{
public:
    int rob(TreeNode * root) {
		vector<int> result = robTree(root);
		return max(result[0], result[1]);
    }
	vector<int> robTree(TreeNode* cur)
	{
		if (cur == nullptr)
			return { 0,0 };
		vector<int>left = robTree(cur->left);
		vector<int>right = robTree(cur->right);
		//偷cur
		int val1 = cur->val + left[0] + right[0];
		//不偷cur
		int val2 = max(left[0], left[1]) + max(right[0], right[1]);
		return { val2,val1 };
	}
};

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

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

相关文章

前端css介绍

CSS介绍 CSS&#xff08;Cascading Style Sheet&#xff0c;层叠样式表)定义如何显示HTML元素。 当浏览器读到一个样式表&#xff0c;它就会按照这个样式表来对文档进行格式化&#xff08;渲染&#xff09;。 CSS语法 CSS实例 每个CSS样式由两个组成部分&#xff1a;选择器和…

C语言 DAY07:预编译,宏,选择性编译,库(静态库,动态库)

声明与定义分离 声明&#xff1a;将声明单独封装成一个以.h为后缀名的头文件 定义&#xff1a;将定义的变量&#xff0c;函数&#xff0c;数组所在的源文件单独封装成一个.c文件。其实就是在源文件基础上将定义过的所有东西的声明分离出去就是了。 注意&#xff1a;1.声明的…

【MATLAB源码-第63期】基于matlab的DCSK(差分混沌移位键控调制)系统误码率仿真。

MATLAB 2022a 1、算法描述 DCSK&#xff08;Differential Chaos Shift Keying&#xff09;是一种差分混沌移位键控调制方式&#xff0c;常用于无线通信系统。其调制和解调的基本流程如下&#xff1a; 1. DCSK调制 1.1 生成混沌序列 - 初始条件&#xff1a;选择一个混沌映射&a…

[论文笔记]RetroMAE

引言 RetroMAE,中文题目为 通过掩码自编码器预训练面向检索的语言模型。 尽管现在已经在许多重要的自然语言处理任务上进行了预训练,但对于密集检索来说,仍然需要探索有效的预训练策略。 本篇工作,作者提出RetroMAE,一个新的基于掩码自编码器(Masked Auto-Encoder,MAE)…

rate-based 借贷式拥塞控制算法

有没有一种 rate-based 算法可以不测量 delivery rate&#xff0c;当然有&#xff01;直接套在 AIMD 上就行&#xff0c;虽然套在 bbr 上没什么不可。 传统 AIMD 拥塞控制代价很大&#xff0c;代价源自两点&#xff0c;首先&#xff0c;AI 有填 buffer 的趋势&#xff0c;其次…

四十二、【进阶】

目录 1、覆盖索引 2、案例分析 &#xff08;1&#xff09;select * 查询 &#xff08;2&#xff09;使用字段查询 &#xff08;3&#xff09;性能差异原因 3、分析 &#xff08;1&#xff09;主键id查询 &#xff08;2&#xff09;覆盖索引 1、覆盖索引 简单点说&#x…

【MySQL索引与优化篇】索引优化与查询优化

索引优化与查询优化 文章目录 索引优化与查询优化1. 概述2. 索引失效案例3. 关联查询优化3.1 Join语句原理3.2 Simple Nested-Loop Join&#xff08;简单嵌套循环连接&#xff09;3.3 Index Nested-Loop Join&#xff08;索引嵌套循环连接&#xff09;3.4 Block Nested-Loop Jo…

发布不到一月的4+经典单细胞+预后模型生信思路,可复现可升级

今天给同学们分享一篇单细胞预后模型的生信文章“Integrating single-cell and bulk RNA sequencing to predict prognosis and immunotherapy response in prostate cancer”&#xff0c;这篇文章于2023年9月20日发表在Scientific Reports期刊上&#xff0c;影响因子为4.6。 前…

数藏平台纷纷停运 用户手中数字藏品成了一张图

2021年8月2日&#xff0c;腾讯上线幻核数藏平台&#xff0c;随后QQ音乐、腾讯动漫、腾讯视频、腾讯新闻、起点读书等腾讯系应用都植入了数字藏品板块&#xff0c;强势进入国内数藏市场。国内数藏市场也迎来了起飞时刻。2022年底&#xff0c;数藏市场进入寒冬&#xff0c;曾经人…

数字展厅搭建平台要具备哪些功能,如何选择数字展厅搭建平台

引言: 数字展厅搭建平什台是现代营销中不可或缺的重要工具之一。它可以帮助企业打造个性化、多媒体、互动性强的展示空间&#xff0c;吸引、引导和留住目标用户。在选择数字展厅搭建平台时&#xff0c;我们需要考虑各方面的功能和性能&#xff0c;以确保能够满足企业的需求并取…

建筑模板材质-不同材质建筑模板优缺点分析

建筑模板是施工过程中不可或缺的重要材料&#xff0c;不同材质的建筑模板各有其优缺点。在众多材质中&#xff0c;广西桉木芯建筑模板以其独特的性能和优势备受青睐&#xff0c;下面将从不同材质的建筑模板入手&#xff0c;重点推荐广西桉木芯建筑模板。一、胶合板建筑模板胶合…

前端小程序 实现文字加载效果 文字跳动

效果 主要看充电中...的效果 ![1 实现 <view v-else class"status-working"><text class"letter letter1">充</text><text class"letter letter2">电</text><text class"letter letter3">中&l…

二十二、Arcpy批量波段组合——结合Landat数据城市建成区提取

一、前言 其实波段组合和GIS中栅格计算有点类似,实质上就是对每个像素点对应的DN值进行数学计算,也就是可以进行运算表达式是三个或多个变量相加、相减……每一个变量对应于一个图像数据,对这三个或多个图像数据求值并输出结果图像。 二、具体操作 1、实验具体目标 将202…

Android WMS——WMS窗口添加(十)

Android 的 WMS&#xff08;Window Manager Service&#xff09;是一个关键组件&#xff0c;负责管理窗口的创建、显示、布局和交互等。Window 的操作有两大部分&#xff0c;一部分是 WindowManager 来处理&#xff0c;一部分是 WMS 来处理&#xff0c;如下图所示&#xff1a; …

验收测试的关键步骤是怎样的?

验收测试是项目管理中的一个关键步骤&#xff0c;旨在确保项目交付物(通常是软件、产品或服务)符合预期的质量标准和需求。这个过程有助于验证项目的可交付成果是否满足客户或利益相关者的期望&#xff0c;同时也为项目团队提供了机会来修复可能存在的问题和改进之前的工作。 一…

一个方法,教你快速监测蓄电池!

随着电力需求的不断增长和可再生能源的快速发展&#xff0c;蓄电池技术已经成为能源存储领域的重要组成部分。 蓄电池不仅在家庭和工业应用中发挥着重要作用&#xff0c;还在电网稳定性和可持续能源集成方面具有关键地位。然而&#xff0c;蓄电池的有效监控和管理对于确保其可靠…

【Qt控件之QMessageBox】详解

Qt控件之QMessageBox 描述基于属性的API富文本和文本格式属性严重程度以及图标和Pixmap属性静态函数API 高级用法默认按钮和退出按钮示例使用场景 描述 QMessageBox类提供了一个模态对话框&#xff0c;用于通知用户或向用户提问并接收答案。 消息框显示一个主要文本以提醒用户…

软件测试 —— 冒烟测试(Smoke Test,ST)

1. 核心 冒烟测试就是完成一个新版本的开发后&#xff0c;对该版本最基本的功能进行测试&#xff0c;保证基本的功能和流程能走通。 如果不通过&#xff0c;则打回开发那边重新开发&#xff1b; 如果通过测试&#xff0c;才会进行下一步的测试(功能测试&#xff0c;集成测试&a…

SQLyog连接数据库报plugin caching_sha2_password could not be loaded......解决方案

问题描述 问题分析 因为MySQL新版默认使用caching_sha2_password作为身份验证的插件&#xff0c;而旧版本使用的是mysql_native_password。当出现plugin caching_sha2_password could not be loaded报错&#xff0c;我们更换为旧版本 如何解决 先使用cmd命令登录MySQL&a…

从零开始的LINUX(四)

1.yum&#xff1a; 功能&#xff1a;软件包管理器&#xff0c;功能类似与手机上的应用商店。通过yum可以获取指令的下载地址&#xff0c;然后一键式安装指令。由于yum中的地址一般都是外网的&#xff0c;所以需要镜像源&#xff08;即国内的下载地址&#xff09;。 相关指令&…