列表

详情


849. 到最近的人的最大距离

给你一个数组 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

 

提示:

相似题目

考场就座

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int maxDistToClosest(vector<int>& seats) { } };

cpp 解法, 执行用时: 16 ms, 内存消耗: 16.7 MB, 提交时间: 2023-08-22 09:13:16

class Solution {
public:
    int maxDistToClosest(vector<int>& seats) {
        int res = 0;
        int l = 0;
        while (l < seats.size() && seats[l] == 0) {
            ++l;
        }
        res = max(res, l);
        while (l < seats.size()) {
            int r = l + 1;
            while (r < seats.size() && seats[r] == 0) {
                ++r;
            }
            if (r == seats.size()) {
                res = max(res, r - l - 1);
            } else {
                res = max(res, (r - l) / 2);
            }
            l = r;
        }
        return res;
    }
};

php 解法, 执行用时: 40 ms, 内存消耗: 21.6 MB, 提交时间: 2023-08-22 09:12:14

class Solution {

    /**
     * @param Integer[] $seats
     * @return Integer
     */
    function maxDistToClosest($seats) {
        $res = 0;
        $l = 0;
        $n = count($seats);
        // 左侧连续空位个数
        while ( $l < $n && $seats[$l] == 0 ) {
            $l++;
        }
        $res = max($res, $l);
        while ( $l < $n ) {
            $r = $l + 1;
            // 跳过一个有人的,下一个有人的位置
            while ( $r < $n && $seats[$r] == 0 ) {
                $r++;
            }
            if ( $r == $n ) {
                $res = max($res, $r - $l - 1);
            } else {
                $res = max($res, intval(($r - $l) / 2));
            }
            $l = $r;
        }
        return $res;
    }
}

java 解法, 执行用时: 2 ms, 内存消耗: 43.6 MB, 提交时间: 2023-08-22 09:06:02

class Solution {
    public int maxDistToClosest(int[] seats) {
        int res = 0;
        int l = 0;
        while (l < seats.length && seats[l] == 0) {
            ++l;
        }
        res = Math.max(res, l);
        while (l < seats.length) {
            int r = l + 1;
            while (r < seats.length && seats[r] == 0) {
                ++r;
            }
            if (r == seats.length) {
                res = Math.max(res, r - l - 1);
            } else {
                res = Math.max(res, (r - l) / 2);
            }
            l = r;
        }
        return res;
    }
}

golang 解法, 执行用时: 4 ms, 内存消耗: 5.1 MB, 提交时间: 2023-08-22 09:05:37

func maxDistToClosest(seats []int) int {
    res := 0
    l := 0
    for l < len(seats) && seats[l] == 0 {
        l++
    }
    res = max(res, l)
    for l < len(seats) {
        r := l + 1
        for r < len(seats) && seats[r] == 0 {
            r++
        }
        if r == len(seats) {
            res = max(res, r - l - 1)
        } else {
            res = max(res, (r - l) / 2)
        }
        l = r
    }
    return res
}

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}

python3 解法, 执行用时: 64 ms, 内存消耗: 16.8 MB, 提交时间: 2023-08-22 09:05:06

class Solution:
    def maxDistToClosest(self, seats: List[int]) -> int:
        res, l = 0, 0
        while l < len(seats) and seats[l] == 0:
            l += 1
        res = max(res, l)
        while l < len(seats):
            r = l + 1
            while r < len(seats) and seats[r] == 0:
                r += 1
            if r == len(seats):
                res = max(res, r - l - 1)
            else:
                res = max(res, (r - l) // 2)
            l = r
        return res

上一题