题目描述:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分
思路:
我认真看了一下,题目应该是要求在原地调整,所以这里不能再开辟一个数组
第一种:从头往尾扫描数组,遇到一个偶数就把它提出来,依次把其后的数字前移一格,最后将偶数插入末尾的空位。时间复杂度为O(n2)
第二种:采用两指针分别从首尾出发,当头指针遇到一个偶数,并且尾指针遇到一个奇数时,交换两指针的数字,直到两指针相遇。时间复杂度为O(n),(类似于快排)
实现代码:
# -*- coding:utf-8 -*- class Solution: def reOrderArray(self, array): # write code here p = 0 q = len(array)-1 while p < q: if array[p] % 2 == 0: if array[q] % 2 == 1: array[p],array[q] = array[q],array[p] q -= 1 continue p += 1 return array
def reOrderArray(self, array): n = len(array) head = 0 tail = n - 1 while head < tail: while array[head]%2 != 0: head += 1 while array[tail]%2 == 0: tail -= 1 array[head], array[tail] = array[tail], array[head] head += 1 tail -= 1