美文网首页剑指offer的java实现-数据结构与算法
剑指offer第二版-21.使数组中奇数位于偶数前面

剑指offer第二版-21.使数组中奇数位于偶数前面

作者: ryderchan | 来源:发表于2017-07-14 09:46 被阅读113次

    本系列导航:剑指offer(第二版)java实现导航帖

    面试题21:调整数组顺序使奇数位于偶数前面

    题目要求:
    实现一个函数来调整数组中的数字,使得所有奇数位于数组的前半部分,偶数位于后半部分。

    解题思路:
    其实我想到的第一个思路就是用双指针从两端向中间扫描,处理过程与快排很相似,时间复杂度o(n),这应该是最快的解法了。思路简单,就当复习下快排吧。至于复杂度更高的解法,我就不再写了。
    书中提到了一点,是将判断部分写成函数,这样能够提升代码的可扩展性,这的确是很好的一个提醒。那样处理之后,这一类问题(非负数在前,负数在后;能被3整除的在前,不能的在后;)都只需修改下判断函数即可解决。

    package chapter3;
    /**
     * Created by ryder on 2017/7/14.
     * 调整数组顺序使奇数位于偶数前面
     */
    public class P129_ReorderArray {
        public static void reorder(int[] data){
            if(data==null||data.length<2)
                return;
            int left=0,right=data.length-1;
            while(left<right){
                while (left<right&&!isEven(data[left]))
                    left++;
                while (left<right&&isEven(data[right]))
                    right--;
                if(left<right){
                    int temp=data[left];
                    data[left]=data[right];
                    data[right]=temp;
                }
            }
        }
        public static boolean isEven(int n){
            return (n&1)==0;
        }
        public static void main(String[] args){
            int[] data = {1,2,3,4,5,7,7};
            reorder(data);
            for(int i=0;i<data.length;i++) {
                System.out.print(data[i]);
                System.out.print('\t');
            }
            System.out.println();
        }
    }
    

    运行结果

    1   7   3   7   5   4   2   
    

    相关文章

      网友评论

        本文标题:剑指offer第二版-21.使数组中奇数位于偶数前面

        本文链接:https://www.haomeiwen.com/subject/iplnhxtx.html