文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给你 n 个盒子,每个盒子的格式为 [status, candies, keys, containedBoxes] ,其中:

- 状态字 status[i]:整数,如果 box[i] 是开的,那么是 1 ,否则是 0 。
- 糖果数 candies[i]: 整数,表示 box[i] 中糖果的数目。
- 钥匙 keys[i]:数组,表示你打开 box[i] 后,可以得到一些盒子的钥匙,每个元素分别为该钥匙对应盒子的下标。
- 内含的盒子 containedBoxes[i]:整数,表示放在 box[i] 里的盒子所对应的下标。
- 给你一个 initialBoxes 数组,表示你现在得到的盒子,你可以获得里面的糖果,也可以用盒子里的钥匙打开新的盒子,还可以继续探索从这个盒子里找到的其他盒子。

请你按照上述规则,返回可以获得糖果的 最大数目

示例 1:
输入:
status = [1,0,1,0],
candies = [7,5,4,100],
keys = [[],[],[1],[]],
containedBoxes = [[1,2],[3],[],[]],
initialBoxes = [0]
输出:16
解释:
一开始你有盒子 0 。你将获得它里面的 7 个糖果和盒子 1 和 2。
盒子 1 目前状态是关闭的,而且你还没有对应它的钥匙。
所以你将会打开盒子 2 ,并得到里面的 4 个糖果和盒子 1 的钥匙。
在盒子 1 中,你会获得 5 个糖果和盒子 3 ,
但是你没法获得盒子 3 的钥匙所以盒子 3 会保持关闭状态。
你总共可以获得的糖果数目 = 7 + 4 + 5 = 16 个。示例 2:
输入:
status = [1,0,0,0,0,0],
candies = [1,1,1,1,1,1],
keys = [[1,2,3,4,5],[],[],[],[],[]],
containedBoxes = [[1,2,3,4,5],[],[],[],[],[]],
initialBoxes = [0]
输出:6
解释:
你一开始拥有盒子 0 。打开它你可以找到盒子 1,2,3,4,5 和它们对应的钥匙。
打开这些盒子,你将获得所有盒子的糖果,所以总糖果数为 6 个。示例 3:
输入:status = [1,1,1],
candies = [100,1,100],
keys = [[],[0,2],[]],
containedBoxes = [[],[],[]],
initialBoxes = [1]
输出:1示例 4:
输入:status = [1],
candies = [100],
keys = [[]],
containedBoxes = [[]],
initialBoxes = []
输出:0示例 5:
输入:status = [1,1,1],
candies = [2,3,2],
keys = [[],[],[]],
containedBoxes = [[],[],[]],
initialBoxes = [2,1,0]
输出:7提示:
1 <= status.length <= 1000
status.length == candies.length == keys.length == containedBoxes.length == n
status[i] 要么是 0 要么是 1 。
1 <= candies[i] <= 1000
0 <= keys[i].length <= status.length
0 <= keys[i][j] < status.length
keys[i] 中的值都是互不相同的。
0 <= containedBoxes[i].length <= status.length
0 <= containedBoxes[i][j] < status.length
containedBoxes[i] 中的值都是互不相同的。
每个盒子最多被一个盒子包含。
0 <= initialBoxes.length <= status.length
0 <= initialBoxes[i] < status.length

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-candies-you-can-get-from-boxes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 广度优先搜索,使用哈希set记录已经遍历到的盒子,但是还没有钥匙的
class Solution {public:int maxCandies(vector<int>& status, vector<int>& candies, vector<vector<int>>& keys, vector<vector<int>>& containedBoxes, vector<int>& initialBoxes) {queue<int> q;int sum = 0, id;unordered_set<int> nokeybox;for(int box : initialBoxes){q.push(box);}while(!q.empty()){id = q.front();q.pop();sum += candies[id];for(int k : keys[id]){status[k] = 1;//这个盒子可以打开的if(nokeybox.count(k)){   //没有钥匙的盒子有钥匙了q.push(k);//入队nokeybox.erase(k);}}for(int box : containedBoxes[id]){if(status[box]==1)q.push(box);elsenokeybox.insert(box);}}return sum;}
};

264 ms 30.7 MB


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1298. 你能从盒子里获得的最大糖果数(BFS)相关推荐

  1. 【组合数学】指数型母函数 应用 ( 多重集排列问题 | 不同球放在不同盒子里 | 奇/偶数序列的指数生成函数推导 )

    文章目录 多重集全排列公式 指数型母函数 处理多重集排列问题 引入 指数型母函数 处理多重集排列问题 公式推导 指数型母函数 处理 有限数字串问题 指数型母函数 处理 n 位数字串问题 指数型母函数 ...

