博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
198. House Robber
阅读量:3573 次
发布时间:2019-05-20

本文共 1822 字,大约阅读时间需要 6 分钟。

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.

动态优化

第一反应就是用动态优化写。注意题目要求,即不能连续抢夺两间屋子的钱财,即不能连续读取相邻的两个数。

数组没有内容时显然答案是0,数组只有一个数据时显然答案就是第一个数字,数组只有两个数据时显然答案是最大数。
当数组内容大于3时开始DP,每次要进行是把第 i 个数字(i > 3)读入的情况。
若添加,则显然第 i - 1 个数字无法添加,总金额就是第 i - 2 间屋子时的所得总金额加上第 i 间屋子的金额。
若跳过,则总金额就是第 i - 1 间屋子时的所得总金额。
代码如下:

public class Solution {
public int rob(int[] nums) { if(nums.length == 0) return 0; if(nums.length == 1) return nums[0]; if(nums.length == 2) return Math.max(nums[0], nums[1]); int [] dp = new int[nums.length]; dp[0] = nums[0]; dp[1] = Math.max(nums[0], nums[1]); for(int i = 2; i < nums.length; i++) { dp[i] = Math.max(dp[i-2] + nums[i], dp[i - 1]); } return dp[nums.length-1]; }}

若对数组进行空间优化,则每次 dp 位置为 i 对 2 取模。优化后代码如下:

public class Solution {
public int rob(int[] nums) { if(nums.length == 0) return 0; if(nums.length == 1) return nums[0]; if(nums.length == 2) return Math.max(nums[0], nums[1]); int [] dp = new int[2]; dp[0] = nums[0]; dp[1] = Math.max(nums[0], nums[1]); for(int i = 2; i < nums.length; i++) { int temp = i % 2; dp[temp] = Math.max(dp[temp] + nums[i], dp[temp^1]); } return Math.max(dp[0], dp[1]); }}

有个小问题,改了几次一直维持在 1ms,同样的算法在运算时间上总是比别人差,不知道哪里还能优化,欢迎指教。

转载地址:http://wnjgj.baihongyu.com/

你可能感兴趣的文章
咕泡笔记导读篇
查看>>
eclipse安装maven和简单使用
查看>>
关于交往所思
查看>>
jdbc的封装
查看>>
数据库存入数据变为???
查看>>
实现数据库源的几种方式和开源数据源的使用
查看>>
元数据的获取和 数据库读写操作封装
查看>>
java文件的上传和下载(细节问题)
查看>>
DBUtils框架QueryRunner的 使用
查看>>
springMVC之controller笔记
查看>>
springmvc类型转换
查看>>
ai 的研究生院校
查看>>
spring开发步骤以及bean的配置和注入方式
查看>>
关于鼻炎的日常饮食和注意
查看>>
Spring的IOC的注解的详解
查看>>
成长吧
查看>>
莫名火了
查看>>
宽字节注入
查看>>
渗透测试学习笔记
查看>>
burp 使用
查看>>