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

目录

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

描述

示例

提示

方法:双指针


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

描述

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

示例

输入

nums = [1,2,3,4]

输出

[1,3,2,4]

扫描二维码关注公众号,回复: 13161547 查看本文章
[3,1,2,4] 也是正确的答案之一

提示

0 <= nums.length <= 50000

1 <= nums[i] <= 10000

方法:双指针

我们定义奇偶指针,奇指针从尾部开始,指向从尾开始的第一个奇数,偶指针从头开始,指向从头开始的第一个偶数,如果此时奇指针所在位置要大于偶指针的位置,则交换。

这样当两个指针相遇时可以保证左右两边按奇偶性排列好了。

class Solution {
    public int[] exchange(int[] nums) {
        if (nums.length <= 1) {
            return nums;
        }

        int odd = nums.length - 1;//奇指针,从尾开始指向奇数
        int even = 0;//偶指针,从头开始指向偶数
        while (odd > even) {
            while (nums[odd] % 2 == 0 && odd > even) {
                odd--;
            }
            while (nums[even] % 2 == 1 && odd > even) {
                even++;
            }

            int temp = nums[odd];
            nums[odd] = nums[even];
            nums[even] = temp;
        }
        return nums;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_39478524/article/details/120638675