根據身高重建佇列
阿新 • • 發佈:2018-12-10
假設有打亂順序的一群人站成一個佇列。 每個人由一個整數對(h, k)表示,其中h是這個人的身高,k是排在這個人前面且身高大於或等於h的人數。 編寫一個演算法來重建這個佇列。
注意: 總人數少於1100人。
示例
輸入: [[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
輸出: [[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]
這題完全是看別人的程式碼怎麼做的,至於為什麼這麼做,道理在哪裡,自己其實也想不通。。 1.身高降序排列,k值升序排列 2.建立一個新的二維陣列,一個個的往裡面插入已排好序的值,策略是:依次按照k的值作為索引插入到相應的位置。
這樣做保證了兩點: 1.相同身高的,k值大的會被插入到k值小的後面。 2.k值相同的,身高矮的被插入到前面。因為已按要求排好序。
其實仔細想想,這也正滿足了題目重建佇列的要求。。。
public int[][] reconstructQueue(int[][] people) { if(people == null || people.length==0 || people[0].length == 0) return new int[0][0]; Arrays.sort(people, (a,b)->(a[0]==b[0] ? a[1]-b[1] : b[0] - a[0])); List<int[]> queue = new ArrayList<int[]>(); for(int[] p:people) { queue.add(p[1], p); } return queue.toArray(new int[queue.size()][]); }