354. Russian Doll Envelopes
# 依陣列的第一個位置升冪排序,第二個位置降冪排序
envelopes.sort(key=lambda x: (x[0], -x[1]))
# 把每個信封的高度取出(第二個元素),之後要去找這個陣列的最長遞增子序列。
nums = []
for i in range(len(envelopes)):
nums.append(envelopes[i][1])class Solution:
def maxEnvelopes(self, envelopes: List[List[int]]) -> int:
envelopes.sort(key=lambda x: (x[0], -x[1]))
nums = []
for i in range(len(envelopes)):
nums.append(envelopes[i][1])
piles = []
for i in range(len(nums)):
card = nums[i]
left, right = 0, len(piles)
while left < right:
mid = left + (right - left) // 2
if piles[mid][-1] >= card:
right = mid
else: # piles[mid][-1] < card:
left = mid + 1
if left == len(piles):
piles.append([])
piles[left].append(card)
return len(piles)Last updated