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

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

1.暴力破解法

import java.util.*;

public class Solution {
    public void reOrderArray(int [] a) {
        if(a==null || a.length ==0){
            return ;
        }
//a3存放奇数,a2存放偶数
        ArrayList<Integer> a3 = new ArrayList<Integer>();
        ArrayList<Integer> a2 = new ArrayList<Integer>();

        for(int i = 0,count = 0; i < a.length; i++){
            if(a[i] % 2 != 0){
                a3.add(a[i]);
            }else{
                a2.add(a[i]);
            }
        }

        Integer[] b1 = a3.toArray(new Integer[a3.size()]);
        Integer[] b2 = a2.toArray(new Integer[a2.size()]);
        for(int i = 0; i < b1.length; i++){
            a[i] = b1[i];
        }
        for(int i = 0,j = b1.length; i < b2.length; i++,j++){
            a[j] = b2[i];
        }
    }
}

2.参考快速排序

class Solution {
public:
    void reOrderArray(vector<int> &array) {
        int len = array.size();
        if(len <= 1){ // 数组空或长度为1
            return;
        }

        int i = 0;
        while(i < len){
            int j = i + 1;
            if(array[i]%2 == 0){ // a[i]为偶数,j前进,直到替换
                while(array[j]%2 == 0){ // j为偶数,前进
                    if(j==len-1)// i为偶数,j也为偶数,一直后移到了末尾,证明后面都是偶数
                         return;
                    j++;
                }
                // 此时j为奇数
                int count = j-i;
                int temp = array[i];
                array[i] = array[j];
                while(count>1){
                    array[i+count] = array[i+count-1];//数组后移
                    count--;
                }
                array[i+1] = temp;
            }
            i++;
        }
    }
};
全部评论

相关推荐

2024-12-27 23:45
已编辑
三江学院 Java
程序员牛肉:死局。学历+无实习+项目比较简单一点。基本就代表失业了。 尤其是项目,功能点实在是太假了。而且提问点也很少。第一个项目中的使用jwt和threadlocal也可以作为亮点写出来嘛?第二个项目中的“后端使用restful风格”,“前端采用vue.JS”,“使用redis”也可以作为亮点嘛? 项目实在是太简单了,基本就是1+1=2的水平。而你目标投递的肯定也是小厂,可小厂哪里有什么培养制度,由于成本的问题,人家更希望你来能直接干活,所以你投小厂也很难投。基本就是死局,也不一定非要走后端这条路。可以再学一学后端之后走测试或者前端。 除此之外,不要相信任何付费改简历的。你这份简历没有改的必要了,先沉淀沉淀
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务