貪心策略 根據身高和序號重組佇列

2022-08-20 17:18:09 字數 956 閱讀 6330

根據身高和序號重組佇列

406. queue reconstruction by height(medium)

input:

[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]

output:

[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]

題目描述:

乙個學生用兩個分量 (h, k) 描述,h 表示身高,k 表示排在前面的有 k 個學生的身高比他高或者和他一樣高。

思路分析:

換種思考方式,題目裡面說了,每個位置的 k 的值,等於在這個位置之前 h 比它大的位置的數量。如果要向乙個佇列中插入乙個人,要判斷的就是插入的位置。那麼如果可以確定,當前佇列中的所有人的 h 值都比待插入的這個人的 h 值大,那麼這個人的 k 值就是他應該插入的位置。並且可以確定,如果插入的是乙個 h 值小於當前佇列中所有人的 h 值的人,那麼無論他的位置在哪,都不會影響當前佇列中所有人的 k 值,即不會破壞當前佇列的正確性。

再看本題,我們只需要將這個佇列按照 h 從高到低排序,然後依次插入到乙個新的佇列,這樣就能保證新插入的人的 h 值始終小於(或等於)當前佇列中所有人的 h 值,滿足了上面的條件。

再有乙個問題,如果兩個人的 h 值相同的時候該如何排序?如乙個佇列[[7,1],[7,0]],因為題目中已經指出了:每個人的 k 值,是在他的前面所有 h 值大於(或等於)他的 h 的人的個數,那麼對於兩個 h 值相同的人,他們的 k 值肯定是不同的,並且能夠確定,k 值大的人應該排在後面。

**:

public intreconstructqueue(intpeople)

});listres=new arraylist<>();

for(intq:people)

return res.toarray(people);

}

leetcode 貪心 貪心演算法 最大子序和

通知 我將演算法學習相關的資料已經整理到了github 裡面還有leetcode刷題攻略 各個型別經典題目刷題順序 思維導圖看一看一定會有所收穫,如果給你有幫助給乙個star支援一下!給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1...

根據後序和中序遍歷輸出先序遍歷

本題要求根據給定的一棵二叉樹的後序遍歷和中序遍歷結果,輸出該樹的先序遍歷結果。輸入格式 第一行給出正整數nn le 30 30 是樹中結點的個數。隨後兩行,每行給出nn個整數,分別對應後序遍歷和中序遍歷結果,數字間以空格分隔。題目保證輸入正確對應一棵二叉樹。輸出格式 在一行中輸出preorder 以...

根據後序和中序遍歷輸出先序遍歷

本題要求根據給定的一棵二叉樹的後序遍歷和中序遍歷結果,輸出該樹的先序遍歷結果。第一行給出正整數n 30 是樹中結點的個數。隨後兩行,每行給出n個整數,分別對應後序遍歷和中序遍歷結果,數字間以空格分隔。題目保證輸入正確對應一棵二叉樹。在一行中輸出preorder 以及該樹的先序遍歷結果。數字間有1個空...