# 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
# 示例 1:
# 输入: [10,2]
# 输出: "102"
# 示例 2:
# 输入: [3,30,34,5,9]
# 输出: "3033459"
def func(a):
# 方法一
b = list(map(str, a))
b.sort()
for i in range(len(b) - 1):
if b[i] + b[i + 1] > b[i + 1] + b[i]:
temp = b[i]
b[i] = b[i + 1]
b[i + 1] = temp
return "".join(b)
def func2(a):
# 方法二:冒泡排序
b = list(map(str, a))
for i in range(len(b) - 1):
min_sum = b[i] + b[i + 1]
for j in range(i + 1, len(b)):
if b[j] + b[i] < min_sum:
min_sum = b[j] + b[i]
temp = b[i]
b[i] = b[j]
b[j] = temp
return "".join(b)
def partition1(b, l, r):
x = b[r]
i = l - 1 # 记录分割位置
for j in range(l, r):
if b[j]+x <= x+b[j]: # 以x为阈值,将数据划分为大于x和小于x的左右两边
i += 1 # 分割点位置
b[i], b[j] = b[j], b[i] # 小于x的都交换到左边的位置上(注意,这里是交换, 原始数据集要保持不变)
b[i + 1], b[r] = b[r], b[i + 1] # 分割点是i+1,对应的值是x
return i + 1
def partition2(b, left, right):
tmp = b[left] # 用来划分数组的中间值
while left < right:
while left < right and b[right]+tmp >= tmp+b[right]: # 从右边找比tmp小的数
right -= 1
b[left] = b[right] # 如果比tmp小,就把右边的值写到左边空位上
while left < right and b[left]+tmp <= tmp+b[left]: # 从左边找比tmp大的数
left += 1
b[right] = b[left] # 如果比temp大,就把左边的值写到右边空位上
b[left] = tmp # 此时left和right相等了,即分割点,将分割点的值等于tmp
# 这样就完成了一次分割,分割点的位置为left,值为tmp。左边都小于tmp,右边都大于tmp
# 我们结果返回分割点的位置left,利用递归继续对左边和右边进行分割即可
return left
def quick_sort(b, left, right):
if left < right:
mid = partition2(b, left, right) # 数据分割,得到分割点的位置, 也可以用partition1
quick_sort(b, left, mid - 1) # 分割点左边进行快排
quick_sort(b, mid + 1, right) # 分割点右边进行快排
if __name__ == '__main__':
# 结合python自带sort函数
a = [3, 34, 5, 9, 30]
print(func(a))
print("冒泡排序:")
print(func2(a))
print("快排:")
b = list(map(str, a))
quick_sort(b, 0, len(b)-1)
print("".join(b))
笔试题(十四):整数数组拼接最小数字
最新推荐文章于 2024-08-21 22:17:42 发布
该文章提供了三种方法来解决一个问题:给定一个非负整数数组,将数组中的所有数字拼接成一个数,并输出能拼接出的最小数字。方法一是简单的排序,方法二是冒泡排序,方法三是快速排序。示例展示了如何使用这些方法对给定数组进行处理并生成最小拼接数字。
部署运行你感兴趣的模型镜像
您可能感兴趣的与本文相关的镜像
Python3.11
Conda
Python
Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本
1769

被折叠的 条评论
为什么被折叠?



