您的位置:首页 > 职场人生

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

2017-07-17 20:23 441 查看


题目描述

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

时间限制: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