オファー表面は、安全質問21(Javaバージョン)を証明する:調整するように偶奇の前にアレイを順次

免責事項:この記事はブロガーオリジナル記事ですが、許可ブロガーなく再生してはなりません。https://blog.csdn.net/littlehaes/article/details/91411243

私のブログへようこそ

オファー表面は、安全質問21(Javaバージョン)を証明する:調整するように偶奇の前にアレイを順次

タイトル説明

アレイ内の数字の順序を調整する機能を実現するために、整数の配列を入力し、アレイの前半のすべての奇数部分は、すべての偶数アレイの第2の半分に位置し、奇数の間で比較的偶数、奇数を確保しさえするよう同じ位置。

注釈

  • 問題の配列、入力配列の長さはゼロであってもよく、これは異常ではありません
  • Javaはその中のパラメータとして機能することができますか?(内部クラスを試してみてください)

次のコードは、奇数奇数と偶数と偶数の間の相対的な変化という保証はありません

public class Solution {
    public void reOrderArray(int [] array) {
        // input check
        if(array.length < 1)
            throw new RuntimeException("invalid input");
        // execute
        int pStart = 0;
        int pEnd = array.length - 1;
        while(pStart < pEnd){
            while(pStart < pEnd && array[pStart]%2==1) // 当array[pStart]能够待在数组靠前的部分时,向后移动pStart,直到array[pStart]不能待在数组的靠前部分
                pStart++;
            while(pStart < pEnd && array[pEnd]%2==0) // 当array[pEnd]能够待在数组靠后的部分时,向前移动pEnd,直到array[pEnd]不能待在数组的靠后部分
                pEnd--;
            if(pStart < pEnd){
                int temp = array[pStart];
                array[pStart] = array[pEnd];
                array[pEnd] = temp;
            }
        }
    }
}

ことを確認コードと奇数奇数、偶数 - 偶数との間の相対的な順序

public class Solution {
    public void reOrderArray(int [] array) {
        // input check 其实不用健壮性检查, 数组问题,可以输入长度为0的数组!
        //if(array.length < 1)
         //   return null;
         
        // execute
        int oddCnt =0;
        int evenCnt = 0;
        int[] arrayEven = new int[array.length];
        for(int i=0; i<array.length; i++){
            if(array[i]%2==1)
                array[oddCnt++] = array[i]; 
            else
                arrayEven[evenCnt++] = array[i];
        }
        evenCnt = 0;
        for(int i=oddCnt; i<array.length; i++) // oddCnt是第一个偶数的索引
            array[i] = arrayEven[evenCnt++];
    }
}

image.png

おすすめ

転載: blog.csdn.net/littlehaes/article/details/91411243