题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路
不借助额外的空间,循环一次。p1和p2两个指针,p1指向第一个元素,p2指向第二个元素,p1找到第一个偶数,p2找到第一个奇数,[p1,p2-1]整体往后移一位,将奇数插到p1位置,然后p1+1。
做题可能出现的问题
array.insert(p1, array.pop(p2)),这里在python中可以直接实现删除一个,插入一个的动作。可以想像成链表。如果是c++数组的话,就必须要移动[p1,p2-1]中的所有字母。
python
# -*- coding:utf-8 -*-
class Solution:
def reOrderArray(self, array):
# write code here
p1 = 0
while p1<len(array):
while p1<len(array) and array[p1]%2==1:
p1 += 1
p2 = p1 + 1
while p2< len(array) and array[p2]%2==0:
p2 += 1
if p2 < len(array):
array.insert(p1, array.pop(p2))
p1 += 1
else:
break
return array
C++
class Solution {
public:
void reOrderArray(vector<int> &array) {
vector<int>res;
int i=0;
for(i=0;i<array.size();i++)
{
if(array[i]%2==1)
res.push_back(array[i]);//遍历一遍,把所有的奇数追加进去
}
for(i=0;i<array.size();i++)
{
if(array[i]%2==0)
res.push_back(array[i]);// 再遍历一次,把所有的偶数追加进去
}
array = res;
}
};
来源:CSDN
作者:GhostintheCode
链接:https://blog.csdn.net/GhostintheCode/article/details/104064202