动态规划-leetcode#213 打家劫环形舍
这题与leetcode#198相似,只是升级为环形房屋,也就是第一个和最后一个也是相邻的。回顾一下简单版解决方案:
class Solution {//leetcode#198代码
public:int rob(vector<int>& nums) {if(nums.empty()) return 0;vector<int> dp(nums.size(),0);dp[0]=nums[0];for(int i=1;i<nums.size();i++){int use_i = i>=2?dp[i-2]+nums[i]:nums[i];int not_i = dp[i-1];dp[i] = max(use_i,not_i);}return dp[nums.size()-1];}
};
环形的屋,也就是说打劫第一家,就不能打劫最后一家,打劫最后一家就不能打劫第一家,因此分两次求最大值,然后整体求最大值。
class Solution {
public:int rob(vector<int>& nums) {if(nums.empty()) return 0;if(nums.size()==1) return nums[0];vector<int> dp(nums.size(),0);dp[0]=nums[0];int res=0;for(int i=1;i<nums.size()-1;i++){int use_i = i>=2?dp[i-2]+nums[i]:nums[i];int no_i = dp[i-1];dp[i] = max(use_i,no_i);}res = dp[nums.size()-2];dp[0]=0;for(int i=1;i<nums.size();i++){int use_i = i>=2?dp[i-2]+nums[i]:nums[i];int no_i = dp[i-1];dp[i] = max(use_i,no_i);}res = max(res,dp[nums.size()-1]);return res;}};
动态规划-leetcode#213 打家劫环形舍相关推荐
- Leetcode_6_Dynamic Programming_198,213打家劫室,打家劫室II
自己写滴~ 198.打家劫室 class Solution {public int rob(int[] nums) {if(nums.length==0) return 0; int[] dp=new ...
- 【LeetCode】Day51-打家劫舍 III变形
题目1 198. 打家劫舍[中等] 题解 第一道自己动手做出来的动态规划,快哭了 class Solution {public int rob(int[] nums) {int n=nums.leng ...
- 动态规划——打家劫舍||(Leetcode 213)
题目选自Leetcode 213. 打家劫舍|| 给定一个代表金额的非负整数数组nums,相邻房间不可偷并且房间是围成一圈的,让我们输出可以偷窃到的最高金额. 题目描述: 解题思路: 这三种情况哪个结 ...
- [动态规划] leetcode 10 正则表达式匹配
[动态规划] leetcode 10 正则表达式匹配 1.题目 题目链接 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 ...
- [LeetCode解题报告] LCP 49. 环形闯关游戏
[LeetCode解题报告] LCP 49. 环形闯关游戏 一. 题目 1. 题目描述 2. 原题链接 二. 解题报告 1. 思路分析 2. 复杂度分析 3. 代码实现 三. 本题小结 四. 参考链接 ...
- 42 - 算法 - 198-打家劫舍-动态规划
// 动态规划 // 当前状态 前两个状态 dp[i] = max(dp[i-2]+num[i] , dp[i-1]) ;using namespace std; class Solution {pu ...
- Leetcode 213.大家劫舍II
打家劫舍II 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金.这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的.同时,相邻的房屋装有相互连通的防盗系统,如果两 ...
- 103. Leetcode 213. 打家劫舍 II (动态规划-打家劫舍)
步骤一.确定状态: 确定dp数组及下标含义 dp数组和房屋数一样大小, dp[i]表示到第i个房屋的时候, 能够偷窃到的最 高金额 步骤二.推断状态方程: 对于当前的dp[i], 有两个方向,取决于能 ...
- LeetCode198打家劫社(线性动态规划)
题目链接:Leetcode198 Code: class Solution {public:int rob(vector<int>& nums) {//dp[i]表示偷盗到第i家获 ...
- leetcode打家劫社简单实现--python
给定一个数组代表每家的金钱: [1, 2, 0, 4, 6] 不可以抢劫相邻两家的金钱, 可以抢劫相隔的两家, 求最大值 1+0+6 = 7 2+4 = 6 max = 7 思路: 动态规划, 遍历数 ...
最新文章
- Android - Manifest 文件 详解
- 关于Ping命令的问题
- 在此iphone上尚未受信任_苹果中国官网开启限购!每款iphone每人限购两部
- python标准算术操作符有哪些_在python中的算术操作符
- [LeetCode] Generate Parentheses
- c++ mmap写入速度_内存管理(24)mmap和缺页中断
- java学生管理系统,(史上最全)
- Neokylin7安装DM8数据库
- 性能测试模型-曲线拐点模型-压力曲线分析图
- iphonex蓝牙打不开转圈_iphonex蓝牙一直在转圈
- java实现根号n路归并排序
- cad怎么倒圆角_学不好CAD怎么办?9个实用的CAD技巧,让你轻松玩转CAD
- 用JAVA编写一个水果箱,Java SE 第四章类之间的关系--水果箱编程题
- 10分钟教你用python如何正确把妹
- WAMP和PHPStorm安装(Win10)
- 如何解决汉化英文或翻译其他语言界面和RC出现乱码
- ORACLE 11g 修改db_unique_name参数
- 以太坊智能合约ganache+truffle集成开发实验
- 可视化的对象存储服务
- 石家庄ug数控编程培训