劍指offer第二版-21.使數組中奇數位于偶數前面

本系列導航:劍指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   
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容