1.题目地址
2.题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
提示:
0 <= nums.length <= 50000
0 <= nums[i] <= 10000
3.思路
双指针。定义两个指针,i指向数组的最左端,j指向数组的最右端。i向右寻找第一个偶数,j向左寻找第一个奇数,然后两数交换。直到i>j时,左边全为奇数,右边全为偶数。
力扣图示
4.代码
public int[] exchange(int[] nums) {
int i = 0, j = nums.length - 1, temp;
while (i < j) {
//从左边找到第一个偶数
while (i < j && nums[i] % 2 == 1) {
i++;
}
//从右边找到第一个奇数
while (i < j && nums[j] % 2 == 0) {
j--;
}
temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
return nums;
}