Trucos de Java para la programación competitiva (para Java 8)

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));
    }
}
Producción

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: 

  1. Arrays.sort() utilizado para ordenar elementos de una array. 
  2. 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: 

  1. Arrays.binarySearch()( SET 1 | SET2 ) utilizado para aplicar la búsqueda binaria en una array ordenada. 
  2. Collections.binarySearch() utilizado para aplicar búsqueda binaria en una colección basada en comparadores.

13) Algoritmo de copia: 

  1. Arrays.copyOf() y copyOfRange() copian la array especificada. 
  2. 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);
    }
}
Producción

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *