在大型体育场内,为遵守疫情防控要求,每位观众必须至少间隔一个空位才能落座。
现给出一排观众座位分布图,座位中有已落座的观众,我们的任务是计算在不移动现有观众座位的情况下,最多还能坐下多少名观众。
输入为一个数组,该数组标识了某一排座位的占用情况。数组中的每个元素值为0或1,其中0表示该座位为空,1表示该座位已有观众。
数组长度不会超过10000。
输出为一个整数,代表在不移动现有观众座位的情况下,最多还能坐下多少名观众。
[1, 0, 0, 1, 0, 1]
2
解释:在给定的座位分布中,已有3名观众(在索引1、3、5的位置)。为了满足至少间隔一个空位的疫情防控要求,我们可以在索引2和4的位置各安排一名观众,因此最多还能坐下2名观众。
要解决这个问题,我们可以遍历给定的座位数组,同时记录当前连续空座位的数量。当遇到一个已经坐人的座位时,我们检查之前的连续空座位数量,如果足够多(至少有两个空座位),那么我们可以再安排一个观众坐在中间。我们更新最大可用座位数,并重置连续空座位的计数。如果连续空座位的数量不足两个,我们就重置计数并继续寻找下一个已坐人的座位。
#include
#include
int maxAdditionalSeats(int seats[]) {
int maxSeats = 0;
int emptySeats = 0;
for (int i = 0; i < sizeof(seats) / sizeof(seats[0]); i++) {
if (seats[i] == 0) {
emptySeats++;
} else {
if (emptySeats >= 2) {
maxSeats++;
}
emptySeats = 0;
}
}
// 检查最后一个连续空座位段
if (emptySeats >= 2) {
maxSeats++;
}
return maxSeats;
}
int main() {
int seats[] = {1, 0, 0, 1, 0, 1};
printf("%d\n", maxAdditionalSeats(seats)); // 输出应为2
return 0;
}
#include
#include
int maxAdditionalSeats(std::vector<int> seats) {
int maxSeats = 0;
int emptySeats = 0;
for (int& seat : seats) {
if (seat == 0) {
emptySeats++;
} else {
if (emptySeats >= 2) {
maxSeats++;
}
emptySeats = 0;
}
}
// 检查最后一个连续空座位段
if (emptySeats >= 2) {
maxSeats++;
}
return maxSeats;
}
int main() {
std::vector<int> seats = {1, 0, 0, 1, 0, 1};
std::cout << maxAdditionalSeats(seats) << std::endl; // 输出应为2
return 0;
}
package main
import "fmt"
func maxAdditionalSeats(seats []int) int {
maxSeats := 0
emptySeats := 0
for _, seat := range seats {
if seat == 0 {
emptySeats++
} else {
if emptySeats >= 2 {
maxSeats++
}
emptySeats = 0
}
}
// 检查最后一个连续空座位段
if emptySeats >= 2 {
maxSeats++
}
return maxSeats
}
def max_additional_seats(seats):
max_seats = 0 # 最大可安排座位数
empty_seats = 0 # 当前连续空座位数
for seat in seats:
if seat == 0: # 空座位
empty_seats += 1
else: # 已坐人的座位
if empty_seats >= 2: # 如果至少有两个空座位
max_seats += 1 # 可以安排一个观众
empty_seats = 0 # 重置连续空座位数
# 检查最后一个连续空座位段
if empty_seats >= 2:
max_seats += 1
return max_seats
# 测试
seats = [1, 0, 0, 1, 0, 1]
print(max_additional_seats(seats)) # 输出应为2
public int maxAdditionalSeats(int[] seats) {
int maxSeats = 0; // 最大可安排座位数
int emptySeats = 0; // 当前连续空座位数
for (int seat : seats) {
if (seat == 0) {
emptySeats++;
} else {
if (emptySeats >= 2) {
maxSeats++;
}
emptySeats = 0;
}
}
// 检查最后一个连续空座位段
if (emptySeats >= 2) {
maxSeats++;
}
return maxSeats;
}
// 测试
int[] seats = {1, 0, 0, 1, 0, 1};
System.out.println(maxAdditionalSeats(seats)); // 输出应为2
public int maxAdditionalSeats(int[] seats) {
int maxSeats = 0; // 最大可安排座位数
int emptySeats = 0; // 当前连续空座位数
for (int seat : seats) {
if (seat == 0) {
emptySeats++;
} else {
if (emptySeats >= 2) {
maxSeats++;
}
emptySeats = 0;
}
}
// 检查最后一个连续空座位段
if (emptySeats >= 2) {
maxSeats++;
}
return maxSeats;
}
// 测试
int[] seats = {1, 0, 0, 1, 0, 1};
System.out.println(maxAdditionalSeats(seats)); // 输出应为2
public function maxAdditionalSeats($seats) {
$maxSeats = 0; // 最大可安排座位数
$emptySeats = 0; // 当前连续空座位数
foreach ($seats as $seat) {
if ($seat == 0) {
$emptySeats++;
} else {
if ($emptySeats >= 2) {
$maxSeats++;
}
$emptySeats = 0;
}
}
// 检查最后一个连续空座位段
if ($emptySeats >= 2) {
$maxSeats++;
}
return $maxSeats;
}
// 测试
$seats = [1, 0, 0, 1, 0, 1];
echo $this->maxAdditionalSeats($seats); // 输出应为2