双指针法:
l 一直往右移,直到它指向的值为偶数, r 一直往左移, 直到它指向的值为奇数,当 l 指向偶数,当 r 指向奇数时,交换两者指向的元素。
class Solution {
public int[] exchange(int[] nums) {
int l = 0, r = nums.length - 1;
while (l < r){
if ((nums[l] & 1) == 1){
l++;
continue;
}
if ((nums[r] & 1) == 0){
r--;
continue;
}
int temp = nums[l];
nums[l] = nums[r];
nums[r] = temp;
// 交换完之后 l 一定是个奇数,r一定是个偶数,所以可以直接l++,r--
l++;
r--;
}
return nums;
}
}
快慢指针
slow指向奇数存放的位置
fast碰到奇数时互换位置,碰到偶数时+1
如果找到奇数则与slow指向的数进行交换
class Solution {
public int[] exchange(int[] nums) {
int slow = 0, fast = 0;
while(fast < nums.length){
if(nums[fast] % 2 == 1){
int temp = nums[fast];
nums[fast] = nums[slow];
nums[slow] = temp;
// 交换完毕后 slow后移
slow++;
}
fast++;
}
return nums;
}
}