目录
调整数组顺序使奇数位于偶数前面
描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
示例
输入
nums = [1,2,3,4]
输出
[1,3,2,4]
注
[3,1,2,4] 也是正确的答案之一
提示
0 <= nums.length <= 50000
1 <= nums[i] <= 10000
方法:双指针
我们定义奇偶指针,奇指针从尾部开始,指向从尾开始的第一个奇数,偶指针从头开始,指向从头开始的第一个偶数,如果此时奇指针所在位置要大于偶指针的位置,则交换。
这样当两个指针相遇时可以保证左右两边按奇偶性排列好了。
class Solution {
public int[] exchange(int[] nums) {
if (nums.length <= 1) {
return nums;
}
int odd = nums.length - 1;//奇指针,从尾开始指向奇数
int even = 0;//偶指针,从头开始指向偶数
while (odd > even) {
while (nums[odd] % 2 == 0 && odd > even) {
odd--;
}
while (nums[even] % 2 == 1 && odd > even) {
even++;
}
int temp = nums[odd];
nums[odd] = nums[even];
nums[even] = temp;
}
return nums;
}
}