剑指offer 调整数组顺序使奇数位于偶数前面 Python and C++

青春壹個敷衍的年華 提交于 2020-01-22 01:18:45

题目描述

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

思路

不借助额外的空间,循环一次。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;
    }
};
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!