【LEETCODE】73、根據身高重建隊列 第406題

說實話,這道題我沒想出來,但是看解題報告題解比較讓人覺得眼前一亮,這裏記錄下來

package y2019.Algorithm.greedy.medium;

import java.util.Arrays;
import java.util.LinkedList;

/**
 * @Auther: xiaof
 * @Date: 2019/12/19 09:05
 * @Description: 406. 根據身高重建隊列
 *
 * 假設有打亂順序的一羣人站成一個隊列。 每個人由一個整數對(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]]
 *
 * 來源:力扣(LeetCode)
 * 鏈接:https://leetcode-cn.com/problems/queue-reconstruction-by-height
 * 著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
 *
 */
public class ReconstructQueue {

    /**
     * https://leetcode-cn.com/problems/queue-reconstruction-by-height/solution/406-gen-ju-shen-gao-zhong-jian-dui-lie-pai-xu-hou-/
     * 執行用時 : 10 ms , 在所有 java 提交中擊敗了 76.85% 的用戶
     * 內存消耗 : 40 MB , 在所有 java 提交中擊敗了 99.37% 的用戶
     */
    public int[][] solution(int[][] people) {
        //1.思路就是先按照升高排序,先按照升高排序,升高相同的按照第二個前面幾個人進行排序
        Arrays.sort(people, (v1, v2) -> v1[0] == v2[0] ? v1[1] - v2[1] : v2[0] - v1[0]);
        //2.然後遍歷數組,依次吧中的升高添加到數據中,然後把
        //3.根據排好順序的list,吧第二個參數作爲下座標add進入隊列中
        LinkedList<int[]> res = new LinkedList<>();
        //因爲已經加入linked的數據都是比當前遍歷到的數據大的值,那麼只要知道前面有幾個比這個數大,直接插入即可
        for (int[] i : people) {
            res.add(i[1], i);
        }

        return res.toArray(new int[res.size()][2]);

    }

    public static void main(String[] args) {
        int[][] param1 = {{7,0}, {4,4}, {7,1}, {5,0}, {6,1}, {5,2}};

        ReconstructQueue fuc = new ReconstructQueue();
        System.out.println("需要添加對應的數據:");
        int[][] res = fuc.solution(param1);
        System.out.println("");
        System.out.println(res);

    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章