120+ interactive Python coding interview challenges (algorithms and data structures). Includes Anki flashcards.
Go to file
2015-06-29 20:28:00 -04:00
arrays_strings Renamed rotation.ipynb to rotation_solution.ipynb to prepare for challenge and solution notebooks. 2015-06-29 20:17:25 -04:00
hackerrank_topcoder Restructured packages. 2015-06-28 07:02:04 -04:00
images Added notebook solving the following: Compress a string such that aabbb becomes a2b3. 2015-05-04 05:54:50 -04:00
linked_lists Renamed section Constraints and Assumptions to Constraints. 2015-06-28 07:13:27 -04:00
recursion_dynamic Renamed section Constraints and Assumptions to Constraints. 2015-06-28 07:13:27 -04:00
sorting_searching Renamed section Constraints and Assumptions to Constraints. 2015-06-28 07:13:27 -04:00
stacks_queues Renamed section Constraints and Assumptions to Constraints. 2015-06-28 07:13:27 -04:00
__init__.py Added __init__.py files. 2015-06-27 08:20:54 -04:00
.gitignore Added IPython Notebook templates to .gitignore. 2015-05-31 20:26:46 -04:00
LICENSE Tweaked LICENSE, content contains coding questions that are publically available, references are listed. Solutions developed by Donne Martin. 2015-06-27 06:48:08 -04:00
README.md Renamed rotation.ipynb to rotation_solution.ipynb to prepare for challenge and solution notebooks. 2015-06-29 20:28:00 -04:00


Wikipedia: Quicksort

coding-challenges

Continually updated Python Notebooks containing TDD-based coding challenges and solutions (algorithms and data structures).

Index

Arrays and Strings

Notebook Problem Statement
unique_chars Determine if a string contains unique characters
reverse_string Reverse characters in a string
permutation Determine if a string is a permutation of another
replace_char Encode spaces in a string in-place
compress Compress a string
rotation Determine if a string is a rotation of another
hash-map Implement a hash table with set, get, and remove methods

Linked Lists

Notebook Problem Statement
remove_duplicates Remove duplicates from a linked list
kth_to_last_elem Find the kth to last element of a linked list
delete_mid Delete a node in the middle of a linked list, given access to only that node
partition Partition a linked list around a given value
add_reverse Add two numbers whose digits are stored in a linked list in reverse order
find_loop_start Find the start of a linked list loop
palindrome Determine if a linked list is a palindrome
linked_list Implement a linked list with insert, find, delete, and print methods

Stacks and Queues

Notebook Problem Statement
n_stacks Implement n stacks using a single array
stack_min Implement a stack that keeps track of its minimum element
set_of_stacks Implement a set of stacks class that wraps a list of stacks, each bound by a capacity
hanoi Implement the Towers of Hanoi with 3 towers and N disks
queue_from_stacks Implement a queue using two stacks
sort_stack Sort a stack using another stack as a buffer
stack Implement a stack with push, pop, and peek methods using a linked list
queue Implement a queue with enqueue and dequeue methods using a linked list

Sorting and Searching

Notebook Problem Statement
selection_sort Implement selection sort
insertion_sort Implement insertion sort
quick_sort Implement quick sort
merge_sort Implement merge sort

Recursion and Dynamic Programming

Notebook Problem Statement
fibonacci Implement fibonacci recursively, dynamically, and iteratively

Trees and Graphs

[Coming Soon]

Bit Manipulation

[Coming Soon]

Scalability and Memory Limits

[Coming Soon]

Concurrency

[Coming Soon]

HackerRank and TopCoder

Notebook Problem Statement
utopian_tree View problem statement on HackerRank
maximizing_xor View problem statement on HackerRank

Notebook Installation

If you already have Python installed and are familiar with installing packages, you can get IPython with pip:

pip install ipython

Or if you want to also get the dependencies for the IPython notebook:

pip install "ipython[notebook]"

For more details on installation, follow the directions here.

To interact with or to modify elements within the IPython notebooks, you must first clone or download the repository then run the ipython notebook. More information on IPython Notebooks can be found here.

$ git clone https://github.com/donnemartin/coding-challenges.git
$ cd [downloaded repo directory name]
$ ipython notebook

Notebook tested with Python 2.7.x.

Credits

Contributing

Contributions are welcome!

For bug reports or requests please submit an issue.

For pull requests, please follow the general notebook format.

Contact Info

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

License

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.