题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分。
思路
双指针,但是不稳定
import java.util.Arrays;
class Test {
public void reOrderArray(int [] array) {
int n = array.length;
if (n <= 0) return;
int i = 0;
int j = n - 1;
while (i < j) {
// i指向奇数,继续向后走,直到找到偶数
while (i < j && (array[i] & 1) != 0)
i++;
// j指向偶数,继续向前走,直到找到奇数
while (i < j && (array[j] & 1) == 0)
j--;
if (i < j)
swap(array, i, j);
}
}
public void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
空间换时间,可以保证稳定
public class Solution {
public void reOrderArray(int [] array) {
int n = array.length;
int[] res = new int[n];
if (n <= 0) return;
int odd_len = 0;
for (int num : array) {
if ((num & 1) == 1)
odd_len++;
}
int j = 0;
for (int i = 0; i < n; i++) {
if ((array[i] & 1) == 1)
res[j++] = array[i];
else if ((array[i] & 1) == 0)
res[odd_len++] = array[i];
}
int i = 0;
for (int num : res)
array[i++] = num;
}
}