跳到主要内容

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

链接:849.到最近的人的最大距离
难度:Medium
标签:数组
简介:返回他到离他最近的人的最大距离。

题解 1 - cpp

  • 编辑时间:2023-08-22
  • 执行用时:16ms
  • 内存消耗:16.14MB
  • 编程语言:cpp
  • 解法介绍:遍历时记录前一个1。
class Solution {
public:
int maxDistToClosest(vector<int>& seats) {
int prev = -1, idx = 0, res = INT_MIN;
while (idx < seats.size()) {
if (seats[idx] == 1) {
if (prev == -1) res = max(res, idx);
else res = max(res, (idx - prev) / 2);
prev = idx;
}
idx += 1;
}
res = max(res, (int)seats.size() - 1 - prev);
return res;
}
};

题解 2 - python

  • 编辑时间:2023-08-22
  • 执行用时:52ms
  • 内存消耗:16.38MB
  • 编程语言:python
  • 解法介绍:同上。
class Solution:
def maxDistToClosest(self, seats: List[int]) -> int:
prev = -1
idx = 0
res = -inf
while idx < len(seats):
if seats[idx] == 1:
if prev == -1:
res = max(res, idx)
else:
res = max(res, (idx - prev) // 2)
prev = idx
idx += 1
res = max(res, len(seats) - 1 - prev)
return res

题解 3 - rust

  • 编辑时间:2023-08-22
  • 内存消耗:2.15MB
  • 编程语言:rust
  • 解法介绍:同上。
impl Solution {
pub fn max_dist_to_closest(seats: Vec<i32>) -> i32 {
let mut prev = -1;
let mut idx = 0;
let mut res = i32::MIN;
while idx < seats.len() {
if seats[idx] == 1 {
let idx = idx as i32;
res = res.max(if prev == -1 { idx } else { (idx - prev) / 2 });
prev = idx;
}
idx += 1;
}
res = res.max(seats.len() as i32 - 1 - prev);
res
}
}