思路一:开辟一个新数组,正向遍历数组找出所有奇数,反向遍历找出所有偶数
public class Solution {
public int[] reOrderArray (int[] array) {
int arrs[] = new int[array.length];
int j=0;
for(int i=0;i<array.length;i++)//从前往后找奇数
{
if((array[i]&1)==1)
arrs[j++]=array[i];
}
j=array.length-1;
for(int i=array.length-1;i>=0;i--)//从后往前找偶数
{
if((array[i]&1)==0)
arrs[j--]=array[i];
}
return arrs;
}
}
时间O(2*N)即O(N),空间O(N)
思路二:双指针,原数组进行交换,指针i指向非奇数,指针j指向奇数,临时变量存放当前奇数防止覆盖,j-1到i进行数组后移,本质就是偶数里面挑奇数出来,然后偶数顺延,达到相对位置不改变
import java.util.*;
public class Solution {
public int[] reOrderArray (int[] array) {
// write code here
int i=0;
for(int j=0;j<array.length;j++)
{
if((array[j]&1)==1)
{
int temp=array[j];
for(int k=j-1;k>=i;k--)
{
array[k+1]=array[k];
}
array[i++]=temp;
}
}
return array;
}
}