目錄
849. 到最近的人的最大距離
題目描述:
實現(xiàn)代碼與解析:
雙指針
原理思路:
849. 到最近的人的最大距離
題目描述:
????????給你一個數(shù)組?seats
?表示一排座位,其中?seats[i] = 1
?代表有人坐在第?i
?個座位上,seats[i] = 0
?代表座位?i
?上是空的(下標從 0 開始)。
至少有一個空座位,且至少有一人已經坐在座位上。
亞歷克斯希望坐在一個能夠使他與離他最近的人之間的距離達到最大化的座位上。
返回他到離他最近的人的最大距離。
示例 1:
輸入:seats = [1,0,0,0,1,0,1] 輸出:2 解釋: 如果亞歷克斯坐在第二個空位(seats[2])上,他到離他最近的人的距離為 2 。 如果亞歷克斯坐在其它任何一個空位上,他到離他最近的人的距離為 1 。 因此,他到離他最近的人的最大距離是 2 。
示例 2:
輸入:seats = [1,0,0,0] 輸出:3 解釋: 如果亞歷克斯坐在最后一個座位上,他離最近的人有 3 個座位遠。 這是可能的最大距離,所以答案是 3 。
示例 3:
輸入:seats = [0,1] 輸出:1
提示:文章來源:http://www.zghlxwxcb.cn/news/detail-672382.html
2 <= seats.length <= 2 * 104
-
seats[i]
?為?0
?或?1
- 至少有一個?空座位
- 至少有一個?座位上有人
實現(xiàn)代碼與解析:
雙指針
class Solution {
public:
int maxDistToClosest(vector<int>& seats) {
int res = 0;
int l = 0;
while(l < seats.size() && seats[l] == 0) l++; // 第一個非0
res = max(res, l); // 算一下最左側距離
while(l < seats.size())
{
int r = l + 1;
while(r < seats.size() && seats[r] == 0) r++; // i 后第一個非0
if (r == seats.size()) res = max(res, r - l - 1); // 如果是最后一個,算一下與右側的距離
else res = max(res, (r - l) >> 1); // 不是最后一個,那么最大距離是其之間的距離除2
l = r; // 計算下一個區(qū)間
}
return res;
}
};
原理思路:
? ? ? ? 簡單題,雙指針,每個區(qū)間的最大距離就是兩個非0區(qū)間差值的一半,不過左右兩側不一定有1,單獨處理一下即可。文章來源地址http://www.zghlxwxcb.cn/news/detail-672382.html
到了這里,關于Leetcode每日一題:849. 到最近的人的最大距離(2023.8.22 C++)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!