  2. css一个盒子里可以装3个图片并排吗_John: CSS浮动与清除浮动属性详解(CSS float clear)...

    CSS里的浮动,可以让元素脱离标准流,从左上角或右上角依次贴边排列. 下面这个案例将会帮我们了解浮动的基本情况.下面这段代码块,外面是一个大div,里面包含着3个div,第一个左浮动,后两个无浮动. ...

  3. oracle 客户端 for mips,盒子里的世界: MIPS虚拟机(zt)

    盒子里的世界 不管你对Matrix这部电影持有什么观点,这部电影里还是处处体现着我们现实计算机世界中的哲学精神.比如,最基本的一条就是,在数字世界里,你不知道你是一条狗. 哲学命题不是本文的主题,那么 ...

  4. 排列组合 “n个球放入m个盒子“里,再来一遍

    1.球同,盒不同,无空箱 C(n-1,m-1), n>=m 0, n<m 使用插板法:n个球中间有n-1个间隙,现在要分成m个盒子,而且不能有空箱子,所以只要在n-1个间隙选出m-1个间隙 ...

  5. 5个球放入3个箱子_排列组合问题,把5个相同的球放到三个相同的盒子里,要求每个盒子都有球,则不同的放球方法是多少?...

    一个一个的列出来就好了. 2种.311和221 ----............... 修改. 这本来就是从一个一个列举出来的.要用到排列组合的都是一些特定的情况.不过这道题貌似用不上. 比如5个球变 ...

  6. CSS学习笔记(内边距~文字在盒子里的垂直居中)

    内边距 1.内边距就是内容和边框之间的距离. 2.格式 2.1.非连写 .san1{width: 100px;height:100px;border: 1px solid black;padding- ...

  7. 不要困在自己建造的盒子里——写给.NET程序员(附精彩评论)

    此文章的主旨是希望过于专注.NET程序员在做好工作.写好.NET程序的同时,能分拨出一点时间接触一下.NET之外的东西(例如10%-20%的时间),而不是鼓动大家什么都去学最后什么都学不精,更不是说. ...

  8. 猫咪藏在哪个房间python项目_铲屎官必读:猫咪为什么都喜欢藏在盒子里?

    原标题:铲屎官必读:猫咪为什么都喜欢藏在盒子里? Защитные механизмы 保护机制 Каждому животному присущи разные защитные механизмы ...

  9. 如何将盒子里的文字水平居中和垂直居中

    1. 将文字水平居中,只需要在盒子里添加 text-align: center就可以了. <style>div{text-align: center;}</style>< ...

最新文章

  1. 求求你,别在 MySQL 中使用 UTF-8了!
  2. ThreadPoolExecutor的一点理解 专题
  3. 什么是浏览器跨域访问操作,js如何实现?
  4. sql不替换uid的更新数据语句
  5. Cache占用过多内存导致Linux系统内存不足问题排查
  6. 身边的设计模式(三):抽象工厂 与 依赖注入
  7. python绘制多条不同x轴曲线_python matlibplot绘制多条曲线图
  8. 《构建高可用VMware vSphere 5.X虚拟化架构》——第2章 构建高可用vCenter Server 2.1vCenter Server版本以及运行环境的选择...
  9. 电力、输电、变电、配电(转)
  10. ndk中杀线程的办法
  11. java 内存文件_Java内存映射文件(Memory Mapped Files)
  12. mac上面比较好用的软件
  13. php测试数组函数,PHP-数组函数
  14. matlab怎么截图清晰度,matlab截图到期刊论文中如何保持清晰度的方法
  15. linux进程假死的原因_linux 假死分析
  16. python算法工程师简历_算法工程师岗位简历范文
  17. Linux主目录下的文件夹名称改为英文
  18. 深入剖析Spring架构与设计原理(一)
  19. wires hark使用
  20. Python小记(一):import和from。。。import区别?

热门文章

  1. 【linux】Ubuntu 18.04 设置桌面快捷启动方式
  2. struct cdev结构体和cdev_init和cdev_add函数
  3. 深度相机(三)--三种方案对比
  4. C++异常以及错误处理
  5. getAttribute实例例java_Java ExifInterface.getAttribute方法代码示例
  6. 三位数的茎叶图怎么看_贝德玛化妆品生产日期怎么看?贝德玛化妆品保质期怎么看?...
  7. stdin,stdout,stderr
  8. 高级IO(文件的读写)——并发式IO的解决方案(解决多路阻塞式IO的方案)
  9. php redis 队列,Redis 实现队列
  10. 原型设计+用户规格说明书