剑指Offer.21 调整数组顺序使奇数在偶数前

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分
示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案

来源:力扣(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) {
        if (nums == null) {
            return null;
        }
        int len = nums.length;
        // 定义两个索引, 左索引找出偶数, 右索引找出奇数
        int i = 0;
        int j = len - 1;
        // 两个索引相遇时说明左边全是奇数, 右边全是偶数
        while (i < j) {
            // 如果左索引的数是奇数
            if ((nums[i] & 0x1) == 1) {
                i++; // 索引右移, 跳过本轮
                continue;
            }
            // 如果右索引的数是偶数
            if ((nums[j] & 0x1) == 0) {
                j--; // 索引左移, 跳过本轮
                continue;
            }
            // 代码走到这里时, i索引肯定是偶数, j索引肯定是奇数, 所以交换
            swap(nums, i, j);
        }
        return nums;
    }

    public void swap(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
}

你可能感兴趣的:(剑指Offer.21 调整数组顺序使奇数在偶数前)