📅  最后修改于: 2023-12-03 14:58:03.376000             🧑  作者: Mango
此题需要求通过交换相邻的偶数对后能够得到的最小数,可以用于考察程序员对排序算法的掌握和应用。
给定一个由不同整数组成的非空数组,编写一个函数,将其重新排列以组成最小值。
首先将整数数组中的偶数按照从小到大排序
从偶数数组中取出最小的两个数,进行交换;然后取出下一个最小的两个数,以此类推,直到偶数数组中的所有数均被遍历过。
将新的整数数组中的所有数按照从小到大的顺序排列。
返回重新排列后的整数数组的值。
以下是以Python语言实现的代码示例:
def min_num(arr) -> int:
evens = sorted([x for x in arr if x % 2 == 0])
i = 0
while i < len(evens) - 1:
if evens[i] == 0 or evens[i+1] == 0:
i += 1
elif evens[i] > evens[i+1]:
evens[i], evens[i+1] = evens[i+1], evens[i]
i = 0
else:
i += 1
arr = [str(x) for x in arr]
evens = [str(x) for x in evens]
merged = ''.join(evens) + ''.join([x for x in arr if x not in evens])
return int(merged)
此题需要注意的是在交换偶数时,可能会出现数字0的情况,需要特殊处理。另外,在偶数数组中只有一个数的情况下不需要交换。