美文网首页
剑指offer23题:调整数组顺序使得奇数位于偶数前面

剑指offer23题:调整数组顺序使得奇数位于偶数前面

作者: 灰化肥发黑会挥发 | 来源:发表于2018-12-27 13:47 被阅读0次

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分

  • 思路:个人思路,设置两个指针,一个从前往后,一个从后往前,然后找到在前列的第一个奇数和在后面的第一个偶数,然后二者互换。
public class ReordOddEven {
    public void Record(int[] arr){
        if(arr.length==0) return ;
        int start = 0;
        int end = arr.length-1;
        while(start<end){
            while(start<end&&arr[end]>>1==0) end--;
            while(start<end&&arr[start]>>1!=0) start++;
            if(start<end) {
                int temp = arr[start];
                arr[start] = arr[end];
                arr[end] = temp;
            }
        }

    }

}

  • 更好的做法是将判断奇偶性解耦出来,这样同类型的题目都能使用相同的方法处理
public class ReordOddEven {
    public void Record(int[] arr){
        if(arr.length==0) return ;
        int start = 0;
        int end = arr.length-1;
        while(start<end){
            while(start<end&&judge(arr[end])) end--;
            while(start<end&&!judge(arr[start])) start++;
            if(start<end) {
                int temp = arr[start];
                arr[start] = arr[end];
                arr[end] = temp;
            }
        }

    }
    public boolean judge(int data){
         if(data>>1==0) return true ;
         else  return false;
    }

}

相关文章

网友评论

      本文标题:剑指offer23题:调整数组顺序使得奇数位于偶数前面

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