力扣每日一题2274不含特殊楼层的最大连续楼层数

前段时间刷力扣的时候遇到一道挺有意思的题目,他的解题方法与我的有些不同,拿出来分享一下

官方的题解是这样的

class Solution {
public:
    int maxConsecutive(int bottom, int top, vector<int>& special) {
        special.push_back(bottom - 1);
        special.push_back(top + 1);
        sort(special.begin(), special.end());

        int n = special.size();
        int ans = 0;
        for (int i = 0; i < n - 1; ++i) {
            ans = max(ans, special[i + 1] - special[i] - 1);
        }
        return ans;
    }
};

这题的解决思路是当指定了需要使用的楼层后,那么这些指定楼层到顶楼或者这些楼层到底层楼以及指定楼层中间的楼层其中一种情况就是最大连续的未使用楼层,因此我们只需要把(顶楼+1)以及(底层楼-1)的数字放入数组内,并按照从小到大进行排序就可以获得结果,计算的结果就是数组内相邻的两数相减,至于为什么顶楼+1,底层楼-1,是因为计算的问题

例如总共有9楼,我使用4楼和6楼,那么数组就是special=【4,6】,此时会有三种情况就是

res1=4-1=3

res2=6-4=2

res3=9-6=3

可知结果二是有问题的,不可能有连续两层的情况,同时4楼和6楼之间也只有一个楼层,因此需要对运算算法进行-1,但是-1后会影响到顶楼和此层楼的结果,因此我们将其楼层补上,因此才会需要底层楼-1和顶层楼+1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值