美文网首页
剑指offer 调整数组顺序使奇数位于偶数前面 Python a

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

作者: GhostintheCode | 来源:发表于2020-01-21 17:33 被阅读0次

    题目描述

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

    思路

    不借助额外的空间,循环一次。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;
        }
    };
    

    相关文章

      网友评论

          本文标题:剑指offer 调整数组顺序使奇数位于偶数前面 Python a

          本文链接:https://www.haomeiwen.com/subject/kldtzctx.html