题意
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
示例
输入: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;
}
}