首页 > 其他分享 >【代码随想录】刷题记录(105)-打家劫舍

【代码随想录】刷题记录(105)-打家劫舍

时间:2025-01-17 17:57:22浏览次数:3  
标签:偷窃 nums max 金额 随想录 房屋 刷题 dp 105

题目描述:

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

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

 

示例 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 。

 

提示:

  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 400

 

我的作答:

跳着刷题了,发现如果按部就班地刷下来,很多题除了消耗我的耐心和徒增烦恼以外并没有让我感到更“充实”和安全;

dp[i]设置为偷到第i家累积的最大财富(包括偷i家的)

class Solution(object):
    def rob(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        if not nums: return 0
        if len(nums)==1: return nums[0]
        dp = [0]*len(nums) #每次都在创建数组时搞不清楚长度
        dp[0] = nums[0]
        dp[1] = max(nums[1], nums[0])
        for i in range(2, len(nums)):
            dp[i] = max(dp[i-2]+nums[i], dp[i-1]) 
        return dp[-1]

ce8eda69f0ea4cd0bf6da78b8324cee6.png

 

参考:

class Solution(object):
    def rob(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        if not nums:  # 如果没有房屋,返回0
            return 0

        prev_max = 0  # 上一个房屋的最大金额
        curr_max = 0  # 当前房屋的最大金额

        for num in nums:
            temp = curr_max  # 临时变量保存当前房屋的最大金额
            curr_max = max(prev_max + num, curr_max)  # 更新当前房屋的最大金额
            prev_max = temp  # 更新上一个房屋的最大金额

        return curr_max  # 返回最后一个房屋中可抢劫的最大金额

b21e9ecd803c4de89fe22740469cac8f.png

 

标签:偷窃,nums,max,金额,随想录,房屋,刷题,dp,105
From: https://blog.csdn.net/Aerochacha/article/details/145210383

相关文章

  • 【代码随想录】刷题记录(103)-整数拆分
    题目描述:给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k>=2 ),并使这些整数的乘积最大化。返回 你可以获得的最大乘积 。 示例1:输入:n=2输出:1解释:2=1+1,1×1=1。示例 2:输入:n=10输出:36解释:10=3+3+4,3× 3× 4=......
  • 【hot100】刷题记录(1)-移动零
    题目描述:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例1:输入:nums=[0,1,0,3,12]输出:[1,3,12,0,0]示例2:输入:nums=[0]输出:[0] 提示:1<=nu......
  • Laminin Pentapeptide YIGSR-NH2;层粘连蛋白五肽;抗黏附肽;YIGSR;LAMININ (929-933)肽;1105
    YIGSR 简介    YIGSR是一种能够抑制白血病细胞肿瘤生长和转移的多肽。YIGSR通过67kDa层粘连蛋白结合蛋白阻断细胞与层粘连蛋白I的结合,并抑制剪切诱导的层粘连蛋白细胞 eNOS 表达增加。   【中文名称】层粘连蛋白(929-933);抗黏附肽;酪氨酰-异亮氨酰-......
  • 代码随想录 字符串 test 3
    54.替换数字(第八期模拟笔试)        为了不使用额外的空间,采用双指针,通过用旧指针遍历原数组计算出数字个数,进而计算出新数组应有的大小,然后新指针指向新数组的最后,此时新,旧指针都位于两数组的末尾,同时从后往前遍历,遇到数组,新指针就需要写入number,遇到字母,就赋值旧数......
  • 【LeetCode】力扣刷题热题100道(31-35题)附源码 搜索二维矩阵 岛屿数量 腐烂的橙子 课程
    一、搜索二维矩阵编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。可以使用从右上角开始搜索的方法来有效地找到目标值。选择起始位置:从矩阵的右上角开始。......
  • 代码随想录算法训练营第8天 | 344.反转字符串,541. 反转字符串II,替换数字
    一、刷题部分1.1题目名称原文链接:代码随想录题目链接:344.反转字符串-力扣(LeetCode)1.1.1题目描述编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组s的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决......
  • 代码随想录算法训练营第四天 | 24. 两两交换链表中的节点、19. 删除链表的倒数第N个节
    9-24.两两交换链表中的节点给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例1:输入:head=[1,2,3,4]输出:[2,1,4,3]示例2:输入:head=[]输出:[]示例3:输入:head=[1]输出:[1] 提......
  • 代码随想录:二叉搜索树的最小绝对值
    遍历二叉搜索树,定义一个全局的上一个节点确实好用/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):......
  • 代码随想录:验证二叉搜索树
    二叉搜索树的中序遍历结果是一个递增的数组为了省空间可以用一个变量记录上一次的数字我一开始设置上一次的为null,结果c++中int为null时实际为0,所以要用最小值/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*......
  • C语言二级刷题---程序设计01
     请编写一个函数fun,它的功能是:根据以下公式求π的值(要求满足精度0.0005,即某项小于0.0005时停止迭代):程序运行后,如果输入精度0.0005,则程序输出为3.140578。#include<stdio.h>#include<math.h>doublefun(doubleeps){}main(){doublex;voidNONO();......