【刷刷刷,爽!】leetcode198. 打家劫舍

2024-02-17 13:04

本文主要是介绍【刷刷刷,爽!】leetcode198. 打家劫舍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述
题目如上!
这是一道非常非常标准的初级动规题。属于走楼梯的进阶版。所以我们尝试把他变成走楼梯。
怎么变?或者说是怎么看成走楼梯。
答案是!!!!
看最后一个数。
往往会最有灵感。
比如示例1[1,2,3,4],最后一个是4,他后面没有数字了,很容易就会想到两种情况,“我要达成最优解,带还是不带这个数字呢?”
此时,答案的后门就敞开了。

  1. 带了这个数,就要再加上隔一个数的那个数下的最优解,也就是f(n-2)+num[n]
  2. 不带他玩,就只算f(n-1)
  3. 最后,比较下他俩噜

然后,具体体现形式有三种,递归(可能超时)用数组记录(不是特殊情况费那劲干嘛)用俩变量记录下n-1,n-2(就这个了)

代码如下:

public class Solution {public int Rob(int[] nums) {if (nums.Length == 1) return nums[0];if (nums.Length == 2) return Math.Max(nums[0], nums[1]);int MaxResult = 0;int f1 = nums[0];int f2 = Math.Max(nums[0], nums[1]);for (int i = 2; i < nums.Length; i++){MaxResult = Math.Max(f2, (nums[i] + f1));f1 = f2;f2 = MaxResult;}return MaxResult;}
}

溜!

这篇关于【刷刷刷,爽!】leetcode198. 打家劫舍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/717835

相关文章

动态规划---打家劫舍

题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 思路: 动态规划五部曲: 1.确定dp数组及含义 dp数组是一维数组,dp[i]代表

每日一题,力扣leetcode Hot100之198.打家劫舍

这一道题乍一看可以双层循环暴力解,但是仔细一想有可能最大利益并不是一家隔着一家偷,我可以间隔很多家偷,所以 这个题的思路还是有点像爬楼梯,用动态规划解。 首先确立动态规划的初始条件: 1.dp[0]=nums[0]只有一家 2.dp[1]=max(nums[0],nums[1])有两家选一家多的 然后确立动态规划的循环条件: dp[i]应该是什么 1.第i家能拿,那么dp[i]=n

Leetcode JAVA刷刷站(111)二叉树的最小深度

一、题目概述  二、思路方向          在Java中,要找出二叉树的最小深度,我们可以使用递归的方法。基本思路是,对于给定的根节点,如果它是空的,那么最小深度为0(但实际上,空树没有深度,但在这个问题的语境下,我们可以认为空树的最小深度为0,或者更准确地,我们应该处理空树的情况以避免返回0)。如果根节点不是空的,我们需要检查它的左右子树: 如果根节点没有左子树(或右子树),那么最

LeetCode讲解篇之213. 打家劫舍 II

文章目录 题目描述题解思路题解代码 题目描述 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。 给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷

Leetcode JAVA刷刷站(101)对称二叉树

一、题目概述 二、思路方向         在Java中,要检查一个二叉树是否是轴对称的(也称为镜像对称的),你可以通过递归地比较树的左子树和右子树是否镜像对称来实现。轴对称的二叉树意味着树的左子树和右子树关于根节点对称,即左子树的每个节点都与右子树中相应位置的节点镜像对称。 三、代码实现   class TreeNode { int val; TreeNode left;

Leetcode JAVA刷刷站(98)验证二叉搜索树

一、题目概述 二、思路方向          在Java中,要判断一个二叉树是否是有效的二叉搜索树(BST),我们可以采用递归的方法,通过维护一个外部的范围(通常是Integer.MIN_VALUE到Integer.MAX_VALUE作为初始范围),来确保每个节点的值都在其左子树所有节点值的右侧,并且在其右子树所有节点值的左侧。 三、代码实现   class TreeNode {

leetcode198打家劫舍

打家劫舍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 public int rob(int[] nums) {if(nums.length

代码随想录Day39:198.打家劫舍、213.打家劫舍II、337.打家劫舍III

198. 打家劫舍 题目链接:LeetCode198.打家劫舍 文档讲解:代码随想录LeetCode198.打家劫舍 题解 dp[i]偷或不偷,取决于dp[i-1]和dp[i-2]是否偷 class Solution {public:int rob(vector<int>& nums) {if (nums.size() == 1)return nums[0];vector<i

代码随想录算法训练营第三十九天 | 198.打家劫舍 , 213.打家劫舍II , 337.打家劫舍III

目录 198.打家劫舍 思路 1.确定dp数组(dp table)以及下标的含义 2.确定递推公式 3.dp数组如何初始化 4.确定遍历顺序 5.举例推导dp数组 方法一: 动态规划-一维 方法二:动态规划-二维 方法三:动态规划-两个变量 213.打家劫舍II 思路 方法一:动态规划- 方法二:动态规划-二维 方法三:动态规划-不封装函数  337.打家劫舍III

Fastboot线刷“复活”之刷机心得(二)——线刷刷机

刷机的有不少的方法:卡刷、线刷、OTA。在这里我就简单介绍下:    1.卡刷:一般来说卡刷简单的可以理解为在内存卡中刷机,就是进入Recovery中刷入系统。    2.线刷:线刷其实可以简单的理解为用USB线刷机,一定要注意是文件路径和驱动。线刷包的文件名上有个FASTBOOT字样,而且大小会比卡刷大了很多,一般线刷包大小是179-189MB左右。(以下我会对此方法进行更详细的介绍