Cómic: ¿Qué es el algoritmo de orden del diccionario?

Cómic: ¿Qué es el algoritmo de orden del diccionario?

Haga clic en el "Programador Xiaohui" arriba y seleccione la "Cuenta oficial superior". ¡
Los artículos interesantes y significativos se entregarán lo antes posible!

Cómic: ¿Qué es el algoritmo de orden del diccionario?
Cómic: ¿Qué es el algoritmo de orden del diccionario?

----- el día siguiente-----
Cómic: ¿Qué es el algoritmo de orden del diccionario?

Cómic: ¿Qué es el algoritmo de orden del diccionario?
Cómic: ¿Qué es el algoritmo de orden del diccionario?

Tema del algoritmo:

Dado un entero positivo, implemente un método para encontrar el "número de transposición" más cercano al entero mayor que él mismo.

¿Qué es la transposición? Es ordenar todos los dígitos de un entero para obtener un nuevo entero. Por ejemplo, 53241 y 23541.

Xiao Hui no sabe cómo llamar a este tipo de entero transpuesto, así que llamémoslo "número transpuesto".

El título requiere escribir un método para encontrar la transposición más cercana mayor que él mismo. Por ejemplo:

Ingrese 12345, regrese 12354,
ingrese 12354, regrese 12435,
ingrese 12435, regrese 12453
Cómic: ¿Qué es el algoritmo de orden del diccionario?

Cómic: ¿Qué es el algoritmo de orden del diccionario?

Las "reglas" descubiertas por Xiao Hui:

Ingrese 12345 y devuelva 12354
12354-12345 = 9
es exactamente la potencia de 9

Ingrese 12354 y devuelva 12435
12435-12354 = 81 que
es exactamente el cuadrado de 9

Entonces, cada vez que calcule la transposición más cercana, ¿solo necesita agregar 9 a la enésima potencia?

Cómic: ¿Qué es el algoritmo de orden del diccionario?
Cómic: ¿Qué es el algoritmo de orden del diccionario?
Cómic: ¿Qué es el algoritmo de orden del diccionario?
Cómic: ¿Qué es el algoritmo de orden del diccionario?

————————————
Cómic: ¿Qué es el algoritmo de orden del diccionario?

Cómic: ¿Qué es el algoritmo de orden del diccionario?
Cómic: ¿Qué es el algoritmo de orden del diccionario?
Cómic: ¿Qué es el algoritmo de orden del diccionario?

Cómic: ¿Qué es el algoritmo de orden del diccionario?

Cómic: ¿Qué es el algoritmo de orden del diccionario?

Regala una castaña:

Dados los números 1, 2, 3, 4 y 5.
Combinación más grande: 54321
Combinación más pequeña: 12345

Cómic: ¿Qué es el algoritmo de orden del diccionario?

Por ejemplo, dado el entero 12354, ¿cómo encontrar la transposición más cercana y mayor que él?

Para estar cerca del número original, necesitamos mantener el orden alto sin cambios y el orden bajo para cambiar el orden dentro del rango más pequeño.

Entonces, ¿cuántos bits se deben convertir? Esto depende del área de orden inverso del entero actual.
Cómic: ¿Qué es el algoritmo de orden del diccionario?

Si se muestra, el área de orden inverso de 12354 son los dos últimos dígitos, solo mire la combinación máxima actual de estos dos dígitos. Si desea ser el más cercano al número original y mayor que el número original, debe cambiar del tercero al último.

¿Cómo cambiarlo? Los últimos 3 dígitos de 12345 son 3, necesitamos encontrar el número un poco mayor que 3 en el área de orden inverso e intercambiar la posición con 3:
Cómic: ¿Qué es el algoritmo de orden del diccionario?

El resultado temporal después del intercambio es 12453 y se han determinado los últimos tres dígitos. En este momento, los últimos dos dígitos todavía están en orden inverso. Necesitamos volver a convertir los dos últimos dígitos en orden para asegurarnos de que los dos últimos dígitos sean lo más pequeños posible cuando el valor del penúltimo dígito es 4:

Cómic: ¿Qué es el algoritmo de orden del diccionario?

De esta forma, obtenemos el resultado deseado 12435.
Cómic: ¿Qué es el algoritmo de orden del diccionario?
Cómic: ¿Qué es el algoritmo de orden del diccionario?

//主流程,返回最近一个大于自身的相同数字组成的整数。
public static int[] findNearestNumber(int[] numbers){
   //拷贝入参,避免直接修改入参
   int[] numbersCopy = Arrays.copyOf(numbers, numbers.length);
   //1.从后向前查看逆序区域,找到逆序区域的前一位,也就是数字置换的边界
   int index = findTransferPoint(numbersCopy);
   //如果数字置换边界是0,说明整个数组已经逆序,无法得到更大的相同数字组成的整数,返回自身
   if(index == 0){
       return null;
   }
   //2.把逆序区域的前一位和逆序区域中刚刚大于它的数字交换位置
   exchangeHead(numbersCopy, index);
   //3.把原来的逆序区域转为顺序
   reverse(numbersCopy, index);
   return numbersCopy;
}
private static int findTransferPoint(int[] numbers){
   for(int i=numbers.length-1; i>0; i--){
       if(numbers[i] > numbers[i-1]){
          return i;
       }
   }
   return 0;
}
private  static int[] exchangeHead(int[] numbers, int index){
   int head = numbers[index-1];
   for(int i=numbers.length-1; i>0; i--){
       if(head < numbers[i]){
           numbers[index-1] =  numbers[i];
           numbers[i] = head;
           break;
       }
   }
   return numbers;
}

private static int[] reverse(int[] num, int index){
   for(int i=index,j=num.length-1; i<j; i++,j--){
       int temp = num[i];
       num[i] = num[j];
       num[j] = temp;
   }
   return num;
}
public static void main(String[] args) {
   int[] numbers = {1,2,3,4,5};
   for(int i=0; i<10;i++){
       numbers = findNearestNumber(numbers);
       outputNumbers(numbers);
   }
}
//输出数组
privte static void outputNumbers(int[] numbers){
   for(int i : numbers){
      System.out.print(i);
   }
   System.out.println();

Tres pasos para obtener la transposición más cercana:

1. Mire el área de orden inverso de atrás hacia adelante y encuentre el bit anterior del área de orden inverso, que es el límite del reemplazo del número.
2. Cambie el bit anterior del área de orden inverso con el número un poco mayor que este en el área de orden inverso
3. Invierta el orden original Región para secuenciar
Cómic: ¿Qué es el algoritmo de orden del diccionario?

Esta solución tiene un nombre alto: algoritmo de orden de diccionario.
Cómic: ¿Qué es el algoritmo de orden del diccionario?

Cómic: ¿Qué es el algoritmo de orden del diccionario?

Cómic: ¿Qué es el algoritmo de orden del diccionario?

Algunas adiciones:

Este cómic es puramente entretenimiento. Aprecia tu trabajo actual tanto como sea posible y no imites el comportamiento de Xiao Hui.

-----FIN-----
Cómic: ¿Qué es el algoritmo de orden del diccionario?

Amigos a los que les gusta este artículo, mantengan presionada la imagen para seguir al programador de cuentas de suscripción Xiaohui y ver más contenido emocionante.

Cómic: ¿Qué es el algoritmo de orden del diccionario?

Supongo que te gusta

Origin blog.51cto.com/14982143/2550754
Recomendado
Clasificación