题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
时间限制:1秒 空间限制:32768K 热度指数:141774
思路
C++版本
定义两个指针,第一个指针初始化时指向数组的第一个数字,它只往后移动;第二个指针初始化时指向数组的最后一个数字,它只往前移动。
在两个指针相遇前,第一个指针总是在第二个指针的前面。
如果第一个指针指向的数字是偶数,并且第二个指针指向的数字是奇数,则交换这两个数字。
如果第一个指针没有遇到偶数,则不断的往后移动,直到遇到偶数;此时第一个指针遇到偶数,
就停止移动,等待交换;与此同时,第二个指针不断的往前移动,直到第二个指针遇到奇数,此时交换两个数字;
同理,第二个指针遇到奇数,同样停止移动,等待交换,直到第一个指针遇到偶数;
Python版本
1、类似于C++算法,判断奇偶,再交换;
2、定义两个空的数组,遇到奇数放奇数的数组里,遇到偶数放偶数的数组里,最后直接显示两个数组的和;
Note
对于C++ 版本的利用指针来判断,Python实现显得更加简单
参考代码
# -*- coding:utf-8 -*-
class Solution:
def reOrderArray(self, array):
# write code here
a = [] # 奇数
b = [] # 偶数
for i in array:
if i & 0x1 == 1:
a.append(i)
else:
b.append(i)
return a + b