Live2D

调整数组顺序使得奇数在前偶数在后(Java)

/*
   输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
*/
//使用额外数组时 时间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自增
                }
            }
        }
    }
}
posted @ 2021-01-19 13:47  细雪之舞0213  阅读(277)  评论(0)    收藏  举报