這裏有
n
個航班,它們分別從1
到n
進行編號。code咱們這兒有一份航班預訂表,表中第
i
條預訂記錄bookings[i] = [i, j, k]
意味着咱們在從i
到j
的每一個航班上預訂了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
本題題目的思路其實比較簡答:統計
bookings[i] = [i, j, k]
的起點i
,終點j
和座位數k
i
和j
之間的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,2,10]
表示起點是1
,終點是2
,座位數是10
。因此result[0]+=10
,result[1]+=10
。此時block
result[0]=10 result[1]=10 result[2]=0 result[3]=0 result[4]=0
第2
行數據[2,3,20]
表示起點是2
,終點是3
,座位數是20
。因此result[1]+=20
,result[2]+=20
。此時
result[0]=10 result[1]=30 result[2]=20 result[3]=0 result[4]=0
第3
行數據[2,5,25]
表示起點是2
,終點是5
,座位數是15
。因此result[1]+=25
,result[2]+=25
,result[3]+=25
,result[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; }