21、调整数组顺序使奇数位于偶数前面

1、题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

2、思路:

(1)暴力循环:这道题要保证顺序,若用暴力循环解决,即,维护两个指针 i 和  j 从前往后遍历,i 遇到偶数就停止,然后 j 向后移动,知道碰到奇数,将奇数放到 i 指针的位置上,其元素位置余后移。这种思路解决时间复杂度是O(n^2)。

 (2)用空间换时间:维护两个集合,分别用来存储偶数和奇数,然后再把两个集合拼起来,然后将集合的元素一个一个覆盖到原来数组中。时间复杂度O(n),空间复杂度O(n)。

import java.util.*;
public class Solution {
    public void reOrderArray(int [] array) {
        int len=array.length;
        List<Integer> list=new ArrayList<Integer>();
        List<Integer> list1=new ArrayList<Integer>();
        for(int i=0;i<len;i++){
            //用位与运算代替取余,如果Y =2^{n},则X%Y可以变化为X&(Y-1)
            if((array[i]&1)==0){
                list.add(array[i]);
            }
            if((array[i]&1)==1){
                list1.add(array[i]);
            }
        }
        list1.addAll(list);
        for(int i=0;i<len;i++){
            array[i]=list1.get(i);
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/guoyu1/p/12072070.html
今日推荐