JavaScript算法25- 不含特殊楼层的最大连续楼层数(leetCode:6064)周赛

6064. 不含特殊楼层的最大连续楼层数


一、题目

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

给你两个整数 bottomtop ,表示 Alice 租用了从 bottomtop(含 bottomtop 在内)的所有楼层。另给你一个整数数组 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 中的所有值 互不相同

二、题解

思路

1、先给special数组排序,后遍历special

  • 从bottom到第一个特殊楼层的连续楼层个数为:special[0] - bottom;
  • special中的连续楼层个数为:special[i] - special[i - 1] - 1
  • 最后一个特殊楼层到top的连续楼层个数为:top - special[special.length - 1]

2、遍历前增加特殊情况判断,优化性能

  • 如果所有楼层都是特殊楼层 (top - bottom + 1) === special.length,直接返回0
  • 如果只有一个特殊楼层,比较特殊楼层到top和bottom的距离Math.max((special[0] - bottom), (top - special[0])),得到结果
/**
 * @param {number} bottom
 * @param {number} top
 * @param {number[]} special
 * @return {number}
 */
var maxConsecutive = function (bottom, top, special) {
    // 所有楼层都是特殊楼层
    if ((top - bottom + 1) === special.length) return 0
    // 只有一个特殊楼层
    if (special.length === 1) {
        return Math.max((special[0] - bottom), (top - special[0]))
    }
    // 有多个特殊楼层
    special.sort(function(a, b){return a - b})
    let maxSize = special[0] - bottom;
    for (let i = 1; i < special.length; i++){
        maxSize = Math.max(maxSize, special[i] - special[i-1] - 1)
    }
    maxSize = Math.max(maxSize, top - special[special.length - 1])
    return maxSize

};

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值