题目
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
方法一:用两个数组分别存储奇数和偶数,然后再拼接返回
public int[] exchange(int[] nums) {
ArrayList old = new ArrayList(); //奇数数组
ArrayList even = new ArrayList(); //偶数数组
for (int i = 0; i < nums.length; i++) {
if (nums[i] % 2 == 1) {
old.add(nums[i]);
} else {
even.add(nums[i]);
}
}
old.addAll(even); //拼接
int[] ret = new int[nums.length];
for (int i = 0; i < nums.length; i++) {
ret[i] = (int) old.get(i);
}
return ret;
}
方法二:双指针
public int[] exchange1(int[] nums) {
int i = 0; //i从前往后遍历
int j = nums.length - 1; //j从后往前遍历
int temp;
while (i < j) {
while (i < nums.length && nums[i] % 2 == 1) { // 把数组下标的判断写在前面,避免数组下标越界异常
i++; //如果i指向奇数,i往后移动
}
while (j >= 0 && nums[j] % 2 == 0) {
j--; //如果j指向偶数,j往前移动
}
if (i < j) {
temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
return nums;
}