198. House Robber,又发现一道数学归纳法在leetcode中的应用题
2017-11-20 17:41
375 查看
上一道利用到数学归纳法的题目是求最大子列和的Kadane算法,今天做leetcode又遇到了一道及其类似的题目,也是从零开始一步步求解最优解,直至最后得出我们想要的答案。这种思想非常的重要!!
题目地址:198. House Robber
它的算法思想是:从0开始一步步生成最终的数列,得出最大的值(是不是和kadane算法很像!!)
f(0) = nums[0]
f(1) = max(num[0], num[1])
f(k) = max( f(k-2) + nums[k], f(k-1) )
然后我就开始写代码。这是我写的代码:
结果是Time Limit exceed,泪奔
同样的算法思想,大神的写法如下:
26ms
很屌有没有!!!!!!!!!巧妙的用平行赋值啊!
同一种算法思想,同一种语言,不同的写法也能导致运行时间的天壤之别,给大神跪了
题目地址:198. House Robber
它的算法思想是:从0开始一步步生成最终的数列,得出最大的值(是不是和kadane算法很像!!)
f(0) = nums[0]
f(1) = max(num[0], num[1])
f(k) = max( f(k-2) + nums[k], f(k-1) )
然后我就开始写代码。这是我写的代码:
class Solution(object): def rob(self, nums): """ :type nums: List[int] :rtype: int """ return self.func(nums, len(nums)) def func(self, nums, k): if k == 0: return 0 if k == 1: return nums[0] if k == 2: return max(nums[0], nums[1]) return max(self.func(nums, k-2) + nums[k-1], self.func(nums, k-1))
结果是Time Limit exceed,泪奔
同样的算法思想,大神的写法如下:
class Solution(object): def rob(self, nums): last, now = 0, 0 for i in nums: last, now = now, max((last + i), now) return now
26ms
很屌有没有!!!!!!!!!巧妙的用平行赋值啊!
同一种算法思想,同一种语言,不同的写法也能导致运行时间的天壤之别,给大神跪了
相关文章推荐
- LeetCode 198. House Robber 递归->记忆->动态规划 ->新思路
- leetcode 198. House Robber 入室抢劫 + DP动态规划求解
- Power-of-four-----LeetCode上发现的一道很搞笑并且有意思的简单题!!
- LeetCode 198. House Robber
- 【Leetcode】198. House Robber - - 【动态规划】
- leetcode 198. House Robber
- LeetCode 198. House Robber
- [leetcode] 198. House Robber
- LeetCode-198. House Robber
- LeetCode 198. House Robber
- LeetCode 198. House Robber
- LeetCode 198. House Robber (Easy)
- LeetCode--198. House Robber(打家劫舍)Python
- LeetCode 198. House Robber - 贪心算法
- LeetCode 198. House Robber(Python)
- LeetCode:198. House Robber
- LeetCode 198. House Robber(java)
- leetcode 198. House Robber
- LeetCode 198. House Robber
- LeetCode 198. House Robber