剑指Offer-调整数组顺序使奇数位于偶数前面

77 阅读1分钟

题目

输入一个整数数组,实现一个函数来调整该数组中数字的顺序。

使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分。

数据范围

数组长度 [0,100][0,100]。
数组内元素取值范围 [0,100][0,100]。

样例

输入:[1,2,3,4,5]

输出: [1,3,5,2,4]

解析

使用快排的思想,从左到右找偶数,从右到左找奇数,找到后就交换着俩数,一直循环直到都交换完为止。

代码

C++

class Solution {
public:
    void reOrderArray(vector<int> &arr) {
        int l = 0, r = arr.size() - 1;
        while (l < r) {
            while (l < r && (arr[l] & 1)) l ++ ;
            while (l < r && !(arr[r] & 1)) r -- ;
            swap(arr[l], arr[r]);
        }
    }
};

Python

class Solution(object):
    def reOrderArray(self, arr):
        """
        :type array: List[int]
        :rtype: void
        """
        l, r = 0, len(arr) - 1
        while l < r:
            while l < r and arr[l] % 2 == 1: l += 1
            while l < r and arr[r] % 2 == 0: r -= 1
            arr[l], arr[r] = arr[r], arr[l]
        
        

GO

func reOrderArray(array []int){
	l, r := 0, len(array) - 1
	for  l < r {
	   for l < r && array[l] % 2 == 1 {
	       l ++
	   }
	   for l < r && array[r] % 2 == 0 {
	       r -- 
	   }
	   array[l], array[r] = array[r], array[l]
	}
}