Create Maximum Number
题目描述
Given two arrays of length m and n with digits 0-9 representing two numbers. Create the maximum number of length k <= m + n from digits of the two. The relative order of the digits from the same array must be preserved. Return an array of the k digits.
Note: You should try to optimize your time and space complexity.
Example 1:
Input:
nums1 = [3, 4, 6, 5]
nums2 = [9, 1, 2, 5, 8, 3]
k = 5
Output: [9, 8, 6, 5, 3]
Example 2:
Input:
nums1 = [6, 7]
nums2 = [6, 0, 4]
k = 5
Output: [6, 7, 6, 0, 4]
Example 3:
Input:
nums1 = [3, 9]
nums2 = [8, 9]
k = 3
Output: [9, 8, 9]
解题思路
本题给定了两个数组和一个整数k,要在两个数组中,一共选出k个数,使得组成的数字最大,且选出的数字相对顺序不能变化。
思路: 对于两个数组我们不是很方便直接计算,而如果在一个数组中选m个数,使得组成的数字最大,那就好做很多,因此我们只需要在一个数组中选m个数,在另一个数组中选k-m个数,最后将两组选出的数合并起来,即可得到我们想要的解。那么接下来的问题就分解为以下几个问题:
- 如何从一个数组中选m个数,使得组成的数字最大。对于一个给定长度的数字来说,其高位决定了它的大小,因此我们应该尽可能让这个数的高位更大。假如数组长度为n,给定整数为m,起始位置为k,那么在下标为k到n-m中找一个最大的数作为最高位,并记录该最高位的下标赋值给k,重复以上过程不断找到次高位,即可得到想要的数。
- 如何合并两个数组,使得结果最大。与上面的思路类似,同样是尽量使得组成的数字的高位更大,因此我写了一个greater的函数,用来判断两个数组的第一个不一样的数的大小关系。
源代码
1 | class Solution { |