Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?

Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?

Cliquez sur "Programmer Xiaohui" ci-dessus, et sélectionnez le "Top Official Account".
Des articles intéressants et significatifs seront livrés dès que possible!

Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?
Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?

----- le lendemain-----
Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?

Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?
Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?

Sujet de l'algorithme:

Étant donné un entier positif, implémentez une méthode pour trouver le "nombre de transposition" le plus proche de l'entier supérieur à lui-même.

Qu'est-ce que la transposition? Il s'agit d'arranger tous les chiffres d'un entier pour obtenir un nouvel entier. Par exemple, 53241 et 23541.

Xiao Hui ne sait pas comment appeler ce type d'entier transposé, appelons-le donc "nombre transposé".

Le titre nécessite d'écrire une méthode pour trouver la transposition la plus proche supérieure à elle-même. Par exemple:

Entrez 12345, retournez 12354,
saisissez 12354, retournez 12435,
saisissez 12435, retournez 12453
Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?

Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?

Les "règles" découvertes par Xiao Hui:

Entrez 12345 et renvoyez 12354
12354-12345 = 9
est exactement la puissance de 9

Entrez 12354 et renvoyez 12435
12435-12354 = 81 qui
est exactement le carré de 9

Ainsi, chaque fois que vous calculez la transposition la plus proche, il vous suffit d'ajouter 9 à la Nième puissance?

Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?
Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?
Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?
Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?

————————————
Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?

Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?
Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?
Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?

Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?

Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?

Donnez une châtaigne:

Étant donné les nombres 1, 2, 3, 4 et 5.
La plus grande combinaison: 54321 La
plus petite combinaison: 12345

Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?

Par exemple, étant donné l'entier 12354, comment trouver la transposition la plus proche et supérieure à elle?

Afin d'être proche du nombre d'origine, nous devons garder l'ordre supérieur inchangé et l'ordre inférieur pour changer l'ordre dans la plus petite plage.

Alors, combien de bits doivent être convertis? Cela dépend de la zone d'ordre inverse de l'entier actuel.
Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?

Si elle est affichée, la zone d'ordre inverse de 12354 correspond aux deux derniers chiffres, il suffit de regarder la combinaison maximale actuelle de ces deux chiffres. Si vous voulez être le plus proche du nombre d'origine et plus grand que le nombre d'origine, vous devez passer du troisième au dernier.

Comment le changer? Les 3 derniers chiffres de 12345 sont 3, nous devons trouver le nombre juste supérieur à 3 dans la zone d'ordre inverse et l'échanger avec la position 3:
Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?

Le résultat temporaire après l'échange est 12 453. Les trois derniers chiffres ont été déterminés. À ce stade, les deux derniers chiffres sont toujours dans l'ordre inverse. Nous devons reconvertir les deux derniers chiffres dans l'ordre pour nous assurer que les deux derniers chiffres sont aussi petits que possible lorsque la valeur du troisième au dernier chiffre est 4:

Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?

De cette manière, nous obtenons le résultat souhaité 12435.
Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?
Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?

//主流程,返回最近一个大于自身的相同数字组成的整数。
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();

Trois étapes pour obtenir la transposition la plus proche:

1. Examinez la zone d'ordre inverse de l'arrière vers l'avant et trouvez le bit précédent de la zone d'ordre inverse, qui est la limite du remplacement du numéro.
2. Échangez le bit précédent de la zone d'ordre inverse avec le nombre juste supérieur à lui dans la zone d'ordre inverse
3. Inversez l'ordre d'origine Région à séquencer
Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?

Cette solution a un nom élevé: l'algorithme d'ordre du dictionnaire.
Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?

Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?

Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?

Quelques ajouts:

Cette bande dessinée est purement divertissante. Chérissez autant que possible votre travail actuel et n'imitez pas le comportement de Xiao Hui.

-----FIN-----
Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?

Amis qui aiment cet article, veuillez appuyer et maintenir l'image pour suivre le programmeur de compte d'abonnement Xiaohui et regarder du contenu plus passionnant

Bande dessinée: Quel est l'algorithme d'ordre du dictionnaire?

Je suppose que tu aimes

Origine blog.51cto.com/14982143/2550754
conseillé
Classement