牛客-剑指offer系列题解:调整数组顺序使奇数位于偶数前面

记录刷题的过程。牛客和力扣中都有相关题目,这里以牛客的题目描述为主。该系列默认采用python语言。
1、问题描述:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

2、数据结构:
数组

3、题解:
方法一:

#-*- coding:utf-8 -*-
class Solution:
    def reOrderArray(self, array):
        # write code here
        ret = []
        for i in array:
            if i % 2 == 1:
                ret.append(i)
        for i in array :
            if i % 2 == 0:
                ret.append(i)
        return ret

方法二:双指针法

#-*- coding:utf-8 -*-
class Solution:
    def reOrderArray(self, array):
        # write code here
	i, j = 0, len(array) - 1
	while i < j:
    		while i < j and array[i] & 1 == 1: i += 1 #从前往后找,遇奇数,i就加1;直到找到偶数
   		while i < j and array[j] & 1 == 0: j -= 1 #从前往后找,遇偶数,j减1;直到找到奇数
    		array[i], array[j] = array[j], array[i]   #交换
	return array

方法三:快慢指针法

#-*- coding:utf-8 -*-
class Solution:
    def reOrderArray(self, array):
    	low, fast = 0, 0
	while (fast < len(array)):
   	 if array[fast] & 1:
        	array[low], array[fast] = array[fast], array[low]
        	low += 1
    	fast += 1
	return array 

注意:方法2和方法3不能保证奇数和奇数,偶数和偶数的相对位置严格一致。
4、复杂度分析:
方法一:
时间复杂度:O(N)
空间复杂度:O(N)
方法二:
时间复杂度:O(N^2)
空间复杂度:O(1)
方法三:
时间复杂度:O(N)
空间复杂度:O(1)

发布了61 篇原创文章 · 获赞 10 · 访问量 2912

猜你喜欢

转载自blog.csdn.net/weixin_42042056/article/details/105547158