题目
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
我的解法:
class Solution {
public int[] exchange(int[] nums) {
int i=0,j=nums.length-1;
while(i<j){
while(i<j&&nums[i]%2==1)
i++;
while(i<j&&nums[j]%2==0)
j--;
if(i<j){
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;}
}
return nums;
}
}
解法一:快慢双指针
定义快慢双指针 fast和 low ,fast 在前, low 在后 .
fast 的作用是向前搜索奇数位置,low 的作用是指向下一个奇数应当存放的位置
fast 向前移动,当它搜索到奇数时,将它和 nums[low] 交换,此时 low 向前移动一个位置 .
重复上述操作,直到 fast 指向数组末尾 .
class Solution {
public int[] exchange(int[] nums) {
int low = 0, fast = 0;
while(fast<nums.length){
if(nums[fast]%2==1){
int temp=nums[fast];
nums[fast]=nums[low];
nums[low]=temp;
low++;
}
fast++;
}
return nums;
}
}