给定一个长度不小于2的数组arr,实现一个函数调整arr,要么让所有的偶数下标都是偶数,要么让所有的奇数下标都是奇数
注意:1、数组下标从0开始!
2、本题有special judge,你可以输出任意一组合法解!同时可以证明解一定存在
[要求]
时间复杂度为
,额外空间复杂度为
第一行一个整数N。表示数组长度
接下来一行N个整数表示数组内的数
输出N个整数。表示调整后的数组
5 1 2 3 4 5
2 1 4 3 5
样例中的输出保证了奇数下标都是奇数
#数位调整函数
def process(nums):
#偶数下标
even=0
#奇数下标
odd=1
#以最后一个数字为过渡,交换奇数位,偶数位上的数字
while even<len(nums)and odd<len(nums):
#如果最后一个数字是偶数
#应该放在偶数位置上
if nums[-1]%2==0:
#交换数值
nums[even],nums[-1]=nums[-1],nums[even]
#偶数位置前移
even+=2
else:
nums[odd],nums[-1]=nums[-1],nums[odd]
odd+=2
return nums
n=int(input())
nums=list(map(int,input().split()))
print(" ".join(map(str,process(nums)))) N = eval(input())
ls = list(map(int, input().split()))
# 奇数odd 偶数even
odd, even = [], []
for i in ls:
if i%2 == 1:
odd.append(i)
else:
even.append(i)
# 奇数更多,先放完偶数
if len(odd) > len(even):
for i in range(len(even)):
ls[i*2] = even[i]
ls[i*2+1] = odd[i]
ls[2*len(even):] = odd[len(even):]
else:
for i in range(len(odd)):
ls[i*2] = even[i]
ls[i*2+1] = odd[i]
ls[2*len(odd):] = even[len(odd):]
print(' '.join(map(str, ls)))