""" https://leetcode.com/problems/create-maximum-number/ """ classSolution(object): defmaxNumber(self, nums1, nums2, k): """ :type nums1: List[int] :type nums2: List[int] :type k: int :rtype: List[int] """ defgetMax(nums, t): ans = [] size = len(nums) for x in range(size): while ans and len(ans) + size - x > t and ans[-1] < nums[x]: ans.pop() if len(ans) < t: ans.append(nums[x]) return ans
# 网上的版本 defmerge2(nums1, nums2): ans = [] while nums1 or nums2: if nums1 > nums2: ans.append(nums1[0]) nums1 = nums1[1:] else: ans.append(nums2[0]) nums2 = nums2[1:] return ans # 修改后更快点的版本,避免了大量数组重写 defmerge(nums1, nums2): if len(nums1) == 0: return nums2 if len(nums2) == 0: return nums1 ans = [] i, j = 0, 0 whileTrue: if nums1[i:] > nums2[j:]: ans.append(nums1[i]) i += 1 else: ans.append(nums2[j]) j += 1 if i == len(nums1): ans.extend(nums2[j:]) break if j == len(nums2): ans.extend(nums1[i:]) break return ans len1, len2 = len(nums1), len(nums2) res = [] for x in range(max(0, k - len2), min(k, len1) + 1): # nums1中选取x个,k>len2时,至少选取k-len2个 tmp = merge(getMax(nums1, x), getMax(nums2, k - x)) res = max(tmp, res) return res