在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ You have a number of envelopes with widths and heights given as a pair of integers What is the maximum number of envelopes can you Russian doll? (put one inside other) Note: Example: Input: [[5,4],[6,4],[6,7],[2,3]]
Output: 3
Explanation: The maximum number of envelopes you can Russian doll is
给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。 说明: 示例: 输入: envelopes = 356ms 1 class Solution { 2 //二分法 3 func maxEnvelopes(_ envelopes: [[Int]]) -> Int { 4 var envelopes = envelopes 5 var dp:[Int] = [Int]() 6 envelopes.sort(by:sortArray) 7 for i in 0..<envelopes.count 8 { 9 var left:Int = 0 10 var right:Int = dp.count 11 var t:Int = envelopes[i][1] 12 while(left < right) 13 { 14 var mid:Int = left + (right - left) / 2 15 if dp[mid] < t 16 { 17 left = mid + 1 18 } 19 else 20 { 21 right = mid 22 } 23 } 24 if right >= dp.count 25 { 26 dp.append(t) 27 } 28 else 29 { 30 dp[right] = t 31 } 32 } 33 return dp.count 34 } 35 36 func sortArray(_ a:[Int],_ b:[Int]) -> Bool 37 { 38 if a[0] == b[0] 39 { 40 return a[1] > b[1] 41 } 42 return a[0] < b[0] 43 } 44 } 6948ms 1 class Solution { 2 func maxEnvelopes(_ envelopes: [[Int]]) -> Int { 3 if envelopes.count == 0 { return 0 } 4 let sorted = envelopes.sorted { 5 return $0[0] < $1[0] 6 } 7 8 var dp: [Int] = [Int](repeating: 0, count: envelopes.count) 9 var res = 0 10 for i in 0..<sorted.count { 11 dp[i] = 1 12 for j in 0..<i { 13 // if i is bigger than j 14 if sorted[i][0] > sorted[j][0] && sorted[i][1] > sorted[j][1] { 15 dp[i] = max(dp[i], dp[j] + 1) 16 } 17 } 18 res = max(res, dp[i]) 19 } 20 return res 21 } 22 }
|
请发表评论