本文共 871 字,大约阅读时间需要 2 分钟。
为了解决这个问题,我们需要找到最多能有多少个信封组成一组“俄罗斯套娃”信封。每个信封可以放进另一个信封里,前提是另一个信封的宽度和高度都比它大。
class Solution: def maxEnvelopes(self, envelopes: List[List[int]]) -> int: # 按宽度升序排序,宽度相同则高度降序排序 envs = sorted(envelopes, key=lambda x: (x[0], -x[1])) hs = [x[1] for x in envs] n = len(hs) if n == 0: return 0 f = [1] * n for i in range(n): for j in range(i): if hs[i] > hs[j]: f[i] = max(f[i], f[j] + 1) return max(f)
sorted函数,按照宽度升序和高度降序排列。hs。f,其中f[i]表示到第i个元素时,最长递增子序列的长度。通过双重循环遍历,更新f数组,使得每个元素的值等于前面所有比它小的元素的值加1,取最大的那个值。f数组中的最大值即为最多能组成的俄罗斯套娃信封的数量。转载地址:http://cscr.baihongyu.com/