华为OD机考 2025A卷 - 查找单入口空闲区域(100分)

查找单入口空闲区域

真题目录: 点击去查看

2025A卷 100分题型

题目描述

给定一个 m x n 的矩阵,由若干字符 ‘X’ 和 ‘O’构成,’X’表示该处已被占据,’O’表示该处空闲,请找到最大的单入口空闲区域。

解释:

空闲区域是由连通的’O’组成的区域,位于边界的’O’可以构成入口,单入口空闲区域即有且只有一个位于边界的’O’作为入口的由连通的’O’组成的区域。如果两个元素在水平或垂直方向相邻,则称它们是“连通”的。

输入描述

第一行输入为两个数字,第一个数字为行数m,第二个数字为列数n,两个数字以空格分隔,1<=m,n<=200。

剩余各行为矩阵各行元素,元素为‘X’或‘O’,各元素间以空格分隔。

输出描述

若有唯一符合要求的最大单入口空闲区域,输出三个数字

  • 第一个数字为入口行坐标(0~m-1)
  • 第二个数字为入口
### 华为OD机考停车场车辆统计算法实现 为了完成停车场车辆统计的任务,目标是最少能容纳多少辆车。以下是详细的解答过程: #### 问题描述 给定一个数组 `cars[]` 表示停车场的状态,其中 `1` 表示有车占用该位置,而 `0` 则表示为空闲车位。假设每种车型占据不同的连续车位数量: - 小车占 **1** 个车位, - 货车占 **2** 个车位, - 卡车占 **3** 个车位。 需要计算出在当前状态下,停车场能够停放的最少车辆数,并返回具体数值[^1]。 --- #### 解决方案设计 此问题是典型的贪心算法应用案例之一。核心思想是从大到小依次尝试放置尽可能多的大尺寸车辆(即优先放卡车再货车最后小车),从而减少总的停车数量。 ##### 关键步骤说明 1. 遍历整个停车场状态数组 `cars[]` 并标记已使用的区域。 2. 对于每一个未被标记的位置: - 如果当前位置及其后续两位均为空,则可停一辆卡车; - 否则如果当前位置及其后一位为空,则可停一辆货车; - 若仅当前位置为空,则只能停一辆小车。 3. 记录每次成功停车的操作次数直至全部处理完毕。 --- #### Python代码实现 下面提供了一段基于上述逻辑编写的Python程序来解决这个问题: ```python def min_cars_parking(cars): n = len(cars) count = 0 i = 0 while i < n: if cars[i] == 0: # 当前位置为空 if i + 2 < n and cars[i+1]==0 and cars[i+2]==0: # 可以停下卡车(长度=3) count += 1 i += 3 elif i + 1 < n and cars[i+1]==0: # 可以停下货车(长度=2) count += 1 i += 2 else: # 只能停下小车(长度=1) count += 1 i += 1 else: # 已经有车占据了这个位置 i += 1 return count # 测试样例 if __name__ == "__main__": test_cases = [ ([0, 0, 0], 1), # 完全空闲的情况 -> 应当只停一辆卡车 ([0, 0, 1, 0, 0], 2), # 中间有一个障碍物 -> 停两辆不同类型的车 ([1, 1, 0, 0, 0], 1) # 开头部已被占用 -> 剩余空间刚好适合一辆卡车 ] all_passed = True for idx, (input_, expected_output) in enumerate(test_cases): result = min_cars_parking(input_) if result != expected_output: print(f"Test case {idx} failed! Expected {expected_output}, got {result}") all_passed = False if all_passed: print("All tests passed!") ``` 以上代码实现了基本功能并通过几个简单测试用例验证其正确性。 --- #### 时间复杂度与空间复杂度- **时间复杂度**: O(n),因为只需要一次线性的扫描即可解决问题。 - **空间复杂度**: O(1),除了输入外不需要额外存储结构辅助运算[^2]。 --- #### 总结 通过采用贪心策略,我们有效地解决了如何利用有限资源最大化效益的问题,在本场景下表现为最小化所需车辆总数的同时满足所有约束条件。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无限码力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值