Leetcode[321] 拼接最大数

在这里插入图片描述
 
思路:
这题我要写吐了
前前后后两个多小时,菜鸡本鸡了
先取单独列表保留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])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值