题目描述
思路
可以设置两个指针,分别从数组的两端开始遍历。前指针专门找偶数,后指针专门找奇数。当前指针指向偶数,后指针指向奇数的时候,交换它们的位置。
代码
class Solution {
public int[] exchange(int[] nums) {
//1.设置两个指针,分别从数组的头尾开始遍历
//1.1前指针专门负责找偶数
int i = 0;
//1.2后指针专门负责找奇数
int j = nums.length - 1;
//2.开始遍历:只要前指针小于后指针,遍历继续进行
while(i < j){
//如果前指针指向的数不是偶数,前指针向后移动
if((nums[i] % 2) != 0){
i++;
continue;
}
//如果后指针指向的数不是寄数,后指针向前移动
if((nums[j] % 2) != 1){
j--;
continue;
}
//前指针指向偶数,后指针指向奇数,就把前后指针指向的数进行交换
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
//3.结束循环,返回数组
return nums;
}
}
复杂度分析
时间复杂度:O(n) 遍历数组
空间复杂度:O(1) 新设置的两个指针都只使用了常数大小的额外空间