321. 拼接最大数
给定长度分别为 m 和 n 的两个数组,其元素由 0-9 构成,表示两个自然数各位上的数字。现在从这两个数组中选出 k (k <= m + n) 个数字拼接成一个新的数,要求从同一个数组中取出的数字保持其在原数组中的相对顺序。
求满足该条件的最大数。结果返回一个表示该最大数的长度为 k 的数组。
说明: 请尽可能地优化你算法的时间和空间复杂度。
这道题目没咋搞出来,参考了个大佬的(链接在下面),具体代码如下(Python版):
class Solution:
def maxNumber(self, nums1: List[int], nums2: List[int], k: int) -> List[int]:
def pickMax(nums,k):
stack=[]
drop=len(nums)-k
for i in nums:
while(drop and len(stack) and i>stack[-1]):
stack.pop()
drop-=1
stack.append(i)
return stack[:k]
def mergeNums(num1,num2):
result=[]
while(num1 or num2):
bigger=max(num1,num2)
result.append(bigger[0])
bigger.pop(0)
return result
return max((mergeNums(pickMax(nums1,i),pickMax(nums2,k-i)) for i in range(k+1) if i<=len(nums1) and k-i<=len(nums2)))
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/create-maximum-number
参考答案链接:https://leetcode-cn.com/problems/create-maximum-number/solution/yi-zhao-chi-bian-li-kou-si-dao-ti-ma-ma-zai-ye-b-7/