Leetcode打卡:不含特殊楼层的最大连续楼层数

执行结果:通过

题目 2274 不含特殊楼层的最大连续楼层数

Alice 管理着一家公司,并租用大楼的部分楼层作为办公空间。Alice 决定将一些楼层作为 特殊楼层 ,仅用于放松。

给你两个整数 bottom 和 top ,表示 Alice 租用了从 bottom 到 top(含 bottom 和 top 在内)的所有楼层。另给你一个整数数组 special ,其中 special[i] 表示 Alice 指定用于放松的特殊楼层。

返回不含特殊楼层的 最大 连续楼层数。

示例 1:

复制代码
输入:bottom = 2, top = 9, special = [4,6]
输出:3
解释:下面列出的是不含特殊楼层的连续楼层范围:
- (2, 3) ,楼层数为 2 。
- (5, 5) ,楼层数为 1 。
- (7, 9) ,楼层数为 3 。
因此,返回最大连续楼层数 3 。

示例 2:

复制代码
输入:bottom = 6, top = 8, special = [7,6,8]
输出:0
解释:每层楼都被规划为特殊楼层,所以返回 0 。

提示

  • 1 <= special.length <= 105
  • 1 <= bottom <= special[i] <= top <= 109
  • special 中的所有值 互不相同

代码以及解题思路

代码

复制代码
class Solution:
    def maxConsecutive(self, bottom: int, top: int, special: List[int]) -> int:
        return max(y - x for x, y in pairwise([bottom - 1] + sorted(special) + [top + 1])) - 1

解题思路

  1. 理解题意 :
    • bottom 和 top 定义了查找连续整数序列的范围。
    • special 列表包含了在这个范围内的一些特殊数字,这些数字可以构成连续整数序列的一部分。
  2. 处理边界情况 :
    • 在开始计算之前,为了处理边界情况,我们在 special 列表的前后分别添加 bottom - 1 和 top + 1。这两个数字不在目标范围内,但这样做可以帮助我们计算从 bottom 开始到第一个特殊数字以及从最后一个特殊数字到 top 结束之间的连续整数序列长度。
  3. 排序 :
    • 将 special 列表进行排序,确保数字是按升序排列的。这是因为在连续整数序列中,每个数字都应该比前一个数字大1。
  4. 计算连续序列长度 :
    • 使用 pairwise 函数(来自 itertools 模块,但题目描述中未明确提及,可能是假设已知)来计算相邻元素之间的差值。pairwise 函数会返回一个迭代器,其中每个元素是一个元组,包含列表中的相邻项 (x, y)。
    • 对每个 (x, y) 元组,计算 y - x,这将给出从 x 到 y(不包括 y)之间的连续整数个数。注意,由于我们在列表的开头和结尾添加了 bottom - 1 和 top + 1,这里的 y - x 实际上表示的是从 x+1 到 y-1 的连续整数个数(因为我们要找的是严格大于前一个数的连续整数序列)。
  5. 找出最大长度 :
    • 使用 max 函数找出所有计算出的连续整数序列长度的最大值。
  6. 调整结果 :
    • 由于我们在计算长度时考虑了序列的起始和结束数字(即 x+1 到 y-1),而题目要求的是序列中数字的数量,因此需要从最大值中减去1来得到最终答案。这是因为我们在计算长度时包括了序列两端的边界效应(即添加的 bottom - 1 和 top + 1 导致的额外长度)。
相关推荐
在所不辞兄20 小时前
选择隐式方法求解刚性ODE
算法
码爸20 小时前
贪心算法介绍与示例
算法·贪心算法
bksczm20 小时前
0基础面试3
面试·职场和发展
-dzk-20 小时前
【多维动态规划】LC 64.最小路径和
算法·动态规划
垆边人似月.21 小时前
华为机试题 :字符串压缩
算法·华为
ggb喔21 小时前
52pojie 的图片工具:为什么无损转换后体积涨了 6 倍、照片方向还是歪的
图像处理·python·算法·计算机视觉·图形渲染·媒体
菜鸟~noob23321 小时前
【电子战】第25篇:自由空间、双射线与菲涅尔区【含matlab代码】
开发语言·算法·matlab
地平线开发者1 天前
地平线征程6M YOLOv8s 部署
算法·自动驾驶
Run_Teenage1 天前
算法:Manacher(马拉车)算法、中心扩展算法
算法
Tisfy1 天前
LeetCode 0301.删除无效的括号:二进制枚举 / 回溯
算法·leetcode·字符串·题解·回溯·括号匹配·二进制枚举