当前位置: 面试刷题>> 移动车棚 (经典算法题500道)


### 题目描述补充: 题目:**移动车棚** 在一个水平直线上,停放着多辆汽车,每辆汽车占据一定的位置区间(即每辆车有一个起始位置和结束位置)。现在需要构建一个可移动的车棚来覆盖这些汽车,车棚的长度固定,但位置可以移动。目标是找到一种方式,使得车棚能够覆盖到最多的汽车数量。 **输入**: - 一个整数N,表示汽车的数量。 - 接下来N行,每行包含两个整数,分别表示每辆汽车的起始位置和结束位置(起始位置小于等于结束位置)。 - 一个整数L,表示车棚的长度。 **输出**: - 一个整数,表示车棚能够覆盖到的最多汽车数量。 ### 示例 **输入**: ``` 4 1 3 2 6 8 10 5 9 5 ``` **解释**: - 有4辆汽车,位置分别为[1,3], [2,6], [8,10], [5,9]。 - 车棚长度为5。 **输出**: ``` 3 ``` **解释**: - 车棚可以覆盖到[2,6](第2辆车)和[5,9](第4辆车),同时向右移动还可以覆盖到[8,10](第3辆车)的一部分,但由于车棚长度为5,所以无法完全覆盖第1辆车。因此,最多可以覆盖3辆车。 ### PHP代码示例: ```php ``` ### Python代码示例: ```python def max_cars_covered(cars, L): cars.sort(key=lambda x: x[0]) # 按起始位置排序 max_covered = 0 end = cars[0][1] # 初始最远位置 count = 1 # 初始覆盖车辆数 for i in range(1, len(cars)): if cars[i][0] <= end: # 如果新车在覆盖范围内 count += 1 end = max(end, cars[i][1]) # 更新最远位置 else: # 如果新车不在覆盖范围内,尝试移动车棚 if cars[i][0] - L <= end: end = cars[i][1] count = 1 else: end = cars[i][1] count = 1 max_covered = max(max_covered, count) return max_covered # 示例输入 cars = [[1, 3], [2, 6], [8, 10], [5, 9]] L = 5 print(max_cars_covered(cars, L)) # 输出: 3 ``` ### JavaScript代码示例: ```javascript function maxCarsCovered(cars, L) { cars.sort((a, b) => a[0] - b[0]); // 按起始位置排序 let maxCovered = 0; let end = cars[0][1]; // 初始最远位置 let count = 1; // 初始覆盖车辆数 for (let i = 1; i < cars.length; i++) { if (cars[i][0] <= end) { // 如果新车在覆盖范围内 count++; end = Math.max(end, cars[i][1]); // 更新最远位置 } else { // 如果新车不在覆盖范围内,尝试移动车棚 if (cars[i][0] - L <= end) { end = cars[i][1]; count = 1; } else { end = cars[i][1]; count = 1; } } maxCovered = Math.max(maxCovered, count); } return maxCovered; } // 示例输入 const cars = [[1, 3], [2, 6], [8, 10], [5, 9]]; const L = 5; console.log(maxCarsCovered(cars, L)); // 输出: 3 ``` 码小课网站中有更多相关内容分享给大家学习,涵盖算法、数据结构、编程技巧等各个方面,欢迎大家访问学习。
推荐面试题