返回
启航思维,扬帆学海:前端刷题路-Day98航班预订统计
前端
2023-09-07 23:07:55
扬帆起航:理解问题精髓
前端刷题路-Day98航班预订统计问题,宛如一道耐人寻味的智力拼图,考验着我们的算法思维与编程能力。问题如下:
这里有 n 个航班,它们分别从 1 到 n 进行编号。有一份航班预订表 bookings ,表中第 i 条预订记录 bookings[i] = [firsti, lasti] 表示第 i 个航班从 firsti 号座位预订到 lasti 号座位(包含 firsti 和 lasti)。
现在,我们想要统计每个航班上预订的座位数。
请你返回一个长度为 n 的数组 answer,其中 answer[i] 是第 i 个航班上的预订座位数。
算法策略:抽丝剥茧,逐个击破
为了解决这个问题,我们可以采用一种巧妙的计数策略:
-
初始化航班预订数组: 首先,创建一个长度为 n 的数组 answer ,并将其所有元素初始化为 0。这个数组将用于存储每个航班上预订的座位数。
-
遍历航班预订表: 接下来,遍历航班预订表 bookings。对于每条预订记录 [firsti, lasti],执行以下操作:
- 将 answer[firsti - 1] 增加 1,表示在第 firsti 个航班上预订了一个座位。
- 将 answer[lasti] 减少 1,表示在第 lasti + 1 个航班上取消了一个座位。
-
计算航班预订座位数: 遍历完航班预订表后,我们需要计算每个航班上预订的座位数。我们可以通过以下方式做到:
- 将 answer[0] 赋值给一个变量 total_seats。
- 从 1 到 n-1,将 answer[i] 加到 total_seats。
-
返回航班预订座位数: 最后,将 total_seats 作为 answer 数组的最后一个元素,并返回 answer 数组。
代码实现:扬帆起航,乘风破浪
/*
* 统计航班预订座位数
*
* @param {number[][]} bookings 航班预订表
* @param {number} n 航班总数
* @return {number[]} 每个航班上预订的座位数
*/
const corpFlightBookings = (bookings, n) => {
// 初始化航班预订数组
const answer = new Array(n).fill(0);
// 遍历航班预订表
for (const booking of bookings) {
const [firsti, lasti] = booking;
// 将 answer[firsti - 1] 增加 1,表示在第 firsti 个航班上预订了一个座位
answer[firsti - 1]++;
// 将 answer[lasti] 减少 1,表示在第 lasti + 1 个航班上取消了一个座位
answer[lasti]--;
}
// 计算航班预订座位数
let total_seats = answer[0];
for (let i = 1; i < n; i++) {
total_seats += answer[i];
}
// 将 total_seats 作为 answer 数组的最后一个元素
answer[n - 1] = total_seats;
// 返回 answer 数组
return answer;
};
扬帆远航:总结与展望
前端刷题路-Day98航班预订统计问题,是一次算法与编程能力的考验。通过巧妙的计数策略,我们可以有效地解决这个问题。希望你能从中学到新的算法思想和技巧,在未来的编程旅途中乘风破浪,勇攀高峰!