調整陣列順序使奇數位於偶數前面,偶數和偶數之間的相對位置不變

王世暉發表於2016-04-25

題目:輸入一個整數陣列,實現一個函式來調整該陣列中數字的順序,使得所有的奇數位於陣列的前半部分,所有的偶數位於位於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。

思路:先掃描一遍陣列,做三件事,1、奇數往前挪,2、統計偶數個數,3、儲存偶數到佇列。掃描結束後,奇數都被挪到了前邊,緊湊的挨在一塊,後邊留出了一些空餘的位置,位置的個數就是偶數的個數。將儲存在佇列裡邊的偶數按照進佇列的順序塞到後邊的空餘位置即可。

import java.util.LinkedList;
public class Solution {
    public void reOrderArray(int [] array) {
            LinkedList<Integer> queue=new LinkedList<>();
            /*記錄偶數的個數*/
            int even_numbers=0;
            /*掃描一遍,奇數往前挪,偶數儲存起來*/
            for(int i=0;i<array.length;i++){
                if(array[i]%2==0){
                    even_numbers++;
                    queue.add(array[i]);
                }else{
                    array[i-even_numbers]=array[i];
                }
            }
            /*上一步奇數往前挪動的時候後面留出了event_numbers個位置
            * 儲存在佇列裡邊的偶數按照出現順序依次填進這些空餘的位置*/
            for(int i=array.length-even_numbers;i<array.length;i++){
                array[i]=queue.pop();
            }
        }
}

相關文章