輸入一個整數陣列,實作一個函式來調整該陣列中數字的順序,使得所有的奇數位于陣列的前半部分,所有的偶數位于陣列的后半部分,并保證奇數和奇數,偶數和偶數之間的相對位置不變
解法一
第一次回圈遍歷陣列,找到第一個奇數
遍歷奇數之前的陣列,找到第一個偶數,并交換奇數和偶數
public class Solution {
public void reOrderArray(int [] array) {
int temp = 0;
for(int i = 0; i < array.length; i++) {
if((array[i] & 1) == 1) {
for(int j = 0; j < i; j++) {
if((array[j] & 1) == 0) {
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
}
}
}
解法二
以空間換時間的思路,定義一個和原陣列大小相同的新陣列,并且遍歷原陣列,同時從兩端進行判斷,左邊負責判斷奇數,遇到就放入新陣列(正向放入);右邊負責判斷偶數,遇到就放入新陣列(后從向前放),一遍回圈結束,新陣列就是我們想要的結果
public class Solution {
public void reOrderArray(int [] array) {
int[] temp = new int[array.length];
int low = 0;
int high = array.length - 1;
for(int i = 0; i < array.length; i++) {
if((array[i] & 1) == 1) {
temp[low] = array[i];
low++;
}
if((array[array.length - i - 1] & 1) == 0) {
temp[high] = array[array.length - i - 1];
high--;
}
}
for(int i = 0; i < temp.length; i++) {
array[i] = temp[i];
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/140490.html
標籤:其他
下一篇:鏈表中倒數第 k 個結點
