前段时间刷力扣的时候遇到一道挺有意思的题目,他的解题方法与我的有些不同,拿出来分享一下
官方的题解是这样的
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