首页 > 试题广场 >

奇数下标都是奇数或者偶数下标都是偶数

[编程题]奇数下标都是奇数或者偶数下标都是偶数
  • 热度指数:1956 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个长度不小于2的数组arr,实现一个函数调整arr,要么让所有的偶数下标都是偶数,要么让所有的奇数下标都是奇数
注意:1、数组下标从0开始!
2、本题有special judge,你可以输出任意一组合法解!同时可以证明解一定存在
[要求]
时间复杂度为,额外空间复杂度为


输入描述:
第一行一个整数N。表示数组长度
接下来一行N个整数表示数组内的数


输出描述:
输出N个整数。表示调整后的数组
示例1

输入

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))))


发表于 2021-06-11 09:22:44 回复(0)
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)))

发表于 2019-08-13 16:04:24 回复(0)