你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。

给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。

示例 1:

输入: [1,2,3,1]
输出: 4
解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
  偷窃到的最高金额 = 1 + 3 = 4 。

示例 2:

输入: [2,7,9,3,1]
输出: 12
解释: 偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。
  偷窃到的最高金额 = 2 + 9 + 1 = 12 。 我的第一版代码,程序虽然编译通过了,但是运行时间超时
class Solution {
public static int solve(int index,int []nums)
{
//首先计算边界情况
if(index<0)
return 0;
//然后对于当前索引的房屋 有两种情况,一种是抢劫当前房屋,另一种是不抢劫当前房屋
//能产生最大的抢劫利润的情况有两种一种是
//1.当前房子+当前房子-2
//2.不抢当前房子 + 当前房子的前一间
int max = Math.max(nums[index]+solve(index-2, nums),solve(index-1,nums));
return max;
}
public int rob(int[] nums) {
return solve(nums.length-1, nums);
}
}

然后就想起来之前做过的一个  跳n阶台阶的一个问题,可以使用备忘录 的方法 ,也就是使用一个map来存储递归遍历出来的结果

然后第二版代码如下:

package com.zuoyan.leetcode_198;

import java.util.HashMap;
import java.util.Map; public class Solution { public static int solve(int index,int []nums,Map<Integer,Integer> map)
{
//首先计算边界情况
if(index<0)
return 0;
if(map.containsKey(index))
{
return map.get(index);
}
else{
//然后对于当前索引的房屋 有两种情况,一种是抢劫当前房屋,另一种是不抢劫当前房屋
//能产生最大的抢劫利润的情况有两种一种是
//1.当前房子+当前房子-2
//2.不抢当前房子 + 当前房子的前一间
int max = Math.max(nums[index]+solve(index-2, nums,map),solve(index-1,nums,map));
map.put(index, max);
return max;
} }
public int rob(int[] nums) {
Map<Integer, Integer> map = new HashMap<>();
return solve(nums.length-1, nums,map);
} public static void main(String[] args) {
Solution solution = new Solution();
int [] nums = {1,2,3,1};
int result = solution.rob(nums);
System.out.println(result);
} }

运行结果如下:

显然根据  执行时间击败的用户 和 内存消耗击败的用户可以看出来,我的这个执行效率太低了,就是一种暴力解法,肯定有更好的优化方法。

LeetCode - 198 简单动态规划 打家劫舍的更多相关文章

  1. [LeetCode] 198. House Robber 打家劫舍

    You are a professional robber planning to rob houses along a street. Each house has a certain amount ...

  2. [LeetCode] 198. 打家劫舍II ☆☆☆(动态规划)

    描述 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金.这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的.同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的 ...

  3. C#LeetCode刷题-动态规划

    动态规划篇 # 题名 刷题 通过率 难度 5 最长回文子串   22.4% 中等 10 正则表达式匹配   18.8% 困难 32 最长有效括号   23.3% 困难 44 通配符匹配   17.7% ...

  4. LeetCode总结 -- 一维动态规划篇

    这篇文章的主题是动态规划, 主要介绍LeetCode中一维动态规划的题目, 列表如下: Climbing StairsDecode WaysUnique Binary Search TreesMaxi ...

  5. LeetCode初级算法--动态规划01:爬楼梯

    LeetCode初级算法--动态规划01:爬楼梯 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net ...

  6. 简单动态规划——三逆数的O(N^2)解法!

    [算法]简单动态规划——三逆数的O(N^2)解法! 问题描述: 三逆数定义:给一个数的序列A[0,1,....N-1]),当i<j<k且A[i]>A[j]>A[k]时,称作ai ...

  7. 【python】Leetcode每日一题-打家劫舍2

    [python]Leetcode每日一题-打家劫舍2 [题目描述] 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金.这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋 ...

  8. [LeetCode] 198. 打家劫舍 ☆(动态规划)

    描述 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警. 给定一个 ...

  9. leetcode 198 打家劫舍 Python 动态规划

    打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警. 给定 ...

随机推荐

  1. this上下文一致

    什么是this对象 先来说说什么是this对象吧,每个函数在调用的时候都会自动获取两个特殊变量:this和arguments对象.this值具体是指哪个对象是和该函数的执行环境相关的.如果是作为对象的 ...

  2. svn安装使用

    SVN安装使用 获取项目 1.首先新建文件夹.如:测试项目. 2.接着鼠标右键选择:SVN Checkout/SVN 检出 3.在出行的对话框中输入仓库地址.如:svn://198.021.262/2 ...

  3. golang学习笔记6 beego项目路由设置

    golang学习笔记5 beego项目路由设置 前面我们已经创建了 beego 项目,而且我们也看到它已经运行起来了,那么是如何运行起来的呢?让我们从入口文件先分析起来吧: package main ...

  4. 张春晖让视频的每词每句都可搜索:Autotiming 可以自动配字幕,还将改变哪些领域?

    张春晖让视频的每词每句都可搜索:Autotiming 可以自动配字幕,还将改变哪些领域? 对于一些电视观众来说,寻找电视节目字幕中“有趣”的Bug,拍照发到网上与其他人共同嘲笑一下,是一种观看节目之外 ...

  5. arcgis desktop 地理编码服务发布

    1.创建地址定位器 2.创建复合地址定位器 3.鼠标右键,共享为,地理编码服务.

  6. multiple definition of XXX情况分析

    近日在写代码,各个.cpp源文件编译时没有问题,将*.o进行链接时,出现了许多multiple definition of XXX的链接错误.于是在网上搜索了一番,结合自己的代码包含逻辑,最终发现了问 ...

  7. 问题 1084: 用筛法求之N内的素数。

    #include <iostream> #include <cstdio> #include <cstring> #include <string> # ...

  8. win10自带虚拟机Hyper V联网

      在控制面板里打开程序和功能     打开启用或关闭windows 功能     勾选Hyper-V     在windows 管理工具打开Hyper-V 管理器   打开虚拟交换机管理器     ...

  9. 运行tomcat报Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]"

    解决方法1:   手动设置MaxPermSize大小,如果是linux系统,修改TOMCAT_HOME/bin/catalina.sh,如果是windows系统,修改TOMCAT_HOME/bin/c ...

  10. 2017_CET4_CET6_正规段子——正规!正规!解析!段子手勿入!

    噫,2017年的四六级结束了,布吉岛宝宝们考得肿么样,反正本宝宝六级听力刚开始一阵挠头…… 天,神一般的FM信号,吃吃吃,擦擦擦,吃擦吃擦,吱吱吱…… 考完了就真完了,走出考场的那一刻,突然想起灰太狼 ...