Directorio de artículos
Enlace del tema y descripción.
https://leetcode.cn/problems/maximum-swap/
Dado un número entero no negativo, puedes intercambiar dos dígitos cualesquiera del número como máximo una vez. Devuelve el valor máximo que puedes obtener.
Ejemplo 1:
Entrada: 2736
Salida: 7236
Explicación: Intercambie el número 2 y el número 7.
Ejemplo 2:
Entrada: 9973
Salida: 9973
Explicación: No se requiere intercambio.
Aviso:
El rango del número dado es [0, 10^8]
Palabras clave: intercambio de valor codicioso
método uno:
ejecutar captura de pantalla
el código
Para hacer que el número sea el más grande, es fácil pensar en poner los números más grandes al frente y los números más pequeños detrás, recorrerlo una vez, tomar los n dígitos más grandes y compararlos.
Cambia la forma de pensar, porque el número más grande siempre debe estar delante del grande, y el pequeño detrás; y solo podemos coger uno, por lo que sólo necesitamos encontrar el número más grande e intercambiarlo con el de delante. valor que es menor que el frente
public int maximumSwap(int num) {
char[] charArray = String.valueOf(num).toCharArray();
int n = charArray.length;
int maxIdx = n - 1;
int idx1 = -1, idx2 = -1;
for (int i = maxIdx; i >= 0; i--) {
if (charArray[i] > charArray[maxIdx]) {
maxIdx = i;
} else if (charArray[i] < charArray[maxIdx]) {
idx1 = i;
idx2 = maxIdx;
}
}
if (idx1 >= 0) {
swap(charArray, idx1, idx2);
return Integer.parseInt(new String(charArray));
} else {
return num;
}
}
public void swap(char[] charArray, int i, int j) {
char temp = charArray[i];
charArray[i] = charArray[j];
charArray[j] = temp;
}
fin
Bienvenido a comunicarse en el área de comentarios, registrarse todos los días y ¡apresúrate! ! !