题目描述:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
解题思路:
- 不考虑时间复杂度的话,直接把奇数放一个数组里,偶数放在一个数组,然后再放回数组里。
- 还有一种方法,这种方法是不考虑相对位置的,这是一类题的模式,就是只需要用一个单独的函数来判断是不是符合标准。
- 这个题分成两部分:一判断数字应该在数组前半部分还是后半部分的标准,二是拆分数组的操作。
代码1:
public class Solution {
public void reOrderArray(int [] array) {
int len = array.length;
int count1=0;
int count2=0;
int[] arr1=new int[len];
int[] arr2=new int[len];
for(int i=0;i<len;i++){
if(array[i]%2==0){
arr2[count2++]=array[i];
}else{
arr1[count1++]=array[i];
}
}
for(int i=0;i<count1;i++){
array[i]=arr1[i];
}
for(int i=0;i<count2;i++){
array[i+count1]=arr2[i];
}
}
}
代码2:
public class ReorderArray {
public void order(int[] arr){
if(arr == null)
return;
int i = 0;
int j = arr.length-1;
while(i<j){
while(i<j && !isEven(arr[i])
{
i++;
}
while(i>j&&isEven(arr[j]){
j++;
}
if(i<j){
int temp = arr[i];
arr[i]= arr[j];
arr[j] = temp;
}
}
public boolean isEven(int n){
return (n & 1) == 0;
}
}