剑指offer刷题(十六)

121 阅读1分钟

调整数组顺序使奇数位于偶数前面

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。

示例:

输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。

提示:

1 <= nums.length <= 50000
1 <= nums[i] <= 10000

解题思路:
p从左到右寻找偶数,q从右往左寻找奇数,符合要求后就交换nums[p]和nums[q]的值
python就是数组,把奇数偶数分开在分别插入

java

class Solution {
    public int[] exchange(int[] nums) {
        int p = 0;
        int q = nums.length-1;
        int tmp = 0;
        while(p<q){
            while(p<q && nums[p]%2!=0){
                p++;
            }
            while(p<q && nums[q]%2==0){
                q--;
            }
            tmp = nums[p];
            nums[p] = nums[q];
            nums[q] = tmp;
        }
        return nums;

    }
}

python

class Solution(object):
    def exchange(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        res_1=[]
        res_2=[]
        for i in nums:
            if i%2==0:
                res_2.append(i)
            else:
                res_1.append(i)
        for i in res_2:
            res_1.append(i)
        return res_1