【力扣hot100】 198. 打家劫舍
一、题目你是一个专业的小偷计划偷窃沿街的房屋。每间房内都藏有一定的现金 影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统 如果两间相邻的房屋在同一晚上被小偷闯入系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组 计算你 不触动警报装置的情况下 一夜之内能够偷窃到的最高金额。 示例 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[0 到 i-2]寻找加上自己的最大金额。这样就能覆盖中间故意不偷的选择然后用ans存储最大的dp[i]即可。三、题解class Solution { public: int rob(vectorint nums) { vectorint dp(nums.size(),0); int ans0; dp[0]nums[0]; if(nums.size()1) return dp[0]; dp[1]max(nums[1],dp[0]); ansmax(dp[0],dp[1]); for(int i2;inums.size();i){ for(int j0;ji-1;j){ dp[i]max(dp[i],dp[j]nums[i]); } ansmax(ans,dp[i]); } return ans; } };
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2479815.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!