题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
解题思路
方法一:利用两个list存放奇数和偶数,之后将结果复制到原数组
方法二:遍历原数组,偶数不管,遇到奇数之后前插。记录当前奇数的最右下标
java代码
import java.util.*; public class Solution { public void reOrderArray(int [] array) {//8ms 9560KB int i=0;//记录奇数的位置 for(int j=0;j<array.length;j++){ if(array[j]%2!=0){//偶数不管,遇见奇数直接前插 int tmp=array[j]; for(int k=j-1;k>=i;k--){//(涉及到之前的元素右移) array[k+1]=array[k]; } array[i++]=tmp; } } } public void reOrderArray1(int [] array) {//11ms 9632KB //利用辅助数组 ArrayList<Integer> list1=new ArrayList<>(); ArrayList<Integer> list2=new ArrayList<>(); for(int num:array){ if(num%2==0){ list2.add(num); } else{ list1.add(num); } } for(int i=0;i<list1.size();i++){ array[i]=list1.get(i); } for(int i=0;i<list2.size();i++){ array[i+list1.size()]=list2.get(i); } } }