題目描述:
輸入一個(gè)整數(shù)數(shù)組血巍,實(shí)現(xiàn)一個(gè)函數(shù)來(lái)調(diào)整該數(shù)組中數(shù)字的順序堪置,使得所有的奇數(shù)位于數(shù)組的前半部分躁垛,所有的偶數(shù)位于位于數(shù)組的后半部分川梅,并保證奇數(shù)和奇數(shù),偶數(shù)和偶數(shù)之間的相對(duì)位置不變乔遮。
分析:
這道題目扮超,關(guān)鍵就是保證奇數(shù)和奇數(shù),偶數(shù)和偶數(shù)之間的相對(duì)位置不變蹋肮。
那么就可以考慮出刷,先統(tǒng)計(jì)一下原數(shù)組中的奇數(shù)數(shù)字個(gè)數(shù),然后遍歷坯辩,將奇數(shù)依次放到前n個(gè)中馁龟,將偶數(shù)依次放到n+1及其之后中。
為了在移動(dòng)元素的同時(shí)漆魔,實(shí)現(xiàn)遍歷坷檩,我們將原始數(shù)組復(fù)制一份(調(diào)用int[]的clone()方法)用來(lái)遍歷。
代碼:
import java.util.*;
public class Solution {
public void reOrderArray(int [] array) {
int[] copy = array.clone(); //數(shù)組的克隆方法
//統(tǒng)計(jì)原數(shù)組中奇數(shù)的個(gè)數(shù)
int oddcount = 0;
for(int i=0;i<array.length;i++){
if(array[i]%2==1)
oddcount++;
}
//將數(shù)組重新排列
int odd =0;
for(int j=0;j<copy.length;j++){
if(copy[j]%2==0){
array[oddcount]=copy[j];
oddcount++;
}else{
array[odd]=copy[j];
odd++;
}
}
}
}
運(yùn)行結(jié)果