• LeetCode 1109 航班预定统计


    这里有 n 个航班,它们分别从 1n 进行编号。

    有一份航班预订表 bookings ,表中第 i 条预订记录 bookings[i] = [firsti, lasti, seatsi] 意味着在从 firsti 到 lasti包含 firstilasti )的 每个航班 上预订了 seatsi 个座位。

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

    示例 1:

    输入:bookings = [[1,2,10],[2,3,20],[2,5,25]], n = 5
    输出:[10,55,45,25,25]
    解释:
    航班编号        1   2   3   4   5
    预订记录 1 :   10  10
    预订记录 2 :       20  20
    预订记录 3 :       25  25  25  25
    总座位数:      10  55  45  25  25
    因此,answer = [10,55,45,25,25]
    

    示例 2:

    输入:bookings = [[1,2,10],[2,2,15]], n = 2
    输出:[10,25]
    解释:
    航班编号        1   2
    预订记录 1 :   10  10
    预订记录 2 :       15
    总座位数:      10  25
    因此,answer = [10,25]
    

    前缀和+差分数组
    以示例1为例:

    /**
     * 前缀和
     *
     * @param bookings
     * @param n
     * @return
     */
    public static int[] corpFlightBookings(int[][] bookings, int n) {
        if (bookings == null || bookings.length == 0) return new int[]{};
    
        // diff[i] 保存航班i相对于航班i-1处的变化,差分数组
        int[] diff = new int[n + 2];
        // 左端点+seatsi,右端点后面-seatsi,中间的状态不变,就省了给每个位置更新的时间
        for (int[] booking : bookings) {
            diff[booking[0]] += booking[2];
            diff[booking[1] + 1] -= booking[2];
        }
    
        // 前缀和
        int[] prefixSum = new int[n + 1];
        for (int i = 1; i <= n; i++) {
            diff[i] += diff[i - 1];
            prefixSum[i - 1] = diff[i];
        }
    
        return Arrays.copyOf(prefixSum, n);
    }
    

    测试用例

    public static void main(String[] args) {
        int[][] bookings = new int[][]{{1, 2, 10}, {2, 3, 20}, {2, 5, 25}};
        int n = 5;
        int[] ans = CorpFlightBookings.corpFlightBookings(bookings, n);
        System.out.print("CorpFlightBookings demo01 result : ");
        for (int tmp : ans) {
            System.out.print("," + tmp);
        }
        System.out.println();
    
        bookings = new int[][]{{1, 2, 10}, {2, 2, 15}};
        n = 2;
        ans = CorpFlightBookings.corpFlightBookings(bookings, n);
        System.out.print("CorpFlightBookings demo02 result : ");
        for (int tmp : ans) {
            System.out.print("," + tmp);
        }
        System.out.println();
    }
    
  • 相关阅读:
    U8g2库I2C总线再次突破性调试成功
    要学的东西太多了,还想学习opencv
    中断知识
    别人做的扫地机器人,有机会我也想搞一台!
    团队冲刺第五天
    第八周学习进度
    团队冲刺第四天
    构建之法1
    团队冲刺第三天
    团队冲刺第二天
  • 原文地址:https://www.cnblogs.com/fyusac/p/15055122.html
Copyright © 2020-2023  润新知