-
Notifications
You must be signed in to change notification settings - Fork 0
/
321. Create Maximum Number.py
35 lines (35 loc) · 1.37 KB
/
321. Create Maximum Number.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Solution:
def maxNumber(self, nums1: List[int], nums2: List[int], k: int) -> List[int]:
### Soln - my attempts all failed, solutions by caunion and StefanPochmann
n, m= len(nums1),len(nums2)
ret = [0] * k
for i in range(0, k+1):
j = k - i
if i > n or j > m: continue
left = self.maxSingleNumber(nums1, i)
right = self.maxSingleNumber(nums2, j)
num = self.mergeMax(left, right)
ret = max(num, ret)
return ret
def mergeMax(self, nums1, nums2):
return [max(nums1, nums2).pop(0) for _ in nums1 + nums2]
# ans = []
# while nums1 or nums2:
# if nums1 > nums2:
# ans += nums1[0],
# nums1 = nums1[1:]
# else:
# ans += nums2[0],
# nums2 = nums2[1:]
# return ans
def maxSingleNumber(self, nums, selects):
n = len(nums)
ret = [-1]
if selects > n : return ret
while selects > 0:
start = ret[-1] + 1 #search start
end = n-selects + 1 #search end
ret.append( max(range(start, end), key = nums.__getitem__))
selects -= 1