美文网首页
《剑指offer》(十三)-调整数组顺序使奇数位于偶数前面(ja

《剑指offer》(十三)-调整数组顺序使奇数位于偶数前面(ja

作者: 鼠小倩 | 来源:发表于2019-11-15 14:43 被阅读0次

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

考点:数组

题目描述

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

格式要求

public class Solution{
   punlic void reOrderArray(int[] Array){

  }
}

解题一-移动数组元素

1.思路

参考快速排序

  • i++往前走碰到偶数停下来,j = i+1
  • a[j]为偶数,j++前进,直到碰到奇数
  • a[j]对应的奇数插到a[i]位置,j经过的j-i个偶数依次后移
  • 如果j==len-1时还没碰到奇数,证明ij之间都为偶数了,完成整个移动
image.png

这道题就是将数组分为奇数部分和偶数部分,每遍历到一个奇数,就迭代地将其放入前面奇数部分,每遍历到一个偶数,就继续遍历。
相当于任意奇数都小于任意偶数,所有奇数都相等,所有偶数都相等,然后使用快速排序排序数组。

2.代码

public class Solution {
    public void reOrderArray(int [] array) {
        if(array==null||array.length==0){
            return;
        }
        for(int i=0;i<array.length;i++){
            // 如果当前元素是奇数,就移动到奇数序列
            if((Math.abs(array[i]))%2!=0){
                int temp=array[i];
                int cur = i;
                while(cur > 0 && (array[cur - 1] % 2 == 0)){
                    array[cur] = array[cur - 1];
                    cur--;
                }
                array[cur]=temp;
            }
            // 否则当前元素是偶数,无需移动
        }
    }
}

解题二-使用两个队列

1.思路
使用两个队列,一个存奇数,一个存偶数,然后依次将数赋值回原数组
2.代码

public class Solution {
    public void reOrderArray(int [] array) {
        if(array==null||array.length==0){
            return;
        }
        Queue<Integer> oddQueue=new LinkedList<>();
        Queue<Integer> evenQueue=new LinkedList<>();
        for(int i=0;i<array.length;i++){
            if(isOddNum(array[i])){
                oddQueue.offer(array[i]);
            }else {
                evenQueue.offer(array[i]);
            }
        }
        int i=0;
        while(!oddQueue.isEmpty()){
            array[i++]=oddQueue.poll();
        }
        while(!evenQueue.isEmpty()){
            array[i++]=evenQueue.poll;
        }
    }
    private static boolean isOddNum(int num){
        if((num&1)==1){
            return true;
        }
        return false;
    }
}
注:Solution.java:6: error: cannot find symbol
Queue oddQueue=new LinkedList<>();
^

相关文章

网友评论

      本文标题:《剑指offer》(十三)-调整数组顺序使奇数位于偶数前面(ja

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