【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動態規劃
- 網賺APP的“俄羅斯套娃”遊戲APP遊戲
- 俄羅斯套娃 (Matryoshka) 嵌入模型概述模型
- 設計模式中的俄羅斯套娃:裝飾者(Decorator)模式設計模式
- “俄羅斯套娃”惡意軟體來襲,BT網站成重災區網站
- Flutter 改善套娃地獄問題(仿喜馬拉雅PC頁面舉例)Flutter
- [MRCTF2020]套娃TF2
- Asp-Net-Core開發筆記:介面返回json物件出現套娃遞迴問題筆記JSON物件遞迴
- 終極套娃 2.0 | 雲原生交付的封裝封裝
- 智慧電視“套娃式”收費背後的自我救贖
- scrollview 套gridview的問題View
- 頁面巢狀,介面套娃,除了用iframe,還有其他方式嗎?巢狀
- 終極套娃 2.0|雲原生 PaaS 平臺的可觀測性實踐分享
- 騷爆了... Go 錯誤處理中再套個娃,能解決煩惱不?Go
- 基於DMAIC解決偏心套裝配問題AI
- 教你使用一套程式碼解決出海問題
- 這套方法論,徹底終結MySQL同步延遲問題MySql
- 客戶一套ORACLE 10.2.0.4 的crs 問題處理Oracle
- jQuery實現俄羅斯方塊中遇到的問題及解決方法jQuery
- 俄羅斯總理的幾何題
- 面試答題四件套面試
- 《如 何 速 通 一 套 題》3
- 中國電信封鎖sun的開發者網頁網頁
- 科技愛好者週刊(第 199 期):俄羅斯的 HTTPS 證書問題HTTP
- 從根上解決問題 ERP不僅僅是一套軟體 (轉)
- 出一套 iOS 高階面試題iOS面試題
- SCJP認證套題解析之二 (轉)
- SCJP認證套題解析之三 (轉)
- RN+SDK套殼輕鬆解決蘋果稽核被拒3.2.1問題、2.1大禮包問題【最新上架技術】蘋果
- 『“曬娃”前需要得到娃的同意』今日資料行業日報(2016.03.15)行業
- 我的這套VuePress主題你熟悉吧Vue
- 一套關於Django的筆試題Django筆試
- Word與Excel組合工作 批次列印信封(轉)Excel
- 關於在一套複製環境中使用不同版本OGG的問題.
- 團隊作業第二次—專案選題報告(葫蘆娃隊)
- 【OGG】關於在一套複製環境中使用不同版本OGG的問題
- 省團團小程式被微信封禁,企業該如何自救!
- 推薦6套精美的免費 jQuery UI 主題jQueryUI