📌  相关文章
📜  通过重复组合两个相同元素形成的给定数组中的最大数(1)

📅  最后修改于: 2023-12-03 14:58:08.301000             🧑  作者: Mango

通过重复组合两个相同元素形成的给定数组中的最大数

给定一个由非负整数组成的数组,可以通过将其中两个相同的数字重复组合来得到一个新的数字。例如,给定数组[10,2],则可以将数字2重复组合两次,得到新数字22,此时数组变为[10,22]。

现在,你需要编写一个函数,该函数接收一个数组作为输入,然后通过重复组合两个相同元素,返回能够得到的数组中最大的数。

以下是一个可以实现此功能的Python代码示例:

def largest_number(nums: List[int]) -> str:
    nums = [str(num) for num in nums]
    nums.sort(key=lambda x: x * 3, reverse=True)
    return ''.join(nums).lstrip('0') or '0'

以上代码中使用了以下三个步骤:

  1. 将所有数字都转换成字符串类型,这是因为数字是无法被直接拼接的。

  2. 对数组进行排序,排序时使用了一个自定义的key参数。这个参数传入了一个lambda函数,函数先将每个数字转化为字符串后复制三遍,然后按降序排列。其中,复制三遍是因为题目要求通过重复组合两个相同元素得到新的数字,那么重复一遍或两遍都是可以的。而将每个数字扩大三倍,是为了防止两个数字在长度上不同时,排序出现问题。

  3. 将排好序的数字数组拼接成一个字符串,并去除开头的0。最终如果字符串是空串,就返回0。

这个函数时间复杂度主要在于排序,即 O(nlogn)。