Google 또는 Amazon과 같은 회사 (및 다른 많은 것들)에서 기술적 인 질문을 할 것이라는 인터뷰가 있다면, 자신을 준비하기에 좋은 곳으로 왔습니다! 이 readme에는 별도의 패키지/클래스 파일 내에서 모두 답변 할 기술 컴퓨터 과학 질문이 많이 있습니다. 각 솔루션은 또한 메인 클래스와 해당 솔루션을 포함하는 관련 데모 파일이 포함될 수 있으며, 이들은 이러한 솔루션을 가지고 놀고 모든 코너 케이스에 대해 배우는 것이 좋습니다!
아무 이유없이 이와 같이 조직되지 않습니다! 일반적인 인터뷰 문제로 넘어 가기 전에 다양한 데이터 구조와 정렬 및 검색을 잘 이해하는 것이 좋습니다. 이것들은 다른 인터뷰 문제를 이해하고 해결하는 데 도움이되는 도구가 될 것입니다. 모든 종류를 수행하는 것은 선택 사항이지만 최소 One (nlogn) 정렬에서 잘 이해하는 것이 좋습니다.
이 readme는 Control-F 만 사용하여 간단하고 빠르게 탐색하도록 설계되었습니다. README 어딘가에 빠르게 점프하고 싶다면 정사각형 괄호로 (Control-F 사용)를 검색하십시오. 검색이 사례에 민감하지 않은지 확인하십시오!
빠른 검색 옵션 :
내 코드에서 실수를 발견하고 실수가 발생하면 운동으로 고치십시오! 작업 구현이 있다고 생각하면 풀 요청을 촬영하십시오. 항상 친절한 도움을 주시면 감사합니다. :) 추가하고자하는 것들에 대한 아이디어가 있으면 자유롭게 코딩하고 풀 요청을 촬영하십시오. 코드를 깨끗하게 유지하십시오 - 클린 코드 또는 코드가 전혀 없습니다. 다시 한 번 나는 항상 도움과 미리 감사합니다 :)
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 ()질문 2와 똑같이 수행하지만 DoublelinkedList를 사용하십시오. 새 노드 클래스가 필요합니다
단일 링크리스트를 반대로, 메소드 헤더는 다음과 같아야합니다.
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 ()모든 종류의 경우 Big-O 표기법을 사용하여 속도를 분석하십시오. 개별 클래스에서 모든 종류의 정적 메소드로 프로그램 각각을 테스트하는 주요 방법이 있습니다.
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]는 재귀 적으로 계승을 구현한다. 다시 구현하지만 이번에는 꼬리 재귀를 사용하십시오. 꼬리 재귀 란 무엇입니까? Java는 꼬리 재귀에 최적화되어 있습니까?
[P2] 유명한 하노이 문제를 해결하십시오. 꼬리는 재귀입니까? 왜 또는 왜 그렇지 않습니까?
[p3] 내가 당신에게 여러 숫자를 주었다고 가정하면, 그들이 주가를 나타내고, 단일 주식을 사고 팔면서 그 날에 만들 수있는 가장 많은 돈을 찾으십시오. 하루 종일 주식이 줄어들면 그날 잃을 수있는 최소한의 금액을 찾아야합니다. 메소드 헤더는 다음과 같아야합니다.
private static int bestStockTrade ( int [] stockPrices ) throws ...[P4] 예를 들어 [1, 2, 3, 4]의 정수 배열이 주어지면 각 인덱스에서 다른 모든 값을 곱한 결과를 얻는 배열을 반환합니다. 예를 들어. [1, 2, 3, 4] -> [2x3x4, 1x3x4, 1x2x4, 1x2x3]. 부서를 사용하지 마십시오. 메소드 헤더는 다음과 같아야합니다.
private static int [] productAllButMe ( int [] data ) throws ...[P5] 정수 배열이 주어지면 3 개의 정수를 곱하면 얻을 수있는 최대 제품은 무엇입니까? 메소드 헤더는 다음과 같아야합니다.
private static int productOfThree ( int [] data ) throws ...[p6] 정수 쌍의 배열이 주어지면, 타임 라인의 어떤 부분이 덮여 있는지 확인하는 함수를 작성하고 어떤 부분이 덮여 있는지 확인하십시오. 예를 들어. [(1,4), (2,7), (9,11), (1,3), (12,14)] -> [(1,7), (9,14)의 배열이 주어지면. 우리가 모든 사람 일정 목록을 가지고 있다면 이것이 유용하다고 생각할 수 있으며 모든 사람이 자유 일 때를보고 싶었습니다. 입력의 실제 표현은 다음 클래스를 사용하십시오.
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 + ")" ;
}
}메소드 헤더의 경우 :
private static List < Schedule > scheduler ( List < Schedule > schedules )[P7] 사람이 출발 시간과 마무리 시간으로 대표되는 사람들의 배열이 주어지면, 그 사람들이 교대 근무하는 동안 다른 모든 사람들을 볼 수있는 가장 짧은 목록을 반환합니다. 예를 들어,이 사람들에게 (1, 2), (2, 10), (5, 6) 주어지면이 사람이 교대하는 동안 다른 모든 사람들을 볼 수 있기 때문에 (2, 10) 돌아와야합니다 (2, 10). (1, 5), (4, 10), (2, 3), (11, 13) -> (1, 5), (11, 13)가 주어지면. 사람의 실제 표현은 다음 수업을 사용하십시오.
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 + ")" ;
}
}메소드 헤더의 경우 :
private static List < Person > selectPeople ( List < Person > people ) throws ...[P8]는 복제되지 않은 숫자가 하나 인 정수 배열이 주어지면 해당 숫자를 찾으십시오. 이 결합 숫자 목록에서 1 개의 숫자 만 복제가 없으며 다른 숫자는 하나의 복제본 만 있습니다. 가능한 입력 : [1, 2, 2, 3, 3, 4, 4], [2], [3, 7, 3] 등 ...
메소드 헤더의 경우 :
private static int uncoupledInteger ( int [] list ) 추가 포인트 : 일정한 메모리와 선형 시간으로 할 수 있습니까?
[P9] 구분자로 가득 찬 문자열이 주어지면 문자열에 균형 잡힌 구분자가 있는지 확인하십시오. 이 문제에서 우리가 걱정할 유일한 구분 제는 다음과 같습니다. [] {} (). 이 문자열에는 구분자를 제외하고 다른 문자가 없습니다. 다음 문자열은 균형을 잡고 "", "()", "{} () []", "([{}])"을 반환해야합니다. 다음 문자열은 균형이 맞지 않으며 "[", "{}}", "{{]}", "{[}]"를 거짓으로 반환해야합니다.
메소드 헤더의 경우 :
private static boolean balancedDelimiters ( String delimiters ) [P10] 정수 배열과 대상 합이 주어지면, 대상 합이 배열의 정수 중 두 가지의 합인 경우 true를 반환하는 함수를 만듭니다. 예를 들어, 배열 [1, 2, 3, 4, -100, 0, 0]과 대상 5를 고려할 때 4 + 1 = 5이기 때문에 true를 반환해야합니다. 동일한 배열이 주어졌지만 대상이 8이면 대답은 False를 반환합니다. 대상을 생성하기 위해 정수를 추가 할 수 없으며 두 개의 별도 정수를 찾아야합니다. 이 두 개의 별도의 정수는 동일한 값을 가질 수 있습니다. 동일한 배열이 제공되었지만 0이 대상으로 주어진 경우 배열에 합계에 5 번째 인덱스의 0, 6 번째 인덱스에서 0이기 때문에 두 개의 정수가 있기 때문에 true를 반환해야합니다.
메소드 헤더의 경우 :
private static boolean targetSummable ( int [] array , int target )