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

文章目录

    • 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 个糖果和盒子 12。
盒子 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 要么是 11 <= 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阿明),一起加油、一起学习进步!
Michael阿明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473761.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

给javascript初学者的24条最佳实践

1.使用 代替 JavaScript 使用2种不同的等值运算符&#xff1a;|! 和 |!&#xff0c;在比较操作中使用前者是最佳实践。 “如果两边的操作数具有相同的类型和值&#xff0c;返回true&#xff0c;!返回false。”——JavaScript&#xff1a;语言精粹 然而&#xff0c;当使用和&a…

Python面试题(二)列表去重,单例

1.Python里面如何实现tuple和list的转换python中&#xff0c;tuple和list均为内置类型&#xff0c; 以list作为参数将tuple类初始化&#xff0c;将返回tuple类型tuple([1,2,3]) #list转换为tuple以tuple作为参数将list类初始化&#xff0c;将返回list类型list((1,2,3)) #tuple转…

LeetCode 1614. 括号的最大嵌套深度

文章目录1. 题目2. 解题1. 题目 如果字符串满足一下条件之一&#xff0c;则可以称之为 有效括号字符串&#xff08;valid parentheses string&#xff0c;可以简写为 VPS&#xff09;&#xff1a; 字符串是一个空字符串 ""&#xff0c;或者是一个不为 "("…

[AngularJS]Chapter 1 AnjularJS简介

创建一个完美的Web应用程序是很令人激动的&#xff0c;但是构建这样应用的复杂度也是不可思议的。我们Angular团队的目标就是去减轻构建这样AJAX应用的复杂度。在谷歌我们经历过各种复杂的应用创建工作比如&#xff1a;GMail、Map和日历。我们认为我们有必要把这些经验总结下来…

Log4j框架配置文件

Log4j框架配置文件 1 Log4j的配置文件分类 Log4j支持两种配置文件格式&#xff1a;一中是以log4j.properties &#xff0c;另一种是 log4j.xml 2 Log4j的配置文件例子 ##自定义日志的输出级别log4j.rootLoggerWARN, stdout##自定义日志 log4j.logger.accessWARN, accesslog…

python面试总结(三)拷贝与通信

1.请写出下列结果&#xff1f;&#xff08;深拷贝与浅拷贝&#xff09; import copy a [1, 2, 3, 4, [a, b]] b a c copy.copy(a) d copy.deepcopy(a) a.append(5) a[4].append(c) print(a) print(b) print(c) print(d)# 答案如下&#xff1a; [1, 2, 3, 4, [a, b, c], 5] …

LeetCode 1615. 最大网络秩(出入度)

文章目录1. 题目2. 解题1. 题目 n 座城市和一些连接这些城市的道路 roads 共同组成一个基础设施网络。 每个 roads[i] [ai, bi] 都表示在城市 ai 和 bi 之间有一条双向道路。 两座不同城市构成的 城市对 的 网络秩 定义为&#xff1a;与这两座城市 直接 相连的道路总数。如果…

使用JSLint提高JS代码质量

随着富 Web 前端应用的出现&#xff0c;开发人员不得不重新审视并重视 JavaScript 语言的能力和使用&#xff0c;抛弃过去那种只靠“复制 / 粘贴”常用脚本完成简单前端任务的模式。JavaScript 语言本身是一种弱类型脚本语言&#xff0c;具有相对于 C 或 Java 语言更为松散的限…

Django工具:Git简介与基本操作

1.Git简介&#xff1a; 1.Git是目前世界上最先进的分布式版本控制系统 网址&#xff1a;http://github.com 2.总结git的两大特点&#xff1a; 版本控制&#xff1a;可以解决多人同时开发的代码问题&#xff0c;也可以解决找回历史代码的问题 分布式&#xff1a;Git是分布式…

用户画像系统应用

用户画像系统应用 1 用户信用等级分级 比如在银行根据分级决定给用户贷款的额度&#xff0c;以及贷款的时长&#xff0c;那么怎么对用户分级呢&#xff1f;首先收集大量用户的数据&#xff0c;包括基本属性信息以及用户在使用银行的借记卡&#xff0c;信用卡等等。如果是运营…

