题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
解答
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Solution {
public static void reOrderArray(int [] array) {
List<Integer> oddList = new ArrayList<>();
List<Integer> evenList = new ArrayList<>();
for(int i = 0; i< array.length; i++){
if(array[i]%2==0){
evenList.add(array[i]);
}else {
oddList.add(array[i]);
}
}
oddList.addAll(evenList);
for (int i = 0;i<oddList.size(); i++) {
array[i] = oddList.get(i);
}
}
public static void main(String[] args) {
int arr []= {1,2,3,4,5,6,7};
Solution.reOrderArray(arr);
System.out.println(Arrays.toString(arr));
}
}
另一种想法(适用于不限制原顺序的情况,不适用于本题)
public class Solution {
public static void reOrderArray(int [] array) {
for (int i = 0;i<array.length; i++){
//遍历到第一个偶数
if(array[i]%2==0){
for (int j = i+1; j <array.length; j++){
//遍历到偶数后的第一个奇数
if(array[j]%2!=0){
swap(array,i,j);
break;
}
}
}
}
}
public static int [] swap(int [] array,int i,int j){
int temp = array[i];
array[i] = array[j];
array[j] = temp;
return array;
}
public static void main(String[] args) {
int arr []= {1,2,3,4,5,6,7};
Solution.reOrderArray(arr);
System.out.println(Arrays.toString(arr));
}
}