leetcode 354 俄羅斯套娃信封問題

2021-10-21 00:07:11 字數 1445 閱讀 4073

目錄

一、題目內容

二、解題思路

三、**

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

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

說明:

不允許旋轉信封。

示例:

輸入: envelopes = [[5,4],[6,4],[6,7],[2,3]]

輸出: 3 

解釋: 最多信封的個數為 3, 組合為: [2,3] => [5,4] => [6,7]。

先對信封按照寬度w公升序排序,然後再對相同寬度w的信封按照高度h降序;

高度降序的目的是在對排好序的信封陣列裡,用乙個陣列儲存高度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...