Aunque la práctica es la única forma que garantiza un mayor rendimiento en los concursos de programación, tener algunos trucos bajo la manga garantiza una ventaja superior y una depuración rápida.
1) Comprobar si el número es par o impar sin usar el operador %:
aunque este truco no es mucho mejor que usar un operador %, pero a veces es eficiente (con números grandes).
Uso y operador:
System.out.println((a & 1) == 0 ? "EVEN" : "ODD" );
Ejemplo:
num = 5 Binary: "101 & 1" will be 001, so false num = 4 Binary: "100 & 1" will be 000, so true.
2) Multiplicación Rápida o División por 2
Multiplicar por 2 significa desplazar todos los bits a la izquierda y dividir por 2 significa desplazar a la derecha.
Ejemplo: 2 (Binario 10): desplazamiento a la izquierda 4 (Binario 100) y a la derecha 1 (Binario 1)
n = n << 1; // Multiply n with 2 n = n >> 1; // Divide n by 2
3) Intercambio de 2 números usando XOR:
Este método es rápido y no requiere el uso de la tercera variable.
// A quick way to swap a and b a ^= b; b ^= a; a ^= b;
4) E/S más rápida:
Consulte aquí para E/S rápida en Java
5) Para manipulaciones de strings:
Use StringBuffer para manipulaciones de strings, ya que String en Java es inmutable. Consulte aquí .
6) Cálculo del dígito más significativo:
Para calcular el dígito más significativo de cualquier número, el registro se puede usar directamente para calcularlo.
Suppose the number is N then Let double K = Math.log10(N); now K = K - Math.floor(K); int X = (int)Math.pow(10, K); X will be the most significant digit.
7) Calcular el número de dígitos directamente:
Para calcular la cantidad de dígitos en un número, en lugar de hacer un bucle, podemos usar log :
No. of digits in N = Math.floor(Math.log10(N)) + 1;
8) Método GCD incorporado:
Java ha incorporado el método GCD en la clase BigInteger . Devuelve un BigInteger cuyo valor es el máximo común divisor de abs(this) y abs(val). Devuelve 0 si esto==0 && val==0.
Sintaxis:
public BigInteger gcd(BigInteger val) Parameters : val - value with which the GCD is to be computed. Returns : GCD(abs(this), abs(val))
A continuación se muestra la implementación de GCD:
Java
// Java program to demonstrate how // to use gcd method of BigInteger class import java.math.BigInteger; class Test { public static int gcd(int a, int b) { BigInteger b1 = BigInteger.valueOf(a); BigInteger b2 = BigInteger.valueOf(b); BigInteger gcd = b1.gcd(b2); return gcd.intValue(); } public static long gcd(long a, long b) { BigInteger b1 = BigInteger.valueOf(a); BigInteger b2 = BigInteger.valueOf(b); BigInteger gcd = b1.gcd(b2); return gcd.longValue(); } // Driver method public static void main(String[] args) { System.out.println(gcd(3, 5)); System.out.println(gcd(10000000000L, 600000000L)); } }
1 200000000
9) buscar un número primo:
Java tiene un método isProbablePrime() incorporado en la clase BigInteger . Devuelve verdadero si este BigInteger es probablemente primo (con cierta certeza), falso si definitivamente es compuesto.
BigInteger.valueOf(1235).isProbablePrime(1)
10) Truco eficiente para saber si un número es potencia de 2 :
La técnica normal de división la complejidad resulta ser O(logN), pero se puede resolver usando O(v) donde v es el número de dígitos del número en forma binaria.
Java
/* Method to check if x is power of 2*/ static boolean isPowerOfTwo (int x) { /* First x in the below expression is for the case when x is 0 */ return x!=0 && ((x&(x-1)) == 0); }
11) Algoritmo de clasificación:
- Arrays.sort() utilizado para ordenar elementos de una array.
- Collections.sort() utilizado para ordenar elementos de una colección.
Para las primitivas, Arrays.sort() usa algoritmos de clasificación rápida de doble pivote .
12) Algoritmo de búsqueda:
- Arrays.binarySearch()( SET 1 | SET2 ) utilizado para aplicar la búsqueda binaria en una array ordenada.
- Collections.binarySearch() utilizado para aplicar búsqueda binaria en una colección basada en comparadores.
13) Algoritmo de copia:
- Arrays.copyOf() y copyOfRange() copian la array especificada.
- Collections.copy() copia la colección especificada.
14) Rotación y Frecuencia
Podemos usar Collections.rotate() para rotar una colección o una array en una distancia específica. También puede usar el método Collections.frequency() para obtener la frecuencia de un elemento específico en una colección o array.
15) La mayoría de las estructuras de datos ya están implementadas en Collections Framework .
Por ejemplo , Stack , LinkedList , HashSet , HashMaps , Heaps , etc.
16) Use las funciones de la clase Wrapper para obtener conversiones de radix de un número . A veces, necesita la conversión de radix de un número. Para esto, puede usar clases contenedoras.
Java
// Java program to demonstrate use of wrapper // classes for radix conversion class Test { // Driver method public static void main(String[] args) { int a = 525; long b = 12456545645L; String binaryA = Integer.toString(a, 2); System.out.println("Binary representation" + " of A : " + binaryA); String binaryB = Long.toString(b, 2); System.out.println("Binary representation" + " of B : " + binaryB); String octalA = Integer.toString(a, 8); System.out.println("Octal representation" + " of A : " + octalA); String octalB = Long.toString(b, 8); System.out.println("Octal representation" + " of B : " + octalB); } }
Binary representation of A : 1000001101 Binary representation of B : 1011100110011101111100110101101101 Octal representation of A : 1015 Octal representation of B : 134635746555
17) NullPointerException (¿Por qué?) Consulte aquí y aquí para evitarlo.
Este artículo es una contribución de Gaurav Miglani . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA