加入CODE CHINA

· ä¸é™é€Ÿ    · ä¸é™ç©ºé—´    · ä¸é™äººæ•°    · ç§ä»“免费

免费加入
    README.md

    interactive-coding-challenges

    Binder

    120+ continually updated, interactive, and test-driven coding challenges, with Anki flashcards.

    Challenges focus on algorithms and data structures found in coding interviews.

    Each challenge has one or more reference solutions that are:

    • Fully functional
    • Unit tested
    • Easy-to-understand

    Challenges will soon provide on-demand incremental hints to help you arrive at the optimal solution.

    Notebooks also detail:

    • Constraints
    • Test cases
    • Algorithms
    • Big-O time and space complexities

    Also included are unit tested reference implementations of various data structures and algorithms.

    Challenge Solutions



    Anki Flashcards: Coding and Design


    The provided Anki flashcard deck uses spaced repetition to help you retain key concepts.

    Great for use while on-the-go.

    Design Resource: The System Design Primer

    Looking for resources to help you prep for the System Design and Object-Oriented Design interviews?


    Check out the sister repo The System Design Primer, which contains additional Anki decks:

    Notebook Structure

    Each challenge has two notebooks, a challenge notebook with unit tests for you to solve and a solution notebook for reference.

    Problem Statement

    • States the problem to solve.

    Constraints

    • Describes any constraints or assumptions.

    Test Cases

    • Describes the general and edge test cases that will be evaluated in the unit test.

    Algorithm

    • [Challenge Notebook] Empty, refer to the solution notebook algorithm section if you need a hint.
    • [Solution Notebook] One or more algorithm solution discussions, with Big-O time and space complexities.

    Hints

    • [Challenge Notebook] Provides on-demand incremental hints to help you arrive at the optimal solution. Coming soon!

    Code (Challenge: Implement Me!)

    • [Challenge Notebook] Skeleton code for you to implement.
    • [Solution Notebook] One or more reference solutions.

    Unit Test

    • [Challenge Notebook] Unit test for your code. Expected to fail until you solve the challenge.
    • [Solution Notebook] Unit test for the reference solution(s).

    Index

    Challenges Categories

    Format: Challenge Category - Number of Challenges

    Total number of challenges: 120

    Reference Implementations: Data Structures

    Unit tested, fully functional implementations of the following data structures:

    Reference Implementations: Algorithms

    Unit tested, fully functional implementations of the following algorithms:

    Reference Implementations: TODO

    Installing and Running Challenges

    Misc

    Challenges

    Image Credits



    Arrays and Strings

    Binder

    Challenge Static Notebook
    Determine if a string contains unique characters Challenge │ Solution
    Determine if a string is a permutation of another Challenge │ Solution
    Determine if a string is a rotation of another Challenge │ Solution
    Compress a string Challenge │ Solution
    Reverse characters in a string Challenge │ Solution
    Given two strings, find the single different char Challenge │ Solution
    Find two indices that sum to a specific value Challenge │ Solution
    Implement a hash table Challenge │ Solution
    Implement fizz buzz Challenge │ Solution
    Find the first non-repeated character in a string Contribute │ Contribute
    Remove specified characters in a string Contribute │ Contribute
    Reverse words in a string Contribute │ Contribute
    Convert a string to an integer Contribute │ Contribute
    Convert an integer to a string Contribute │ Contribute
    Add a challenge Contribute │ Contribute


    Linked Lists

    Binder

    Challenge Static Notebook
    Remove duplicates from a linked list Challenge │ Solution
    Find the kth to last element of a linked list Challenge │ Solution
    Delete a node in the middle of a linked list Challenge │ Solution
    Partition a linked list around a given value Challenge │ Solution
    Add two numbers whose digits are stored in a linked list Challenge │ Solution
    Find the start of a linked list loop Challenge │ Solution
    Determine if a linked list is a palindrome Challenge │ Solution
    Implement a linked list Challenge │ Solution
    Determine if a list is cyclic or acyclic Contribute │ Contribute
    Add a challenge Contribute │ Contribute


    Stacks and Queues

    Binder

    Challenge Static Notebook
    Implement n stacks using a single array Challenge │ Solution
    Implement a stack that keeps track of its minimum element Challenge │ Solution
    Implement a set of stacks class that wraps a list of capacity-bounded stacks Challenge │ Solution
    Implement a queue using two stacks Challenge │ Solution
    Sort a stack using another stack as a buffer Challenge │ Solution
    Implement a stack Challenge │ Solution
    Implement a queue Challenge │ Solution
    Implement a priority queue backed by an array Challenge │ Solution
    Add a challenge Contribute │ Contribute


    Graphs and Trees

    Binder

    Challenge Static Notebooks
    Implement depth-first search (pre-, in-, post-order) on a tree Challenge │ Solution
    Implement breadth-first search on a tree Challenge │ Solution
    Determine the height of a tree Challenge │ Solution
    Create a binary search tree with minimal height from a sorted array Challenge │ Solution
    Create a linked list for each level of a binary tree Challenge │ Solution
    Check if a binary tree is balanced Challenge │ Solution
    Determine if a tree is a valid binary search tree Challenge │ Solution
    Find the in-order successor of a given node in a binary search tree Challenge │ Solution
    Find the second largest node in a binary search tree Challenge │ Solution
    Find the lowest common ancestor Challenge │ Solution
    Invert a binary tree Challenge │ Solution
    Implement a binary search tree Challenge │ Solution
    Implement a min heap Challenge │ Solution
    Implement a trie Challenge │ Solution
    Implement depth-first search on a graph Challenge │ Solution
    Implement breadth-first search on a graph Challenge │ Solution
    Determine if there is a path between two nodes in a graph Challenge │ Solution
    Implement a graph Challenge │ Solution
    Find a build order given a list of projects and dependencies. Challenge │ Solution
    Find the shortest path in a weighted graph. Challenge │ Solution
    Find the shortest path in an unweighted graph. Challenge │ Solution
    Add a challenge Contribute │ Contribute


    Sorting

    Binder

    Challenge Static Notebooks
    Implement selection sort Challenge │ Solution
    Implement insertion sort Challenge │ Solution
    Implement quick sort Challenge │ Solution
    Implement merge sort Challenge │ Solution
    Implement radix sort Challenge │ Solution
    Sort an array of strings so all anagrams are next to each other Challenge │ Solution
    Find an item in a sorted, rotated array Challenge │ Solution
    Search a sorted matrix for an item Challenge │ Solution
    Find an int not in an input of n integers Challenge │ Solution
    Given sorted arrays A, B, merge B into A in sorted order Challenge │ Solution
    Implement a stable selection sort Contribute │ Contribute
    Make an unstable sort stable Contribute │ Contribute
    Implement an efficient, in-place version of quicksort Contribute │ Contribute
    Given two sorted arrays, merge one into the other in sorted order Contribute │ Contribute
    Find an element in a rotated and sorted array of integers Contribute │ Contribute
    Add a challenge Contribute │ Contribute


    Recursion and Dynamic Programming

    Binder

    Challenge Static Notebooks
    Implement fibonacci recursively, dynamically, and iteratively Challenge │ Solution
    Maximize items placed in a knapsack Challenge │ Solution
    Maximize unbounded items placed in a knapsack Challenge │ Solution
    Find the longest common subsequence Challenge │ Solution
    Find the longest increasing subsequence Challenge │ Solution
    Minimize the cost of matrix multiplication Challenge │ Solution
    Maximize stock prices given k transactions Challenge │ Solution
    Find the minimum number of ways to represent n cents given an array of coins Challenge │ Solution
    Find the unique number of ways to represent n cents given an array of coins Challenge │ Solution
    Print all valid combinations of n-pairs of parentheses Challenge │ Solution
    Navigate a maze Challenge │ Solution
    Print all subsets of a set Challenge │ Solution
    Print all permutations of a string Challenge │ Solution
    Find the magic index in an array Challenge │ Solution
    Find the number of ways to run up n steps Challenge │ Solution
    Implement the Towers of Hanoi with 3 towers and N disks Challenge │ Solution
    Implement factorial recursively, dynamically, and iteratively Contribute │ Contribute
    Perform a binary search on a sorted array of integers Contribute │ Contribute
    Print all combinations of a string Contribute │ Contribute
    Implement a paint fill function Contribute │ Contribute
    Find all permutations to represent n cents, given 1, 5, 10, 25 cent coins Contribute │ Contribute
    Add a challenge Contribute │ Contribute


    Mathematics and Probability

    Binder

    Challenge Static Notebooks
    Generate a list of primes Challenge │ Solution
    Find the digital root Challenge │ Solution
    Create a class supporting insert, max, min, mean, mode in O(1) Challenge │ Solution
    Determine if a number is a power of two Challenge │ Solution
    Add two numbers without the + or - sign Challenge │ Solution
    Subtract two numbers without the + or - sign Challenge │ Solution
    Check if a number is prime Contribute │ Contribute
    Determine if two lines on a Cartesian plane intersect Contribute │ Contribute
    Using only add, implement multiply, subtract, and divide for ints Contribute │ Contribute
    Find the kth number such that the only prime factors are 3, 5, and 7 Contribute │ Contribute
    Add a challenge Contribute │ Contribute


    Bit Manipulation

    Binder

    Challenge Static Notebooks
    Implement common bit manipulation operations Challenge │ Solution
    Determine number of bits to flip to convert a into b Challenge │ Solution
    Draw a line on a screen Challenge │ Solution
    Flip a bit to maximize the longest sequence of 1s Challenge │ Solution
    Get the next largest and next smallest numbers Challenge │ Solution
    Merge two binary numbers Challenge │ Solution
    Swap odd and even bits in an integer Challenge │ Solution
    Print the binary representation of a number between 0 and 1 Challenge │ Solution
    Determine the number of 1s in the binary representation of a given integer Contribute │ Contribute
    Add a challenge Contribute │ Contribute


    Online Judges

    Binder

    Challenge Static Notebooks
    Find the longest substring with at most k distinct chars Challenge │ Solution
    Find the highest product of three numbers Challenge │ Solution
    Maximize stocks profit from 1 buy and 1 sell Challenge │ Solution
    Move all zeroes in a list to the end Challenge │ Solution
    Find the products of every other int Challenge │ Solution
    Given a list of entries and exits, find the busiest period Challenge │ Solution
    Determine an island's perimeter Challenge │ Solution
    Format license keys Challenge │ Solution
    Find the longest absolute file path Challenge │ Solution
    Merge tuple ranges Challenge │ Solution
    Assign cookies Challenge │ Solution
    Determine if you can win in Nim Challenge │ Solution
    Check if a magazine could have been used to create a ransom note Challenge │ Solution
    Find the number of times a sentence can fit on a screen Challenge │ Solution
    Utopian tree Challenge │ Solution
    Maximizing xor Challenge │ Solution
    Add a challenge Contribute │ Contribute

    Repo Structure

    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
    │  │  └─ ...
    │  ├─ ...
    ├─ ...

    *The notebooks (.ipynb) read/write the associated unit test (.py) file.

    Notebook Installation

    Zero Install

    Binder

    This README contains links to Binder , which hosts dynamic notebooks of the repo's contents online with no installation needed.

    Jupyter Notebook

    Run:

    pip install jupyter

    For detailed instructions, scripts, and tools to more optimally set up your development environment, check out the dev-setup repo.

    For more details on notebook installation, follow the directions here.

    More information on IPython/Jupyter Notebooks can be found here.

    Running Challenges

    Notebooks

    Challenges are provided in the form of IPython/Jupyter Notebooks and have been tested with Python 2.7 and Python 3.x.

    If you need to install IPython/Jupyter Notebook, see the Notebook Installation section.

    • This README contains links to nbviewer, which hosts static notebooks of the repo's contents
    • To interact with or to modify elements within the dynamic notebooks, refer to the instructions below

    Run the notebook of challenges:

    $ git clone https://github.com/donnemartin/interactive-coding-challenges.git
    $ cd interactive-coding-challenges
    $ jupyter notebook

    This will launch your web browser with the list of challenge categories:

    • Navigate to the Challenge Notebook you wish to solve
    • Run the cells within the challenge notebook (Cell->Run All)
      • This will result in an expected unit test error
    • Solve the challenge and verify it passes the unit test
    • Check out the accompanying Solution Notebook for further discussion

    To debug your solution with pdb, refer to the following ticket.

    Note: If your solution is different from those listed in the Solution Notebook, consider submitting a pull request so others can benefit from your work. Review the Contributing Guidelines for details.

    Future Development

    Challenges, solutions, and unit tests are presented in the form of IPython/Jupyter Notebooks.

    • Notebooks currently contain mostly Python solutions (tested on both Python 2.7 and Python 3.x), but can be extended to include 40+ supported languages
    • Repo will be continually updated with new solutions and challenges
    • Contributions are welcome!

    Contributing

    Contributions are welcome!

    Review the Contributing Guidelines for details on how to:

    • Submit issues
    • Add solutions to existing challenges
    • Add new challenges

    Credits

    Resources

    Images

    Contact Info

    Feel free to contact me to discuss any issues, questions, or comments.

    My contact info can be found on my GitHub page.

    License

    I am providing code and resources in this repository to you under an open source license. Because this is my personal repository, the license you receive to my code and resources is from me and not my employer (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.

    项目简介

    🚀 Github 镜像仓库 🚀

    源项目地址 ⬇ ⬇ ⬇

    https://github.com/donnemartin/interactive-coding-challenges

    • 文件大小 7.8 MB
    • 仓库大小 7.9 MB

    发行版本

    当前项目没有发行版本

    贡献者 45

    全部贡献者

    开发语言

    • Python 100.0 %
    • C++ 0.1 %