首页 > 试题广场 >

数组操作

[编程题]数组操作
  • 热度指数:13969 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解
输入一个无序整数数组,调整数组中数字的顺序, 所有偶数位于数组的前半部分,使得所有奇数位于数组的后半部分。
要求时间复杂度为O(n)。

输入描述:
给定无序数组。
长度不超过1000000。


输出描述:
所有偶数位于数组的前半部分,所有奇数位于数组的后半部分。
如果有多个答案可以输出任意一个正确答案。
示例1

输入

2 4 5 7 8 1

输出

2 4 8 7 5 1

备注:
请自觉使用O(n)的算法。
class Solution(object):
    def order(self):
        #获取输入的整数列表
        array = list(map(int,input().split(' ')))
         #用空间换取时间,建一个列表来保存结果
        res = []
        for i in array:
            #把偶数找出来放到res列表里
            if i%2==0:
                res.append(i)
        for i in array:
            #再把奇数找出来尾插到res列表里
            if i%2==1:
                res.append(i)
        print(" ".join(map(str,res)))
s = Solution()
s.order()

发表于 2019-12-02 18:22:12 回复(0)
lst = input().split()
lst1 = []
lst2 = []
for per_str in lst:
    if int(per_str) & 1 == 1:
        lst1.append(per_str)
    else:
        lst2.append(per_str)
#for per_str in lst1:
#    print(per_str, end = " ")
print(" ".join(lst2), end = " ")
print(" ".join(lst1))

发表于 2019-09-06 12:26:44 回复(0)
""""
借鉴快速排序的思想,时间复杂度O(n),空间复杂度O(1)
"""

if __name__ == "__main__":
    a = list(map(int, input().strip().split()))
    i, j = 0, len(a) - 1
    while True:
        while i < len(a) and a[i] & 1 == 0: i += 1
        while j >= 0 and a[j] & 1 == 1: j -= 1
        if i >= j: break
        a[i], a[j] = a[j], a[i]
    print(' '.join(map(str, a)))

编辑于 2019-07-14 11:00:58 回复(0)