两种方法

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

http://www.nowcoder.com/questionTerminal/beb5aa231adc45b2a5dcc5b62c93f593

一、使用辅助数组

使用两个辅助数组,一个用来存偶数,一个用来存奇数,时间复杂度O(n),代码如下:

            if (array==null||array.length==0)
                return;
            //解法1:排序+额外空间
            LinkedList<Integer> oddList=new LinkedList<>();
            LinkedList<Integer> evenList=new LinkedList<>();
            for (int item:array){
                if ((item&1)==0)
                    evenList.add(item);
                else
                    oddList.add(item);
            }
            int p=0;
            for (int i:oddList)
                array[p++]=i;
            for (int i:evenList)
                array[p++]=i;

二、双指针

利用双指针,p1遇到偶数先停下来,p2向后移动,直到遇到奇数,将奇数换到前面,然后将p1和p2之间的数字整体后移。代码如下:

            if (array==null||array.length==0)
                return;
            int p1=0,p2=0;
            while (true){
                //找到第一个偶数,停下来
                for (;p1<array.length;++p1){
                    if ((array[p1]&1)==0)
                        break;
                }
                //找到第一个奇数,停下来
                for (p2=p1+1;p2<array.length;++p2){
                    if ((array[p2]&1)==1)
                        break;
                }
                if (p1==array.length||p2==array.length)
                    break;
                //将p1-p2之间的数据整体往后移
                int tmp=array[p2];
                for (int i=p2;i>p1;--i){
                    array[i]=array[i-1];
                }
                array[p1]=tmp;
            }
全部评论

相关推荐

中信银行 AI算法岗 29~32w
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务