5118-航班預訂統計

前言

Weekly Contest 144航班預訂統計數組

這裏有 n 個航班,它們分別從 1n 進行編號。code

咱們這兒有一份航班預訂表,表中第 i 條預訂記錄 bookings[i] = [i, j, k] 意味着咱們在從 ij 的每一個航班上預訂了 k 個座位。索引

請你返回一個長度爲 n 的數組 answer,按航班編號順序返回每一個航班上預訂的座位數。leetcode

示例:get

輸入:bookings = [[1,2,10],[2,3,20],[2,5,25]], n = 5
輸出:[10,55,45,25,25]

提示:test

  • 1 <= bookings.length <= 20000
  • 1 <= bookings[i][0] <= bookings[i][1] <= n <= 20000
  • 1 <= bookings[i][2] <= 10000

解題思路

本題題目的思路其實比較簡答:統計

  1. 讀取出每條預約記錄bookings[i] = [i, j, k]的起點i,終點j和座位數k
  2. 處於起點ij之間的result[n]須要增長對應的座位數k,即若i<=n+1<=k(由於n爲數組下標索引,因此須要n+1),則result[n]+=k

下面會經過題目的示例分析:數據

輸入:bookings = [[1,2,10],[2,3,20],[2,5,25]], n = 5
輸出:[10,55,45,25,25]

運算過程co

  1. 1行數據[1,2,10]表示起點是1,終點是2,座位數是10。因此result[0]+=10result[1]+=10。此時block

    result[0]=10
    result[1]=10
    result[2]=0
    result[3]=0
    result[4]=0
  2. 2行數據[2,3,20]表示起點是2,終點是3,座位數是20。因此result[1]+=20result[2]+=20。此時

    result[0]=10
    result[1]=30
    result[2]=20
    result[3]=0
    result[4]=0
  3. 3行數據[2,5,25]表示起點是2,終點是5,座位數是15。因此result[1]+=25result[2]+=25result[3]+=25result[4]+=25。此時

    result[0]=10
    result[1]=55
    result[2]=45
    result[3]=25
    result[4]=25

實現代碼

/**
     * 5118. 航班預訂統計
     * @param bookings
     * @param n
     * @return
     */
    public int[] corpFlightBookings(int[][] bookings, int n) {
        int[] result = new int[n]; 
        for (int i = 0; i < bookings.length; i++) { // 處理每一條預訂記錄
            int start = bookings[i][0];
            int end = bookings[i][1];
            int seat = bookings[i][2];
            for (int j = start - 1; j < end; j++) { // 給對應航班編號增長座位數
                result[j] += seat;
            }
        }
        return result;
    }
相關文章
相關標籤/搜索