Si vous avez une interview à venir dans une entreprise comme Google ou Amazon (et bien d'autres ...) que vous savez poseront des questions techniques, alors vous êtes venu dans un bon endroit pour vous préparer! Dans cette lecture, il y a un tas de questions techniques en informatique qui seront toutes répondues dans des packages / fichiers de classe séparés. Chaque solution peut également inclure un fichier de démonstration associé qui contiendra une classe principale et une démonstration de cette solution, il est conseillé de jouer avec ceux-ci et de découvrir tous les cas d'angle!
Il n'est pas organisé comme ça sans raison! Il est recommandé d'avoir une bonne compréhension des différentes structures de données et tries et recherches avant de passer à des problèmes d'entrevue généraux. Ce seront vos outils pour vous aider à comprendre et à résoudre différents problèmes d'entrevue. Faire toutes les sortes est facultatif, mais il est recommandé d'avoir une bonne compréhension du type minimum O (NLOGNG).
Cette lecture a été conçue pour être simple et rapide à parcourir en utilisant uniquement le contrôle-f. Si vous souhaitez rapidement sauter quelque part dans le Readme, recherchez simplement (en utilisant Control-F) pour cela dans des crochets. Assurez-vous que votre recherche n'est pas sensible à la casse!
Options de recherche rapide:
Si vous trouvez des erreurs dans mon code et qu'il y aura des erreurs, essayez de les réparer en exercice! Une fois que vous pensez avoir une implémentation de travail, tirez-moi une demande de traction, j'apprécie toujours une aide amicale :) Si vous avez des idées pour les choses que vous voulez ajouter, n'hésitez pas à le coder et à me tirer une demande de traction, veuillez simplement garder votre code propre - un code propre ou pas du tout du code. Encore une fois, j'apprécie toujours l'aide et merci d'avance :)
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 ()Faites exactement la même question 2, mais utilisez une liste de lindelinded. Vous aurez besoin d'une nouvelle classe de nœuds
Inverser une liste de listes individuelles, l'en-tête de la méthode devrait ressembler:
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 ()Pour toutes sortes, analysez la vitesse à l'aide de la notation Big-O. Programmer toutes sortes comme méthodes statiques dans des classes individuelles qui ont chacune une méthode principale qui teste le tri
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] Implémentez factoriel récursivement. Implémentez-le à nouveau, mais utilisez cette fois la récursivité de la queue. Qu'est-ce que la récursivité de la queue? Java est-il optimisé pour la récursivité de la queue?
[P2] Résolvez les célèbres tours de Hanoi. Est-ce que la queue est récursive? Pourquoi ou pourquoi pas?
[P3] En supposant que je vous donne un éventail de chiffres, disons qu'ils représentent les cours des actions, me trouvent le plus d'argent que vous pourriez gagner ce jour-là en achetant et en vendant un seul stock. Si les actions diminuent toute la journée, vous devriez me trouver le moins d'argent que je pourrais perdre ce jour-là. L'en-tête de la méthode doit ressembler:
private static int bestStockTrade ( int [] stockPrices ) throws ...[P4] Étant donné un tableau d'entiers, par exemple [1, 2, 3, 4], renvoyez un tableau où à chaque index vous obtenez le résultat de la multiplication par toutes les autres valeurs. Par exemple, par exemple [1, 2, 3, 4] -> [2x3x4, 1x3x4, 1x2x4, 1x2x3]. N'utilisez pas la division. L'en-tête de la méthode doit ressembler:
private static int [] productAllButMe ( int [] data ) throws ...[P5] Compte tenu d'un tableau d'entiers, quel est le produit maximum que vous pourriez obtenir en multipliant les 3 entiers. L'en-tête de la méthode doit ressembler:
private static int productOfThree ( int [] data ) throws ...[P6] Compte tenu d'un tableau de paires d'entiers, écrivez une fonction qui passe et voyez quelles parties de la chronologie sont couvertes. Par exemple, par exemple Étant donné le tableau de [(1,4), (2,7), (9,11), (1,3), (12,14)] -> [(1,7), (9,14)]. Vous pouvez imaginer que cela était utile si nous avions une liste des horaires de tout le monde et que nous voulions voir quand tout le monde était libre. Pour la représentation réelle de l'entrée, utilisez la classe suivante:
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 + ")" ;
}
}Pour l'en-tête de la méthode:
private static List < Schedule > scheduler ( List < Schedule > schedules )[P7] Compte tenu d'un éventail de personnes, où une personne est représentée par un temps de départ et un temps de fin pour son quart de travail, renvoyez la liste la plus courte possible des personnes où ces personnes voient toutes les autres personnes pendant leurs quarts de travail. Par exemple, si on lui donne ces personnes (1, 2), (2, 10), (5, 6), vous devriez revenir (2, 10) parce que cette personne voit tout le monde pendant son quart de travail. Si donné (1, 5), (4, 10), (2, 3), (11, 13) -> (1, 5), (11, 13). Pour la représentation réelle de la personne, utilisez la classe suivante:
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 + ")" ;
}
}Pour l'en-tête de la méthode:
private static List < Person > selectPeople ( List < Person > people ) throws ...[P8] Compte tenu d'un tableau d'entiers, où il est garanti un numéro qui n'est pas dupliqué, trouvez ce numéro. Notez que dans cette liste de nombres couplés, un seul numéro n'a pas de double et tous les autres numéros en ont un et un seul duplicata. Entrées possibles: [1, 2, 2, 3, 3, 4, 4], [2], [3, 7, 3] etc ...
Pour l'en-tête de la méthode:
private static int uncoupledInteger ( int [] list ) Points supplémentaires: pouvez-vous le faire en mémoire constante et en temps linéaire?
[P9] Compte tenu d'une chaîne pleine de délimiteurs, vérifiez si la chaîne avait des délimiteurs équilibrés. Les seuls délimiteurs dont nous nous inquiéterons dans ce problème sont les suivants: [] {} (). Il n'y a pas d'autres caractères dans cette chaîne à l'exception des délimiteurs. Les chaînes suivantes sont équilibrées et doivent retourner vrai: "", "()", "{} () []", "([{}])". Les chaînes suivantes ne sont pas équilibrées et doivent retourner false: "[", "{}}", "{{]}", "{[}]"
Pour l'en-tête de la méthode:
private static boolean balancedDelimiters ( String delimiters ) [P10] Compte tenu d'un tableau d'entiers et d'une somme cible, faites une fonction qui renvoie vrai si la somme cible est une somme de deux des entiers dans le tableau. Par exemple, étant donné le tableau [1, 2, 3, 4, -100, 0, 0] et la cible 5, il doit revenir vrai car 4 + 1 = 5. Notez que si le même tableau était donné, mais la cible était de 8, la réponse retournerait fausse. Vous ne pouvez pas ajouter un entier à lui-même pour produire la cible, vous devez trouver deux entiers distincts. Notez que ces deux entiers distincts pourraient avoir la même valeur, par exemple. Si le même tableau était donné mais que 0 a été donné comme cible, il doit retourner vrai car il y a deux entiers dans le tableau qui diminuent à 0 - le 0 dans le 5ème index et le 0 dans le 6ème index.
Pour l'en-tête de la méthode:
private static boolean targetSummable ( int [] array , int target )