目錄
一、題目內容
二、解題思路
三、**
給定一些標記了寬度和高度的信封,寬度和高度以整數對形式 (w, h) 出現。當另乙個信封的寬度和高度都比這個信封大的時候,這個信封就可以放進另乙個信封裡,如同俄羅斯套娃一樣。請計算最多能有多少個信封能組成一組「俄羅斯套娃」信封(即可以把乙個信封放到另乙個信封裡面)。
說明:不允許旋轉信封。
示例:先對信封按照寬度w公升序排序,然後再對相同寬度w的信封按照高度h降序;輸入: envelopes = [[5,4],[6,4],[6,7],[2,3]]
輸出: 3
解釋: 最多信封的個數為 3, 組合為: [2,3] => [5,4] => [6,7]。
高度降序的目的是在對排好序的信封陣列裡,用乙個陣列儲存高度h,並利用二分插入方式儲存信封的高度h(lis:最長上公升(不下降)子串行);
如果信封的寬度w一樣,則選擇高度h小的,否則就會存放相同寬度w的不同高度h的信封,但是寬度w是不能一樣的,因此之後要按照高度h降序,這樣就可以更新這個高度h。
from bisect import bisect_left
class solution:
def lis(self, nums):
res =
for num in nums:
index = bisect_left(res, num)
if index == len(res):
else:
res[index] = num
return len(res)
def maxenvelopes(self, envelopes: list) -> int:
envelopes.sort(key=lambda x: (x[0], -x[1]))
print(envelopes)
return self.lis([envelope[1] for envelope in envelopes])
if __name__ == '__main__':
s = solution()
envelopes = [[4, 5], [4, 6], [6, 7], [2, 3], [1, 1]]
ans = s.maxenvelopes(envelopes)
print(ans)
俄羅斯套娃信封問題(LeetCode 354)
給定一些標記了寬度和高度的信封,寬度和高度以整數對形式 w,h 出現。當另乙個信封的寬度和高度都比這個信封大的時候,這個信封就可以放進另乙個信封裡,如同俄羅斯套娃一樣。請計算最多能有多少個信封能組成一組 俄羅斯套娃 信封 即可以把乙個信封放到另乙個信封裡面 說明 不允許旋轉信封。示例 輸入 enve...
Leetcode 354 俄羅斯套娃信封問題
給定一些標記了寬度和高度的信封,寬度和高度以整數對形式 w,h 出現。當另乙個信封的寬度和高度都比這個信封大的時候,這個信封就可以放進另乙個信封裡,如同俄羅斯套娃一樣。請計算最多能有多少個信封能組成一組 俄羅斯套娃 信封 即可以把乙個信封放到另乙個信封裡面 說明 不允許旋轉信封。示例 輸入 enve...
LeetCode354 俄羅斯套娃信封問題
給定一些標記了寬度和高度的信封,寬度和高度以整數對形式 w,h 出現。當另乙個信封的寬度和高度都比這個信封大的時候,這個信封就可以放進另乙個信封裡,如同俄羅斯套娃一樣。請計算最多能有多少個信封能組成一組 俄羅斯套娃 信封 即可以把乙個信封放到另乙個信封裡面 說明 不允許旋轉信封。示例 輸入 enve...