拼接最大数(解法)

上题:

给定长度分别为 m 和 n 的两个数组,其元素由 0-9 构成,表示两个自然数各位上的数字。现在从这两个数组中选出 k (k <= m +
n) 个数字拼接成一个新的数,要求从同一个数组中取出的数字保持其在原数组中的相对顺序。
求满足该条件的最大数。结果返回一个表示该最大数的长度为 k 的数组。
说明: 请尽可能地优化你算法的时间和空间复杂度。
示例 1:
输入: nums1 = [3, 4, 6, 5]
nums2 = [9, 1, 2, 5, 8, 3]
k = 5
输出: [9, 8, 6, 5, 3]
示例 2:
输入: nums1 = [6, 7]
nums2 = [6, 0, 4] k = 5 输出: [6, 7, 6, 0, 4]
示例 3:
输入: nums1 = [3, 9] nums2 = [8, 9] k = 3
输出: [9, 8, 9]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/create-maximum-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路分析:
游标1标记数组1中的数被选中后的他的下标
游标2标记数组2中的数被选中后的他的下标
起始时游标都在数组-1
一、首先从两个数组中游标之后找到最大的数放入目标数组并用游标标记,若目标数组个数小于k,那继续从两个数组中游标之后,找到最大的数,二、最后有两种结果:1.两个游标未到最后就找够k个数。2.两个游标到最后也没找够,第二中情况下就要从游标前面找数插入目标数组,由于之前找的数字都是取得最大的,那再找的数都是小于目标数组中的数的。所以啊,这样的数字尽量往右边插入。那怎样找呢?
例如nums1 = [6, 7]
nums2 = [6, 0, 4]
k = 5

  1. 第一步之后,目标数组是这样的[7,6,4]
  2. 开始第二步:
    把数字插在6,4之间,若能插入,那就要找到6在原数组中的位置,从这后面找到最大的数x1,同样找到4在原数组中的位置,从4前面找到最大的数x2,x1和x2取最大插入目标数组。但在找x1和x2中,要注意不能无限往前/往后找,条件是下个数没有被目标数组选中时再往下寻找。若不能找到就下一个空隙7,6之间插入
  3. 插入完成后,就重新从目标数组尾部再次开始第二步直至满足k个数

个人见解, 如有错误欢迎指正
更多题解信息访问领扣哦

发布了37 篇原创文章 · 获赞 1 · 访问量 663

猜你喜欢

转载自blog.csdn.net/zzuzhaohp/article/details/103330620