//
// Created by Mr.Hu on 2019/1/20.
//
// leetcode 198 house robber
//
// 题目给定一个数组,表示一排房子中财物的数量,要求相邻的房子不能在一晚上同时被偷,否则会报警,求最多能够偷多少财物。
//
// 第一个想法就是递归的方式,简单的几行代码解决问题,但是…当数组比较大时,递归操作相当耗时。
//
// 于是用dp算法的memoization实现,即保存之前已经计算出来的结果,之后需要用到是,不需要重复计算。
// 这里使用和nums等大小的数组来表示每个位置上的最多财物数,然后在计算当前位置最大财物数时,即max(memory[i-1],nums[i]+memory[i-2]),
// 这个方法能够保证当前位置所能够偷到的是最大财物数,循环遍历所有位置,最后memory[nums.size()-1]即为所能偷到的财物数。
//
// 对于DP算法,应该尽量使用循环的方式来实现,毕竟递归方式对于简单的问题往往适得其反,时间复杂度太高。
//
1 |
|