当前位置: 首页 > news >正文

LeetCode213:打家劫舍II

题目链接:213. 打家劫舍 II - 力扣(LeetCode)

代码如下

class Solution {
public:int rob(vector<int>& nums) {if(nums.size() == 0)    return 0;if(nums.size() == 1)    return nums[0];if(nums.size() == 2)    return max(nums[0], nums[1]);int result1 = robRange(nums, 0, nums.size() - 2);int result2 = robRange(nums, 1, nums.size() - 1);return max(result1, result2);}int robRange(vector<int>& nums, int start, int end){if(end == start)    return nums[start];vector<int> dp(nums.size(), 0);dp[start] = nums[start];dp[start + 1] = max(nums[start], nums[start + 1]);for(int i = start + 2; i <= end; i++){dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);}return dp[end];}
};

这个题目的关键思想就在于,你是怎么把环拆开成线性数组去求解的,这个题目分为三种情况,(1)不考虑首尾元素(2)不考虑首元素(3)不考虑尾元素

这三个其中的(2)(3)是包含住(1)的,为什么呢,我举个例子

数组1 6 9 6 1

情况(1)我们只考虑6 9 6

情况(2)我们考虑1 6 9 6

情况(3)我们考虑吧6 9 6 1

那么是不是(2)(3)都出现了6 9 6,所以(2)(3)是把(1)包含着了

那么有同学会想,要是数组是 1 6 9 6 100呢,这个也很好去解释,我们这个代码就是要去求(2)(3)这两个的最大值,也就是当后面是100的话,那么是不是去掉首元素,保留末尾元素是最大值呢,毕竟代码之前写过一个这个return max(result1, result2);,这个就是求是去掉首元素大还是去掉尾元素大。

其余的代码就按照打家劫舍I的代码就好。

http://www.lryc.cn/news/460923.html

相关文章:

  • linux一二三章那些是重点呢
  • C语言中的程序入口:超越main函数的探索
  • 《面试之MQ篇》
  • Git 分支操作-开发规范
  • JSONArray根据指定字段去重
  • 线程有哪几种状态? 分别说明从一种状态到另一种状态转变有哪些方式?
  • 自注意力机制self-attention中的KV 缓存
  • 前端库--nanoid(轻量级的uuid)
  • 计算机基础-什么是网络端口?
  • 力扣动态规划基础版(斐波那契类型)
  • Java重修笔记 InetAddress 类和 Socket 类
  • 秋招突击——8/6——万得数据面试总结
  • STM32定时器
  • 第七课 Vue中的v-for遍历指令
  • 【NTN 卫星通信】卫星通信的专利
  • vue3 element table 插槽外的数据更新,插槽内的数据未更新。
  • 飞凌嵌入式FET527N-C核心板已适配OpenHarmony4.1
  • CVPR 2024最佳论文候选-pixelSplat论文解读
  • 在Android中如何切割一张图片中的不规则“消息体/图片/表情包等等”?
  • Jenkins+Ant+Jmeter接口自动化集成测试
  • JavaSE——集合4:List接口实现类—LinkedList
  • FPGA图像处理之三行缓存
  • 10月15日,每日信息差
  • 4G、5G通信中,“网络侧“含义
  • spring boot核心理解-各种starter
  • 解决海外社媒风控问题的工具——云手机
  • 全能PDF工具集 | PDF Shaper Ultimate v14.6 便携版
  • Maven入门
  • Chromium 中window.DOMParser接口说明c++
  • linux 安装gitlab