【leetcode354】. 俄羅斯套娃信封問題
給定一些標記了寬度和高度的信封,寬度和高度以整數對形式 (w, h) 出現。當另一個信封的寬度和高度都比這個信封大的時候,這個信封就可以放進另一個信封裡,如同俄羅斯套娃一樣。
請計算最多能有多少個信封能組成一組“俄羅斯套娃”信封(即可以把一個信封放到另一個信封裡面)。
說明:
不允許旋轉信封。
示例:
輸入: envelopes = [[5,4],[6,4],[6,7],[2,3]]
輸出: 3
解釋: 最多信封的個數為 3, 組合為: [2,3] => [5,4] => [6,7]。
把寬度和高度分開看,就是LIS(最長遞增子序列問題),問題是把兩者結合在一起。
首先對問題進行預處理,針對寬度進行升序排序, 針對高進行升序排序,但在相同寬度時,使用降序。
第二步,把高存到陣列中,就是經典的LIS(最長遞增子序列)問題。
package problem0354
import "sort"
func maxEnvelopes(e [][]int) int {
if len(e) <= 1 {
return len(e)
}
// 第一步,進行預處理,針對寬進行升序排序,針對高進行升序排序,但是在相同寬度時使用降序
sort.Sort(sortedEnvelopes(e))
tails := make([]int, len(e))
for i := 0; i < len(e); i++ {
tails[i] = e[i][1]
}
// 第二步,把高存到陣列中,就是經典的LIS(最長遞增子序列)問題
return lengthOfLIS(tails)
}
func lengthOfLIS(nums []int) int {
dp := make([]int, len(nums))
// 陣列初始化值都為1
for i := 0; i < len(nums); i++ {
dp[i] = 1
}
res := 0
for i := 0; i< len(nums); i++ {
for j := 0; j < i; j++ {
if nums[j] < nums[i] {
dp[i] = max(dp[i], dp[j]+1)
}
}
res = max(res, dp[i])
}
return res
}
func max(i int, i2 int) int {
if i > i2 {
return i
} else {
return i2
}
}
type sortedEnvelopes [][]int
func (s sortedEnvelopes) Len() int {
return len(s)
}
func (s sortedEnvelopes) Less(i, j int) bool {
// 寬度相同的情況下,根據高度進行降序排序
if s[i][0] == s[j][0] {
// 同樣寬度時,矮信封排在後面
return s[i][1] > s[j][1]
}
return s[i][0] < s[j][0]
}
func (s sortedEnvelopes) Swap(i, j int) {
s[i], s[j] = s[j], s[i]
}
相關文章
- [LeetCode 困難 動態規劃+LIS問題]354. 俄羅斯套娃信封問題LeetCode動態規劃
- 俄羅斯套娃 (Matryoshka) 嵌入模型概述模型
- 網賺APP的“俄羅斯套娃”遊戲APP遊戲
- 設計模式中的俄羅斯套娃:裝飾者(Decorator)模式設計模式
- “俄羅斯套娃”惡意軟體來襲,BT網站成重災區網站
- 俄羅斯玩偶
- 俄羅斯總理的幾何題
- Arm 停止俄羅斯業務
- 俄羅斯方塊練習
- canvas實現俄羅斯方塊Canvas
- 俄羅斯方塊(JS+CSS)JSCSS
- Tetris 俄羅斯方塊遊戲遊戲
- 2018世界盃俄羅斯vs沙特比分預測 俄羅斯vs沙特誰會贏
- 2018世界盃俄羅斯vs埃及比分預測 俄羅斯vs埃及誰會贏
- 科技愛好者週刊(第 199 期):俄羅斯的 HTTPS 證書問題HTTP
- 為什麼選擇俄羅斯代理IP?它對俄羅斯業務有什麼用處?
- 【Java遊戲】java俄羅斯方塊!Java遊戲
- Flutter Web 實戰 - 俄羅斯方塊FlutterWeb
- 俄羅斯的 HTTPS 也要被廢了?HTTP
- 匿名郵件引發俄羅斯炸彈恐慌,威脅蔓延白俄羅斯
- 俄羅斯擬將蘋果、微軟等59家撤出俄羅斯的西方企業收歸國有蘋果微軟
- 俄羅斯:‘區塊鏈屬於我們’區塊鏈
- 俄羅斯駭客:“我要打十個!”
- 2018世界盃烏拉圭vs俄羅斯誰會贏 烏拉圭vs俄羅斯比分預測
- [MRCTF2020]套娃TF2
- 翻譯中國遊戲的俄羅斯姑娘遊戲
- 使用JavaScript實現一個俄羅斯方塊JavaScript
- 用 SAP ABAP 編寫的俄羅斯遊戲遊戲
- 俄羅斯的 IT 危機:儲存快用完了
- GSMA:俄羅斯部署5G的好處
- 最新《 java實戰開發俄羅斯方塊教程》Java
- Python 實戰開發俄羅斯方塊遊戲Python遊戲
- 俄羅斯的加密貨幣註冊公司白名單加密
- 俄羅斯公司用加密代幣獎勵員工加密
- 基於Flutter的俄羅斯方塊小遊戲Flutter遊戲
- 如何讓 Emacs 俄羅斯方塊變得更難Mac
- wxpython入門第十一步(俄羅斯方塊)Python
- 基於MonoGame重製《俄羅斯方塊》遊戲MonoGAM遊戲