剣はオファーを指します--21。奇数が偶数の前にくるように配列の順序を調整します

トピックは次のとおりです

整数配列を入力し、すべての奇数が配列の前半にあり、すべての偶数が配列の後半にあるように、配列内の数値の順序を調整する関数を実装します。

例:

入力:nums = [1,2,3,4]
出力:[1,3,2,4]
注:[3,1,2,4]も正解の1つです。


独自のアルゴリズムとコード

(アルゴリズムクラスは正しく実行および送信され、主にデータを格納するための新しい配列の作成でメモリ消費量が高くなります)

  • 新しい配列result[]と2つのフラグfirstとを作成lastし、最初の0位置である最初のnums.length-1位置に結果[]を指定します。
  • 配列番号を後ろから前にトラバースします。
    • nums [i]が偶数の場合は、それをresult []の最後の位置に追加し、最後の1つの位置を前方に移動しlast--ます。
    • nums [i]が奇数の場合は、それをresult []の最初の位置に追加し、最後の1つの位置、つまりfirst++;を戻します。
  • 次に、result []を返します。
public class Solution {
    
    

    public static int[] exchange(int[] nums) {
    
    
        int[] result = new int[nums.length];
        int first = 0;
        int last = nums.length-1;
        for (int i = nums.length-1; i >= 0; i--){
    
    
            if (nums[i]%2 == 0){
    
    
                result[last] = nums[i];
                last--;
            }else {
    
    
                result[first] = nums[i];
                first++;
            }
        }
        return result;
    }

    public static void main(String[] args) {
    
    
        int[] nums = {
    
    1,2,3,4};
        int[] result = exchange(nums);
        for (int num : result){
    
    
            System.out.println(num);
        }
    }
}

参照アルゴリズムとコード

ダブルポインタ

  • ヘッドポインタleftとテールポインタを定義しますright
  • 左は、それが指す値が偶数になるまで右に移動されました
  • 右は、それが指す値が奇数になるまで左に移動し続けます
  • 交換nums[left]nums[right]
  • まで上記の操作を繰り返しleft==rightます。
public class Solution {
    
    

    public static int[] exchange1(int[] nums) {
    
    

        int left = 0;
        int right = nums.length-1;
        int temp;
        while (left < right){
    
    
            if (nums[left]%2 != 0){
    
    	//奇数
                left++;
                continue;
            }
            if (nums[right]%2 == 0){
    
     //偶数
                right--;
                continue;
            }
            temp = nums[left];
            nums[left] = nums[right];
            nums[right] = temp;
        }
        return nums;
    }

    public static void main(String[] args) {
    
    
        int[] nums = {
    
    1,2,3,4};
        int[] result = exchange1(nums);
        for (int num : result){
    
    
            System.out.println(num);
        }
    }
}

おすすめ

転載: blog.csdn.net/pary__for/article/details/114481626