华为OD机试 - 找座位( Python & C & C++ & Java&Go & JS & PHP)

题目描述

在大型体育场内,为遵守疫情防控要求,每位观众必须至少间隔一个空位才能落座。
现给出一排观众座位分布图,座位中有已落座的观众,我们的任务是计算在不移动现有观众座位的情况下,最多还能坐下多少名观众。

输入描述

输入为一个数组,该数组标识了某一排座位的占用情况。数组中的每个元素值为0或1,其中0表示该座位为空,1表示该座位已有观众。
数组长度不会超过10000。

输出描述

输出为一个整数,代表在不移动现有观众座位的情况下,最多还能坐下多少名观众。

示例

输入

[1, 0, 0, 1, 0, 1]

输出

2

解释:在给定的座位分布中,已有3名观众(在索引1、3、5的位置)。为了满足至少间隔一个空位的疫情防控要求,我们可以在索引2和4的位置各安排一名观众,因此最多还能坐下2名观众。

题目分析

要解决这个问题,我们可以遍历给定的座位数组,同时记录当前连续空座位的数量。当遇到一个已经坐人的座位时,我们检查之前的连续空座位数量,如果足够多(至少有两个空座位),那么我们可以再安排一个观众坐在中间。我们更新最大可用座位数,并重置连续空座位的计数。如果连续空座位的数量不足两个,我们就重置计数并继续寻找下一个已坐人的座位。

C代码实现

#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;
}

C++代码实现

#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;
}

Go代码实现

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
}

Python代码实现

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

Java代码实现

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

JS代码实现

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

PHP代码实现

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

你可能感兴趣的:(华为机考原题,华为od,python,c语言,秋招,面试,开发语言,c++)