gitextract_0a45doj9/ ├── .gitattributes ├── .gitignore ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── __init__.py ├── anki_cards/ │ └── Coding.apkg ├── arrays_strings/ │ ├── __init__.py │ ├── compress/ │ │ ├── __init__.py │ │ ├── compress_challenge.ipynb │ │ ├── compress_solution.ipynb │ │ └── test_compress.py │ ├── compress_alt/ │ │ ├── __init__.py │ │ ├── better_compress_challenge.ipynb │ │ ├── better_compress_solution.ipynb │ │ └── test_compress.py │ ├── fizz_buzz/ │ │ ├── __init__.py │ │ ├── fizz_buzz_challenge.ipynb │ │ ├── fizz_buzz_solution.ipynb │ │ └── test_fizz_buzz.py │ ├── hash_map/ │ │ ├── __init__.py │ │ ├── hash_map_challenge.ipynb │ │ ├── hash_map_solution.ipynb │ │ └── test_hash_map.py │ ├── permutation/ │ │ ├── __init__.py │ │ ├── permutation_challenge.ipynb │ │ ├── permutation_solution.ipynb │ │ └── test_permutation_solution.py │ ├── priority_queue/ │ │ ├── __init__.py │ │ ├── priority_queue.py │ │ ├── priority_queue_challenge.ipynb │ │ ├── priority_queue_solution.ipynb │ │ └── test_priority_queue.py │ ├── reverse_string/ │ │ ├── __init__.py │ │ ├── reverse_string.cpp │ │ ├── reverse_string_challenge.ipynb │ │ ├── reverse_string_solution.ipynb │ │ └── test_reverse_string.py │ ├── rotation/ │ │ ├── __init__.py │ │ ├── rotation_challenge.ipynb │ │ ├── rotation_solution.ipynb │ │ └── test_rotation.py │ ├── str_diff/ │ │ ├── __init__.py │ │ ├── str_diff_challenge.ipynb │ │ ├── str_diff_solution.ipynb │ │ └── test_str_diff.py │ ├── two_sum/ │ │ ├── __init__.py │ │ ├── test_two_sum.py │ │ ├── two_sum_challenge.ipynb │ │ └── two_sum_solution.ipynb │ └── unique_chars/ │ ├── __init__.py │ ├── test_unique_chars.py │ ├── unique_chars_challenge.ipynb │ └── unique_chars_solution.ipynb ├── bit_manipulation/ │ ├── __init__.py │ ├── bit/ │ │ ├── __init__.py │ │ ├── bit_challenge.ipynb │ │ ├── bit_solution.ipynb │ │ └── test_bit.py │ ├── bits_to_flip/ │ │ ├── __init__.py │ │ ├── bits_to_flip_challenge.ipynb │ │ ├── bits_to_flip_solution.ipynb │ │ └── test_bits_to_flip.py │ ├── draw_line/ │ │ ├── __init__.py │ │ ├── draw_line_challenge.ipynb │ │ ├── draw_line_solution.ipynb │ │ └── test_draw_line.py │ ├── flip_bit/ │ │ ├── __init__.py │ │ ├── flip_bit_challenge.ipynb │ │ ├── flip_bit_solution.ipynb │ │ └── test_flip_bit.py │ ├── get_next/ │ │ ├── __init__.py │ │ ├── get_next_challenge.ipynb │ │ ├── get_next_solution.ipynb │ │ └── test_get_next_largest.py │ ├── insert_m_into_n/ │ │ ├── __init__.py │ │ ├── insert_m_into_n_challenge.ipynb │ │ ├── insert_m_into_n_solution.ipynb │ │ └── test_insert_m_into_n.py │ ├── pairwise_swap/ │ │ ├── __init__.py │ │ ├── pairwise_swap_challenge.ipynb │ │ ├── pairwise_swap_solution.ipynb │ │ └── test_pairwise_swap.py │ └── print_binary/ │ ├── __init__.py │ ├── print_binary_challenge.ipynb │ ├── print_binary_solution.ipynb │ └── test_print_binary.py ├── graphs_trees/ │ ├── __init__.py │ ├── bst/ │ │ ├── __init__.py │ │ ├── bst.py │ │ ├── bst_challenge.ipynb │ │ ├── bst_solution.ipynb │ │ ├── dfs.py │ │ └── test_bst.py │ ├── bst_min/ │ │ ├── __init__.py │ │ ├── bst_min_challenge.ipynb │ │ ├── bst_min_solution.ipynb │ │ └── test_bst_min.py │ ├── bst_second_largest/ │ │ ├── __init__.py │ │ ├── bst_second_largest_challenge.ipynb │ │ ├── bst_second_largest_solution.ipynb │ │ └── test_bst_second_largest.py │ ├── bst_successor/ │ │ ├── __init__.py │ │ ├── bst_successor_challenge.ipynb │ │ ├── bst_successor_solution.ipynb │ │ └── test_bst_successor.py │ ├── bst_validate/ │ │ ├── __init__.py │ │ ├── bst_validate_challenge.ipynb │ │ ├── bst_validate_solution.ipynb │ │ └── test_bst_validate.py │ ├── check_balance/ │ │ ├── __init__.py │ │ ├── check_balance_challenge.ipynb │ │ ├── check_balance_solution.ipynb │ │ └── test_check_balance.py │ ├── graph/ │ │ ├── __init__.py │ │ ├── graph.py │ │ ├── graph_challenge.ipynb │ │ ├── graph_solution.ipynb │ │ └── test_graph.py │ ├── graph_bfs/ │ │ ├── __init__.py │ │ ├── bfs_challenge.ipynb │ │ ├── bfs_solution.ipynb │ │ └── test_bfs.py │ ├── graph_build_order/ │ │ ├── __init__.py │ │ ├── build_order_challenge.ipynb │ │ ├── build_order_solution.ipynb │ │ └── test_build_order.py │ ├── graph_dfs/ │ │ ├── __init__.py │ │ ├── dfs_challenge.ipynb │ │ ├── dfs_solution.ipynb │ │ └── test_dfs.py │ ├── graph_path_exists/ │ │ ├── __init__.py │ │ ├── path_exists_challenge.ipynb │ │ ├── path_exists_solution.ipynb │ │ └── test_path_exists.py │ ├── graph_shortest_path/ │ │ ├── __init__.py │ │ ├── graph_shortest_path_challenge.ipynb │ │ ├── graph_shortest_path_solution.ipynb │ │ ├── priority_queue.py │ │ └── test_shortest_path.py │ ├── graph_shortest_path_unweighted/ │ │ ├── __init__.py │ │ ├── shortest_path_challenge.ipynb │ │ ├── shortest_path_solution.ipynb │ │ └── test_shortest_path.py │ ├── invert_tree/ │ │ ├── __init__.py │ │ ├── invert_tree_challenge.ipynb │ │ ├── invert_tree_solution.ipynb │ │ └── test_invert_tree.py │ ├── min_heap/ │ │ ├── __init__.py │ │ ├── min_heap.py │ │ ├── min_heap_challenge.ipynb │ │ ├── min_heap_solution.ipynb │ │ └── test_min_heap.py │ ├── tree_bfs/ │ │ ├── __init__.py │ │ ├── bfs_challenge.ipynb │ │ ├── bfs_solution.ipynb │ │ └── test_bfs.py │ ├── tree_dfs/ │ │ ├── __init__.py │ │ ├── dfs_challenge.ipynb │ │ ├── dfs_solution.ipynb │ │ └── test_dfs.py │ ├── tree_height/ │ │ ├── __init__.py │ │ ├── height.py │ │ ├── height_challenge.ipynb │ │ ├── height_solution.ipynb │ │ └── test_height.py │ ├── tree_lca/ │ │ ├── __init__.py │ │ ├── test_lca.py │ │ ├── tree_lca_challenge.ipynb │ │ └── tree_lca_solution.ipynb │ ├── tree_level_lists/ │ │ ├── __init__.py │ │ ├── test_tree_level_lists.py │ │ ├── tree_level_lists_challenge.ipynb │ │ └── tree_level_lists_solution.ipynb │ ├── trie/ │ │ ├── __init__.py │ │ ├── test_trie.py │ │ ├── trie.py │ │ ├── trie_challenge.ipynb │ │ └── trie_solution.ipynb │ └── utils/ │ ├── __init__.py │ ├── captured_output.py │ └── results.py ├── linked_lists/ │ ├── __init__.py │ ├── add_reverse/ │ │ ├── __init__.py │ │ ├── add_reverse_challenge.ipynb │ │ ├── add_reverse_solution.ipynb │ │ └── test_add_reverse.py │ ├── delete_mid/ │ │ ├── __init__.py │ │ ├── delete_mid_challenge.ipynb │ │ ├── delete_mid_solution.ipynb │ │ └── test_delete_mid.py │ ├── find_loop_start/ │ │ ├── __init__.py │ │ ├── find_loop_start_challenge.ipynb │ │ ├── find_loop_start_solution.ipynb │ │ └── test_find_loop_start.py │ ├── kth_to_last_elem/ │ │ ├── __init__.py │ │ ├── kth_to_last_elem_challenge.ipynb │ │ ├── kth_to_last_elem_solution.ipynb │ │ └── test_kth_to_last_elem.py │ ├── linked_list/ │ │ ├── __init__.py │ │ ├── linked_list.py │ │ ├── linked_list_challenge.ipynb │ │ ├── linked_list_solution.ipynb │ │ └── test_linked_list.py │ ├── palindrome/ │ │ ├── __init__.py │ │ ├── palindrome_challenge.ipynb │ │ ├── palindrome_solution.ipynb │ │ └── test_palindrome.py │ ├── partition/ │ │ ├── __init__.py │ │ ├── partition_challenge.ipynb │ │ ├── partition_solution.ipynb │ │ └── test_partition.py │ └── remove_duplicates/ │ ├── __init__.py │ ├── remove_duplicates_challenge.ipynb │ ├── remove_duplicates_solution.ipynb │ └── test_remove_duplicates.py ├── math_probability/ │ ├── add_digits/ │ │ ├── __init__.py │ │ ├── add_digits_challenge.ipynb │ │ ├── add_digits_solution.ipynb │ │ └── test_add_digits.py │ ├── check_prime/ │ │ ├── __init__.py │ │ ├── check_prime_challenge.ipynb │ │ ├── check_prime_solution.ipynb │ │ └── test_check_prime.py │ ├── generate_primes/ │ │ ├── __init__.py │ │ ├── check_prime_challenge.ipynb │ │ ├── check_prime_solution.ipynb │ │ └── test_generate_primes.py │ ├── math_ops/ │ │ ├── __init__.py │ │ ├── math_ops_challenge.ipynb │ │ ├── math_ops_solution.ipynb │ │ └── test_math_ops.py │ ├── power_two/ │ │ ├── __init__.py │ │ ├── power_two_challenge.ipynb │ │ ├── power_two_solution.ipynb │ │ └── test_is_power_of_two.py │ ├── sub_two/ │ │ ├── __init__.py │ │ ├── sub_two_challenge.ipynb │ │ ├── sub_two_solution.ipynb │ │ └── test_sub_two.py │ └── sum_two/ │ ├── __init__.py │ ├── sum_two_challenge.ipynb │ ├── sum_two_solution.ipynb │ └── test_sum_two.py ├── online_judges/ │ ├── __init__.py │ ├── assign_cookies/ │ │ ├── __init__.py │ │ ├── assign_cookies_challenge.ipynb │ │ ├── assign_cookies_solution.ipynb │ │ └── test_assign_cookie.py │ ├── busiest_period/ │ │ ├── __init__.py │ │ ├── busiest_period_challenge.ipynb │ │ ├── busiest_period_solution.ipynb │ │ └── test_find_busiest_period.py │ ├── island_perimeter/ │ │ ├── __init__.py │ │ ├── island_perimeter_challenge.ipynb │ │ ├── island_perimeter_solution.ipynb │ │ └── test_island_perimeter.py │ ├── license_key/ │ │ ├── __init__.py │ │ ├── format_license_key_challenge.ipynb │ │ ├── format_license_key_solution.ipynb │ │ └── test_format_license_key.py │ ├── longest_abs_file_path/ │ │ ├── __init__.py │ │ ├── longest_path_challenge.ipynb │ │ ├── longest_path_solution.ipynb │ │ └── test_length_longest_path.py │ ├── longest_substr_k_distinct/ │ │ ├── __init__.py │ │ ├── longest_substr_challenge.ipynb │ │ ├── longest_substr_solution.ipynb │ │ └── test_longest_substr.py │ ├── math_ops/ │ │ ├── __init__.py │ │ ├── math_ops_challenge.ipynb │ │ ├── math_ops_solution.ipynb │ │ └── test_math_ops.py │ ├── max_profit/ │ │ ├── __init__.py │ │ ├── max_profit_challenge.ipynb │ │ ├── max_profit_solution.ipynb │ │ └── test_max_profit.py │ ├── maximizing_xor/ │ │ ├── __init__.py │ │ ├── maximizing_xor_challenge.ipynb │ │ ├── maximizing_xor_solution.ipynb │ │ └── test_maximizing_xor.py │ ├── merge_ranges/ │ │ ├── __init__.py │ │ ├── merge_ranges_challenge.ipynb │ │ ├── merge_ranges_solution.ipynb │ │ └── test_merge_ranges.py │ ├── move_zeroes/ │ │ ├── __init__.py │ │ ├── move_zeroes_challenge.ipynb │ │ ├── move_zeroes_solution.ipynb │ │ └── test_move_zeroes.py │ ├── mult_other_numbers/ │ │ ├── __init__.py │ │ ├── mult_other_numbers_challenge.ipynb │ │ ├── mult_other_numbers_solution.ipynb │ │ └── test_mult_other_numbers.py │ ├── nim/ │ │ ├── __init__.py │ │ ├── nim_challenge.ipynb │ │ ├── nim_solution.ipynb │ │ └── test_can_win_nim.py │ ├── prod_three/ │ │ ├── __init__.py │ │ ├── prod_three_challenge.ipynb │ │ ├── prod_three_solution.ipynb │ │ └── test_prod_three.py │ ├── ransom_note/ │ │ ├── __init__.py │ │ ├── ransom_note_challenge.ipynb │ │ ├── ransom_note_solution.ipynb │ │ └── test_ransom_note.py │ ├── sentence_screen_fit/ │ │ ├── __init__.py │ │ ├── sentence_screen_fit_challenge.ipynb │ │ ├── sentence_screen_fit_solution.ipynb │ │ └── test_count_sentence_fit.py │ ├── str_diff/ │ │ ├── __init__.py │ │ ├── str_diff_challenge.ipynb │ │ ├── str_diff_solution.ipynb │ │ └── test_str_diff.py │ ├── sub_two/ │ │ ├── sub_two_challenge.ipynb │ │ ├── sub_two_solution.ipynb │ │ └── test_sub_two.py │ ├── sum_two/ │ │ ├── sum_two_challenge.ipynb │ │ ├── sum_two_solution.ipynb │ │ └── test_sum_two.py │ └── utopian_tree/ │ ├── __init__.py │ ├── test_utopian_tree.py │ ├── utopian_tree_challenge.ipynb │ └── utopian_tree_solution.ipynb ├── recursion_dynamic/ │ ├── __init__.py │ ├── coin_change/ │ │ ├── __init__.py │ │ ├── coin_change_challenge.ipynb │ │ ├── coin_change_solution.ipynb │ │ └── test_coin_change.py │ ├── coin_change_min/ │ │ ├── __init__.py │ │ ├── coin_change_min_challenge.ipynb │ │ ├── coin_change_min_solution.ipynb │ │ └── test_coin_change_min.py │ ├── coin_change_ways/ │ │ ├── __init__.py │ │ ├── coin_change_ways_challenge.ipynb │ │ ├── coin_change_ways_solution.ipynb │ │ └── test_coin_change_ways.py │ ├── fibonacci/ │ │ ├── __init__.py │ │ ├── fibonacci_challenge.ipynb │ │ ├── fibonacci_solution.ipynb │ │ └── test_fibonacci.py │ ├── grid_path/ │ │ ├── __init__.py │ │ ├── grid_path_challenge.ipynb │ │ ├── grid_path_solution.ipynb │ │ └── test_grid_path.py │ ├── hanoi/ │ │ ├── __init__.py │ │ ├── hanoi_challenge.ipynb │ │ ├── hanoi_solution.ipynb │ │ └── test_hanoi.py │ ├── knapsack_01/ │ │ ├── __init__.py │ │ ├── knapsack_challenge.ipynb │ │ ├── knapsack_solution.ipynb │ │ └── test_knapsack.py │ ├── knapsack_unbounded/ │ │ ├── __init__.py │ │ ├── knapsack_unbounded_challenge.ipynb │ │ ├── knapsack_unbounded_solution.ipynb │ │ └── test_knapsack_unbounded.py │ ├── longest_common_subsequence/ │ │ ├── __init__.py │ │ ├── longest_common_subseq_challenge.ipynb │ │ ├── longest_common_subseq_solution.ipynb │ │ └── test_longest_common_subseq.py │ ├── longest_inc_subseq/ │ │ ├── __init__.py │ │ ├── longest_inc_subseq_challenge.ipynb │ │ ├── longest_inc_subseq_solution.ipynb │ │ └── test_longest_increasing_subseq.py │ ├── longest_substr_k_distinct/ │ │ ├── __init__.py │ │ ├── longest_substr_challenge.ipynb │ │ ├── longest_substr_solution.ipynb │ │ └── test_longest_substr.py │ ├── longest_substring/ │ │ ├── __init__.py │ │ ├── longest_common_substr_challenge.ipynb │ │ ├── longest_common_substr_solution.ipynb │ │ └── test_longest_common_substr.py │ ├── magic_index/ │ │ ├── __init__.py │ │ ├── magic_index_challenge.ipynb │ │ ├── magic_index_solution.ipynb │ │ └── test_find_magic_index.py │ ├── matrix_mult/ │ │ ├── __init__.py │ │ ├── find_min_cost_challenge.ipynb │ │ ├── find_min_cost_solution.ipynb │ │ └── test_find_min_cost.py │ ├── max_profit_k/ │ │ ├── __init__.py │ │ ├── max_profit_challenge.ipynb │ │ ├── max_profit_solution.ipynb │ │ └── test_max_profit.py │ ├── n_pairs_parentheses/ │ │ ├── __init__.py │ │ ├── n_pairs_parentheses_challenge.ipynb │ │ ├── n_pairs_parentheses_solution.ipynb │ │ └── test_n_pairs_parentheses.py │ ├── permutations/ │ │ ├── __init__.py │ │ ├── permutations_challenge.ipynb │ │ ├── permutations_solution.ipynb │ │ └── test_permutations.py │ ├── power_set/ │ │ ├── __init__.py │ │ ├── power_set_challenge.ipynb │ │ ├── power_set_solution.ipynb │ │ └── test_power_set.py │ └── steps/ │ ├── __init__.py │ ├── steps_challenge.ipynb │ ├── steps_solution.ipynb │ └── test_steps.py ├── requirements.txt ├── sorting_searching/ │ ├── __init__.py │ ├── anagrams/ │ │ ├── __init__.py │ │ ├── anagrams_challenge.ipynb │ │ ├── anagrams_solution.ipynb │ │ └── test_anagrams.py │ ├── insertion_sort/ │ │ ├── __init__.py │ │ ├── insertion_sort_challenge.ipynb │ │ ├── insertion_sort_solution.ipynb │ │ └── test_insertion_sort.py │ ├── merge_into/ │ │ ├── __init__.py │ │ ├── merge_into_challenge.ipynb │ │ ├── merge_into_solution.ipynb │ │ └── test_merge_into.py │ ├── merge_sort/ │ │ ├── __init__.py │ │ ├── merge_sort_challenge.ipynb │ │ ├── merge_sort_solution.ipynb │ │ └── test_merge_sort.py │ ├── new_int/ │ │ ├── __init__.py │ │ ├── new_int_challenge.ipynb │ │ ├── new_int_solution.ipynb │ │ └── test_new_int.py │ ├── quick_sort/ │ │ ├── __init__.py │ │ ├── quick_sort_challenge.ipynb │ │ ├── quick_sort_solution.ipynb │ │ └── test_quick_sort.py │ ├── radix_sort/ │ │ ├── __init__.py │ │ ├── radix_sort_challenge.ipynb │ │ ├── radix_sort_solution.ipynb │ │ └── test_radix_sort.py │ ├── rotated_array_search/ │ │ ├── __init__.py │ │ ├── rotated_array_search_challenge.ipynb │ │ ├── rotated_array_search_solution.ipynb │ │ └── test_search_sorted_array.py │ ├── search_sorted_matrix/ │ │ ├── __init__.py │ │ ├── search_sorted_matrix_challenge.ipynb │ │ ├── search_sorted_matrix_solution.ipynb │ │ └── test_search_sorted_matrix.py │ └── selection_sort/ │ ├── __init__.py │ ├── selection_sort_challenge.ipynb │ ├── selection_sort_solution.ipynb │ └── test_selection_sort.py ├── stacks_queues/ │ ├── __init__.py │ ├── n_stacks/ │ │ ├── __init__.py │ │ ├── n_stacks_challenge.ipynb │ │ ├── n_stacks_solution.ipynb │ │ └── test_n_stacks.py │ ├── queue_from_stacks/ │ │ ├── __init__.py │ │ ├── queue_from_stacks_challenge.ipynb │ │ ├── queue_from_stacks_solution.ipynb │ │ └── test_queue_from_stacks.py │ ├── queue_list/ │ │ ├── __init__.py │ │ ├── queue_list.py │ │ ├── queue_list_challenge.ipynb │ │ ├── queue_list_solution.ipynb │ │ └── test_queue_list.py │ ├── set_of_stacks/ │ │ ├── __init__.py │ │ ├── set_of_stacks_challenge.ipynb │ │ ├── set_of_stacks_solution.ipynb │ │ └── test_set_of_stacks.py │ ├── sort_stack/ │ │ ├── __init__.py │ │ ├── sort_stack_challenge.ipynb │ │ ├── sort_stack_solution.ipynb │ │ └── test_sort_stack.py │ ├── stack/ │ │ ├── __init__.py │ │ ├── stack.py │ │ ├── stack_challenge.ipynb │ │ ├── stack_solution.ipynb │ │ └── test_stack.py │ └── stack_min/ │ ├── __init__.py │ ├── stack_min_challenge.ipynb │ ├── stack_min_solution.ipynb │ └── test_stack_min.py ├── staging/ │ ├── README.md │ ├── __init__.py │ ├── arrays_strings/ │ │ ├── __init__.py │ │ └── reverse_words/ │ │ ├── __init__.py │ │ ├── reverse_words_challenge.ipynb │ │ ├── reverse_words_solution.ipynb │ │ └── reverse_words_solution.py │ ├── graphs_trees/ │ │ ├── __init__.py │ │ └── binary_tree/ │ │ ├── __init__.py │ │ ├── binary_search_tree.py │ │ ├── binary_tree_challenge.ipynb │ │ ├── binary_tree_solution.ipynb │ │ └── test_binary_search_tree.py │ ├── linked_lists/ │ │ └── __init__.py │ ├── online_judges/ │ │ └── __init__.py │ ├── recursion_dynamic/ │ │ └── __init__.py │ ├── sorting_searching/ │ │ ├── __init__.py │ │ └── group_ordered/ │ │ ├── __init__.py │ │ ├── group_ordered_challenge.ipynb │ │ ├── group_ordered_solution.ipynb │ │ └── test_group_ordered.py │ └── stacks_queues/ │ └── __init__.py └── templates/ ├── __init__.py ├── foo_challenge.ipynb ├── foo_solution.ipynb └── test_foo.py