九章演算法 Amazon 面試題 數飛機

2021-10-12 05:23:36 字數 1294 閱讀 2271

給出飛機的起飛和降落時間的列表,用序列 ​interval​ 表示. 請計算出天上同時最多有多少架飛機?

如果多架飛機降落和起飛在同一時刻,我們認為降落有優先權。

lintcode 領扣

輸入: [(1, 10), (2, 3), (5, 8), (4, 7)]

輸出: 3

解釋:

第一架飛機在1時刻起飛, 10時刻降落.

第二架飛機在2時刻起飛, 3時刻降落.

第三架飛機在5時刻起飛, 8時刻降落.

第四架飛機在4時刻起飛, 7時刻降落.

在5時刻到6時刻之間, 天空中有三架飛機.

輸入: [(1, 2), (2, 3), (3, 4)]

輸出: 1

解釋: 降落優先於起飛.

在開始時間位置+1架飛機,在結束時間-1架飛機,求一遍字首和,就是對應時間飛機的數量,

字首和演算法涉及到了對時間離散化,所以這裡更推薦掃瞄線

掃瞄線,把飛機按開始時間從小到大排序,如果開始時間相同,結束時間小的在前,

掃瞄一遍,當掃瞄到開始時間,就會多一架飛機,飛機數+1,當掃瞄到結束時間就少一架飛機,飛機數-1

答案取掃瞄過程中的最大飛機數

演算法一 字首和

字首和 o(time),time表示最大時間

演算法二 掃瞄線

掃瞄線 o(nlogn),n是飛機數量

演算法一 字首和

字首和 o(time),time表示最大時間

演算法二 掃瞄線

掃瞄線 o(n),n是飛機數量

public class solution 

// 時間,開始時間cost為1,結束時間cost為-1

public node(int time, int cost)

}//先按照時間公升序,再按照cost公升序排序

static comparator cnode = new comparator()

return o1.cost - o2.cost;}};

public int countofairplanes(list airplanes)

//排序

collections.sort(room, cnode);

int ans = 0;

int tmp = 0;

for(int i = 0; i < room.size(); i++)

return ans;

}}

更多題解參考

九章演算法面試題1 落單的數

初階 有2n 1個數,其中2n個數兩兩成對,1個數落單,找出這個數。要求o n 的時間複雜度,o 1 的空間複雜度。高階 如果有2n 2個數,其中有2個數落單,該怎麼辦?初階 將2n 1個數異或起來,相同的數會抵消,異或的答案就是要找的數。高階 假設兩個不同的數是a和b,並且a b,將2n 2個數異...

九章演算法 騰訊面試題 四數之和

給乙個包含n個數的整數陣列s,在s中找到所有使得和為給定整數target的四元組 a,b,c,d 四元組 a,b,c,d 中,需要滿足a b c d 答案中不可以包含重複的四元組。lintcode 領扣輸入 2,7,11,15 3 輸出 輸入 1,0,1,0,2,2 0 輸出 1,0,0,1 2,1...

九章演算法 Google面試題 內積

描述 給定長度為n的a陣列,長度為k的b陣列 你可以從a陣列裡取k個數 規則如下 即每次可以從a陣列的最左邊或者最右邊取走乙個數,取走的數從陣列中移除 將取出的ai按取出的順序組成c陣列 求b與c的內積最大值 b與c內積為 i 0k 1bi ci 解釋1 a 1,4,3,2,5 b 1,2,3,4 ...