198,House Robber

一、题目



You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security system connected and it will automatically contact the police if two adjacent houses were broken into on the same night.

Given a list of non-negative integers representing the amount of money of each house, determine the maximum amount of money you can rob tonight without alerting the police.

二、分析



  一道简单的动态规划。

  f(k): 抢劫到第k个房间时得到的最大钱数

  则有以下的递推关系: 

f(0) = nums[0]
f(1) = max(num[0], num[1])
f(k) = max( f(k-2) + nums[k], f(k-1) )

三、代码



1)比较通俗易懂,诠释了上面三条公式

 1 class Solution {
 2 public:
 3     int rob(vector<int>& nums) {
 4         int length = nums.size();
 5         if (length == 0)
 6             return 0;
 7         vector<int> money(length, nums[0]);
 8         if (length == 1)
 9             return nums[0];
10         else {
11             money[1] = max(nums[0], nums[1]);
12             for (int i = 2; i < length; ++i) {
13                 money[i] = max(money[i-1], money[i-2] + nums[i]);
14             }
15         }
16         return money[length - 1];
17
18     }
19 };

2)对上面程序的优化

 1 class Solution {
 2 public:
 3     int rob(vector<int>& nums) {
 4         int n = nums.size(), pre = 0, cur = 0;
 5         for (int i = 0; i < n; i++) {
 6             int temp = max(pre + nums[i], cur);
 7             pre = cur;
 8             cur = temp;
 9         }
10         return cur;
11     }
12 };

3)python实现

1 class Solution:
2
3     def rob(self, nums):
4
5         last, now = 0, 0
6
7         for i in nums: last, now = now, max(last + i, now)
8
9         return now
 
时间: 2024-10-27 09:02:35

198,House Robber的相关文章

LeetCode 198, 213 House Robber

198 House Robber DP 0~n-1     ans=dp[n-1] dp[i] = max(dp[i-2]+nums[i], dp[i-1])  i>=2 213 House Robber II Since we cannot rob nums[0] and nums[n-1] at the same time, we can divide this problem into two cases: not rob nums[0] not rob nums[n-1] and the

198. 打家劫舍 | House Robber

ou are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent houses have security system connected and it will automa

Learn Prolog Now 翻译 - 第四章 - 列表 - 第一节,列表定义和使用

内容提要 列表定义: 合一在列表中的使用: 匿名变量: 列表定义 正如名字暗示的,列表就是多个元素组成的集合.更精确地说,是元素的有限序列.在Prolog中的列表,有如下的一些具体例子: [mia, vincent, jules, yolanda] [mia, robber(honey_bunny), X, 2, mia] [ ] [mia, [vincent, jules], [butch, girlfriend(butch)]] [[ ], dead(z), [2, [b, c]], [ ]

不使用额外空间,检查整数是否是回文结构

Question: Given an Integer, you need to determine if it is a palindrome or not. You should not use any extra space in the process.Input: 121Output: Palindrome 咋一看问题很简单,我们只要镜像翻转这个数看是否和原来的数一样.但是这题的要求有个不使用额外空间的限制,我们还要考虑到语言和环境的差异,给出一个一般化的方法. 题目并没有说是否要考虑负

千年不曾看懂《道德经》,直至有了《道德图》!--作者:南山空同

第一章:知道识易 本义: 道,可道,非常道.名,可名,非恒名.无名,天地之始:有名,万物之母. 故常无欲,以观其妙:常有欲,以观其徼.此两者同出而异名,同谓之玄,玄之又玄,众妙之门. 通述: 世间的一切规律,都是能够被掌握的,但这些规律,却是不断的发生变化的.我们可以通过一些表面现象,来认知这些规律,我们为了方便识别事物,会给他们命名,来加以区分,但这些名词所包括的内容,也并非一成不变的. 世间事物,本来是不需要通过命名来加以区分的,当我们给一些事物命名,是我们开始认识世间万物的起始.如果我们心

【LeetCode】动态规划(上篇共75题)

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica } [5] Longest Palindromic Substring 给一个字符串,需要返回最长回文子串 解法:dp[i][j] 表示 s[i..j] 是否是回文串,转移方程是 dp[i][j] = 1 (if dp[i+1][j-1] = 1 && s[i] == s[j]),初始化条件是 if (s[i] == s[j] && (i == j

linux命令--top命令&free命令

top命令是用来查看系统性能的工具,能够实时显示各个进程的状况,包括进程ID.内存占用率.CPU占用率等. top - 23:12:04 up 79 days,  8:14,  1 user,  load average: 0.00, 0.01, 0.05 Tasks: 573 total,   2 running, 571 sleeping,   0 stopped,   0 zombie Cpu(s):  0.2%us,  0.4%sy,  0.0%ni, 99.5%id,  0.0%wa,

11美元至此阿里巴巴总阿里巴巴市值超越纳指中概股总和

淘宝安全交易平台 www.xunjie36.com 淘宝店铺出售www.360feiyue.com 淘宝店铺交易www.360feiyue.com[关键词]淘宝安全交易平台 www.xunjie36.com 淘宝店铺出售www.360feiyue.com 淘宝店铺交易www.360feiyue.com淘宝 战略布局或促股价继续上涨 自9月19日阿里巴巴上市以来,尽管其股价在遭遇美股股指调整期间表现不佳,但在10月15日之后,阿里巴巴股价就强势反弹,最高曾一度触及120美元.这也让阿里巴巴市值成为

开发人员学Linux(4):使用JMeter对网站和数据库进行压力测试

前言表面看来,JMeter与本系列课程似乎关系不大,但实际上在后面的很多场景中起着重要作用:如何获知修改了某些代码或者设置之后系统性能是提升了还是下降了呢?商业的压力测试工具LoadRunner确实很高大上,但是据说费用也不便宜且体积也不小,而目前最高版本的开源免费压力测试工具JMeter3.2压缩包体积才不到53M,而且对于开发人员而非专业测试人员来说,JMeter提供的测试功能已经够强大了.要完整地介绍JMeter,即使把JMeter自带的文档翻译成中文就是一本厚厚的书了.但是在本篇只讲述如