調整陣列順序使得奇數在前偶數在後(Java)
阿新 • • 發佈:2021-01-19
/* 輸入一個整數陣列,實現一個函式來調整該陣列中數字的順序,使得所有的奇數位於陣列的前半部分,所有的偶數位於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。 */ //使用額外陣列時 時間O(n) 空間O(n) //不使用額外陣列時 時間O(n^2) 空間O(1) import java.util.ArrayList; public class Solution { public void reOrderArray(int [] array) { int lengthOfArray = array.length; ArrayList<Integer> list1 = new ArrayList<>(); ArrayList<Integer> list2 = new ArrayList<>(); for(int num:array){ if(num%2==1){ //奇數 list1.add(num); }else if(num%2==0){ list2.add(num); } } ArrayList<Integer> list = new ArrayList<>(); list.addAll(list1); list.addAll(list2); for(int i = 0;i<list.size();i++){ array[i] = list.get(i); } } }
import java.util.ArrayList; public class Solution { public void reOrderArray(int [] array) { //不使用額外陣列 int i = 0;//記錄已經調整好的奇數的下一個位置下標 int j = 0; for(j=0;j<array.length;j++){ if(array[j]%2==0){ continue; }else if(array[j]%2==1){//遇到奇數開始處理 if(j==i){//兩個奇數相鄰的情況 下標繼續移動 i++; continue; }else{ int temp = array[j]; for(int x = j-1;x>=i;x--){ array[x+1] = array[x];//陣列中 i到j-1的部分向後移動一位(不能直接交換位置,會打亂相對位置) } array[i++] = temp;//注意要讓i自增 } } } } }