【剑指offer】面试题 21:调整数组顺序使奇数位于偶数前面

来源:互联网 发布:js dom style属性 编辑:程序博客网 时间:2024/06/06 01:29

题目描述

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

时间限制: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




阅读全文
0 0