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

题意

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

示例

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

解答

双指针法


class Solution {
    public int[] exchange(int[] nums) {
	
	// 定义双指针 left 和 right
	// 分别初始化为数组的首尾
        int left = 0;
        int right = nums.length - 1;
        int temp;

	// 当指针相遇完成排列
        while(left < right){
            
    		// 当左指针小于右指针 且 左指针为奇数时候
		// 不管左指针 left+1 看后一位
                while( left < right && 1 == (nums[left] & 1) ){
                    left ++;
                }

		// 当左指针小于右指针 且 右指针为偶数时候
		// 不管右指针 right-1 看前一位
                while( left < right && 0 == (nums[right] & 1) ){
                    right --;
                }

		// 若left为偶数 right是奇数 到达此代码块
		// 进行交换 奇数换到前 偶数换到后
		// 一直到指针相遇
                temp = nums[right];
                nums[right] = nums[left];
                nums[left] = temp;
        }
        return nums;
    }
}


发布了104 篇原创文章 · 获赞 264 · 访问量 54万+

猜你喜欢

转载自blog.csdn.net/teavamc/article/details/104725329