| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 打家劫舍问题总结 -> 正文阅读 |
|
[数据结构与算法]打家劫舍问题总结 |
打家劫舍1. 打家劫舍Ⅰ1.1 题目描述????????你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两件相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 【示例1】
【示例2】
来源:力扣(LeetCode) 【提示】
1.2 动态规划步骤分析
1.3 C++实现
测试
2. 打家劫舍Ⅱ2.1 题目描述????????你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。 ????????给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额 【示例1】
【示例2】
来源:力扣(LeetCode) 2.2 动态规划步骤分析对于一个数组,成环的话主要有如下两种情况,分别计算两种情况,然后取最大值即可。步骤分析同上。 2.3 C++实现
测试
3. 打家劫舍Ⅲ3.1 题目概述????????在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。 ????????计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。 3.2 动态规划步骤分析????????动态规划其实就是使用状态转移容器来记录状态的变化,这里可以使用一个长度为2的数组,记录当前节点偷与不偷所得到的的最大金钱。
????????其实这里的返回数组就是f 数组。所以f数组以及下标的含义:下标为0记录不偷该节点所得到的的最大金钱,下标为1记录偷该节点所得到的的最大金钱。本题f数组就是一个长度为2的数组!在递归的过程中,系统栈会保存每一层递归的参数。所以长度为2的数组可以标记树中每个节点的状态。 (2)确定终止条件
(3)确定遍历顺序
(4)确定单层递归的逻辑
3.3 C++实现时间复杂度:
O
(
n
)
O(n)
O(n),每个节点只遍历了一次
参考 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 13:39:19- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |