[321][困难][贪心][分治] 拼接最大数
题目描述
输入:
nums1 = [3, 4, 6, 5]
nums2 = [9, 1, 2, 5, 8, 3]
k = 5
输出:
[9, 8, 6, 5, 3]输入:
nums1 = [6, 7]
nums2 = [6, 0, 4]
k = 5
输出:
[6, 7, 6, 0, 4]解题思路
最后更新于
输入:
nums1 = [3, 4, 6, 5]
nums2 = [9, 1, 2, 5, 8, 3]
k = 5
输出:
[9, 8, 6, 5, 3]输入:
nums1 = [6, 7]
nums2 = [6, 0, 4]
k = 5
输出:
[6, 7, 6, 0, 4]最后更新于
输入:
nums1 = [3, 9]
nums2 = [8, 9]
k = 3
输出:
[9, 8, 9]class Solution:
def maxNumber(self, nums1: List[int], nums2: List[int], k: int) -> List[int]:
def max_numbers(nums, k_):
stack = []
drops = len(nums) - k_
for num in nums:
while drops and stack and stack[-1] < num:
stack.pop()
drops -= 1
stack.append(num)
return stack[:k_]
def merge(a, b):
stack = []
while a or b:
bigger = a if a > b else b
stack.append(bigger[0])
bigger.pop(0)
return stack
return max(merge(max_numbers(nums1, i), max_numbers(nums2, k - i)) for i in range(k + 1) if
i <= len(nums1) and k - i <= len(nums2))