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

    技术2022-08-06  107

    [剑指 Offer 21. 调整数组顺序使奇数位于偶数前面]

    难度 简单

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

    示例:

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

    提示:

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

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof

    解法:双指针

    使用类似于快速排序的方法(快速排序是基于同基准数比较大小来决定是否交换),将奇数和偶数交换到下一次需要存放的位置。

    class Solution { public int[] exchange(int[] nums) { int odd = 0; //下一个奇数需要存放的位置 int even = nums.length - 1; //下一个偶数需要存放的位置 int i = 0; while(i < even) { if(nums[i] % 2 == 1 && i != odd) { swap(nums, odd, i); odd++; } else if(nums[i] % 2 == 0 && i != even){ swap(nums, even, i); even--; }else { i++; } } return nums; } public void swap(int[] nums, int i, int j) { int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } }
    Processed: 0.029, SQL: 9