返回

启航思维,扬帆学海:前端刷题路-Day98航班预订统计

前端

扬帆起航:理解问题精髓

前端刷题路-Day98航班预订统计问题,宛如一道耐人寻味的智力拼图,考验着我们的算法思维与编程能力。问题如下:

这里有 n 个航班,它们分别从 1 到 n 进行编号。有一份航班预订表 bookings ,表中第 i 条预订记录 bookings[i] = [firsti, lasti] 表示第 i 个航班从 firsti 号座位预订到 lasti 号座位(包含 firsti 和 lasti)。

现在,我们想要统计每个航班上预订的座位数。

请你返回一个长度为 n 的数组 answer,其中 answer[i] 是第 i 个航班上的预订座位数。

算法策略:抽丝剥茧,逐个击破

为了解决这个问题,我们可以采用一种巧妙的计数策略:

  1. 初始化航班预订数组: 首先,创建一个长度为 n 的数组 answer ,并将其所有元素初始化为 0。这个数组将用于存储每个航班上预订的座位数。

  2. 遍历航班预订表: 接下来,遍历航班预订表 bookings。对于每条预订记录 [firsti, lasti],执行以下操作:

    • 将 answer[firsti - 1] 增加 1,表示在第 firsti 个航班上预订了一个座位。
    • 将 answer[lasti] 减少 1,表示在第 lasti + 1 个航班上取消了一个座位。
  3. 计算航班预订座位数: 遍历完航班预订表后,我们需要计算每个航班上预订的座位数。我们可以通过以下方式做到:

    • 将 answer[0] 赋值给一个变量 total_seats。
    • 从 1 到 n-1,将 answer[i] 加到 total_seats。
  4. 返回航班预订座位数: 最后,将 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航班预订统计问题,是一次算法与编程能力的考验。通过巧妙的计数策略,我们可以有效地解决这个问题。希望你能从中学到新的算法思想和技巧,在未来的编程旅途中乘风破浪,勇攀高峰!