Sword se refiere a Offer—— 21. Ajusta el orden de la matriz para que los números impares estén delante de los números pares

El tema es el siguiente

Ingrese una matriz de enteros e implemente una función para ajustar el orden de los números en la matriz de modo que todos los números impares estén en la primera mitad de la matriz y todos los números pares estén en la segunda mitad de la matriz.

Ejemplo:

Entrada: nums = [1,2,3,4]
Salida: [1,3,2,4]
Nota: [3,1,2,4] también es una de las respuestas correctas.


Algoritmo y código propios

(La clase de algoritmo se ejecuta y envía correctamente, y el consumo de memoria es alto, principalmente en la creación de una nueva matriz para almacenar datos)

  • Cree una nueva matriz result[]y dos banderas firsty last, apuntando al resultado [] en la primera 0posición, la primera nums.length-1posición.
  • Recorre los números de matriz de atrás hacia adelante.
    • Si nums [i] es un número par, agréguelo a la última posición del resultado [] y mueva la última posición hacia adelante, es decir last--;
    • Si nums [i] es un número impar, agréguelo a la primera posición del resultado [] y mueva la última posición hacia atrás, es decir first++;
  • Luego devuelve el resultado [].
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);
        }
    }
}

Algoritmo y código de referencia

Puntero doble

  • Definir puntero de cabeza lefty puntero de cola right.
  • a la izquierda se ha movido a la derecha hasta que el valor al que apunta sea par
  • la derecha sigue moviéndose hacia la izquierda hasta que el valor al que apunta es un número impar
  • Exchange nums[left]y nums[right].
  • Repita las operaciones anteriores hasta que 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);
        }
    }
}

Supongo que te gusta

Origin blog.csdn.net/pary__for/article/details/114481626
Recomendado
Clasificación