Si tiene una entrevista en una empresa como Google o Amazon (y muchos otros ...) que saben que hará preguntas técnicas, ¡entonces ha llegado a un buen lugar para prepararse! En este readme se enumeran un montón de preguntas técnicas de informática que se responderán dentro de paquetes/archivos de clase separados. Cada solución también puede incluir un archivo de demostración asociado que contendrá una clase principal y una demostración de esa solución, ¡se recomienda jugar con estos y aprender sobre todos los casos de esquina!
¡No está organizado así sin razón! Se recomienda tener una buena comprensión de las diferentes estructuras de datos y tipos y búsquedas antes de pasar a problemas generales de entrevistas. Estas serán sus herramientas para ayudar a comprender y resolver diferentes problemas de entrevista. Hacer todo el tipo es opcional, pero se recomienda que tenga una buena comprensión del tipo mínimo de O (NLOGN).
Este ReadMe fue diseñado para ser simple y rápido de navegar usando solo Control-F. Si rápidamente desea saltar a algún lugar del ReadMe, simplemente busque (usando Control-F) en los soportes cuadrados. ¡Asegúrese de que su búsqueda no sea sensible a las minas!
Opciones de búsqueda rápida:
Si encuentra algún error en mi código, y habrá errores, ¡intente arreglarlos como un ejercicio! Una vez que cree que tiene una implementación en funcionamiento, envíeme una solicitud de extracción, siempre aprecio la ayuda amigable :) Si tiene alguna idea para las cosas que quiere agregar, no dude en codificarlo y dispararme una solicitud de extracción, solo mantenga su código limpio, limpie el código o ningún código. De nuevo siempre aprecio la ayuda y gracias de antemano :)
public Queue ( int maxSize )
public void enqueue ( int data )
public int dequeue ()
public int peek ()
public boolean isFull ()
public boolean isEmpty ()
public String toString () public StackQueue ()
public StackQueue ( Type [] list )
public void enqueue ( Type obj )
public Type dequeue ()
public boolean isEmpty () public LinkedList ()
public Node < Type > find ( Type data )
public int getLength ()
public void addDataAtHead ( Type data )
public void addNodeAtHead ( Node < Type > nextNode )
public Node < Type > deleteHead () throws ...
public String toString ()Haga exactamente lo mismo que la pregunta 2, pero use una Lista DoubleLinkeded. Necesitará una nueva clase de nodo
Invierte una lista de sollados individuales, el encabezado del método debería parecer:
public void reverse () // put this method inside your LinkedList class public boolean cyclic () // put this method inside your LinkedList class public Stack ()
public Type pop ()
public void push ( Type data )
public Type peek ()
public String toString () public Heap ( int initialSize )
public Heap ( int [] initialValues )
public void add ( int integer )
public boolean delete ( int integer )
public int peek ()
public int pop ()
public boolean contains ( int integer )
public boolean isEmpty ()
public int size () public PriorityQueue ( int initialSize )
public PriorityQueue ( int [] list )
public void enqueue ( int data )
public int dequeue ()
public int peek ()
public boolean isEmpty () public BinarySearchTree ( Integer data )
public BinarySearchTree ()
public TreeNode find ( Integer searchKey )
public void insert ( TreeNode insertNode )
public boolean delete ( Integer searchKey ) // return true if object deleted, false if object not in list
public void inOrderTraversal ()
public void preOrderTraversal ()
public void postOrderTraversal ()
public TreeNode smallest ()
public TreeNode biggest ()Para todo tipo, analice la velocidad utilizando la notación Big-O. Programar todo tipo como métodos estáticos en clases individuales que tienen un método principal que prueba el tipo
private static void bubbleSort ( int [] list ) private static void selectionSort ( int [] list ) private static void insertionSort ( int [] list ) private static void mergeSort ( int [] list ) private static void quickSort ( int [] list ) private static void shellSort ( int [] list ) private static void countingSort ( int [] list , int startRange , int endRange ) private static void radixSort ( int [] list ) private static void bucketSort ( int [] list ) private static void heapSort ( int [] list ) private static int binarySearchArray ( int [] list , int searchKey )[P1] Implemente factorial recursivamente. Impléntelo nuevamente, pero esta vez usa la recursión de la cola. ¿Qué es la recursión de la cola? ¿Java está optimizado para la recursión de la cola?
[P2] Resuelve el famoso problema de las torres de Hanoi. ¿Es la cola recursiva? ¿Por qué o por qué no?
[P3] Supongo que le doy una variedad de números, digamos que representan los precios de las acciones, me encuentre la mayor cantidad de dinero que podría ganar ese día comprando y vendiendo una sola acción. Si las acciones bajan todo el día, debería encontrarme la menor cantidad de dinero que podría perder ese día. El encabezado del método debe verse como:
private static int bestStockTrade ( int [] stockPrices ) throws ...[P4] Dada una matriz de enteros, por ejemplo, [1, 2, 3, 4], devuelve una matriz donde en cada índice obtiene el resultado de multiplicar por todos los demás valores. P.ej. [1, 2, 3, 4] -> [2x3x4, 1x3x4, 1x2x4, 1x2x3]. No use la división. El encabezado del método debe verse como:
private static int [] productAllButMe ( int [] data ) throws ...[P5] Dada una variedad de enteros, cuál es el producto máximo que podría obtener al multiplicar cualquier 3 de los enteros. El encabezado del método debe verse como:
private static int productOfThree ( int [] data ) throws ...[P6] Dada una variedad de pares de enteros, escriba una función que pasa y vea qué partes de la línea de tiempo están cubiertas. P.ej. Dada la matriz de [(1,4), (2,7), (9,11), (1,3), (12,14)] -> [(1,7), (9,14)]. Podrías imaginar que esto fuera útil si tuviéramos una lista del horario de todos y queríamos ver cuándo todos estaban libres. Para la representación real de la entrada, use la siguiente clase:
class Schedule {
public int startTime ;
public int endTime ;
public Schedule ( int startTime , int endTime ) {
this . startTime = startTime ;
this . endTime = endTime ;
}
@ Override
public String toString () {
return "(" + startTime + " , " + endTime + ")" ;
}
}Para el encabezado del método:
private static List < Schedule > scheduler ( List < Schedule > schedules )[P7] Dada una variedad de personas, donde una persona está representada por una hora de inicio y un tiempo de finalización para su turno de trabajo, devuelva la lista más corta posible de personas donde esas personas ven a todas las demás personas durante sus turnos. Por ejemplo, si se les da a estas personas (1, 2), (2, 10), (5, 6), entonces debe regresar (2, 10) porque esta persona ve a todos los demás durante su turno. Si se da (1, 5), (4, 10), (2, 3), (11, 13) -> (1, 5), (11, 13). Para la representación real de la persona, use la siguiente clase:
class Person {
public int startTime ;
public int finishTime ;
public Person ( int startTime , int finishTime ) {
this . startTime = startTime ;
this . finishTime = finishTime ;
}
@ Override
public String toString () {
return "(" + startTime + " , " + finishTime + ")" ;
}
}Para el encabezado del método:
private static List < Person > selectPeople ( List < Person > people ) throws ...[P8] Dada una variedad de enteros, donde se garantiza que habrá un número que no está duplicado, encuentre ese número. Tenga en cuenta que en esta lista de números acoplados, solo 1 número no tiene duplicado, y cualquier otro número tiene uno y solo un duplicado. Posibles entradas: [1, 2, 2, 3, 3, 4, 4], [2], [3, 7, 3] etc ...
Para el encabezado del método:
private static int uncoupledInteger ( int [] list ) Puntos extra: ¿Puedes hacerlo en memoria constante y tiempo lineal?
[P9] Dada una cadena llena de delimitadores, verifique si la cadena tenía delimitadores equilibrados. Los únicos delimitadores de los que nos preocuparemos en este problema son los siguientes: [] {} (). No hay otros caracteres en esta cadena, excepto los delimitadores. Las siguientes cadenas están equilibradas y deben devolverlo: "", "()", "{} () []", "([{}])". Las siguientes cadenas no están equilibradas y deben devolver falso: "[", "{}}", "{{]}", "{[}]"
Para el encabezado del método:
private static boolean balancedDelimiters ( String delimiters ) [P10] Dada una matriz de enteros y una suma objetivo, haga una función que devuelva verdadera si la suma objetivo es una suma de dos de los enteros en la matriz. Por ejemplo, dada la matriz [1, 2, 3, 4, -100, 0, 0] y el objetivo 5, debería devolver verdadero porque 4 + 1 = 5. Tenga en cuenta que si se diera la misma matriz, pero el objetivo era 8, la respuesta devolvería falsa. No puede agregar un entero a sí mismo para producir el objetivo, debe encontrar dos enteros separados. Tenga en cuenta que estos dos enteros separados podrían tener el mismo valor, por ejemplo. Si se dio la misma matriz pero 0 se dio como el objetivo, debería devolver verdadero porque hay dos enteros en la matriz que suma a 0 - el 0 en el 5º índice y el 0 en el sexto índice.
Para el encabezado del método:
private static boolean targetSummable ( int [] array , int target )