Problem Link
class Solution:
def maxNumber(self, nums1: List[int], nums2: List[int], k: int) -> List[int]:
res = []
lower = max(0, k - len(nums2)) # pick all elements from nums2
upper = min(k, len(nums1)) # pick all elements from nums1
for i in range(lower, upper + 1):
res = max(res, self.merge(self.maxOne(nums1, i), self.maxOne(nums2, k - i)))
return res
def maxOne(self, nums, k) -> List[int]:
numCanPop = len(nums) - k
res = []
for n in nums:
while len(res) > 0 and res[-1] < n and numCanPop > 0:
res.pop()
numCanPop -= 1
res.append(n)
return res[:k]
def merge(self, nums1, nums2) -> List[int]:
res = []
p1 = 0
p2 = 0
while p1 < len(nums1) or p2 < len(nums2):
if nums1[p1:] > nums2[p2:]:
res.append(nums1[p1])
p1 += 1
else:
res.append(nums2[p2])
p2 += 1
return res