leetcode 354 俄羅斯套娃信封問題

2021-10-21 01:58:46 字數 1940 閱讀 1614

354. 俄羅斯套娃信封問題

難度困難

給定一些標記了寬度和高度的信封,寬度和高度以整數對形式(w, h)出現。當另乙個信封的寬度和高度都比這個信封大的時候,這個信封就可以放進另乙個信封裡,如同俄羅斯套娃一樣。

請計算最多能有多少個信封能組成一組「俄羅斯套娃」信封(即可以把乙個信封放到另乙個信封裡面)。

說明:

不允許旋轉信封。

示例:

輸入:envelopes =[[5,4],[6,4],[6,7],[2,3]]輸出:3信封最多的個數為3, 組合為: [2,3] => [5,4] => [6,7]
這道題和leetcode—300. 最長遞增子串行,dp(動態規劃)第一題很像,只是從一維陣列變成了二維陣列。

先說一下解題思路:

首先我們將所有的信封按照 w 值公升序、h 值降序進行排序;

隨後我們就可以忽略 w 維度,求出 h 維度的最長嚴格遞增子串行,其長度即為答案。

那為什麼思路是這樣的呢?還得看力扣官方題解為我們進行解答:

同時控制 w 和 h 兩個維度並不是那麼容易,因此我們考慮固定乙個維度,再在另乙個維度上進行選擇。例如,我們固定 w 維度,那麼我們將陣列envelopes 中的所有信封按照 w 公升序排序。

這樣一來,我們只要按照信封在陣列中的出現順序依次進行選取,就一定保證滿足:

然而小於等於和小於還是有區別的,但我們不妨首先考慮乙個簡化版本的問題:

在 w值互不相同的前提下,小於等於 和小於是等價的,那麼我們在排序後,就可以完全忽略 w 維度,只需要考慮 h 維度了。此時,我們需要解決的問題即為:

給定乙個序列,我們需要找到乙個最長的子串行,使得這個子串行中的元素嚴格單調遞增,即上面要求的:

當我們解決了簡化版本的問題之後,我們來想一想使用上面的方法解決原問題,會產生什麼錯誤。當 w 值相同時,如果我們不規定 h 值的排序順序,那麼可能會有如下的情況:

排完序的結果為[(w,h)]=[(1,1),(1,2),(1,3),(1,4)],由於這些信封的 w 值都相同,不存在乙個信封可以裝下另乙個信封,那麼我們只能在其中選擇 1 個信封。然而如果我們完全忽略 w 維度,剩下的 h 維度為[1,2,3,4],這是乙個嚴格遞增的序列,那麼我們就可以選擇所有的 4 個信封了,這就產生了錯誤。

因此,我們必須要保證對於同乙個w 值,我們最多只能選擇 1 個信封。

我們可以將 h 值作為排序的第二關鍵字進行降序排序,這樣一來,對於每一種 w 值,其對應的信封在排序後的陣列中是按照 h 值遞減的順序出現的,那麼這些 h 值不可能組成長度超過 1 的嚴格遞增的序列,這就從根本上杜絕了錯誤的出現。

因此我們就可以得到解決本題需要的方法:

首先我們將所有的信封按照 w 值第一關鍵字公升序、h 值第二關鍵字降序進行排序;

隨後我們就可以忽略 w 維度,求出 h 維度的最長嚴格遞增子串行,其長度即為答案。

**:

class solution 

int n = envelopes.length;

arrays.sort(envelopes,(a,b) ->

return a[0]-b[0];//表示對第乙個元素公升序

});int dp = new int[n];

arrays.fill(dp,1);

int res=1;

for(int i=1;i

}res = math.max(res,dp[i]);

}return res;}}

俄羅斯套娃信封問題(LeetCode 354)

給定一些標記了寬度和高度的信封,寬度和高度以整數對形式 w,h 出現。當另乙個信封的寬度和高度都比這個信封大的時候,這個信封就可以放進另乙個信封裡,如同俄羅斯套娃一樣。請計算最多能有多少個信封能組成一組 俄羅斯套娃 信封 即可以把乙個信封放到另乙個信封裡面 說明 不允許旋轉信封。示例 輸入 enve...

leetcode 354 俄羅斯套娃信封問題

目錄 一 題目內容 二 解題思路 三 給定一些標記了寬度和高度的信封,寬度和高度以整數對形式 w,h 出現。當另乙個信封的寬度和高度都比這個信封大的時候,這個信封就可以放進另乙個信封裡,如同俄羅斯套娃一樣。請計算最多能有多少個信封能組成一組 俄羅斯套娃 信封 即可以把乙個信封放到另乙個信封裡面 說明...

Leetcode 354 俄羅斯套娃信封問題

給定一些標記了寬度和高度的信封,寬度和高度以整數對形式 w,h 出現。當另乙個信封的寬度和高度都比這個信封大的時候,這個信封就可以放進另乙個信封裡,如同俄羅斯套娃一樣。請計算最多能有多少個信封能組成一組 俄羅斯套娃 信封 即可以把乙個信封放到另乙個信封裡面 說明 不允許旋轉信封。示例 輸入 enve...