调整数组顺序,使奇数位于偶数前
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
思路
设i为队头,j为队尾
先遍历i,如果i指向的为偶数,再遍历j,当j指向的为奇数时,ij进行交换,交换完break退出j遍历的循环。
下次在进入j循环的时候,直接从上次break退出时的j开始,不用从0开始,因此ij的初始化应该放在for循环之外
注意ij循环遍历的退出条件。这个条件折磨了我很久,一定要思路清晰,不能迷糊。
条件应为ij相差为1时退出
代码:
class Solution {
public int[] exchange(int[] nums) {
int j = nums.length-1,i=0,temp=0;
for( ;i<=j-1;i++){
if(nums[i]%2 == 0){
for(;j>=i+1;j--){
if(nums[j]%2 != 0){
temp = nums[j];
nums[j] = nums[i];
nums[i] = temp;
break;
}
}
}
}
return nums;
}
}