120+ interactive Python coding interview challenges (algorithms and data structures). Includes Anki flashcards.
Go to file
2015-06-28 07:02:04 -04:00
arrays_strings Renamed top-level folders to use underscores instead of dashes. 2015-06-28 06:39:24 -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 to use underscores instead of dashes. 2015-06-28 06:54:59 -04:00
recursion_dynamic Renamed top-level folders to use underscores instead of dashes. 2015-06-28 06:39:24 -04:00
sorting_searching Restructured packages. 2015-06-28 06:59:11 -04:00
stacks_queues Renamed top-level folders to use underscores instead of dashes. 2015-06-28 06:39:24 -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 Restructured packages. 2015-06-28 07:02:04 -04:00


Wikipedia: Quicksort

algorithms-data-structures

Continually updated IPython Notebooks containing coding problems and solutions (algorithms and data structures).

This repo is a collection of my notes while sharpening my skills tackling coding problems.

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/algorithms-data-structures.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.