【Leetcode】2274. 不含特殊楼层的最大连续楼层数

文章目录

题目

题目链接🔗
A l i c e Alice Alice 管理着一家公司,并租用大楼的部分楼层作为办公空间。 A l i c e Alice Alice 决定将一些楼层作为 特殊楼层 ,仅用于放松。

给你两个整数 b o t t o m bottom bottom 和 t o p top top ,表示 Alice 租用了从 b o t t o m bottom bottom 到 t o p top top(含 b o t t o m bottom bottom 和 t o p top top 在内)的所有楼层。另给你一个整数数组 s p e c i a l special special ,其中 s p e c i a l i speciali speciali 表示 A l i c e Alice 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. 1 ≤ s p e c i a l . l e n g t h ≤ 1 0 5 1 \leq special.length \leq 10^5 1≤special.length≤105
  2. 1 ≤ b o t t o m ≤ s p e c i a l i ≤ t o p ≤ 1 0 9 1 \leq bottom \leq speciali \leq top \leq 10^9 1≤bottom≤speciali≤top≤109
  3. special 中的所有值 互不相同

思路

如果我们将给定的数组 s p e c i a l special special 按照升序排序,那么相邻两个元素之间的楼层就都不是特殊楼层。如果相邻的两个元素分别为 x x x, y y y,那么非特殊楼层的数量即为 y − x − 1 y−x−1 y−x−1。记得还要对 t o p top top 还有 b o t t o m bottom bottom 进行特殊判断

代码

c++ 复制代码
class Solution {
public:
    int maxConsecutive(int bottom, int top, vector<int>& special) {
        sort(special.begin(), special.end());
        int n = special.size();
        int ans = max(special[0] - bottom, top - special[n - 1]);
        for (int i = 1; i < n; ++i) {
            ans = max(ans, special[i] - special[i - 1] - 1);
        }
        return ans;
    }
};

复杂度分析

时间复杂度

  • 排序时间复杂度:排序数组 special 需要 O ( n log ⁡ n ) O(n \log n) O(nlogn),其中 n n n 是 special 数组的长度。
  • 遍历时间复杂度:遍历数组 special 需要 O ( n ) O(n) O(n)。

因此,总的时间复杂度为 O ( n log ⁡ n ) O(n \log n) O(nlogn)。

空间复杂度

只使用了常数空间来存储一些变量,所以空间复杂度是 O ( 1 ) O(1) O(1)

结果

总结

通过排序和遍历,我们能够高效地计算不含特殊楼层的最大连续楼层数。

时间复杂度为 O ( n log ⁡ n ) O(n \log n) O(nlogn),适用于较大规模的数据。

相关推荐
左手の明天6 小时前
SLIP 协议封装与解析详解:原理、C 代码与实战案例
linux·c语言·开发语言·c++
海上小飞龙7 小时前
【KMP算法-下篇】同一道题:Java 库函数 2600 微秒,手写 KMP 16 微秒
java·开发语言·算法
ychqsq7 小时前
203.诊断
经验分享·职场和发展
青少儿编程课堂7 小时前
后缀自动机解析:本质不同子串与最长重复片段统计
c++·python·算法·bfs·信息学竞赛
朝朝辞暮i7 小时前
C++ 第 12 课:局部变量、作用域、变量生命周期
开发语言·c++·算法
乐迪信息8 小时前
港口船舶逆行怎么管?AI防爆摄像机搭载智能检测算法
大数据·人工智能·深度学习·算法·计算机视觉
无名猿9 小时前
shared_ptr 完全指南:引用计数、控制块与开销
c++·性能优化·内存管理·标准库·现代c++
Sirens.9 小时前
Java并发锁详解:六类锁策略与 synchronized 底层原理
java·前端·算法
和裕10 小时前
全纸结构重型纸箱能否满足 1 吨以上设备出口熏蒸豁免要求?通关合规性全解析
大数据·运维·网络·人工智能·算法