#青训营笔记创作活动# 问题描述
小F被神秘力量带入了一个魔幻世界,这里危机四伏。为了在异世界中生存,小F需要找到安全区。异世界可以被表示为一个大小为n x m的二维数组,每个格子的值代表该位置的危险程度。
小F的能力值为X,当某个格子的危险程度小于等于X时,这个格子是安全的。如果多个安全的格子相邻(上下左右连通),它们可以构成一个安全区。你需要帮助小F计算出一共有多少个安全区。
测试样例
样例1:
输入:n = 3, m = 3, X = 4, a = [[2, 3, 3], [3, 3, 3], [3, 3, 3]]
输出:1
样例2:
输入:n = 2, m = 2, X = 5, a = [[6, 6], [6, 4]]
输出:1
样例3:
输入:n = 3, m = 3, X = 3, a = [[1, 2, 2], [2, 3, 3], [3, 4, 5]]
输出:1
题解:
一个原二维数组,新建一个visited数组记录是否经过,直接全部遍历,遇到安全值小于能力值且没经过的点就进入while循环。while循环通过队列实现安全区域的搜寻,通过maxnum记录安全区域的个数。
- 屏蔽作者: 秃头老鹦
- 举报
#青训营笔记创作活动#
1月2日 day24
讲了高并发下秒杀的9个细节
瞬间高并发
页面静态化
秒杀按钮
读多写少
缓存问题
库存问题
分布式锁
MQ异步处理
如何限流
等9个 问题,展开描述 有涉及到的 可以做参考
1月2日 day24
讲了高并发下秒杀的9个细节
瞬间高并发
页面静态化
秒杀按钮
读多写少
缓存问题
库存问题
分布式锁
MQ异步处理
如何限流
等9个 问题,展开描述 有涉及到的 可以做参考
展开
分享
评论
点赞
- 3 赞 · 4 评论
- #青训营笔记创作活动# 问题描述
小R从班级中抽取了一些同学,每位同学都会给出一个数字。已知在这些数字中,某个数字的出现次数超过了数字总数的一半。现在需要你帮助小R找到这个数字。
测试样例
样例1:
输入:array = [1, 3, 8, 2, 3, 1, 3, 3, 3]
输出:3
样例2:
输入:array = [5, 5, 5, 1, 2, 5, 5]
输出:5
样例3:
输入:array = [9, 9, 9, 9, 8, 9, 8, 8]
输出:9
方法
摩尔投票算法 是解决这个问题的一种高效算法。这个算法的核心思想是通过“投票”的方式,逐步排除掉不可能的候选数字,最终得到一个出现次数最多的数字。由于题目中说明有一个数字的出现次数超过了数组的一半,因此摩尔投票算法能够有效解决问题。
摩尔投票算法的工作原理:
投票阶段:首先选择一个候选数字,并将它的票数初始化为 1。然后遍历数组中的每个数字:
如果当前数字和候选数字相同,票数加 1。
如果当前数字和候选数字不同,票数减 1。如果票数减为 0,则选取当前数字作为新的候选数字,并将票数重置为 1。
确认阶段:在摩尔投票阶段结束后,我们得到一个候选数字。由于题目保证有一个数字出现次数超过数组总数的一半,因此最后的候选数字就是我们要找的数字。
代码实现:
代码解释
摩尔投票算法:
我们使用 candidate 来记录当前的候选数字,count 来记录候选数字的票数。
如果票数为零,说明之前的候选数字被“淘汰”了,我们就将当前数字设为新的候选数字,并将票数设为 1。
如果当前数字与候选数字相同,票数加 1。
如果当前数字与候选数字不同,票数减 1。
保证正确性:
根据题目描述,存在一个数字的出现次数超过数组总长度的一半,因此最终的 candidate 一定是正确的数字。
测试用例
输入:[1, 3, 8, 2, 3, 1, 3, 3, 3]
输出:3,3 出现了 5 次,超过了一半。
输入:[5, 5, 5, 1, 2, 5, 5]
输出:5,5 出现了 5 次,超过了一半。
输入:[9, 9, 9, 9, 8, 9, 8, 8]
输出:9,9 出现了 5 次,超过了一半。1 赞 · 2 评论 - #青训营笔记创作活动# 问题描述
小R拿到了一个数组,她可以进行如下操作:使得一个元素加1,另一个元素减1。她希望最终数组的每个元素大小都在[l, r]的范围内。小R想知道,最少需要多少次操作可以达到目标。
如果无法通过有限次操作使所有元素都落在指定范围内,则返回-1。
测试样例
样例1:
输入:n = 2 ,l = 3 ,r = 5 ,a = [1, 2]
输出:-1
样例2:
输入:n = 3 ,l = 4 ,r = 6 ,a = [3, 6, 5]
输出:1
样例3:
输入:n = 4 ,l = 2 ,r = 8 ,a = [1, 10, 2, 6]
输出:2
题解:
首先,整个数组的总和是不变的,所以数组的总和的下限和上限时相同的,于是第一步就是考虑这个数组是否可以塞进这个区间里。
不用考虑怎么变,只考虑是否能变。所以将所有低于l的元素和高于r的元素之间的差值取出,叫做lowsize和upsize,而其中的较大值就是最后的操作次数。因为其中高的可以补充低的,低的可以削减高的。0 赞 · 2 评论