Anki 플래시카드를 사용하여 지속적으로 업데이트되는 120개 이상의 대화형 테스트 기반 코딩 과제 .
과제는 코딩 인터뷰 에서 발견된 알고리즘 과 데이터 구조 에 중점을 둡니다.
각 챌린지에는 다음과 같은 하나 이상의 참조 솔루션이 있습니다.
챌린지는 곧 최적의 솔루션에 도달하는 데 도움이 되는 온디맨드 증분 힌트를 제공할 것입니다.
노트북에는 다음 사항도 자세히 설명되어 있습니다.
또한 다양한 데이터 구조 및 알고리즘의 단위 테스트된 참조 구현 도 포함되어 있습니다.
제공된 Anki 플래시카드 데크는 간격을 둔 반복을 사용하여 핵심 개념을 유지하는 데 도움을 줍니다.
이동 중에도 사용하기에 좋습니다.
시스템 디자인 및 객체 지향 디자인 인터뷰 를 준비하는 데 도움이 되는 리소스를 찾고 계십니까?
추가 Anki 데크가 포함된 자매 저장소인 The System Design Primer를 확인하세요.
각 챌린지에는 해결해야 할 단위 테스트가 포함된 챌린지 노트북 과 참조 용 솔루션 노트북이라는 두 개의 노트북이 있습니다.
형식 : 챌린지 카테고리 - 챌린지 횟수
총 챌린지 수: 120
다음 데이터 구조의 단위 테스트를 거쳐 완전한 기능을 구현합니다.
단위 테스트를 거쳐 다음 알고리즘의 완전한 기능 구현:
이미지 크레딧
도전 | 정적 노트북 |
---|---|
문자열에 고유한 문자가 포함되어 있는지 확인 | 과제 │ 솔루션 |
문자열이 다른 문자열의 순열인지 확인 | 과제 │ 솔루션 |
문자열이 다른 문자열의 회전인지 확인 | 과제 │ 솔루션 |
문자열 압축 | 과제 │ 솔루션 |
문자열의 역방향 문자 | 과제 │ 솔루션 |
두 개의 문자열이 주어지면 단일 다른 문자를 찾으십시오. | 과제 │ 솔루션 |
특정 값을 합산하는 두 개의 지수 찾기 | 과제 │ 솔루션 |
해시 테이블 구현 | 과제 │ 솔루션 |
Fizz Buzz 구현 | 과제 │ 솔루션 |
문자열에서 반복되지 않는 첫 번째 문자 찾기 | 기여 │ 기여 |
문자열에서 지정된 문자 제거 | 기여 │ 기여 |
문자열의 단어 반전 | 기여 │ 기여 |
문자열을 정수로 변환 | 기여 │ 기여 |
정수를 문자열로 변환 | 기여 │ 기여 |
챌린지 추가 | 기여 │ 기여 |
도전 | 정적 노트북 |
---|---|
연결된 목록에서 중복 항목 제거 | 과제 │ 솔루션 |
연결리스트의 마지막 요소 k번째 찾기 | 과제 │ 솔루션 |
연결리스트 중간에 있는 노드 삭제 | 과제 │ 솔루션 |
주어진 값을 중심으로 연결 리스트를 분할합니다. | 과제 │ 솔루션 |
연결된 목록에 숫자가 저장된 두 개의 숫자를 추가합니다. | 과제 │ 솔루션 |
연결리스트 루프의 시작 찾기 | 과제 │ 솔루션 |
연결리스트가 회문인지 확인 | 과제 │ 솔루션 |
연결리스트 구현 | 과제 │ 솔루션 |
목록이 순환인지 비순환인지 확인 | 기여 │ 기여 |
챌린지 추가 | 기여 │ 기여 |
도전 | 정적 노트북 |
---|---|
단일 배열을 사용하여 n개의 스택 구현 | 과제 │ 솔루션 |
최소 요소를 추적하는 스택 구현 | 과제 │ 솔루션 |
용량 제한 스택 목록을 래핑하는 스택 클래스 세트 구현 | 과제 │ 솔루션 |
두 개의 스택을 사용하여 대기열 구현 | 과제 │ 솔루션 |
다른 스택을 버퍼로 사용하여 스택 정렬 | 과제 │ 솔루션 |
스택 구현 | 과제 │ 솔루션 |
대기열 구현 | 과제 │ 솔루션 |
어레이가 지원하는 우선순위 큐 구현 | 과제 │ 솔루션 |
챌린지 추가 | 기여 │ 기여 |
도전 | 정적 노트북 |
---|---|
트리에서 깊이 우선 검색(사전, 내, 후순) 구현 | 과제 │ 솔루션 |
트리에서 너비 우선 검색 구현 | 과제 │ 솔루션 |
나무의 높이 결정 | 과제 │ 솔루션 |
정렬된 배열에서 최소 높이의 이진 검색 트리 만들기 | 과제 │ 솔루션 |
이진 트리의 각 수준에 대한 연결 목록 만들기 | 과제 │ 솔루션 |
이진 트리가 균형을 이루고 있는지 확인 | 과제 │ 솔루션 |
트리가 유효한 이진 검색 트리인지 확인 | 과제 │ 솔루션 |
이진 검색 트리에서 주어진 노드의 순서대로 후속 노드를 찾습니다. | 과제 │ 솔루션 |
이진 검색 트리에서 두 번째로 큰 노드 찾기 | 과제 │ 솔루션 |
가장 낮은 공통 조상 찾기 | 과제 │ 솔루션 |
이진 트리 반전 | 과제 │ 솔루션 |
이진 검색 트리 구현 | 과제 │ 솔루션 |
최소 힙 구현 | 과제 │ 솔루션 |
트라이 구현 | 과제 │ 솔루션 |
그래프에 깊이 우선 검색 구현 | 과제 │ 솔루션 |
그래프에서 너비 우선 검색 구현 | 과제 │ 솔루션 |
그래프의 두 노드 사이에 경로가 있는지 확인 | 과제 │ 솔루션 |
그래프 구현 | 과제 │ 솔루션 |
프로젝트 및 종속성 목록이 제공된 빌드 순서를 찾으세요. | 과제 │ 솔루션 |
가중치 그래프에서 최단 경로를 찾습니다. | 과제 │ 솔루션 |
비가중 그래프에서 최단 경로를 찾습니다. | 과제 │ 솔루션 |
챌린지 추가 | 기여 │ 기여 |
도전 | 정적 노트북 |
---|---|
선택 정렬 구현 | 과제 │ 솔루션 |
삽입 정렬 구현 | 과제 │ 솔루션 |
빠른 정렬 구현 | 과제 │ 솔루션 |
병합 정렬 구현 | 과제 │ 솔루션 |
기수 정렬 구현 | 과제 │ 솔루션 |
모든 철자 바꾸기가 서로 옆에 있도록 문자열 배열을 정렬합니다. | 과제 │ 솔루션 |
정렬되고 회전된 배열에서 항목 찾기 | 과제 │ 솔루션 |
항목에 대한 정렬된 매트릭스 검색 | 과제 │ 솔루션 |
n개의 정수 입력에 없는 int 찾기 | 과제 │ 솔루션 |
정렬된 배열 A, B가 주어지면 정렬된 순서로 B를 A로 병합합니다. | 과제 │ 솔루션 |
안정적인 선택 정렬 구현 | 기여 │ 기여 |
불안정한 정렬을 안정하게 만들기 | 기여 │ 기여 |
효율적인 내부 버전의 퀵 정렬 구현 | 기여 │ 기여 |
두 개의 정렬된 배열이 주어지면 정렬된 순서로 하나를 다른 배열로 병합합니다. | 기여 │ 기여 |
회전 및 정렬된 정수 배열에서 요소 찾기 | 기여 │ 기여 |
챌린지 추가 | 기여 │ 기여 |
도전 | 정적 노트북 |
---|---|
피보나치를 재귀적, 동적으로, 반복적으로 구현합니다. | 과제 │ 솔루션 |
배낭에 담긴 물건을 최대화하세요 | 과제 │ 솔루션 |
배낭에 담긴 무제한 아이템 최대화 | 과제 │ 솔루션 |
가장 긴 공통 부분 수열 찾기 | 과제 │ 솔루션 |
가장 긴 증가 부분 수열 찾기 | 과제 │ 솔루션 |
행렬 곱셈 비용 최소화 | 과제 │ 솔루션 |
k개의 거래가 있을 때 주가를 최대화하세요 | 과제 │ 솔루션 |
주어진 동전 배열에서 n 센트를 나타내는 최소 방법 수를 구합니다. | 과제 │ 솔루션 |
주어진 동전 배열에서 n 센트를 표현하는 고유한 방법의 수를 찾으십시오. | 과제 │ 솔루션 |
n쌍의 괄호의 유효한 조합을 모두 인쇄합니다. | 과제 │ 솔루션 |
미로 탐색 | 과제 │ 솔루션 |
세트의 모든 하위 세트 인쇄 | 과제 │ 솔루션 |
문자열의 모든 순열을 인쇄합니다. | 과제 │ 솔루션 |
배열에서 매직 인덱스 찾기 | 과제 │ 솔루션 |
n 단계를 밟는 방법의 수를 구하십시오. | 과제 │ 솔루션 |
3개의 타워와 N개의 디스크로 하노이 타워 구현 | 과제 │ 솔루션 |
재귀적, 동적으로, 반복적으로 계승 구현 | 기여 │ 기여 |
정렬된 정수 배열에 대해 이진 검색을 수행합니다. | 기여 │ 기여 |
문자열의 모든 조합을 인쇄합니다. | 기여 │ 기여 |
페인트 채우기 기능 구현 | 기여 │ 기여 |
1, 5, 10, 25센트 동전이 주어졌을 때 n센트를 나타내는 모든 순열을 찾아보세요. | 기여 │ 기여 |
챌린지 추가 | 기여 │ 기여 |
도전 | 정적 노트북 |
---|---|
소수 목록 생성 | 과제 │ 솔루션 |
디지털 루트를 찾아보세요 | 과제 │ 솔루션 |
O(1)에서 삽입, 최대, 최소, 평균, 모드를 지원하는 클래스를 만듭니다. | 과제 │ 솔루션 |
숫자가 2의 거듭제곱인지 확인 | 과제 │ 솔루션 |
+ 또는 - 기호 없이 두 개의 숫자를 추가합니다. | 과제 │ 솔루션 |
+ 또는 - 기호 없이 두 숫자 빼기 | 과제 │ 솔루션 |
숫자가 소수인지 확인 | 기여 │ 기여 |
데카르트 평면의 두 선이 교차하는지 확인 | 기여 │ 기여 |
더하기만 사용하여 정수에 대해 곱하기, 빼기 및 나누기를 구현합니다. | 기여 │ 기여 |
유일한 소인수가 3, 5, 7이 되도록 k번째 숫자를 찾습니다. | 기여 │ 기여 |
챌린지 추가 | 기여 │ 기여 |
도전 | 정적 노트북 |
---|---|
일반적인 비트 조작 작업 구현 | 과제 │ 솔루션 |
a를 b로 변환하기 위해 뒤집을 비트 수 결정 | 과제 │ 솔루션 |
화면에 선 그리기 | 과제 │ 솔루션 |
가장 긴 1의 시퀀스를 최대화하려면 비트를 뒤집으세요. | 과제 │ 솔루션 |
다음으로 큰 숫자와 다음으로 가장 작은 숫자를 구하세요. | 과제 │ 솔루션 |
두 개의 이진수를 병합합니다. | 과제 │ 솔루션 |
정수에서 홀수와 짝수 비트를 교환합니다. | 과제 │ 솔루션 |
0과 1 사이 숫자의 이진 표현을 인쇄합니다. | 과제 │ 솔루션 |
주어진 정수의 이진 표현에서 1의 개수를 결정합니다. | 기여 │ 기여 |
챌린지 추가 | 기여 │ 기여 |
도전 | 정적 노트북 |
---|---|
최대 k개의 고유 문자를 포함하는 가장 긴 부분 문자열을 찾습니다. | 과제 │ 솔루션 |
세 숫자의 가장 높은 곱을 찾아보세요 | 과제 │ 솔루션 |
1회 매수 및 1회 매도에서 주식 이익 극대화 | 과제 │ 솔루션 |
목록의 모든 0을 끝으로 이동 | 과제 │ 솔루션 |
다른 모든 int의 제품 찾기 | 과제 │ 솔루션 |
출입 목록이 주어지면 가장 바쁜 기간을 찾으세요. | 과제 │ 솔루션 |
섬의 둘레 결정 | 과제 │ 솔루션 |
라이센스 키 포맷 | 과제 │ 솔루션 |
가장 긴 절대 파일 경로 찾기 | 과제 │ 솔루션 |
튜플 범위 병합 | 과제 │ 솔루션 |
쿠키 할당 | 과제 │ 솔루션 |
님에서 이길 수 있는지 판단하세요 | 과제 │ 솔루션 |
몸값 메모를 만드는 데 잡지가 사용되었을 수 있는지 확인하세요. | 과제 │ 솔루션 |
문장이 화면에 들어갈 수 있는 횟수 찾기 | 과제 │ 솔루션 |
유토피아 나무 | 과제 │ 솔루션 |
xor 최대화 | 과제 │ 솔루션 |
챌린지 추가 | 기여 │ 기여 |
interactive-coding-challenges # Repo
├─ arrays_strings # Category of challenges
│ ├─ rotation # Challenge folder
│ │ ├─ rotation_challenge.ipynb # Challenge notebook
│ │ ├─ rotation_solution.ipynb # Solution notebook
│ │ ├─ test_rotation.py # Unit test*
│ ├─ compress
│ │ ├─ compress_challenge.ipynb
│ │ ├─ compress_solution.ipynb
│ │ ├─ test_compress.py
│ ├─ ...
├─ linked_lists
│ ├─ palindrome
│ │ └─ ...
│ ├─ ...
├─ ...
*노트북(.ipynb)은 관련 단위 테스트(.py) 파일을 읽고 씁니다.
이 README에는 설치가 필요 없이 온라인으로 저장소 내용의 동적 노트북을 호스팅하는 Binder에 대한 링크가 포함되어 있습니다.
달리다:
pip install jupyter
개발 환경을 보다 최적으로 설정하기 위한 자세한 지침, 스크립트 및 도구는 dev-setup 저장소를 확인하세요.
노트북 설치에 대한 자세한 내용을 보려면 여기의 지침을 따르세요.
IPython/Jupyter 노트북에 대한 자세한 내용은 여기에서 확인할 수 있습니다.
과제는 IPython/Jupyter 노트북 형식으로 제공되며 Python 2.7 및 Python 3.x에서 테스트 되었습니다.
IPython/Jupyter Notebook을 설치해야 하는 경우 노트북 설치 섹션을 참조하세요.
과제 노트북을 실행하세요.
$ git clone https://github.com/donnemartin/interactive-coding-challenges.git
$ cd interactive-coding-challenges
$ jupyter notebook
이렇게 하면 챌린지 카테고리 목록과 함께 웹 브라우저가 시작됩니다.
pdb를 사용하여 솔루션을 디버깅 하려면 다음 티켓을 참조하세요.
참고: 귀하의 솔루션이 솔루션 노트북에 나열된 것과 다른 경우 다른 사람들이 귀하의 작업으로부터 혜택을 받을 수 있도록 끌어오기 요청을 제출하는 것을 고려하십시오. 자세한 내용은 기여 지침을 검토하세요.
과제, 솔루션 및 단위 테스트는 IPython/Jupyter 노트북 형식으로 제공됩니다.
기여를 환영합니다!
다음 방법에 대한 자세한 내용은 기여 지침을 검토하세요.
문제, 질문 또는 의견에 대해 논의하려면 언제든지 저에게 연락하십시오.
내 연락처 정보는 내 GitHub 페이지에서 확인할 수 있습니다.
저는 오픈 소스 라이선스에 따라 이 저장소의 코드와 리소스를 귀하에게 제공하고 있습니다. 이것은 내 개인 저장소이기 때문에 귀하가 내 코드와 리소스에 대해 받는 라이선스는 내 고용주(Facebook)가 아닌 나에게서 오는 것입니다.
Copyright 2015 Donne Martin
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.