#LeetCode 406. Queue Reconstruction by Height
原題連結:
Queue Reconstruction by Height
###題目大意:
有一個由[h,k]組成的隨機的陣列如下案例:
[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
h表示高度,k表示在此之前,大於或等於此高度的元素數量。
要求排序為符合題目的數列,上述案例結果如下所示:
[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]
###解題思路:
很簡單的排序,但是有個很精巧的機關。
首先按照高度從大到小排序,相同的高度按照位置從小到大排序
然後從第一個開始插入到一個新陣列中。此時很"湊巧"的,第二個k就是應該插入的位置。因為根據之前的排序,當前,新陣列的所有元素都大於等於舊陣列。
###AC程式碼:
/**
* 406. Queue Reconstruction by Height
* @param peoples
* @return
*/
public static int[][] reconstructQueue (int[][] peoples){
Arrays.parallelSort(peoples, (a, b) -> a[0] != b[0] ? b[0] - a[0] : a[1] - b[1]);
List<int[]> result = new ArrayList<>();
for(int i=0;i<peoples.length;i++){
result.add(peoples[i][1],peoples[i]);
}
return result.toArray(new int[0][0]);
}
複製程式碼