思路:
这题我要写吐了
前前后后两个多小时,菜鸡本鸡了
先取单独列表保留i位最大数字,再根据两个列表(i,k-i)组合插序得到结果
有几个地方走了弯路,要mark下来
自己写的sort也懒得删掉了,完全可以通过List比较
1.两个列表插序的时候,可以直接用List的比较
List比较方式:按顺序从头比较,若均相同,以长度为准。
2.通过删减让单列表的数字最大或最小时
可按顺序遍历,根据现指针,决定前一项是否保留
有序列表->考虑栈
class Solution:
def maxNumber(self, nums1: List[int], nums2: List[int], k: int) -> List[int]:
def maxremain(nums,k):
ans=[]
delete=0
for data in nums:
while len(ans)!=0 and data>ans[-1] and delete<len(nums)-k:
ans.pop()
delete=delete+1
ans.append(data)
for _ in range(len(nums)-k-delete):
ans.pop()
return ans
def merge(A, B):
ans = []
while A or B:
bigger = A if A > B else B
ans.append(bigger[0])
bigger.pop(0)
return ans
ans=[]
for i in range(max(0,k-len(nums2)),min(len(nums1)+1,k+1)):
max1=maxremain(nums1,i)
max2=maxremain(nums2,k-i)
ans.append(merge(max1,max2))
def mysort(x):
sum=0
for i in range(len(x)):
sum+=x[i]*(10**(len(x)-i))
return sum
ans.sort(key=lambda x:mysort(x))
return (ans[-1])