zoukankan      html  css  js  c++  java
  • 边工作边刷题:70天一遍leetcode: day 38

    House Robber I/II/III

    这题代表了单向线性dp的基本pattern: build local best value at each element and track the global optimal. 这题的要点是local是前k个房间的最优解,这个解不一定要选第k个房间。这个local解是比较k-1的optimal和k-2 optimal + current value。之所以不以必选第k个房间作local是因为有可能最优解有连续2或多个房间不选,比如100,1,1,100

    III: idea

    class Solution(object):
        def rob(self, nums):
            """
            :type nums: List[int]
            :rtype: int
            """
            def robOneDir(nums):
                pre_1 = nums[0]
                pre_2 = max(nums[0], nums[1])
                for i in range(2, len(nums)):
                    cur = max(pre_2, pre_1+nums[i])
                    pre_1=pre_2
                    pre_2=cur
                return pre_2
            
            if not nums: return 0
            if len(nums)<2: return nums[0]
            if len(nums)==2: return max(nums[0], nums[1])
            nums1,nums2=nums[0:-1],nums[1:]
            return max(robOneDir(nums1), robOneDir(nums2))
    
  • 相关阅读:
    spring注解集合
    spring工作原理理解
    Linux下mysql命令 导入 导出sql文件
    List和Set排序的实现
    LeetCode--树
    LeetCode--链表
    LeetCode--字符串
    LeetCode--贪心算法
    LeetCode--数组
    数据库编程基本练习题
  • 原文地址:https://www.cnblogs.com/absolute/p/5678275.html
Copyright © 2011-2022 走看看