SVN或其他网盘类软件同步图标不显示的异常

因为Windows Explorer只支持15个ShellIcon显示 所以有些软件为了正常显示其同步状态&#xff0c;就会通过修改自己的ShellIcon名称来抢占这15个名额 只需在注册表中修改下他们的名称&#xff0c;并将所需要展示的Icon的名称顺序提前 重启Explorer进程即可&#xff1a; HKEY_L…

LeetCode 1616. 分割两个字符串得到回文串

文章目录1. 题目2. 解题1. 题目 给你两个字符串 a 和 b &#xff0c;它们长度相同。 请你选择一个下标&#xff0c;将两个字符串都在 相同的下标 分割开。 由 a 可以得到两个字符串&#xff1a; aprefix 和 asuffix &#xff0c;满足 a aprefix asuffix &#xff0c;同理&am…

Kafka基础

Kafka基础 1 消息队列 1.1 什么是消息队列 消息队列&#xff08;MQ&#xff09;&#xff1a;消息队列&#xff0c;保存消息的队列。消息的传输过程中的容器&#xff1b;主要提供生产、消费接口供外部调用做数据的存储和获取。 1.2 为什么要有消息队列 当网站面对教大的流量…

系统总结学习 Python 的 14 张思维导图

本文主要涵盖了 Python 编程的核心知识&#xff08;暂不包括标准库及第三方库&#xff09;。 首先&#xff0c;按顺序依次展示了以下内容的一系列思维导图&#xff1a;基础知识&#xff0c;数据类型&#xff08;数字&#xff0c;字符串&#xff0c;列表&#xff0c;元组&#x…

LeetCode 1617. 统计子树中城市之间最大距离(枚举所有可能+图的最大直径)

文章目录1. 题目2. 解题1. 题目 给你 n 个城市&#xff0c;编号为从 1 到 n 。同时给你一个大小为 n-1 的数组 edges &#xff0c;其中 edges[i] [ui, vi] 表示城市 ui 和 vi 之间有一条双向边。 题目保证任意城市之间只有唯一的一条路径。换句话说&#xff0c;所有城市形成了…

HighCharts解析之xAxis——x轴的样式

xAxis&#xff1a;x轴选项 参数 描述 默认值 allowDecimals 轴上的刻度是否允许使用小数 true alternateGridColor 当使用备用的网格颜色时&#xff0c;表格会各行变色 null categories x轴的名称。比如 categories: [Apples, Bananas, Oranges] [] dateTimeLabe…

MYSQL电脑客户端免安装教程以及出现问题解决方案

准备工作&#xff1a;window 7 64位旗舰版 MySQL 5.6.35免安装。 1. 下载MySQL 1.1 进入MySQL官网下载&#xff08;https://www.mysql.com/&#xff09;MySQL的安装包。 1.2. 根据自己电脑的位数(32位/64位)来下载响应的MySQL 、 2. 部署MySQL 2.1 解压压缩包到自己的某个盘…

Kafka高性能相关

Kafka高性能相关 1 高性能原因 1.1 高效使用磁盘 &#xff08;1&#xff09;顺序写磁盘&#xff0c;顺序写磁盘性能高于随机写内存 &#xff08;2&#xff09;Append Only 数据不更新&#xff0c;无记录级的数据删除&#xff08;只会整个segment删除&#xff09; &#xf…

Python面试总结(四)ip正则与三次握手四次挥手

1.请简述值传递和引用传递的区别&#xff1f;值传递仅仅传递的是值 引用传递&#xff0c;传递的是内存地址&#xff0c;修改后会改变内存地址对应储存的值。2.请手写一个匹配ip的正则表达式&#xff1f;第一种方法&#xff1a; ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\…

Android相关sdk使用

SimpleDateFormat使用详解 Android_AlertDialog 两分钟彻底让你明白Android Activity生命周期(图文)!Android布局控件之LinearLayout详解Relative Layout如何正确地使用android中的progressdialog android的Menu使用android Toast大全&#xff08;五种情形&#xff09;建立属于…