LeetCode——1109. 航班預訂統計(Java)
阿新 • • 發佈:2021-08-31
題目描述
題幹: 這裡有n個航班,它們分別從 1 到 n 進行編號。 有一份航班預訂表bookings ,表中第i條預訂記錄bookings[i] = [firsti, lasti, seatsi] 意味著在從 firsti到 lasti (包含 firsti 和 lasti )的 每個航班 上預訂了 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]
題解思路
返回每列航班所需要的座位數,經典的範圍陣列題目,直接想到差分陣列或者線段樹
因為題目明朗,所以採用差分陣列的思路,遵循 a[i]=a[i-1]+d[i] 的公式
具體含義就是找到原始陣列和最終陣列的差分陣列,最後通過移項得到變化量陣列
正確程式碼
public int[] corpFlightBookings(int[][] bookings, int n) { int[] nums = new int[n]; for (int[] booking : bookings) { nums[booking[0] - 1] += booking[2]; if (booking[1] < n) { nums[booking[1]] -= booking[2]; } } for (int i = 1; i < n; i++) { nums[i] += nums[i - 1]; } return nums; }
總結
差分陣列的思想多用於區間元素同時增加或減少相同的數的情況
具體解析原理請詳看其他文章,以後我自己也會寫一些自己的新的體會
如果文章存在問題或者有更好的題解,歡迎在評論區斧正和評論,各自努力,你我最高處見