From 856dfabdd7ceccdcb98b9900bcaad42cc9e84bb8 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 1 Oct 2017 07:22:30 -0500 Subject: [PATCH 0001/2496] add solutions --- .DS_Store | Bin 0 -> 6148 bytes 001._two_sum.md | 43 ++++ 002._add_two_numbers.md | 37 +++ ..._substring_without_repeating_characters.md | 56 +++++ 004._median_of_two_sorted_arrays.md | 151 +++++++++++ 005._longest_palindromic_substring.md | 193 ++++++++++++++ 008._string_to_integer_(atoi).md | 47 ++++ 010._regular_expression_matching.md | 141 +++++++++++ 011._container_with_most_water.md | 109 ++++++++ 012. Integer to Roman.md | 89 +++++++ 013.Roman to Integer.md | 80 ++++++ 014._longest_common_prefix.md | 76 ++++++ 015._3sum.md | 104 ++++++++ 016._3sum_closest.md | 52 ++++ 017._letter_combinations_of_a_phone_number.md | 55 ++++ 018._4sum.md | 94 +++++++ 019._remove_nth_node_from_end_of_list.md | 41 +++ 020._valid_parentheses.md | 53 ++++ 021._merge_two_sorted_lists.md | 48 ++++ 022._generate_parentheses.md | 88 +++++++ 023._merge_k_sorted_lists.md | 49 ++++ 024._swap_nodes_in_pairs.md | 35 +++ 028._implement_strstr().md | 36 +++ 031._next_permutation.md | 57 +++++ 033._search_in_rotated_sorted_array.md | 53 ++++ 034. Search for a Range.md | 82 ++++++ 035._search_insert_position.md | 32 +++ 039._combination_sum.md | 66 +++++ 040._combination_sum_ii.md | 82 ++++++ 042._trapping_rain_water.md | 50 ++++ 043._multiply_strings.md | 81 ++++++ 044._wildcard_matching.md | 44 ++++ 046._permutations.md | 138 ++++++++++ 047._permutations_ii.md | 42 ++++ 048._rotate_image.md | 118 +++++++++ 049._group_anagrams_python.md | 38 +++ 050._pow(x,_n).md | 36 +++ 051._n-queens.md | 48 ++++ 052._n-queens_ii.md | 52 ++++ 053._maximum_subarray.md | 146 +++++++++++ 054._spiral_matrix.md | 120 +++++++++ 055._jump_game.md | 67 +++++ 058._length_of_last_word.md | 24 ++ 059._spiral_matrix_ii.md | 51 ++++ 060._permutation_sequence.md | 93 +++++++ 061._rotate_list.md | 58 +++++ 064._minimum_path_sum.md | 58 +++++ 065.unique_paths_ii.md | 84 +++++++ 066._plus_one.md | 63 +++++ 067._add_binary.md | 33 +++ 069._sqrt(x).md | 78 ++++++ 072._edit_distance.md | 116 +++++++++ 073. Set Matrix Zeroes.md | 55 ++++ 074._search_a_2d_matrix.md | 51 ++++ 075._sort_colors.md | 54 ++++ 077._combinations.md | 123 +++++++++ 078.Subsets .md | 67 +++++ 079._word_search.md | 63 +++++ 082._remove_duplicates_from_sorted_list_ii.md | 49 ++++ 083._remove_duplicates_from_sorted_list.md | 33 +++ 086._partition_list.md | 56 +++++ 088._merge_sorted_array.md | 56 +++++ 089._gray_code.md | 101 ++++++++ 090._subsets_ii.md | 47 ++++ 091._decode_ways.md | 71 ++++++ 092._reverse_linked_list_ii.md | 66 +++++ 093._restore_ip_addresses.md | 66 +++++ 094._binary_tree_inorder_traversal.md | 70 ++++++ 096._unique_binary_search_trees.md | 43 ++++ 098._validate_binary_search_tree.md | 74 ++++++ 100._same_tree.md | 32 +++ 101._symmetric_tree.md | 48 ++++ 102._binary_tree_level_order_traversal.md | 63 +++++ ...inary_tree_zigzag_level_order_traversal.md | 48 ++++ 104._maximum_depth_of_binary_tree.md | 27 ++ ...ree_from_preorder_and_inorder_traversal.md | 100 ++++++++ ...ee_from_inorder_and_postorder_traversal.md | 68 +++++ 107._binary_tree_level_order_traversal_ii.md | 48 ++++ ...vert_sorted_array_to_binary_search_tree.md | 41 +++ ...nvert_sorted_list_to_binary_search_tree.md | 47 ++++ 110._balanced_binary_tree.md | 37 +++ 111._minimum_depth_of_binary_tree.md | 44 ++++ 112._path_sum.md | 30 +++ 113._path_sum_ii.md | 48 ++++ 114._flatten_binary_tree_to_linked_list.md | 42 ++++ ...lating_next_right_pointers_in_each_node.md | 36 +++ 118._pascal's_triangle.md | 36 +++ 119. Pascal's Triangle II.md | 59 +++++ 120. Triangle.md | 72 ++++++ 125._valid_palindrome.md | 63 +++++ 126. Word Ladder II.md | 101 ++++++++ 127._word_ladder.md | 85 +++++++ 129._sum_root_to_leaf_numbers.md | 37 +++ 130._surrounded_regions.md | 147 +++++++++++ 131._palindrome_partitioning.md | 48 ++++ 133._clone_graph.md | 66 +++++ 136._single_number.md | 43 ++++ 139._word_break.md | 61 +++++ 140._word_break_ii.md | 119 +++++++++ 141._linked_list_cycle.md | 81 ++++++ 143._reorder_list.md | 112 +++++++++ 144._binary_tree_preorder_traversal.md | 63 +++++ 145._binary_tree_postorder_traversal.md | 67 +++++ 147._insertion_sort_list.md | 59 +++++ 148._sort_list.md | 138 ++++++++++ 150._evaluate_reverse_polish_notation.md | 83 ++++++ 151._reverse_words_in_a_string.md | 25 ++ 152._maximum_product_subarray.md | 44 ++++ 153._find_minimum_in_rotated_sorted_array.md | 85 +++++++ 155._min_stack.md | 169 +++++++++++++ 160._intersection_of_two_linked_lists.md | 85 +++++++ 162._find_peak_element.md | 69 +++++ 165._compare_version_numbers.md | 47 ++++ 167._two_sum_ii_-_input_array_is_sorted.md | 39 +++ 168._excel_sheet_column_title.md | 28 +++ 169._majority_element.md | 74 ++++++ 171._excel_sheet_column_number.md | 34 +++ 173._binary_search_tree_iterator.md | 95 +++++++ 189._rotate_array.md | 23 ++ 191._number_of_1_bits.md | 70 ++++++ 198._house_robber.md | 41 +++ 199._binary_tree_right_side_view.md | 37 +++ 200._number_of_islands.md | 113 +++++++++ 203._remove_linked_list_elements.md | 38 +++ 204._count_primes.md | 57 +++++ 205._isomorphic_strings.md | 39 +++ 206._reverse_linked_list.md | 52 ++++ 207._course_schedule.md | 93 +++++++ 208._implement_trie_(prefix_tree).md | 87 +++++++ 210._course_schedule_ii.md | 55 ++++ ...and Search Word - Data structure design.md | 77 ++++++ 213._house_robber_ii.md | 61 +++++ 216._combination_sum_iii.md | 40 +++ 217._contains_duplicate.md | 62 +++++ 219._contains_duplicate_ii.md | 35 +++ 221._maximal_square.md | 78 ++++++ 222._count_complete_tree_nodes.md | 67 +++++ 223._rectangle_area.md | 50 ++++ 224. Basic Calculator .md | 108 ++++++++ 225._implement_stack_using_queues.md | 53 ++++ 226._invert_binary_tree.md | 33 +++ 227._basic_calculator_ii.md | 108 ++++++++ 228._summary_ranges.md | 59 +++++ 229._majority_element_ii.md | 62 +++++ 230._kth_smallest_element_in_a_bst.md | 48 ++++ 231. Power of Two.md | 93 +++++++ 232._implement_queue_using_stacks.md | 51 ++++ 234._palindrome_linked_list.md | 124 +++++++++ ...common_ancestor_of_a_binary_search_tree.md | 33 +++ ...lowest_common_ancestor_of_a_binary_tree.md | 104 ++++++++ 237._delete_node_in_a_linked_list.md | 32 +++ 238._product_of_array_except_self.md | 100 ++++++++ 240._search_a_2d_matrix_ii.md | 65 +++++ 242._valid_anagram.md | 54 ++++ 252. Meeting Rooms.md | 47 ++++ 256. Paint House.md | 57 +++++ 257._binary_tree_paths.md | 45 ++++ 261. Graph Valid Tree.md | 69 +++++ 263._ugly_number.md | 38 +++ 264._ugly_number_ii.md | 140 +++++++++++ 265. Paint House II.md | 60 +++++ 266. Palindrome Permutation.md | 46 ++++ 267. Palindrome Permutation II.md | 77 ++++++ 268._missing_number.md | 37 +++ 270. Closest Binary Search Tree Value.md | 66 +++++ 276. Paint Fence.md | 65 +++++ 277. Find the Celebrity.md | 65 +++++ 278. First Bad Version.md | 44 ++++ 279._perfect_squares.md | 45 ++++ 280. Wiggle Sort.md | 78 ++++++ 283._move_zeroes.md | 93 +++++++ 285._inorder_successor_in_bst.md | 81 ++++++ 286. Walls and Gates.md | 90 +++++++ 289._game_of_life.md | 111 ++++++++ 290._word_pattern.md | 42 ++++ 292._nim_game.md | 55 ++++ 296. Best Meeting Point.md | 67 +++++ ...inary Tree Longest Consecutive Sequence.md | 123 +++++++++ 299._bulls_and_cows.md | 119 +++++++++ 300._longest_increasing_subsequence.md | 42 ++++ 303._range_sum_query_-_immutable.md | 47 ++++ 322. Coin Change.md | 52 ++++ ...ected Components in an Undirected Graph.md | 103 ++++++++ 326._power_of_three.md | 50 ++++ 328._odd_even_linked_list.md | 112 +++++++++ 334._increasing_triplet_subsequence.md | 71 ++++++ 337._house_robber_iii.md | 47 ++++ 338. Counting Bits.md | 46 ++++ 339. Nested List Weight Sum.md | 58 +++++ 341. Flatten Nested List Iterator.md | 51 ++++ 342. Power of Four.md | 33 +++ 344._reverse_string.md | 47 ++++ 349._intersection_of_two_arrays.md | 25 ++ 350._intersection_of_two_arrays_ii.md | 46 ++++ 353. Design Snake Game.md | 89 +++++++ 364. Nested List Weight Sum II.md | 47 ++++ 366. Find Leaves of Binary Tree.md | 54 ++++ 367._valid_perfect_square.md | 42 ++++ 369.Plus One Linked List.md | 46 ++++ 371._sum_of_two_integers.md | 95 +++++++ 377._combination_sum_iv.md | 77 ++++++ ...kth_smallest_element_in_a_sorted_matrix.md | 61 +++++ 380. Insert Delete GetRandom O(1).md | 159 ++++++++++++ ...ete GetRandom O(1) - Duplicates allowed.md | 83 ++++++ 382._linked_list_random_node.md | 79 ++++++ 383._ransom_note.md | 37 +++ 384. Shuffle an Array.md | 105 ++++++++ 387._first_unique_character_in_a_string.md | 59 +++++ 389._find_the_difference.md | 47 ++++ 392._is_subsequence.md | 69 +++++ 394._decode_string.md | 70 ++++++ 400. Nth Digit.md | 46 ++++ 401._binary_watch.md | 60 +++++ 404._sum_of_left_leaves.md | 45 ++++ 405. Convert a Number to Hexadecimal.md | 114 +++++++++ 412._fizz_buzz.md | 35 +++ 413. Arithmetic Slices.md | 84 +++++++ 414._third_maximum_number.md | 46 ++++ 415._add_strings.md | 61 +++++ 416. Partition Equal Subset Sum.md | 87 +++++++ 422. Valid Word Square.md | 48 ++++ 434._number_of_segments_in_a_string.md | 27 ++ 437._path_sum_iii.md | 51 ++++ 439. Ternary Expression Parser.md | 58 +++++ 441._arranging_coins.md | 29 +++ 450. Delete Node in a BST.md | 62 +++++ 453. Minimum Moves to Equal Array Elements.md | 72 ++++++ 461. Hamming Distance.md | 53 ++++ 469. Convex Polygon.md | 88 +++++++ 70. Climbing Stairs.md | 67 +++++ ...h \344\270\215\346\230\223\345\206\231.md" | 91 +++++++ Data Structure and Algorthim Review.md | 101 ++++++++ Dynamic Programming.md | 48 ++++ ...hing Algorithms \342\200\223 topcoder.pdf" | Bin 0 -> 117543 bytes "LinkedList\346\212\200\345\267\247.md" | 116 +++++++++ Maximal Square.pdf | Bin 0 -> 185749 bytes ...00\345\267\247\347\254\224\350\256\260.md" | 227 +++++++++++++++++ Range Sum Query 2D - Immutable.pdf | Bin 0 -> 167781 bytes Readme.md | 16 ++ Recusrion & BackTracking.md | 237 ++++++++++++++++++ "backtracking\346\200\235\350\267\257.md" | 68 +++++ ..._a_linked_list\351\227\256\351\242\230.md" | 69 +++++ ...60\347\232\204\346\200\235\350\267\257.md" | 14 ++ ...47\232\204\345\220\204\347\247\215pass.md" | 123 +++++++++ ...\214_graph_search\357\274\214_dfs,_bfs.md" | 183 ++++++++++++++ "\344\275\215\350\277\220\347\256\227.md" | 38 +++ ...22\345\210\227\347\256\227\346\263\225.md" | 194 ++++++++++++++ ...06\345\220\210\351\227\256\351\242\230.md" | 114 +++++++++ ...04\345\220\210\351\227\256\351\242\230.md" | 84 +++++++ "\351\200\222\345\275\222_recursion.md" | 39 +++ 250 files changed, 16931 insertions(+) create mode 100644 .DS_Store create mode 100644 001._two_sum.md create mode 100644 002._add_two_numbers.md create mode 100644 003._longest_substring_without_repeating_characters.md create mode 100644 004._median_of_two_sorted_arrays.md create mode 100644 005._longest_palindromic_substring.md create mode 100644 008._string_to_integer_(atoi).md create mode 100644 010._regular_expression_matching.md create mode 100644 011._container_with_most_water.md create mode 100644 012. Integer to Roman.md create mode 100644 013.Roman to Integer.md create mode 100644 014._longest_common_prefix.md create mode 100644 015._3sum.md create mode 100644 016._3sum_closest.md create mode 100644 017._letter_combinations_of_a_phone_number.md create mode 100644 018._4sum.md create mode 100644 019._remove_nth_node_from_end_of_list.md create mode 100644 020._valid_parentheses.md create mode 100644 021._merge_two_sorted_lists.md create mode 100644 022._generate_parentheses.md create mode 100644 023._merge_k_sorted_lists.md create mode 100644 024._swap_nodes_in_pairs.md create mode 100644 028._implement_strstr().md create mode 100644 031._next_permutation.md create mode 100644 033._search_in_rotated_sorted_array.md create mode 100644 034. Search for a Range.md create mode 100644 035._search_insert_position.md create mode 100644 039._combination_sum.md create mode 100644 040._combination_sum_ii.md create mode 100644 042._trapping_rain_water.md create mode 100644 043._multiply_strings.md create mode 100644 044._wildcard_matching.md create mode 100644 046._permutations.md create mode 100644 047._permutations_ii.md create mode 100644 048._rotate_image.md create mode 100644 049._group_anagrams_python.md create mode 100644 050._pow(x,_n).md create mode 100644 051._n-queens.md create mode 100644 052._n-queens_ii.md create mode 100644 053._maximum_subarray.md create mode 100644 054._spiral_matrix.md create mode 100644 055._jump_game.md create mode 100644 058._length_of_last_word.md create mode 100644 059._spiral_matrix_ii.md create mode 100644 060._permutation_sequence.md create mode 100644 061._rotate_list.md create mode 100644 064._minimum_path_sum.md create mode 100644 065.unique_paths_ii.md create mode 100644 066._plus_one.md create mode 100644 067._add_binary.md create mode 100644 069._sqrt(x).md create mode 100644 072._edit_distance.md create mode 100644 073. Set Matrix Zeroes.md create mode 100644 074._search_a_2d_matrix.md create mode 100644 075._sort_colors.md create mode 100644 077._combinations.md create mode 100644 078.Subsets .md create mode 100644 079._word_search.md create mode 100644 082._remove_duplicates_from_sorted_list_ii.md create mode 100644 083._remove_duplicates_from_sorted_list.md create mode 100644 086._partition_list.md create mode 100644 088._merge_sorted_array.md create mode 100644 089._gray_code.md create mode 100644 090._subsets_ii.md create mode 100644 091._decode_ways.md create mode 100644 092._reverse_linked_list_ii.md create mode 100644 093._restore_ip_addresses.md create mode 100644 094._binary_tree_inorder_traversal.md create mode 100644 096._unique_binary_search_trees.md create mode 100644 098._validate_binary_search_tree.md create mode 100644 100._same_tree.md create mode 100644 101._symmetric_tree.md create mode 100644 102._binary_tree_level_order_traversal.md create mode 100644 103._binary_tree_zigzag_level_order_traversal.md create mode 100644 104._maximum_depth_of_binary_tree.md create mode 100644 105._construct_binary_tree_from_preorder_and_inorder_traversal.md create mode 100644 106._construct_binary_tree_from_inorder_and_postorder_traversal.md create mode 100644 107._binary_tree_level_order_traversal_ii.md create mode 100644 108._convert_sorted_array_to_binary_search_tree.md create mode 100644 109._convert_sorted_list_to_binary_search_tree.md create mode 100644 110._balanced_binary_tree.md create mode 100644 111._minimum_depth_of_binary_tree.md create mode 100644 112._path_sum.md create mode 100644 113._path_sum_ii.md create mode 100644 114._flatten_binary_tree_to_linked_list.md create mode 100644 116._populating_next_right_pointers_in_each_node.md create mode 100644 118._pascal's_triangle.md create mode 100644 119. Pascal's Triangle II.md create mode 100644 120. Triangle.md create mode 100644 125._valid_palindrome.md create mode 100644 126. Word Ladder II.md create mode 100644 127._word_ladder.md create mode 100644 129._sum_root_to_leaf_numbers.md create mode 100644 130._surrounded_regions.md create mode 100644 131._palindrome_partitioning.md create mode 100644 133._clone_graph.md create mode 100644 136._single_number.md create mode 100644 139._word_break.md create mode 100644 140._word_break_ii.md create mode 100644 141._linked_list_cycle.md create mode 100644 143._reorder_list.md create mode 100644 144._binary_tree_preorder_traversal.md create mode 100644 145._binary_tree_postorder_traversal.md create mode 100644 147._insertion_sort_list.md create mode 100644 148._sort_list.md create mode 100644 150._evaluate_reverse_polish_notation.md create mode 100644 151._reverse_words_in_a_string.md create mode 100644 152._maximum_product_subarray.md create mode 100644 153._find_minimum_in_rotated_sorted_array.md create mode 100644 155._min_stack.md create mode 100644 160._intersection_of_two_linked_lists.md create mode 100644 162._find_peak_element.md create mode 100644 165._compare_version_numbers.md create mode 100644 167._two_sum_ii_-_input_array_is_sorted.md create mode 100644 168._excel_sheet_column_title.md create mode 100644 169._majority_element.md create mode 100644 171._excel_sheet_column_number.md create mode 100644 173._binary_search_tree_iterator.md create mode 100644 189._rotate_array.md create mode 100644 191._number_of_1_bits.md create mode 100644 198._house_robber.md create mode 100644 199._binary_tree_right_side_view.md create mode 100644 200._number_of_islands.md create mode 100644 203._remove_linked_list_elements.md create mode 100644 204._count_primes.md create mode 100644 205._isomorphic_strings.md create mode 100644 206._reverse_linked_list.md create mode 100644 207._course_schedule.md create mode 100644 208._implement_trie_(prefix_tree).md create mode 100644 210._course_schedule_ii.md create mode 100644 211. Add and Search Word - Data structure design.md create mode 100644 213._house_robber_ii.md create mode 100644 216._combination_sum_iii.md create mode 100644 217._contains_duplicate.md create mode 100644 219._contains_duplicate_ii.md create mode 100644 221._maximal_square.md create mode 100644 222._count_complete_tree_nodes.md create mode 100644 223._rectangle_area.md create mode 100644 224. Basic Calculator .md create mode 100644 225._implement_stack_using_queues.md create mode 100644 226._invert_binary_tree.md create mode 100644 227._basic_calculator_ii.md create mode 100644 228._summary_ranges.md create mode 100644 229._majority_element_ii.md create mode 100644 230._kth_smallest_element_in_a_bst.md create mode 100644 231. Power of Two.md create mode 100644 232._implement_queue_using_stacks.md create mode 100644 234._palindrome_linked_list.md create mode 100644 235._lowest_common_ancestor_of_a_binary_search_tree.md create mode 100644 236._lowest_common_ancestor_of_a_binary_tree.md create mode 100644 237._delete_node_in_a_linked_list.md create mode 100644 238._product_of_array_except_self.md create mode 100644 240._search_a_2d_matrix_ii.md create mode 100644 242._valid_anagram.md create mode 100644 252. Meeting Rooms.md create mode 100644 256. Paint House.md create mode 100644 257._binary_tree_paths.md create mode 100644 261. Graph Valid Tree.md create mode 100644 263._ugly_number.md create mode 100644 264._ugly_number_ii.md create mode 100644 265. Paint House II.md create mode 100644 266. Palindrome Permutation.md create mode 100644 267. Palindrome Permutation II.md create mode 100644 268._missing_number.md create mode 100644 270. Closest Binary Search Tree Value.md create mode 100644 276. Paint Fence.md create mode 100644 277. Find the Celebrity.md create mode 100644 278. First Bad Version.md create mode 100644 279._perfect_squares.md create mode 100644 280. Wiggle Sort.md create mode 100644 283._move_zeroes.md create mode 100644 285._inorder_successor_in_bst.md create mode 100644 286. Walls and Gates.md create mode 100644 289._game_of_life.md create mode 100644 290._word_pattern.md create mode 100644 292._nim_game.md create mode 100644 296. Best Meeting Point.md create mode 100644 298. Binary Tree Longest Consecutive Sequence.md create mode 100644 299._bulls_and_cows.md create mode 100644 300._longest_increasing_subsequence.md create mode 100644 303._range_sum_query_-_immutable.md create mode 100644 322. Coin Change.md create mode 100644 323. Number of Connected Components in an Undirected Graph.md create mode 100644 326._power_of_three.md create mode 100644 328._odd_even_linked_list.md create mode 100644 334._increasing_triplet_subsequence.md create mode 100644 337._house_robber_iii.md create mode 100644 338. Counting Bits.md create mode 100644 339. Nested List Weight Sum.md create mode 100644 341. Flatten Nested List Iterator.md create mode 100644 342. Power of Four.md create mode 100644 344._reverse_string.md create mode 100644 349._intersection_of_two_arrays.md create mode 100644 350._intersection_of_two_arrays_ii.md create mode 100644 353. Design Snake Game.md create mode 100644 364. Nested List Weight Sum II.md create mode 100644 366. Find Leaves of Binary Tree.md create mode 100644 367._valid_perfect_square.md create mode 100644 369.Plus One Linked List.md create mode 100644 371._sum_of_two_integers.md create mode 100644 377._combination_sum_iv.md create mode 100644 378._kth_smallest_element_in_a_sorted_matrix.md create mode 100644 380. Insert Delete GetRandom O(1).md create mode 100644 381. Insert Delete GetRandom O(1) - Duplicates allowed.md create mode 100644 382._linked_list_random_node.md create mode 100644 383._ransom_note.md create mode 100644 384. Shuffle an Array.md create mode 100644 387._first_unique_character_in_a_string.md create mode 100644 389._find_the_difference.md create mode 100644 392._is_subsequence.md create mode 100644 394._decode_string.md create mode 100644 400. Nth Digit.md create mode 100644 401._binary_watch.md create mode 100644 404._sum_of_left_leaves.md create mode 100644 405. Convert a Number to Hexadecimal.md create mode 100644 412._fizz_buzz.md create mode 100644 413. Arithmetic Slices.md create mode 100644 414._third_maximum_number.md create mode 100644 415._add_strings.md create mode 100644 416. Partition Equal Subset Sum.md create mode 100644 422. Valid Word Square.md create mode 100644 434._number_of_segments_in_a_string.md create mode 100644 437._path_sum_iii.md create mode 100644 439. Ternary Expression Parser.md create mode 100644 441._arranging_coins.md create mode 100644 450. Delete Node in a BST.md create mode 100644 453. Minimum Moves to Equal Array Elements.md create mode 100644 461. Hamming Distance.md create mode 100644 469. Convex Polygon.md create mode 100644 70. Climbing Stairs.md create mode 100644 "Binary Search \344\270\215\346\230\223\345\206\231.md" create mode 100644 Data Structure and Algorthim Review.md create mode 100644 Dynamic Programming.md create mode 100644 "Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" create mode 100644 "LinkedList\346\212\200\345\267\247.md" create mode 100644 Maximal Square.pdf create mode 100644 "Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.md" create mode 100644 Range Sum Query 2D - Immutable.pdf create mode 100644 Readme.md create mode 100644 Recusrion & BackTracking.md create mode 100644 "backtracking\346\200\235\350\267\257.md" create mode 100644 "delete_node_in_a_linked_list\351\227\256\351\242\230.md" create mode 100644 "local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" create mode 100644 "python\347\232\204\345\220\204\347\247\215pass.md" create mode 100644 "tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" create mode 100644 "\344\275\215\350\277\220\347\256\227.md" create mode 100644 "\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" create mode 100644 "\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" create mode 100644 "\347\273\204\345\220\210\351\227\256\351\242\230.md" create mode 100644 "\351\200\222\345\275\222_recursion.md" diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..b9081167bec57b03803a6eb35b4bd974f4f5755a GIT binary patch literal 6148 zcmeHK&1%~~5T141MkbW{5J--DDdgaSOiJBS0>VxXfgD0q+Cx(kDH63n)dpLRNgM~g zM)F2^f<8|B?T_6Sx6oWnTV`PP8_mwlqHo2nhKNLWl(dPOMC3s=)*2XoA$nfxg4CR6 z1t?679w|yFrRUUJh-Sy%$bjCvbvnSFrBq_qzVF`w9Z`s#Jfus^^f6QH=jtrZRg4_{ z!MuTPeKi8>0d?Z>@Z8n8kI(aLSo;1KQCq1$dc5j28eZdx_c83Naacy>XxNPgAIwvh zq_MN#DwWUeD1MivKsO8AGv0slji1R((zxl ze0epwp5EM=S0sTC-N;jiGq{8C$3$L)gCbYO zC*;iP&FU~R1Iz$3umlF&(c`TxVJ%*Q8DIwfEe7=YAfXxqhm}QhbYL(o0I&|X5!m|I zQ0GX8fy2roW+1|*0&S{rErzh^@JkmLIIJw%bP}%l5N>7RIuv16M}29+Ndy*oWCoal zpBd1-AEc@8|GnS$|0akBW`G&^KN%49-Eg;ycXM~^!dvRQRzgpqT6A1xah?LhT*Zjh dSMes)2>enTz`$W;5grKt2pAf8U + + +难度: + +Easy + + +思路 + +可以用O(n^2) loop + +但是也可以牺牲空间换取时间,异常聪明的AC解法 + +``` + 2 7 11 15 + 不存在 存在之中 +lookup {2:0} [0,1] +``` + +一点字典有了这个 `target - 当前数字`,找到它的index和当前index一起返回。 + + +``` +class Solution(object): + def twoSum(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[int] + """ + lookup = {} + for i, num in enumerate(nums): + if target - num in lookup: + return [lookup[target - num],i] + lookup[num] = i + return [] +``` + + diff --git a/002._add_two_numbers.md b/002._add_two_numbers.md new file mode 100644 index 000000000..828fd7610 --- /dev/null +++ b/002._add_two_numbers.md @@ -0,0 +1,37 @@ +###2. Add Two Numbers + +题目: + + + +难度 : Medium + + +跟plus One, add Binary 玩的同一种花样 + + +``` +class Solution(object): + def addTwoNumbers(self, l1, l2): + """ + :type l1: ListNode + :type l2: ListNode + :rtype: ListNode + """ + #easiest case + if l1 == None: + return l2 + if l2 == None: + return l1 + + if l1.val + l2.val < 10: + l3 = ListNode(l1.val + l2.val) + l3.next = self.addTwoNumbers(l1.next, l2.next) + + elif l1.val + l2.val >= 10: + l3 = ListNode(l1.val + l2.val - 10) + tmp = ListNode(1) + tmp.next = None + l3.next = self.addTwoNumbers(l1.next, self.addTwoNumbers(l2.next ,tmp)) + return l3 +``` diff --git a/003._longest_substring_without_repeating_characters.md b/003._longest_substring_without_repeating_characters.md new file mode 100644 index 000000000..74e95c8ce --- /dev/null +++ b/003._longest_substring_without_repeating_characters.md @@ -0,0 +1,56 @@ +###3. Longest Substring Without Repeating Characters + + +题目: + + + +难度: + +Medium + + + +思路 + +粗一看是dp,细一看是greedy + + + idx 0 1 2 3 4 5 6 7 + a b c a b c b b + rnd ↑ stop↑ + ↑ stop↑ + ↑ stop↑ + + +因为其实只要每次记录下重复开始的位置,就可以解决问题。 + + +注意最后还有一个 n - start 和 l 来比较,这相当于是最后一个round + + +如果当前重复的这个s[i]取值是限定大于start,就是在start之后再出现重复 + + +``` +class Solution(object): + def lengthOfLongestSubstring(self, s): + """ + :type s: str + :rtype: int + """ + n = len(s) + l = 0 + maps = {} + start = 0 + + for i in range(n): + if maps.get(s[i],-1) >= start: + l = max(i - start, l) + start = maps.get(s[i]) + 1 + print start + maps[s[i]] = i + return max(n - start, l) +``` + + diff --git a/004._median_of_two_sorted_arrays.md b/004._median_of_two_sorted_arrays.md new file mode 100644 index 000000000..32f419e3a --- /dev/null +++ b/004._median_of_two_sorted_arrays.md @@ -0,0 +1,151 @@ +###4. Median of Two Sorted Arrays + +题目: + + + +难度: + +Hard + + +一看到的时候,觉得跟CLRS书上的一道习题类似 +求X[1....n] Y[1....n] 的 median + +习题 9.3-8 + + +Let X[1..n] and Y [1..n] be two arrays, each containing n numbers already in sorted order. Give an O(lg n)-time algorithn to find the median of all 2n elements in arrays X and Y . + + +> The median can be obtained recursively as follows. Pick the median of the sorted array A. This is just O(1) time as median is the n/2th element in the sorted array. Now compare the median of A, call is a∗ with median of B, b∗. We have two cases. + - a∗ < b∗ : In this case, the elements in B[n/2 ···n] are also greater than a . So the median cannot lie in either A[1 · · · n/2 ] or B[n/2 · · · n]. So we can just throw these away and recursively + - a∗ > b∗ : In this case, we can still throw away B[1··· n/2] and also A[ n/ · · · n] and solve a smaller subproblem recursively. + In either case, our subproblem size reduces by a factor of half and we spend only constant time to compare the medians of A and B. So the recurrence relation would be T (n) = T (n/2) + O(1) which has a solution T (n) = O(log n). +divide and conquer + +- 如果X[n/2] == Y[n/2],则找到,return +- 如果X[n/2] < Y[n/2],找X[n/2+1….n]和Y[1,2…n/2]之间 +- 否则找X[1..n/2]和Y[n/2…n] + + + + +但是实际上不同,这里需要考虑的问题更多: + +- 两个数组长度不一样 +- 并不是只找一个median,如果median有两个,需要算平均 + +思路 + +把它转化成经典的findKth问题 + +参考: + + +首先转成求A和B数组中第k小的数的问题, 然后用k/2在A和B中分别找。 + + +比如k = 6, 分别看A和B中的第3个数, 已知 A1 < A2 < A3 < A4 < A5... 和 B1 < B2 < B3 < B4 < B5..., 如果A3 <= B3, 那么第6小的数肯定不会是A1, A2, A3, 因为最多有两个数小于A1, 三个数小于A2, 四个数小于A3。 关键点是从 k/2 开始来找。 + + + +B3至少大于5个数, 所以第6小的数有可能是B1 (A1 < A2 < A3 < A4 < A5 < B1), 有可能是B2 (A1 < A2 < A3 < B1 < A4 < B2), 有可能是B3 (A1 < A2 < A3 < B1 < B2 < B3)。那就可以排除掉A1, A2, A3, 转成求A4, A5, ... B1, B2, B3, ...这些数中第3小的数的问题, k就被减半了。每次都假设A的元素个数少, pa = min(k/2, lenA)的结果可能导致k == 1或A空, 这两种情况都是终止条件。 + + +发问,为什么要从k/2开始寻找,依旧k = 6, 我可以比较A1 和 B5的关系么,可以这样做,但是明显的问题出现在如果A1 > B5,那么这个第6小的数应该存在于B6和A1中。 + +如果A1 < B5,这个时间可能性就很多了,比如A1 < A2 < A3 < A4 < B1 < B2,各种可能,无法排除元素,所以还是要从k/2开始寻找。 + +这个跟习题算法的区别是每次扔的东西明显少一些,但是k也在不断变小。 + + +``` +class Solution(object): + def findMedianSortedArrays(self, nums1, nums2): + """ + :type nums1: List[int] + :type nums2: List[int] + :rtype: float + """ + n = len(nums1) + len(nums2) + if n % 2 == 1: + return self.findKth(nums1, nums2, n / 2 + 1) + else: + smaller = self.findKth(nums1, nums2, n / 2) + bigger = self.findKth(nums1, nums2, n / 2 + 1) + return (smaller + bigger) / 2.0 + + + def findKth(self, A, B, k): + if len(A) == 0: + return B[k-1] + if len(B) == 0: + return A[k-1] + if k == 1 : + return min(A[0],B[0]) + + + a = A[ k / 2 - 1 ] if len(A) >= k / 2 else None + b = B[ k / 2 - 1 ] if len(B) >= k / 2 else None + + if b is None or (a is not None and a < b): + return self.findKth(A[k/2:], B, k - k/2) + return self.findKth(A, B[k/2:],k - k/2) + +``` + +这个findKth的算法单独抽出来也是题目。 + +给定两个已经排序好的数组,求第k大的,算法有O(m+n).类似merge sort的原理。否则利用的就是之上提到的,利用已经有序的原理,然后每次丢。 + +之所以这里还有一个丢弃条件是b is None 丢A的一部分,是因为B的数组长度是有限的,这个时候很明显丢A的k/2是不影响的,因为无论B[-1]是如何大或者小,因为整个B的长度没有达到k/2,所以丢掉的这部分最大的A[k/2-1]也不可能是第k个,因为即使整个B都比A[k/2-1],拼起来也不能使A[k/2-1]第k大,所以可以放心丢弃。 + + +这里是两个sorted list/array findKth,想到了类似的题目,如果给一个n个linked list,findKth,能想到的办法也只能是用heap吧,类似merge k sorted lists. + + +再写一个O(m+n)类似merge sort的也可以AC的代码 + +``` +class Solution(object): + def findMedianSortedArrays(self, nums1, nums2): + """ + :type nums1: List[int] + :type nums2: List[int] + :rtype: float + """ + def findKth(A, pa, B, pb, k): + res = 0 + m = 0 + while pa < len(A) and pb < len(B) and m < k: + if A[pa] < B[pb]: + res = A[pa] + m += 1 + pa += 1 + else: + res = B[pb] + m += 1 + pb += 1 + + while pa < len(A) and m < k: + res = A[pa] + pa += 1 + m += 1 + + + while pb < len(B) and m < k: + res = B[pb] + pb += 1 + m += 1 + return res + + n = len(nums1) + len(nums2) + if n % 2 == 1: + return findKth(nums1,0, nums2,0, n / 2 + 1) + else: + smaller = findKth(nums1,0, nums2,0, n / 2) + bigger = findKth(nums1,0, nums2,0, n / 2 + 1) + return (smaller + bigger) / 2.0 + +``` \ No newline at end of file diff --git a/005._longest_palindromic_substring.md b/005._longest_palindromic_substring.md new file mode 100644 index 000000000..b09aad051 --- /dev/null +++ b/005._longest_palindromic_substring.md @@ -0,0 +1,193 @@ +###5. Longest Palindromic Substring + + +题目: + + + +难度: + +Medium + + + +思路0: + +暴力解法绝对不行 + + +思路1: + +所以一个好的想法是 s 和 reverse(s) 共有的最长的 substring就是longest palindromic substring -> 问题转成求Longest common substring problem +参见[wikipedia](https://en.wikipedia.org/wiki/Longest_common_substring_problem) +,典型动归 + +LCSuff(S1...p, T1...q) = LCS(S1...p1, T1...q-1) if S[p] = T[q] else 0 + + + +伪码也有了,代码也有: + + + + +这样也超时? + + +``` +class Solution(object): + def longestPalindrome(self, s): + """ + :type s: str + :rtype: str + """ + def lcs(s1, s2): + m = [[0] * (1 + len(s2)) for i in xrange(1 + len(s1))] + longest, x_longest = 0, 0 + for x in xrange(1, 1 + len(s1)): + for y in xrange(1, 1 + len(s2)): + if s1[x - 1] == s2[y - 1]: + m[x][y] = m[x - 1][y - 1] + 1 + if m[x][y] > longest: + longest = m[x][y] + x_longest = x + else: + m[x][y] = 0 + return s1[x_longest - longest: x_longest] + + return lcs(s, s[::-1]) +``` + +因为以为这样s[::-1]已经很快了. + + +这个方法是buggy的,看字符串`abcxgcba`,它reverse之后是`abcgxcba`,它们有公共字符串,但是这里面没有回文,修复方式是: + +> we check if the substring’s indices are the same as the reversed substring’s original indices. If it is, then we attempt to update the longest palindrome found so far; if not, we skip this and find the next candidate. + +我觉得的修复方式这样么: + +``` +原本 翻转 +ABXYBA ABYXBA + +求出来的substring indices是 0:2 但是这个s1[0:2] 和 s2[0:2]一样,所以不行 +同理common substring indices还是s[4:6] 和s2[4:6]一样,不行 + +而比如ABAD和 DABA + +substring indice 一个是0:3, 一个是1:4,这样就没问题 + + +``` + + + +思路2: + + + +> 依次把每一个字符当做回文字符串的中间字符,找到以该字符为中间字符的回文串的最大长度。分别对奇偶的情况进行讨论,接下来的关键就是对边界的把握,确保下标不要越界。当子串已经包含首字符或最后一个字符且此时还是回文串的时候,下标分别会向两边多移一位,需要补回来。 + +参考 + + +``` +class Solution(object): + def longestPalindrome(self, s): + """ + :type s: str + :rtype: str + """ + n = len(s) + + # empty or one char + if n < 2: + return s + + # left index of the target substring + l = 0 + # right index of the target substring + r = 0 + # length of the longest palindromic substring for now + m = 0 + # length of the current substring + c = 0 + + # Whether the substring contains the first character or last character and is palindromic + b = True + for i in range(n): + # Odd situation + for j in range(min(n-i,i+1)): + if s[i-j] != s [i+j]: + b = False + break + else: + c = 2 * j + 1 + + if c > m : + l = i - j + 1 - b + r = i + j + b + m = c + b = True + + # Even situation + for j in range(min(n - i - 1, i + 1)): + if (s[i - j] != s[i + j + 1]): + b = False + break + else: + c = 2 * j + 2 + if (c > m): + l = i - j + 1 - b + r = i + j + 1 + b + m = c + b = True + return s[l:r] +``` + +以上是参考版本,自己写的版本: + + +``` +class Solution(object): + def longestPalindrome(self, s): + """ + :type s: str + :rtype: str + """ + n = len(s) + + m,l,r = 0,0,0 + + for i in range(n): + # odd case + for j in range(min(i+1,n-i)): + if s[i-j] != s[i+j]: + break + if 2*j + 1 > m : + m = 2 * j + 1 + l = i-j + r = i+j + + + if i+1 < n and s[i] == s[i+1]: + for j in range(min(i+1,n-i-1)): + if s[i-j] != s[i+j+1]: + break + if 2 * j + 2 > m : + m = 2*j +2 + l = i-j + r = i+j+1 + + + return s[l:r+1] +``` + + + + +思路3: + +在查看wikipedia,有一个[Longest palindromic substring](https://en.wikipedia.org/wiki/Longest_palindromic_substring), 有一个Manacher算法,to be 学 + diff --git a/008._string_to_integer_(atoi).md b/008._string_to_integer_(atoi).md new file mode 100644 index 000000000..c8a9ce4fd --- /dev/null +++ b/008._string_to_integer_(atoi).md @@ -0,0 +1,47 @@ +###8. String to Integer (atoi) + +题目: + + + +难度: +Easy + + +需要考虑比较多的边界条件&特殊情况 + + +``` +class Solution(object): + def myAtoi(self, str): + """ + :type str: str + :rtype: int + """ + str = str.strip() + strNum = 0 + if len(str) == 0: + return strNum + + positive = True + if str[0] == '+' or str[0] == '-': + if str[0] == '-': + positive = False + str = str[1:] + + for char in str: + if char >='0' and char <='9': + strNum = strNum * 10 + ord(char) - ord('0') + if char < '0' or char > '9': + break + + if strNum > 2147483647: + if positive == False: + return -2147483648 + else: + return 2147483647 + if not positive: + strNum = 0 - strNum + return strNum + +``` \ No newline at end of file diff --git a/010._regular_expression_matching.md b/010._regular_expression_matching.md new file mode 100644 index 000000000..a2ef0a109 --- /dev/null +++ b/010._regular_expression_matching.md @@ -0,0 +1,141 @@ +###010. Regular Expression Matching + +题目: + + + +难度: + +Hard + + + + +先尝试暴力解法,难点就在 * 身上, * 不会单独出现,它一定是和前面一个字母或"."配成一对。看成一对后"X*",它的性质就是:要不匹配0个,要不匹配连续的“X”.所以尝试暴力解法的时候一个trick是从后往前匹配. + + + +暴力解法居然也能AC? + + +``` +class Solution(object): + def isMatch(self, s, p): + """ + :type s: str + :type p: str + :rtype: bool + """ + FRONT = -1 + def helper(s, i, p, j): + if(j == FRONT): + return (i == FRONT) + if(i == FRONT): + if p[j] != '*': + return False + return helper(s,i,p,j-2) + if(p[j] == '*'): + if(p[j-1] == '.' or p[j-1] == s[i]): + if helper(s, i-1, p, j): + return True + return helper(s,i,p,j-2) + if(p[j] == '.' or p[j] == s[i]): + return helper(s,i-1,p,j-1) + return False + + return helper(s, len(s)-1, p, len(p)-1) + +``` + + +是这样来分情况看得: + +- 如果s[i] = p[j] 或者 p[j]= . : 往前匹配一位 +- 如果p[j] = ' * ', 检查一下,如果这个时候p[j-1] = . 或者p[j-1] = s[i] ,那么就往前匹配,如果这样能匹配过,就return True, 否者我们忽略 ' X* ',这里注意里面的递推关系 +- 再处理一下边界状况: + - s已经匹配完了, 如果此时p还有,那么如果剩下的是 X* 这种可以过,所以检查 + - p匹配完毕,如果s还有那么报错 + + + +dp优化,感觉和edit distance很像。 DP优化待代码化,感觉学DP的一个重点除了递归学好以外,另一点是一定要会画表格。 + + +画一个表格来看一下状况 + +``` + c * a * b + 0 1 2 3 4 5 + 0 1 0 1 0 1 0 +a 1 0 0 0 1 1 0 +a 2 0 0 0 0 1 0 +b 3 0 0 0 0 0 1 + +``` + +这里有几个取巧/容易出问题的敌方,这里画的表用的是1-based string。一上来,做的事包括: + +- 初始化,空字符匹配:dp[0][0] =1 +- 第一行,c* 可以匹配空字符,c* a* 可以匹配空字符,p[j-1] != s[i],匹配空字符 +- 然后进入第二行再来看,实际上我们可以看到,如果没有碰到 * 匹配还是很朴素的,但是碰到 * : + - 1这个匹配可以从左侧传来,dp[i][j] = dp[i][j-1],that is 匹配 1个 + - 1 也可以有上方传来,这种情况是p[j-1] = s[i],匹配多个 dp[i][j] = dp[i-1][j] + - 1 这个匹配也可以从间隔一个的左侧传来,that is也可以有个性的匹配0个,如同匹配空字符一样dp[i][j] = dp[i][j-2],但是注意匹配0个实际上有两种状况,如果p[j-1]!=s[i],强制匹配0个,即使p[j-1] == s[i],我们也可以傲娇的用它来匹配0个。 + +再代码化一点: + +- s[i] == p[j] 或者 p[j] == '.' : dp[i][j] = dp[i-1][j-1] +- p[j] == '*': 然后分几种情况 + - p[j-1] != s[i] : dp[i][j] = dp[i][j-2] 匹配0个的状况 + - p[j-1] == s[i] or p[i-1] == '.': + - dp[i][j] = dp[i-1][j] 匹配多个s[i] + - dp[i][j] = dp[i][j-1] 匹配一个 + - dp[i][j] = dp[i][j-2] 匹配0个 + +AC代码,注意一下,因为上表为了表达方便,用的是1-based string系统,实际写代码的时候我们心里还是清楚这个string还是从0开始的,不过也可以尝试往前面添东西来方便。 + + +AC代码 + +``` +class Solution(object): + def isMatch(self, s, p): + """ + :type s: str + :type p: str + :rtype: bool + """ + m, n = len(s), len(p) + dp = [ [0 for i in range(n+1)] for j in range(m+1)] + + dp[0][0] = 1 + + # init the first line + for i in range(2,n+1): + if p[i-1] == '*': + dp[0][i] = dp[0][i-2] + + for i in range(1,m+1): + for j in range(1,n+1): + if p[j-1] == '*': + if p[j-2] != s[i-1] and p[j-2] != '.': + dp[i][j] = dp[i][j-2] + elif p[j-2] == s[i-1] or p[j-2] == '.': + dp[i][j] = dp[i-1][j] or dp[i][j-1] or dp[i][j-2] + + elif s[i-1] == p[j-1] or p[j-1] == '.': + dp[i][j] = dp[i-1][j-1] + + return dp[m][n] == 1 + +``` + + + +参考: + + + + + +发现自己喜欢这道题目 \ No newline at end of file diff --git a/011._container_with_most_water.md b/011._container_with_most_water.md new file mode 100644 index 000000000..ef6efbc71 --- /dev/null +++ b/011._container_with_most_water.md @@ -0,0 +1,109 @@ +###11. Container With Most Water + + + +题目: + + + +难度: +Medium + +思路: + + +首先理解花了我一点时间,因为一开始写出来,给了一个例子: + +``` + +height = [3,2,1,3] +解是 9 + + + | | + | | | + | | | | + 1 2 3 4 + + 一开始我的理解走偏的地方是这个9是如何得到的,因为根据最短板原理,明显不可能得到9啊,后来发现是·Find two lines, which together with x-axis forms a container, such that the container contains the most water. +``` + +所以代码写起来就简单了,AC无能,超时,时间复杂度O(N^2) + + +``` +class Solution(object): + def maxArea(self, height): + """ + :type height: List[int] + :rtype: int + """ + n = len(height) + mostWater = 0 + + for i in range(n-1): + for j in range(i,n): + lowest = min(height[i], height[j]) + water = (j - i) * lowest + if water > mostWater: + mostWater = water + return mostWater + +``` + +题目给的tag是 two pointer,所以上边的策略肯定可以改进,改进的地方就不能是这个一次走一边,而可能是两边都要走。 + + + +参考 + + +思路: + +由于ai和aj (i=i, j'<=j) >= S(i,j),由于j'-i' <= j-i,必然要有min(ai',aj')>=min(ai,aj)才行。同样可以采用头尾双指针向中间移动: + +当a(left) < a(right)时,对任何j S(left, j a(right)时,需要左移right`。`而当a(left) = a(right)时,需要同时移动left和right。` + +思路整理: +left = 0, right = n-1 +(1) a[left] < a[right], left++ +(2) a[left] > a[right], right-- +(3) a[left] = a[right], left++, right-- +终止条件:left >= right + +这个证明大快人心 + + +这样写也能过: + + +``` +class Solution(object): + def maxArea(self, height): + """ + :type height: List[int] + :rtype: int + """ + n = len(height) + left, right = 0, n - 1 + + mostWater = 0 + while left < right: + water = min(height[left], height[right]) * (right - left) + mostWater = max(water, mostWater) + + if height[left] < height[right]: + left += 1 + else: + right -= 1 + + + return mostWater +``` \ No newline at end of file diff --git a/012. Integer to Roman.md b/012. Integer to Roman.md new file mode 100644 index 000000000..617f287ea --- /dev/null +++ b/012. Integer to Roman.md @@ -0,0 +1,89 @@ +###12. Integer to Roman + + +题目: + + + +难度: +Medium + +思路: + +首先我学习了一下罗马字母是如何表示的。然后感慨,这个阿拉伯数字是多么好的发明 + + + +上图 + + + +基于的是这些个Symbol: + +``` +1 5 10 50 100 500 1000 +I V X L C D M +``` + +组合是这种方式 + +``` +1 2 3 4 5 6 7 8 9 +I II III IV V VI VII VIII IX +10 20 30 40 50 60 70 80 90 +X XX XXX XL L LX LXX LXXX XC +100 200 300 400 500 600 700 800 900 +C CC CCC CD D DC DCC DCCC CM +``` + + + +可以看出来,这个进位或者组合是4和9的地方进位的,比如4是加上了I然后到V,9是加上了I到X。所以题目要限制数字在1-3999之间。 + +然后就去谷歌罗马数字最大能表示多少,看到了一个更好的总结,不过是可以更大的,数字上面加bar. + + + +via + +下面是几个通常的规则来构成罗马数字: + +- 大部分时候用字符相叠加来表示数字。I是1, II是2, III是3。VI是6(挨个看来,是“5 和 1”的组合),VII是7,VIII是8。 +- 含有10的字符(I,X,C和M)最多可以重复出现三个。为了表示4,必须用同一位数的下一个更大的数字5来减去一。不能用IIII来表示4,而应该是IV(意思是比5小1)。40写做XL(比50小10),41写做XLI,42写做XLII,43写做XLIII,44写做XLIV(比50小10并且比5小1)。 +- 有些时候表示方法恰恰相反。为了表示一个中间的数字,需要从一个最终的值来减。比如:9需要从10来减:8是VIII,但9确是IX(比10小1),并不是VIII(I字符不能重复4次)。90是XC,900是CM。 +- 表示5的字符不能在一个数字中重复出现。10只能用X表示,不能用VV表示。100只能用C表示,而不是LL。 +- 罗马数字是从左到右来计算,因此字符的顺序非常重要。DC表示600,而CD完全是另一个数字400(比500小100)。CI是101,IC不是一个罗马数字(因为你不能从100减1,你只能写成XCIX,表示比100小10,且比10小1)。 + +**规则总结:  左减右加    加减时位数和被加减数相差位数最大为一(两位数可加减一位数 三位数只能加减两位数)  从左向右计数** + + + +所以想着4,9这块需要特殊处理一下,但是看到了一个很棒的[算法](https://gist.github.com/imilu/00f32c61e50b7ca296f91e9d96d8e976) + + + +AC代码 + +``` + +class Solution(object): + def intToRoman(self, num): + """ + :type num: int + :rtype: str + """ + lookup = {'M':1000, 'CM':900, 'D':500, 'CD':400, 'C':100, 'XC':90, 'L':50, 'XL':40, 'X':10, 'IX':9, 'V':5, 'IV':4, 'I':1} + romanSt = '' + + for symbol, val in sorted(lookup.items(), key = lambda t: t[1], reverse = True): + while num >= val: + romanSt += symbol + num -= val + return romanSt +``` + + + + + +因为dict本身是无序的,这里做了一个排序的操作,否则可能会出现IIII这种状况。 \ No newline at end of file diff --git a/013.Roman to Integer.md b/013.Roman to Integer.md new file mode 100644 index 000000000..f8ddb8667 --- /dev/null +++ b/013.Roman to Integer.md @@ -0,0 +1,80 @@ +### 13.Roman to Integer + + + +题目: + + +难度: +Easy + +思路: + +integer to Roman 是 Medium,这个roman to integer是easy + +所以用的傻方法,特殊处理4,9,40,90,400,900,再加上剩下的数字 + + + +AC代码 + +``` +class Solution(object): + def romanToInt(self, s): + """ + :type s: str + :rtype: int + """ + lookup1 = {'CM':900,'CD':400,'XC':90,'XL':40,'IX':9,'IV':4} + lookup2 = {'M':1000, 'D':500, 'C':100, 'L':50, 'X':10, 'V':5, 'I':1} + + num = 0 + for i in lookup1.keys(): + if i in s: + num += lookup1[i] + s = s.replace(i,'') + + for char in s: + num += lookup2[char] + + return num +``` + + + + + +然后可以有更好的方法: + +> 从前往后扫描,用一个临时变量记录分段数字。 +> +> 如果当前比前一个大,说明这一段的值应当是这个值减去上一个值。比如IV = 5-1 =4; 否则,将当前值加入到结果中,然后开始下一段记录,比如VI = 5 + 1, II = 1 +1 + + + +所以这也就是罗马数字的基础,感觉?这样才不会读串? + + + +AC代码 + +``` +class Solution(object): + def romanToInt(self, s): + """ + :type s: str + :rtype: int + """ + lookup = {'M':1000, 'D':500, 'C':100, 'L':50, 'X':10, 'V':5, 'I':1} + + num = 0 + + for i in range(len(s)): + if i > 0 and lookup[s[i]] > lookup[s[i-1]]: + num += lookup[s[i]] - 2 * lookup[s[i-1]] + else: + num += lookup[s[i]] + + return num +``` + diff --git a/014._longest_common_prefix.md b/014._longest_common_prefix.md new file mode 100644 index 000000000..14e6247dd --- /dev/null +++ b/014._longest_common_prefix.md @@ -0,0 +1,76 @@ +###14. Longest Common Prefix + + +题目: + + + +难度: + +Easy + + +思路: + +找出最短的string,然后一个一个对比,缺点是时间复杂度会比较高,AC代码,这代码优雅程度也是负数啊 + +``` + +class Solution(object): + def longestCommonPrefix(self, strs): + """ + :type strs: List[str] + :rtype: str + """ + if strs == []: return '' + + shortStr = '' + shortLen = float('inf') + + for s in strs: + if len(s) < shortLen: + shortLen = len(s) + shortStr = s + + # print shortStr, shortLen + + n = len(strs) + i = 0 + same = True + while i < shortLen and same: + j = 0 + while j < n : + if strs[j][i] != shortStr[i]: + same = False + break + j += 1 + if same: + i += 1 + else: + break + return shortStr[:i] +``` + + +看一下别人写的优雅程度 佳 + + +``` +class Solution(object): + def longestCommonPrefix(self, strs): + """ + :type strs: List[str] + :rtype: str + """ + if not strs: + return "" + longest = strs[0] + for i in range(len(strs[0])): + for str in strs: + if len(str) <= i or strs[0][i] != str[i]: + return strs[0][:i] + return strs[0] + +``` + +这个题解锁之后可以看到各种各样的解法,to be 读 diff --git a/015._3sum.md b/015._3sum.md new file mode 100644 index 000000000..c7ac15c01 --- /dev/null +++ b/015._3sum.md @@ -0,0 +1,104 @@ +###15. 3Sum + +题目: + + + +难度: + +Medium + + +第一想法,先把nums排序,用三个loop,无法AC + +``` +class Solution(object): + def threeSum(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + n = len(nums) + res = [] + nums.sort() + for i in range(n): + for j in range(i,n): + for k in range(j,n): + if nums[i] + nums[j] + nums[k] == 0 and j != i and k != j and k != i: + curRes = [nums[i],nums[j],nums[k]] + if curRes not in res: + res.append(curRes) + + return res +``` + + +然后查了一下2sum,用2sum的花样,因为要排除重复以及输出是按照从小到大的输出: + + +``` +class Solution(object): + def threeSum(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + def twoSum(nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[int] + """ + lookup = {} + for num in nums: + if target - num in lookup: + if (-target ,target - num, num) not in res: + res.append((-target ,target - num, num)) + lookup[num] = target - num + + n = len(nums) + nums.sort() + res = [] + for i in range(n): + twoSum(nums[i+1:], 0-nums[i]) + return [list(i) for i in res] +``` + + +谷歌看别人的代码,思路非常清晰的,运行起来比直接调用 Two Sum快. + +清晰的思路: + +- 排序 +- 固定左边,如果左边重复,继续 +- 左右弄边界,去重,针对不同的左右边界情况处理 + + +``` +class Solution(object): + def threeSum(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + n = len(nums) + nums.sort() + ans = [] + for i in range(n): + if i > 0 and nums[i] == nums[i-1] : continue + l, r = i+1, n -1 + while l < r: + temp = nums[i] + nums[l] + nums[r] + if temp == 0: + ans.append([nums[i],nums[l],nums[r]]) + l += 1 + r -= 1 + while l < r and nums[l] == nums[l-1]: l += 1 + while l < r and nums[r] == nums[r+1]: r -= 1 + elif temp > 0: + r -= 1 + else: + l += 1 + return ans +``` + diff --git a/016._3sum_closest.md b/016._3sum_closest.md new file mode 100644 index 000000000..75304fb4c --- /dev/null +++ b/016._3sum_closest.md @@ -0,0 +1,52 @@ +###16. 3Sum Closest + +题目: + + + +难度: + +Medium + + +思路: +跟3 Sum一样,固定一个元素 + +用两个指针来循环 + + +``` + +class Solution(object): + def threeSumClosest(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: int + """ + n = len(nums) + nums.sort() + ans = None + diff = float('inf') # infinity + for i in range(n): + if i > 0 and nums[i] == nums[i-1] : continue + l, r = i+1, n -1 + while l < r: + temp = nums[i] + nums[l] + nums[r] + if temp == target: + return target + if temp < target: + l += 1 + if abs(temp - target) < diff: + diff = abs(temp - target) + ans = temp + while l < r and nums[l] == nums[l-1]: l += 1 + elif temp > target : + r -= 1 + if abs(temp - target) < diff: + diff = abs(temp - target) + ans = temp + while l < r and nums[r] == nums[r+1]: r -= 1 + return ans + +``` \ No newline at end of file diff --git a/017._letter_combinations_of_a_phone_number.md b/017._letter_combinations_of_a_phone_number.md new file mode 100644 index 000000000..5f61a7e96 --- /dev/null +++ b/017._letter_combinations_of_a_phone_number.md @@ -0,0 +1,55 @@ +###17. Letter Combinations of a Phone Number + +题目: + + + + +难度: + +Medium + + +思路: + + - hash table一个,用来对应digit -> letter + - s用来记录结果,每次从digits里面去一个,然后寻找其可能的char,加到s中,digits长度减小 + - digits长度为0时候,把它加入结果 + + + +``` +class Solution(object): + def letterCombinations(self, digits): + """ + :type digits: str + :rtype: List[str] + """ + if digits == "": + return [] + + self.res = [] + self.singleResult('',digits) + return self.res + + def singleResult(self, s, digits): + if len(digits) == 0: + self.res.append(s) + else: + mapx = {'2':['a','b','c'], + '3':['d','e','f'], + '4':['g','h','i'], + '5':['j','k','l'], + '6':['m','n','o'], + '7':['p','q','r','s'], + '8':['t','u','v'], + '9':['w','x','y','z']} + + curDigit = digits[0] + for alpha in mapx[curDigit]: + self.singleResult(s + alpha, digits[1:]) + + +``` + + diff --git a/018._4sum.md b/018._4sum.md new file mode 100644 index 000000000..10a3c4dff --- /dev/null +++ b/018._4sum.md @@ -0,0 +1,94 @@ +###18. 4Sum + +题目: + + + +难度: + +Medium + + +思路: + +用3sum改 + +固定两个数,活动别的 + + +``` +class Solution(object): + def fourSum(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[List[int]] + """ + n = len(nums) + nums.sort() + ans = [] + for i in range(n): + for j in range(i+1,n): + l, r = j+1, n-1 + while l < r: + temp = nums[i] + nums[j] + nums[l] + nums[r] + if temp == target: + # print nums[i],nums[j],nums[l],nums[r] + if [nums[i],nums[j],nums[l],nums[r]] not in ans: + ans.append([nums[i],nums[j],nums[l],nums[r]]) + l += 1 + r -= 1 + elif temp > target: + r -= 1 + else: + l+=1 + return ans +``` + +然后这里如果要continue则要这么写 + + +``` +class Solution(object): + def fourSum(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[List[int]] + """ + n = len(nums) + nums.sort() + ans = [] + for i in range(n): + if i > 0 and nums[i] == nums[i-1]: continue + for j in range(i+1,n): + if j > i+1 and nums[j] == nums[j-1]: continue + l, r = j+1, n-1 + while l < r: + temp = nums[i] + nums[j] + nums[l] + nums[r] + if temp == target: + # print nums[i],nums[j],nums[l],nums[r] + # if [nums[i],nums[j],nums[l],nums[r]] not in ans: + ans.append([nums[i],nums[j],nums[l],nums[r]]) + l += 1 + r -= 1 + while l < r and nums[l] == nums[l-1]: l += 1 + while l < r and nums[r] == nums[r+1]: r -= 1 + elif temp > target: + r -= 1 + else: + l+=1 + return ans + +``` + +可以用一些判断来加速,比如枚举第一个数的时候 + +- nums[i] + nums[i + 1] + nums[i + 2] + nums[i + 3] > target: break +这是当前能凑齐的最小的4个数,比target后面都不用做了 +- nums[i] + nums[n – 3] + nums[n – 2] + nums[n – 1] < target: continue +这是当前凑齐的最大的4个数,比target小,说明第一个数不够大 + +参考 + + \ No newline at end of file diff --git a/019._remove_nth_node_from_end_of_list.md b/019._remove_nth_node_from_end_of_list.md new file mode 100644 index 000000000..eca0f9ac5 --- /dev/null +++ b/019._remove_nth_node_from_end_of_list.md @@ -0,0 +1,41 @@ +###19. Remove Nth Node From End of List + +题目: + + + + +难度: Easy + + +AC击败了95.80%的Python用户,技巧 dummy head 和双指针。 + + +``` +class Solution(object): + def removeNthFromEnd(self, head, n): + """ + :type head: ListNode + :type n: int + :rtype: ListNode + """ + dummy = ListNode(-1) + dummy.next = head + p = dummy + q = dummy + + for i in range(n): + q = q.next + + while q.next: + p = p.next + q = q.next + + p.next = p.next.next + return dummy.next + +``` + + + + diff --git a/020._valid_parentheses.md b/020._valid_parentheses.md new file mode 100644 index 000000000..3e41265df --- /dev/null +++ b/020._valid_parentheses.md @@ -0,0 +1,53 @@ +###20. Valid Parentheses + +题目: + + + + +难度: + +Easy + + +虽然知道肯定是用stack来解决,但是我是看了hint才自己解答的,因为可能想复杂了。 + +因为一共只有三种状况"(" -> ")", "[" -> "]", "{" -> "}". + +一遇到左括号就入栈,右括号出栈,这样来寻找对应 + +需要检查几件事: + +- 右括号时stack里还有没有东西 +- 出stack的是否对应 +- 最终stack是否为空 + + + +``` +class Solution(object): + def isValid(self, s): + """ + :type s: str + :rtype: bool + """ + leftP = "([{" + rightP = ")]}" + + stack = [] + for char in s: + if char in leftP: + stack.append(char) + elif char in rightP: + if stack == []: + return False + item = stack.pop() + if char == "]" and item != "[": + return False + elif char == ")" and item != "(": + return False + elif char == "}" and item != "{": + return False + return stack == [] +``` + diff --git a/021._merge_two_sorted_lists.md b/021._merge_two_sorted_lists.md new file mode 100644 index 000000000..79619e9d7 --- /dev/null +++ b/021._merge_two_sorted_lists.md @@ -0,0 +1,48 @@ +###21. Merge Two Sorted Lists + +题目: + + + + +难度: Easy + + +同样适用dummy head + +``` +class Solution(object): + def mergeTwoLists(self, l1, l2): + """ + :type l1: ListNode + :type l2: ListNode + :rtype: ListNode + """ + if l1 == None: + return l2 + if l2 == None: + return l1 + + dummy = ListNode(-1) + cur = dummy + + while l1 and l2: + if l1.val < l2.val: + cur.next = l1 + l1 = l1.next + else: + cur.next = l2 + l2 = l2.next + cur = cur.next + + if l1: + cur.next = l1 + else: + cur.next = l2 + return dummy.next + +``` + + + + diff --git a/022._generate_parentheses.md b/022._generate_parentheses.md new file mode 100644 index 000000000..17bac762b --- /dev/null +++ b/022._generate_parentheses.md @@ -0,0 +1,88 @@ +###22. Generate Parentheses + +题目: + + + +难度: + +Medium + + + + + +``` +class Solution(object): + def generateParenthesis(self,n): + """ + :type n: int + :rtype: List[str] + """ + self.res = [] + self.singleStr('', 0, 0, n) + return self.res + + def singleStr(self, s, left, right, n): + if left == n and right == n: + self.res.append(s) + if left < n: + self.singleStr(s + '(',left + 1, right,n) + if right < left: + self.singleStr(s + ')',left, right + 1, n) + +``` + + +非常牛逼的讲解,需要这样的人来给我们讲算法 + +####以Generate Parentheses为例,backtrack的题到底该怎么去思考? + + +所谓Backtracking都是这样的思路:在当前局面下,你有若干种选择。那么尝试每一种选择。如果已经发现某种选择肯定不行(因为违反了某些限定条件),就返回;如果某种选择试到最后发现是正确解,就将其加入解集 + +所以你思考递归题时,只要明确三点就行:选择 (Options),限制 (Restraints),结束条件 (Termination)。即“ORT原则”(这个是我自己编的) + + + + +对于这道题,在任何时刻,你都有两种选择: +1. 加左括号。 +2. 加右括号。 + +同时有以下限制: +1. 如果左括号已经用完了,则不能再加左括号了。 +2. 如果已经出现的右括号和左括号一样多,则不能再加右括号了。因为那样的话新加入的右括号一定无法匹配。 + +结束条件是: +左右括号都已经用完。 + +结束后的正确性: +左右括号用完以后,一定是正确解。因为1. 左右括号一样多,2. 每个右括号都一定有与之配对的左括号。因此一旦结束就可以加入解集(有时也可能出现结束以后不一定是正确解的情况,这时要多一步判断)。 + +递归函数传入参数: +限制和结束条件中有“用完”和“一样多”字样,因此你需要知道左右括号的数目。 +当然你还需要知道当前局面sublist和解集res。 + +因此,把上面的思路拼起来就是代码: + + if (左右括号都已用完) { + 加入解集,返回 + } + //否则开始试各种选择 + if (还有左括号可以用) { + 加一个左括号,继续递归 + } + if (右括号小于左括号) { + 加一个右括号,继续递归 + } + + + +你帖的那段代码逻辑中加了一条限制:“3. 是否还有右括号剩余。如有才加右括号”。这是合理的。不过对于这道题,如果满足限制1、2时,3一定自动满足,所以可以不判断3。 + +这题其实是最好的backtracking初学练习之一,因为ORT三者都非常简单明显。你不妨按上述思路再梳理一遍,还有问题的话再说。 + + + +以上文字来自 1point3arces的牛人解答 \ No newline at end of file diff --git a/023._merge_k_sorted_lists.md b/023._merge_k_sorted_lists.md new file mode 100644 index 000000000..10fd0a3b8 --- /dev/null +++ b/023._merge_k_sorted_lists.md @@ -0,0 +1,49 @@ +###23. Merge k Sorted Lists + + + +题目: + + + +难度: +Hard + +思路: + +看到思路有heap,similar question有ugly number|| -》 这个是用heapq来解决的 + +那么就用heap吧? heapsort + +最简单的做法是只要每个list里面还有node,就把他们扔到minheap里面去,然后再把minheap pop,一个一个node连起来,听起来时间复杂度和空间复杂度都蛮高的。 +直接merge必然是不好的,因为没有利用有序这个点,应该做的是每次取来一个,然后再把应该的下一个放入 + +写到这里瞬间明白和ugly number ii像的点了,甚至感觉跟find in sorted matrix ii也像 + +``` +class Solution(object): + def mergeKLists(self, lists): + """ + :type lists: List[ListNode] + :rtype: ListNode + """ + import heapq + h = [] + + for listhead in lists: + if listhead: + heapq.heappush(h, (listhead.val,listhead)) + + cur = ListNode(-1) + dummy = cur + + while h: + smallestNode = heapq.heappop(h)[1] + cur.next = smallestNode + cur = cur.next + if smallestNode.next: + heapq.heappush(h, (smallestNode.next.val,smallestNode.next)) + return dummy.next +``` + +当然还像merge two sorted list \ No newline at end of file diff --git a/024._swap_nodes_in_pairs.md b/024._swap_nodes_in_pairs.md new file mode 100644 index 000000000..907744af1 --- /dev/null +++ b/024._swap_nodes_in_pairs.md @@ -0,0 +1,35 @@ +###24. Swap Nodes in Pairs + +题目: + + + +难度 : Easy + +看了hint,用loop做,每个node关系要弄清楚 + + +``` + +class Solution(object): + def swapPairs(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + if head == None or head.next == None: + return head + + dummy = ListNode(-1) + dummy.next = head + + cur = dummy + + while cur.next and cur.next.next: + next_one, next_two, next_three = cur.next, cur.next.next, cur.next.next.next + cur.next = next_two + next_two.next = next_one + next_one.next = next_three + cur = next_one + return dummy.next +``` \ No newline at end of file diff --git a/028._implement_strstr().md b/028._implement_strstr().md new file mode 100644 index 000000000..d1470c30b --- /dev/null +++ b/028._implement_strstr().md @@ -0,0 +1,36 @@ +###28. Implement strStr() + +题目: + + + + +难度: + +Easy + + +这个题目其实可以引来一大类,那就是关于string的算法,但是此处先用暴力算法来AC,然后再来细读/品味别的string相关算法吧。 + +虽然是暴力算法,但是也不容易写对啊 + + +``` +class Solution(object): + def strStr(self, haystack, needle): + """ + :type haystack: str + :type needle: str + :rtype: int + """ + if not needle: + return 0 + for i in xrange(len(haystack) - len(needle) + 1): + if haystack[i] == needle[0]: + j = 1 + while j < len(needle) and haystack[i+j] == needle[j]: + j += 1 + if j == len(needle): + return i + return -1 +``` \ No newline at end of file diff --git a/031._next_permutation.md b/031._next_permutation.md new file mode 100644 index 000000000..7d33a3470 --- /dev/null +++ b/031._next_permutation.md @@ -0,0 +1,57 @@ + +###31. Next Permutation + + +题目: + + + +难度: + +Medium + +参照wikipedia: + + + + + +看一个permutation,比如 + +125430 + + +- 从末尾开始,找到decreasing subsequence,5430,因为来调5330无论怎么调,都不可能有比它更小的,数也被自然的分成两部分(1,2) 和 (5,4,3,0) +- 下一步是找这个sequence里面第一个比前面部分,比2大的,3,也很容易理解,因为下一个必定是(1,3)打头 +- 交换 3和2 ,变成 (1,3,5,4,2,0),再把后面的部分reverse,得到后面部分可得到的最小的 + +这个时候,得到下一个sequence 130245 + +AC 代码 + +``` +class Solution(object): + def nextPermutation(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + m, n = 0, 0 + for i in range(len(nums) - 2, 0 , -1): + if nums[i] < nums[i+1]: + m = i + break + + for i in range(len(nums) - 1, 0 , -1): + if nums[i] > nums[m]: + n = i + break + + if m < n : + nums[m], nums[n] = nums[n], nums[m] + nums[m+1:] = nums[len(nums):m:-1] + else: + nums = nums.reverse() +``` + + diff --git a/033._search_in_rotated_sorted_array.md b/033._search_in_rotated_sorted_array.md new file mode 100644 index 000000000..c3e076259 --- /dev/null +++ b/033._search_in_rotated_sorted_array.md @@ -0,0 +1,53 @@ +###33. Search in Rotated Sorted Array + +题目: + + + +难度: +Medium + + +思路: + + +最直观的是O(N)解法 + +but tag是binary search,应该和find min in rotated array类似。 +判断是否有序,然后做二分。 +最容易理解的写法 + +- 如果是mid,return mid +- 左边有序,判断是否在左边,否则在右边中寻找 +- 右边有序,判断是否在右边,否则在左边寻找 +- 都没找到,return -1 + + +``` +class Solution(object): + def search(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: int + """ + l,r = 0, len(nums) - 1 + + while l <= r : + mid = (l+r)/2 + if target == nums[mid]: + return mid + if nums[mid] < nums[r]: + if nums[mid] < target <= nums[r]: + l = mid + 1 + else: + r = mid - 1 + else: + if nums[l] <= target < nums[mid]: + r = mid - 1 + else: + l = mid + 1 + return -1 +``` + + diff --git a/034. Search for a Range.md b/034. Search for a Range.md new file mode 100644 index 000000000..99685e45d --- /dev/null +++ b/034. Search for a Range.md @@ -0,0 +1,82 @@ +### 34. Search for a Range + + + +题目: + + https://leetcode.com/problems/search-for-a-range/ + + + +难度 : Medium + + + +思路: + +一开始想啊想,觉得虽然用到了二分,但都不是O(logN) + +后来看到hint: + +> 采用两次二分查找。首先二分找到第一个该值出现的位置,譬如m,然后在[m, n)区间内第二次二分找到最后一个该值出现的位置。 + + + +二分查找其实不容易写对,看到哪里写的,其实是的,有要点: + + + +- 关于right的赋值 + +- - right = n-1 => while(left <= right) => right = middle-1; + - right = n => while(left < right) => right = middle; + +- middle的计算不能写在while循环外,否则无法得到更新。 + + ​ + +AC 代码 + +``` +class Solution(object): + def searchRange(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[int] + """ + if not nums : return [-1, -1] + + result = [] + l, r = 0, len(nums) + + while l < r: + mid = (l + r) // 2 + if nums[mid] == target and (mid == 0 or nums[mid-1] != target): + result.append(mid) + break + if nums[mid] < target: + l = mid + 1 + else: + r = mid + if not result: + return [-1, -1] + + l,r = 0, len(nums) + while l < r: + mid = ( l + r )// 2 + if nums[mid] == target and (mid == len(nums)-1 or nums[mid+1] != target): + result.append(mid) + break + if nums[mid] <= target: + l = mid + 1 + else: + r = mid + + return result +``` + + + + + diff --git a/035._search_insert_position.md b/035._search_insert_position.md new file mode 100644 index 000000000..a45141cbe --- /dev/null +++ b/035._search_insert_position.md @@ -0,0 +1,32 @@ +###35. Search Insert Position + +题目: + + + +难度: + +Medium + + +递归 + +``` +class Solution(object): + def searchInsert(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: int + """ + n = len(nums) + if target <= nums[0]: + return 0 + if target > nums[n-1]: + return n + for i in range(1,n): + if target == nums[i]: + return i + elif target > nums[i-1] and target < nums[i]: + return i +``` \ No newline at end of file diff --git a/039._combination_sum.md b/039._combination_sum.md new file mode 100644 index 000000000..147d5da68 --- /dev/null +++ b/039._combination_sum.md @@ -0,0 +1,66 @@ +###39. Combination Sum + +题目: + + + + +难度: + +Medium + + +最初的思路: + + +``` +res = [] +def combSum(candidates, target, valueList): + if target == 0: + res.append(valueList) + for candidate in candidates: + if candidate > target: + return + combSum(candidates, target - candidate, valueList + [candidate] ) + +``` + + +问题在于,有重复: + +``` +combSum([2,3,6,7],7,[]) + +res +Out[9]: [[2, 2, 3], [2, 3, 2], [3, 2, 2], [7]] +``` + +然后看了hint,除[2, 2, 3] 和 [2, 3, 2]这种重复的方式是, 把candidates先sort,然后用index的方式来处理。 + + +所以最终的除重大法如下,根据hint做出: + +``` +class Solution(object): + def combinationSum(self, candidates, target): + """ + :type candidates: List[int] + :type target: int + :rtype: List[List[int]] + """ + candidates = list(set(candidates)) + candidates.sort() + self.res = [] + self.combSum(candidates, target, 0, []) + return self.res + + + def combSum(self, candidates, target, start, valueList): + length = len(candidates) + if target == 0: + self.res.append(valueList) + for i in range(start, length): + if target < candidates[i]: + return + self.combSum(candidates, target - candidates[i], i, valueList + [candidates[i]]) +``` diff --git a/040._combination_sum_ii.md b/040._combination_sum_ii.md new file mode 100644 index 000000000..8ebce3aa6 --- /dev/null +++ b/040._combination_sum_ii.md @@ -0,0 +1,82 @@ +###40. Combination Sum II + +题目: + + + + +难度: + +Medium + + +Combination Sum 已经AC,做了minor change. + +``` +class Solution(object): + def combinationSum2(self, candidates, target): + """ + :type candidates: List[int] + :type target: int + :rtype: List[List[int]] + """ + candidates.sort() + self.res = [] + self.combSum(candidates, target, 0, []) + return self.res + + def combSum(self, candidates, target, start, valueList): + length = len(candidates) + if target == 0: + if valueList not in self.res: + self.res.append(valueList) + if length == 0: + return + for i in range(start, length): + if target < candidates[i]: + return + self.combSum(candidates[:i] + candidates[i+1:], target - candidates[i], i, valueList + [candidates[i]]) + +``` + + + +以上是偷懒解法, 优化就是碰到已经碰到过的元素我们直接略过. + +这里的‘碰到’是比如我们已经有它,举个例子 + +然后也不用担心两个相同的放不进去,因为当我们处理第一个的时候,它并没拿来跟已经放入的元素比较了,只是在和还没放入的元素比较. + + +``` +class Solution(object): + def combinationSum2(self, candidates, target): + """ + :type candidates: List[int] + :type target: int + :rtype: List[List[int]] + """ + def combSum(candidates, target, start, valueList): + length = len(candidates) + if target < 0 : + return + if target == 0 : + res.append(valueList) + for i in range(start, length): + if candidates[i] > target: return + if i > 0 and candidates[i] == candidates[i-1]: continue + combSum(candidates[i+1:], target - candidates[i], 0, valueList + [candidates[i]]) + + + candidates.sort() + res = [] + combSum(candidates, target, 0, []) + return res + + + +``` + + + +多重优化 \ No newline at end of file diff --git a/042._trapping_rain_water.md b/042._trapping_rain_water.md new file mode 100644 index 000000000..08d0dd0b7 --- /dev/null +++ b/042._trapping_rain_water.md @@ -0,0 +1,50 @@ +###42. Trapping Rain Water + + + +题目: + + + +难度: +Hard + +思路: + +题目有几个特性可用,bar width = 1,然后第一个和最后一个是不能trap water,其次中间的部分能trap多少水是看`左右高度差教低的那个 - 本身的高度`,所以就是本身的比较高就不能trap water了,这种情况取0. + + +AC代码: + + +``` +class Solution(object): + def trap(self, height): + """ + :type height: List[int] + :rtype: int + """ + if not height: return 0 + n = len(height) + + rightH = [0 for i in range(n)] + rightH[n-1] = height[n-1] + + for i in range(n-2,0,-1): + rightH[i] = max(rightH[i+1],height[i+1]) + # print rightH + + + leftH = [0 for i in range(n)] + leftH[0] = height[0] + for i in range(1,n): + leftH[i] = max(leftH[i-1],height[i-1]) + # print leftH + + water = 0 + for i in range(1,n-1): + water += max(0, min(leftH[i],rightH[i]) - height[i]) + print water + return water + +``` \ No newline at end of file diff --git a/043._multiply_strings.md b/043._multiply_strings.md new file mode 100644 index 000000000..461c8ee91 --- /dev/null +++ b/043._multiply_strings.md @@ -0,0 +1,81 @@ +###43. Multiply Strings + +题目: + + + +难度: + +Medium + + +思路: + +虽然写了一堆similar problems,拿到的时候也算有思路,但是还是觉得很难写 + +参考了别人的思路: + +1. m位的数字乘以n位的数字的结果最大为m+n位: +999*99 < 1000*100 = 100000,最多为3+2 = 5位数。 +2. 先将字符串逆序便于从最低位开始计算。 + + +觉得这样写才是最容易理解的,看一个具体的🌰: + +``` +123 * 456 + + 123 + * 456 + + +先把每一位拿来相乘:得到 + 1 2 3 + 4 5 6 + + 6 12 18 + 5 10 15 + 4 8 12 + +这样在全部加起来和做进位处理 + 5 6 0 8 8 + + +``` + + + + +``` +class Solution(object): + def multiply(self, num1, num2): + """ + :type num1: str + :type num2: str + :rtype: str + """ + if num1 == '0' or num2 == '0' : return '0' + len1,len2 = len(num1),len(num2) + + num1 = num1[::-1] + num2 = num2[::-1] + # 99 * 99 < 10000, maxmize 4 digit + arr = [0 for i in range(len1 + len2)] + + for i in xrange(len1): + for j in xrange(len2): + arr[i+j] += (ord(num1[i]) - ord('0')) * (ord(num2[j]) - ord('0')) + + + res = [0 for i in range(len1 + len2)] + + for i in range(len(arr)): + res[i] = arr[i] % 10 + if i < len(arr) - 1: + arr[i+1] += arr[i]/10 + + i = len(arr)-1 + if res[i] == 0: + i -= 1 + return ''.join(str(j) for j in res[:i+1][::-1]) +``` diff --git a/044._wildcard_matching.md b/044._wildcard_matching.md new file mode 100644 index 000000000..e7d2755a0 --- /dev/null +++ b/044._wildcard_matching.md @@ -0,0 +1,44 @@ +###44. Wildcard Matching + +题目: + + + +难度: + +Hard + + + +做完Regular Expression Matching来做的这道题,按照DP思路run一下是超时,感觉是开心的,至少暂时没有报错了,有待优化,应该在dp的同时在贪心一下么。 + + + +超时代码 +``` +class Solution(object): + def isMatch(self, s, p): + """ + :type s: str + :type p: str + :rtype: bool + """ + m, n = len(s), len(p) + dp = [ [0 for i in xrange(n+1)] for j in xrange(m+1)] + + dp[0][0] = 1 + + # init the first line + for i in xrange(1,n+1): + if p[i-1] == '*': + dp[0][i] = dp[0][i-1] + + for i in xrange(1,m+1): + for j in xrange(1,n+1): + if p[j-1] == s[i-1] or p[j-1] == '?': + dp[i][j] = dp[i-1][j-1] + elif p[j-1] == '*': + dp[i][j] = dp[i][j-1] or dp[i-1][j] + + return dp[m][n] == 1 +``` \ No newline at end of file diff --git a/046._permutations.md b/046._permutations.md new file mode 100644 index 000000000..a79e7c67c --- /dev/null +++ b/046._permutations.md @@ -0,0 +1,138 @@ +###46. Permutations + +题目: + + + +难度: + +Medium + + +复习了一下,自己写的容易理解版本: + +每次调一个放入现有 + +``` +class Solution(object): + def permute(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + self.result = [] + self.recPermute([],nums) + return self.result + + def recPermute(self, sofar, rest): + if rest == []: + self.result.append(sofar) + else: + for i in range(len(rest)): + next = sofar + [rest[i]] + remaining = rest[:i] + rest[i+1:] + self.recPermute(next, remaining) +``` + +交换 + + + +``` +class Solution(object): + def permute(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + result = [] + self.helper(nums,0,result) + return result + + def helper(self,nums,begin,result): + n = len(nums) + if begin == n: + tmp = nums[:] + result.append(tmp) + return + + for i in range(begin,n): + nums[begin], nums[i] = nums[i],nums[begin] + self.helper(nums,begin+1,result) + nums[begin],nums[i] = nums[i],nums[begin] + +``` + + + + + + +好像还有一个巧妙的版本 + + +``` +class Solution: + # @param num, a list of integer + # @return a list of lists of integers + def permute(self, num): + if len(num) == 0: return [] + if len(num) == 1: return [num] + res = [] + for i in range(len(num)): + for j in self.permute(num[:i] + num[i+1:]): + res.append([num[i]] + j) + return res +``` + + +更容易理解的写法: + + +``` +class Solution: + # @param num, a list of integer + # @return a list of lists of integers + def permute(self, num): + if len(num) == 0: return [] + if len(num) == 1: return [num] + res = [] + for i in range(len(num)): + x = num[i] + xs = num[:i] + num[i+1:] + for j in self.permute(xs): + res.append([x] + j) + return res + +``` + +就是一定要有递归的信念❤️ + + + +还有介绍的基本无memory使用的算法: + + +``` +class Solution: + # @param num, a list of integer + # @return a list of lists of integers + def permute(self, num): + if len(num) == 0: yield [] + if len(num) == 1: yield [num] + res = [] + for i in range(len(num)): + x = num[i] + xs = num[:i] + num[i+1:] + for j in self.permute(xs): + res.append([x] + j) + yield res + +``` + +但是这个yield只是生产generator,要看结果还是要用for in的。 + + + + + diff --git a/047._permutations_ii.md b/047._permutations_ii.md new file mode 100644 index 000000000..68a3ead84 --- /dev/null +++ b/047._permutations_ii.md @@ -0,0 +1,42 @@ +###47. Permutations II + +题目: + + + +难度: + +Medium + + +虽然想到了,但是没有靠自己的力量implement出来,还是比较容易了理解的,因为如果有重复的,那么处理只用处理第一个,就只用把第一个提出来,剩下的管它怎么permute。 + +第二次碰到这个元素就不要再用它了,因为可能出现的组合已经有了。 + + +看代码: +base case 处理掉 +sort一下,设置一个prevNum变量 + +如果碰到过了,就continue,去继续执行下一个 + + +``` +class Solution(object): + def permuteUnique(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + if len(nums) == 0: return [] + if len(nums) == 1: return [nums] + res = [] + nums.sort() + for i in range(len(nums)): + if i > 0 and nums[i] == nums[i-1]: continue + for j in self.permuteUnique(nums[:i] + nums[i+1:]): + res.append([nums[i]] + j) + return res +``` + + diff --git a/048._rotate_image.md b/048._rotate_image.md new file mode 100644 index 000000000..bff771bbb --- /dev/null +++ b/048._rotate_image.md @@ -0,0 +1,118 @@ +###48. Rotate Image + + +题目: + + + +难度: + +Medium + + + +思路一: + +``` +rotate之前: 之后: + 1 2 3 4 13 9 5 1 + 5 6 7 8 14 10 6 2 + 9 10 11 12 15 11 7 3 + 13 14 15 16 16 12 8 4 + +``` +看网上的hint,是先沿着对角线变换一次,再验证水平中线变换一次 + + +``` +16 12 8 4 13 9 5 1 +15 11 7 3 14 10 6 2 +14 10 6 2 15 11 7 3 +13 9 5 1 16 12 8 4 +``` + +对角线变换的规律是 +(i,j), (n-1-j,n-1-i) + +上下变换规律 +(i,j),(n-1-i,j) + + +``` +class Solution(object): + def rotate(self, matrix): + """ + :type matrix: List[List[int]] + :rtype: void Do not return anything, modify matrix in-place instead. + """ + n = len(matrix) + for i in range(n): + for j in range(n): + if j < n-1-i: + matrix[i][j],matrix[n-1-j][n-1-i] = matrix[n-1-j][n-1-i],matrix[i][j] + + for i in range(n/2): + for j in range(n): + matrix[i][j],matrix[n-1-i][j] = matrix[n-1-i][j],matrix[i][j] + + +``` + + +思路二: + +参考这里 + + + +找规律,一次完成四个数的该有的变换 + +``` + +1 2 3 4 5 + +6 7 8 9 10 + +11 12 13 14 15 + +16 17 18 19 20 + +21 22 23 24 25 + +``` + +观察一下,第一个数开始的变换是 (0,0)->(0,4)->(4,4)->(4,0) +第二个数的变换是 (0,1)->(1,4)->(4,3)->(3,0) + +变换是 (x,y) -> (y, n-1-x) -> (n-1-x,n-1-y)->(n-1-y,x) + +然后处理第一行是从(0,0)->(0,n-2),第二列是(1,1)->(1,n-3). + +第i行(i, i)(i, n – 2 – i).终止条件也有了。 + +虽然都是O(N^2),但是这个比上面的稍快 + +``` +class Solution(object): + def rotate(self, matrix): + """ + :type matrix: List[List[int]] + :rtype: void Do not return anything, modify matrix in-place instead. + """ + n = len(matrix) + + # row, col + for i in range(n): + for j in range(i,n-1-i): + matrix[i][j],matrix[j][n-1-i],matrix[n-1-i][n-1-j],matrix[n-1-j][i] = \ + matrix[n-1-j][i],matrix[i][j],matrix[j][n-1-i],matrix[n-1-i][n-1-j] +``` + + +这里的问题是矩阵都是方形,如果不是方形,貌似难很多。 + + + + + + diff --git a/049._group_anagrams_python.md b/049._group_anagrams_python.md new file mode 100644 index 000000000..c6d15903c --- /dev/null +++ b/049._group_anagrams_python.md @@ -0,0 +1,38 @@ +###49. Group Anagrams python + +题目: + + + +难度 : Medium + +我又来使用我的取巧神奇python大法 + + +``` +class Solution(object): + def groupAnagrams(self, strs): + """ + :type strs: List[str] + :rtype: List[List[str]] + """ + mapx = {} + for str1 in strs: + key = self.sortedWord(str1) + if key in mapx: + mapx[key].append(str1) + else: + mapx[key] = [str1] + return list(mapx.values()) + + def sortedWord(self,s): + """ + :type s: str + :type t: str + :rtype: bool + """ + sList = sorted(list(s)) + str1 = ''.join(sList) + return str1 + +``` diff --git a/050._pow(x,_n).md b/050._pow(x,_n).md new file mode 100644 index 000000000..d7a2d0e31 --- /dev/null +++ b/050._pow(x,_n).md @@ -0,0 +1,36 @@ +###50. Pow(x, n) + +题目: + + + +难度: + +Medium + + +幼时的我写的代码 🔽 + + +``` +class Solution(object): + def myPow(self, x, n): + """ + :type x: float + :type n: int + :rtype: float + """ + def myPosPow(x, n): + if n == 0 : + return 1 + v = myPosPow(x, n / 2) + if n % 2 == 0: + return v * v + else: + return x * v * v + + if n < 0 : + return 1 / myPosPow(x, -n) + else: + return myPosPow(x, n) +``` diff --git a/051._n-queens.md b/051._n-queens.md new file mode 100644 index 000000000..960ce32d5 --- /dev/null +++ b/051._n-queens.md @@ -0,0 +1,48 @@ +###51. N-Queens + +题目: + + + +难度: +Hard + +偷懒,用52, 依旧需要挖掘 + +``` +class Solution(object): + def solveNQueens(self, n): + """ + :type n: int + :rtype: List[List[str]] + """ + self.board = [] + self.res = [] + self.placequeen(0,n) + return self.res + + def danger(self, board ,row, col): + for (i, j) in board: + if row == i: return True + if col == j: return True + if abs(row - i) == abs(col - j): return True + + return False + + + def placequeen(self, row, n): + if row >= n: + tmpRes = [['.' for i in range(n)] for j in range(n)] + for (row,col) in self.board: + tmpRes[row][col] = 'Q' + tmpRes = [''.join(i) for i in tmpRes] + self.res.append(tmpRes) + + else: + for col in range(0, n): + if not self.danger(self.board, row, col): + self.board.append((row, col)) + self.placequeen(row + 1, n) + self.board.remove((row,col)) + +``` \ No newline at end of file diff --git a/052._n-queens_ii.md b/052._n-queens_ii.md new file mode 100644 index 000000000..07d153553 --- /dev/null +++ b/052._n-queens_ii.md @@ -0,0 +1,52 @@ +###52. N-Queens II + +题目: + + + +难度: +Hard + +思路参见recursion & backtracking + +n queens还是属于比较难的,需要花时间吃透的问题 + + +``` + + +class Solution(object): + def totalNQueens(self, n): + """ + :type n: int + :rtype: int + """ + self.board = [] + self.cnt = 0 + self.placequeen(0,n) + return self.cnt + + def danger(self, board ,row, col): + for (i, j) in board: + if row == i: return True + if col == j: return True + if abs(row - i) == abs(col - j): return True + + return False + + + def placequeen(self, row, n): + if row >= n: + #print self.board + self.cnt +=1 + else: + for col in range(0, n): + if not self.danger(self.board, row, col): + self.board.append((row, col)) + self.placequeen(row + 1, n) + self.board.remove((row,col)) +``` + + + + diff --git a/053._maximum_subarray.md b/053._maximum_subarray.md new file mode 100644 index 000000000..c3d8cce5b --- /dev/null +++ b/053._maximum_subarray.md @@ -0,0 +1,146 @@ +###53. Maximum Subarray + +题目: + + + +难度: +Medium + + +思路一: + +O(N^2) + +从i开始,计算i到n,存比较大的sum,会超时 + +``` +class Solution(object): + def maxSubArray(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + n = len(nums) + m = float('-inf') + for i in range(n): + s = 0 + for j in range(i,n): + s = s + nums[j] + m = max(m,s) + return m +``` + +思路二: + +动归 + +ms(i) = max(ms[i-1]+ a[i],a[i]) + +到i处的最大值两个可能,一个是加上a[i],另一个从a[i]起头,重新开始。可以AC + +``` +class Solution(object): + def maxSubArray(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + n = len(nums) + maxSum = [nums[0] for i in range(n)] + for i in range(1,n): + maxSum[i] = max(maxSum[i-1] + nums[i], nums[i]) + return max(maxSum) +``` + + +思路三: + + +Kadane’s Algorithm wikipedia可以查到,然后一般的是负的可以还回0,这里需要稍作修改,参考 + + + + +``` +start: + max_so_far = a[0] + max_ending_here = a[0] + +loop i= 1 to n + (i) max_end_here = Max(arrA[i], max_end_here+a[i]); + (ii) max_so_far = Max(max_so_far,max_end_here); + +return max_so_far + +``` + +AC代码: + +``` +class Solution(object): + def maxSubArray(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + n = len(nums) + maxSum , maxEnd = nums[0], nums[0] + + for i in range(1,n): + maxEnd = max(nums[i],maxEnd + nums[i]) + maxSum = max(maxEnd,maxSum) + return maxSum +``` + + +思路四: + + + +参见clrs 第71页,用divide and conquer,有伪码 + + +最大的subarray sum有三个可能,左半段或者右半段,或者跨越左右半段, + +速度比较慢,AC代码,复杂度O(NlogN) + +``` +class Solution(object): + def maxSubArray(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + def find_max_crossing_subarray(nums, low, mid, high): + left_sum = float('-inf') + sum = 0 + for i in xrange(mid,low-1,-1): + sum = sum + nums[i] + if sum > left_sum: + left_sum = sum + + right_sum = float('-inf') + sum = 0 + for j in range(mid+1,high+1): + sum = sum + nums[j] + if sum > right_sum: + right_sum = sum + + return left_sum + right_sum + + def find_max_subarray(nums,low,high): + if low == high: + return nums[low] + else: + mid = (low + high) / 2 + left_sum = find_max_subarray(nums, low, mid) + right_sum = find_max_subarray(nums,mid+1,high) + cross_sum = find_max_crossing_subarray(nums,low,mid,high) + # print left_sum, right_sum, cross_sum + # print mid, low, high + return max(left_sum, right_sum, cross_sum) + + return find_max_subarray(nums, 0, len(nums)-1) + +``` \ No newline at end of file diff --git a/054._spiral_matrix.md b/054._spiral_matrix.md new file mode 100644 index 000000000..15c9d97f2 --- /dev/null +++ b/054._spiral_matrix.md @@ -0,0 +1,120 @@ +###54. Spiral Matrix + +题目: + + + +难度: +Medium + + +参考别人的代码,一开始觉得很有递归性,根据奇偶不同来写,递归太难写。 + +然后想到了loop,再想,可能有更优trick,事实证明并没有。 + +用四个变量来控制边界,然后因为方向总是:→↓←↑ 左右下上 + + + + +``` +class Solution(object): + def spiralOrder(self, matrix): + """ + :type matrix: List[List[int]] + :rtype: List[int] + """ + if matrix == [] : return [] + res = [] + maxUp = maxLeft = 0 + maxDown = len(matrix) - 1 + maxRight = len(matrix[0]) - 1 + direction = 0 # 0 go right, 1 go down, 2 go left, 3 up + while True: + if direction == 0: #go right + for i in range(maxLeft, maxRight+1): + res.append(matrix[maxUp][i]) + maxUp += 1 + elif direction == 1: # go down + for i in range(maxUp, maxDown+1): + res.append(matrix[i][maxRight]) + maxRight -= 1 + elif direction == 2: # go left + for i in reversed(range(maxLeft, maxRight+1)): + res.append(matrix[maxDown][i]) + maxDown -= 1 + else: #go up + for i in reversed(range(maxUp, maxDown+1)): + res.append(matrix[i][maxLeft]) + maxLeft +=1 + if maxUp > maxDown or maxLeft > maxRight: + return res + direction = (direction + 1 ) % 4 +``` + +以上的写法非常精妙,看看我自己用同样的思路写的|||| + +``` +class Solution(object): + def spiralOrder(self, matrix): + """ + :type matrix: List[List[int]] + :rtype: List[int] + """ + if len(matrix) == 0 : return [] + + left = 0 + up = 0 + down = len(matrix) - 1 + right = len(matrix[0]) -1 + + # 0 -> right, 1 -> down, 2-> left, 3 -> up + direction = 0 + + # start location + x, y = 0,0 + res = [] + + while True: + if left > right or up > down: + return res + + if direction == 0 : + while y <= right: + res.append(matrix[up][y]) + y += 1 + up += 1 + x = up + direction = 1 + continue + + if direction == 1: + while x <= down: + res.append(matrix[x][right]) + x += 1 + right -= 1 + y = right + direction = 2 + continue + + if direction == 2: + while y >= left: + res.append(matrix[down][y]) + y -= 1 + down -= 1 + x = down + direction = 3 + continue + + if direction == 3: + while x >= up: + res.append(matrix[x][left]) + x -= 1 + left += 1 + y = left + direction = 0 + continue + +``` + +明显别人的代码写的更精妙,因为这里两个boundary都很明确,所以用for in range就能很好的解决问题了. \ No newline at end of file diff --git a/055._jump_game.md b/055._jump_game.md new file mode 100644 index 000000000..fe68b059c --- /dev/null +++ b/055._jump_game.md @@ -0,0 +1,67 @@ +###55. Jump Game + +题目: + + + +难度: + +Medium + +dp + + +问题出现在一旦有0,而且这个0是不可跨过的那么无解,无法达到 +貌似对于dp[i] <= i,就无法达到,不能成立 + + +尝试一: + +超时 + +``` +class Solution(object): + def canJump(self, nums): + """ + :type nums: List[int] + :rtype: bool + """ + if len(nums) < 2: return True + + far = [0 for i in range(len(nums))] + far[0] = nums[0] + + for i in range(len(nums)-1): + for j in range(i): + if far[j] > far[i]: + far[i] = far[j] + far[i] = max(far[i],i+nums[i]) + if far[i] <= i: + return False + return True +``` + +尝试二,看了hint,根本不用这个数组,直接用一个数来记录可达最远距离,非常巧妙 + + +``` +class Solution(object): + def canJump(self, nums): + """ + :type nums: List[int] + :rtype: bool + """ + i = 0 + reach = 0 + + # i > reach also means terminate it can not really reach + while i < len(nums) and i <= reach: + reach = max(i+nums[i],reach) + i += 1 + + return reach >= len(nums) -1 +``` + +i记录当前loop位置,reach记录当前可到位置 + +注意这里的while循环的条件是 `i < len(nums) and i <= reach`,之所以加上 `i <= reach` 是因为如果reach < i说明i层不可达,其实也可以直接terminate.也就是我一开始写的dp[i] <= i会导致依旧不可达。 \ No newline at end of file diff --git a/058._length_of_last_word.md b/058._length_of_last_word.md new file mode 100644 index 000000000..7e9ff8a5d --- /dev/null +++ b/058._length_of_last_word.md @@ -0,0 +1,24 @@ +###58. Length of Last Word + +题目: + + + +难度 : Easy + + +作弊式做法 + +``` + +class Solution(object): + def lengthOfLastWord(self, s): + """ + :type s: str + :rtype: int + """ + lst = s.split() + if len(lst) >= 1: + return len(lst[-1]) + return 0 +``` \ No newline at end of file diff --git a/059._spiral_matrix_ii.md b/059._spiral_matrix_ii.md new file mode 100644 index 000000000..319314846 --- /dev/null +++ b/059._spiral_matrix_ii.md @@ -0,0 +1,51 @@ +###59. Spiral Matrix II + +题目: + + + +难度: +Medium + +和Spiral Matrix的思路基本一致 + +也许还有待挖掘trick + + +``` +class Solution(object): + def generateMatrix(self,n): + """ + :type n: int + :rtype: List[List[int]] + """ + curNum = 0 + matrix = [[0 for i in range(n)] for j in range(n)] + maxUp = maxLeft = 0 + maxDown = maxRight = n - 1 + direction = 0 + while True: + if direction == 0: #go right + for i in range(maxLeft, maxRight+1): + curNum += 1 + matrix[maxUp][i] = curNum + maxUp += 1 + elif direction == 1: # go down + for i in range(maxUp, maxDown+1): + curNum += 1 + matrix[i][maxRight] = curNum + maxRight -= 1 + elif direction == 2: # go left + for i in reversed(range(maxLeft, maxRight+1)): + curNum += 1 + matrix[maxDown][i] = curNum + maxDown -= 1 + else: #go up + for i in reversed(range(maxUp, maxDown+1)): + curNum += 1 + matrix[i][maxLeft] = curNum + maxLeft +=1 + if curNum >= n*n: + return matrix + direction = (direction + 1 ) % 4 +``` \ No newline at end of file diff --git a/060._permutation_sequence.md b/060._permutation_sequence.md new file mode 100644 index 000000000..81935e253 --- /dev/null +++ b/060._permutation_sequence.md @@ -0,0 +1,93 @@ +###60. Permutation Sequence + +题目: + + + +难度: + +Medium + + + +偷懒,用46的方法,会超时 + +``` + +class Solution(object): + def getPermutation(self, n, k): + """ + :type n: int + :type k: int + :rtype: str + """ + self.result = [] + s = "" + for i in range(1, n+1): + s += str(i) + self.recPermute("",s,k) + return self.result[-1] + + + def recPermute(self, sofar, rest, k): + if rest == "": + if len(self.result) == k: + return + self.result.append(sofar) + else: + for i in xrange(len(rest)): + nnext = sofar + rest[i] + remaining = rest[:i] + rest[i+1:] + self.recPermute(nnext, remaining, k) +``` + + +然后其实有规律的,比如 + +``` +1 "123" +2 "132" +3 "213" +4 "231" +5 "312" +6 "321" +``` + +是第n个数 + 余下的n-1个数的permutation + + +k = 1 就是所有的顺序排列 +k = n! 是所有的逆序排列 + +对于余下的也是递归,比如 + + +k < (n-1)! 1 + (n-1)个数的全排列的第k个 +k < 2*(n-1)! 2 + (n-1)个数的顺序全排列的第k个 + + +发现思路对了,但是implement还有点困难. + +看了一个最为精妙的解法 + +``` +class Solution(object): + def getPermutation(self, n, k): + """ + :type n: int + :type k: int + :rtype: str + """ + seq, k, fact = '', k-1, math.factorial(n-1) + perm = [i for i in range(1, n+1)] + for i in reversed(xrange(n)): + curr = perm[k/fact] + seq += str(curr) + perm.remove(curr) + if i > 0: + k %= fact + fact /= i + return seq +``` + + diff --git a/061._rotate_list.md b/061._rotate_list.md new file mode 100644 index 000000000..a26319d15 --- /dev/null +++ b/061._rotate_list.md @@ -0,0 +1,58 @@ + +###61. Rotate List + + +题目: + + + +难度: + +Medium + +- k可能比list的size大,需要做一个取余准备 +- 计算list size的同时把tail也记录下来,方便之后把tail的next指向原本的head +- 利用之前的到末端的kth node + + +AC 代码 + +``` +class Solution(object): + def rotateRight(self, head, k): + if head == None or k == 0 : + return head + + cur = head + size = 1 + while cur.next: + size += 1 + cur = cur.next + + tail = cur + + k = k % size + + p = self.findKth(head,k) + + tail.next = head + head = p.next + p.next = None + return head + + def findKth(self,head, k): + dummy = ListNode(-1) + dummy.next = head + p = dummy + q = dummy + + for i in range(k): + q = q.next + + while q.next: + p = p.next + q = q.next + return p +``` + + diff --git a/064._minimum_path_sum.md b/064._minimum_path_sum.md new file mode 100644 index 000000000..591c171b5 --- /dev/null +++ b/064._minimum_path_sum.md @@ -0,0 +1,58 @@ + +###64. Minimum Path Sum + +题目: + + + +难度: + +Medium + + + +非常明显的DP + +状态转移方程 + +dp[i][j] = gird[i][j] + min(dp[i-1][j], dp[i][j-1]) + + +然后注意一下边界的处理,一开始dp[0][0] = grid[0][0] + +第一行和第一列,之后开始全用状态转移方程 + + +``` +class Solution(object): + def minPathSum(self, grid): + """ + :type grid: List[List[int]] + :rtype: int + """ + m = len(grid) + n = len(grid[0]) if m else 0 + + dp = [[0 for i in range(n)] for i in range(m)] + + dp[0][0] = grid[0][0] + + # first row + for i in range(1,n): + dp[0][i] = grid[0][i] + dp[0][i-1] + + # first col + for i in range(1,m): + dp[i][0] = grid[i][0] + dp[i-1][0] + + + for i in range(1,m): + for j in range(1,n): + dp[i][j] = grid[i][j] + min(dp[i-1][j], dp[i][j-1]) + + + return dp[m-1][n-1] + + + +``` diff --git a/065.unique_paths_ii.md b/065.unique_paths_ii.md new file mode 100644 index 000000000..16e8e940c --- /dev/null +++ b/065.unique_paths_ii.md @@ -0,0 +1,84 @@ + ###65.Unique Paths II + +题目: + + + + +tag : DP + +难度 : Medium + + + + + +``` +BASE CASE( i = 0 , j = 0): +//第一排和第一列,如果没有obstacle, 则走法为1, 一旦有了obstacle,则之后的格子走法都为0 + +非BASE CASE : +//一旦有obstacle,则dp为0 +dp(i, j) = dp(i,j-1) + dp(i-1,j) + +``` + +Python代码 + +``` +class Solution(object): + def uniquePathsWithObstacles(self, obstacleGrid): + """ + :type obstacleGrid: List[List[int]] + :rtype: int + """ + row = len(obstacleGrid) + col = len(obstacleGrid[0]) + dp = [[0 for i in range(col)] for j in range(row)] + + dp[0][0] = int(obstacleGrid[0][0] == 0) + + #first row + for j in range(1,col): + if obstacleGrid[0][j] == 1: + dp[0][j] = 0 + else: + dp[0][j] = dp[0][j-1] + #first col + for i in range(1,row): + if obstacleGrid[i][0] == 1: + dp[i][0] = 0 + else: + dp[i][0] = dp[i-1][0] + + for i in range(1,row): + for j in range(1,col): + if obstacleGrid[i][j] == 1: + dp[i][j] = 0 + else: + dp[i][j] = dp[i-1][j] + dp[i][j-1] + return dp[row-1][col-1] + +``` + +犯了一个错,简直觉得不可思议。一开始初始化dp用的代码是 + +``` +dp = [[0] * col] * row +``` + +问题在此: + + +``` +>>> x = [[]] * 3 +>>> x[1].append(0) +>>> x +[[0], [0], [0]] +``` + +这样初始化是做了三个一样的object. + +The problem is that they're all the same exact list in memory. When you use the [x]*n syntax, what you get is a list of n many x objects, but they're all references to the same object. They're not distinct instances, rather, just n references to the same instance. + +参见stackoverflow : diff --git a/066._plus_one.md b/066._plus_one.md new file mode 100644 index 000000000..af4f118ef --- /dev/null +++ b/066._plus_one.md @@ -0,0 +1,63 @@ +###66. Plus One + +题目: + + + +难度 : Easy + + + +奇怪的AC了 +😄 +搞笑 —> 😓 + +这里是用的递归,很容易理解,如果空列表直接加1,最后一位小于9,那么直接就最后一位加1,否则添加一个0,然后再把余下的递归加1 + + +``` + +class Solution(object): + def plusOne(self, digits): + """ + :type digits: List[int] + :rtype: List[int] + """ + if digits == []: + return [1] + if digits[-1] < 9: + return digits[:-1] + [digits[-1] + 1] + else: + return self.plusOne(digits[:-1]) + [0] +``` + + +其实可以考虑循环,效率更高,参考[此处](https://shenjie1993.gitbooks.io/leetcode-python/content/066%20Plus%20One.html) + + + +> 从低位到高位,如果后一位有进位的话,那么该位要加上一,否则退出循环。如果最高位也进位,那么在列表前要插入一个一。 + + + +``` +class Solution(object): + def plusOne(self, digits): + """ + :type digits: List[int] + :rtype: List[int] + """ + carry = 1 + + for i in range(len(digits)-1,-1,-1): + digits[i] += carry + if digits[i] < 10: + carry = 0 + break + else: + digits[i] -= 10 + if carry == 1: + digits.insert(0,1) + return digits +``` + diff --git a/067._add_binary.md b/067._add_binary.md new file mode 100644 index 000000000..8ddec55c7 --- /dev/null +++ b/067._add_binary.md @@ -0,0 +1,33 @@ +###67. Add Binary + +题目: + + + +难度 : Easy + + +几种case: + +- a or b 为空,最简单 +- 唯一的问题是如果有进位的处理,进位的处理就是先让其中的一个数addBinary +1 ,然后再用addBinary + +``` + + +class Solution(object): + def addBinary(self, a, b): + """ + :type a: str + :type b: str + :rtype: str + """ + if (a == '' or b == ''): + return a + b + elif a[-1] == '0' and b[-1] == '0': + return self.addBinary(a[:-1], b[:-1]) + '0' + elif a[-1] == '1' and b[-1] == '1': + return self.addBinary(a[:-1], self.addBinary(b[:-1],'1')) + '0' + else: + return self.addBinary(a[:-1], b[:-1]) + '1' +``` \ No newline at end of file diff --git a/069._sqrt(x).md b/069._sqrt(x).md new file mode 100644 index 000000000..47f0363e7 --- /dev/null +++ b/069._sqrt(x).md @@ -0,0 +1,78 @@ +###69. Sqrt(x) + + +题目: + + + +难度: + +Medium + + +思路: + +一看,觉得很容易,一写,超时: + +``` +class Solution(object): + def mySqrt(self, x): + """ + :type x: int + :rtype: int + """ + i = 0 + while i * i <= x : + if i * i == x: + return i + elif i * i < x and (i+1) * (i+1) > x: + return i + i += 1 +``` + +看一眼tag, binary search,难道从x/2之类的开始搜起来?话说还想到求sqrt有个🐂的牛顿法? + +莫名其妙过了的代码: + +``` +class Solution(object): + def mySqrt(self, x): + """ + :type x: int + :rtype: int + """ + if x == 1 : return 1 + if x == 0 : return 0 + l,r = 0, x + while l < r: + mid = (l+r)/2 + if mid * mid <= x and (mid+1)*(mid+1) > x: + return mid + elif mid * mid > x: + r = mid + else: + l = mid +``` + +其实这个else感觉是没有意义的,因为其root不可能比它的一半还大吧? + + +牛顿法 + +参见wikipedia,to be done:自己推导一遍 + + + +``` +class Solution(object): + def mySqrt(self, x): + """ + :type x: int + :rtype: int + """ + result = 1.0 + while abs(result * result - x) > 0.1: + result = (result + x / result) / 2 + return int(result) + +``` diff --git a/072._edit_distance.md b/072._edit_distance.md new file mode 100644 index 000000000..c2720f92b --- /dev/null +++ b/072._edit_distance.md @@ -0,0 +1,116 @@ +###72. Edit Distance + +题目: + + + +难度: + +Hard + +可以做的操作: + +- insert +- delete +- replace + +动归典型,原来也是有wikipedia page的算法 + + + + + + +看wikipedia 这解释 + +``` + / max(i,j) if min(i,j) = 0 + + / dp[i-1][j] + 1 word1[i]不在word2[0...j]中,所以删除 + dp[i][j] - min -- dp[i][j-1] + 1 insertion + \ dp[i-1][j-1] + 1/0 word[i]与word[j]是否相等 +``` + +上面的就不用解释了,min分别对应:删除、插入、以及替代(1/0取决 word1[i] == word2[j] ),反正也是tabular类型,画表来解决问题。 + + +用wikipedia上的伪码改造 + +``` +function LevenshteinDistance(char s[1..m], char t[1..n]): + // for all i and j, d[i,j] will hold the Levenshtein distance between + // the first i characters of s and the first j characters of t + // note that d has (m+1)*(n+1) values + declare int d[0..m, 0..n] + + set each element in d to zero + + // source prefixes can be transformed into empty string by + // dropping all characters + for i from 1 to m: + d[i, 0] := i + + // target prefixes can be reached from empty source prefix + // by inserting every character + for j from 1 to n: + d[0, j] := j + + for j from 1 to n: + for i from 1 to m: + if s[i] = t[j]: + substitutionCost := 0 + else: + substitutionCost := 1 + d[i, j] := minimum(d[i-1, j] + 1, // deletion + d[i, j-1] + 1, // insertion + d[i-1, j-1] + substitutionCost) // substitution + + return d[m, n] +``` + +对应的例子表格图 + +``` + k i t t e n + 0 1 2 3 4 5 6 +s 1 1 2 3 4 5 6 +i 2 2 1 2 3 4 5 +t 3 3 2 1 2 3 4 +t 4 4 3 2 1 2 3 +i 5 5 4 3 2 2 3 +n 6 6 5 4 3 3 2 +g 7 7 6 5 4 4 3 +``` + + +AC代码 + +``` +class Solution(object): + def minDistance(self, word1, word2): + """ + :type word1: str + :type word2: str + :rtype: int + """ + m,n = len(word1), len(word2) + dp = [[0 for i in range(m+1)] for j in range(n+1)] + + for i in range(1,m+1): + dp[0][i] = i + + for j in range(1,n+1): + dp[j][0] = j + + for j in range(1,n+1): + for i in range(1,m+1): + cost = 0 if word1[i-1] == word2[j-1] else 1 + dp[j][i] = min(dp[j-1][i] + 1, dp[j][i-1] + 1, dp[j-1][i-1] + cost) + + return dp[n][m] +``` + + +貌似还有提升版本,但是比较明显即使有伪码,一开始也出错于下标. + +升级版 to be learned. \ No newline at end of file diff --git a/073. Set Matrix Zeroes.md b/073. Set Matrix Zeroes.md new file mode 100644 index 000000000..0b30f99ed --- /dev/null +++ b/073. Set Matrix Zeroes.md @@ -0,0 +1,55 @@ +### 73. Set Matrix Zeroes + + + +题目: + + + + +难度 : Medium + + + +思路: + +Naive AC代码,一看类似那个 game of life,不用extra space,不用O(mn),应该就是用状态转移机了(?),所以还是先naive AC把: + +``` +class Solution(object): + def setZeroes(self, matrix): + """ + :type matrix: List[List[int]] + :rtype: void Do not return anything, modify matrix in-place instead. + """ + def setZero(i,j): + for m in range(col): + matrix[i][m] = 0 + for n in range(row): + matrix[n][j] = 0 + + + row = len(matrix) + col = len(matrix[0]) if row else 0 + + newM = [] + for i in range(row): + newM.append(matrix[i][:]) + + + for i in range(row): + for j in range(col): + if newM[i][j] == 0: + setZero(i,j) +``` + + + +`正确思路`: + +一边遍历,一边将相应的行和列置为0是行不通的,会影响后面元素的遍历判断,所以要记录下哪些行和哪些列是要置为0的。为了节约空间,在原矩阵中借两条边,如果该行或者列要置为0,则把左边或者上边的相应位置置为0。如果左边和上边本来就有0,那么需要额外标记一下,最后把左边或者右边也全部置为0. + + + + + diff --git a/074._search_a_2d_matrix.md b/074._search_a_2d_matrix.md new file mode 100644 index 000000000..bef2e7ffb --- /dev/null +++ b/074._search_a_2d_matrix.md @@ -0,0 +1,51 @@ +###74. Search a 2D Matrix + +题目: + + + +难度: +Easy + + + + +二分Search + + +``` +class Solution(object): + def searchMatrix(self, matrix, target): + """ + :type matrix: List[List[int]] + :type target: int + :rtype: bool + """ + if len(matrix) == 0: + return False + else: + n = len(matrix[0]) + half = len(matrix)//2 + if target >= matrix[half][0] and target <= matrix[half][n-1]: + return self.searchList(matrix[half],target) + elif target < matrix[half][0]: + return self.searchMatrix(matrix[:half],target) + else: + return self.searchMatrix(matrix[half+1:],target) + + def searchList(self, lst, target): + if len(lst) == 0: + return False + else: + mid = len(lst) // 2 + if target == lst[mid]: + return True + elif target < lst[mid]: + return self.searchList(lst[:mid],target) + else: + return self.searchList(lst[mid+1:],target) + + + + +``` \ No newline at end of file diff --git a/075._sort_colors.md b/075._sort_colors.md new file mode 100644 index 000000000..e70f4e6ad --- /dev/null +++ b/075._sort_colors.md @@ -0,0 +1,54 @@ +###75. Sort Colors + +题目: + + + +难度: + +Medium + + +思路: + +这个问题是 Dutch National Flag Problem, 荷兰旗问题 + + + +思路其实是类似partition的,比x小的放左边,比x大的放右边。 + +这里是用三个指针,begin, cur, end,cur需要遍历整个数组 + +- cur 指向0,交换begin与cur, begin++,cur++ +- cur 指向1,不做任何交换,cur++ +- cur 指向2,交换end与cur,end-- + +之所以cur指向2,交换之后不前进是因为我们不知道end此时指向的元素是几,如果交换过来的是0或者1,那么明显我们需要做进一步的处理,所以最终判断条件是end =< cur应该就结束了 + +这样的three-way-partition也只是3-way好用吧?如果有4个数,那么这样则是无效的,或者如果是4-way,那么可以转换成3-way+2-way + + +``` +class Solution(object): + def sortColors(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + begin,cur,end = 0,0,len(nums) - 1 + + while cur <= end: + if nums[cur] == 0: + nums[begin],nums[cur] = nums[cur],nums[begin] + cur += 1 + begin += 1 + + elif nums[cur] == 1: + cur += 1 + + else: # nums[cur] == 2 + nums[cur],nums[end] = nums[end],nums[cur] + end -=1 + +``` + diff --git a/077._combinations.md b/077._combinations.md new file mode 100644 index 000000000..1672b9dff --- /dev/null +++ b/077._combinations.md @@ -0,0 +1,123 @@ +###77. Combinations + + +题目: + + + +难度 : Medium + + +思路一: +python作弊法 + +``` +import itertools +p = [4, 8, 15, 16, 23, 42] +c = itertools.combinations(p, 4) +for i in c: + print i + +结果: + +(4, 8, 15, 16) +(4, 8, 15, 23) +(4, 8, 15, 42) +(4, 8, 16, 23) +(4, 8, 16, 42) +(4, 8, 23, 42) +(4, 15, 16, 23) +(4, 15, 16, 42) +(4, 15, 23, 42) +(4, 16, 23, 42) +(8, 15, 16, 23) +(8, 15, 16, 42) +(8, 15, 23, 42) +(8, 16, 23, 42) +(15, 16, 23, 42) +``` + +作弊AC代码: + +``` +class Solution(object): + def combine(self, n, k): + """ + :type n: int + :type k: int + :rtype: List[List[int]] + """ + import itertools + return [list(i) for i in itertools.combinations(range(1,n+1), k)] +``` + + +思路二: + +标准的recursion + +但是会超时 + + +``` +class Solution(object): + def combine(self, n, k): + """ + :type n: int + :type k: int + :rtype: List[List[int]] + """ + ans = [] + self.dfs(n, k, 1, [], ans) + return ans + + def dfs(self, n, k ,start, lst, ans): + if k == 0 : + ans.append(lst) + return + for i in range(start, n+1): + self.dfs(n, k - 1, i + 1,lst +[i], ans) +``` + +理解方式 + +``` + + 1 2 3 + 12 13 14 23 24 34 +``` + +可以参照这里 + + + + + +解法三: + + +采用递归的方式,在n个数中选k个,如果n大于k,那么可以分类讨论,如果选了n,那么就是在1到(n-1)中选(k-1)个,否则就是在1到(n-1)中选k个。递归终止的条件是k为1,这时候1到n都符合要求。 + +注意一开始这里的else part花了我一点时间来理解,因为n必定大于k,所以这样递归当 n == k的时候选法就是code原作者的写法,也就是直接[range(1,k+1)] + +参考这里: + + +``` +class Solution(object): + def combine(self, n, k): + """ + :type n: int + :type k: int + :rtype: List[List[int]] + """ + if k == 1: + return [[i + 1] for i in range(n)] + result = [] + if n > k: + result = [r + [n] for r in self.combine(n - 1, k - 1)] + self.combine(n - 1, k) + else: #n == k + # result = [r + [n] for r in self.combine(n - 1, k - 1)] + result = [range(1,k+1)] + return result +``` \ No newline at end of file diff --git a/078.Subsets .md b/078.Subsets .md new file mode 100644 index 000000000..c0092653e --- /dev/null +++ b/078.Subsets .md @@ -0,0 +1,67 @@ +###78.Subsets + +题目: + + + +难度 : Medium + + +Python代码 + +``` +class Solution(object): + def subsets(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + results = [[]] + for num in nums: + results.extend([result + [num] for result in results]) + return results + +``` + +可是我不能理解,为嘛我写的这个不work. + +⬇️ + +我的不work因为不能同时改变list和iterate list + + +``` +def subsets(nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + results = [[]] + for num in nums: + for result in results: + results.extend([result + [num]]) + return results + +``` + +BackTrack 标准解法版 + + +``` +class Solution: + + def search(self, nums, S, index): + if index == len(nums): + self.results.append(S) + return + + self.search(nums, S + [nums[index]], index + 1) + self.search(nums, S, index + 1) + + def subsets(self, nums): + self.results = [] + self.search(nums, [], 0) + return self.results +``` + +对每个元素,有两种可能,加入S和不加入S,写起来思路还是很清爽的 \ No newline at end of file diff --git a/079._word_search.md b/079._word_search.md new file mode 100644 index 000000000..e097a4259 --- /dev/null +++ b/079._word_search.md @@ -0,0 +1,63 @@ +###79. Word Search + + + +题目: + + + +难度: +Medium + + +思路: + +其实这个题和number of islands类似,是backtracking基本功的考查,但是基本功非常有待提高||| + +比较核心的是dfs函数,然后这个函数有取巧的写法:如果outside of boundary就return False + +loop, 如果碰到跟word开头的字母一样,把这个扔进去loop,可以考查这个char在这个board的上下左右是否可以选择,补课使用则重置used, 然后return + +也还是之前摘录的,backtrack写法关键: 选择 (Options),限制 (Restraints),结束条件 (Termination)。 + + + + +``` +class Solution(object): + def exist(self, board, word): + """ + :type board: List[List[str]] + :type word: str + :rtype: bool + """ + + def dfs(board, used, row, col, x, y, word, idx): + if idx == len(word) : + return True + + if x < 0 or x > row -1 or y < 0 or y > col -1 : + return False + + if board[x][y] == word[idx] and not used[x][y]: + used[x][y] = 1 + left = dfs(board,used,row,col,x-1,y,word,idx+1) + right = dfs(board,used,row,col,x+1,y,word,idx+1) + up = dfs(board,used,row,col,x,y-1,word,idx+1) + down = dfs(board,used,row,col,x,y+1,word,idx+1) + + used[x][y] = left or right or up or down + return left or right or up or down + return False + + + row = len(board) + col = len(board[0]) if row else 0 + used = [ [0 for i in range(col)] for j in range(row)] + + for i in range(row): + for j in range(col): + if dfs(board,used,row,col,i,j,word,0): + return True + return False +``` \ No newline at end of file diff --git a/082._remove_duplicates_from_sorted_list_ii.md b/082._remove_duplicates_from_sorted_list_ii.md new file mode 100644 index 000000000..277b3870c --- /dev/null +++ b/082._remove_duplicates_from_sorted_list_ii.md @@ -0,0 +1,49 @@ +###82. Remove Duplicates from Sorted List II + + +题目: + + + + +难度: + +Medium + + +木有space 和 time的限制,第一想法,用dictionary存一下每个nodes的个数,这样只要看到它是大于1的,就删删删。 + +虽然是笨办法。但是也可以AC + +``` +class Solution(object): + def deleteDuplicates(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + dummy = ListNode(-1) + dummy.next = head + + cur = dummy.next + nodeNumber = {} + while cur: + if cur.val in nodeNumber: + nodeNumber[cur.val] += 1 + else: + nodeNumber[cur.val] = 1 + cur = cur.next + + cur = dummy + while cur.next: + if nodeNumber[cur.next.val] > 1: + cur.next = cur.next.next + else: + cur = cur.next + return dummy.next +``` + + +谷歌一下,更省时间的方法是用一个prev 和 cur 指针,然后用一个bool来记录是否duplicate,这样loop一次即可解决问题。 + +to be 写出来 \ No newline at end of file diff --git a/083._remove_duplicates_from_sorted_list.md b/083._remove_duplicates_from_sorted_list.md new file mode 100644 index 000000000..bdca46263 --- /dev/null +++ b/083._remove_duplicates_from_sorted_list.md @@ -0,0 +1,33 @@ +###83. Remove Duplicates from Sorted List + +题目: + + + +难度: + +Easy + + + + +``` +class Solution(object): + def deleteDuplicates(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + cur = head + while cur: + if cur.next: + if cur.val == cur.next.val: + cur.next = cur.next.next + else: + cur = cur.next + # cur.next None + else: + break + return head + +``` \ No newline at end of file diff --git a/086._partition_list.md b/086._partition_list.md new file mode 100644 index 000000000..c1fd2dca0 --- /dev/null +++ b/086._partition_list.md @@ -0,0 +1,56 @@ +###86. Partition List + + +题目: + + + +难度 : Medium + + +思路一: + + +最简单的思路就是两个dummy head,然后一个指向 小于的node,一个指向大于的node + + +思路二: + +不走寻常路了,使用两个指针,一个指向小于的尾巴,一个一直往后走,指向大于,然后交换node + +完成比完美更重要啊,其实可以先试试用简单方法,因为我用我的不走寻常路画了比较久的图,写起来也稍显没那么美观,还在交换node的部分卡了一会 + + + +``` +class Solution(object): + def partition(self, head, x): + """ + :type head: ListNode + :type x: int + :rtype: ListNode + """ + dummy = ListNode(-1) + dummy.next = head + + p1 = p2 = dummy + + while p1.next and p1.next.val < x: + p1 = p1.next + + p2 = p1.next + + while p2: + while p2.next and p2.next.val >= x: + p2 = p2.next + + if p2.next == None: + break + node = p2.next + p2.next = node.next + node.next = p1.next + p1.next = node + p1 = p1.next + + return dummy.next +``` \ No newline at end of file diff --git a/088._merge_sorted_array.md b/088._merge_sorted_array.md new file mode 100644 index 000000000..935310045 --- /dev/null +++ b/088._merge_sorted_array.md @@ -0,0 +1,56 @@ +###88. Merge Sorted Array + + +题目: + + + +难度 : Easy + +并不easy和容易写对 + +给的数组可能是这样的 + +nums1 : [0] +m : 0 +nums2 : [1] +n : 1 + + +设置指针p = m + n -1, p1 = m - 1, p2 = n - 1 + +从末端开始,哪个数更大就放末端,两个指针都走到-1才算走完,问题可能出现在p1走完但是p2还没走完,所以添加一个多的loop来检查,想之上的例子就可以理解 + + +AC代码 + + +``` +class Solution(object): + def merge(self, nums1, m, nums2, n): + """ + :type nums1: List[int] + :type m: int + :type nums2: List[int] + :type n: int + :rtype: void Do not return anything, modify nums1 in-place instead. + """ + p = m + n -1 + p1 = m - 1 + p2 = n - 1 + while p2 >= 0 and p1 >= 0 : + if nums2[p2] > nums1[p1]: + nums1[p] = nums2[p2] + p2 -= 1 + else: + nums1[p] = nums1[p1] + p1 -= 1 + p -= 1 + + + + for i in range(p2,-1,-1): + nums1[p] = nums2[i] + p -= 1 + +``` \ No newline at end of file diff --git a/089._gray_code.md b/089._gray_code.md new file mode 100644 index 000000000..c0a9f193c --- /dev/null +++ b/089._gray_code.md @@ -0,0 +1,101 @@ +###89. Gray Code + + + +题目: + + + +难度: +Medium + +思路: + +首先不是从任何一个数开始都是有效的,所以naive的想法是从任何一个开始,然后如果能到2^n位,那么说明是有效的,问题解决. + +A gray code sequence must begin with 0. ->简化了一点 + +先写了一段代码: + +``` +def nextCode(curCode, res, n): + if curCode not in res: + res.append(curCode) + else: + return + if len(res) == pow(2,n): + return res + for i in range(n): + nCode = curCode[:] + nCode[i] = 1 if curCode[i] == 0 else 0 + nextCode(nCode,res,n) + +res = [] +nextCode([0,0,0],res,3) +print res +#[[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0], [0, 1, 1], [1, 1, 1], [1, 0, 1], [0, 0, 1]] +``` +实际上问题是这段代码的时间复杂度感觉很高,但是试试 + + +不失所望,到11就超时 + +``` + +class Solution(object): + def grayCode(self, n): + """ + :type n: int + :rtype: List[int] + """ + def nextCode(curCode, res, n): + if curCode not in res: + res.append(curCode) + else: + return + if len(res) == pow(2,n): + return res + for i in xrange(n): + nCode = curCode[:] + nCode[i] = 1 if curCode[i] == 0 else 0 + nextCode(nCode, res, n) + + def listoVal(curCode,n): + val = 0 + for i in range(n-1,-1,-1): + val += pow(2,i) * curCode[i] + return val + + + res = [] + nextCode([0]*n, res, n) + # print res + + val = [] + for i in res: + val.append(listoVal(i,n)) + return val +``` + +然后居然有这个东西: +Gray code,要用位运算!瞑目 + + + + +服气,这个待研究 +``` +class Solution(object): + def grayCode(self, n): + """ + :type n: int + :rtype: List[int] + """ + result = [(i>>1)^i for i in range(pow(2,n))] + return results +``` + + + + + diff --git a/090._subsets_ii.md b/090._subsets_ii.md new file mode 100644 index 000000000..9a1cdafd4 --- /dev/null +++ b/090._subsets_ii.md @@ -0,0 +1,47 @@ +###90. Subsets II + +题目: + + + +难度 : Medium + + +思路: + +参考别人的 + +现在来观察规律,与之前有不同之处是我们需要一个位置来mark,因为不再需要往之前出现过的地方再加了,看这个: + + +``` +[[],[1]] 是 [1] 的子集合 +[[],[1],[2],[1,2]] 是 [1,2] 的子集合,实际上就是1的子集合们加了一个2 +新来的2不能再从头开始加了,它需要从[ .., [2],[1,2] ]加 才是合理的 +``` + + +这里这个start是来记录了之前一次数组的长度,temp_size记住目前数组的长度,然后用这个来达到去重的目的,非常聪明 + + + + + +``` +class Solution(object): + def subsetsWithDup(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + nums.sort() + result = [[]] + temp_size = 0 + for i in range(len(nums)): + start = temp_size if i >= 1 and nums[i] == nums[i-1] else 0 + temp_size = len(result) + for j in range(start, temp_size): + result.append(result[j] + [nums[i]]) + return result + +``` \ No newline at end of file diff --git a/091._decode_ways.md b/091._decode_ways.md new file mode 100644 index 000000000..3abd24a85 --- /dev/null +++ b/091._decode_ways.md @@ -0,0 +1,71 @@ +###91. Decode Ways + +题目: + + + + +tag : DP + +难度 : Medium + + + + + +``` +BASE CASE(len(s) = 1 和 len(s) = 2 ): +直接check + +非BASE CASE : +先令 dp[i] = 0 +如果s[i]是可以map的话 -> dp[i] += dp[i-1] 原本的s[0..i]decode方式加上s[i] +如果s[i-1,i]可以map的话 -> dp[i] += dp[i-2] 原本的s[0...i-1]decode方式加上s[i-1,i] +``` + + +Python代码(可美化) + +``` +class Solution(object): + def numDecodings(self, s): + """ + :type s: str + :rtype: int + """ + keys = ['1', '2', '3', '4', '5', '6', '7', '8', '9' ,'10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26'] + values = ['A', 'B','C', 'D', 'E', 'F', 'G','H', 'I', 'J', 'K', 'L', 'M' , 'N', 'O', 'P','Q', 'S', 'R', 'T', 'U','V', 'W', 'X','Y','Z'] + numbersToLetters = dict(zip(keys, values)) + + ways = {} + n = len(s) + for i in range(n): + ways[i] = 0 + if n == 0: + return 0 + elif n == 1 : + ways[0] = int(s in numbersToLetters) + elif n == 2: + if (s[0] in numbersToLetters) and (s[1] in numbersToLetters): + ways[1] += 1 + if (s in numbersToLetters): + ways[1] += 1 + else: + #s[0] + ways[0] = int(s[0] in numbersToLetters) + #s[01] + if (s[0] in numbersToLetters) and (s[1] in numbersToLetters): + ways[1] += 1 + if (s[:2] in numbersToLetters): + ways[1] += 1 + for i in range(2,n): + if s[i] in numbersToLetters: + ways[i] += ways[i-1] + if (s[i-1:i+1] in numbersToLetters): + ways[i] += ways[i-2] + + #print(ways[n-1]) + return ways[n-1] + +``` + diff --git a/092._reverse_linked_list_ii.md b/092._reverse_linked_list_ii.md new file mode 100644 index 000000000..f2b29da12 --- /dev/null +++ b/092._reverse_linked_list_ii.md @@ -0,0 +1,66 @@ +###92. Reverse Linked List II + +题目: + + + +难度: +Medium + + +跟 reverse linked list一样 + +思路: 找到 第 m 个node,然后开始reverse到第n个node,然后再把它们和原本的list连接起来 + +AC 代码 + +``` +class Solution(object): + def reverseBetween(self, head, m, n): + """ + :type head: ListNode + :type m: int + :type n: int + :rtype: ListNode + """ + # m == n, not reverse + if m == n : return head + + dummy = ListNode(-1) + dummy.next = head + + mbefore = dummy + cnt = 1 + + while mbefore and cnt < m: + mbefore = mbefore.next + cnt += 1 + + prev = None + cur = mbefore.next + tail1 = mbefore.next + + + while cnt <= n : + nxt = cur.next + cur.next = prev + prev = cur + cur = nxt + cnt += 1 + + + + mbefore.next = prev + tail1.next = cur + + return dummy.next +``` + +看了一下别人的代码,又比我写的好嘛,因为是保证m和n有效,用的是for循环先找到 m node: + + + for _ in range(m-1): + .... + + for _ in range(n-m): + reverse 操作 \ No newline at end of file diff --git a/093._restore_ip_addresses.md b/093._restore_ip_addresses.md new file mode 100644 index 000000000..55e31916b --- /dev/null +++ b/093._restore_ip_addresses.md @@ -0,0 +1,66 @@ +###93. Restore IP Addresses + +题目: + + + + +难度: + +Medium + + +基本思路已达到,等待AC之路 + +结果AC之路还是比较漫长的,因为不允许前缀为0困扰了一下 + +``` +class Solution(object): + def restoreIpAddresses(self, s): + """ + :type s: str + :rtype: List[str] + """ + self.res = [] + self.singgleAddresses([],s,4) + for i in range(len(self.res)): + self.res[i] = '.'.join(str(j) for j in self.res[i]) + return self.res + + + + def singgleAddresses(self, curRes, s, k): + """ + :type s: str + :rtype: List[str] + """ + if len(s) == 0 and k == 0: + if curRes not in self.res: + self.res.append(curRes) + if len(s) == 0 or k < 0: + return + else: + if self.between0And255(s[:1]): + self.singgleAddresses(curRes + [int(s[:1])], s[1:], k-1) + if self.between0And255(s[:2]): + self.singgleAddresses(curRes + [int(s[:2])], s[2:], k-1) + if self.between0And255(s[:3]): + self.singgleAddresses(curRes + [int(s[:3])], s[3:], k-1) + + def between0And255(self,s): + #前缀不允许为0 + if int(s) == 0 : + if len(s) == 1 : + return True + else: + return False + + if int(s) > 0 and s[0] == '0': + return False + if int(s) > 0 and int(s) <= 255: + return True + return False + +``` + + diff --git a/094._binary_tree_inorder_traversal.md b/094._binary_tree_inorder_traversal.md new file mode 100644 index 000000000..6056c4b47 --- /dev/null +++ b/094._binary_tree_inorder_traversal.md @@ -0,0 +1,70 @@ +###94. Binary Tree Inorder Traversal + +题目: + + + +难度: + +Medium + + +递归 + +``` +class Solution(object): + def inorderTraversal(self, root): + """ + :type root: TreeNode + :rtype: List[int] + """ + self.lst = [] + self.DFS(root) + return self.lst + + + def DFS(self,root): + if root == None: + return + if root.left: + self.DFS(root.left) + self.lst.append(root.val) + if root.right: + self.DFS(root.right) + +``` + +非递归用stack,我听谁讲过 😓 + +// to be done + + +via wikipedia + + +递归: + +``` +inorder(node) + if (node = null) + return + inorder(node.left) + visit(node) + inorder(node.right) +``` + + +非递归,跟之前那个iterator有得一拼,其实好几个题都是在玩这个花样? + +``` +iterativeInorder(node) + s ← empty stack + while (not s.isEmpty() or node ≠ null) + if (node ≠ null) + s.push(node) + node ← node.left + else + node ← s.pop() + visit(node) + node ← node.right +``` \ No newline at end of file diff --git a/096._unique_binary_search_trees.md b/096._unique_binary_search_trees.md new file mode 100644 index 000000000..2e29cf929 --- /dev/null +++ b/096._unique_binary_search_trees.md @@ -0,0 +1,43 @@ +###96. Unique Binary Search Trees + + + +题目: + + + +难度: +Medium + +思路: + + +参照此处hint: + + + + +首先明确n个不等的数它们能构成的二叉搜索树的种类都是相等的. + +毫无头绪,对于1...n的bst,可以这样看,k可以作为root,那么1..k-1必定在左边,k+1...n必定在右边,而1...k-1课产生的bst树是dp[k-1],右边产生的数是dp[n-k],所以能生成的树的数量是 dp[k-1]* dp[n-k] + +dp[n] = sum(dp[k-1]*dp[n-k]),从0到k + + +``` +class Solution(object): + def numTrees(self, n): + """ + :type n: int + :rtype: int + """ + dp = [ 1 for i in range(n+1)] + + for i in range(2,n+1): + s = 0 + for k in range(i): + s += dp[k]*dp[i-k-1] + dp[i] = s + + return dp[-1] +``` \ No newline at end of file diff --git a/098._validate_binary_search_tree.md b/098._validate_binary_search_tree.md new file mode 100644 index 000000000..c4b5dcfbf --- /dev/null +++ b/098._validate_binary_search_tree.md @@ -0,0 +1,74 @@ +###98. Validate Binary Search Tree + +题目: + + + + +难度: + +Easy + + +以前做过这道题,valid binary tree,需要check两件事: + + +``` + 10 + / \ + 7 20 + / \ + 5 40 +``` + + +- node.left.val < node.val + - right subtree of left child, value < node.val +- node.right.val > node.val + - left subtree of the right child, value > node.val + + +wikipedia上有伪码: + +``` +truct TreeNode { + int key; + int value; + struct TreeNode *left; + struct TreeNode *right; +}; + +bool isBST(struct TreeNode *node, int minKey, int maxKey) { + if(node == NULL) return true; + if(node->key < minKey || node->key > maxKey) return false; + + return isBST(node->left, minKey, node->key) && isBST(node->right, node->key, maxKey); +} + + +if(isBST(root, INT_MIN, INT_MAX)) { + puts("This is a BST."); +} else { + puts("This is NOT a BST!"); +} +``` + +实际上就是每次往下看,node都确保被夹在一个范围。 + +翻译了一下伪码,AC + + +``` +class Solution(object): + def isValidBST(self, root): + """ + :type root: TreeNode + :rtype: bool + """ + return self.isBST(root, float('-inf'),float('inf')) + + def isBST(self, root, minKey, maxKey): + if root == None: return True + if root.val <= minKey or root.val >= maxKey : return False + return self.isBST(root.left,minKey,root.val) and self.isBST(root.right, root.val, maxKey) +``` diff --git a/100._same_tree.md b/100._same_tree.md new file mode 100644 index 000000000..47dc25545 --- /dev/null +++ b/100._same_tree.md @@ -0,0 +1,32 @@ +###100. Same Tree + +题目: + + + + +难度: + +Easy + + +递归 + + +``` +class Solution(object): + def isSameTree(self, p, q): + """ + :type p: TreeNode + :type q: TreeNode + :rtype: bool + """ + if p == None or q == None: + if p == None and q == None: + return True + else: + return False + else: + return p.val == q.val and self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right) +``` + diff --git a/101._symmetric_tree.md b/101._symmetric_tree.md new file mode 100644 index 000000000..58651ac01 --- /dev/null +++ b/101._symmetric_tree.md @@ -0,0 +1,48 @@ +###101. Symmetric Tree + +题目: + + + + +难度: + +Easy + + +两棵树symmetric, 有几种可能: + +- 均为none ,symmetric +- 左孩子,右孩子都不存在,并且值相等, symmetric +- 右子树 和 另一棵树的左子树相等,左子树 和另一颗树的右子树相等 🌲 + + +``` +class Solution(object): + def isSymmetric(self, root): + """ + :type root: TreeNode + :rtype: bool + """ + if root == None : + return True + return self.symmetric(root.left, root.right) + + + def symmetric(self,t1, t2): + # empty tree + if t1 == None or t2 == None: + if t1 == t2 == None: + return True + else: + return False + elif t1.val == t2.val: + return self.symmetric(t1.left,t2.right) and self.symmetric(t1.right, t2.left) + else: + return False +``` + +其实函数不应该定义为symmetric,应该定义为qual?更合适。 + + + diff --git a/102._binary_tree_level_order_traversal.md b/102._binary_tree_level_order_traversal.md new file mode 100644 index 000000000..80f7145d3 --- /dev/null +++ b/102._binary_tree_level_order_traversal.md @@ -0,0 +1,63 @@ +###102. Binary Tree Level Order Traversal + +题目: + + + + +难度: + +Easy + + +我觉得并不easy + +两种做法,利用curLevel和nextLevel来记录,然后按层append. + + +``` +class Solution(object): + def levelOrder(self, root): + """ + :type root: TreeNode + :rtype: List[List[int]] + """ + res = [] + + if root == None: return [] + + curLevel = [root] + while curLevel: + nextLevel = [] + tmpRes = [] + for node in curLevel: + tmpRes.append(node.val) + if node.left: nextLevel.append(node.left) + if node.right: nextLevel.append(node.right) + res.append(tmpRes) + curLevel = nextLevel + + return res +``` + + +第二种做法: + + + +``` +class Solution: + # @param root, a tree node + # @return a list of lists of integers + def preorder(self, root, level, res): + if root: + if len(res) < level+1: res.append([]) + res[level].append(root.val) + self.preorder(root.left, level+1, res) + self.preorder(root.right, level+1, res) + def levelOrder(self, root): + res=[] + self.preorder(root, 0, res) + return res +``` +用递归来记录每一层,需要更加学习,不算easy \ No newline at end of file diff --git a/103._binary_tree_zigzag_level_order_traversal.md b/103._binary_tree_zigzag_level_order_traversal.md new file mode 100644 index 000000000..3598fd91e --- /dev/null +++ b/103._binary_tree_zigzag_level_order_traversal.md @@ -0,0 +1,48 @@ +###103. Binary Tree Zigzag Level Order Traversal + +题目: + + + + +难度: + +Medium + + +继续用102 的算法作弊 + +使用102作弊的题目都需要再努力寻求一下别家解法 + +``` + +class Solution(object): + def zigzagLevelOrder(self, root): + """ + :type root: TreeNode + :rtype: List[List[int]] + """ + res = [] + if root == None: return [] + + curLevel = [root] + levelCount = 0 + while curLevel: + nextLevel = [] + tmpRes = [] + for node in curLevel: + tmpRes.append(node.val) + if node.left: nextLevel.append(node.left) + if node.right: nextLevel.append(node.right) + if levelCount % 2 == 0: + res.append(tmpRes) + else : + tmpRes.reverse() + res.append(tmpRes) + levelCount += 1 + curLevel = nextLevel + + return res +``` + + diff --git a/104._maximum_depth_of_binary_tree.md b/104._maximum_depth_of_binary_tree.md new file mode 100644 index 000000000..a11c7d872 --- /dev/null +++ b/104._maximum_depth_of_binary_tree.md @@ -0,0 +1,27 @@ +###104. Maximum Depth of Binary Tree + +题目: + + + +难度: + +Easy + + +简单题 + + +``` + +class Solution(object): + def maxDepth(self, root): + """ + :type root: TreeNode + :rtype: int + """ + if root == None: return 0 + elif root.right == None and root.left == None: return 1 + else: + return max(1 + self.maxDepth(root.left), 1+ self.maxDepth(root.right)) +``` diff --git a/105._construct_binary_tree_from_preorder_and_inorder_traversal.md b/105._construct_binary_tree_from_preorder_and_inorder_traversal.md new file mode 100644 index 000000000..7ed244dd9 --- /dev/null +++ b/105._construct_binary_tree_from_preorder_and_inorder_traversal.md @@ -0,0 +1,100 @@ +###105. Construct Binary Tree from Preorder and Inorder Traversal + +题目: + + + +难度 : Medium + + +preorder 是 根 -> 左 -> 右 +inorder 是 左 -> 根 -> 右 + + +首先pre的第一个就是整个树的root, 假设 pre[0] = in[k],那么in的前k-1个就是树的左子树,后面部分就是树的右子树,这样递归来看. + +然后递归来看,对于前k-1个又是同样的道理吧。 + +然后用递归,写了一颗小树测试,感觉上是对的, + + +``` +class TreeNode(object): + def __init__(self, x): + self.val = x + self.left = None + self.right = None + +nodeA = TreeNode('A') +nodeB = TreeNode('B') +nodeC = TreeNode('C') +nodeD = TreeNode('D') +nodeE = TreeNode('E') +nodeF = TreeNode('F') + +nodeA.left = nodeB +nodeA.right = nodeC +nodeB.left = nodeD +nodeB.right = nodeE +nodeC.left = nodeF + + + # A + # / \ + # B C + # / \ / + # D E F + + +def construct(preorder, inorder): + if preorder == inorder == []: + return None + else: + rootVal = preorder[0] + root = TreeNode(rootVal) + k = inorder.index(rootVal) + if len(preorder) == len(inorder) == 1: + return root + else: + root.left = construct(preorder[1:1+k],inorder[:k]) + root.right = construct(preorder[k+1:],inorder[k+1:]) + return root +root = construct(['A','B','D','E','C','F'],['D','B','E','A','F','C']) + +``` + +尝试AC发现,memory limit超,用大一点的数据测试RecursionError: maximum recursion depth exceeded。 + +根据网上的参考改成偏iteration一点的递归, AC通过 + +mark一下,为了避免数组的复杂操作,这里直接用左右界和数组的引用来代表一段前序遍历和中序遍历。直接用递归更改list本身不能AC,但是变成这样就可以AC,因为更改数组会拷贝数组带来很多内存和递归上的麻烦,是这样的么? + +这个技巧还比较常见,就是用原本list的角标,而不去cut list本身 + + +``` +class Solution(object): + def buildTree(self, preorder, inorder): + """ + :type preorder: List[int] + :type inorder: List[int] + :rtype: TreeNode + """ + def buildTree(preorder, inorder, lp, rp, li, ri): + if lp > rp or li > ri: + return None + + root = TreeNode(preorder[lp]) + k = inorder.index(preorder[lp]) + + # left node + left = buildTree(preorder, inorder, lp+1, lp + k - li, li, k - 1) + right = buildTree(preorder, inorder, lp + k - li + 1, rp, k+1, ri) + + root.left = left + root.right = right + + return root + + return buildTree(preorder, inorder, 0 , len(preorder) - 1, 0, len(inorder) -1) +``` diff --git a/106._construct_binary_tree_from_inorder_and_postorder_traversal.md b/106._construct_binary_tree_from_inorder_and_postorder_traversal.md new file mode 100644 index 000000000..61331c520 --- /dev/null +++ b/106._construct_binary_tree_from_inorder_and_postorder_traversal.md @@ -0,0 +1,68 @@ +###106. Construct Binary Tree from Inorder and Postorder Traversal + +题目: + + + +难度 : Medium + + +inorder 是 左 -> 根 -> 右 +postorder 是 左 -> 右 -> 根 + + +跟105基本一样 + +还是先弄了一个递归可用版本 + + +``` +def buildTree(inorder, postorder): + """ + :type preorder: List[int] + :type inorder: List[int] + :rtype: TreeNode + """ + if postorder == inorder == []: + return None + else: + rootVal = postorder[-1] + root = TreeNode(rootVal) + k = inorder.index(rootVal) + root.left = buildTree(inorder[:k],postorder[:k]) + root.right = buildTree(inorder[k+1:],postorder[k:-1]) + return root + +``` +照抄105 + + +``` +class Solution(object): + def buildTree(self, inorder, postorder): + """ + :type inorder: List[int] + :type postorder: List[int] + :rtype: TreeNode + """ + def buildTree(inorder, postorder, li, ri ,lp, rp ): + if lp > rp or li > ri: + return None + + root = TreeNode(postorder[rp]) + k = inorder.index(postorder[rp]) + + # left node + left = buildTree(inorder, postorder, li, k-1, lp, lp + k - li - 1) + right = buildTree(inorder, postorder, k+1, ri, lp+k-li, rp-1) + + root.left = left + root.right = right + + return root + + return buildTree(inorder, postorder, 0, len(inorder) - 1, 0, len(postorder) - 1) + +``` + + diff --git a/107._binary_tree_level_order_traversal_ii.md b/107._binary_tree_level_order_traversal_ii.md new file mode 100644 index 000000000..a7fd3d732 --- /dev/null +++ b/107._binary_tree_level_order_traversal_ii.md @@ -0,0 +1,48 @@ +###107. Binary Tree Level Order Traversal II + +题目: + + + + +难度: + +Easy + + +用102 的算法作弊 + + +``` +# Definition for a binary tree node. +# class TreeNode(object): +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None + +class Solution(object): + def levelOrderBottom(self, root): + """ + :type root: TreeNode + :rtype: List[List[int]] + """ + res = [] + + if root == None: return [] + + curLevel = [root] + while curLevel: + nextLevel = [] + tmpRes = [] + for node in curLevel: + tmpRes.append(node.val) + if node.left: nextLevel.append(node.left) + if node.right: nextLevel.append(node.right) + res.append(tmpRes) + curLevel = nextLevel + res.reverse() + return res +``` + + diff --git a/108._convert_sorted_array_to_binary_search_tree.md b/108._convert_sorted_array_to_binary_search_tree.md new file mode 100644 index 000000000..12705f918 --- /dev/null +++ b/108._convert_sorted_array_to_binary_search_tree.md @@ -0,0 +1,41 @@ +###108. Convert Sorted Array to Binary Search Tree + +题目: + + + +难度: +Medium + + +思路: + +递归 + +- nums为空,return None +- nums 只有一个, return其为根节点 +- nums 大于一个,nums[n/2]为中间元素,根结点,nums[:mid]为左子树, nums[mid+1:]为右子树 + + +``` +class Solution(object): + def sortedArrayToBST(self, nums): + """ + :type nums: List[int] + :rtype: TreeNode + """ + n = len(nums) + + if n == 0 : + return None + if n == 1 : + return TreeNode(nums[0]) + else: + mid = n / 2 + root = TreeNode(nums[mid]) + root.left = self.sortedArrayToBST(nums[:mid]) + root.right = self.sortedArrayToBST(nums[mid+1:]) + return root + + +``` diff --git a/109._convert_sorted_list_to_binary_search_tree.md b/109._convert_sorted_list_to_binary_search_tree.md new file mode 100644 index 000000000..4ca36dc47 --- /dev/null +++ b/109._convert_sorted_list_to_binary_search_tree.md @@ -0,0 +1,47 @@ +###109. Convert Sorted List to Binary Search Tree + + + +题目: + + + +难度: + +Medium + +思路: + +跟解array to binary search tree一样,递归,找到list中间点,把它变成root,左边为左树,右边为右子树 + +值得注意的是需要找到的是list中间的前一个,所以用一个dummy node,然后反复使用linked list找中点的代码 + +``` +class Solution(object): + def sortedListToBST(self, head): + """ + :type head: ListNode + :rtype: TreeNode + """ + + if head == None: + return None + elif head.next == None: + return TreeNode(head.val) + else: + dummy = ListNode(-1) + dummy.next = head + slow, fast = dummy, dummy + while fast.next and fast.next.next: + slow = slow.next + fast = fast.next.next + + # print slow.val + mid = slow.next + slow.next = None + + root = TreeNode(mid.val) + root.left = self.sortedListToBST(head) + root.right = self.sortedListToBST(mid.next) + return root +``` diff --git a/110._balanced_binary_tree.md b/110._balanced_binary_tree.md new file mode 100644 index 000000000..4b32130f9 --- /dev/null +++ b/110._balanced_binary_tree.md @@ -0,0 +1,37 @@ +###110. Balanced Binary Tree + +题目: + + + +难度: +Easy + + +全程递归中 + + + +``` +class Solution(object): + def isBalanced(self, root): + """ + :type root: TreeNode + :rtype: bool + """ + if root == None: + return True + + lh = self.height(root.left) + rh = self.height(root.right) + + if abs(lh-rh) <= 1 and self.isBalanced(root.left) and self.isBalanced(root.right): + return True + return False + + + def height(self, node): + if node == None: + return 0 + return 1 + max(self.height(node.left),self.height(node.right)) +``` \ No newline at end of file diff --git a/111._minimum_depth_of_binary_tree.md b/111._minimum_depth_of_binary_tree.md new file mode 100644 index 000000000..a04d4164e --- /dev/null +++ b/111._minimum_depth_of_binary_tree.md @@ -0,0 +1,44 @@ +###111. Minimum Depth of Binary Tree + +题目: + + + +难度: + +Easy + +注意leaf node反正就是没有left和right的 + +比如下图 + + +``` +1 + \ + 2 +``` + +2是一个孩子节点 + + +``` +class Solution(object): + def minDepth(self, root): + """ + :type root: TreeNode + :rtype: int + """ + if root == None: + return 0 + elif root.left == None and root.right == None: + return 1 + else : + if root.left == None: + return 1 + self.minDepth(root.right) + elif root.right == None: + return 1 + self.minDepth(root.left) + else: + return min(1+ self.minDepth(root.left), 1+ self.minDepth(root.right)) + +``` \ No newline at end of file diff --git a/112._path_sum.md b/112._path_sum.md new file mode 100644 index 000000000..db20ec2aa --- /dev/null +++ b/112._path_sum.md @@ -0,0 +1,30 @@ +###112. Path Sum + +题目: + + + +难度: + +Easy + + +递归 + +``` +class Solution(object): + def hasPathSum(self, root, sum): + """ + :type root: TreeNode + :type sum: int + :rtype: bool + """ + if root == None: + return False + else: + if root.val == sum and (root.left == None and root.right == None): + return True + else: + return self.hasPathSum(root.left, sum - root.val) or self.hasPathSum(root.right, sum - root.val) + +``` diff --git a/113._path_sum_ii.md b/113._path_sum_ii.md new file mode 100644 index 000000000..21cb0fabf --- /dev/null +++ b/113._path_sum_ii.md @@ -0,0 +1,48 @@ +###113. Path Sum II + +题目: + + + + + +tag : DFS + + +难度 : Medium + + +注意宁愿写几次curList + [root.val] 也不要直接传一个list进去,因为list pass by reference的亏已经吃过了 + +``` +# Definition for a binary tree node. +# class TreeNode(object): +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None + +class Solution(object): + def pathSum(self, root, sum): + """ + :type root: TreeNode + :type sum: int + :rtype: List[List[int]] + """ + result = [] + self.auxPathSum(root,sum,[],result) + return result + + def auxPathSum(self, root, sum, curList, curLists): + if root == None: + return + sum -= root.val + if sum == 0 and (root.left == None and root.right == None): + curLists.append(curList + [root.val]) + return + if root.left != None: + self.auxPathSum(root.left, sum - root.val, curList + [root.val],curLists) + if root.right != None: + self.auxPathSum(root.right, sum - root.val, curList + [root.val],curLists) +``` + diff --git a/114._flatten_binary_tree_to_linked_list.md b/114._flatten_binary_tree_to_linked_list.md new file mode 100644 index 000000000..f23fd7870 --- /dev/null +++ b/114._flatten_binary_tree_to_linked_list.md @@ -0,0 +1,42 @@ +###114. Flatten Binary Tree to Linked List + +题目: + + + +难度: + +Medium + + +有hint,又是玩DFS的preorder,用的loop,也不算很聪明的算法 + +用stack来放node,每次把pop出来的node左边变成null,把它的right指向下一个pop出来的node,也就是为嘛有prev,然后root处特殊处理一下 + + +``` + +class Solution(object): + def flatten(self, root): + """ + :type root: TreeNode + :rtype: void Do not return anything, modify root in-place instead. + """ + if root == None: + return + s = [] + s.append(root) + prev = root + while s: + node = s.pop() + if node.right: + s.append(node.right) + if node.left: + s.append(node.left) + node.left = None + if node == root: + continue + else: + prev.right = node + prev = node +``` diff --git a/116._populating_next_right_pointers_in_each_node.md b/116._populating_next_right_pointers_in_each_node.md new file mode 100644 index 000000000..ed51a5c1e --- /dev/null +++ b/116._populating_next_right_pointers_in_each_node.md @@ -0,0 +1,36 @@ +###116. Populating Next Right Pointers in Each Node + +题目: + + + + +难度: + +Medium + +思路: 跟level print一样,把每个level由左到右记录。 +然后这层level的右指向右,最后一个指向None。 +处理一下边界条件,完工。 + +看题目tag给的DFS,所以是否有哪种push & pop stack的方法可以特别来处理指向呢-》 有待研究 + +``` +class Solution(object): + def connect(self, root): + """ + :type root: TreeLinkNode + :rtype: nothing + """ + if root == None: return root + thislevel = [root] + while thislevel: + nextlevel = list() + for n in thislevel: + if n.left: nextlevel.append(n.left) + if n.right: nextlevel.append(n.right) + for i in range(len(thislevel)-1): + thislevel[i].next = thislevel[i+1] + thislevel[-1].next = None + thislevel = nextlevel +``` diff --git a/118._pascal's_triangle.md b/118._pascal's_triangle.md new file mode 100644 index 000000000..72e7a44f9 --- /dev/null +++ b/118._pascal's_triangle.md @@ -0,0 +1,36 @@ +###118. Pascal's Triangle + +题目: + + + + +难度: + +Easy + + +高中数学知识,把行数理理清楚就ok + + +``` +class Solution(object): + def generate(self, numRows): + """ + :type numRows: int + :rtype: List[List[int]] + """ + res = [[1],[1,1]] + if numRows < 3: + return res[:numRows] + for i in range(3, numRows+1): + tmp = [1] * i + for j in range(1,i-1): + tmp[j] = res[i-2][j-1] + res[i-2][j] + res.append(tmp) + return res + + +``` + + diff --git a/119. Pascal's Triangle II.md b/119. Pascal's Triangle II.md new file mode 100644 index 000000000..dbf97df9d --- /dev/null +++ b/119. Pascal's Triangle II.md @@ -0,0 +1,59 @@ +### 119. Pascal's Triangle II + +题目: + + +难度 : Easy + + + +思路: + +高中数学 + + + +这种算法会超时||| + +``` +class Solution(object): + def getRow(self, rowIndex): + """ + :type rowIndex: int + :rtype: List[int] + """ + def combNum(n,k): + if k == 0 or k == n : + return 1 + return combNum(n-1,k-1) + combNum(n-1,k) + res = [] + for i in range(rowIndex + 1): + res.append(combNum(rowIndex,i)) + + return res +``` + + + +用118改的,AC代码 + + + +``` +class Solution(object): + def getRow(self, rowIndex): + """ + :type rowIndex: int + :rtype: List[int] + """ + res = [[1],[1,1]] + if rowIndex < 2: + return res[rowIndex] + for i in range(3, rowIndex+2): + tmp = [1] * i + for j in range(1,i-1): + tmp[j] = res[i-2][j-1] + res[i-2][j] + res.append(tmp) + return res[-1] +``` + diff --git a/120. Triangle.md b/120. Triangle.md new file mode 100644 index 000000000..954a28cb8 --- /dev/null +++ b/120. Triangle.md @@ -0,0 +1,72 @@ +### 120. Triangle + +题目: + + + +难度: +Medium + +思路: + +先是要注意下这句话:**Each step you may move to adjacent numbers on the row below** + +在考虑adjacent number的定义,并不是角标的adjacent,而是真的形态上的adjacent + +比如 + +``` + -1 -1 + 2 1 最小 1 0 +-2 2 0 -1 2 0 +``` + +最小是-1, 而并不能从第二排的0跳到第三排的第一个造成-2. + + so AC代码 + +感觉关于dp,我可能还需要补一些东西,因为我不能做到O(n) space + +``` +class Solution(object): + def minimumTotal(self, triangle): + """ + :type triangle: List[List[int]] + :rtype: int + """ + # n total rows of triangle + n = len(triangle) + if n == 1: return triangle[0][0] + elif n == 2 : return min(triangle[0][0] + triangle[1][0], triangle[0][0] + triangle[1][1]) + else: + res = [] + for i in range(n): + res.append(triangle[i]) + + res[0] = [triangle[0][0]] + res[1] = [triangle[0][0] + triangle[1][0], triangle[0][0] + triangle[1][1]] + + for i in range(2,n): + for j in range(i+1): + if j == 0: + res[i][j] = res[i-1][j] + triangle[i][j] + elif j == i: + res[i][j] = res[i-1][-1] + triangle[i][j] + else: + res[i][j] = min(res[i-1][j-1],res[i-1][j]) + triangle[i][j] + + return min(res[-1]) +``` + + + + + + + + + + + + + diff --git a/125._valid_palindrome.md b/125._valid_palindrome.md new file mode 100644 index 000000000..f79899e2d --- /dev/null +++ b/125._valid_palindrome.md @@ -0,0 +1,63 @@ +###125. Valid Palindrome + +题目: + + + +难度: + +Easy + +根据这个palindrome原理来看,running time比较慢 + +``` +class Solution(object): + def isPalindrome(self,s): + """ + :type s: str + :rtype: bool + """ + Alphabets = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9'] + i = 0 + j = len(s) - 1 + palindrome = True + lowerS = s.lower() + while i < j: + if lowerS[i] not in Alphabets: + i += 1 + continue + if lowerS[j] not in Alphabets: + j -= 1 + continue + if lowerS[i] != lowerS[j]: + print(i,lowerS[i],j,lowerS[j]) + return False + # s[i] == s[j] + else: + i += 1 + j -= 1 + return palindrome + +``` + +当然也有取巧的办法,就是比较reversed string 和原本的是否相等. +Running time 提升了一点 + +``` +class Solution(object): + def isPalindrome(self,s): + """ + :type s: str + :rtype: bool + """ + + new=[] + + s=s.lower() + + for i in s: + if '0'<=i<='9' or 'a'<=i<='z': + new.append(i) + + return new==new[::-1] +``` \ No newline at end of file diff --git a/126. Word Ladder II.md b/126. Word Ladder II.md new file mode 100644 index 000000000..e6ef281cc --- /dev/null +++ b/126. Word Ladder II.md @@ -0,0 +1,101 @@ +###126. Word Ladder II + +题目: + + + +难度: + +Hard + +其实关键在于怎么优化和表示图 + + + +思路来自1p3a: + +这题目实在是太适合python了  如此简洁 + +就是基本的bfs,典型的level order traverse +有两个坑: + +1. 不要判断字典里的某两个word是否只相差一个字母,而是要判断某个word的邻居(和他只相差一个字母的所有word)是否在字典里,这样的改进会使这一步的复杂度下降了很多,否则超时妥妥 +2. 记录每一层已经访问过的word,一层结束后把他们加到大的visited里面,记住每次要访问的word不可以是在visited里面的 + +最后见到end word就收 +完成 + + + +拿题目的例子来看: + +```\ + hit + | + hot + / \ + dot lot + | | + dog log + \ / + cog +``` + +生成了如下的一个trace 字典,然后再根据这个来寻找路径 + +`{'cog': ['log', 'dog'], 'hit': [], 'log': ['lot'], 'dog': ['dot'], 'hot': ['hit'], 'lot': ['hot'], 'dot': ['hot']}` + +而生成字典的过程就是BFS的,此处保证寻找的路径就是最短的。 + +AC代码: + +``` +class Solution(object): + def findLadders(self, beginWord, endWord, wordlist): + """ + :type beginWord: str + :type endWord: str + :type wordlist: Set[str] + :rtype: List[List[int]] + """ + def backtrack(result, trace, path, word): + if len(trace[word]) == 0: + result.append([word] + path) + else: + for prev in trace[word]: + backtrack(result, trace, [word] + path, prev) + + + wordSet = set(wordlist) + wordSet.add(beginWord) + wordSet.add(endWord) + + result, trace, current = [], {word: [] for word in wordSet}, set([beginWord]) + # print result, trace, current + while current and endWord not in current: + for word in current: + wordSet.remove(word) + net = set([]) + for word in current: + for i in range(len(word)): + for j in 'abcdefghijklmnopqrstuvwxyz': + candidate = word[:i] + j + word[i+1:] + if candidate in wordSet: + trace[candidate].append(word) + net.add(candidate) + current = net + + if current: + backtrack(result, trace, [], endWord) + return result +``` + + + +这样可以beat 约 60% + + + + + + diff --git a/127._word_ladder.md b/127._word_ladder.md new file mode 100644 index 000000000..e602a0847 --- /dev/null +++ b/127._word_ladder.md @@ -0,0 +1,85 @@ +###127. Word Ladder + +题目: + + + + +难度: + +Medium + +tag可以算BFS,其实就是求shortest path的变体 + +按照BFS的微码改了一下,尝试AC,超时 + +``` +class Solution(object): + def ladderLength(self, beginWord, endWord, wordList): + """ + :type beginWord: str + :type endWord: str + :type wordList: Set[str] + :rtype: int + """ + queue = [(beginWord, [beginWord])] + visited = set() + + while queue: + (vertex, path) = queue.pop(0) + if vertex not in visited: + if self.oneDiff(vertex, endWord): + return len(path) + 1 + visited.add(vertex) + for word in wordList: + if self.oneDiff(vertex, word): + queue.append((word, path + [word])) + return 0 + + def oneDiff(self,s1, s2): + countDiffs = 0 + for a, b in zip(s1,s2): + if a != b: + countDiffs += 1 + return countDiffs == 1 +``` + +着手优化 + + +实在发现优化基本无所提升,然后看别人的解法,思路一致,但是用了collection里面的结构deque和增加set帮助解题。 + +collection有待研究 + +``` +class Solution(object): + def ladderLength(self, beginWord, endWord, wordList): + """ + :type beginWord: str + :type endWord: str + :type wordList: Set[str] + :rtype: int + """ + from collections import deque, defaultdict + + queue = deque([(beginWord, [beginWord])]) + visited = set() + wordSet = set(wordList) + wordSet.add(endWord) + + while queue: + (vertex, path) = queue.popleft() + if vertex not in visited: + if vertex == endWord: + return len(path) + visited.add(vertex) + for i in range(len(beginWord)): + part1 = vertex[:i]; part2 = vertex[i+1:] + for j in 'abcdefghijklmnopqrstuvwxyz': + if vertex[i] != j: + nextWord = part1 + j + part2 + if nextWord in wordSet: + queue.append((nextWord, path + [nextWord])) + wordSet.remove(nextWord) + return 0 +``` \ No newline at end of file diff --git a/129._sum_root_to_leaf_numbers.md b/129._sum_root_to_leaf_numbers.md new file mode 100644 index 000000000..cedbdcd74 --- /dev/null +++ b/129._sum_root_to_leaf_numbers.md @@ -0,0 +1,37 @@ +###129. Sum Root to Leaf Numbers + +题目: + + + +难度: + +Medium + +其实递归不难想到,不过我自己做错在细节方面 + +如果只有单支,每朝下走一层,代表的数字都增加10, 10* 原本的 + 新节点的数字,最终也是用这个来解 + +``` +class Solution(object): + def sumNumbers(self, root): + """ + :type root: TreeNode + :rtype: int + """ + return self.calSum(root,0) + + + def calSum(self,root,curSum): + if root == None: + return 0 + else: + curSum = curSum * 10 + root.val + if root.left == None and root.right == None: + return curSum + else: + return self.calSum(root.left, curSum) + self.calSum(root.right, curSum) + + + +``` diff --git a/130._surrounded_regions.md b/130._surrounded_regions.md new file mode 100644 index 000000000..a0f76e264 --- /dev/null +++ b/130._surrounded_regions.md @@ -0,0 +1,147 @@ +###130. Surrounded Regions + + +题目: + + + + +难度: + +Medium + + +思路: + +loop,然后碰到O做DFS/BFS找出O所在区域: + +- 貌似只要O没有碰壁,O就总是被X包围着? +- 所以找出O的范围,然后看它是否碰壁,没有碰壁则mark不需要修改 + +但是这道题折磨我了很久,因为它有毛病。。。。 +它给的input例子是 +["XXX","XOX","XXX"] +也怪我 input写着List[List[str]] + +但实际上的输入是: +[[u'X', u'X', u'X'], [u'X', u'X', u'X'], [u'X', u'X', u'X']] + + +还要mark unicode + +还有就是学会了新的可以函数之下定义函数,这样就不用什么self了,用起来真方便,但是这样的思路做起来会超时。 + + + +``` +class Solution(object): + def solve(self, board): + """ + :type board: List[List[str]] + :rtype: void Do not return anything, modify board in-place instead. + """ + + + def shouldOChange(i, j): + """ + return x,y area and whether they shouldChange + """ + shouldChange = True + Oarea = [] + s = [] + s.append((i,j)) + while s: + (x,y) = s.pop() + if x == 0 or x == row - 1 or y == 0 or y == col -1 : + shouldChange = False + visited[x][y] = 1 + Oarea.append((x,y)) + if legal(x-1,y): + s.append((x-1,y)) + if legal(x+1,y): + s.append((x+1,y)) + if legal(x,y-1): + s.append((x,y-1)) + if legal(x,y-1): + s.append((x,y+1)) + return Oarea,shouldChange + + def legal(x,y): + return x>=0 and x < row and y>=0 and y < col and board[x][y] == 'O' and visited[x][y] == 0 + + + row = len(board) + col = len(board[0]) if row else 0 + + visited = [[0 for i in range(col)] for j in range(row)] + + for i in range(row): + for j in range(col): + if board[i][j] == 'O' and visited[i][j] == 0: + Oarea, shouldChange = shouldOChange(i,j) + print Oarea,shouldChange + if shouldChange: + for (x,y) in Oarea: + board[x][y] = u'X' + + print board +``` + + +另一个思路就是对周围碰壁的O做BFS/DFS,碰壁的和碰壁相连的是不需要修改的。这样就时间复杂度降低很多了。 + +原本是O(n^2)可能做DFS/BFS。现在是O(4n)做DFS/BFS,但是发现依旧超时,最后查看了别人的解法,因为我的解法里面多了一个存储工具,相当于,把需要更换location的位置存储起来,最后做loop的时候去查,然后这样还是很耗时。 + +而一个简便的变法是把这些特别的碰壁的'O' mark出来,这样最后loop的时候不改变这些'O',只改变不碰壁的'O',又可以减少工作量。同时依旧可以使用collection里面的queue + + + +AC代码 + +``` +class Solution(object): + def solve(self, board): + """ + :type board: List[List[str]] + :rtype: void Do not return anything, modify board in-place instead. + """ + def legal(x,y): + return x>=0 and x < row and y>=0 and y < col and board[x][y] == 'O' and visited[x][y] == 0 + + + row = len(board) + col = len(board[0]) if row else 0 + + visited = [[0 for i in range(col)] for j in range(row)] + + notChangeOArea = [] + queue = collections.deque() + + for j in range(col): + if board[0][j] == 'O': queue.append((0,j)) + if board[row-1][j] == 'O': queue.append((row-1,j)) + for i in range(row): + if board[i][0] == 'O': queue.append((i,0)) + if board[i][col-1] == 'O': queue.append((i,col-1)) + + while queue: + (x,y) = queue.popleft() + board[x][y] = '$' + visited[x][y] = 1 + if legal(x-1,y): + queue.append((x-1,y)) + if legal(x+1,y): + queue.append((x+1,y)) + if legal(x,y-1): + queue.append((x,y-1)) + if legal(x,y+1): + queue.append((x,y+1)) + + for i in range(row): + for j in range(col): + if board[i][j] == '$' : board[i][j] = 'O' + elif board[i][j] == 'O' : board[i][j] = 'X' +``` + + +同时发现,用这种方式,无论是否使用collection里面的queue,都能AC \ No newline at end of file diff --git a/131._palindrome_partitioning.md b/131._palindrome_partitioning.md new file mode 100644 index 000000000..45d404c89 --- /dev/null +++ b/131._palindrome_partitioning.md @@ -0,0 +1,48 @@ +###131. Palindrome Partitioning + +题目: + + + +难度: +Medium + +知道一定是用递归做,但是在怎么拆的部分疑惑了,然后看了hint + +key部分长这样,拆法是类似于combination,然后这个len(s) == 0是确保能被拆为palindrome,因为这样剩下的string才是空的 + + +这个recursion tree是这样的,感觉时间复杂度是O(n!),因为每次树都branch n个分支 + +``` + +class Solution(object): + def partition(self, s): + """ + :type s: str + :rtype: List[List[str]] + """ + self.res = [] + self.dfs(s,[]) + return self.res + + + def dfs(self, s, stringList): + if len(s) == 0: + self.res.append(stringList) + for i in range(1,len(s)+1): + if self.isPalindrome(s[:i]): + self.dfs(s[i:],stringList + [s[:i]]) + + def isPalindrome(self, s): + if len(s) <= 1: + return True + return s[0] == s[-1] and self.isPalindrome(s[1:-1]) + +a = Solution() +print a.partition("aab") + +# [['a', 'a', 'b'], ['aa', 'b']] +``` + +输出是每次必定从单个char的list开始,然后单个char 配 palindrome word,然后palindrome word再来配char... \ No newline at end of file diff --git a/133._clone_graph.md b/133._clone_graph.md new file mode 100644 index 000000000..39921e282 --- /dev/null +++ b/133._clone_graph.md @@ -0,0 +1,66 @@ +###133. Clone Graph + + +题目: + + + +难度: +Medium + + + +思路: + +DFS或者BFS把graph traverse一遍,边traverse边复制。因为nodes are labeled uniquely,这就是方便的地方,但是注意node可能重复和有self-loop. + +所以先建立新的root node,然后有一个dict把node label和node一一对应。 + +用stack来存储原本的graph root node,对原本的graph做DFS,这个时候,如果这个node的neighbor是已经出现过,那么我们就是去修改原本的existNode,让它指向存在的neighbor,否则创建新的,再把它们联系起来,谷歌了一下,别人写的比我更简单。anyway,先AC。 + + + +`if cur.label in createdNodes:`多余。 + + + + +``` +class Solution(object): + def cloneGraph(self, node): + """ + :type node: UndirectedGraphNode + :rtype: UndirectedGraphNode + """ + if node == None: return None + + root = UndirectedGraphNode(node.label) + # must 1 to 1 + createdNodes = {} + createdNodes[root.label] = root + + stack = [] + stack.append(node) + + while stack: + cur = stack.pop() + if cur.label in createdNodes: + existNode = createdNodes[cur.label] + for neighbor in cur.neighbors: + if neighbor.label in createdNodes: + existNeighbor = createdNodes[neighbor.label] + existNode.neighbors.append(existNeighbor) + else: + newNode = UndirectedGraphNode(neighbor.label) + existNode.neighbors.append(newNode) + createdNodes[neighbor.label] = newNode + stack.append(neighbor) + return root +``` + + + +看了别人的代码,貌似比我又写的简洁。 + + + diff --git a/136._single_number.md b/136._single_number.md new file mode 100644 index 000000000..67fdc7dcf --- /dev/null +++ b/136._single_number.md @@ -0,0 +1,43 @@ +###136. Single Number + + + +题目: + + + +难度: + +Easy + + +思路: + +位运算,终于要take it了 + +非常常见的一道算法题,将所有数字进行异或操作即可。对于异或操作明确以下三点: + +- 一个整数与自己异或的结果是0 +- 一个整数与0异或的结果是自己 +- 异或操作满足交换律,即a^b=b^a + +Python的位操作: + + +神奇的解法: + + +``` +class Solution(object): + def singleNumber(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + result = nums[0] + + for i in nums[1:]: + result ^= i + return result +``` + diff --git a/139._word_break.md b/139._word_break.md new file mode 100644 index 000000000..45d941fb3 --- /dev/null +++ b/139._word_break.md @@ -0,0 +1,61 @@ +###139. Word Break + +题目: + + + +难度: + +Medium + + + +超时,无法AC + +backtracking,或者叫递归,简直超时小公主了 + +``` +class Solution(object): + def wordBreak(self, s, wordDict): + """ + :type s: str + :type wordDict: Set[str] + :rtype: bool + """ + self.res = [] + self.wordBreakLst([],s,wordDict) + for r in self.res: + return set(wordDict) >= set(r) + return False + + + def wordBreakLst(self, lst, rest, wordDict): + if rest == '': + self.res.append(lst) + for i in range(1+len(rest)): + if rest[:i] in wordDict: + self.wordBreakLst(lst+[rest[:i]],rest[i:],wordDict) +``` + + +然后发现别人家的孩子,大家都用的动规.时间复杂度由O(2^n) -> O(n^2) + +``` +class Solution(object): + def wordBreak(self, s, wordDict): + """ + :type s: str + :type wordDict: Set[str] + :rtype: bool + """ + dp = [False for i in range(1+len(s))] + dp[0] = True + for i in range(1,len(s)+1): + for k in range(i): + if dp[k] and s[k:i] in wordDict: + dp[i] = True + return dp[len(s)] +``` + +还是刷的不够多 + diff --git a/140._word_break_ii.md b/140._word_break_ii.md new file mode 100644 index 000000000..2f48adf7b --- /dev/null +++ b/140._word_break_ii.md @@ -0,0 +1,119 @@ + +###140. Word Break II + +题目: + + + +难度: + +Medium + + + +还是backtracking,会超时 + +``` +class Solution(object): + def wordBreak(self, s, wordDict): + """ + :type s: str + :type wordDict: Set[str] + :rtype: bool + """ + self.res = [] + self.wordBreakLst("",s,wordDict) + return self.res + + + def wordBreakLst(self, lst, rest, wordDict): + if rest == '': + self.res.append(lst.rstrip()) + # print lst + for i in range(1+len(rest)): + if rest[:i] in wordDict: + self.wordBreakLst(lst + rest[:i] + " ",rest[i:],wordDict) + +``` + + + + +然后看到有把word break i 结合起来减少时间复杂度的作法。 + + +做法如下,聪明: + +就是对于每一个s,我们来check它是否可以break,如果不可以,就不用做相应的操作了 + +举例 + +``` +s = "catsanddog" +传入wordBreakLst函数 + +首先check它是可以被分割的,于是开始分割 +stringLst = cat s[:i] = sanddog +继续传入s[:i] 进wordBreakLst again,还是可以分割,stringLst = ' cat sand' +继续 + +另外的是s[:i] = cats s[:i] = anddog +也是可以分割 + +画图就是类似这样 + + + catsanddog | | + cat cats + | | sand and + / \ + dog dog + +``` + + + 解法 + +``` +class Solution(object): + def wordBreak(self, s, wordDict): + """ + :type s: str + :type wordDict: Set[str] + :rtype: bool + """ + self.res = [] + self.wordBreakLst(s,wordDict,"") + return self.res + + def check(self, s, wordDict): + dp = [False for i in range(1+len(s))] + dp[0] = True + for i in range(1,len(s)+1): + for k in range(i): + if dp[k] and s[k:i] in wordDict: + dp[i] = True + return dp[len(s)] + + + def wordBreakLst(self, s, wordDict, stringLst): + if self.check(s,wordDict): + if len(s) == 0 : self.res.append(stringLst[1:]) + for i in range(1,len(s)+1): + if s[:i] in wordDict: + self.wordBreakLst(s[i:], wordDict, stringLst + ' ' + s[:i]) +``` + + +但是其实 + +``` +s = "aaaaaa" +wordDict = ["a","aa","aaa"] +print a.wordBreak(s,wordDict)还是会loop很多次 + +不过像 +s = "aabbb" +wordDict = ["a","abbb"] +就会极其的减少loop次数 +``` diff --git a/141._linked_list_cycle.md b/141._linked_list_cycle.md new file mode 100644 index 000000000..e671e4942 --- /dev/null +++ b/141._linked_list_cycle.md @@ -0,0 +1,81 @@ +###141. Linked List Cycle + +题目: + + + + +难度: + +Easy + + +想法一: + +直接超时 + +``` +class Solution(object): + def hasCycle(self, head): + """ + :type head: ListNode + :rtype: bool + """ + if head == None: return False + lst = [] + cur = head + while cur: + if cur in lst: + return True + lst.append(cur) + cur = cur.next + return False +``` + + + +想法二:相当用boolean array记录某个点是否被访问过,时间,空间复杂度都是O(n) + +``` +class Solution(object): + def hasCycle(self, head): + """ + :type head: ListNode + :rtype: bool + """ + if head == None: return False + dictx = {} + cur = head + while cur: + if cur in dictx: + return True + dictx[cur] = 1 + cur = cur.next + return False +``` + +结果这种方法的run time还比较快 + +查了一下,有解答说可以有空间复杂度O(1),时间复杂度O(n)。两个指针,一个快一个慢,快的每次走两步,慢的每次走一步,如果有环,最终会在某处相遇。这也是一个算法。这种快慢指针配合已经不是第一次遇到了,比如找linklist中间的node。 + + + +但是并没有觉得这样的算法是O(n), worst case time complexity is O(N+K), which is O(n). + + +``` +class Solution(object): + def hasCycle(self, head): + """ + :type head: ListNode + :rtype: bool + """ + slow = head + fast = head + while slow and fast and fast.next: + slow = slow.next + fast = fast.next.next + if slow == fast: + return True + return False +``` diff --git a/143._reorder_list.md b/143._reorder_list.md new file mode 100644 index 000000000..59c9fb9fb --- /dev/null +++ b/143._reorder_list.md @@ -0,0 +1,112 @@ +###143. Reorder List + +题目: + + + + +难度: + +Medium + +超时 + + +``` + +class Solution(object): + def reorderList(self, head): + """ + :type head: ListNode + :rtype: void Do not return anything, modify head in-place instead. + """ + head = self.reorder(head) + + + def reorder(self, head): + if head == None or head.next == None or head.next.next == None: + return head + + l0 = head + l1 = head.next + ln_1 = self.oneNodeTail(head) + ln =ln_1.next + + l0.next = ln + ln_1.next = None + ln.next = self.reorder(l1) + return l0 + + + def oneNodeTail(self, head): + if head == None or head.next == None or head.next.next == None: + return head + cur = head + while cur.next: + if cur.next.next: + cur = cur.next + else: + break + return cur + +``` + + +取巧的办法是: + +找到中间节点,断开,把后半截linked list reverse,然后合并 √ + +看了AC指南 + +``` +class Solution(object): + def reorderList(self, head): + """ + :type head: ListNode + :rtype: void Do not return anything, modify head in-place instead. + """ + if head == None or head.next == None or head.next.next == None: + return + + slow = head + fast = head + prev = None + + while fast and fast.next: + prev = slow + slow = slow.next + fast = fast.next.next + + prev.next = None + + + slow = self.reverseList(slow) + + cur = head + while cur.next: + tmp = cur.next + cur.next = slow + slow = slow.next + cur.next.next = tmp + cur = tmp + cur.next = slow + + + + def reverseList(self,head): + """ + :type head: ListNode + :rtype: ListNode + """ + prev = None + cur = head + while(cur): + nxt = cur.next + cur.next = prev + prev = cur + cur = nxt + return prev + + +``` + diff --git a/144._binary_tree_preorder_traversal.md b/144._binary_tree_preorder_traversal.md new file mode 100644 index 000000000..805a59dca --- /dev/null +++ b/144._binary_tree_preorder_traversal.md @@ -0,0 +1,63 @@ +###144. Binary Tree Preorder Traversal + +题目: + + + + +难度: + +Medium + +Recursive + + +``` +class Solution(object): + def preorderTraversal(self, root): + """ + :type root: TreeNode + :rtype: List[int] + """ + if root == None: + return [] + res = [] + self.preorder(root,res) + return res + + + def preorder(self,root,res): + if root == None: + return + res.append(root.val) + self.preorder(root.left,res) + self.preorder(root.right,res) +``` + + +Iterative + + +``` +class Solution(object): + def preorderTraversal(self, root): + """ + :type root: TreeNode + :rtype: List[int] + """ + if root == None: + return [] + res = [] + + stack = [] + stack.append(root) + while stack: + node = stack.pop() + res.append(node.val) + if node.right: + stack.append(node.right) + if node.left: + stack.append(node.left) + return res + +``` \ No newline at end of file diff --git a/145._binary_tree_postorder_traversal.md b/145._binary_tree_postorder_traversal.md new file mode 100644 index 000000000..788cfc623 --- /dev/null +++ b/145._binary_tree_postorder_traversal.md @@ -0,0 +1,67 @@ +###145. Binary Tree Postorder Traversal + +题目: + + + + +难度: + +Hard + +wikipedia 助你幸福 + +递归版本 + +``` +postorder(node) + if (node = null) + return + postorder(node.left) + postorder(node.right) + visit(node) +``` + + +迭代版本 + +``` +iterativePostorder(node) + s ← empty stack + lastNodeVisited ← null + while (not s.isEmpty() or node ≠ null) + if (node ≠ null) + s.push(node) + node ← node.left + else + peekNode ← s.peek() + // if right child exists and traversing node + // from left child, then move right + if (peekNode.right ≠ null and lastNodeVisited ≠ peekNode.right) + node ← peekNode.right + else + visit(peekNode) + lastNodeVisited ← s.pop() +``` + + + +刷进度直接用递归AC + +``` +class Solution(object): + def postorderTraversal(self, root): + """ + :type root: TreeNode + :rtype: List[int] + """ + self.result = [] + self.postOrder(root) + return self.result + + def postOrder(self, root): + if root == None : return + self.postOrder(root.left) + self.postOrder(root.right) + self.result.append(root.val) +``` \ No newline at end of file diff --git a/147._insertion_sort_list.md b/147._insertion_sort_list.md new file mode 100644 index 000000000..b385d14f1 --- /dev/null +++ b/147._insertion_sort_list.md @@ -0,0 +1,59 @@ +###147. Insertion Sort List + +题目: + + + +难度: +Medium + +insertion sort 也是入门必备,一个元素本身被认为是sort的,一个简单的理解是打牌,然后进入第二个元素的时候,看它是比第一个元素大还是小,做排序,进入下一个元素的时候再看再移。 + +伪码 + +``` +for i ← 1 to length(A)-1 + j ← i + while j > 0 and A[j-1] > A[j] + swap A[j] and A[j-1] + j ← j - 1 + end while +end for +``` + +这个伪码对于list可能适用性没有那么强,则考虑,从第二个node开始,那么从开始开始看,找到这个node应该插入的位置,插入。 + + + +就是这样,就是会超时|||| + +``` +class Solution(object): + def insertionSortList(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + if head == None or head.next == None: + return head + + dummy = ListNode(-1) + dummy.next = head + + prev = head + cur = head.next + + while cur: + p = dummy + while p.next.val <= cur.val and p != prev: + p = p.next + if p != prev: + prev.next = cur.next + cur.next = p.next + p.next = cur + prev = cur + cur = cur.next + + return dummy.next +``` + diff --git a/148._sort_list.md b/148._sort_list.md new file mode 100644 index 000000000..7bb4e80b0 --- /dev/null +++ b/148._sort_list.md @@ -0,0 +1,138 @@ +###148. Sort List + +题目: + + + +难度: +Medium + +MergeSort + +merge sort是必备,divide & conquer的入门之物。 + +merge sort做两件事, sort 和 merge。 + +看一看标准伪码: + +``` +function mergesort(m) + var list left, right, result + if length(m) ≤ 1 + return m + else + var middle = length(m) / 2 + for each x in m up to middle - 1 + add x to left + for each x in m at and after middle + add x to right + left = mergesort(left) + right = mergesort(right) + if last(left) ≤ first(right) + append right to left + return left + result = merge(left, right) + return result + +function merge(left,right) + var list result + while length(left) > 0 and length(right) > 0 + if first(left) ≤ first(right) + append first(left) to result + left = rest(left) + else + append first(right) to result + right = rest(right) + if length(left) > 0 + append rest(left) to result + if length(right) > 0 + append rest(right) to result + return result +``` + +另一处获得伪码 + +``` +MergeSort(arr[], l, r) +If r > l + 1. Find the middle point to divide the array into two halves: + middle m = (l+r)/2 + 2. Call mergeSort for first half: + Call mergeSort(arr, l, m) + 3. Call mergeSort for second half: + Call mergeSort(arr, m+1, r) + 4. Merge the two halves sorted in step 2 and 3: + Call merge(arr, l, m, r) +``` + + +merge sort用在linked list上的好处是不用开辟空间,然后就处理node + +用旧的代码拼装出来的结果 + +然后需要注意的一点是拆分链表,所以有设置left node 的tail为None的操作. + +``` +class Solution(object): + def sortList(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + if head == None or head.next == None: + return head + + mid = self.findMid(head) + # split the + l1 = head + l2 = mid.next + mid.next = None + + l1 = self.sortList(l1) + l2 = self.sortList(l2) + + return self.mergeTwoLists(l1, l2) + + def mergeTwoLists(self, l1, l2): + """ + :type l1: ListNode + :type l2: ListNode + :rtype: ListNode + """ + if l1 == None: + return l2 + if l2 == None: + return l1 + + dummy = ListNode(-1) + cur = dummy + + while l1 and l2: + if l1.val < l2.val: + cur.next = l1 + l1 = l1.next + else: + cur.next = l2 + l2 = l2.next + cur = cur.next + + if l1: + cur.next = l1 + else: + cur.next = l2 + return dummy.next + + def findMid(self,head): + if head == None or head.next == None: + return head + + slow = head + fast = head + + while fast.next and fast.next.next: + slow = slow.next + fast = fast.next.next + + return slow + +``` \ No newline at end of file diff --git a/150._evaluate_reverse_polish_notation.md b/150._evaluate_reverse_polish_notation.md new file mode 100644 index 000000000..4e2b48aac --- /dev/null +++ b/150._evaluate_reverse_polish_notation.md @@ -0,0 +1,83 @@ +###150. Evaluate Reverse Polish Notation + + + +题目: + + + +难度: +Medium + + + +AC代码 + +``` +class Solution(object): + def evalRPN(self, tokens): + """ + :type tokens: List[str] + :rtype: int + """ + def cal(op, op1, op2): + if op == '*': + return op1 * op2 + elif op == '/': + return op1 / float(op2) + elif op == '+': + return op1 + op2 + else: + return op1 - op2 + + operandStack = [] + + for token in tokens: + if token in '+-*/': + op2 = operandStack.pop() + op1 = operandStack.pop() + res = cal(token, op1, op2) + operandStack.append(int(res)) + else: + operandStack.append(int(token)) + + return operandStack.pop() +``` + + +实际上这里有一个很奇(sha)怪(bi)的地方,看到了么,除法➗处,如果我不这么做,就是错的,这是python 2 和 python 3 的除法不一致导致的,所以最终我这样做了才能得到正确答案。 + +思路: + +已经给了我们wikipedia的链接了 + +- While there are input tokens left + - Read the next token from input. + - If the token is a value + - Push it onto the stack. + -Otherwise, the token is an operator (operator here includes both operators and functions). + - It is already known that the operator takes n arguments. + - If there are fewer than n values on the stack + - (Error) The user has not input sufficient values in the expression. + - Else, Pop the top n values from the stack. + - Evaluate the operator, with the values as arguments. + - Push the returned results, if any, back onto the stack. +- If there is only one value in the stack + - That value is the result of the calculation. +- Otherwise, there are more values in the stack + - (Error) The user input has too many values. + + + +再参考这里 + + + + +1. Create an empty stack called operandStack. +2. Convert the string to a list by using the string method split. +3. Scan the token list from left to right. + - If the token is an operand, convert it from a string to an integer and push the value onto the operandStack. + - If the token is an operator, *, /, +, or -, it will need two operands. Pop the operandStack twice. The first pop is the second operand and the second pop is the first operand. Perform the arithmetic operation. Push the result back on the operandStack. +4. When the input expression has been completely processed, the result is on the stack. Pop the operandStack and return the value. + diff --git a/151._reverse_words_in_a_string.md b/151._reverse_words_in_a_string.md new file mode 100644 index 000000000..fbf3493be --- /dev/null +++ b/151._reverse_words_in_a_string.md @@ -0,0 +1,25 @@ +###151. Reverse Words in a String + +题目: + + + +难度: +Medium + + +这对我Python来说,实在太简单,或许我应该看看别的语言的思路和算法 + +``` + +class Solution(object): + def reverseWords(self, s): + """ + :type s: str + :rtype: str + """ + sList = s.split() + sList.reverse() + return " ".join(sList) + +``` \ No newline at end of file diff --git a/152._maximum_product_subarray.md b/152._maximum_product_subarray.md new file mode 100644 index 000000000..7570876fa --- /dev/null +++ b/152._maximum_product_subarray.md @@ -0,0 +1,44 @@ +###152. Maximum Product Subarray + + + +题目: + + + +难度: +Medium + +思路: + +粗一看, 一股浓烈的DP气息飘来,想要套用53题的思路和方程。但是这个跟sum是不一样的,因为乘积可以正负正负的跳,这样的动归方程肯定是不对的 + +dp[i] = max(dp[i-1] * a[i],a[i]) + +举个例子 : [-2,3,-4] + + +用O(N^2)超时,厉害啊! + +想,可不可以记录+的和-的,记录两个dp数组,我哭了,真的是这样做的 + +最大值可能来源于最小值 -> 哲学般的句子 + +``` +class Solution(object): + def maxProduct(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + n = len(nums) + maxdp = [ nums[0] for i in range(n)] + mindp = [ nums[0] for i in range(n)] + + + for i in range(1,n): + maxdp[i] = max(mindp[i-1]*nums[i], maxdp[i-1]*nums[i],nums[i]) + mindp[i] = min(maxdp[i-1]*nums[i], mindp[i-1]*nums[i],nums[i]) + + return max(maxdp) +``` diff --git a/153._find_minimum_in_rotated_sorted_array.md b/153._find_minimum_in_rotated_sorted_array.md new file mode 100644 index 000000000..b46e1950d --- /dev/null +++ b/153._find_minimum_in_rotated_sorted_array.md @@ -0,0 +1,85 @@ +###153. Find Minimum in Rotated Sorted Array + + +题目: + + + +难度: + +Medium + + + +思路一: + +O(N) 就不说了 + +思路二: + +想的是分治,两段分别找出最小值,然后取最小值,但是依旧没有利用题目特性,并且也是O(N). + +> We can do it in O(logn) using Binary Search. If we take a closer look at above examples, we can easily figure out following pattern: The minimum element is the only element whose previous element is greater than it. If there is no such element, then there is no rotation and first element is the minimum element. + + +上面提到了一个特性,就是minimum element唯一一个它之前的element比它大的,如果不存在这个element,那么就没有rotation. + + + +思路其实是判断前半部分或者后半部分是否有序,然后来剔除,这里需要注意有比较多的边界case,因为如果就两个,那么会有特殊case 0 ,1 mid = 0,所以可以看一下,它这个处理,最后一个elif 是来比较mid 和 end + + + + + +``` +class Solution(object): + def findMin(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + def findRotatedMin(nums, start, end): + if end < start: + return nums[0] + if start == end: + return nums[start] + mid = (start + end) / 2 + if mid > start and nums[mid] < nums[mid-1]: + return nums[mid] + elif mid < end and nums[mid+1] < nums[mid]: + return nums[mid+1] + elif nums[mid] < nums[end]: + return findRotatedMin(nums,start, mid -1) + return findRotatedMin(nums, mid+1, end) + + + return findRotatedMin(nums,0,len(nums)-1) + +``` + +非递归 + +``` +class Solution(object): + def findMin(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + l,r = 0, len(nums) - 1 + while l < r: + mid = (l+r) / 2 + if mid > l and nums[mid] < nums[mid-1]: + return nums[mid] + elif mid < r and nums[mid] > nums[mid+1]: + return nums[mid+1] + elif nums[mid] < nums[r]: + r = mid -1 + else: + l = mid +1 + return nums[0] + +``` + + diff --git a/155._min_stack.md b/155._min_stack.md new file mode 100644 index 000000000..c663119df --- /dev/null +++ b/155._min_stack.md @@ -0,0 +1,169 @@ +###155. Min Stack + +题目: + + + +难度: + +Easy + +思路一: + +懒,直接用系统的数据结构 +用lst和系统的heapq,提升一下,用deque和heapq,这样也没太大提升 + + +``` +from heapq import * + +class MinStack(object): + + def __init__(self): + """ + initialize your data structure here. + """ + self.lst = [] + self.h = [] + + + def push(self, x): + """ + :type x: int + :rtype: void + """ + self.lst.append(x) + heappush(self.h,x) + + + def pop(self): + """ + :rtype: void + """ + val = self.lst.pop() + self.h.remove(val) + heapify(self.h) + + def top(self): + """ + :rtype: int + """ + return self.lst[-1] + + + def getMin(self): + """ + :rtype: int + """ + return self.h[0] + +``` + +思路二: + + +参考 + +用两个stack,其中一个始终来记录到当前位置的最小值 + + +``` +When we insert 18, both stacks change to following. +Actual Stack +18 <--- top +Auxiliary Stack +18 <---- top + +When 19 is inserted, both stacks change to following. +Actual Stack +19 <--- top +18 +Auxiliary Stack +18 <---- top +18 + +When 29 is inserted, both stacks change to following. +Actual Stack +29 <--- top +19 +18 +Auxiliary Stack +18 <---- top +18 +18 + +When 15 is inserted, both stacks change to following. +Actual Stack +15 <--- top +29 +19 +18 +Auxiliary Stack +15 <---- top +18 +18 +18 + +When 16 is inserted, both stacks change to following. +Actual Stack +16 <--- top +15 +29 +19 +18 +Auxiliary Stack +15 <---- top +15 +18 +18 +18 +``` + +这样无论是用deque还是本身的lst都有一些提升 + + +``` +from collections import deque +class MinStack(object): + + def __init__(self): + """ + initialize your data structure here. + """ + self.lst = deque() + self.aux = deque() + + + def push(self, x): + """ + :type x: int + :rtype: void + """ + self.lst.append(x) + if not self.aux or self.aux[-1] > x: + self.aux.append(x) + else: + self.aux.append(self.aux[-1]) + + + + def pop(self): + """ + :rtype: void + """ + self.lst.pop() + self.aux.pop() + + def top(self): + """ + :rtype: int + """ + return self.lst[-1] + + + def getMin(self): + """ + :rtype: int + """ + return self.aux[-1] +``` \ No newline at end of file diff --git a/160._intersection_of_two_linked_lists.md b/160._intersection_of_two_linked_lists.md new file mode 100644 index 000000000..689528c48 --- /dev/null +++ b/160._intersection_of_two_linked_lists.md @@ -0,0 +1,85 @@ +###160. Intersection of Two Linked Lists + +题目: + + + +难度: + +Easy + + +如果两个linkedlist有intersection的话,可以看到,其实如果一开始我们就走到b2的话,那么我们就可以两个pointer一个一个的对比,到哪一个地址一样,接下来就是intersection部分。 + +就一开始把长的那条list走掉多余部分。 + + + +``` +A: a1 → a2 + ↘ + c1 → c2 → c3 + ↗ +B: b1 → b2 → b3 +``` + + +然后这个题AC也花了一点时间,因为Python有recursion的limit限制,一开始用的一个求linkedlist len的报错 + +用这个会导致我无法AC,recursion limit达到上限 + +``` +def len(self, head): + if head == None: + return 0 + else: + return 1 + self.len(head.next) +``` + + +AC代码如下: + + + +``` +class Solution(object): + def getIntersectionNode(self, headA, headB): + """ + :type head1, head1: ListNode + :rtype: ListNode + """ + lenA = self.len(headA) + lenB = self.len(headB) + + if lenA == 0 or lenB == 0: + return None + + pA = headA + pB = headB + + if lenA > lenB: + for i in range(lenA - lenB): + pA = pA.next + else: + for i in range(lenB - lenA): + pB = pB.next + + while pA and pB: + if pA == pB: + return pA + else: + pA = pA.next + pB = pB.next + + return None + + + def len(self, head): + p = head + count = 0 + while p: + count += 1 + p = p.next + return count + +``` \ No newline at end of file diff --git a/162._find_peak_element.md b/162._find_peak_element.md new file mode 100644 index 000000000..6c7517530 --- /dev/null +++ b/162._find_peak_element.md @@ -0,0 +1,69 @@ +###162. Find Peak Element + +题目: + + + +难度: +Medium + + +思路: + + +最直观的是O(N)解法 + +``` +class Solution(object): + def findPeakElement(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + n = len(nums) + if n == 1: + return 0 + if nums[0] > nums[1]: + return 0 + elif nums[n-1] > nums[n-2]: + return n-1 + for i in range(1,n-1): + if nums[i] > nums[i-1] and nums[i] > nums[i+1]: + return i +``` + +O(lgN) 解法 + +这是一个经典题目 + +- a[n/2] < a[n/2-1] only look at the left side +- a[n/2] < a[n/2+1] only look at the right side +- else peak found + + +证明就是用反正法,或者看peak,因为这里已经限制了num[i] ≠ num[i+1],所以peak element 一定存在。然后a[n/2] < a[n/2-1],那么说明这里一定是下降的,说明之前一定有一个peak存在,否则我们可以用反证法证明. + +写到这里,我非常相信就是binary search能写对其实不容易。注意附加条件mid > l 和mid < r,这是针对mid+1和mid-1需要附加的,否则不容易对。 + + +AC代码 + +``` +class Solution(object): + def findPeakElement(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + l,r = 0, len(nums) - 1 + while l <= r: + if l == r : return l + mid = (l+r)/2 + if mid > l and nums[mid] < nums[mid-1]: + r = mid - 1 + elif mid < r and nums[mid] < nums[mid+1]: + l = mid + 1 + else: + return mid + +``` diff --git a/165._compare_version_numbers.md b/165._compare_version_numbers.md new file mode 100644 index 000000000..ab976ce99 --- /dev/null +++ b/165._compare_version_numbers.md @@ -0,0 +1,47 @@ +###165. Compare Version Numbers + +题目: + + + +难度: + +Easy + + +其实我并不觉得这个很简单 + +因为可能两个的位数不一样,首端或者尾端需要补0,同时我还考虑过可能有出现多个'.'的状况 + + + +``` +class Solution(object): + def compareVersion(self, version1, version2): + """ + :type version1: str + :type version2: str + :rtype: int + """ + v1 = version1.split('.') + v2 = version2.split('.') + v1 = [int(x) for x in v1] + v2 = [int(x) for x in v2] + + len1 = len(v1) + len2 = len(v2) + lenMax = max(len1, len2) + for x in range(lenMax): + v1Token = 0 + if x < len1: + v1Token = v1[x] + v2Token = 0 + if x < len2: + v2Token = v2[x] + if v1Token > v2Token: + return 1 + elif v1Token < v2Token: + return -1 + return 0 + +``` diff --git a/167._two_sum_ii_-_input_array_is_sorted.md b/167._two_sum_ii_-_input_array_is_sorted.md new file mode 100644 index 000000000..b0ded8c46 --- /dev/null +++ b/167._two_sum_ii_-_input_array_is_sorted.md @@ -0,0 +1,39 @@ +###167. Two Sum II - Input array is sorted + + + +题目: + + + +难度: +Medium + +思路: + + +作为2sum, 3sum, 4sum 的姐妹题,明显我一上来被误导了一下,非要想用binary search(|||因为不小心看了tag),但素其实人家就是用的两个指针,一个指头,一个指尾巴,如果大了就尾巴左移,小了就头部右移,没看出来哪里用了binary 的思想 + + +AC Code + +``` +class Solution(object): + def twoSum(self, numbers, target): + """ + :type numbers: List[int] + :type target: int + :rtype: List[int] + """ + left, right = 0, len(numbers) - 1 + while left < right: + temp = numbers[left] + numbers[right] + if temp == target: + return [left + 1, right + 1] + elif temp < target: + left += 1 + else: + right -= 1 + return [] + +``` \ No newline at end of file diff --git a/168._excel_sheet_column_title.md b/168._excel_sheet_column_title.md new file mode 100644 index 000000000..547f083ee --- /dev/null +++ b/168._excel_sheet_column_title.md @@ -0,0 +1,28 @@ +###168. Excel Sheet Column Title + +题目: + + + + +难度: + +Easy + +依旧26进制的反击,不过这个反击我做的没之前那个好,看了hint + +``` +class Solution(object): + def convertToTitle(self, n): + """ + :type n: int + :rtype: str + """ + ans = '' + while n : + ans = chr(ord('A') + (n - 1) % 26) + ans + n = (n - 1) // 26 + return ans + +``` + diff --git a/169._majority_element.md b/169._majority_element.md new file mode 100644 index 000000000..6701ba759 --- /dev/null +++ b/169._majority_element.md @@ -0,0 +1,74 @@ +###169. Majority Element + + + +题目: + + + +难度: +Easy + +思路: + +其实这个我有点有想到过 + + +给定一个长度为 n的数组,其中有一个数,它出现的次数大于⎣n/2⎦,称为主要元素,找到它. + +这个很像之前做过的一道CLRS的题目,想法可以用divide & conquer. + + +- 如果数组长度 <= 2,那么return第一个即解决问题 +- 如果长度 > 2,那么可以两两配对,对于配对一样的结果,删去 + - 如果最后余一个,这一个留下 + - shuffle之后再尝试两两配对,直到最后结果不再改变 + + 这样肯定是能解决问题的,因为为了满足次数大于⎣n/2⎦这个条件。 + + + + + + +``` + + 1 2 1 2 1 2 1 2 + 2 3 2 3 2 3 2 3 + 2 4 2 2 2 2 3 + 2 4 2 3 3 + 3 2 + 2 2 + 2 2 +``` + +思路容易implement非常难啊. + + + +这个问题有一个很出名的算法 + + +Boyer-Moore众数(majority number) 问题 + +在数组中找到两个不相同的元素并删除它们,不断重复此过程,直到数组中元素都相同,那么剩下的元素就是主要元素。 + + +这个算法的妙处在于不直接删除数组中的元素,而是利用一个计数变量. + +伪码 + + def majorityElement(self, nums): + count,major=0,0 + for n in nums: + if count==0: + major=n + if major==n: + count+=1 + else: + count-=1 + return major + + + + \ No newline at end of file diff --git a/171._excel_sheet_column_number.md b/171._excel_sheet_column_number.md new file mode 100644 index 000000000..4521f737c --- /dev/null +++ b/171._excel_sheet_column_number.md @@ -0,0 +1,34 @@ +###171. Excel Sheet Column Number + +题目: + + + + +难度: + +Easy + + +26进制的反击 + +``` +class Solution(object): + def titleToNumber(self, s): + """ + :type s: str + :rtype: int + """ + maps = {} + for i in range(65,91): + maps[chr(i)] = i - 64 + + lst = list(s) + lst.reverse() + num = 0 + for idx,item in enumerate(lst): + num += maps[item] * (26 ** idx) + return num + +``` + diff --git a/173._binary_search_tree_iterator.md b/173._binary_search_tree_iterator.md new file mode 100644 index 000000000..f41778d71 --- /dev/null +++ b/173._binary_search_tree_iterator.md @@ -0,0 +1,95 @@ +###173. Binary Search Tree Iterator + +题目: + + + +难度: +Medium + + +同样没有听题目要求,一开始就取巧,用InOrder,这样得到BSF有序排列,然后使用 + + +``` + +class BSTIterator(object): + def __init__(self, root): + """ + :type root: TreeNode + """ + self.root = root + self.lst = [] + self.inOrder(root) + self.lst.reverse() + + + + def hasNext(self): + """ + :rtype: bool + """ + return self.lst != [] + + + def next(self): + """ + :rtype: int + """ + return self.lst.pop() + + def inOrder(self, root): + if root == None: + return + self.inOrder(root.left) + self.lst.append(root.val) + self.inOrder(root.right) + +``` + +谷歌了一下,得到如何满足题目要求的hint,从root开始,往左走,把左孩子压入stack,直到左边为空。 + +然后开始取node,如果node有右孩子,则同样要把node的左孩子入stack,画了一个图,可行。 + + + + + +``` + +class BSTIterator(object): + def __init__(self, root): + """ + :type root: TreeNode + """ + self.root = root + self.stack = [] + self.pushLeft(root) + + + def hasNext(self): + """ + :rtype: bool + """ + return self.stack != [] + + + def next(self): + """ + :rtype: int + """ + while self.hasNext(): + cur = self.stack.pop() + if cur.right: + self.pushLeft(cur.right) + return cur.val + + def pushLeft(self, node): + """ + :type node: TreeNode + """ + cur = node + while cur: + self.stack.append(cur) + cur = cur.left +``` \ No newline at end of file diff --git a/189._rotate_array.md b/189._rotate_array.md new file mode 100644 index 000000000..080a1e581 --- /dev/null +++ b/189._rotate_array.md @@ -0,0 +1,23 @@ +###189. Rotate Array + +题目: + + + +难度 : Easy + + +作弊神奇python大法 + +``` +class Solution(object): + def rotate(self, nums, k): + """ + :type nums: List[int] + :type k: int + :rtype: void Do not return anything, modify nums in-place instead. + """ + n = len(nums) + nums[:] = nums[n-k:] + nums[:n-k] + œ +``` diff --git a/191._number_of_1_bits.md b/191._number_of_1_bits.md new file mode 100644 index 000000000..ac09a2c84 --- /dev/null +++ b/191._number_of_1_bits.md @@ -0,0 +1,70 @@ +###191. Number of 1 Bits + +题目: + + + + +难度: + +Easy + + +转成二进制,数1的个数 + +``` +class Solution(object): + def hammingWeight(self, n): + """ + :type n: int + :rtype: int + """ + count = 0 + while n > 0: + count += n % 2 + n = n//2 + return count +``` + + + +有wikipedia的题目 [Hamming Weight]((https://zh.wikipedia.org/wiki/汉明重量)) + + + +用wikipedia的解法: + +原理是在于每次使用x & x-1 总会把低位的数字给置0 + +比如 3 = 011 2 = 010 3 & 2 = 010 cnt =1 + +​ 2 = 010 1 = 001 2 & 1 = 000 cnt = 2 + +比如 9 = 1001 8 = 1000 9&8 = 1000 cnt =1 + +​ 8 = 1000 7 = 0111 8&7 = 0000 cnt = 2 + +> 减1操作将最右边的符号从0变到1,从1变到0,与操作将会移除最右端的1。如果最初X有N个1,那么经过N次这样的迭代运算,X将减到0。下面的算法就是根据这个原理实现的。 + +所以关键点是每次都会把最右边的1变成0. + + + +AC代码 + + + +``` +class Solution(object): + def hammingWeight(self, n): + """ + :type n: int + :rtype: int + """ + cnt = 0 + while n != 0: + n &= n - 1 + cnt += 1 + return cnt +``` + diff --git a/198._house_robber.md b/198._house_robber.md new file mode 100644 index 000000000..74fc67d1e --- /dev/null +++ b/198._house_robber.md @@ -0,0 +1,41 @@ + +###198. House Robber + + +题目: + + + +难度: + +Easy + + +状态转移方程: + +dp[i] = max(dp[i-1], dp[i-2] + nums[i]) + + +AC 代码 + +``` +class Solution(object): + def rob(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + n = len(nums) + if n == 0 : return 0 + elif n == 1 : return nums[0] + elif n == 2 : return max(nums[0], nums[1]) + else: + dp = [0 for i in range(n)] + dp[0] = nums[0] + dp[1] = max(nums[0],nums[1]) + for i in range(2,n): + dp[i] = max( dp[i-1], dp[i-2] + nums[i]) + return dp[n-1] +``` + + diff --git a/199._binary_tree_right_side_view.md b/199._binary_tree_right_side_view.md new file mode 100644 index 000000000..6f7b3b6d6 --- /dev/null +++ b/199._binary_tree_right_side_view.md @@ -0,0 +1,37 @@ +###199. Binary Tree Right Side View + +题目: + + + + +难度: + +Medium + + +还是在玩第102题,level order traversal. + +``` +class Solution(object): + def rightSideView(self, root): + """ + :type root: TreeNode + :rtype: List[int] + """ + if root == None: return [] + + res = [] + curLevel = [root] + while curLevel: + nextLevel = [] + tmpRes = [] + for node in curLevel: + tmpRes.append(node.val) + if node.left: nextLevel.append(node.left) + if node.right: nextLevel.append(node.right) + res.append(tmpRes[-1]) + curLevel = nextLevel + return res +``` + diff --git a/200._number_of_islands.md b/200._number_of_islands.md new file mode 100644 index 000000000..eef73b54e --- /dev/null +++ b/200._number_of_islands.md @@ -0,0 +1,113 @@ +###200. Number of Islands + + +题目: + + + +难度: +Medium + + +思路: + + +一开始: +numberOfIslands = 0 +islandArea = [] + + +然后遇到(x,y) = 1的状况,更新numberOfIslands,并且把(x,y)放入islandArea,然后用BFS或者DFS查找岛屿范围,全部更如islandArea,做loop + +以上就是基本思路 + + +然后超时|||, 小改之后AC + + +``` + +class Solution(object): + def numIslands(self, grid): + """ + :type grid: List[List[str]] + :rtype: int + """ + self.grid = grid[:] + + self.row = len(self.grid) + self.col = len(self.grid[0]) if self.row else 0 + self.visited = [[0 for i in range(self.col)]for j in range(self.row)] + + + self.numberOfIslands = 0 + + for i in range(self.row): + for j in range(self.col): + if self.grid[i][j] == '1' and self.visited[i][j] == 0: + self.findArea(i,j) + self.numberOfIslands += 1 + + return self.numberOfIslands + + def findArea(self, i, j): + s = [] + s.append((i,j)) + while s: + (x,y) = s.pop() + self.visited[x][y] = 1 + if self.legal(x-1,y): + s.append((x-1,y)) + if self.legal(x+1,y): + s.append((x+1,y)) + if self.legal(x,y-1): + s.append((x,y-1)) + if self.legal(x,y+1): + s.append((x,y+1)) + + def legal(self,x,y): + return x>= 0 and x < self.row and y >= 0 and y < self.col and self.grid[x][y] == '1' and self.visited[x][y] == 0 +a = Solution() +print a.numIslands(["11000","11000","00100","00011"]) + +``` + + +看了别人的代码,写的真美 ╮(╯_╰)╭ 啊 + +``` +class Solution(object): + def numIslands(self, grid): + """ + :type grid: List[List[str]] + :rtype: int + """ + def dfs(gird, used, row, col, x, y): + if gird[x][y] == '0' or used[x][y]: + return + used[x][y] = True + + if x!= 0: + dfs(grid, used, row,col, x-1,y) + if x!= row -1 : + dfs(grid, used, row,col, x+1, y) + if y!= 0: + dfs(grid, used, row,col, x, y-1) + if y!= col - 1: + dfs(grid, used, row,col, x, y+1) + + + row = len(grid) + col = len(grid[0]) if row else 0 + + used = [[0 for i in xrange(col)] for i in xrange(row)] + + count = 0 + for i in xrange(row): + for j in xrange(col): + if grid[i][j] == '1' and not used[i][j]: + dfs(grid,used,row,col,i,j) + count += 1 + return count +``` + diff --git a/203._remove_linked_list_elements.md b/203._remove_linked_list_elements.md new file mode 100644 index 000000000..15aa10efa --- /dev/null +++ b/203._remove_linked_list_elements.md @@ -0,0 +1,38 @@ +###203. Remove Linked List Elements + +题目: + + + +难度: + +Easy + + +AC代码如下: + + + +``` +class Solution(object): + def removeElements(self, head, val): + """ + :type head: ListNode + :type val: int + :rtype: ListNode + """ + dummy = ListNode(-1) + dummy.next = head + + cur = dummy + + while cur.next: + if cur.next.val == val: + cur.next = cur.next.next + else: + cur = cur.next + + return dummy.next + + +``` \ No newline at end of file diff --git a/204._count_primes.md b/204._count_primes.md new file mode 100644 index 000000000..b69290b70 --- /dev/null +++ b/204._count_primes.md @@ -0,0 +1,57 @@ +###204. Count Primes + + +题目: + + + +难度: + +Easy + + + +这个题的hint是已经把算法喂到嘴边了 + + + + +``` +Input: an integer n > 1 + +Let A be an array of Boolean values, indexed by integers 2 to n, +initially all set to true. + +for i = 2, 3, 4, ..., not exceeding √n: + if A[i] is true: + for j = i^2, i^2+i, i^2+2*i, i^2+3i, ..., not exceeding n : + A[j] := false + +Output: all i such that A[i] is true. +``` + + + +python算法 + + +``` +class Solution(object): + def countPrimes(self, n): + """ + :type n: int + :rtype: int + """ + isPrime = [1 for i in range(n)] + + i = 2 + while i * i < n: + if isPrime[i]: + j = i * i + while j < n : + isPrime[j] = 0 + j += i + i += 1 + + return sum(isPrime[2:]) +``` \ No newline at end of file diff --git a/205._isomorphic_strings.md b/205._isomorphic_strings.md new file mode 100644 index 000000000..47b0ab772 --- /dev/null +++ b/205._isomorphic_strings.md @@ -0,0 +1,39 @@ +###205. Isomorphic Strings + +题目: + + + +难度 : Easy + + +AC之法,用dictionary,因为限制,所以确保s 和 t 是isomorphic 同时 t 和 s 是 + + +``` +class Solution(object): + def isIsomorphic(self, s, t): + """ + :type s: str + :type t: str + :rtype: bool + """ + return self.iso(s,t) and self.iso(t,s) + + def iso(self,s, t): + """ + :type s: str + :type t: str + :rtype: bool + """ + mapx = {} + for i in range(len(s)): + if s[i] not in mapx: + mapx[s[i]] = t[i] + elif s[i] in mapx: + if t[i] != mapx[s[i]]: + return False + return True + + +``` diff --git a/206._reverse_linked_list.md b/206._reverse_linked_list.md new file mode 100644 index 000000000..b8fb116ae --- /dev/null +++ b/206._reverse_linked_list.md @@ -0,0 +1,52 @@ +###206. Reverse Linked List + +题目: + + + +难度: +Easy + +用三个指针,分别指向prev,cur 和 nxt,然后loop一圈还算比较简单. + + + + +``` +class Solution(object): + def reverseList(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + prev = None + cur = head + while(cur): + nxt = cur.next + cur.next = prev + prev = cur + cur = nxt + return prev +``` + + +递归版本,可以再消化一下. + + +``` +class Solution(object): + def reverseList(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + return self.doReverse(head, None) + + + def doReverse(self, head, newHead): + if head == None: + return newHead + nxt = head.next + head.next = newHead + return self.doReverse(nxt, head) +``` \ No newline at end of file diff --git a/207._course_schedule.md b/207._course_schedule.md new file mode 100644 index 000000000..6e990f09d --- /dev/null +++ b/207._course_schedule.md @@ -0,0 +1,93 @@ +###207. Course Schedule + + + +题目: + + + +难度: +Medium + +思路: + +就是考topological sort,用来判断directed graph是否有cycle + +DFS 和 BFS都可以用来拓扑排序。 + +最简单的想法是每次取出indegree是0的node,然后把它和与之相关的edge都删了。一开始觉得这样的时间复杂度会很高,然后看到了这样写,参照: + + + +很聪明的写法 + +这里做了转成set以及添加removeList这样的操作是因为边list边做iterator这样的操作很危险 + + + + +``` +class Solution(object): + def canFinish(self, numCourses, prerequisites): + """ + :type numCourses: int + :type prerequisites: List[List[int]] + :rtype: bool + """ + degrees = [ 0 for i in range(numCourses)] + childs = [[] for i in range(numCourses)] + for front, tail in prerequisites: + degrees[front] += 1 + childs[tail].append(front) + + courses = set(range(numCourses)) + flag = True + + while flag and len(courses): + flag = False + removeList = [] + for x in courses: + if degrees[x] == 0: + for child in childs[x]: + degrees[child] -= 1 + removeList.append(x) + flag = True + for x in removeList: + courses.remove(x) + return len(courses) == 0 + +``` + +因为CLRS里面明确提到涂色法来处理DFS + +搞了半天,写了一个涂色法,在超时的边缘。之所以超时边缘是因为每次都要去prerequisites里看,没有删减,不高效. + +``` +class Solution(object): + def canFinish(self, numCourses, prerequisites): + """ + :type numCourses: int + :type prerequisites: List[List[int]] + :rtype: bool + """ + def dfs(i, colors, prerequisites): + colors[i] = 'G' + #print i, colors + for front, tail in prerequisites: + if tail == i: + if colors[front] == 'G': + return False + elif colors[front] == 'B': + continue + elif dfs(front, colors, prerequisites) == False: + return False + colors[i] = 'B' + return True + + colors = ['W' for i in range(numCourses)] + for i in range(numCourses): + if colors[i] == 'W': + if dfs(i, colors, prerequisites) == False: + return False + return True +``` diff --git a/208._implement_trie_(prefix_tree).md b/208._implement_trie_(prefix_tree).md new file mode 100644 index 000000000..39707fe83 --- /dev/null +++ b/208._implement_trie_(prefix_tree).md @@ -0,0 +1,87 @@ +###208. Implement Trie (Prefix Tree) + +题目: + + + + +难度: + +Medium + +这个Python实现也太精美了吧,谷歌复写之 + +然后还unlock了一个solution,to read + +Trie整个都需要 to read,精美,可爱😊 + + + + +``` +class TrieNode(object): + def __init__(self): + """ + Initialize your data structure here. + """ + self.childs = dict() + self.isWord = False + + + +class Trie(object): + + def __init__(self): + self.root = TrieNode() + + def insert(self, word): + """ + Inserts a word into the trie. + :type word: str + :rtype: void + """ + node = self.root + for letter in word: + child = node.childs.get(letter) + if child is None: + child = TrieNode() + node.childs[letter] = child + node = child + node.isWord = True + + def search(self, word): + """ + Returns if the word is in the trie. + :type word: str + :rtype: bool + """ + node = self.root + for letter in word: + node = node.childs.get(letter) + if node is None: + return False + return node.isWord + + + def startsWith(self, prefix): + """ + Returns if there is any word in the trie + that starts with the given prefix. + :type prefix: str + :rtype: bool + """ + node = self.root + for letter in prefix: + node = node.childs.get(letter) + if node is None: + return False + return True + + +# Your Trie object will be instantiated and called as such: +# trie = Trie() +# trie.insert("somestring") +# trie.search("key") + +``` + diff --git a/210._course_schedule_ii.md b/210._course_schedule_ii.md new file mode 100644 index 000000000..852b1163e --- /dev/null +++ b/210._course_schedule_ii.md @@ -0,0 +1,55 @@ +###210. Course Schedule II + + + +题目: + + + +难度: +Medium + +思路: + +在207的基础上加了order,进击 + + +``` +class Solution(object): + def findOrder(self, numCourses, prerequisites): + """ + :type numCourses: int + :type prerequisites: List[List[int]] + :rtype: List[int] + """ + degrees = [ 0 for i in range(numCourses)] + childs = [[] for i in range(numCourses)] + for front, tail in prerequisites: + degrees[front] += 1 + childs[tail].append(front) + + + courses = set(range(numCourses)) + flag = True + order = [] + + while flag and len(courses): + flag = False + removeList = [] + for x in courses: + if degrees[x] == 0: + print x + for child in childs[x]: + degrees[child] -= 1 + removeList.append(x) + order.append(x) + flag = True + for x in removeList: + courses.remove(x) + + if len(courses) == 0: + return order + else: + return [] + +``` diff --git a/211. Add and Search Word - Data structure design.md b/211. Add and Search Word - Data structure design.md new file mode 100644 index 000000000..7dd0ea278 --- /dev/null +++ b/211. Add and Search Word - Data structure design.md @@ -0,0 +1,77 @@ +### 211. Add and Search Word - Data structure design + +题目: + + + +难度: Medium + +思路: + +trie也是树,那么dfs/bfs同样适用。 + +实际上是照抄208trie的题目再加上dfs + + + +AC代码 + + + +``` +class TrieNode(object): + """docstring for TrieNode""" + def __init__(self): + self.childs = dict() + self.isWord = False + +class WordDictionary(object): + def __init__(self): + """ + initialize your data structure here. + """ + self.root = TrieNode() + + + def addWord(self, word): + """ + Adds a word into the data structure. + :type word: str + :rtype: void + """ + node = self.root + for letter in word: + child = node.childs.get(letter) + if child is None: + child = TrieNode() + node.childs[letter] = child + node = child + node.isWord = True + + + def search(self, word): + """ + Returns if the word is in the data structure. A word could + contain the dot character '.' to represent any one letter. + :type word: str + :rtype: bool + """ + def dfs(root, word): + if len(word) == 0: + return root.isWord + elif word[0] == '.': + for node in root.childs: + if dfs(root.childs[node], word[1:]): + return True + return False + else: + node = root.childs.get(word[0]) + if node is None: + return False + return dfs(node, word[1:]) + + return dfs(self.root, word) +``` + + + diff --git a/213._house_robber_ii.md b/213._house_robber_ii.md new file mode 100644 index 000000000..9caec3dfd --- /dev/null +++ b/213._house_robber_ii.md @@ -0,0 +1,61 @@ +###213. House Robber II + + +题目: + + + +难度: +Medium + +思路: + +跟house robber 1 类似,但是加了一些限制,抢到第 n-1 家最大两种可能,抢第 n-1 家和不抢第 n-1 家。 + + 0, 1, 2, 3, 4, 5, 6 ... n-1 + + +所以状态转移方程写成二维的更好来求,从第i家抢到第j家的状态转移方程 + + + nums[j] ,j = i + dp[i][j] = max(nums[i], nums[i+1]) , j = i +1 + max(dp[i][j-2] + nums[j], dp[i][j-1]), j > i+1 + + + +Show me the code + + +AC代码 + +``` +class Solution(object): + def rob(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + n = len(nums) + if n == 0 : return 0 + if n == 1 : return nums[0] + if n == 2 : return max(nums[0],nums[1]) + + dp = [[0 for i in range(n)] for j in range(n)] + + for i in range(n): + for j in range(i,n): + if j == i: + dp[i][j] = nums[j] + elif j == i + 1: + dp[i][j] = max(nums[i],nums[i+1]) + else: + dp[i][j] = max(dp[i][j-2] + nums[j], dp[i][j-1]) + + # print dp + # rob without n-1, or rob with n-1 + val = max(dp[0][n-2], dp[1][n-3] + nums[n-1]) + + return val + +``` \ No newline at end of file diff --git a/216._combination_sum_iii.md b/216._combination_sum_iii.md new file mode 100644 index 000000000..9e1b6371e --- /dev/null +++ b/216._combination_sum_iii.md @@ -0,0 +1,40 @@ +###216. Combination Sum III + +题目: + + + + +难度: + +Medium + +继续Combination Sum 系列 + + +``` +class Solution(object): + def combinationSum3(self, k, n): + """ + :type k: int + :type n: int + :rtype: List[List[int]] + """ + candidates = [1,2,3,4,5,6,7,8,9] + self.res = [] + self.combSum(candidates, n, [], k) + return self.res + + + def combSum(self,candidates, target, valueList, k): + if target == 0 and k == 0: + self.res.append(valueList) + length = len(candidates) + if length == 0 or k < 0 : + return + for i in range(length): + if candidates[i] > target: + return + self.combSum(candidates[i+1:], target - candidates[i], valueList + [candidates[i]], k-1) + +``` \ No newline at end of file diff --git a/217._contains_duplicate.md b/217._contains_duplicate.md new file mode 100644 index 000000000..f6c2a2aef --- /dev/null +++ b/217._contains_duplicate.md @@ -0,0 +1,62 @@ +###217. Contains Duplicate + +题目: + + + +难度: + +Easy + + +我直接sort,然后比较相邻的元素,这样O(n),也是笨办法,居然unlocked a solution,所以来读读解答. + +三个办法: + +- linear search O(n^2) +- sort O(n) +- hashtable + + +我用的sort + +``` +class Solution(object): + def containsDuplicate(self, nums): + """ + :type nums: List[int] + :rtype: bool + """ + nums.sort() + for i in range(len(nums)-1): + if nums[i] == nums[i+1]: + return True + return False +``` + + + + +看给的Java解法 + + +``` +public boolean containsDuplicate(int[] nums) { + Set set = new HashSet<>(nums.length); + for (int x: nums) { + if (set.contains(x)) return true; + set.add(x); + } + return false; +} +``` + +还有一个取巧的Python解法,我也看到了 + +``` +class Solution(object): + def containsDuplicate(self, nums): + if len(nums) > len(set(nums)): + return True + return False +``` \ No newline at end of file diff --git a/219._contains_duplicate_ii.md b/219._contains_duplicate_ii.md new file mode 100644 index 000000000..8c5868c6f --- /dev/null +++ b/219._contains_duplicate_ii.md @@ -0,0 +1,35 @@ +###219. Contains Duplicate II + +题目: + + + +难度: + +Easy + + +经过了Contains Duplicate的考验,用hash table(也叫dictionary)来存,这个元素还没出现过,就放hash table,如果出现了,计算相邻距离,小于等于k则return true,否则更新hash table中元素的位置, + + +我用的sort + +``` +class Solution(object): + def containsNearbyDuplicate(self, nums, k): + """ + :type nums: List[int] + :type k: int + :rtype: bool + """ + if len(nums) < 2 : return False + lookup = {} + for i in range(len(nums)): + if nums[i] not in lookup: + lookup[nums[i]] = i + else: + if i - lookup[nums[i]] <= k : + return True + lookup[nums[i]] = i + return False +``` \ No newline at end of file diff --git a/221._maximal_square.md b/221._maximal_square.md new file mode 100644 index 000000000..3dd7b9a8c --- /dev/null +++ b/221._maximal_square.md @@ -0,0 +1,78 @@ +###221. Maximal Square + + +题目: + + + +难度: +Medium + +tag: DP + + +递推公式,一开始想的很简单: + +dp[i][j] = dp[i-1][j-1] + 1 #如果dp[i-1][j-1]为1,dp[i-1][j]为1,dp[i][j-1]为1 + +很明显的错误,一旦遇到更大的方块就会有问题 + +然后看了hint,其实递推方程式是很有技巧的,左上角,左边,上面,相邻的三个部分最小的+1,当然,前提也是要这里dp[i][j] 为1,然后我们再会去看其他的部分。 + +看个例子 + +``` +原本的matrix DP + +1 0 1 0 0 1 0 1 0 0 +1 0 1 1 1 → 1 0 1 1 1 +1 1 1 1 1 1 1 1 2 2 +1 0 0 1 0 1 0 0 1 0 + +``` + +是非常make sense的,因为最小的必定包括了周边的1,然后再加1,否则如果是0的话那么就为0. + +而naïve的错误的递推公式是因为一个square考虑的部分是k * k的部分, k * k 部分都必定为1. + +而正确的递推公式 + + + dp[i][j] = min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1]) + 1 + +则完美的考虑了这一情况 + + +``` +class Solution(object): + def maximalSquare(self, matrix): + """ + :type matrix: List[List[str]] + :rtype: int + """ + dp = [] + for i in matrix: + tmp = [] + for j in i: + tmp.append(int(j)) + dp.append(tmp) + + row = len(dp) + col = len(dp[0]) if row else 0 + + + for i in range(1,row): + for j in range(1,col): + if dp[i][j] == 1: + dp[i][j] = min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1]) + 1 + + + maxv = 0 + for i in range(row): + for j in range(col): + if dp[i][j] > maxv: + maxv = dp[i][j] + return maxv * maxv +``` + + diff --git a/222._count_complete_tree_nodes.md b/222._count_complete_tree_nodes.md new file mode 100644 index 000000000..e1b6bede6 --- /dev/null +++ b/222._count_complete_tree_nodes.md @@ -0,0 +1,67 @@ +###222. Count Complete Tree Nodes + +题目: + + + +难度: +Medium + + +思路: + + +思路一: 超时,跟一般的树一样,递归的来数nodes数 + + + +``` +class Solution(object): + def countNodes(self, root): + """ + :type root: TreeNode + :rtype: int + """ + if root == None: + return 0 + if root.left == None and root.right == None: + return 1 + return 1 + self.countNodes(root.left) + self.countNodes(root.right) +``` + + +思路二:既然说了是 complete binary tree,那么必然有特性可用,complete binary tree的特性是除了最后一层,之前的就是perfect tree. + + +所以寻找左子树的最左边的高度和右子树的最右边的node高度,如果相同就是perfect tree,高度2^h - 1, 否则递归的来看左子树和右子树 + + +``` + +class Solution(object): + def countNodes(self, root): + """ + :type root: TreeNode + :rtype: int + """ + if root == None: + return 0 + + p, q = root,root + + leftHeight = 0 + rightHeight = 0 + + while p: + p = p.left + leftHeight += 1 + + while q: + q = q.right + rightHeight += 1 + + if leftHeight == rightHeight: + return (int)(math.pow(2,leftHeight) - 1) + else: + return 1 + self.countNodes(root.left) + self.countNodes(root.right) +``` \ No newline at end of file diff --git a/223._rectangle_area.md b/223._rectangle_area.md new file mode 100644 index 000000000..3edba1bc3 --- /dev/null +++ b/223._rectangle_area.md @@ -0,0 +1,50 @@ +###223. Rectangle Area + +题目: + + + +难度 : Easy + + +这道题是我瞎了狗眼,🐶,之前看错了,以为要求相交的部分,结果是求cover的部分,所以写的长|||||| + + +``` +class Solution(object): + def computeArea(self, A, B, C, D, E, F, G, H): + """ + :type A: int + :type B: int + :type C: int + :type D: int + :type E: int + :type F: int + :type G: int + :type H: int + :rtype: int + """ + return self.area(C - A, D - B) + self.area(H - F, G - E ) - self.area(self.interSect(A,C,E,G), self.interSect(B,D,F,H)) + + def area(self, w, h): + if w * h < 0: + return - w * h + return w * h + + + def interSect(self, A, C, E, G): + if E > C: + return 0 + elif G < A: + return 0 + elif E >= A and G <= C: + return G - E + elif A >= E and C <= G: + return C - A + elif G <= C and G >= A and E <= A: + return G - A + else: + return C - E + + +``` diff --git a/224. Basic Calculator .md b/224. Basic Calculator .md new file mode 100644 index 000000000..53683dc7e --- /dev/null +++ b/224. Basic Calculator .md @@ -0,0 +1,108 @@ +### 224. Basic Calculator + + + +题目: + + +难度: +Medium + +思路: + +基本跟227一样,只是这里加了括号 + +瞄了一眼,基本上infix(中缀表达式)都是表达成postfix(后缀表达式)再来求值的。 +比如 A + B * C 写成 A B C * + + +| Infix Expression | Prefix Expression | Postfix Expression | +| ---------------- | ----------------- | ------------------ | +| A + B | + A B | A B + | +| A + B * C | + A * B C | A B C * + | + + + +infix 中缀转postfix 后缀还有专门的算法: + + + +1. Create an empty stack called opstack for keeping operators. Create an empty list for output. + +2. Convert the input infix string to a list by using the string method split. + +3. Scan the token list from left to right. + +4. - If the token is an operand, append it to the end of the output list. + - If the token is a left parenthesis, push it on the opstack. + - If the token is a right parenthesis, pop the opstack until the corresponding left parenthesis is removed. Append each operator to the end of the output list. + - If the token is an operator, *, /, +, or -, push it on the opstack. However, first remove any operators already on the opstack that have higher or equal precedence and append them to the output list. + +5. When the input expression has been completely processed, check the opstack. Any operators still on the stack can be removed and appended to the end of the output list. + + + +可以看到中缀转后缀一个重要的点是: 当我们把operator +-*/ 放到opstack上时候,我们需要考虑/看是否有之前的operator有更高或者相等的precedence,这个时候我们需要优先(计算)把它放到output list. + + + +参考 + + + + + +AC代码 + +``` +class Solution(object): + def calculate(self, s): + """ + :type s: str + :rtype: int + """ + def precedence(op): + if op == '*' or op == '/': + return 2 + else: + return 1 + + def cal(op, op1, op2): + if op == '*': + return op1 * op2 + elif op == '/': + return op1 / float(op2) + elif op == '+': + return op1 + op2 + else: + return op1 - op2 + + + opstack = [] + operands = [] + + # remove empty space and put operands and + idx = 0 + for i in range(idx, len(s)): + if s[i] in '+-*/': + operands.append(s[idx:i]) + while len(opstack) > 0 and precedence(s[i]) <= precedence(opstack[-1]) and len(operands) >= 2: + op = opstack.pop() + op2 = int(operands.pop()) + op1 = int(operands.pop()) + res = cal(op, op1, op2) + operands.append(res) + opstack.append(s[i]) + idx = i + 1 + operands.append(s[idx:]) + + while opstack: + op = opstack.pop() + op2 = int(operands.pop()) + op1 = int(operands.pop()) + res = cal(op, op1, op2) + operands.append(res) + + return int(operands[0]) + +``` + diff --git a/225._implement_stack_using_queues.md b/225._implement_stack_using_queues.md new file mode 100644 index 000000000..10a1ac200 --- /dev/null +++ b/225._implement_stack_using_queues.md @@ -0,0 +1,53 @@ +###225. Implement Stack using Queues + +题目: + + + + +难度: + +Easy + + +又到了作弊神预言Python的强项 + + +``` +class Stack(object): + def __init__(self): + """ + initialize your data structure here. + """ + self.lst = [] + + + def push(self, x): + """ + :type x: int + :rtype: nothing + """ + self.lst.append(x) + + + def pop(self): + """ + :rtype: nothing + """ + self.lst.remove(self.lst[-1]) + + + def top(self): + """ + :rtype: int + """ + return self.lst[-1] + + def empty(self): + """ + :rtype: bool + """ + return self.lst == [] + +``` + diff --git a/226._invert_binary_tree.md b/226._invert_binary_tree.md new file mode 100644 index 000000000..b66918814 --- /dev/null +++ b/226._invert_binary_tree.md @@ -0,0 +1,33 @@ +###226. Invert Binary Tree + +题目: + + + +难度: + +Easy + +然后查了一下,有更简单的写法 + + +``` + +class Solution(object): + def invertTree(self, root): + """ + :type root: TreeNode + :rtype: TreeNode + """ + if root == None: return None + elif root.left == None and root.right == None: return root + else: + leftNode = root.left + rightNode = root.right + root.right = leftNode + root.left = rightNode + self.invertTree(root.left) + self.invertTree(root.right) + return root +``` + diff --git a/227._basic_calculator_ii.md b/227._basic_calculator_ii.md new file mode 100644 index 000000000..ac5ea4eeb --- /dev/null +++ b/227._basic_calculator_ii.md @@ -0,0 +1,108 @@ +###227. Basic Calculator II + + + +题目: + + + +难度: +Medium + +思路: + +瞄了一眼,基本上infix(中缀表达式)都是表达成postfix(后缀表达式)再来求值的。 +比如 A + B * C 写成 A B C * + + + +| Infix Expression | Prefix Expression | Postfix Expression | +| ---------------- | ----------------- | ------------------ | +| A + B | + A B | A B + | +| A + B * C | + A * B C | A B C * + | + + +infix 中缀转postfix 后缀还有专门的算法: + + + +1. Create an empty stack called opstack for keeping operators. Create an empty list for output. + +2. Convert the input infix string to a list by using the string method split. + +3. Scan the token list from left to right. + +4. - If the token is an operand, append it to the end of the output list. + - If the token is a left parenthesis, push it on the opstack. + - If the token is a right parenthesis, pop the opstack until the corresponding left parenthesis is removed. Append each operator to the end of the output list. + - If the token is an operator, *, /, +, or -, push it on the opstack. However, first remove any operators already on the opstack that have higher or equal precedence and append them to the output list. + +5. When the input expression has been completely processed, check the opstack. Any operators still on the stack can be removed and appended to the end of the output list. + + + +可以看到中缀转后缀一个重要的点是: 当我们把operator +-*/ 放到opstack上时候,我们需要考虑/看是否有之前的operator有更高或者相等的precedence,这个时候我们需要优先(计算)把它放到output list. + + + + +参考 + + + + + +AC代码 + +``` +class Solution(object): + def calculate(self, s): + """ + :type s: str + :rtype: int + """ + def precedence(op): + if op == '*' or op == '/': + return 2 + else: + return 1 + + def cal(op, op1, op2): + if op == '*': + return op1 * op2 + elif op == '/': + return op1 / float(op2) + elif op == '+': + return op1 + op2 + else: + return op1 - op2 + + + opstack = [] + operands = [] + + # remove empty space and put operands and + idx = 0 + for i in range(idx, len(s)): + if s[i] in '+-*/': + operands.append(s[idx:i]) + while len(opstack) > 0 and precedence(s[i]) <= precedence(opstack[-1]) and len(operands) >= 2: + op = opstack.pop() + op2 = int(operands.pop()) + op1 = int(operands.pop()) + res = cal(op, op1, op2) + operands.append(res) + opstack.append(s[i]) + idx = i + 1 + operands.append(s[idx:]) + + while opstack: + op = opstack.pop() + op2 = int(operands.pop()) + op1 = int(operands.pop()) + res = cal(op, op1, op2) + operands.append(res) + + return int(operands[0]) + +``` + diff --git a/228._summary_ranges.md b/228._summary_ranges.md new file mode 100644 index 000000000..95e8d2faf --- /dev/null +++ b/228._summary_ranges.md @@ -0,0 +1,59 @@ +###228. Summary Ranges + +题目: + + + +难度: + +Medium + + +用一个head和headIdx来记录当前consecutive的开始,一旦不再consecutive,push it in + + +然后应该可以把代码写的更简单 + +``` +class Solution(object): + def summaryRanges(self, nums): + """ + :type nums: List[int] + :rtype: List[str] + """ + if nums == []: + return [] + tmp = [] + tmpl = [] + + + head = nums[0] + headIdx = 0 + + tmpl = [head] + + for i in range(1,len(nums)): + #not consective anymore + if nums[i] != head + i - headIdx : + tmp.append(tmpl) + head = nums[i] + headIdx = i + tmpl = [] + tmpl.append(head) + #consective nums + else: + tmpl.append(nums[i]) + #push the last sequence in + tmp.append(tmpl) + + + res = [] + for t in tmp: + if len(t) == 1: + res.append(str(t[0])) + else: + res.append(str(t[0])+"->" +str(t[-1])) + return res + + +``` diff --git a/229._majority_element_ii.md b/229._majority_element_ii.md new file mode 100644 index 000000000..061c03441 --- /dev/null +++ b/229._majority_element_ii.md @@ -0,0 +1,62 @@ +###229. Majority Element II + + + +题目: + + + +难度: +Medium + +思路: + +majority element是两两比较扔掉不同的元素,然后最后会留下一个。 + +这里变成三三比较来扔东西, find all elements that appear more than ⌊ n/3 ⌋ times,所以最多可以有两个majority element ii. + + +最后再加一个比较来确认这些函数是majority element + +``` +class Solution(object): + def majorityElement(self, nums): + """ + :type nums: List[int] + :rtype: List[int] + """ + cnt1 = 0 + cnt2 = 0 + maj1 = 0 + maj2 = 0 + for num in nums: + if maj1 == num: + cnt1 += 1 + elif maj2 == num: + cnt2 += 1 + elif cnt1 == 0: + maj1 = num + cnt1 += 1 + elif cnt2 == 0: + maj2 = num + cnt2 += 1 + else: + cnt1 -= 1 + cnt2 -= 1 + + cnt1 = 0 + cnt2 = 0 + + n = len(nums) + res = [] + for num in nums: + if maj1 == num: + cnt1 += 1 + elif maj2 == num: + cnt2 += 1 + if cnt1 > n/3: + res.append(maj1) + if cnt2 > n/3: + res.append(maj2) + return res +``` \ No newline at end of file diff --git a/230._kth_smallest_element_in_a_bst.md b/230._kth_smallest_element_in_a_bst.md new file mode 100644 index 000000000..4068afd8a --- /dev/null +++ b/230._kth_smallest_element_in_a_bst.md @@ -0,0 +1,48 @@ +###230. Kth Smallest Element in a BST + +题目: + + + +难度: +Medium + + +跟昨天做的一道题类似,一上来就走取巧之路。 + +InOrder排序,输出,当然也完全可以用昨天的binary tree iterator,入stack,出stack,知道输出第k位 + + +``` +class Solution(object): + def kthSmallest(self, root, k): + """ + :type root: TreeNode + :type k: int + :rtype: int + """ + self.root = root + self.lst = [] + self.inOrder(root) + return self.lst[k-1] + + def inOrder(self, root): + if root == None: + return + self.inOrder(root.left) + self.lst.append(root.val) + self.inOrder(root.right) +``` + + +现在看到kth 就条件反射的想用divide & conquer, 扫root的左子树看nodes量,如果nodes数量是k-1,那么node就刚好是第k个,如果大于k > 左子树数量,扫右子树,同时更新root为root.right。 + +看到的言论: + +> If we can change the BST node structure, We can add a new Integer to mark the number of element in the left sub-tree. + +when the node is not null. + +- if k == node.leftNum + 1, return node +- if k > node.leftNum + 1, make k -= node.leftNum + 1, and then node = node.right +- otherwise, node = node.left \ No newline at end of file diff --git a/231. Power of Two.md b/231. Power of Two.md new file mode 100644 index 000000000..7850b2947 --- /dev/null +++ b/231. Power of Two.md @@ -0,0 +1,93 @@ +### 231. Power of Two + + + +题目: + + + +难度: + +Easy + + + +思路: + + + +power of two 那是这个数字的binary 表示一定只有一个1 + +套用以前的代码数1的位数的 + +这样会超时 + +``` +class Solution(object): + def isPowerOfTwo(self, n): + """ + :type n: int + :rtype: bool + """ + cnt = 0 + while n != 0: + n &= n -1 + cnt += 1 + return cnt == 1 +``` + + + +跟power of three一样递归,可以AC + + + +``` +class Solution(object): + def isPowerOfTwo(self, n): + """ + :type n: int + :rtype: bool + """ + if n <= 0 : + return False + if n == 1: + return True + if n%2 == 0: + return self.isPowerOfTwo(n/2) + else: + return False + +``` + + + + + + + +也是有[算法的wikipedia page](https://en.wikipedia.org/wiki/Power_of_two#Fast_algorithm_to_check_if_a_positive_number_is_a_power_of_two) + +> The [binary representation](https://en.wikipedia.org/wiki/Binary_numeral_system) of integers makes it possible to apply a very fast test to determine whether a given [positive integer](https://en.wikipedia.org/wiki/Positive_integer) *x* is a power of two: +> +> positive *x* is a power of two ⇔ (*x* & (*x* − 1)) is equal to zero. + + + +注意特殊case 0的处理 + +``` +class Solution(object): + def isPowerOfTwo(self, n): + """ + :type n: int + :rtype: bool + """ + if n == 0 :return False + else: + res = n & (n-1) + return res == 0 +``` + + + diff --git a/232._implement_queue_using_stacks.md b/232._implement_queue_using_stacks.md new file mode 100644 index 000000000..53647fc0e --- /dev/null +++ b/232._implement_queue_using_stacks.md @@ -0,0 +1,51 @@ +###232. Implement Queue using Stacks + +题目: + + + +难度: +Easy + +这个题没有乖乖听话,不过因为当年做过用两个stack来模拟queue + +然后不得不说,我Python大法实在太厉害了 + +这功能强大的,我简直要啧啧啧 + +``` +class Queue(object): + def __init__(self): + """ + initialize your data structure here. + """ + self.lst = [] + + + def push(self, x): + """ + :type x: int + :rtype: nothing + """ + self.lst.append(x) + + + def pop(self): + """ + :rtype: nothing + """ + del self.lst[0] + + def peek(self): + """ + :rtype: int + """ + return self.lst[0] + + + def empty(self): + """ + :rtype: bool + """ + return self.lst == [] +``` \ No newline at end of file diff --git a/234._palindrome_linked_list.md b/234._palindrome_linked_list.md new file mode 100644 index 000000000..586e69584 --- /dev/null +++ b/234._palindrome_linked_list.md @@ -0,0 +1,124 @@ +###234. Palindrome Linked List + +题目: + + + +难度: +Easy + +这道题我花了很久的时间 + + +思路是:“先翻转整个链表,然后和之前的链表比较” + +但是一直不能AC,然后去谷歌了,然后debug的过程发现原来的linked list也不存在了. + + +“先翻转整个链表,然后和之前的链表比较”听起来是可行的,但是当你“翻转了整个链表”以后,“之前的链表”已经不存在了啊。这时候的head其实是指向翻转后的链表的最后一个元素,所以这段代码的本质是:“比较链表的第1个和最后1个元素是否相同”。 + + +如果用这个思路的话,你就必须创建一个原始链表的备份才行。但与其那样做,还不如干脆把List中元素拷贝到数组中算了,因为都是O(N)内存,后者实现起来还简单快捷一些。 + + +所以艰难的第一个AC办法: + + +``` +class Solution(object): + def isPalindrome(self, head): + """ + :type head: ListNode + :rtype: bool + """ + if head == None or head.next == None: + return True + + cur = head + stack = [] + while cur: + stack.append(cur.val) + cur = cur.next + + while head and stack: + if head.val != stack.pop(): + return False + else: + head = head.next + return True +``` + +这道题并不能算Easy吧: + +思路二: +找到中间的节点,把linked list拆成两个部分,后半部分linkedlist reverse,然后比较两个linked list值是否相同,看例子: + + +``` +1 -> 3 -> 1 拆成 1 和 1 + +1 -> 3 -> 5 ->5 -> 3 -> 1 拆成 1-> 3 -> 5 和 5 -> 3 -> 1 + +``` + +然后用这个思路的时候还有一个问题,就是特别简单的Python递归可能建议不用递归,因为递归反倒可能recursion到极限,用loop可能更顺. + +第二个AC之法,因为懒,所以老用之前用过的代码: + +这个速度也是慢的厉害 + + + +``` +class Solution(object): + def isPalindrome(self, head): + """ + :type head: ListNode + :rtype: bool + """ + if head == None or head.next == None: + return True + + mid = self.findMid(head) + mid = self.reverseList(mid) + + while head and mid: + if head.val != mid.val: + return False + else: + head = head.next + mid = mid.next + return True + + + + def findMid(self, head): + if head == None: + return None + else: + slow = head + fast = head + + while fast.next and fast.next.next: + slow = slow.next + fast = fast.next.next + + print(slow.val) + return slow.next + + def reverseList(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + prev = None + cur = head + while(cur): + nxt = cur.next + cur.next = prev + prev = cur + cur = nxt + return prev +``` + +然后看了一下,如果把这三块写在一起,会轻松一些,AC速度快很多 diff --git a/235._lowest_common_ancestor_of_a_binary_search_tree.md b/235._lowest_common_ancestor_of_a_binary_search_tree.md new file mode 100644 index 000000000..62c1e09a5 --- /dev/null +++ b/235._lowest_common_ancestor_of_a_binary_search_tree.md @@ -0,0 +1,33 @@ +###235. Lowest Common Ancestor of a Binary Search Tree + +题目: + + + +难度 : Easy + +- 两个node,一个大于root,一个小于root,那么必定root两边,共同的ancestor是root,同时再考虑同为空的状况 +- 两个node,都比node小,到左边去寻找,那么先找到那个必定是common ancestor +- 两个node,都比node大,类似.... + + +AC解法 + +``` +class Solution(object): + def lowestCommonAncestor(self, root, p, q): + """ + :type root: TreeNode + :type p: TreeNode + :type q: TreeNode + :rtype: TreeNode + """ + if root == None or root == p or root == q: + return root + elif p.val < root.val < q.val or q.val < root.val < p.val : + return root + elif p.val < root.val and q.val < root.val: + return self.lowestCommonAncestor(root.left,p,q) + else: + return self.lowestCommonAncestor(root.right,p,q) +``` diff --git a/236._lowest_common_ancestor_of_a_binary_tree.md b/236._lowest_common_ancestor_of_a_binary_tree.md new file mode 100644 index 000000000..271c462ad --- /dev/null +++ b/236._lowest_common_ancestor_of_a_binary_tree.md @@ -0,0 +1,104 @@ + +###236. Lowest Common Ancestor of a Binary Tree + + +题目: + + + +难度: + +Medium + + + +思路 + +求root到node的path,然后对比path,最后一个想同的点就是lowest common ancestor + + + +好开心,AC了 + + +但是我根本不能在Runtime Distribution 上找到我,因为太慢了|||| + + + + +``` + +class Solution(object): + def lowestCommonAncestor(self, root, p, q): + """ + :type root: TreeNode + :type p: TreeNode + :type q: TreeNode + :rtype: TreeNode + """ + pathP = self.pathTo(root,p) + pathQ = self.pathTo(root,q) + n = min(len(pathP), len(pathQ)) + + ans = root + for i in range(n): + if pathP[i] == pathQ[i]: + ans = pathP[i] + else: + break + return ans + + + def pathTo(self, root, goal): + # goal node ,path + if root == None: return root + stack = [(root, [root])] + while stack: + node, path = stack.pop() + if node == goal: + return path + if node.left: stack.append((node.left, path + [node.left])) + if node.right: stack.append((node.right, path + [node.right])) + +``` + +递归解法,之所以我没有用递归因为有疑惑, BASE CASE 很容易想到,root 是none,或者p == root 或者q == root,那么LCA就是root,如果两个node一个在左边,一个在右边,那么LCA也是root,但是如果一个是6,另一个是4则有一点疑惑,但其实是没有问题的,因为这个时候给的总是他们的共同root,所以这个递归解法是没错的,总是想到递归是在那个状况下递归 + + +``` + _______3______ + / \ + ___5__ ___1__ + / \ / \ + 6 _2 0 8 + / \ + 7 4 +``` + +AC代码 + + + +``` +class Solution(object): + def lowestCommonAncestor(self, root, p, q): + """ + :type root: TreeNode + :type p: TreeNode + :type q: TreeNode + :rtype: TreeNode + """ + if root == None: + return None + + if p == root or q == root: + return root + + left = self.lowestCommonAncestor(self.left,p,q) + right = self.lowestCommonAncestor(self.right,p,q) + + if left and right: + return root + + return left if left is None else right +``` \ No newline at end of file diff --git a/237._delete_node_in_a_linked_list.md b/237._delete_node_in_a_linked_list.md new file mode 100644 index 000000000..5e4a505ef --- /dev/null +++ b/237._delete_node_in_a_linked_list.md @@ -0,0 +1,32 @@ +###237. Delete Node in a Linked List + +题目: + + + +难度: +Easy + + + +这道题,第一感觉,像删链表一样来删,把所有的node val前移一个,但是有个问题,为什么tail那个node还是存在?哼(ˉ(∞)ˉ)唧.. + +已经去提问,被解答: + + + + + +另外一个O(1)的办法更好,把后一个node的val移到待删这个节点,并且把node.next = node.next.next +很好理解,但是为嘛不对 + +``` +class Solution(object): + def deleteNode(self, node): + """ + :type node: ListNode + :rtype: void Do not return anything, modify node in-place instead. + """ + node.val = node.next.val + node.next = node.next.next +``` \ No newline at end of file diff --git a/238._product_of_array_except_self.md b/238._product_of_array_except_self.md new file mode 100644 index 000000000..00a883f6b --- /dev/null +++ b/238._product_of_array_except_self.md @@ -0,0 +1,100 @@ +###238. Product of Array Except Self + +题目: + + + +难度: + +Medium + + +不使用division 并且O(n) + + +想到的算法 O(n^2) + +会超时 + + +``` +class Solution(object): + def productExceptSelf(self,nums): + """ + :type nums: List[int] + :rtype: List[int] + """ + lst = [] + for i in range(len(nums)): + lst.append(self.productWithoutI(nums,i)) + return lst + + + def productWithoutI(self,nums,i): + product = 1 + for j in range(len(nums)): + if j != i: + product *= nums[j] + return product +``` + +如果用除法,也会有问题,如果有0出现也会变繁琐。 + +谷歌一下: + + +解法还是很棒的 + + output[i] = { i 前面的数的乘积} X { i 后面的数的乘积} + + +``` +class Solution(object): + def productExceptSelf(self,nums): + """ + :type nums: List[int] + :rtype: List[int] + """ + if nums == [] : return [] + lft = [1] + rgt = [1] + product = 1 + for i in range(1,len(nums)): + product *= nums[i-1] + lft.append(product) + product = 1 + for i in reversed(range(1,len(nums))): + product *= nums[i] + rgt.append(product) + rgt.reverse() + result = [] + for i in range(len(nums)): + result.append(lft[i]*rgt[i]) + return result + +``` + + +空间O(n),再看到满足要求的“标准解法” + + +``` +class Solution(object): + def productExceptSelf(self,nums): + """ + :type nums: List[int] + :rtype: List[int] + """ + if nums == [] : return [] + size = len(nums) + output = [1] * size + left = 1 + for x in range(size-1): + left *= nums[x] + output[x+1] *= left + right = 1 + for x in range(size - 1, 0, -1): + right *= nums[x] + output[x-1] *= right + return output +``` \ No newline at end of file diff --git a/240._search_a_2d_matrix_ii.md b/240._search_a_2d_matrix_ii.md new file mode 100644 index 000000000..1f3ea3ca5 --- /dev/null +++ b/240._search_a_2d_matrix_ii.md @@ -0,0 +1,65 @@ +###240. Search a 2D Matrix II + + + +题目: + + + +难度: +Medium + +思路: + +每行,每列都是sorted + +但是比较好的策略是从右上角开始搜索,比如这样: + +``` +matrix = [ + [1, 4, 7, 11, 15], + [2, 5, 8, 12, 19], + [3, 6, 9, 16, 22], + [10, 13, 14, 17, 24], + [18, 21, 23, 26, 30] +] + +m, n = 0, col - 1 +更新策略: + matrix[m][n] < target: 那么这一行到从左走到此都会小于target,row+1 ,往下走 + matrix[m][n] > target: 那么这一列往下走都会大于target,col - 1,往左走 + 否则找到 +``` + +时间复杂度O(max(M,N)),因为每次都会往下或者往左走 + + +用的算法是Saddleback + + + +``` +class Solution(object): + def searchMatrix(self, matrix, target): + """ + :type matrix: List[List[int]] + :type target: int + :rtype: bool + """ + if not matrix: + return False + + row = len(matrix) + col = len(matrix[0]) + m, n = 0, col - 1 + + while m < row and n >= 0: + if matrix[m][n] < target: + m += 1 + elif matrix[m][n] > target: + n -= 1 + else: + return True + return False + +``` \ No newline at end of file diff --git a/242._valid_anagram.md b/242._valid_anagram.md new file mode 100644 index 000000000..28ddbe9c6 --- /dev/null +++ b/242._valid_anagram.md @@ -0,0 +1,54 @@ +###242. Valid Anagram + +题目: + + + +难度 : Easy + + +对Python来说,又是一块蛋糕,基本不本地测试 +就是这么自信 + +``` +class Solution(object): + def isAnagram(self, s, t): + """ + :type s: str + :type t: str + :rtype: bool + """ + sList = sorted(list(s)) + tList = sorted(list(t)) + return sList == tList + +``` + + +作弊神奇python大法,看了看别人的解法,用字数统计,因为只可能是26个字母 + +然后发现作弊大法居然更快 + +``` + +class Solution(object): + def isAnagram(self, s, t): + """ + :type s: str + :type t: str + :rtype: bool + """ + if len(s) != len(t): + return False + + charCnt = [0] * 26 + + for i in range(len(s)): + charCnt[ord(s[i]) - 97] += 1 + charCnt[ord(t[i]) - 97] -= 1 + + for cnt in charCnt: + if cnt != 0: + return False + return True +``` diff --git a/252. Meeting Rooms.md b/252. Meeting Rooms.md new file mode 100644 index 000000000..c84dee953 --- /dev/null +++ b/252. Meeting Rooms.md @@ -0,0 +1,47 @@ +### 252. Meeting Rooms + + + +题目: + + + + +难度 : Easy + + + +思路: + +学了一下如何根据attribute 来sort object `intervals.sort(key = lambda interval : interval.start)` + + + +AC 代码 + +``` +# Definition for an interval. +# class Interval(object): +# def __init__(self, s=0, e=0): +# self.start = s +# self.end = e + +class Solution(object): + def canAttendMeetings(self, intervals): + """ + :type intervals: List[Interval] + :rtype: bool + """ + n = len(intervals) + if n < 2 : return True + intervals.sort(key = lambda interval : interval.start) + for i in range(1,n): + if intervals[i].start < intervals[i-1].end: + return False + return True +``` + + + + + diff --git a/256. Paint House.md b/256. Paint House.md new file mode 100644 index 000000000..21576f90a --- /dev/null +++ b/256. Paint House.md @@ -0,0 +1,57 @@ +### 256. Paint House + +题目: + + +难度: +Medium + + + +其实这个题目有实际意义诶,至少我的故乡?在要申请啥东西的时候就把街上的房子全刷了。 + +然后这个是相邻的房子不同色。 + + + +其实我觉得paint fense更难一点 + + + +思路: + +数组 dp\[x][3] 代表第x个房子paint r/g/b的值 + + + +AC代码 + +``` +class Solution(object): + def minCost(self, costs): + """ + :type costs: List[List[int]] + :rtype: int + """ + m = len(costs) + if m == 0 : return 0 + elif m == 1 : return min(costs[0][0], costs[0][1],costs[0][2]) + else: + n = 3 if m else 0 + dp = [[0 for i in range(3)] for j in range(m)] + + dp[0] = costs[0] + + + for i in range(1,m): + dp[i][0] = min(dp[i-1][1],dp[i-1][2]) + costs[i][0] + dp[i][1] = min(dp[i-1][0],dp[i-1][2]) + costs[i][1] + dp[i][2] = min(dp[i-1][0],dp[i-1][1]) + costs[i][2] + return min(dp[m-1][0], dp[m-1][1], dp[m-1][2]) + +``` + + + + + diff --git a/257._binary_tree_paths.md b/257._binary_tree_paths.md new file mode 100644 index 000000000..c0fdea6ed --- /dev/null +++ b/257._binary_tree_paths.md @@ -0,0 +1,45 @@ +###257. Binary Tree Paths + +题目: + + + + +难度: + +Easy + + +Tag : tree, DFS + +类似的题目是Path Sum Ⅱ + + +第一眼看起来不像easy题目,然后堵了一下自己写的Path Sum Ⅱ自己的解答 + +同一种花样 + +``` +class Solution: + # @param {TreeNode} root + # @return {string[]} + def binaryTreePaths(self, root): + if root == None: return [] + result = [] + self.auxTreePaths(root,result,"") + return result + + + def auxTreePaths(self,root,result,curStr): + if root == None: + return + curStr += str(root.val) + if root.left == None and root.right == None: + result.append(curStr) + if root.left: + self.auxTreePaths(root.left,result,curStr + "->") + if root.right: + self.auxTreePaths(root.right,result,curStr + "->") + +``` + diff --git a/261. Graph Valid Tree.md b/261. Graph Valid Tree.md new file mode 100644 index 000000000..1e309007a --- /dev/null +++ b/261. Graph Valid Tree.md @@ -0,0 +1,69 @@ +### 261. Graph Valid Tree + + + +题目: + + + + +难度 : Medium + + + +思路: + +graph 为 tree 两个条件: + +- 这个图是connected +- 没有cycle + + + +偷懒AC代码,直接在323题,Number of Connected Components in an Undirected Graph上改的AC代码: + + + +``` +class Solution(object): + def validTree(self, n, edges): + """ + :type n: int + :type edges: List[List[int]] + :rtype: bool + """ + def find(x): + if uf[x] != x: + uf[x] = find(uf[x]) + return uf[x] + + def union(x,y): + xRoot = find(x) + yRoot = find(y) + uf[xRoot] = yRoot + + uf = [i for i in range(n)] + + for node1, node2 in edges: + # cycle exists + if find(node1) == find(node2): + print 'ha ' + return False + else: + union(node1, node2) + + res = set() + for i in range(n): + res.add(find(i)) + + return len(res) == 1 +``` + + + + + + + + + diff --git a/263._ugly_number.md b/263._ugly_number.md new file mode 100644 index 000000000..730b0bdde --- /dev/null +++ b/263._ugly_number.md @@ -0,0 +1,38 @@ +###263. Ugly Number + + + +题目: + + + +难度: +Easy + + +思路: + +因为其prime factors 只包括 2, 3, 5,所以比如如果能被2 整除, n = n / 2, 直到不能被2整除,然后同样对3,5检验,如果最终结果为1,那么就是ugly number,否则不过关 + + +注意一下边界条件,当num为0的时候,return一下False + +``` +class Solution(object): + def isUgly(self, num): + """ + :type num: int + :rtype: bool + """ + if num == 0 : return False + while num % 2 == 0: + num = num / 2 + while num % 3 == 0: + num = num / 3 + while num % 5 == 0: + num = num / 5 + if num == 1: + return True + return False +``` + diff --git a/264._ugly_number_ii.md b/264._ugly_number_ii.md new file mode 100644 index 000000000..ba1546b9e --- /dev/null +++ b/264._ugly_number_ii.md @@ -0,0 +1,140 @@ +###264. Ugly Number II + + + +题目: + + + +难度: +Medium + + +思路: + +暴力算法一定会超时 + + + + +先看一个非常🐂的帖子,当我知道python 除了有list之外还有collections就已经被刷新了一次了,然后数据结构 x 数据结构,就展示了数据结构的魅力 + + + + +看一下deque + rotate: + + +``` +import collections +a = collections.deque() +a.append(2) +a.append(5) +a.append(7) +a.append(9) #a deque([2, 5, 7, 9]) + +import bisect +idx = bisect.bisect_left(a,3) #1 +a.rotate(-idx) #deque([5, 7, 9, 2]) + +a.appendleft(3) #deque([3, 5, 7, 9, 2]) + +a.rotate(idx) # deque([2, 3, 5, 7, 9]) +``` + +这个rotate -是往左边rotate,看官网的介绍. + +>Rotate the deque n steps to the right. If n is negative, rotate to the left. Rotating one step to the right is equivalent to: d.appendleft(d.pop()). + +所以这样造成可以🐂的数据结构 + +用这个微调之后的fasttable来解决问题 + + +``` +import collections +import bisect + +class FastTable: + + def __init__(self): + self.__deque = collections.deque() + + def __len__(self): + return len(self.__deque) + + def head(self): + return self.__deque.popleft() + + def tail(self): + return self.__deque.pop() + + def peek(self): + return self.__deque[-1] + + def insert(self, obj): + if obj in self.__deque: + return + index = bisect.bisect_left(self.__deque, obj) + self.__deque.rotate(-index) + self.__deque.appendleft(obj) + self.__deque.rotate(index) + +class Solution(object): + + def nthUglyNumber(self, n): + """ + :type n: int + :rtype: int + """ + q = FastTable() + q.insert(1) + while n > 0: + x = q.head() + q.insert(2*x) + q.insert(3*x) + q.insert(5*x) + n -= 1 + return x +``` + + +还可以优化: +根据页面hint 来做的 + + +``` +class Solution(object): + def nthUglyNumber(self, n): + """ + :type n: int + :rtype: int + """ + if n == 1: + return 1 + else: + import collections + q2 = collections.deque() + q3 = collections.deque() + q5 = collections.deque() + q2.append(2) + q3.append(3) + q5.append(5) + while n > 1: + x = min(q2[0],q3[0],q5[0]) + if x == q2[0]: + x = q2.popleft() + q2.append(2*x) + q3.append(3*x) + q5.append(5*x) + elif x == q3[0]: + x = q3.popleft() + q3.append(3*x) + q5.append(5*x) + else: + x = q5.popleft() + q5.append(5*x) + n -= 1 + return x +``` + diff --git a/265. Paint House II.md b/265. Paint House II.md new file mode 100644 index 000000000..c9dfbc20f --- /dev/null +++ b/265. Paint House II.md @@ -0,0 +1,60 @@ +### 265. Paint House II + + + +题目: + + +难度: + +Hard + + + +思路: + +感觉不像hard 题,知道为啥hard了,因为can you solve it in O(nk) runtime + +数组 dp\[x][k] 代表第x个房子paint 0..k的值 + + + +用paint house 1 改的AC代码: + +不过这个时间复杂度是O(nkk)吧 + + + +``` +class Solution(object): + def minCostII(self, costs): + """ + :type costs: List[List[int]] + :rtype: int + """ + n = len(costs) + if n == 0 : return 0 + elif n == 1 : return min (costs[0]) + else: + k = len(costs[0]) if n else 0 + dp = [[0 for i in range(k)] for j in range(n)] + + dp[0] = costs[0] + + for i in range(1,n): + for j in range(0,k): + minVal = float('inf') + for m in range(0,k): + if m != j and dp[i-1][m] < minVal: + minVal = dp[i-1][m] + dp[i][j] = minVal + costs[i][j] + + return min(dp[-1]) +``` + + + + + + + diff --git a/266. Palindrome Permutation.md b/266. Palindrome Permutation.md new file mode 100644 index 000000000..49f78bd04 --- /dev/null +++ b/266. Palindrome Permutation.md @@ -0,0 +1,46 @@ +### 266. Palindrome Permutation + + + +题目: + + +难度 : Easy + + + +思路: + +hint 已经提示的很明显。数单字个数来处理 + + + +AC代码 + + + +``` +class Solution(object): + def canPermutePalindrome(self, s): + """ + :type s: str + :rtype: bool + """ + lookup = {} + + for char in s: + lookup[char] = lookup.get(char,0) + 1 + + res = 0 + + for char, cnt in lookup.items(): + if cnt % 2 == 0 : + continue + else: + res += 1 + + return res < 2 +``` + +​ + diff --git a/267. Palindrome Permutation II.md b/267. Palindrome Permutation II.md new file mode 100644 index 000000000..5243954ee --- /dev/null +++ b/267. Palindrome Permutation II.md @@ -0,0 +1,77 @@ +### 267. Palindrome Permutation II + + + + + +题目: + + + + +难度 : Medium + + + +思路: + +首先这个题目有个简单版本,那就是判断是否可以permutate 为 palindrome. 问题的关键是最多只能一个odd character. + + + +写的这么不elegant,我也是服气! + +AC代码: + + + +``` +class Solution(object): + def generatePalindromes(self, s): + """ + :type s: str + :rtype: List[str] + """ + def permuteUnique(firstS): + if len(firstS) == 0 : return [] + if len(firstS) == 1 : return [firstS] + res = [] + for i in range(len(firstS)): + if i > 0 and firstS[i] == firstS[i-1]: continue + for j in permuteUnique(firstS[:i] + firstS[i+1:]): + res.append([firstS[i]] + j) + return res + + lookup = {} + for char in s: + lookup[char] = lookup.get(char, 0) + 1 + + res, firstS, oddChar = 0, [], '' + for char, cnt in lookup.items(): + if cnt % 2 == 0: + for i in range(cnt/2): + firstS.append(char) + continue + else: + for i in range(cnt / 2): + firstS.append(char) + oddChar = char + res += 1 + if res >= 2: + return [] + else: + res = permuteUnique(firstS) + if len(res) == 0 and oddChar: + return [oddChar] + return map(lambda x: ''.join(x) + oddChar + ''.join(x[::-1]),res) + +``` + + + + + + + + + diff --git a/268._missing_number.md b/268._missing_number.md new file mode 100644 index 000000000..d86b99d54 --- /dev/null +++ b/268._missing_number.md @@ -0,0 +1,37 @@ +###268. Missing Number + +题目: + + + +难度: + +Medium + + + +等差数列前n项和 - 数组之和 + + + +``` +class Solution(object): + def missingNumber(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + m = len(nums) + res = (m+1)*m /2 + for num in nums: + res -= num + return res +``` + + + +第二种解法是位运算:位运算(异或运算) + +原理应该是就是两个数不同,这样才为True,待到研究位运算的时候扩展 + + diff --git a/270. Closest Binary Search Tree Value.md b/270. Closest Binary Search Tree Value.md new file mode 100644 index 000000000..b2aafe48a --- /dev/null +++ b/270. Closest Binary Search Tree Value.md @@ -0,0 +1,66 @@ +### 270. Closest Binary Search Tree Val + +题目: + + + + + +难度 : Easy + +最简单的算法是inorder一遍,得到有序的lst,然后O(N) 寻找最靠近的,但是明显不是很高效。 + +AC代码 + +``` +class Solution(object): + def closestValue(self, root, target): + """ + :type root: TreeNode + :type target: float + :rtype: int + """ + lst = [] + + def inorder(root): + if root: + inorder(root.left) + lst.append(root.val) + inorder(root.right) + + inorder(root) + + close = lst[0] + diff = abs(target - lst[0]) + + for i in lst: + if abs(target - i) < diff: + close = i + diff = abs(target - i ) + + return close +``` + + + +AC代码,跟binary search tree 寻值一样, loop 一遍树来寻找 + + + +``` + +class Solution(object): + def closestValue(self, root, target): + """ + :type root: TreeNode + :type target: float + :rtype: int + """ + close = root.val + + while root: + close = root.val if abs(target - root.val) < abs(target - close) else close + root = root.right if root.val < target else root.left + return close +``` + diff --git a/276. Paint Fence.md b/276. Paint Fence.md new file mode 100644 index 000000000..3b7373ed9 --- /dev/null +++ b/276. Paint Fence.md @@ -0,0 +1,65 @@ +### 276. Paint Fence + +题目: + + +难度: +Easy + +思路: + +先解释一下题目意思: fence 栅栏, post 柱子 , no more than two adjacent fence posts have the same color.(一开始看漏,没有看到more than,以为相邻就不能同色)。 + +本来想画格子找规律,结果走偏了,所以老老实实写递推关系式,貌似是这样的 + +- n = 0 : 全为0 +- n = 1 : 有 k种方式 +- n = 2 :有 k * k 种 +- 否则,第n个有两种可能, 跟 n-1 颜色不一样, 跟 n-1 颜色一样, fn = (k-1)fn-1 + (k-1) fn-2 + + + +画一下表:对一下递推关系式,正确✅ + + + +``` + n + 0 1 2 3 4 + 0 0 0 0 0 0 +t 1 0 1 1 0 0 + 2 0 2 4 6 10 + 3 0 3 9 24 . + 4 0 4 16 60 . +``` + + + +AC 代码 + +``` +class Solution(object): + def numWays(self, n, k): + """ + :type n: int + :type k: int + :rtype: int + """ + if n == 0: + return 0 + else: + if k == 0: return 0 + elif n == 1: return k + elif n == 2 : return k * k + else: + dp = [0 for i in range(n+1)] + dp[0] = 0 + dp[1] = k + dp[2] = k * k + + for i in range(3,n+1): + dp[i] = (k-1) * dp [i-1] + (k-1) * dp [i-2] + return dp[-1] + +``` + diff --git a/277. Find the Celebrity.md b/277. Find the Celebrity.md new file mode 100644 index 000000000..e6bc0312a --- /dev/null +++ b/277. Find the Celebrity.md @@ -0,0 +1,65 @@ +### 277. Find the Celebrity + + + +题目: + + + + +难度 : Medium + + + +思路: + +算法考试考过 + +celebrity 是 每个人都知道他,而他不认识任何别的人。 + + + +如果用图来看,那就每个别的人都有箭头指向c,而c没有任何出去的箭头。 + +O(N^2)的代码还是还是很容易想到的 + +但是我们可以有提升,那么就是可以check `knows(a,b)`,如果 a knows b,那么可以排除a是celebrity,否则可以排除b是celebrity. + +最后还要确认一遍是否这个是真的celebrity + + + +AC代码 + +``` +# The knows API is already defined for you. +# @param a, person a +# @param b, person b +# @return a boolean, whether a knows b +# def knows(a, b): + +class Solution(object): + def findCelebrity(self, n): + """ + :type n: int + :rtype: int + """ + if n == 0: + return -1 + c = 0 + for i in xrange(1,n): + if not knows(i, c): + c = i + for i in range(n): + if c != i: + if not knows(i,c) or knows(c,i): + return -1 + return c + + +``` + + + + + diff --git a/278. First Bad Version.md b/278. First Bad Version.md new file mode 100644 index 000000000..7d15e1ce8 --- /dev/null +++ b/278. First Bad Version.md @@ -0,0 +1,44 @@ +### 278. First Bad Version + + + + + +题目: + + + + +难度 : Easy + + + +思路: + +根据 search for a range 改的,这个binary search的边界也是令人着(chi)迷(dai)啊 + + + +这里使用 `n+1` 一是边界令人着迷,二是version是从1开始的 + +``` +class Solution(object): + def firstBadVersion(self, n): + """ + :type n: int + :rtype: int + """ + l, r = 0, n+1 + + while l < r: + mid = (l+r) // 2 + if isBadVersion(mid) and (mid == 0 or (not isBadVersion(mid-1))): + return mid + if isBadVersion(mid): + r = mid + else: + l = mid + 1 +``` + + + diff --git a/279._perfect_squares.md b/279._perfect_squares.md new file mode 100644 index 000000000..7fd6c3143 --- /dev/null +++ b/279._perfect_squares.md @@ -0,0 +1,45 @@ + +###279. Perfect Squares + + +题目: + + + +难度: + +Medium + + +状态转移方程 + +思路一: +dp[i] = min(dp[j] + dp[i-j], dp[i]) +会超时 + +思路二: +dp[i + j * j] = min(dp[i] + 1, dp[i + j * j]) + +已经不能更好了,但是因为Python的特性,依旧超时 + + + +``` +class Solution(object): + def numSquares(self, n): + """ + :type n: int + :rtype: int + """ + dp = [ n+1 for i in range(1+n)] + dp[0] = 0 + + for i in range(n): + j = 0 + while (i + j * j <= n) : + dp[ i + j * j ] = min(dp[ i + j * j], dp[i] + 1) + j += 1 + + return dp[n] + +``` diff --git a/280. Wiggle Sort.md b/280. Wiggle Sort.md new file mode 100644 index 000000000..4a239c466 --- /dev/null +++ b/280. Wiggle Sort.md @@ -0,0 +1,78 @@ +### 280. Wiggle Sort + + + + + +题目: + + + + +难度 : Medium + + + +思路: + + + +想的是比如bubble sort或者任何简单的比较sort,只是放数字的时候是按这样的大小顺序放: + +1, n, 2, n-1,3, n-2…. + +或者每个pass其实做两个sort,找出最大的和最小的。然后分别放在头尾。 + + + +这样的写法TLE: + +``` +class Solution(object): + def wiggleSort(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + n = len(nums) + for i in range(n): + # small bubble sort + if i % 2 == 0: + for j in range(n-1, i-1, -1): + if nums[j] > nums[j-1]: + nums[j], nums[j-1] = nums[j-1],nums[j] + else: + for j in range(n-1, i-1, -1): + if nums[j] < nums[j-1]: + nums[j], nums[j-1] = nums[j-1],nums[j] +``` + + + + + +但是貌似想复杂了,其实对于这个简单化,要求只有一个: + +1. 如果i是奇数,nums[i] >= nums[i - 1] +2. 如果i是偶数,nums[i] <= nums[i - 1] + +所以我们只要遍历一遍数组,把不符合的情况交换一下就行了。具体来说,如果nums[i] > nums[i - 1], 则交换以后肯定有nums[i] <= nums[i - 1]。 + + + +AC 代码 + +``` +class Solution(object): + def wiggleSort(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + for i in xrange(1,len(nums)): + if ((i % 2) and nums[i] < nums[i-1]) or ( not (i%2) and nums[i] > nums[i-1]): + nums[i-1],nums[i] = nums[i],nums[i-1] +``` + + + diff --git a/283._move_zeroes.md b/283._move_zeroes.md new file mode 100644 index 000000000..239b57188 --- /dev/null +++ b/283._move_zeroes.md @@ -0,0 +1,93 @@ +###283. Move Zeroes + + +题目: + + + +难度: +Easy + + +思路: + +思路一: + +这个题我很笨,但是思路是可以朝逆天的方向走的,一旦遇到不是0的就把它往前移动,移动非0完成,剩下的全部填0,看例子 + + + +``` +0 1 0 3 12 + +``` + +也算双指针吧, +首先cur = 0, idx = 0,为0,不变,然后idx = 1,不为0,前移,数组变成 + +``` +1 1 0 3 12 +``` + +继续idx 这个时候是2,不变,继续处理,碰到3可以变成 + +``` +1 3 0 3 12 +``` +这样知道变换完成,简直逆天啊,因为cur 总是小于idx,所以总可以保持这样的稳定性 + + +``` +class Solution(object): + def moveZeroes(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + cur,idx = 0,0 + while idx < len(nums): + # cur is not 0 + if nums[idx] != 0 : + nums[cur] = nums[idx] + cur += 1 + idx += 1 + + while cur < len(nums): + nums[cur] = 0 + cur += 1 + +``` + + +思路二: + +传统的双指针,参考这里 + + + + + +``` +class Solution(object): + def moveZeroes(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + p0, p1 = 0,0 + while p0 < len(nums) and p1 < len(nums): + if nums[p0] != 0: + p0 += 1 + p1 = p0 + continue + if nums[p1] == 0: + p1 += 1 + continue + nums[p0],nums[p1] = nums[p1],nums[p0] + p0 += 1 + p1 += 1 +``` + +相反,我觉得这样双指针反而没有上面的代码容易理解 + + diff --git a/285._inorder_successor_in_bst.md b/285._inorder_successor_in_bst.md new file mode 100644 index 000000000..a5a489be9 --- /dev/null +++ b/285._inorder_successor_in_bst.md @@ -0,0 +1,81 @@ +###285. Inorder Successor in BST + + +题目: + + + +难度: +Medium + +思路: + + +BST的特性,对于一个node,它的所有左侧node都比它小,它的所有右侧node都比它大。最小的元素在最左边,最大的元素在最右边。 + +一个node x它的successor y 是满足y > x的最小值。两种情况,如果node x有right child,那么这个right child 中的最小值就是它的successor,否则就要往上走,如果走上去的parent使得这个node是其左边的孩子的话,那么successor我们也找到了。 + + +因为状况可能是这样的: + +``` + 3 + / + 1 + / \ + 0 2 +``` + +如果是寻找0的successor,那么我们往上一走,发现0的祖先是1,并且0是1的左孩子,找到,否则如果寻找2的successor,那么我们要往上走到3的部分,2是3的左subtree,这样才能解决问题。 + +伪码 + +``` +function Succ(x) + if Right(x) ̸= NIL then + return Min(Right(x)) + else + p ← Parent(x) + while p ̸= NIL and x = Right(p) do + x←p + p ← Parent(p) + return p +``` + +这里伪码有点不适用是因为我们并没有这个parent指针,当然我们还是有trick方式的,就是我们从root开始走,直到找到这个node p,同时我们记录一路上看到的比p.val大的值,这样最后一个就是它的successor.其中最低的那一个就是他的successor. + +AC代码如下: + + +``` +class Solution(object): + def inorderSuccessor(self, root, p): + """ + :type root: TreeNode + :type p: TreeNode + :rtype: TreeNode + """ + def minNode(root): + while root.left!= None: + root = root.left + return root + + + def searchP(p, root): + if root == None or root.val == p.val: + return None + else: + succ = None + while root != None and p.val != root.val: + if p.val < root.val: + succ = root + root = root.left + else: + root = root.right + return succ + + if p.right: + return minNode(p.right) + else: + return searchP(p, root) +``` \ No newline at end of file diff --git a/286. Walls and Gates.md b/286. Walls and Gates.md new file mode 100644 index 000000000..8a23c2681 --- /dev/null +++ b/286. Walls and Gates.md @@ -0,0 +1,90 @@ +### 286. Walls and Gates + + + +题目: +https://leetcode.com/problems/walls-and-gates/ + + + +难度 : Medium + + + +思路: + +乍一看feel like all pairs shortest path. + +naive的想法是针对所有为0的点做all pairs shortest path,然后最终得到的就是把INF替换保留最小的。时间复杂度是0的个数* BFS + + + +naive的想法AC + +``` +class Solution(object): + def wallsAndGates(self, rooms): + """ + :type rooms: List[List[int]] + :rtype: void Do not return anything, modify rooms in-place instead. + """ + def legal(x,y): + return x >= 0 and x < row and y >= 0 and y < col and rooms[x][y] != -1 + + def bfs(rooms, i, j): + queue = [] + queue.append((i,j)) + + while queue: + (x,y) = queue.pop() + + if legal(x-1,y) and rooms[x-1][y] > rooms[x][y] + 1: + rooms[x-1][y] = rooms[x][y] + 1 + queue.append((x-1,y)) + if legal(x+1,y) and rooms[x+1][y] > rooms[x][y] + 1 : + rooms[x+1][y] = rooms[x][y] + 1 + queue.append((x+1,y)) + if legal(x,y-1) and rooms[x][y-1] > rooms[x][y] + 1: + rooms[x][y-1] = rooms[x][y] + 1 + queue.append((x,y-1)) + if legal(x,y+1) and rooms[x][y+1] > rooms[x][y] + 1 : + rooms[x][y+1] = rooms[x][y] + 1 + queue.append((x,y+1)) + + + row = len(rooms) + col = len(rooms[0]) if row else 0 + + for i in range(row): + for j in range(col): + if rooms[i][j] == 0: + bfs(rooms,i,j) +``` + + + +复习一下BFS的伪码 + +from wikipedia, 一开始有点小迷茫,那就是为什么没有keep一个visited的数据结构,但是随即反应过来,其实`n.distance == INFINITY` 已经是check它是否被visited 过了,我以上的代码并没有做这个操作,但是因为是格子状以及我仅在检查是否更小,所以也能AC. + +``` +Breadth-First-Search(Graph, root): + + for each node n in Graph: + n.distance = INFINITY + n.parent = NIL + + create empty queue Q + + root.distance = 0 + Q.enqueue(root) + + while Q is not empty: + current = Q.dequeue() + for each node n that is adjacent to current: + if n.distance == INFINITY: + n.distance = current.distance + 1 + n.parent = current + Q.enqueue(n) +``` + diff --git a/289._game_of_life.md b/289._game_of_life.md new file mode 100644 index 000000000..059a98caa --- /dev/null +++ b/289._game_of_life.md @@ -0,0 +1,111 @@ +###289. Game of Life + +题目: + + + +难度 : Medium + + +直接一上来就没有考虑solve it in-place,考虑的是便利,简直是born for 便利 + +首先我把board拓宽了,宽,高各增加了两排。 + +因为这样求neighbor方便,针对原来的borad,现在新的big 对于 1 -> n-1 的部分 + +全都有八个neighbor,用了一个2d array来记录nbrs,再根据当下的nbr来判断更新,因为不能一边在board上loop一边更新. + +AC的效率还ok: + +``` +class Solution(object): + def gameOfLife(self, board): + """ + :type board: List[List[int]] + :rtype: void Do not return anything, modify board in-place instead. + """ + def liveNeighbors(i,j): + return big[i-1][j-1] + big[i-1][j] + big[i-1][j+1] + big[i][j-1] + big[i][j+1] + big[i+1][j-1] + big[i+1][j] + big[i+1][j+1] + + if board == [[]] : return + row = len(board) + col = len(board[0]) + + nbrs = [[0 for j in range(col)] for i in range(row)] + big = [[ 0 for j in range(col+2) ] for i in range(row+2)] + for i in range(1,row+1): + for j in range(1,col+1): + big[i][j] = board[i-1][j-1] + + for i in range(1,row+1): + for j in range(1,col+1): + nbrs[i-1][j-1] = liveNeighbors(i,j) + + for i in range(row): + for j in range(col): + if board[i][j] == 1: + if nbrs[i][j] < 2: + board[i][j] = 0 + elif nbrs[i][j] == 2 or nbrs[i][j] == 3: + board[i][j] = 1 + else: + board[i][j] = 0 + else: + if nbrs[i][j] == 3: + board[i][j] = 1 + +``` + +谷歌了一下,大家都用到了temp 2d array嘛,哼(ˉ(∞)ˉ)唧。好吧,空间复杂度比我小。 + + + +很多的解法都是一样开了一个二维数组,即使没有像我一样扩展board.因为问题在于不能一边更新board 一边来做。 + +看了一下这边的思路: + + + + + + + +不开数组 + +我们可以使用状态机转换 o(╯□╰)o 感觉不知道在听什么 还是很迷茫的感觉, in-place AC代码 + +``` +class Solution(object): + def gameOfLife(self, board): + """ + :type board: List[List[int]] + :rtype: void Do not return anything, modify board in-place instead. + """ + row = len(board) + col = len(board[0]) if row else 0 + + dx = [-1,-1,-1,0,1,1,1,0] + dy = [-1,0,1,1,1,0,-1,-1] + + for i in range(row): + for j in range(col): + cnt = 0 + for k in range(8): + x, y = i + dx[k], j + dy[k] + if x >=0 and x < row and y >=0 and y < col and (board[x][y] == 1 or board[x][y] == 2): + cnt += 1 + + if board[i][j] and (cnt < 2 or cnt > 3): + board[i][j] = 2 + elif board[i][j] == 0 and cnt == 3: + board[i][j] = 3 + + for i in range(row): + for j in range(col): + board[i][j] %= 2 + + +``` + + + diff --git a/290._word_pattern.md b/290._word_pattern.md new file mode 100644 index 000000000..e6122ec87 --- /dev/null +++ b/290._word_pattern.md @@ -0,0 +1,42 @@ +###290. Word Pattern + +题目: + + + +难度 : Easy + +4.pattern = "abba", str = "dog dog dog dog" should return false. + +因为这个的限制,所以中间加了一个loop用来查询是否这个a对应的已经出现过了。 + +不过其实也可以用两个dictionary来处理,可以O(n^3) -> O(n^2) + + +``` +class Solution(object): + def wordPattern(self, pattern, str): + """ + :type pattern: str + :type str: str + :rtype: bool + """ + strList = str.split(' ') + if len(pattern) != len(strList): + return False + lookup = {} + for i in range(len(strList)): + if pattern[i] not in lookup: + for key in lookup: + if lookup[key] == strList[i]: + return False + lookup[pattern[i]] = strList[i] + elif lookup[pattern[i]] != strList[i]: + return False + + return True + +``` + + +另外看到一段非常简短代码,使用了map函数,有待学习 diff --git a/292._nim_game.md b/292._nim_game.md new file mode 100644 index 000000000..23cad3b13 --- /dev/null +++ b/292._nim_game.md @@ -0,0 +1,55 @@ +###292. Nim Game + +题目: + + + + +难度: + +Easy + + +对于总是优先开始的那方 + + +- 有一到三块,总是赢 +- 有四块,总是输 +- 有五块,总是赢 + +所以如果自己想赢,总是要迫使对方拿之后,给自己遗留5块,或者三块以及以下。 + +- 如果是六块: + - 拿一块,对方五块,对方赢 + - 拿两块,对方余下四块,我方赢 + - 拿三块,余三块,对方赢 + +- 七块: + - 拿三块,余四块,迫使对方输,总是赢 + +本打算用递归来看,因为对方也可以重复使用这个函数,但是会超时,所以就看了一下hint + + +- n <= 3 能赢 √ +- n == 4 总输 +- n = 5,6,7 总赢 +- n == 8, 先手如何选,总可以转成5,6,7 对方总会赢 + + +所以 n % 4 != 0 时候,先手必胜 + +简直是啊,有些游戏就是这样来必赢的啊,没想到你是这样的题目 + + + +``` +class Solution(object): + def canWinNim(self, n): + """ + :type n: int + :rtype: bool + """ + return n % 4 != 0 +``` + + \ No newline at end of file diff --git a/296. Best Meeting Point.md b/296. Best Meeting Point.md new file mode 100644 index 000000000..5f141f6a4 --- /dev/null +++ b/296. Best Meeting Point.md @@ -0,0 +1,67 @@ +### 296. Best Meeting Point + +题目: + + + + +难度 : Hard + + + +思路: + +提示是先从一维开始,其实一开始是略迷茫的,因为如果两个点,那么只要在这两个之间,一定就是最小值,线段长度。 + +不过倘若点增加到三个,那么就是第三个点处。 + + + +然后发现了一个很棒的stackoverflow page + + + + + +因为一开始理解错误二维数组的输入,以为是给的locs这样的数组,所以直接这样写了,然后发现给的是格子,所以但是还是偷懒这样写了。 + + + +AC 代码 + +``` +class Solution(object): + def minTotalDistance(self, grid): + """ + :type grid: List[List[int]] + :rtype: int + """ + res = 0 + locs = [] + + m = len(grid) + n = len(grid[0]) if m else 0 + + for i in range(m): + for j in range(n): + if grid[i][j] == 1: + locs.append([i,j]) + + + locs.sort(key = lambda point: point[0]) + x = locs[len(locs)/2][0] + for point in locs: + res += abs(point[0] - x) + + locs.sort(key = lambda point: point[1]) + y = locs[len(locs)/2][1] + for point in locs: + res += abs(point[1] - y) + + return res +``` + + + + + diff --git a/298. Binary Tree Longest Consecutive Sequence.md b/298. Binary Tree Longest Consecutive Sequence.md new file mode 100644 index 000000000..4c6bc841b --- /dev/null +++ b/298. Binary Tree Longest Consecutive Sequence.md @@ -0,0 +1,123 @@ +### 298. Binary Tree Longest Consecutive Sequence + + + + + +题目: +https://leetcode.com/problems/binary-tree-longest-consecutive-sequence/ + + + +难度 : Medium + + + +思路: + + + +TLE代码,每个node求,然后求最大值 + +``` +# Definition for a binary tree node. +# class TreeNode(object): +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None + +class Solution(object): + def longestConsecutive(self, root): + """ + :type root: TreeNode + :rtype: int + """ + def consecutive(root): + if root == None: + return 0 + else: + left, right = 0,0 + if root.left: + if root.left.val == root.val + 1: + left = 1 + consecutive(root.left) + if root.right: + if root.right.val == root.val + 1: + right = 1 + consecutive(root.right) + return max(left, right, 1) + + def dfs(root): + s = [] + s.append(root) + while s: + root = s.pop() + res.append(consecutive(root)) + if root.left: + s.append(root.left) + if root.right: + s.append(root.right) + if not root: + return 0 + + res = [] + dfs(root) + return max(res) + +``` + + + + + +其实第二次递归,也就是dfs其实是有点多余的?因为可以边走边保存最大值? + +因为可以 + +> - recursion,在参数中包含当前的连续seq长度 +> - 如果left, right child的value是连续的,那么就将长度+1传入下一个call + + + + + +AC代码 + +``` +# Definition for a binary tree node. +# class TreeNode(object): +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None + +class Solution(object): + def longestConsecutive(self, root): + """ + :type root: TreeNode + :rtype: int + """ + def dfs(root, curLen): + self.result = max(curLen, self.result) + if root.left: + if root.left.val == root.val + 1: + dfs(root.left, curLen + 1) + else: + dfs(root.left, 1) + if root.right: + if root.right.val == root.val + 1: + dfs(root.right, curLen + 1) + else: + dfs(root.right,1) + + if not root: return 0 + + self.result = 0 + dfs(root, 1) + return self.result + +``` + + + +这里值得注意的是这里的self.result其实相当于dfs的全局变量,也是利用了这个才做到边递归边记录边重置。 + diff --git a/299._bulls_and_cows.md b/299._bulls_and_cows.md new file mode 100644 index 000000000..8b6cbe468 --- /dev/null +++ b/299._bulls_and_cows.md @@ -0,0 +1,119 @@ +###299. Bulls and Cows + +题目: + + + + +难度: + +Easy + + +我花了很久时间来AC,因为想了边界条件 + + +``` +class Solution(object): + def getHint(self, secret, guess): + """ + :type secret: str + :type guess: str + :rtype: str + """ + maps = {} + for i in range(len(secret)): + if secret[i] not in maps: + maps[secret[i]] = [i] + else: + maps[secret[i]].append(i) + mapg = {} + for i in range(len(guess)): + if guess[i] not in mapg: + mapg[guess[i]] = [i] + else: + mapg[guess[i]].append(i) + + print maps, mapg + + a,b = 0,0 + for key in maps.keys(): + if key in mapg.keys(): + common = list(set(mapg[key]) & set(maps[key])) + #check for bull + a += len(common) + mapg[key] = [item for item in mapg[key] if item not in common] + maps[key] = [item for item in maps[key] if item not in common] + b += min(len(maps[key]), len(mapg[key])) + return str(a) + 'A' + str(b) + 'B' +``` + + + + + + + +两种解法都....... + +都这么短。。。。。 +我Python还是用的不行啊 + + +``` +class Solution(object): + def getHint(self, secret, guess): + """ + :type secret: str + :type guess: str + :rtype: str + """ + bull = sum(map(operator.eq, secret, guess)) + sa = collections.Counter(secret) + sb = collections.Counter(guess) + cow = sum((sa & sb).values()) - bull + return str(bull) + 'A' + str(cow) + 'B' +``` + + +bull = secret与guess下标与数值均相同的数字个数 + +cow = secret与guess中出现数字的公共部分 - bull + + + + +来分析一下这个解法 + +``` +def getHint(self, secret, guess): + bulls = sum(map(operator.eq, secret, guess)) + both = sum(min(secret.count(x), guess.count(x)) for x in '0123456789') + return '%dA%dB' % (bulls, both - bulls) +``` + +首先map的用法是,对于iterable中的每个元素应用function方法,将结果作为list返回 + +``` +>>> def add100(x): +... return x+100 +... +>>> hh = [11,22,33] +>>> map(add100,hh) +[111, 122, 133] +``` + + + + +用'1123','0111' 来测试: + + +``` +map(operator.eq, secret, guess) +[False, True, False, False] +``` +就是将equal函数并行应用在两个string上,然后后面的解法也是粗暴简约和厉害 + + +参考 diff --git a/300._longest_increasing_subsequence.md b/300._longest_increasing_subsequence.md new file mode 100644 index 000000000..bd1752b9e --- /dev/null +++ b/300._longest_increasing_subsequence.md @@ -0,0 +1,42 @@ +###300. Longest Increasing Subsequence + +题目: + + + +难度: +Medium + + +思路: + +典型DP + +递推关系式: + +对于以num[i]结束的longest increasing subsequence的长度 + +dp[i] = dp[j] + 1 if num[i] > num[j] else 1 + +最后loop一圈,求出最长的 + +AC 代码 + +``` +class Solution(object): + def lengthOfLIS(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + if not nums: return 0 + n = len(nums) + dp = [1 for i in range(n)] + for i in range(1,n): + for j in range(i): + if nums[i] > nums[j] : + dp[i] = max(dp[i],dp[j] + 1) + + return max(dp) +``` + diff --git a/303._range_sum_query_-_immutable.md b/303._range_sum_query_-_immutable.md new file mode 100644 index 000000000..32c459aee --- /dev/null +++ b/303._range_sum_query_-_immutable.md @@ -0,0 +1,47 @@ +###303. Range Sum Query - Immutable + +题目: + + + +tag : DP +难度 : Easy + + + +``` +sum(i, j) = nums[i] j = i +sum(i,j) = sum[i,j-1] + nums[j] j > i + +``` + +Python代码 + +``` + +class NumArray(object): + def __init__(self, nums): + """ + initialize your data structure here. + :type nums: List[int] + """ + self.sums = nums + for i in range(1, len(self.sums)): + self.sums[i] = self.sums[i-1] + self.sums[i] + + + + + def sumRange(self, i, j): + """ + sum of elements nums[i..j], inclusive. + :type i: int + :type j: int + :rtype: int + """ + if i == 0 : + return self.sums[j] + else : + return self.sums[j] - self.sums[i-1] + +``` \ No newline at end of file diff --git a/322. Coin Change.md b/322. Coin Change.md new file mode 100644 index 000000000..1246fa161 --- /dev/null +++ b/322. Coin Change.md @@ -0,0 +1,52 @@ +### 322. Coin Change + + + +题目: + + +难度: + +Medium + +DP入门 + +递推方程式: dp[i] = min(dp[i-vj]+1), vj 是硬币的面额 + +伪码: + +``` +Set Min[i] equal to Infinity for all of i +Min[0]=0 + +For i = 1 to S + For j = 0 to N - 1 + If (Vj<=i AND Min[i-Vj]+1 + + + +难度 : Medium + + + +思路: + + + +最容易想到的是针对每个节点做dfs?然后发现其已经被mark了就不管了,最后数dfs的次数? + +这样尝试,到n =2000 的时候 TLE + +``` +class Solution(object): + def countComponents(self, n, edges): + """ + :type n: int + :type edges: List[List[int]] + :rtype: int + """ + def dfs(node): + if visited[node] == 1: + return + else: + visited[node] = 1 + for node1, node2 in edges: + if node1 == node: + dfs(node2) + elif node2 == node: + dfs(node1) + + res = 0 + visited = [ 0 for i in range(n)] + for i in range(n): + if visited[i] == 0: + dfs(i) + res += 1 + return res +``` + + + +tag是union find,不用是否浪费? + +所谓的union find,应当不是每个做dfs,而是每个来看一下是否属于同一个set,一次dfs,然后loop 做union find + +[Disjoint-set_data_structure](https://en.wikipedia.org/wiki/Disjoint-set_data_structure) + + + +这里有一个很棒的[实现](http://python-algorithms.readthedocs.io/en/stable/_modules/python_algorithms/basic/union_find.html) + + + +AC代码 + +这里就偷懒了,利用岛是0-n,然后也只做了path compression,没更多的优化 + + + +``` +class Solution(object): + def countComponents(self, n, edges): + """ + :type n: int + :type edges: List[List[int]] + :rtype: int + """ + def find(x): + if uf[x] != x: + uf[x] = find(uf[x]) + return uf[x] + + def union(x,y): + xRoot = find(x) + yRoot = find(y) + uf[xRoot] = yRoot + + uf = [i for i in range(n)] + + for node1, node2 in edges: + union(node1, node2) + + res = set() + for i in range(n): + res.add(find(i)) + + return len(res) +``` + + + diff --git a/326._power_of_three.md b/326._power_of_three.md new file mode 100644 index 000000000..87a6ab083 --- /dev/null +++ b/326._power_of_three.md @@ -0,0 +1,50 @@ +###326. Power of Three + +题目: + + + + + +难度 : Easy + + +直接就上的递归 + +``` +class Solution(object): + def isPowerOfThree(self,n): + """ + :type n: int + :rtype: bool + """ + if n <= 0: + return False + if n == 1: + return True + if n%3 == 0: + return self.isPowerOfThree(n/3) + else: + return False + +``` + +有一个follow up,可否不用 loop/recusion + +看到了取巧的办法,因为是Given an integer,是有范围的(<2147483648),存在能输入的最大的3的幂次,即 3^19=1162261467。 + +只用检查是否能被这个数整除 + + +``` +class Solution(object): + def isPowerOfThree(self, n): + """ + :type n: int + :rtype: bool + """ + return n > 0 and 1162261467 % n == 0 +``` + + +结果跑出来这个running time 更慢||| diff --git a/328._odd_even_linked_list.md b/328._odd_even_linked_list.md new file mode 100644 index 000000000..b628ab241 --- /dev/null +++ b/328._odd_even_linked_list.md @@ -0,0 +1,112 @@ +###328. Odd Even Linked List + +题目: + + + +难度: + +Medium + + +想法:因为相对顺序保持不变,所以可以拆list,然后再组合在一起?这样是满足题目要求的,因为linked list不像array,我们操作的时候只是用指向,没有分配新的空间。 + +``` + +class Solution(object): + def oddEvenList(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + if head == None or head.next == None or head.next.next == None: + return head + + oddDummy = ListNode(-1) + oddDummy.next = head + + evenDummy = ListNode(-1) + evenDummy.next = head.next + + oddCur = oddDummy.next + evenCur = evenDummy.next + + cur = head.next.next + while cur: + oddCur.next = cur + oddCur = oddCur.next + evenCur.next = cur.next + evenCur = evenCur.next + if cur.next: + cur = cur.next.next + else: + cur = cur.next + oddCur.next = evenDummy.next + # print oddDummy.next.val + return oddDummy.next + +``` + + + + +看别人的优雅代码 + +``` +class Solution(object): + def oddEvenList(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + if head == None: + return head + + # odd used to keep track of the tail of odd nodes + odd = oddHead = head + # record how many swaps happend + even = evenHead = head.next + while even and even.next: + odd.next = even.next + odd = odd.next + even.next = odd.next + even = even.next + odd.next = evenHead + return head +``` + +intuitive and concise + + +``` +1 → 2 → 3 → 4 → 5 → NULL + +一开始 + + 1 → 2 → 3 → 4 → 5 → NULL +odd even even.next + + +1 → 3 → 4 → 5 → NULL + odd ↑ + 2 - + + +1 → 3 → 4 → 5 → NULL + odd + 2 - even + + +再loop一次: + + | ----------- + | --------- ↓ ↓ +1 → 3 4 5 → NULL + odd ↑ + 2 - ↑ even + + +最后一步,再将两个odd的最后一个和evenHead连接起来,完工 +``` + + diff --git a/334._increasing_triplet_subsequence.md b/334._increasing_triplet_subsequence.md new file mode 100644 index 000000000..e5e4c645a --- /dev/null +++ b/334._increasing_triplet_subsequence.md @@ -0,0 +1,71 @@ +###334. Increasing Triplet Subsequence + +题目: + + + +难度: +Medium + + +思路: + +用longest increasing subsequence来求,超时 + +``` +class Solution(object): + def increasingTriplet(self, nums): + """ + :type nums: List[int] + :rtype: bool + """ + if not nums: return False + n = len(nums) + dp = [1 for i in range(n)] + for i in range(1,n): + for j in range(i): + if nums[i] > nums[j] : + dp[i] = max(dp[i],dp[j] + 1) + if dp[i] >= 3: + return True + + return False +``` + +于是转而用Third Maximum Number的方法,维护一个当前最小和当前第二小,当碰到当前比较大,返回True,否则一圈走下来依旧不能满足,返回false. + +想一下,如果不是求三个增长,如果是求两个的话,那么一定想到的是保存当前最小值,那么一旦后方遇到一个比较大的,就这样处理掉了。 + +所以对于任何一个num来说,有三种可能: + +- 小于当前的最小值,那么更新当前最小值 +- 小于当前第二小值,更新当前第二小值 +- 如果以上两种都不是,那么是大于当前第二小值和最小值,于是这样就true + +所以是求四个增长也是类似的么 + +AC代码 + +``` +class Solution(object): + def increasingTriplet(self, nums): + """ + :type nums: List[int] + :rtype: bool + """ + # m - min, sm - second min + m, sm = float('inf'), float('inf') + + for num in nums: + print m, sm + if m >= num: + m = num + elif sm >= num: + sm = num + else: + return True + return False +``` + + + diff --git a/337._house_robber_iii.md b/337._house_robber_iii.md new file mode 100644 index 000000000..a081ba016 --- /dev/null +++ b/337._house_robber_iii.md @@ -0,0 +1,47 @@ +###337. House Robber III + + +题目: + + + +难度: +Medium + +思路: + +参考 + + +这个解法好像有点厉害 + +从root开始抢起来,最大能抢到的两个可能: 抢root和不抢root + +- rob_root = max(rob_L + rob_R , no_rob_L + no_nob_R + root.val) +- no_rob_root = rob_L + rob_R + + +这个递归写起来就很厉害了 + + +``` +class Solution(object): + def rob(self, root): + """ + :type root: TreeNode + :rtype: int + """ + def dfs(root): + if not root: return 0, 0 + rob_L, no_rob_L = dfs(root.left) + rob_R, no_rob_R = dfs(root.right) + return max(no_rob_R + no_rob_L + root.val , rob_L + rob_R), rob_L + rob_R + + return dfs(root)[0] + +``` + +对于每个node,我们return的是从这个node能抢到的最大值,以及不抢它能获得的最大值,这个递归简直我服 + + + diff --git a/338. Counting Bits.md b/338. Counting Bits.md new file mode 100644 index 000000000..e74a13253 --- /dev/null +++ b/338. Counting Bits.md @@ -0,0 +1,46 @@ +### 338. Counting Bits + +题目: + + + +难度: +Medium + + + +**O(n\*sizeof(integer))** 算法,其实就是把count of 1 bit拿来用: + +``` +class Solution(object): + def countBits(self, num): + """ + :type num: int + :rtype: List[int] + """ + def hammingWeight(n): + cnt = 0 + while n != 0: + n &= n -1 + cnt += 1 + return cnt + + res = [] + for i in range(num+1): + res.append(hammingWeight(i)) + return res + +``` + + + +DP算法 - to be done + + + + + + + + + diff --git a/339. Nested List Weight Sum.md b/339. Nested List Weight Sum.md new file mode 100644 index 000000000..a39800a58 --- /dev/null +++ b/339. Nested List Weight Sum.md @@ -0,0 +1,58 @@ +### 339. Nested List Weight Sum + + + +题目: + + +难度: +Easy + +思路: + +一开始没认真读题,直接上手开写: + +``` +class Solution(object): + def depthSum(self, nestedList): + """ + :type nestedList: List[NestedInteger] + :rtype: int + """ + def dfs(nestedList): + for item in nestedList: + if item.isInteger(): + self.res += item.getInteger() + else: + dfs(item.getList()) + self.res = 0 + dfs(nestedList) + return self.res +``` + + + +然后注意到要weight by its depth. + + + +AC + +``` +class Solution(object): + def depthSum(self, nestedList): + """ + :type nestedList: List[NestedInteger] + :rtype: int + """ + def dfs(nestedList,depth): + for item in nestedList: + if item.isInteger(): + self.res += item.getInteger() * depth + else: + dfs(item.getList(), depth+1) + self.res = 0 + dfs(nestedList,1) + return self.res +``` + diff --git a/341. Flatten Nested List Iterator.md b/341. Flatten Nested List Iterator.md new file mode 100644 index 000000000..14c4f8737 --- /dev/null +++ b/341. Flatten Nested List Iterator.md @@ -0,0 +1,51 @@ +### 341. Flatten Nested List Iterator + + + +题目: + + + + +难度: +Medium + +思路: + +懒就一个字,您的AC代码击败了全国0.34%的Python用户,AC代码效率这么低,也是厉害。 + +AC代码: + +``` +class NestedIterator(object): + + def __init__(self, nestedList): + """ + Initialize your data structure here. + :type nestedList: List[NestedInteger] + """ + def dfs(nestedList): + for item in nestedList: + if item.isInteger(): + self.stack.append(item.getInteger()) + else: + dfs(item.getList()) + self.stack = [] + dfs(nestedList) + + + def next(self): + """ + :rtype: int + """ + if self.hasNext(): + return self.stack.pop(0) + + + def hasNext(self): + """ + :rtype: bool + """ + return self.stack != [] +``` + diff --git a/342. Power of Four.md b/342. Power of Four.md new file mode 100644 index 000000000..dce04d62a --- /dev/null +++ b/342. Power of Four.md @@ -0,0 +1,33 @@ +### 342. Power of Four + + + +题目: + + + + +难度 : Easy + +继续照抄power of three + +``` +class Solution(object): + def isPowerOfFour(self, num): + """ + :type num: int + :rtype: bool + """ + if num <= 0 : + return False + if num == 1: + return True + if num % 4 == 0: + return self.isPowerOfFour(num/4) + else: + return False + +``` + + + diff --git a/344._reverse_string.md b/344._reverse_string.md new file mode 100644 index 000000000..ebaecf53c --- /dev/null +++ b/344._reverse_string.md @@ -0,0 +1,47 @@ +###344. Reverse String + + + +题目: + + + +难度: +Easy + +思路: + +不要脸的python AC code: + + +``` +class Solution(object): + def reverseString(self, s): + """ + :type s: str + :rtype: str + """ + return s[::-1] +``` + +因为python不支持item assignment + +所以如果非要用two pointer来做的话,那么会是这样 + +``` +class Solution(object): + def reverseString(self, s): + """ + :type s: str + :rtype: str + """ + lst = list(s) + n = len(lst) + start, end = 0, n - 1 + + while start < end: + lst[end], lst[start] = lst[start],lst[end] + start += 1 + end -= 1 + return ''.join(lst) +``` diff --git a/349._intersection_of_two_arrays.md b/349._intersection_of_two_arrays.md new file mode 100644 index 000000000..d3c1f5868 --- /dev/null +++ b/349._intersection_of_two_arrays.md @@ -0,0 +1,25 @@ +###349. Intersection of Two Arrays + +题目: + + + +难度: + +Easy + + + +Python一句话作弊 + +``` +class Solution(object): + def intersection(self, nums1, nums2): + """ + :type nums1: List[int] + :type nums2: List[int] + :rtype: List[int] + """ + return list(set(nums1).intersection(nums2)) +``` + diff --git a/350._intersection_of_two_arrays_ii.md b/350._intersection_of_two_arrays_ii.md new file mode 100644 index 000000000..bd43b8dc8 --- /dev/null +++ b/350._intersection_of_two_arrays_ii.md @@ -0,0 +1,46 @@ +###350. Intersection of Two Arrays II + +题目: + + + + +难度: + +Easy + + +sort之后用了双指针来走和看 + + +``` +class Solution(object): + def intersect(self, nums1, nums2): + """ + :type nums1: List[int] + :type nums2: List[int] + :rtype: List[int] + """ + nums1.sort() + nums2.sort() + + l1 = len(nums1) + l2 = len(nums2) + + p1 = 0 + p2 = 0 + + res = [] + + while p1 < l1 and p2 < l2: + if nums1[p1] < nums2[p2]: + p1 += 1 + elif nums1[p1] > nums2[p2]: + p2 += 1 + else: + res.append(nums1[p1]) + p1 += 1 + p2 += 1 + return res +``` + \ No newline at end of file diff --git a/353. Design Snake Game.md b/353. Design Snake Game.md new file mode 100644 index 000000000..b9b95757c --- /dev/null +++ b/353. Design Snake Game.md @@ -0,0 +1,89 @@ +### 353. Design Snake Game + + + +题目: + + + +难度: Medium + +思路: + +纯正单纯方式 + +在TLE边缘AC + +AC代码 + + + +``` +class SnakeGame(object): + + def __init__(self, width,height,food): + """ + Initialize your data structure here. + @param width - screen width + @param height - screen height + @param food - A list of food positions + E.g food = [[1,1], [1,0]] means the first food is positioned at [1,1], the second is at [1,0]. + :type width: int + :type height: int + :type food: List[List[int]] + """ + self.width = width + self.height = height + self.food = food + self.snake = [[0,0]] + self.score = 0 + + + def move(self, direction): + """ + Moves the snake. + @param direction - 'U' = Up, 'L' = Left, 'R' = Right, 'D' = Down + @return The game's score after the move. Return -1 if game over. + Game over when snake crosses the screen boundary or bites its body. + :type direction: str + :rtype: int + """ + + nextx, nexty = self.snake[0] + + if direction == 'U': + nextx -= 1 + if direction == 'L': + nexty -=1 + if direction == 'R': + nexty +=1 + if direction == 'D': + nextx +=1 + + # nextx, nexty has food + if self.food and [nextx,nexty] == self.food[0]: + self.snake.insert(0,[nextx,nexty]) + self.food = self.food[1:] + self.score += 1 + # netx, nety outside boundary + else: + self.snake = self.snake[:-1] + self.snake.insert(0,[nextx,nexty]) + if nextx < 0 or nextx > self.height - 1 or nexty < 0 or nexty > self.width - 1: + return -1 + noDupes = [] + + for snakePt in self.snake: + # print snakePt, + if snakePt not in noDupes: + noDupes.append(snakePt) + # print 'snake', self.snake + # print 'noDpues', noDupes + if len(noDupes) < len(self.snake): + return -1 + return self.score + +``` + + + diff --git a/364. Nested List Weight Sum II.md b/364. Nested List Weight Sum II.md new file mode 100644 index 000000000..d72cb1643 --- /dev/null +++ b/364. Nested List Weight Sum II.md @@ -0,0 +1,47 @@ +### 364. Nested List Weight Sum II + + + +题目: + + +难度: +Medium + +思路: + + + +跟 Nested List Weight Sum I 的区别是这个是从不是数depth,是数层的高度: + + + +比较naive的AC代码: + +``` +class Solution(object): + def depthSumInverse(self, nestedList): + """ + :type nestedList: List[NestedInteger] + :rtype: int + """ + def level(nestedList,height): + self.level = max(height, self.level) + for item in nestedList: + if not item.isInteger(): + level(item.getList(), height + 1) + + def dfs(nestedList, height): + for item in nestedList: + if item.isInteger(): + self.res += item.getInteger() * height + else: + dfs(item.getList(),height - 1) + + self.level = 1 + self.res = 0 + level(nestedList,1) + dfs(nestedList, self.level) + return self.res +``` + diff --git a/366. Find Leaves of Binary Tree.md b/366. Find Leaves of Binary Tree.md new file mode 100644 index 000000000..569296cb0 --- /dev/null +++ b/366. Find Leaves of Binary Tree.md @@ -0,0 +1,54 @@ +### 366. Find Leaves of Binary Tree + + + +题目: + + + + + +难度 :Medium + + + +按照它的要求,老老实实写了两个递归 findleaf 和 deleteleaf, 再组合起来 + + + +AC代码 + +``` +class Solution(object): + def findLeaves(self, root): + """ + :type root: TreeNode + :rtype: List[List[int]] + """ + def findLeaf(root): + if root == None: + return [] + elif root.left == None and root.right == None: + return [root.val] + else: + return findLeaf(root.left) + findLeaf(root.right) + + def removeLeaf(root): + if root == None: + return None + elif root.left == None and root.right == None: + return None + else: + if root.left: + root.left = removeLeaf(root.left) + if root.right: + root.right = removeLeaf(root.right) + return root + + res = [] + while root: + res.append(findLeaf(root)) + root = removeLeaf(root) + return res +``` + diff --git a/367._valid_perfect_square.md b/367._valid_perfect_square.md new file mode 100644 index 000000000..7bb7285d4 --- /dev/null +++ b/367._valid_perfect_square.md @@ -0,0 +1,42 @@ +###367. Valid Perfect Square + +题目: + + + + +难度: + +Medium + + +直接用循环做也可以AC + + +``` +class Solution(object): + def isPerfectSquare(self, num): + """ + :type num: int + :rtype: bool + """ + if num == 1 or num == 4 : return True + for i in xrange(num//2): + if i*i == num: + return True + elif i*i > num: + return False + return False + +``` + +然后发现有传说中的牛顿法 + +有待阅读,然后还有二分法 + +``` + r = x + while r*r > x: + r = (r + x/r) / 2 + return r*r == x +``` \ No newline at end of file diff --git a/369.Plus One Linked List.md b/369.Plus One Linked List.md new file mode 100644 index 000000000..92c64e78e --- /dev/null +++ b/369.Plus One Linked List.md @@ -0,0 +1,46 @@ +### 369.Plus One Linked List + +题目: + + +难度 : Medium + + + +类似题目: plus one,plus one 用递归和循环写了,对于linked list,因为most significant digit在首位,递归写起来不方便,用循环尝试,然后代码并没有实质上的区别。 + + + +``` +class Solution(object): + def plusOne(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + lst = [] + cur = head + + while cur: + lst.append(cur) + cur = cur.next + + carry = 1 + for i in range(len(lst)-1,-1,-1): + lst[i].val += carry + if lst[i].val < 10: + carry = 0 + break + else: + lst[i].val -= 10 + + if carry == 1: + node = ListNode(1) + node.next = head + return node + else: + return head +``` + + + diff --git a/371._sum_of_two_integers.md b/371._sum_of_two_integers.md new file mode 100644 index 000000000..675aa9724 --- /dev/null +++ b/371._sum_of_two_integers.md @@ -0,0 +1,95 @@ +###371. Sum of Two Integers + +题目: + + + +难度: + +Easy + + +思路 + + +谷歌答案 + + +位运算 + +``` +XOR +x y output +0 0 0 +1 0 1 +0 1 1 +1 1 0 + + +AND +x y output +0 0 0 +1 0 1 +0 1 1 +1 1 1 + +``` + +如果对x和y来做加法(x和y都是一位的),那么末位会是x xor y,进位会是x and y + + + + + +python没有左移,用c++来看 + +``` +class Solution { +public: + int getSum(int a, int b) { + while (b != 0 ){ + int c = a & b; + a = a ^ b; + b = c << 1; + } + return a; + } +}; +``` + +实际上看到答案还是没有那么明白的,还是动手算算 + + + +``` +a = 6 (0110) +b = 15 (1111) + + +1st +--------- +carry = a & b = 0110 +a = a ^ b = 1001 +b = 1100 + + +2nd +--------- +carry = a & b = 1000 +a = a ^ b = 0101 +b = 10000 + + +3rd +---------- + +carry = a & b = 0 +a = a ^ b = 10101 +b = 0 + +这个时候a 的值是2^4 + 2^2 + 2^0 = 16+4+1 = 21 +``` + +虽然convence了我自己,但是表示依旧迷茫ing + +也知道位运算需要待补啊 \ No newline at end of file diff --git a/377._combination_sum_iv.md b/377._combination_sum_iv.md new file mode 100644 index 000000000..88548d175 --- /dev/null +++ b/377._combination_sum_iv.md @@ -0,0 +1,77 @@ +###377. Combination Sum IV + +题目: + + + + +难度: + +Medium + + +直接用combination sum的思路: 超时 + +``` +class Solution(object): + def combinationSum4(self, candidates, target): + """ + :type candidates: List[int] + :type target: int + :rtype: List[List[int]] + """ + def combSum(candidates, target, start, valueList): + length = len(candidates) + if target == 0 : + res.append(valueList) + for i in range(start, length): + if target < candidates[i]: + return + combSum(candidates, target - candidates[i], 0, valueList + [candidates[i]]) + + candidates = list(set(candidates)) + candidates.sort() + res = [] + combSum(candidates, target, 0, []) + return len(res) +``` + + + + + +说起来标签是dp,也知道是dp啊,状态转移方程: + + + +参考: + + + +> +> +> 我们需要一个一维数组dp,其中dp[i]表示目标数为i的解的个数,然后我们从1遍历到target,对于每一个数i,遍历nums数组,如果i>=x, dp[i] += dp[i - x]。这个也很好理解,比如说对于[1,2,3] 4,这个例子,当我们在计算dp[3]的时候,3可以拆分为1+x,而x即为dp[2],3也可以拆分为2+x,此时x为dp[1],3同样可以拆为3+x,此时x为dp[0],我们把所有的情况加起来就是组成3的所有情况了 + + + +AC代码 + +``` +class Solution(object): + def combinationSum4(self, candidates, target): + """ + :type candidates: List[int] + :type target: int + :rtype: List[List[int]] + """ + dp = [0 for i in range(target+1)] + + dp[0] = 1 + + for i in range(target+1): + for candidate in candidates: + if i >= candidate: + dp[i] += dp[i - candidate] + return dp[-1] +``` + diff --git a/378._kth_smallest_element_in_a_sorted_matrix.md b/378._kth_smallest_element_in_a_sorted_matrix.md new file mode 100644 index 000000000..69ec45988 --- /dev/null +++ b/378._kth_smallest_element_in_a_sorted_matrix.md @@ -0,0 +1,61 @@ +###378. Kth Smallest Element in a Sorted Matrix + + + +题目: + + + +难度: +Medium + +思路: + + +两个tag : binary search, heap + +######先来heap + +1. 利用heap,先对第一行所有元素加入heap,每个元素下面同一列的元素必然比他们大 +2. 重复K-1次下面的过程 + - 取现在的root + - 将root下面的元素加入heap + +可以手写一个例子来看 + +参考: + + +``` +from heapq import * +class Solution(object): + def kthSmallest(self, matrix, k): + """ + :type matrix: List[List[int]] + :type k: int + :rtype: int + """ + if not matrix: + return 0 + + heap = [] + row = len(matrix) + col = len(matrix[0]) + + for i in range(col): + # heap store its value and location + heappush(heap, (matrix[0][i], 0, i)) + + print heap + + for j in range(k-1): + cur = heappop(heap) + x = cur[1] + y = cur[2] + if x+1 < row: + heappush(heap, (matrix[x+1][y],x+1,y)) + + return heap[0][0] +``` + +##### 必然还有利用binary search的算法 \ No newline at end of file diff --git a/380. Insert Delete GetRandom O(1).md b/380. Insert Delete GetRandom O(1).md new file mode 100644 index 000000000..401f3ee7f --- /dev/null +++ b/380. Insert Delete GetRandom O(1).md @@ -0,0 +1,159 @@ +### 380. Insert Delete GetRandom O(1) + + + +题目: + + + + +难度 : Hard + + + +我的naive TLE代码,关键还是在想这个getRandom,这就不是O(1)的: + + + +``` +class RandomizedSet(object): + + def __init__(self): + """ + Initialize your data structure here. + """ + self.container = {} + + + def insert(self, val): + """ + Inserts a value to the set. Returns true if the set did not already contain the specified element. + :type val: int + :rtype: bool + """ + # 1 stands for present + if val in self.container and self.container[val] == 1: + return False + else: + self.container[val] = 1 + return True + + + def remove(self, val): + """ + Removes a value from the set. Returns true if the set contained the specified element. + :type val: int + :rtype: bool + """ + if self.container.get(val,0) == 1: + self.container[val] = 0 + return True + else: + return False + + + + def getRandom(self): + """ + Get a random element from the set. + :rtype: int + """ + import random + keys = self.container.keys() + rd = random.randint(0, len(keys) - 1) + if self.container[keys[rd]] == 1: + return keys[rd] + elif self.container.get(keys[rd],0) == 0: + return self.getRandom() +``` + + + +也是有[stackoverflow问题界面的题目](http://stackoverflow.com/questions/5682218/data-structure-insert-remove-contains-get-random-element-all-at-o1#comment18171331_5684892): + +> Consider a data structure composed of a hashtable H and an array A. The hashtable keys are the elements in the data structure, and the values are their positions in the array. +> +> 1.insert(value): append the value to array and let i be its index in A. Set H[value]=i. +> +> 2.remove(value): We are going to replace the cell that contains value in A with the last element in A. let d be the last element in the array A at index m. let i be H[value], the index in the array of the value to be removed. Set A[i]=d, H[d]=i, decrease the size of the array by one, and remove value from H. +> +> 3.contains(value): return H.contains(value) +> +> 4.getRandomElement(): let r=random(current size of A). return A[r]. +> +> +> +> since the array needs to auto-increase in size, it's going to be amortize O(1) to add an element, but I guess that's OK. + + + + + +按照以答案AC代码 + +``` +class RandomizedSet(object): + + def __init__(self): + """ + Initialize your data structure here. + """ + self.hashtable = {} + self.array = [] + self.arraySize = 0 + + def insert(self, val): + """ + Inserts a value to the set. Returns true if the set did not already contain the specified element. + :type val: int + :rtype: bool + """ + # already in the set + if val in self.hashtable: + return False + else: + self.hashtable[val] = self.arraySize + self.array.append(val) + self.arraySize += 1 + return True + + + def remove(self, val): + """ + Removes a value from the set. Returns true if the set contained the specified element. + :type val: int + :rtype: bool + """ + if val not in self.hashtable: + return False + else: + removeIdx = self.hashtable[val] + if self.arraySize == 1: + self.__init__() + else: + self.array[removeIdx] = self.array[-1] + self.hashtable[self.array[-1]] = removeIdx + self.arraySize -= 1 + del self.hashtable[val] + del self.array[-1] + return True + + + + def getRandom(self): + """ + Get a random element from the set. + :rtype: int + """ + import random + rd = random.randint(0, self.arraySize-1) + return self.array[rd] +``` + + + + + +最后getRandom也可以写成: + +`return random.choice(self.array)` \ No newline at end of file diff --git a/381. Insert Delete GetRandom O(1) - Duplicates allowed.md b/381. Insert Delete GetRandom O(1) - Duplicates allowed.md new file mode 100644 index 000000000..9adb6cd32 --- /dev/null +++ b/381. Insert Delete GetRandom O(1) - Duplicates allowed.md @@ -0,0 +1,83 @@ +### 381. Insert Delete GetRandom O(1) - Duplicates allowed + + + +题目: + + + + +难度 : Hard + + + +一开始的想法是在380上面做简单的修改,比如用一个list来存每个数对应的location,但是这样remove会退化为O(N),然后看到: + +- 用 set 这个数据结构就可以贴近O(1) +- 学了一个新的东西`defaultdict`, 相当于 D.get('key',defaultvalue) + + + +这个defaultdict的好处就是添加的时候默认的值就是set,但是并不默认这个就存在 + + + +AC代码 + +``` +class RandomizedCollection(object): + + def __init__(self): + """ + Initialize your data structure here. + """ + import collections + self.hashtable = collections.defaultdict(set) + self.array = [] + + def insert(self, val): + """ + Inserts a value to the collection. Returns true if the collection did not already contain the specified element. + :type val: int + :rtype: bool + """ + valin = val not in self.hashtable + self.hashtable[val].add(len(self.array)) + self.array.append(val) + return valin + + def remove(self, val): + """ + Removes a value from the collection. Returns true if the collection contained the specified element. + :type val: int + :rtype: bool + """ + if val not in self.hashtable: + return False + else: + if self.array[-1] == val: + removeIdx = len(self.array) - 1 + self.hashtable[val].remove(removeIdx) + else: + # set pop remove arbitrary element + removeIdx = self.hashtable[val].pop() + self.array[removeIdx] = self.array[-1] + self.hashtable[self.array[-1]].remove(len(self.array) - 1) + self.hashtable[self.array[-1]].add(removeIdx) + if len(self.hashtable[val]) == 0: + del self.hashtable[val] + del self.array[-1] + return True + + + def getRandom(self): + """ + Get a random element from the collection. + :rtype: int + """ + import random + return random.choice(self.array) + +``` + +` \ No newline at end of file diff --git a/382._linked_list_random_node.md b/382._linked_list_random_node.md new file mode 100644 index 000000000..775a0b32d --- /dev/null +++ b/382._linked_list_random_node.md @@ -0,0 +1,79 @@ + +###382. Linked List Random Node + + +题目: + + + +难度: + +Medium + + + +tag:reservoir sampling 水塘抽样 + + +思路: + +n选k + + +这样来看,有k个元素,那么这个时候全部选中,当第k+1个元素进来的时候,生成一个随机数r,如果 r <= k,那么用它来替换第r个元素 + +那么r被替换掉的概率是 1 / k + 1, 不被替换掉的概率是 k / k + 1 (不生成r) + +k+2来继续: 被替换掉的概率 1 / k + 2, 不被替换掉的概率 (k + 1) / (k+2) + +所以最终被选中的(不被替换掉的概率是) k / n + +随机 √ + + +针对这道题目来看 + +- 一开始选head为choice +- 出现第二个,生成[1,2]之间的随机数,如果r = 2,则用新的来替换choice +- 出现第三个,生成[1,2,3]之间的随机数,如果r = 3,则替换 + +再写简单一点就是 + + +每次以 1/i 来决定是否用新的元素来替换选中元素,那么就是 i - 1 / i 不替换,它之前被选中的概率就是 1 / i-1 ,所以最终被选中的概率是 1/i + +这个对于linked list更优之处在于它不用reverse + +时间复杂度 O(N), 空间复杂度O(K) + + +然后AC + + +``` +class Solution(object): + + def __init__(self, head): + """ + @param head The linked list's head. + Note that the head is guaranteed to be not null, so it contains at least one node. + :type head: ListNode + """ + self.head = head + + def getRandom(self): + """ + Returns a random node's value. + :rtype: int + """ + choice = self.head + cur = self.head + i = 1 + while cur.next: + cur = cur.next + i += 1 + rd = random.randint(1,i) + if rd == i: + choice = cur + return choice.val +``` diff --git a/383._ransom_note.md b/383._ransom_note.md new file mode 100644 index 000000000..6d6e0cf2d --- /dev/null +++ b/383._ransom_note.md @@ -0,0 +1,37 @@ +###383. Ransom Note + +题目: + + + +难度 : Easy + + + +略微想了一下,用了一个dictionary来存magazine里面的单字出现的个数,然后来对应check是否可以用来组成ransomNote + + +``` +class Solution(object): + def canConstruct(self, ransomNote, magazine): + """ + :type ransomNote: str + :type magazine: str + :rtype: bool + """ + mapx = {} + for i in magazine: + if i not in mapx: + mapx[i] = 1 + else: + mapx[i] += 1 + + for i in ransomNote: + if i not in mapx: + return False + elif i in mapx: + mapx[i] -= 1 + if mapx[i] < 0: + return False + return True +``` diff --git a/384. Shuffle an Array.md b/384. Shuffle an Array.md new file mode 100644 index 000000000..bd3d126a9 --- /dev/null +++ b/384. Shuffle an Array.md @@ -0,0 +1,105 @@ +### 384. Shuffle an Array + + + +题目: + + + + +难度 : Medium + + + +思路: + + + +这就是洗牌算法吧,洗牌算法几种常见的: + + + +http://www.matrix67.com/blog/archives/879 + + + +也是有wikipedia page的: + +最简单的算法是很容易想到的, O(N^2) + +然后就是modern 算法: + + + +``` +-- To shuffle an array a of n elements (indices 0..n-1): +for i from n−1 downto 1 do + j ← random integer such that 0 ≤ j ≤ i + exchange a[j] and a[i] +``` + + + +这个感觉还是比较容易证明的,一开始生成的数字 1/n 概率 + +没选中,下一个 n-1 /n * 1/ n-1 = 1/n, 所以每个位置都是等概率的? + + + +这个有很妙的点: + +比如五个人顺序抽签,只要不uncover 结果,那么就是等概率的。 + + + +但是第一个人抽奖之后uncover结果,比如他没有抽中 → 那么概率就会变。 + + + + + + + +AC代码: + +``` +class Solution(object): + + def __init__(self, nums): + """ + + :type nums: List[int] + :type size: int + """ + self.lst = nums + + + def reset(self): + """ + Resets the array to its original configuration and return it. + :rtype: List[int] + """ + return self.lst + + + def shuffle(self): + """ + Returns a random shuffling of the array. + :rtype: List[int] + """ + import random + res = self.lst[:] + n = len(res) + for i in range(n-1,0,-1): + j = random.randint(0,i) + res[i], res[j] = res[j], res[i] + return res + +``` + + + + + + + diff --git a/387._first_unique_character_in_a_string.md b/387._first_unique_character_in_a_string.md new file mode 100644 index 000000000..db3256c39 --- /dev/null +++ b/387._first_unique_character_in_a_string.md @@ -0,0 +1,59 @@ +###387. First Unique Character in a String + +题目: + + + +难度: +Easy + + + +思路一: + +Python作弊法 + +用Python的Counter模块 + +可以参考 + + + + +``` +class Solution(object): + def firstUniqChar(self, s): + """ + :type s: str + :rtype: int + """ + import collections + d = collections.Counter(s) + for x,c in enumerate(s): + if d[c] == 1: + return x + return -1 +``` + + +思路二: + +利用问题的特性,因为只有可能是小写字母,所以可以用一个长度为26的array, 先数一遍char的数量,然后enumerate从左往右又来 + +``` +class Solution(object): + def firstUniqChar(self, s): + """ + :type s: str + :rtype: int + """ + cnt = [0 for i in range(26)] + for char in s: + cnt[ord(char) - ord('a')] += 1 + + for idx, char in enumerate(s): + if cnt[ord(char) - ord('a')] == 1: + return idx + return -1 + +``` diff --git a/389._find_the_difference.md b/389._find_the_difference.md new file mode 100644 index 000000000..a26bc73ae --- /dev/null +++ b/389._find_the_difference.md @@ -0,0 +1,47 @@ + +###389. Find the Difference + + +题目: + + + +难度: + +Easy + + +思路 + +用两个hashmap分别来记录 s 和 t 中char的数量,一旦t[key] > s[key], output + +注意这个好的写法 + + +mapt[char] = mapt.get(char,0) + 1 + +如果mapt[char]不存在,会默认给1 + + + +``` +class Solution(object): + def findTheDifference(self, s, t): + """ + :type s: str + :type t: str + :rtype: str + """ + maps = {} + mapt = {} + for char in s: + maps[char] = maps.get(char,0) + 1 + for char in t: + mapt[char] = mapt.get(char,0) + 1 + + for key in mapt: + if mapt[key] - maps.get(key,0) > 0: + return key +``` + + diff --git a/392._is_subsequence.md b/392._is_subsequence.md new file mode 100644 index 000000000..b7727173b --- /dev/null +++ b/392._is_subsequence.md @@ -0,0 +1,69 @@ + +###392. Is Subsequence + + +题目: + + + +难度: + +Medium + + +思路 + + +follow up question很有意思 + + +最naive的思路表现形式如下: + +超时 + +``` +class Solution(object): + def isSubsequence(self, s, t): + """ + :type s: str + :type t: str + :rtype: bool + """ + if s == "": return True + for i in xrange(len(t)): + if t[i] == s[0]: + return self.isSubsequence(s[1:],t[i+1:]) + + return False +``` + +因为直接操作string的昂贵以及递归的昂贵 + +同样的思路 + + +``` +class Solution(object): + def isSubsequence(self, s, t): + """ + :type s: str + :type t: str + :rtype: bool + """ + if s == "" : return True + + ps, pt = 0, 0 + lens, lent = len(s), len(t) + while ps < lens and pt < lent: + if s[ps] == t[pt]: + ps += 1 + pt += 1 + else: + pt += 1 + + return ps >= lens +``` + +AC + + diff --git a/394._decode_string.md b/394._decode_string.md new file mode 100644 index 000000000..a9eabe7f1 --- /dev/null +++ b/394._decode_string.md @@ -0,0 +1,70 @@ +###394. Decode String + + +题目: + + + + +难度: + +Medium + + +思路: + +感觉像用栈做运算。 + +s = "3[a2[c]]" + +⬇️ + +s = 3 *( a + 2 * ( c ) ) + + +遇到非右括号全部入栈,碰到右括号出栈直到左括号,这个就算运算符2 → op2 +然后检查,直到stack空掉或者碰到下一个非数字,这个就算运算符1 → op1 + +算出op1 和 op2 之后把这个res继续入栈。然后接着处理 + + +代码不是很优美 + + + + +``` +class Solution(object): + def decodeString(self, s): + """ + :type s: str + :rtype: str + """ + + s = list(s) + stack = [] + + while s: + char = s.pop(0) + if char != ']': + stack.append(char) + else: + op1, op2 = '','' + popChar = stack.pop() + while popChar != '[': + op2 = popChar + op2 + popChar = stack.pop() + + while stack and stack[-1] in ['0','1','2','3','4','5','6','7','8','9']: + popChar = stack.pop() + op1 = popChar + op1 + + res = int(op1) * op2 + + for char in res: + stack.append(char) + + return ''.join(stack) +``` + + diff --git a/400. Nth Digit.md b/400. Nth Digit.md new file mode 100644 index 000000000..6cc93ab3e --- /dev/null +++ b/400. Nth Digit.md @@ -0,0 +1,46 @@ +### 400. Nth Digit + + + +题目: + + +难度: + +Easy + +思路: + +这道简单题我服, tag是math,找规律 + +``` +1- 9 : 9 → 只占1位 9 +10 - 99: 90 → 两位 90 * 2 +100 - 999: 900 → 三位 900 * 3 +1000 - 9999: 9000 → 四位 9000 * 4 +``` + + + +AC代码来之不易,是参考别人的,这里的`for i in range(9)`, 其实无论`range`多少都可以吧 + + + +``` +class Solution(object): + def findNthDigit(self, n): + """ + :type n: int + :rtype: int + """ + for i in range(9): + d = 9 * 10 ** i + if n <= d * (i+1): break + n -= d *(i+1) + n -= 1 + + return int(str(10**i + n / (i+1))[n % (i+1)]) +``` + + + diff --git a/401._binary_watch.md b/401._binary_watch.md new file mode 100644 index 000000000..00f217e7f --- /dev/null +++ b/401._binary_watch.md @@ -0,0 +1,60 @@ +###401. Binary Watch + + + +题目: + + + +难度: +Easy + + +思路: + + +一看到位操作,我的内心是拒绝的。 + +我也有想这样的想法,因为其实可以的组合并没有那么多,干脆枚举算了,然而也没有动手来写,直到被发了题解的截屏。 + + +``` +class Solution(object): + def readBinaryWatch(self, num): + """ + :type num: int + :rtype: List[str] + """ + hour = { 0 : ['0'], + 1:['1','2','4','8'], + 2:['3','5','6','9','10'], + 3:['7','11'] + } + + minute = { 0:['00'], + 1: ['01','02','04','08','16','32'], + 2: ['03','05','06','09','10','12','17','18','20','24','33','34','36','40','48'], + 3: ['07','11','13','14','19','21','22','25','26','28','35','37','38','41','42','44','49','50','52','56'], + 4: ['15','23','27','29','30','39','43','45','46','51','53','54','57','58'], + 5: ['31','47','55','59'] + } + + res = [] + + #num = num for hour + num for minute + i = 0 + + while i <= 3 and i <= num: + if num - i <= 5: + for str1 in hour[i]: + for str2 in minute[num-i]: + res.append(str1 + ':' + str2) + i += 1 + return res +``` + + +关于循环那处,因为hour的led最多只有4个,所以这样写循环 + + + diff --git a/404._sum_of_left_leaves.md b/404._sum_of_left_leaves.md new file mode 100644 index 000000000..b6cda537c --- /dev/null +++ b/404._sum_of_left_leaves.md @@ -0,0 +1,45 @@ +###404. Sum of Left Leaves + + + +题目: + + + +难度: +Easy + + +思路: + + +典型递归,检查root的左孩子是不是node,是的话加上它的值,不是的话递归去求它的孩子们的,对于右边,递归的求sum of left leaves + + + +``` +class Solution(object): + def sumOfLeftLeaves(self, root): + """ + :type root: TreeNode + :rtype: int + """ + def isLeaf(node): + if node == None: + return False + if node.left == None and node.right == None: + return True + return False + + res = 0 + + if root: + if isLeaf(root.left): + res += root.left.val + else: + res += self.sumOfLeftLeaves(root.left) + if root.right: + res += self.sumOfLeftLeaves(root.right) + + return res +``` \ No newline at end of file diff --git a/405. Convert a Number to Hexadecimal.md b/405. Convert a Number to Hexadecimal.md new file mode 100644 index 000000000..5bcb3ec36 --- /dev/null +++ b/405. Convert a Number to Hexadecimal.md @@ -0,0 +1,114 @@ +### 405. Convert a Number to Hexadecimal + +题目: + + + +难度: + +Easy + + + +wikipedia两个page: + + + +[十六进制](https://zh.wikipedia.org/wiki/十六进制#.E5.8D.81.E9.80.B2.E5.88.B6.E8.BD.89.E5.8D.81.E5.85.AD.E9.80.B2.E5.88.B6) + +例子: + +4877÷16=304....13(D) + +304÷16=19....0 + +19÷16=1....3 + +1÷16=0....1 + +這樣就計到4877(10)=130D(16) + + + +[补码](https://zh.wikipedia.org/wiki/二補數) + +> 一個數字的二補數就是將該數字作[位元](https://zh.wikipedia.org/wiki/%E4%BD%8D%E5%85%83)[反相](https://zh.wikipedia.org/w/index.php?title=%E5%8F%8D%E7%9B%B8&action=edit&redlink=1)運算(即[一補數](https://zh.wikipedia.org/wiki/%E4%B8%80%E8%A3%9C%E6%95%B8)或[反码](https://zh.wikipedia.org/wiki/%E5%8F%8D%E7%A0%81)),再將結果加1。在二補數系統中,一個負數就是用其對應正數的二補數來表示 + + + +看给的这个-1的例子 + + + +0000 0000 0000 0000 0000 0000 0000 0001 + +1111 1111 1111 1111 1111 1111 1111 1110 +1 + +1111 1111 1111 1111 1111 1111 1111 1111 + +f f f f f f f f + + + + + +也可以参考这里: + +[基础03:原码、反码、补码](https://higoge.github.io/2015/07/02/basic03/) + + + +这里我一开始迷茫和晕了一下,但是随后反应过来,这些数字在电脑里使用二进制存的,而负数也是用二进制的补码存的。所以其实AC代码应当很简单。 + +参考: + + + + + +AC代码: + +``` +class Solution(object): + def toHex(self, num): + """ + :type num: int + :rtype: str + """ + if not num : + return "0" + + result = [] + hexStr ="0123456789abcdef" + while num and len(result) != 8: + h = num & 15 + result.append(hexStr[h]) + num >>= 4 + + return ''.join(result[::-1]) +``` + + + +每次看后四位的结果,把它存起来,比如还是是看4877 + +它在计算机内部的表示是: + +``` +0b1001100001101 +num & 15 1101 & 15 = 13(d) +num >>=4 0b100110000 +num & 15 0000 & 15 = 0 +num >>=4 0b10011 +num & 15 10011 & 15 = 9 +num >>=4 0001 +num & 15 0001 & 15 = 1 + +``` + + + + + + + diff --git a/412._fizz_buzz.md b/412._fizz_buzz.md new file mode 100644 index 000000000..7d9ee87f5 --- /dev/null +++ b/412._fizz_buzz.md @@ -0,0 +1,35 @@ +###412. Fizz Buzz + +题目: + + + +难度: +Easy + + +``` +class Solution(object): + def fizzBuzz(self, n): + """ + :type n: int + :rtype: List[str] + """ + res = [] + + for i in range(1,n+1): + item = '' + if i % 3 == 0: + item += 'Fizz' + if i % 5 == 0: + item += 'Buzz' + res.append(item || str(n)) + return res + +``` + +就是easy,不过可以参见这里,有一些讨论 + + + +我觉得这里一个用yield的想法还蛮不错 \ No newline at end of file diff --git a/413. Arithmetic Slices.md b/413. Arithmetic Slices.md new file mode 100644 index 000000000..6aff8c826 --- /dev/null +++ b/413. Arithmetic Slices.md @@ -0,0 +1,84 @@ +### 413. Arithmetic Slices + + + +题目: + + + + +难度 : Medium + + + +思路: + +tag 是DP + +数从 i 到 j 之间的这个arithmetic 数 + +我的方法时间复杂度比较高O(N^2),从 i 开始数它的arithmetic slice,每个i数一遍,到 j + +AC代码 + +``` +class Solution(object): + def numberOfArithmeticSlices(self, A): + """ + :type A: List[int] + :rtype: int + """ + n = len(A) + if n < 3: + return 0 + else: + res = 0 + for i in range(n-2): + for j in range(i+2,n): + if A[j] - A[j-1] == A[i+1] - A[i]: + res += 1 + else: + break + return res +``` + + + +应该可以优化到O(N) + +不需要每个每个开始数,可以边数边移动 + +可以参考 + + + +O(N) 代码 + +``` +class Solution(object): + def numberOfArithmeticSlices(self, A): + """ + :type A: List[int] + :rtype: int + """ + n = len(A) + if n < 3: + return 0 + else: + res, cnt = 0, 2 + for i in range(2, n): + if A[i] - A[i-1] == A[i-1] - A[i-2]: + print i, i-1, i-2 + cnt += 1 + else: + if cnt > 2: + res += (cnt-1) * (cnt-2) / 2 + cnt = 2 + if cnt > 2: res += (cnt-1) * (cnt-2) / 2 + return res + + +``` + + + diff --git a/414._third_maximum_number.md b/414._third_maximum_number.md new file mode 100644 index 000000000..fc3652b98 --- /dev/null +++ b/414._third_maximum_number.md @@ -0,0 +1,46 @@ +###414. Third Maximum Number + +题目: + + + +难度: + +Easy + + +思路: + +用三个变量来记录,max, secondmax, thirdmax, + +- 遇到比max还大的就更新,当前max降级为secondmax,当前secondmax降级为thirdmax +- 遇到比max小但是比secondmax大的也这样做降级处理 +- 更thirdmax + + +AC代码 + + +``` +class Solution(object): + def thirdMax(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + m, sm, tm = float('-inf'), float('-inf'), float('-inf') + + for num in nums: + if num > m: + tm = sm + sm = m + m = num + elif num < m and num > sm: + tm = sm + sm = num + elif num < m and num < sm and num > tm: + tm = num + + return tm if tm != float('-inf') else m +``` + diff --git a/415._add_strings.md b/415._add_strings.md new file mode 100644 index 000000000..bfa319cdf --- /dev/null +++ b/415._add_strings.md @@ -0,0 +1,61 @@ +###415. Add Strings + +题目: + + + +难度: +Easy + + +照抄2. Add Two Numbers的代码,超时 + +``` +class Solution(object): + def addStrings(self, num1, num2): + """ + :type num1: str + :type num2: str + :rtype: str + """ + if num1 == '' or num1 == '0': + return num2 + if num2 == '' or num2 == '0': + return num1 + if int(num1[-1]) + int(num2[-1]) < 10: + num3 = str(int(num1[-1]) + int(num2[-1]) ) + return self.addStrings(num1[:-1] , num2[:-1]) + num3 + else: + num3 = str(int(num1[-1]) + int(num2[-1]) - 10) + return self.addStrings(self.addStrings(num1[:-1] , num2[:-1]),'1') + num3 +``` + + + +换成迭代,并非递归再来尝试,看了别人的代码,真是精巧啊 + + +``` +class Solution(object): + def addStrings(self, num1, num2): + """ + :type num1: str + :type num2: str + :rtype: str + """ + result = [] + carry = 0 + idx1, idx2 = len(num1), len(num2) + while idx1 or idx2 or carry: + digit = carry + if idx1: + idx1 -= 1 + digit += int(num1[idx1]) + if idx2: + idx2 -= 1 + digit += int(num2[idx2]) + carry = digit > 9 + result.append(str(digit % 10)) + print result + return ''.join(result[::-1]) # 这里是reverse一下 +``` \ No newline at end of file diff --git a/416. Partition Equal Subset Sum.md b/416. Partition Equal Subset Sum.md new file mode 100644 index 000000000..1dee2d982 --- /dev/null +++ b/416. Partition Equal Subset Sum.md @@ -0,0 +1,87 @@ +### 416. Partition Equal Subset Sum + + + +题目: + + +难度: + +Medium + +记得算法考试考过证明这个问题是NP的,当时用的是subset sum是NP,然后来证明这个?如果我们能找到一个subset的sum是整个array sum的一半,那么问题解决。subset sum我们又可以继续转化,转成背包问题。 + +值得注意的是,这是subset sum,并不是subarray sum(这个明显要简单一些,因为subarray是连着的). + +subset sum也是有自己的[wikipedia page](https://en.wikipedia.org/wiki/Subset_sum_problem). + + + +当然,这也是一个subset problem,我们当然也可以用subset,加入和不加入,但是worst case O(2^n). + + + +对于subset sum的递推方程式: + +subset(arr,n,s) = subset(arr,n-1,s) or subset(arr, n-1, s- arrp[n-1]) + + + +画表可以开始,第一列全为1,是因为不选全部可以为0 + + + +``` + 0 1 2 3 4 5 6 8 9 10 11 +0 1 0 0 0 0 0 0 0 0 0 0 +1 1 1 0 0 0 0 0 0 0 0 0 +5 1 1 0 0 0 1 1 0 0 0 0 +5 1 1 0 0 0 1 1 0 0 0 1 +``` + + + +所以伪多项式算法写出来 + +AC代码 + + + +``` +class Solution(object): + def canPartition(self, nums): + """ + :type nums: List[int] + :rtype: bool + """ + def subset(nums, s): + dp = [[0 for i in range(s+1) ] for j in range(len(nums)+1)] + + dp[0][0] = 1 + # init the first col + for i in range(len(nums)+1 + dp[i][0] = 1 + + for i in range(1,len(nums)+1): + for j in range(1,s+1): + if dp[i-1][j] == 1: + dp[i][j] = 1 + elif j >= nums[i-1] and dp[i-1][j-nums[i-1]] ==1: + dp[i][j] = 1 + return dp[-1][-1] == 1 + + + + total = sum(nums) + if total % 2 == 1: + return False + else: + half = total / 2 + return subset(nums,half) == 1 + +``` + + + +当然可以小调整,比如一旦发现,提前return等等,但是时间上依旧是后20%,不知道时间上快很多的人是如何做到的||| + diff --git a/422. Valid Word Square.md b/422. Valid Word Square.md new file mode 100644 index 000000000..17cb1144d --- /dev/null +++ b/422. Valid Word Square.md @@ -0,0 +1,48 @@ +### 422. Valid Word Square + + + + + +题目: + + + + +难度 : Easy + + + +思路: + +就是对比一个矩阵内 xy == yx? + +try /except 真是好用 + +AC代码 + + + +``` +class Solution(object): + def validWordSquare(self, words): + """ + :type words: List[str] + :rtype: bool + """ + n = len(words) + for i in xrange(n): + m = len(words[i]) + for j in xrange(m): + try: + if words[i][j] != words[j][i]: + return False + except: + return False + return True +``` + + + + + diff --git a/434._number_of_segments_in_a_string.md b/434._number_of_segments_in_a_string.md new file mode 100644 index 000000000..2f478e20c --- /dev/null +++ b/434._number_of_segments_in_a_string.md @@ -0,0 +1,27 @@ +###434. Number of Segments in a String + +题目: + + + +难度: + +Easy + + +作弊神器Python + + +``` +class Solution(object): + def countSegments(self, s): + """ + :type s: str + :rtype: int + """ + return len(s.split()) +``` + +不过对于比如C++这种语言来说,应该是O(N),扫一圈应该也能得到正确答案 + +总之拿Python做string的题目就是作弊啊 \ No newline at end of file diff --git a/437._path_sum_iii.md b/437._path_sum_iii.md new file mode 100644 index 000000000..5d738d2b9 --- /dev/null +++ b/437._path_sum_iii.md @@ -0,0 +1,51 @@ +###437. Path Sum III + + + +题目: + + + +难度: +Easy + +思路: + +这题一看到,时间复杂度就把我给吓尿了,不是么|||科科 + +我的🐟👄的代码 + +是有优化,待做 + + + +``` +# Definition for a binary tree node. +# class TreeNode(object): +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None + +class Solution(object): + def pathSum(self, root, sum): + """ + :type root: TreeNode + :type sum: int + :rtype: int + """ + # empty + def nodeValue(root, sum): + if not root: return 0 + # one node + if root.val == sum: + return 1 + nodeValue(root.left, 0) + nodeValue(root.right,0) + else: + return nodeValue(root.left, sum - root.val) + nodeValue(root.right, sum - root.val) + + if not root: return 0 + ans = nodeValue(root,sum) + ans += self.pathSum(root.left, sum) + ans += self.pathSum(root.right, sum) + return ans +``` \ No newline at end of file diff --git a/439. Ternary Expression Parser.md b/439. Ternary Expression Parser.md new file mode 100644 index 000000000..065f56cd7 --- /dev/null +++ b/439. Ternary Expression Parser.md @@ -0,0 +1,58 @@ +### 439. Ternary Expression Parser + + + + + +题目: + + + + +难度: +Medium + +思路: + +其实这个和算术运算蛮像,但是不同于运算,有operator precedence差别,这个是三目运算,并且需要检查是否符合运算规则。 + + + +运用stack 然后每次查看是否形成运算式再来做处理 + +AC代码: + +``` +class Solution(object): + def parseTernary(self, expression): + """ + :type expression: str + :rtype: str + """ + n = len(expression) + + stack = [] + + for i in range(n-1, -1, -1): + char = expression[i] + stack.append(char) + + if len(stack) >= 5: + op0 = stack.pop() + op1 = stack.pop() + op2 = stack.pop() + op3 = stack.pop() + op4 = stack.pop() + + if op1 == '?' and op3 == ':': + res = op2 if op0 == 'T' else op4 + stack.append(res) + else: + stack.append(op4) + stack.append(op3) + stack.append(op2) + stack.append(op1) + stack.append(op0) + return stack[0] +``` + diff --git a/441._arranging_coins.md b/441._arranging_coins.md new file mode 100644 index 000000000..5ef0dae95 --- /dev/null +++ b/441._arranging_coins.md @@ -0,0 +1,29 @@ +###441. Arranging Coins + +题目: + + + +难度: +Easy + + +可以直接O(1),公式: + +i(i+1)/2 = n + +解i + +i = ( sqrt(8*n+1) -1 )/ 2 + + +``` +import math +class Solution(object): + def arrangeCoins(self, n): + """ + :type n: int + :rtype: int + """ + return int((math.sqrt( 8 * n + 1) - 1 )/ 2 ) +``` \ No newline at end of file diff --git a/450. Delete Node in a BST.md b/450. Delete Node in a BST.md new file mode 100644 index 000000000..81c26c173 --- /dev/null +++ b/450. Delete Node in a BST.md @@ -0,0 +1,62 @@ +### 450. Delete Node in a BST + + + +题目: + + +难度 : Medium + + + +思路: + +从二叉搜索树中删除节点x的方法如下: + +• 如果x没有子节点,或者只有一个孩子,直接将x“切下”; + +• 否则,x有两个孩子,我们用其右子树中的最小值替换掉x,然后将右子树中的这一最小值递归的“切掉”。 +​ + + + +AC代码 + + + +``` +class Solution(object): + def deleteNode(self, root, key): + """ + :type root: TreeNode + :type key: int + :rtype: TreeNode + """ + def findmin(root): + while root.left: + root = root.left + return root + + + if not root : return None + elif key < root.val: root.left = self.deleteNode(root.left, key) + elif key > root.val : root.right = self.deleteNode(root.right, key) + else: + if root.left and root.right: + tmp = findmin(root.right) + root.val = tmp.val + root.right = self.deleteNode(root.right, tmp.val) + else: + if not root.left: + root = root.right + elif not root.right: + root = root.left + return root +``` + +​ + + + +其实这个代码还是需要花点时间来理解,需要画个图,理解这个root是每个stack return回去然后被接在原来的树上的,if 这个node并不是在node左右。 + diff --git a/453. Minimum Moves to Equal Array Elements.md b/453. Minimum Moves to Equal Array Elements.md new file mode 100644 index 000000000..064670f71 --- /dev/null +++ b/453. Minimum Moves to Equal Array Elements.md @@ -0,0 +1,72 @@ +### 453. Minimum Moves to Equal Array Elements + + + + + +题目: + + + + +难度 : Easy + + + +思路: + +naive TLE 代码: + +每次都是给并不是最大的元素加1直到全部相等。 + +``` +class Solution(object): + def minMoves(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + res = 0 + while(not all(x == nums[0] for x in nums)): + nums.sort() + for i in range(len(nums) - 1): + nums[i] += 1 + res += 1 + + return res +``` + + + +给的测试例子是 `[1,2147483647]`能不TLE么?tag 是Math,所以要用观察到的结果来做吧? + +所以就是每个和最小值来比,看到底要增加多少,这是观察,但不是证明 + + + + + +AC代码 + +``` +class Solution(object): + def minMoves(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + res = 0 + minVal = min(nums) + for num in nums: + res += num -minVal + return res +``` + + + +类证明: + + + +> 其实给n-1个数字加1,效果等同于给那个未被选中的数字减1,比如数组[1,2,3], 给除去最大值的其他数字加1,变为[2,3,3],我们全体减1,并不影响数字间相对差异,变为[1,2,2],这个结果其实就是原始数组的最大值3自减1,那么问题也可能转化为,将所有数字都减小到最小值,这样难度就大大降低了,我们只要先找到最小值,然后累加每个数跟最小值之间的差值即可 + diff --git a/461. Hamming Distance.md b/461. Hamming Distance.md new file mode 100644 index 000000000..1a8e05606 --- /dev/null +++ b/461. Hamming Distance.md @@ -0,0 +1,53 @@ +### 461. Hamming Distance + + + +题目: + For binary strings *a* and *b* the Hamming distance is equal to the number of ones ([Hamming weight](https://en.wikipedia.org/wiki/Hamming_weight)) in *a* [XOR](https://en.wikipedia.org/wiki/Exclusive_or) *b*. +> +> + +AC代码 + +``` +class Solution(object): + def hammingDistance(self, x, y): + """ + :type x: int + :type y: int + :rtype: int + """ + dist = 0 + val = x ^ y + + while val: + dist += 1 + val &= val - 1 + + return dist +``` + + + + + diff --git a/469. Convex Polygon.md b/469. Convex Polygon.md new file mode 100644 index 000000000..2afb7d070 --- /dev/null +++ b/469. Convex Polygon.md @@ -0,0 +1,88 @@ +### 469. Convex Polygon + + + +题目: + You can make things a lot easier than the Gift-Wrapping Algorithm... that's a good answer when you have a set of points w/o any particular boundary and need to find the convex hull. +> +> A polygon is a set of points in a list where the consecutive points form the boundary. It is much easier to figure out whether a polygon is convex or not (and you don't have to calculate any angles, either): +> +> +> +> For each consecutive pair of edges of the polygon (each triplet of points), compute the z-component of the cross product of the vectors defined by the edges pointing towards the points in increasing order. Take the cross product of these vectors: +> +> The polygon is convex if the z-components of the cross products are either all positive or all negative. Otherwise the polygon is nonconvex. +> +> given p[k], p[k+1], p[k+2] each with coordinates x, y: +> +>  dx1 = x[k+1]-x[k] +> +>  dy1 = y[k+1]-y[k] +> +>  dx2 = x[k+2]-x[k+1] +> +>  dy2 = y[k+2]-y[k+1] +> +>  zcrossproduct = dx1 * dy2 - dy1 * dx2 +> +> If there are N points, make sure you calculate N cross products, e.g. be sure to use the triplets (p[N-2],p[N-1],p[0]) and (p[N-1],p[0],p[1]). + + + +所以根据这个答案AC代码 + +``` +class Solution(object): + def isConvex(self, points): + """ + :type points: List[List[int]] + :rtype: bool + """ + n = len(points) + zcrossproduct = None + + for i in range(-2, n-2): + x = [ points[i][0], points[i+1][0], points[i+2][0] ] + y = [ points[i][1], points[i+1][1], points[i+2][1] ] + + dx1 = x[1] - x[0] + dy1 = y[1] - y[0] + + dx2 = x[2] - x[1] + dy2 = y[2] - y[1] + + if not zcrossproduct: + zcrossproduct = dx1 * dy2 - dy1 * dx2 + elif ( dx1 * dy2 - dy1 * dx2 ) * zcrossproduct < 0: + return False + return True +``` + diff --git a/70. Climbing Stairs.md b/70. Climbing Stairs.md new file mode 100644 index 000000000..10df88fcc --- /dev/null +++ b/70. Climbing Stairs.md @@ -0,0 +1,67 @@ +###70. Climbing Stairs + + +题目: + + + +难度: +Easy + +思路: + +Fibonacci 的DP版本 + +对于DP的不同理解造成不同的写法 + +- memoize + + +``` +memo = {} +def fib(n): + if n in memo: return memo[n] + else: + if n <= 2 : f = 1 + else: f = fib(n-1) + fib(n-2) + memo[n] = f + return f +``` +- bottom up + +``` +fib = {} +for k in range(n): + if k <= 2 : f = 1 + else: f = fib[n-1] + fib[n-2] + fib[k] = f +return fib(n) +``` + + + +感觉针对这个问题,我觉得bottom up更容易理解一点,其实就是倒着往大的长树, + +这里memo用dict,用array也一样。当然用bottom up还有一点,可以只存每次最后两个数,可以save space.,这样就只用到constant space. + +AC 代码 + +``` +class Solution(object): + def climbStairs(self, n): + """ + :type n: int + :rtype: int + """ + memo = {} + memo[1] = 1 + memo[0] = 1 + + for i in range(2,n+1): + f = memo[i-1] + memo[i-2] + memo[i] = f + return memo[n] +``` + + + diff --git "a/Binary Search \344\270\215\346\230\223\345\206\231.md" "b/Binary Search \344\270\215\346\230\223\345\206\231.md" new file mode 100644 index 000000000..0b07a1c98 --- /dev/null +++ "b/Binary Search \344\270\215\346\230\223\345\206\231.md" @@ -0,0 +1,91 @@ +### Binary Search 不易写 + + + +坊间一直有binary search不容易写对的传言,一写还真是||| + +值得注意的是这里的u位置上的元素搜索是不包括的 + +先献上递归版本伪码: + +``` +function Binary_Search(x, A, l, u) + if u < l then + No found error + else + m ← l + [ ( u - l ) / 2 ] //避免溢出 + if A[m] = x then + return m + if x < A[m] then + return Binary-Search(x, A, l, m - 1) + else + return Binary-Search(x, A, m + 1, u) +``` + + + +迭代版本伪码: + + + +``` +function Binary_Search(x, A, l, u) + while l < u do + m ← l + [ ( u - l ) / 2 ] + if A[m] = x then + return m + if x < A[m] then + u ← m - 1 + else + l ← m + 1 + return NIL + +``` + + + + + +或者这样,正确代码 + +``` +def binarySearch(nums, target): + l, r = 0, len(nums) -1 + while l <= r: + mid = (l+r) / 2 + if nums[mid] == target: + return mid + elif nums[mid] > target: + r = mid - 1 + else: + l = mid + 1 + return -1 +``` + + + + + +这样就不对 + +``` +def binarySearch(nums, target): + l, r = 0, len(nums) + while l < r: + mid = (l+r) / 2 + if nums[mid] == target: + return mid + elif nums[mid] > target: + r = mid - 1 + else: + l = mid + 1 + return -1 + +print binarySearch([1,2,3,4,5,6],1) +// → -1 +``` + + + +之所以binary Search很容易不对,是因为边界状况,所以觉得一上来应当检查边界状况 + diff --git a/Data Structure and Algorthim Review.md b/Data Structure and Algorthim Review.md new file mode 100644 index 000000000..61c9c7d68 --- /dev/null +++ b/Data Structure and Algorthim Review.md @@ -0,0 +1,101 @@ + + +### Data Structure and Algorthim Review + + + +- [x] Binary Search Tree + + - [x] 插入 + + • 如果树为空,创建一个叶子节点,令该节点的key = k; + • 如果k小于根节点的key,将它插入到左子树中; + • 如果k大于根节点的key,将它插入到右子树中。 + + - [x] 遍历 + + • 前序: 根,左,右 + + • 中序:左,根,右 **有序** + + • 后序:左,右,根 + + - [x] 搜索 + + - look up : 是否存在 + + ​• 如果树为空,搜索失败; + ​• 如果根节点的key等于待搜索的值,搜索成功,返回根节点作为结果; + ​• 如果待搜索的值小于根节点的key,继续在左子树中递归搜索; + ​• 否则,待搜索的值大于根节点的key,继续在右子树中递归搜索。 + + - 最大元素和最小元素 + + ​ • 最右和最左 + + - 前驱(Successor)和后继(predecessor) + + ​ 给定元素x,它的后继元素y是满足y > x的最小值 + + ​ • 如果x所在的节点有一个非空的右子树,则右子树中的最小值就是答案 + + ​ • 否则我们需要向上回溯,找到最近的一个祖先,使得该祖先的左侧孩子,也为x的祖 先。 + ​ + + - [x] 删除 + + • 如果x没有子节点,或者只有一个孩子,直接将x“切下”; + + • 否则,x有两个孩子,我们用其右子树中的最小值替换掉x,然后将右子树中的这一最小值“切掉”。 + + + + + + +- [x] 递归 + - [x] 入门 + + - 回文 + - 阶乘 factorial, 慕指数 + - 分形 + - Tower of Hanoi + + - [x] 排列 Permutation + + - [x] 子集 Subsets + + - [ ] backtracking + + +- [x] dynamic programming + + - coin change + + - longest common subsequence + + - edit distance + + ​ + + + + +-[ ] majority element + + + +- [ ] 随机 + - 水塘抽样 + - 洗牌 + + +-[ ] 荷兰旗问题 + + +-[ ] quick select + + +-[ ] median of two sorted array +-[ ] regular expression + diff --git a/Dynamic Programming.md b/Dynamic Programming.md new file mode 100644 index 000000000..102d032c3 --- /dev/null +++ b/Dynamic Programming.md @@ -0,0 +1,48 @@ +### Dynamic Programming + + + +- Fibonacci Numbers +- Shortest Path (no cycles) + + + + + + + +- subproblems + +- guessing + +- relate subproblems + +- recurse & memoize (bulid DP table) + +- solve original problem + + ​ + + + + + + +​ +​ +​ + +感觉DP有几类: + +- 容易写出递推公式的 + +- 画表更容易理解的 + + ​ + +* DP ≈ “controlled brute force” + +* DP ≈ recursion + re-use + + ​ + diff --git "a/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" "b/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..110950bf9b2bd29f84cf9ecb7494b50cc39a4531 GIT binary patch literal 117543 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 ZIXEJ|$lM;b2)}r^xG@ 2 -> 3 -> 4: 2 +1 -> 2 -> 3 -> 4 -> 5 -> 6 : 3 +1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 : 4 + +``` + +算法: + +``` + +def findMid(head): + if head == None or head.next == None: + return head + + slow = head + fast = head + + while fast.next and fast.next.next: + slow = slow.next + fast = fast.next.next + + return slow +``` + + + + + + diff --git a/Maximal Square.pdf b/Maximal Square.pdf new file mode 100644 index 0000000000000000000000000000000000000000..235cd3b86547102c2de81ebaedb59cd4f3f40b63 GIT binary patch literal 185749 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

nmjyQ;g|b;Y564!PqP2RUiNY>yl8W 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�FU!1x&BVxNlap@CYlh{`s}v_bF~3?L4m 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%0Du5VL_t(#fdh6f* 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

>P2TcZH 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 AYybcN literal 0 HcmV?d00001 diff --git "a/images/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\273\347\273\223.md" "b/images/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\273\347\273\223.md" deleted file mode 100644 index 8b1378917..000000000 --- "a/images/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\273\347\273\223.md" +++ /dev/null @@ -1 +0,0 @@ - diff --git "a/images/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\273\347\273\223.png" "b/images/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\273\347\273\223.png" new file mode 100644 index 0000000000000000000000000000000000000000..dbc5b0ef96052d9dc13492d055920dfdcb741b08 GIT binary patch literal 56719 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 literal 0 HcmV?d00001 diff --git "a/images/\345\206\222\346\263\241\346\216\222\345\272\217.gif" "b/images/\345\206\222\346\263\241\346\216\222\345\272\217.gif" new file mode 100644 index 0000000000000000000000000000000000000000..f190e62de9fa4b77f9ebfd9184131e4815d03b49 GIT binary patch literal 106607 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�=dUgBMD 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

    $0&C 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 literal 0 HcmV?d00001 diff --git "a/images/\345\237\272\346\225\260\346\216\222\345\272\217.gif" "b/images/\345\237\272\346\225\260\346\216\222\345\272\217.gif" new file mode 100644 index 0000000000000000000000000000000000000000..bfec4065ee557cf0883a8e6b2335189a558b63ac GIT binary patch literal 98897 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 I;3HrEZ-NdU3IG5A literal 0 HcmV?d00001 diff --git "a/images/\345\270\214\345\260\224\346\216\222\345\272\217.png" "b/images/\345\270\214\345\260\224\346\216\222\345\272\217.png" new file mode 100644 index 0000000000000000000000000000000000000000..fa474c3d111210b93e4fa0f8951a14bde11fa07e GIT binary patch literal 77786 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 literal 0 HcmV?d00001 diff --git "a/images/\345\277\253\351\200\237\346\216\222\345\272\217.gif" "b/images/\345\277\253\351\200\237\346\216\222\345\272\217.gif" new file mode 100644 index 0000000000000000000000000000000000000000..6f04ec9725d704c8af72546e26fdb33456bb66ca GIT binary patch literal 75585 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� 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 CRQ}Td literal 0 HcmV?d00001 diff --git "a/images/\346\236\204\345\273\272\345\244\247\351\241\266\345\240\206.png" "b/images/\346\236\204\345\273\272\345\244\247\351\241\266\345\240\206.png" new file mode 100644 index 0000000000000000000000000000000000000000..f08422cd7384cfe39ea5dc127f25b1f791670783 GIT binary patch literal 31763 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 bHCZ?~RhiUFSUiKkHIaY?lwh%d*0=uyvGX?4 literal 0 HcmV?d00001 diff --git "a/images/\347\233\264\346\216\245\346\217\222\345\205\245\346\216\222\345\272\217.gif" "b/images/\347\233\264\346\216\245\346\217\222\345\205\245\346\216\222\345\272\217.gif" new file mode 100644 index 0000000000000000000000000000000000000000..52e209b513e2de76eb8f920d4410b8f22c36bc81 GIT binary patch literal 115616 zcmeFYcTkgUzwdj88j1)g9TlZ_5S6MTDjh@wK~TU(2kE^e)Q~{v5JK<0x6lI$gkGd~ zklsP0Lk`dLuD#xOt+n@>b7uCLbI#03X7blPnJd>^_nmL~{1lYrB_uy;61ag5fWKb6 z+$=ky&)=%a27RFiTmVl`PellOF^n!QE)E~h)t^pxo~4Q}21?4ywJPj3Yj2%2IO035 zb@gJZ?NEOBq4UqYeNcatU zNHv2MsJAcHA?4@L@W|+xW||`MM$t?YVG|V<$*ga81R+V`swIRzU~T`!Vg!A}A|YLt z?=B%3>KW}~U&IZwaaz9jxRUuSh4kJEC~=22|8s!oemT$)#rEbo@PV;xU>tXs3cz2& zk1S9iXtYt`Jp$_C3`r{c^{I|>ZlslhVkXVUHf^7%TrAPYhrQTBC=hk=X~I||EoUJ? zJ;za=;{jSO{e)Ges$e`oHsnPq_S^eT3e1?c4Yi1lyqJw32Q10~1=i{QF&xja_Vs4d z&GfLkD5ClC_AqvpB0`#u^5S02hc^~1am&3akHvkz^beX0ylA}tR=TEgW3hB{~Ak#a;+ z<3-)c?^S1kJAE^*CkMN~x^!q78!jeyRyJmn8!s>Lc8l$^5F+L3+Ym5`?i}8S^3m#? zFSR_+yx+~Yrt|)c#yRr=tWK-*fouUh3owqDRXO5&DK1dBK-TI4TsY5kA^5@m+vX67 z<(ywgnNHnbp|Wx#zrtS3FfN8GBDEJIq`B4>BPm6BGs89Bnk_weqwKmA^WHduGx9?K zZ`LhCA<5-9Q-jyW;bv89T-PmVPnHuLdZ|~!9G7#m$(;`|E6I?eF_TCrz4A(mA9J25 z8n%vEO*eUjX3vOn;^jp~8=Eg>YMHO|MkJgbujM=lP+rf?w1cnbaiBZb^Y7G>Zxk?h zDsL3hO~5ybsMk9;iYZRXH%rdQR5nX@nGl<0v%FoKcRfT3< zTh*bi6x$f(Jmu}0$RNaa?Q3+`cHNQz`A+@gT$P=Mq%p)!qd{%gPSfxz#V+>Csmg9M z8XUaaV$R&X``wv`a_@(Yl6pF^qK5V|{1*TQB$`#vXE)pa`WJcdn(cY6N$HCLX>(|SV_8b`Ew6(}^qCCL z-D@#HzH}TP^Jpbn=vH6(e-)jN)xbPsd_?UB+?*${k`QNQ)(E`2IDe#zd48*2111yx zF~-zIj)O|nkDM~?#^a11yrQ-NZ#a^#vx9%I8kYvXh)VmTcl;86q4iotTjCQFgPpuc zW_Ykg@GF*{gSLBZ0}_@{3OH9u`;+y(P!FOnn^i8&LYKS9p*Z${MBaqm=3o`?lYaxC93B#SrV zQjY(*xcrbasK+X1Fm{0hA%5$jihUJr;@Uxn6!&niO;UN>9wozrSlvE3OBaCLl9s`ZrV0~#q+9k(ds zrNy+u^WlL=C#1rrjVy939IX9hh<5|~S{Z(?D{#AlPF%SIfbexkP$}g+@5$v7cZ*`- zgj^#j$yMpQpOMW4D5&2JWOAEGFWBbHD-sEOgXv7yf;lqM<*eN;I_=?P`a}(+{Ce?W ze&}TeN8ZasKJEO@k%~?SArRXJk{0`xP$q>Spp}Mie?K z*8&f_I*;v<=uE|gc$@rmxY+W(&a|e>4_}$0K(YLHan{i-+jPV5kFG=bBHvq|z_yYB z5FMW9Ot=fy?~!B{Ux~QQ)7hxjB4By2oB1vsR5hmAL-odyX_BAV5`|P;M+fQ3CEE?^ zf5$tfnRL+)^?4VG`JL5kO4Ygc2_t^r1KrY;?_x@VA@LO%+-hse`lo}a-ij>okjKO> zr$1AuDsvRn)-~f#hjP>_^K^RF-`1TDmmn((bV6|NCQnB&y_H4IJsSqIwIhvGRV9IH zo1a+pN3c(-%3^yqjiu{`JG`nYvemZCe@jh_^j1|>_gHCsuA7{rs>UELwru0ird9(S zYku}@JJp^2-0-TdU%9sJ^7CxwIHs!Mch8R34fokgDh$^4+Afske6B!9qJ^Q?<~4u) zJhkERcXoAK=&Sk##=fIgv0hu(Z}q>}ULCbRSGThbtzYDsJ?wbXYiC|uza;YQu z3LJ!0y?=__FE)&>*NwHSAC|>mY?{8Rn;7jqtg5@%GF_>dYX1VQoxIp~>8qPL>OE>a zyV!wTub(4*b=<;oxeI$$KS#q0ZIiy-3%gnq_p6gm{mXsS)k4JkPI}!hf2Uk;SY{GF z9gM#`$a&SUuG4oq7}@xzB(!1ExhNk{w0P#=?}f!Ol)!mYc+yKVgaHu@6#=nVK9~(4C}@HZ8_itA z2FenE*-rnAdV%Jz9%ZY-UTb%rUJy}3XiES*$kY=IKth}$MEyV*DTpw|YoZ!Lmg7Y< z=LJ&q25{bCv0f{&5M;L3Ml6(s2SRNF4LO1^AG?6Ypa9C75al(Z<3pPRS#gGLbNhyH z``#M!?qBgBq6U#-Jhw=_*JC{icwBkMypXY8Atqkb)PS0V>q}E$cNDs;0MS(hI2rxG z5O2L4Ki)BjIuD30$B$*qYf{0Rx*rOf^ZalOr7i(9#sWBTzQ3Fm6eS?r48Zd-zwv7C zkKjNgLm;vmpd9m~5CP;QTtC19ZYu^nU-i>qggnQr;-0`~S-^tI4Mgo^|1;GkYz=;kOQO&6hWipa-!EXMjyu6Qn^d?!|d zL=};~rpP5lWZW@wq8j-dh5W-4dY~J+K8B3T2|aZ|UaorXG9tUhkwmUxU|wV)DvWYG ztkWcniYc6y*PU82oZdA&ODCMMCY)8$jbc2UjVYq(DE!{L2red9X4eQlvvA&;2%+(? zMeeY?(a!JLxFK4hK`gp_f)7 zQ%I9#nB8u7`jO-XVuJiPM+2|brYw+oKVJ{>$U%T7P+_BiA=%K-+(1voOru)F%bJYa zObUsksPBs2Mse`N>KHmjWHA^-QsVi23>~49B(EFTEt&1>f(~WOdCi1?>iGuNWScXm zTavp~D+T19p#2#`2uxvziV0ETu@*`JUveNn-XTujIrT!jxh@}hRgyttRx%^9{a8^Y7rCy=>u@Zt zc!kf^hcB{23YM%8GtV9NB?!6&Lt0CejXS5jb}944c|$r%zmX-Uql#J1GN)j1m3bj9 zOr?5pfq!@t>T8o;@I;s55Xx)*-!Mrjx=^Y~)W~r_X^wy9X)d1X%%x#0hTJ6@TbuS| zJ<*E?l&~H|Chf;0og?W2HPg)|1V`7Cmv1{4`0&6P82zHiLu?U1QcV&+&iguJ>F(8Y z2<@GY%Gz5?r77|IAYFBhF?1hSX|R@?i2_K*T-sKnDe6kbl+Y9uple|@Z*wqt;B2ir zB&jJN&kRq}3pByiGN0w3O?+u|vx!_PRZM-*3J{QNZ4{616EcW$m$#sdcTs*#H?y&~$<@2T(BK@?I$%aj-k~x*s1?k4tca6&wv8(Zo zk~NK+8xh-QjeJZ^`xX%g`c3z8i!rsaleKQ_btU*1ohZN6C{doAo*5?mY7XSCuf@6r<1r!zBvH2@DjnrUO3h_;bxmZx`nuT@u*{b%i09f6z{QKl6#5cZde5Vd zdJNGSSJ8%uQ_1)0Jb~m+_&nV#An5S^nBeu=J;ydD>gHyvfTin&dCUv6ZzfNDrBbw- zDuR+R?|`&?rMjkGshX81TBF-@nX%G=G4ZBpS%gZdnnc5$F&_sDKi#@AE}rOUmaG(W z?<6v05;<}<`h<) zu{M7_+ZfSYz6mvUiGD*Fh@te!V5%_~4;FRlm>%z(cJ=i?K`b378gyXC-*px`7u&5; zn$_3oDFg6T$n#+@V+eH3!)Hac_Z2FS2pgxunq?^hu}q1zGYv_@k!WmEg6Al&>-zM{ z*1ksgC|ic?ocBrR!>rv4RnB`~fm`9neG96P^G%2|Z-Z<%N#!ZzI=KIXOP`fe@6+Js z^Md}p0?+F>Tyq&=4YYXwzlcDOKg;`U1stq1G*P{8RO471x8{w|0xP)Y#s&6O5 zt>-0%TMZTu+!@t+%k_QLDG;KpSsb{?5wH)xM4eM^Hw$B&^q3FBarO87D)IMdP-3eN z?+*v}de2*9#K$dOR-?JKbkKix2Ttd-Mr08wchD8B1ny>#yq5I=& zWlvor#ayv*qoD#GDAMzE;+kRQTOnDSA$`@ql#pTSmy1$Ci<(psuML)*T$Xfay!9HF zW=EF{yaGYDmlsu*!bgXPk7h5pM?BHP$?qCTCtc52%90pBfvDx^m0EE#Y|_g3t+kf( z?(EG3xMe@ot;nZE|JP=B|Dx)uoeN}b(`PXOO=tkM)aYI3?tR$nwUz)|vFyv{fnU4K zOm56OWNp9$YJn>PzRJ0%R_P|K+X%Oyd|gv$U;c!r`D#Foe+Ro~MnmSytV zd9oOKv>meXYgGBSjCJTHqqkhr%EP9iN%iG#*2}VY!i}CBT<1NI?+bgGe9&5bp!(E9 z9e;r5g&%0%LB2NplcMxTH#t?W>Cb}mAA_BduP;Df3=fUH4^5K~&6^G_XAiCMhcH| z3{PUbPf*Dx=%$l|*^?yvNy?qmw5O*ThNoHHr#Z=|dC6=Av!_M)(~>)9Wlzs449}{( z&oIenwM}RBvuBO?Gwhx7mZ#@G4A0xV&#&}KXVZE2?0GN#y#LO{;M0pC!;2B`i?QU3 ziKdIG*^3$c#oV3Cg{PN`hL_9Um#fK_>rIy_95(#2%fJ6n*vsaTY^H! z@wD;RK;qEkk6k}vk=1w(+AsWje(0sN1u@8XriVX!TWx?e%3pohPl)H?agj>+;!`Pi z>9bqOU+e6gZYR;A7*F-q6IbrvVQ|$*+%Ns!8Yz=k@J!UEc%tzJ;bu*~>E6AzU}kZ< z&DA}2To{|ZtL^s;SObN}YKLNf4*@F$$IY4wh{)aR7E;5DqDJ-ucb^zBs|9mMeho4S zL#g?dt0|FlYG!K|nmguI6}%0Nvg!EpKG+bwNNoXbi@v6%>~_xc=Z7|pe7>K+CqJG~ zQdT-g`&%1F!gE+3(i=jS$2K2}IPzf~dFdg{rB+WGnh60a773#?tZ8LB;{*1OdZIOA zNDby(j*?v6n?ke*kVs7?b>Nu!+Xn4-wX8>!Lrq44XcF&5YB2$h#dS)a9DIG-IHw|- zN$Ixs(bncfwf)Za#hG?1BDaF6ZS99}hFJHF+Jb-q(}3u1%SWj>!(j8o-C(owYgUXB z5*%$1@;w^`3pjO}pU<`X$8$b3e5lE1v=LCbJ06&YHxi39wyY*u&-~zw+?9@z)VVTW z=${jI^p7yocdpI_QxCeNhe(cK*pV{pW9(s1$=BG!pV3QZgp0$)lWdlPxdw>el(6|I zmxZ$_NcQ9gws49Ne*`~73Y2xA93MU$i1>nZpoK&|?4tmxR zkQUQ-MW!}i8Ha$7=h2jdQ4hn90bgRn`A#L4r{~Q?A{pfQFU1`l*fW_u$xBxrG3b`` zaK6fTZ7K3BLsXz@+`LY(`mKapVHE$1O&6zU!gL{$yHSMzi-$-H8GpUVcl^3Y34iND8PQfceGk#L8{*j^9!&1%qPV*V z89RosT{h7U-u(LeU4rZ~<8?w^GGaXsCq2Y^B{%BD`W~O1i}hay{7b`g4Il(w5?KG$ z@UU_HPaB@upl9a${QsljN$$_lQposV6qI|_@VGV2mAI%1#rLgNxb=8xPwrwo)Qgja z15iu4rDu2u)W_G)KOhhm1V;piAVb5#BO;@sV`5SN*6^gHrln_OW@YE(=H(X@78RG2 zmX%jjR#jtaYU}D78k?}qE#H5%wzcCrI=i}idi(kZ2LI9Uj89BXP0!5E%`f~~Tv}dP zU0dJS+}hsR-P`|t@aOR8_~i8L{NfT15R$VhmZUWMf^YoQ@T7hZq-Ix6P%KSrMKFq) zPvJ__+e6u&!&#NeGCCr8-r)1zca&vz#fp6HOi(J%>WP>5yWz?1OP2K|zolG}Gmx$r z$@ihNBKK#uM!IsMa%J9dzHYhsbZ2G$XtB|E_^rPho^sQlc^|r}3MZ>=esw0QR2NOx zx%^(A?y4@HZGsR|+*ZYu%zua7;5X>Tl>Yjw;Ym`hDO>77iCN5a*OagHr94O6R;#U8 z`)gW`U^Xq56;SR3;==bh;SMsYnVP|Jk8ymBIvy_)dK;ytw z!$W`k!yC^8Q^f;TUsBolsD#2vsc1gUVSQh7=*l?>X(OB+g#H&IazsvO$O@Tzo-Bx% z5)0%|(I`Sd#IBk~&xk0A%!$&i4Z^aCZziOel10mxD3CLpuknykYPtDjJP--X1|u~4 zc}ZwAM4Hp$C#dB z`kTq|GkLjbFlD$&S?eV~Z*#<>;KDRA6=k!0*P@! zKjd_po!7senwP_<*tLE;in(r$phn%M>|4o`J?p-UafCSX?mcY^E1z`9rh3!a*ro~nv%nNN?;7zY@mzng$(>7b^Tb((6 zI8}41usF${!m|2J@h!d$^IxtOLxxA4b~9)9)C<6QNJ_z<$zuA_BiVyY#M9zN1=%ZH zx>R`-y)1?bliVo2i$7x~#TSQD&N~-JbAiH_$BVJwE>Bjoi!V<%tGx$^cH4#V=Le(T z@E6A`#rVtfqa8dRpiBWs6|t9+Sk5cBhbtb3=B|~uVMjMDMIb$rz?@6AX0F8;bbz|$#z-wt3v$#T(Q6i9KRpgfNZ0#d93Z|y)d zU?a;AaE7(qZ$ zG(h4_4$kYYAT9F2ctS9icmmcYA@>G4P3dzhou|wE(@*4}$7etwOkMGw9l`7OCiizF zR5`g`2bWN?KYF~T>Ug^xYOBijkmgv!jKm=#|I1hL_#mu0Gky@5c32V>#P;y0YX(~p ztw?i{_gm`?g;QFxi(i|29dNHd^XB8vikV9NKFqIS<5L;;%xc=`YaRrXeK2BtX5RMt zG$KBXQjU0WRWX5!Hf-85ojo0=W-T>H0C!+lOdlJ3*jthGI)p>8Z%m1pSu?DL$c#0F z@1@@T%Dkcib4gFPAHtos5o_lg94vaR#Oj)8ZI6|Ypviu0TSfBVdHzdImUjrb!;;bW zYY)#l#z^#N!ecW97{tzWBKIqcTV)E(b)>t6%ML3`mQpP~t4vNviB?wi6k6*`OirI3 zRx>yx+XSjiEifMmDlUKsdP}B$NyXlz242`FPZAJ_d;;NzUOpo%;|D*tJ*u0#R_xNQ zGP939s$W$rb{p+7P_<+r8M7+(XzJ%+bkQN%`zp7$+%U=LlGivEZ2w z_Z!{5=e94<7YWxK8&1eVq&C zoi=QMAuBOkh-?c(W3$)1?EFo?<2G*G9+|NR%iZ|YcFrnms!x`LobA{Sv*S`qlh7^h2|0W2IoDjL~m;g-=S-nk?c6c!!3!DG*x@kp-zPofX? zf08OP|GiW}%69$-sq#QRL)$3eKTDOw#**2;q{>qr64C0{hCBbiRQca6RT6nuX9`)K zf1A1KK}tHqQe94RB~=W2>uZR9^$0vjR`-;2Fdode_~w;3ez?<-?EEU`*7?!iVvnyv zvg(D?-X5GxzS`hfQo$%f}@k5#QSt#WE%;S-aBR!p`ntv zD?%x>GUs2THFhVE+Sv3KtRBXAJE+bDbq8LXGnPOwT$)4ScvWLT?7%QttOJYPJR}&R zh58kOqk%vPB)4;B$)A>m6NkNbfdS#Rie>UuL+-A2~!$s=I=E^y~;mZEv(;M^- z5%}m412&G`oF)tXEJ7*6PF^T1lP+9FX$3VD9mGy@3BC6tS)|0(gpk0fgvXv=24c#q zIa33W5D26|l2qD^WQpzDsF&%~BElfd+3LzZi8`M&((`SS#{82lTypae+qtLYMeA#) z@F3iu)qLK1w739&YmxINU#AlFX8AP<7Qu=^_qv6lNCJlO^NodVUH`&}aK0>8T-j9UKgkyt7C z-79mn`MXb+RM0^vv#o!(|KrV&2M??6fv|%b+_pKKukig2L%Jq~e@5OrZ~YlH3KXo8 zkU!OMVxkBwbYhCVw0$(9!xF(hNL?T(Kkc+qcr@d2v~@HKAr(5F^J8eFn-ONSK3?Fe zzva6i(%tjoN3f3d$r8$>=n4RG-ac7L@fEbhuOcVrBv`ZYlqYlPPfOicb4U4Isovy^ zNUvd5iq5v{kG9Wtu%yE0yMC>=rT4@u5`BK%ncS6P>5J``A>`g>meZk^ZB7r*d3`+Y_ZwWJ zR+Km!*!hoAB@U#6mF05KAiYz;ctpVCj}J2P6=Iz0rq0H)p9lJJ*|3pmt(H@F-nD+9 zs!JjE52+$cnf4Ek}e_{9V*c6+8 zvU^v~?w{=5e{gozb+aGHuAJS!v3vjBd~?fAcS#}ugk;f1NTzTExic^C$i z08bFlKb?M#%g51)GHc4do%or*SHeq-@O(A9a^ z#mH0^`L6uMa;}VTc>d+|t-LM#|8n}z1I+8x^2JLvxX=eYUkx1`tqx{sgcKo^>00~qB#S>4<~mw*7a8dLT#L687>_XS3sB9k zVxO#Hnr$iMakl%_9q6K^9t>*Iwdp%lQ}nQu9vVlT>ev8``IPCi2>Sl?f=j}Z>- zDmaNJB)xGDLVwGxVr?)-39-%k1_F@M7_jhf_Lo#FpG)ChE=7K=+o+NfZk_j0fRHpzpF1fEVxvb}G9xTSN*FF@d z0U#H4ua%E4uV=+BIB?4k%?FHEGQRdX2_a2&VeG{9!)1!H*`EuW2R6Gu-F8X#c@U%f zKAh~&YBHSq{yXYmEo*MhXAg{Br=mfUS$ zn3zj)Ke2q$v5>g;qa!uiqvg#?xEaZWdJ-=)d1&(I&TJlO-!#dY^fk7LWs@lLW0Uk3 z#%}5vY;MZP%vW$_s`OiEKB^o)^}Ias3_V6t;tKf`2m$vLn!kwi1$8sHdY?~@=;k@x zr$~O)&EhIK$mb_)V{R5GyvZXgfG1|uz{+amTm}UaSKNyiENOvbEh-v60Yx><$S?pi zjGoKKJmJ9tRhuLhAd=n%W+?F_LFyJ5KjZ$avZ4j??Nz}7Ore|{!eT>#H=qW!g7iz| z>iKn3_Q*%d`UMC_jYg-xh!S#NceSUG z?JC&AJfAWDUEBkgZSDg7zR4fuCOb($Os4B0T0W_#AwqJ)sIH)6JVJH9i65W8J&wO$ zC;VeM?R=xrpf16x^vpVBi-D1X1zg>mzQj-Cq{l~+0l(>VR8 zT2~dt^4;97>Ke;p-3~L@pxCQwLK-~MxF#miUfgJK!={^fJ~KDO4K`wS`{p%+Y0?NPJS z^=XF~*CF3od={#kZhh3wANtY4-iL6k%(%Lc!u;Bogu29wA;$;47a=Chs&Ug}I-)~& z)h(=9M!Ml&`5}8&UtRT^35u&8Ei5hCB@(;*hkAISG@a)K5e%8ZgZz%+%H)Y3Ju%&xLe3ps2B-V6SjsGsK&9?a%)e1M)vWs= zHU4jF^C)RySr4+6dd&5HqsO|l9#wbrSiAj>pQFr{XjkgBb1RPvQO)M+FzR)x{e2az zXUnW8y>hlrjWNy1esa{&=XLr!dD+tV9_hNW7;umRR?CrN;8S;4?+7g02f!K212cZ(Sp5^;lI+!9db1fX$^yY|cz#LmUSWxtUp?_pT$Oy=8;Ic0~)ghw>D$6np zbzig0f<=alMmD!B@};MLk?SYA#^Y4A7Un^t?73o0T3e_s7(|S&|s=jO~ux% z)F7;PSH&>x9?)prApAxx_+7?*y27v87SL?6Ul}AvjrU*X+w8D>pt&6IbDNO*$YdwI-rb4Rq70bE38lB8;3}_uolCg;m*T=8xP3onF zj380Gf`DSX8=&;#pfFI)(#uIt21Jd_D0E)_Bz-o1IMm|G)03bp%nj7XXfpxWEo=9) zzgf<9wQakVMy6Uu#RB55vaZ;;%TeTw$tHswo;?!P`WcSd5skKqfmG%+)b(da>YUdK=r?2pB1RpoVmMSMSh*Si+BG<;os;02;n86g(Jko~t^(`j3oPv%df4>M1KtN<BE|OtB71f%flWUEV>Q<6=GHT-?WFA+Gk`OejAyyIGA7+0iIi4XS4t z1z$r2pP(X`;-bjnVkF~Y-^HP7;?U!9aVK#JWauO&bcQ54ix-{q?oD|Gx?mh#bb>Bn ziZ7FluXq<<M**)?f3E@{0cX>&Yj`y^?XDS2Nq`QTmh zp=rm{|?j=KVE%xU-BfadVj>o#dT=(Ou4S5#S=P-hy$dKw>jI(?@NkE{n1Gr>QN z))^21^Z?)gGT#3fnq$cN*P*#;(;YwEj@WqP zIQE1T!z9_%Or3P?tUSl`{36wy;xbfWd6iUYb?u{?x<=84rWS$b@84V7ns6O;UES5a zedPm##Y4mSqhnbUld01)33KzYzZS!mR}gFK0h?QXJGEx*VT`SDvSwT~?Cu zP+x2INj$&%BHL!ZHh^mSSuo?bdoSJSg=e~QUf*d)UdTWN9BjTsMQ|nKQ&h*laCWf^ z8PW&wz6r*m9ZVOdQteHUNl(53*YrN~3^2)u5}f56-29ovoh+x#>uBDU_x9tb9w~c% zo%p!M#y!3m?(wpxeQ9)gPF4d|*5NH7bq8D@-a75Hp!3B;G8%P$6J&9^l!Rp%(%5S! zM3-u}zqzabHO1#XNf(OWqOpFwga$+)^6y3~|4^0VkJ)hX=Ro6W=8C^7)g(1(-1aP1 z;pp&Iy~OtXj}U%^#^*Km%Tfu#fyn2zw(G-%r0rhM&z!a&))SK6F*vv0f6$$*ApE?+ z`fzLdPT=+Dmma4=o3m|rxhAX2laqE92p?F24N5|blf(Ov)AJblQk|0CHKUco8Tm5s zq3-%z*BiSVaL1hSULc*1ZW@d`B4^f*g<$NSx9|c3yQf%-4!gT}S}eP(w9hEJ^V3fZ z9FEWBbU5r4?!_+Js2q-PSiLHv&op_%{C3Gmhal#wq5k^t(g(vqI^*}BYqgCvz%RmP zU_xbN>GAhll+qI(4F;trN-cDxCq3CG%Se_ZP|iq^r-f&vD&Ol|v?jV5@B~#$G6NYq z55djWghaqZMhXaE2BF`YFMNw57r|PkF1OvY3DIQE%|CO+nF6^JBk}<2fXs+ddoj3jWjNBCf!qH_GN}LOcnnVEXFrIF@6~>yK6A9xEn)1m{_l7U4~u3-LT$PzCRt4B=g+}+ zu6T@hL(tCu6_4={4yLi;p+?9-tr#l4@(bCXy(A*x{xo?T33b`wpyUApo7t*h%TivW za9Q_i_^)cZ_qx`fFpiWZ2=7OSXW6uqsVjf|Szoz8fM2vhr}i5>T8 zbg}QPIk4g%Yzg#alko%~r&hx2H>YCQ2&X>mPWn;n*+6~B1r(lHPSUj}2h53L31Poq z+JLSz+T=h2?u?i~118NRegz0yOAy%5FJls|ZVSPh;RoZGdoKK%ChWvY%o2tXs(gyj za565XWTXh6;xGRfz1eJzg6d}J@DKNDZbeRp*QEKpwSGrI{7HyAllaXb=?ZZban6D+ zUyJ+-vFdj2r<7YUU+@@&%@G}?IVoWZ>SSO1 z9`wSBZBB$R3jsDl$Ma36Ei7ix(#**eJI!?^YY0mO0#s{AznOtLts=KV%{?L$Oqlyn z%Y{>Kxwo$SVe4Hw1YBeiAAlW>HO}SirOdaY!Wz%#2B8%{W)xkLB-U_yn`Or^G@7QQ z96VH<&wYv{x5#U{e}2yf-D_HsRcgSP(#XEfl$n2iBJ-^u@g&ziTa6UFZeK;8>-f__ zlhJ&lc*ukW_q8Q5K^%&Z+_YVq{dNh2QoklOoBh(`>%@5_#x};o4uOGdI%#wK zsEk!rv2$#*nL$34F=QdX5Oq#GxW{TD*F9XGB16%kMtzTJn&SH-&It-CKL_EP?;0(3 z+mn%AVh1aaDo80}yeW_3$r7fC1`$)o&t)Dhsi=t5O-H$mO4|^N2y@Yn5D94Wk*Lne zo#xS0oN^P;JMMZq54<7b5Xr`?nriIU^y|LYCWx`!6pmXbPb6^6rTt@O^5o}@owOmz zfD=y1Qm9%{$+Gw=KqJFT@XDj*t9WXwg4cg8IdH8)ZhHtLN_HbQ$V>e9l7L{*yRxj* zCG-#0vB95$(^*#(6HsRrNgDP--wh5X=iTtFi-8pqBXxnN+Ob zzKI`yfh9QPQ3o^HqZjIbJ!t2J+T{IA7~_CEnw0Ew)D#QduK#?0%~jns>t{k65f6dh zT9?D4-zl*kT(=2JG~ROkjO{8|CP*7sev6C*7_3%=eRCD;mGO{N8Y5F#U&#SWWh}sO z4IpZh9FR7)&m5~?eeywB(}~L-#BnP}!mv{#!K)&J76wSuC~GP6X(hXO zwcu5D0Do(qUI)|9(4vEc8^dNs`FZV75-|dURxVY#_+GnOtpef790~XF0VCt+!co?o zPu%c#!A07cTrUL#SCsW$+~*AKa51PAMnku#G1;NVUm5{m{cjcbzLplcC) zyCH0w*Hekc#BMsQir+N?-fmaMd;Hks_s!K|S+OnrQ(r2{BBB<&eltbmBL4-$=7OG_ zM5r3)DxfMemumbocB^2WpY*()%H1JdjmutQgIC*|?=W`3l3zMxe1Xrtx&|JcC(lr_ zOYVRa;Ej>U4JgiR6HnJbu&iv)PKT0TcR_pvmXv6D_E+W75ev zyKHK`S=oYUf>jb<-hi2=R`GBKz-gcP(RJ-=;HKNsJ3OQ<9;=9`>3kgbIaOda&qdj3iDmf+9uw8YDGxAcC>KY zDSL7<1c219sO`8-UQOKgRyQ79P28USOGjzX=;$=a{q8k@WhNRe^>FNh)m1&Un z&S}4n`ky3s&vn8Q>`=MaPJ+p;jeVyxqL^Oi2r;=OsuFhsC!|y1E9~~WJLe6rk^33; zo;zBzCo@oMfI`5Xz>*X@|M>~z`_cJgpg3f}nF{D+Z}=_ys%9+c2`H+Zb?s`#cvWfk zbYyb!kLY!ozHh=iDMuGar`A$UFO!{J#q@u>h(GDtYOqg|ezG2R9YV+@0!_X1;ZI(u z+X|tq$9A>n%x8u=LJcpMa$)b2!EC9)cTY}7xPkp4d`%xAn=_EoF!QF&|DZ}U6x z$A_ctqNJ|)E9-X@3H&W8h~ygi6FqvfB6I ziZ7JZ;a9BlGYN;My7scpE-Z|GqJh4H41Q@0Zm&%IHpD%jUfH{ z1l$Mvf)xX}biP@P1zZF;esj5+lyr7*33NdP(!~b2jRkrg2OhTtLL^{*u)l&D7z*Y& z3SJ$8A+J&z#-Ip^zfzhQmmt(tN`nbX82c-wiPu#~lYnRF!n1IsARG8gHc%dpx+FZD z)H;gTatL0bi>PuzU{Hu!45EGvF_$8rFM`k!)hMJvXnYB7R3x|-7Ti4++4I!y8bf+{*tDs0Dh|-_yr@$j!J#06aPUAiPAPy!|-&gi`> z6ILW`y5Wnu5#QV+R?rb^wGkVm5nCq_I~WE}{3mOB6sj2E5k8sfG%r^sb`Y;F>X9K!Xy%owxKMbek{` zv8l!akH&9$xEQaRMaK?J)$$!xye+bi_-?r2upCSDx}9F5GQ%2~^s1J7A;o#vdKpuB3+5#B z+*-wGb8vZ9GLV!uE15wYg)3QMqH8PJQSv+m5`-O}VVMxsBw~=igC{k1QUK3d{_A*~ zwSxRyeWYjM7d>m*v}&Gpsf>P`^^)3eh3lmaM{DbEgof)9u^&96DI#ifHC-xd5nbP? z{3L&U^X*q{+ZP7HhwoptRB_s2v^l>umDW6GYr9$GzNL(PdHKBVVAyuM@#I_4cGHje zic+5a>4VbHz6%M5H=9RAJ8eW_8$0c!3aSIm5e(A0Z3ZUZp^hh4C*>jkNZiJOK!6-n z`nRf!b(${X_r&f0W^scO@jJwzgTnztV<3h=P~uNbRYvCZZ@gTpgW;s2fo?0-Wp!vp!P z-7*e@0q&rsU!m)N=_gbt`;XgB|CAj0X~O?C$HMBL^(V)I!aM>Pj>QkC{5!{DSlaww zLhgds#q8pXk&Y$6<9Lpi9p zAg5e9A4}=II)t@)Lglof#%e?>%4eO|u*{DDImeDL;IjWGkJVXK|)1CjrA6n;nCnpVH=5wP<}) z0u2~F_i#~vv0t7;hJ|^LGthe;y`p;`zlfGU{RP6IpBdu!)tGIhJ*3Z&>*ne`f2nGGvwNA1^GO8n9N z&x)KS2VYdhHV+0h6!;FmKGu10IP{lt=+WrYgcnC+R(T~y9JwLp-_-pS&tefm=tf7-OuZzuy_50<#V z>66Rlj8Hqt#n+5&@4lth_`0tJq}WMrl=m`7Zla1y>(|p3ewITQS_gJ`Xl0uz8N;#sFuZKzyu+b53;P!wi(;#y!_GfA7E&aGbmreU7FxD8Am^ zK#Jr*Sf+Q@)n%x%CJPe~MaRnh!K#BNKr;mIY7RE8LyvxwX2|PTEP|YgD)>y5F_09N z8v@qds**xsL2u0fy8IqZp6FMolzAwAi}FjBiin4FtV{`tAnB$(m_FMw840y2mvTlb znJ$aKQg;_fRRpab2C&W~$|#RVC*76HrWp)spwSluf0kxqtr?S18YT zxHO5vdoFXmGGCcZR0!gxiu$_fEI};Td`6*S8$l z-PFqBNffzzbnFkWL+|^s45ci1TVB0apd#N%5&yuaP$`mTz?{JakUucj(NP)#kk{fC zZ`eGfQtS@{9|qp_DSEQ3tV7J>9Pr-B%J8^nq)A?|)b~oU$r8b6E6q`vY{T_?gZVlg zl1JsYd3m35s*I82mR)scpM56Qt5@@^Iy3c3iB&(T2nb#dgRv&rIbCk9V{0MGL%yjAc#e2Y9~F)?{>)7lRE$r?-I|U|Fu6(5%*D6k z<{vm^epsrrAX?oPKpSyKLFNGwuRAuV3k-0m&Jh@#v_bpJ0>t{}h`mnQnTX5(#<4KD zwz;d2n(}6xycdip53^KVpqYSnhTQy$`D-nd{?+(m#1&D2s*5bN)bCZ9F#j}>DIeWw zw?;(8t31_t&bRK^Kuamo{yB_3T^y59ybQ;ieRjoP0x)~9AL{h{$vs1lR$FZ01WwpI zzy`c0W^znWQ2lm=1lCVm?UblOWOY+T4}ZZ>IKFCQ5lRB%GsV4>0f1Ypgo~%2scN0# zIbq)jje$?NE07GSm!KPNYy+TLnS6Q^n3hXj8}Z2vK%X8URLvNAuD6FxS7r;a!T791 z0ds!XD*gs^WpyAfR>*ibQ z*ic%)x!NhdQQBH~`LzF_)S5wTNJ%PQ6P{w;qG#tGLNP

    z7}L4-IK*l;U?Y!0U2J~~RD0<1K3wnX4^g@)QW$ycbLA~@f)Sp#d#7_>XMs1QithY0 z^9pKc-I8h~N-yT^?%v~j*maI`_9f_G&S)7a(BXd{@w-6hxAOV=rhLBKDl90!+%9d{ zzuc+p<@ml^J7x8K55DnB|G)qJ0D-}Ib=XB_ef8gHeUbYApXaMEYoz|apyKD{Zo|P( z+2uq8x_|-ug(sT1t)GMfFX$hQyxMwWi!EKeF${HL+{^J5weQ_mn8@Z(PMLIbSO1}k*dTww_w*rvB?%?L(1Si; zM1bU}LEIG;@);1KCjtgnuN`rQXa9t=oR+Qs2><*`2K?^O~!im#&rSY=GRl<^g#iyyDE zp$UNG1#2Qw=WyFIL~4?|F~bS}ptL+~q{mP$3Wvfgx1Yxu5~zi=1v7nq_=+*3VVgw4GvcoJ z(HYbR1>6TSz4YAI)zM2NdHlaXS7=P)D$}zU7bAe$cwQR=9lP-sRLJN!fqIWwN+zlQ z>Ev++7D0j3y^B61=$ciOYshhbK$$@)E|?Sz%J8UP{(d=e@ExA*7krp~Ve+qw#a44@ zo)!1%EJp{)?CG(UVF7OSx66d)w*)Yt@`>wTOI{9bqGP%C`#CA3%Hi!2WE6Kj^E^q@ zKEn4;st63NMYNj{zKBXcCgcd;6L<&d zAF2p^H~tRtpOwE<5h;m?drn-a1U9;uY|w710Kiil_ucitbPrAx0<6Qfa(j`#<5_@B z6o!z&4>|zM;aTO;+Pp+3!Qai&hWx%if1#Ao8+iS*BK~YgA5+$)n`pDzhiqw;bz>T# zNotdP-2CqD0sj!H+F>+1t|2Wk&_jTUNIPkUJ|WH=<)8slu?~$niCugBp4w$#(QcyQ zLi>&Oud6bmWjCM6h>S|;JOsDxZcve34q3MyC{EV?so?|&ZW-}Nv!kaq#q{j4tD5c(p>3h%L9 zunzA|wPcNT=}&1pZXg~5sA~j9W}K=}=@eF+zRxrZpE@M$$rxgCJpm+*s>*&)8I$)4 zj9)p{dS0-v=q&Qj$+T5veV<>sFEcYEG-(^b_v0P8_2n{mI;8qLySKpWl+H=A zMFIMYIZ!2Me>=4)cgft!SvaChHT9iiiRRiFnnR5G&^vNpjgL%=U!$wsk0PE>E!}VU zhPVzLF%MmV%_bQ^5^+2i^)p(Q49W#UTXC%zoL!cmdNxMj=&a+|b99d7GnAc_E($%O z?5CzeLADkzTv)q1c z3b~OjTAiJQjSj6TY0}Idot`Yuq&v6I&5cv5^5pRa88nq7!|E4k+tk_5q~1|{4L!3P zcr|*#l<}hrajWex@YTj5@%4G%tG1()J4b6zt}n($ZH{wZ{n*yL+uhUNcG@udaxvQ#26y$(Qj?}CpIaDa7lWQ2SiP)KOS%4Xe zgvnb{tJ4z`XHqLoRa2HJpUME6{QyJ1d^2ieGaL!ik_6o-RU5{0hr|S51gYN}Rnxct z<9J>lAto0bW{V#Q-Y=)T_l@6%Oj`8SzY|D6-Y6Z|Rm>am9jSX=NTy8}(V-HBKD|B8 zESq+y1R!>DV;`~r5EAoE@HRQOwB@xtK6Pl_u(qkU5;E3((4f1U;M1$({f5k)CP+^m z!-)uHw#eu#DPesvX(ZUA@6l(sd>Z85Yt-mu(`V$!!Dx>O1WGxX$})LJlLuYv@ET|Z zTEsb-Y7|;NU$-_mHEam5*E;nfV)9>q>3`ht)}_b%HLssHzll$R12f#_?Yf_MVyHFD z%uglg6<_!r1Jl+X>)lC<-~a$1uy_bJDn7Lcdl`|>XayjADc}(PX=5s7E3U+dOWyEv zM_+mj@206hhRGn&mtj|LobK{Rff%FEU%nIR@gCfWJe`Un+z2{ccgLNHB2o7uR*xp{ z_asY-rc(F3GZRhQ??Lf6hGC1NSSf}%DTbvnh7Dk`YK6f4*m zD>M`P^deS-B2H8wPFy_>@rg_=DlV}qPO?Alfhi_oQquyF*oN0t5YR`$X9=B;cIe)Co~FQ?$``|70^l64IU zWi&93h%%B0i;GWysX&rbToTifDpCNB(rG-b2QL#Ce0y?tbCP zZU_fy`i-c6qj4hTjhnxNbsF$G=+Y4r1BG6V>pfbKdm&oD5IZD2G`Cx%(~>EZnL2Fn z2OoVn<80=;`(h!Pbj*hSK^e|?lnwY1VU>x?cO|M7^KSFXcdSHi-d1KHP|#;I#8$QF zH*|Pj{8B%5DK9BG$+#()GF59ppdcEeZ?l^2a#U21hBPk}zJ7;9 zU#CTt6!Lf(cJFG4k(jg?10_b^6Umpp{dAc^ov{0GAsrOT(B-Njo_}IpQ%dY=i3;iM zK9E=9e*I`ABKP9slIzf8QwiNaU^YiMncpwg)v`YCMFw(h?5*|i>6}qB(!5|fD0epJ zv^eav;94^5xaek%2U$|R)poiV(8~^44j~(X%mh8-;9ZP){S&eplOyb~{!Vj*e?6Xa zq!D{vG*YKwGs&9zPkAOP^7df*Z&+7P9oK)14E?`OTv@^#M}S$G+2Q-2<(>Z=+Wa%? z`b%8NZ@>NDv97wr;s)K7btRJ(S{+uc8advWHRNN(!h^h)nzaVTj}y(EtY(`a2itWr zd>nX9H+d%R^uc07&^(Jy$uw73i~Bv91)Qm`IGu@)=IXBaAFhlB3p6BBB~@U-DT$G&6I#rYJ+*O<8EA}|_{rjzaI zqSs8IW;dHW(&Q(`DO3$E`Cq!tX|g)(mn!j`X3_* zUo4cBCpOrismz16;HBm+HP%dK@N;dd&%K?8*)h<&Sf8Tuu}H7JqxqA|uwr&=s2$qg zVh;RZM~t6Qd4zdCrSxm7Knrd){-aN9J{>%fA8l!baTFc8@Aqm}d^}3n+5PlcRQPaQ z$=dv6;(U{e2RTOA>etN?v|ERV9VGm}I7axNb-ur)5kbGw2xfwen>6B@P~`VC;z{kw zB2mU+6UFP!v1WzlPbxxlQu+@Kj~e+7u8#jUGUNpbm_)I4KV`P8cyajoe>fS@}_M0wSe}2K2c^Tz5nUM|B*x) zd2@0Md?49hoi_;M`ny&4FWj6;)N0J;2kJ_Y#)tPI)H3y@Gc_ikinRyp%jOzvRtC~! z8p`LJA;;VEgAEn`zHB)P11S(Lsp%z2qe}iBW4{EEBWD}c|MA^~kQM7cXs$nW9r+LA zvEG*Gjq%t(<_~R7ZBeO4@TXEIqNx=?^l}GBXqN@)e2Giik_fiYrPhiwb@j zy+Uf5=~~iS5$&CgUESqXeZ2z}-NQF&KY!bJ$He=OGhu`M)eBX#H)+4$)W&4T+K$ub z{l%Kyn-$yVo1N!hPp`BN<^k=KJCc=4f*xB(MUVOv`q~4BD5X;+35iAh$O@k`xWoE1U*Lna7fV^_4o@>%wAz~AdScL9?N1H zHk(iK6>=z*Szd386!4Xq&AV1^k5*`Hy!}C5U#f1b+>w5t&uM11!A2&pm6T6QGs^LJ zoBA=|mjx5&<{#9u@Lbgl{}eRRM0nLZc8`Zod+NwHRtFP3#M6^5l-IJ;#6r`nC^k)` zGI-K;<{KaLPDUxcPfwevGn@4{SXoG$<~?}P2%-mSRqxs9~G`ri~>*^;Lk3Ni+FqwM(fPLFvd2PYzg>!Xzj`eYrbM5K%wLUfD zk~wfnMgz&bU8r}hs(Y`VmIb5y+mhe%uEdvHKeY?ra*$fV#R6yoOr!(p76AQV<{sW9 zsRu_k`k`D$b<5C)+lTt${5n%hVFL2RZz00yTNuI57noP0lMdk|F^uH>t5~;{X+`4{ zpKfK#D&{M7psGtt!Q$zKYVX6Ayo*rcm6U>?#~URljwG1x$KNt)- z*E8rPXPEHD9U9kC(`W~hlJvK?3hjI+5saD9=^_S^w*(L&C@8p@4|3y^mqY-3Jub5X zfSkZAmKzU%Vy2yPLp8#D9zO?zqC%dRHsAx>#ra?^vm$bU09w)ozEhB;g|8=qma76S z0imNFvR%UhJ7<`ZKC38{p}ZGOL1cj(N;WdRUT#6F8o{&{wTiCWB2An6=GF|Z#{QPf_1NRPWNJ|F zQK{Ea-*DNlKXap#DpVd%kTZlbEt``e576E;^;9naTG- zQujwKzSroX!xAs<)3aN+S_qK=LUQe{aki)*N0<-P%IwGK)u=&)p}zOPD5P3T)z{-M z%<%*_*=kdLwo3x#Q9mnbve#`g-({~^=J=NCvx7TM?K&l{FkBBN$wly^*}SXd9~k00 z5W*Uf;1oWVeq}9uGG*-bWANh>?~4y)3Q^F_qBE=Nd0bh&Zv!u#(;&-?nq|=WkkFq_ zBalVQy3K6*3cjD=DU@@(Q}7vEIb&rpov*wwe(a%Tr?Z{eg=t2?diGbS95otWO$vne z6f0b5c4^K;r&}tb$9x&tvWS;n3Kw}>d6LpDj2S(Ab}>9^oR>mPxH<*T=vDw_iRoY& z1U7vy+XrK-A;w!y>*Ivw?U?Pg(TE$w`Z}z96JzIpD4~mUwOE-INzNQ8sI^`bK0WXq zeUx+hGEsD=$kxqL=<}^UKEY|MJ(KI#I)iGMVz^F<4y|HI{Ui#{*0SWye8p){G+{M| zC!@+bHEAD=c&-vwGE6t5wJP8HLfaPB6a`F!K(*yXuYYY*dr- zb;$IBEfp}OZS358jeXknT$I9A0fF`yQ-(fO^scLKYTA+m@$ICSd@QN{qSuk3pEcvf zUj_7#7JW)PaoCXDc`ff=Zy&B3%EVSB@ySW2Fppc?_^Gbhr~Tpae3F55`B%kC+2!NH zJl#5XE@nRFQ%>aF%VUm>pyZCU`&O(rT&&VCFj4M$Qlf`fqSh-tS)F`RY9jX^nvA`$ z=5^_RXfncUdX33@sD)27QDgz&qPV1v02k0TZRoh@ zyls{Cq|NC*S?lCBi6ga*j}(Pi<#48 zksuG-ol(cG@ss%EPpMznZ?PgkmDh+WBK9v2H8rYwMJICc>X&&&9Y1<6*p;WQ70Xi( ze(Lc#3b`X>CKo%aRuaHtAvL_kJ{Lckgbb|ZJhpKo1wW;}oX885+tt7GHyU(!*XYUj znX!oa+5)*fGtKX_(>I!o;XNz28%;(7yf%?ATph?- z`snTuqSvgZ>hT-1$oDRYu+xX(!J44Aua@3_TOWt441Pu7OMESa4)cEdbdD;JVt~@? z6nf8yOYVZddEN10%r&vi(yGRE1+VIUv(?G!SCz(=a*yfQoWTe9x18(Oq~EmqdRnAl z2)1FR?`3exuA;CC4D9GT>k#i+?@9BiN}g3h)Km17ew=Eq9o;VYv40jEn>MpQQ69V! zx&R)mAFr0PS}hrbwDQ7QL#*8!IV&I=Iy!KLHg{W|D@~WXKfe{eYTZ^Hy_{_Rc~TkK zx@&B$ipd6m>wACf*^hpo|E_a}IPf_1;zX|TU7x>y)%G<$@@nl#`^A`X+qaBoKQ>=q zUrvsCp2Tx{@4H@WD>>`4I>ZEFm}KJlLmwzA*Xj!MuqMeYlu?@uz`#34mtPhnw7&z0YUy%;%w+ z_dSU3bBOO#i0_hw?_wYz738Zp?ITy{qh{iT%j{2s>CJ`-LJ+>U^@WhsiWKfUU!SHANuVZYfFx!*=h_TJkKrfTxq#NU8XX51l9%D;B z2b5jnZU5UC+v+0WCdL+kIjF;&Twsu-n;6@D2IhGIgHj~=%&1@}BnG%7VgL`{kaFJ| zON_WkyrqEJzx*&tJ*nLO4(02lD0S4tqKA##C?o|mzrTfOf#?BUfavBeWXbXEG;@Mc zNco1;-;QeQ-{5!)h)jh|R!Xn;xpokXql7V&VW}6=6=N*72Zzm4=DCjDNK$MKR$PQ- zN@i?gn#m(aJsi(lVa5j;9>!izynTEH{Ed(S_uEjFaHUB4Xsy`zgvdlSSV~NCx?)a?+=<_dJ_!FBeC&VXedclD^4;-=6FlKQ4r7!$!tnYV zm3YF~sHpL+tQT>-(Hbwz$*K&;>!UR#tnYUClkml8N!c@fxXx2btsXT zN3*>|vKV&CJJIZt4Rl{(;>=?>q?=j3R*&z*aLTrGgFca1#B#~M7bHAZ-i>{z&?{PF zrp*#iO--ar*L+(Nd93p$-B!Yx z{$oBK&E(drwid|dzn_nvM!918?Wi{EUz?9Vzw@WLCXgFuO&a?*4du-z(*hKbpUm=qN`sl0TSU(FHnyl3Q%CFQ0$ z`oECp`(KWR{gr6BZ;MToDA#CAP~P4IqhhuNpt07o&D6Ym&#^gc?=#zg)7In9+OV&Q zZQu@ALefgZyNo)Kp|Vx}$tt#fQPyo10T<1a)aFjgL*?_KG8M4UPPp3p{V_ zsdb$=Y!Yg0ml#WK>SdRTQ+o*&Qa{@6ut#&%age#oZWpyQeN>=4aXewJu~%E9@{l=> zUnrwj{NDUNYIkPuZuVA0`ZDgyAK#-wgGo>N%CcAY?gN?^vfexFI0-%1^yj21UV9IX zGo|iT8)8cmx!Gu;-2atfKi2!(b`lAkN| zE#=q^2kwaZysj^V1lZ+o=U+aS*@dL`JMD7k*RXmOziweI#?R!eH-qFYUMm)v@5(5a zkYCR#mUbL=npfNaf@v#na0m9E_KLWNSLR7;72V}cies{Pv=|lR)bP7$g;%Y15Lh-G zL(SZgK{l*Kx4FEJED8@JOc2x?8d7@66qFF7Ufn3+_Rh^Nho zN^Tjg<^_zrD8h#|M;DtVLIR|}>_uou3kog}!#_>2 zvlFJ$3h6*X$G8%%kCBD$et!WJWgq4pYX}uw^Y6OXQxS3R{e3`wy*PTmb-+jDRV3qS z84`@}^y^|{N&Vauk{;=*1dd$Og6fZc{LTH}YFV4l{jNd~y#cahsUazIs6>(#7Yd`ld7O zbM->f*$5K)ooK(toXmNjTlkZxPx83oq>>&#W_d=uiyuc@pTo(&J6fTl=-m}VgDp%Z zXC-tmlJ|SARBD1a+Gs_wfqWX%!$P(z<%wkaTRqk_vX>|#++m!CY{Gcgk|>oC;E*R~ z^lJq@$*aEJ{1RKzH!r&H1Yi5XtFpLjW;&%*#)<)77|{vXWG$nrKR}TUnWLGXuM574 zdc^*~q_|)GC8I5JWb+OXcr{vH^f`z=v`B)gNbG`Wpf++)Ogs@HvZGtpct;PQ#ekA5 zkmOXOz?0j^thsgES*8ek*goFNB7uyy9=05Zmc3_!eIm0s`jF9W?YhMleAolYp-+IQ zCX$H!h@ve5bI_R-2TT@l+GTf8!nB@g=phAr#UCU?UdftDE&Nda;D($bIU=Bo*(4s` zWU*0_hY@_0{!wykc?}Q5a@=nL(=Il^(S3p1DioO}P-kU*E2u;Km&-p=g=M)@0SgqVy4IQ z&kesb3_)@DeZy~^JpcFr05p!Ln8&B#FP#WQ^v`QeuZHo05DSqp-SYfMk8?@8*PiQr zt)(Lzftt1NX5exxU>T}x!B6rx_|~gb(~r-!^*vIOyH%C zZB+WZ$@?F8fqLIhT&-_c!2VY)3=n7}7i3u=p0E846+j&gI?t9b2n2|nppZ7tueS=$ z-I?f~#NJz20Ux;{yHS75r1;K;&kY^>;Ax-je!FNJ7(DuJfe##zx+Bkj)3T(0oF_{I zP>Y8kTcv$%YBErTfSz;y910wn>V?r&+Cd?wv&4WK;$;I!_R0yp=Fm7 zoz!;I?%Jns9@Ndg-8{~uTRdmrznOpyyJjyX?}2-tHoZ{v&^vmvpAkOLQ6p-#$hNds zLeezVSL$)Xq_e-I=)5;^BK;=(NvwMK;MuwlNRg+}CHYwSuG^(Aa{5{4)=qF1+|Rrg{}@T&BK zu}*st!oAo@9QIHx!qse_zA%6P!mjnTQzxGXr@AwDf{j@I`#H4t7F8bG`5&6qNT{8? zanPJIdik#SJ=ZT>c(y&KryQkSocLZih;CbnsoO@QImq`~C#%_fm2@^Nut9}b6_eOj z8@X@sITShjozyvDPuWyV0n7;AyGYrW`P;q$`!InmQq`=GxdA9@-r;DE*y;e)&Q`oG z<_ab*5%GS8y(BdJwx0POY$U{~YPRT1e%=UhCXa5X2mG$KGqVK4~xQ;@aTk zD--XA`NESr-;Vmib-2z|amvxo-{wFq2wOei6RJHwlluVNnwZJn>xCVQvpF}K{c|q6re z&F@|n{$n~E&=(H63P&P~Kz5BlO^iTkhyeFRV9Z3|UPa*VL=cii5(!2UCq|MsM3QJk z;(-7(WKpz&QHTwn(e^?e9LFlV#y=E{ zWlIFuqDR^6!~;g-^#Y^3SfYS7zz0|Hfn@PIeF=cJcu%r;gR6KPnuH+qcnz`ybFxIJ zARvG&flecV#x>55B`N$W)+#W*$TS+;D;5WmgdPzW>zY6SN%A90W-yI?Z5r>Fm;{W7 zLllRUnF8G(0Ta;yHCM5gg>i1tfErVPePSGdCIwX~-jXFn?JB`m5cs+<)^P_wf}1+l zmpU&UwQv<%Rv5R59;MTebeI_BRv0yk9yOE54>wI3FN~#6j2o1Wvfqiv;RfCj0OB1I zQ)hPKEw7TJ3u9Hu5Vi9OIC`-)4H?~yBLN{@9JyvO zkfpN-rUORP90OCBTvHeV(}6Tu`D6ec)AX{LESkhvwZ3$<#6)bNtZ|kU7)vsMCRLg| zDpVs;#}q)!4d}W`4)2S-Mvv=vO+YqFbB#`7zRsm7%wp<`6`qX~mdQig&2TWyV%JD@ z5KP6v%`|SvGtfvaV@bi2Nw>v_2byJdXe3LM=f9E8Qy|YDy-Im+nomleVP6!do0MQX zo5Mw(1Pn^oD@xMG$cuB0iX%_T)rd|tOGtAo%rT2f)GR7UDk@@)zRPbcD!nc$Cyy#2 zFRs=s))OkOMfA^;$KrvQfA-Ilf9w$Y*o8q=;`9-o^s|3{aQ5Q~w<$xp>F_Q_kRQm1 z&Ww9m+ZJNRh)bXBS29*4IE{fiFH~YNYRn5L5rUR-w3WVt@-k`4ATEMtNCNe992EPzhBK$Tg!io+KH;6KCDxIg8-O95t`Tkm#g_pE1ay~35Dp2 z))M$h)Wkh=370F-KVT{Te$Yl<=IGVmfLOa z$c_3)9%^<6t714&@>dS@#Y|{g%?Nx|gD1=DpKE8>n8aj1^%i+r`N*`iSi@f~b*9=P zs+y&@_2Bc_-a@nBrjv!R0DL6?MlrITTz$Gh5_yjkN9S^HWa1g0TI%;p$FeU?1~H2l z4VM9PkCH|2B5oIs_gNY*C_WgtEu8TV`(uiVc73-l*?J>>A;`E4MFUEa-gyzTT#|Yd z5hYOioO(>DejsFAU)De~B8~9zcHCYOrSS7z2|$Sj#|1E-BI&zw2<5D*G4+s+h9u3@ zj|Mwe6s$cJ(7ntS7wh1ohY^#z8hS~`)zU{xUtbzNc{0Y&Aog6ybpxUy)9_AMmGL|m zqA@AJ_*5qiT`2)rB&{E9)QGN_WY;*I6Ym)J(kSg_w9lB6FsI!})8z-*aGD>;)i~<{ z>zXF}j0R)piKl|hMpj%uooU|DtA3V*1kc^!ysXkS)50Br{s%<|5&gS@`K_8^Mf!b3 zVa2s!1m>kHqm8s>`E?79qdxcX9NyogSZQ-nQ~uO+ko0skeUe;y^^yD zZDS9|TIJsXroR&k&u1;_5E(L?UXF`-hbha8h4$xAXEs>BQa3tNb_PE_PC^6(3x+vX zhxOj%<^spN_*j58vQEjBBwmr6`8BEBq4-)B`>^lbwvBffaOX*a$g>RJ{I<587tO8w zgp~tIP2hs?wz4fQ`c|JKl>(8Q2W=N3e`d%=o*fQn)4u;Ueys466F)}D^?V8`+Vx_V z@ZP`5klkHc{kZRue)ofpnGB!0d+<>i6J!T_k5N>vAAMXHe47)ax|#q z1zuQrdS1^VdN^RX7==qYGSe3tR8CTF!XlV2Ye*)Ru~g?@>xQ4D#n_;U5_Yb*Nl6$& zBXGpnS8=dRz)384Xq@k9>9UyrS>157WcM9GjBSVsp#;8;jU=IfE&8ZzHsuzAzw}4l zFuYgf`XoHKKJmUk7%on(qUQhJmqtygL_+8^GU8Vh)B4lNdP(`Xl>mmz%sWkWf4*z3 zz`93bOm7**d8+ZEZklb&l;alF@ zY8J*4f8?aNwtR0yUVCU#iUB%=1_T5D>a=?X%mI`GvJh(Xk=}o|4z7a*6UXrRx3pd* zq~=d;?H!$nlt3@MuYX|hH#ZlepYh+xZl{1D5O{fJr#~(o!p-#)dFvPF^NZV164;Dz zwEYpx&dE}GEm2CxphEaaGNeOgckuA!@GgPcM!m8kq>Das1^=Pli)cG~BGvp)Y)*TP zq)a4K1N!X}?8~nug3W>u**tWAqEdFNgVKKX)>SPA8yRCcEDv`#2}YG5NEm4ZOap_2 zlM#!AmybA^Q4qrz?`=9BYbpj$+&f~7)a<14Wa~U@tdDhKq;G9_#olHMlB5#9ZAvBV zY#}k%tjxJD6a~_EKSj94m1)r+$NWhD;xeZna=@CnkuuP~vVh zz_2GnM%IirYtRA1kIzq0g}X@=e2?1l8!~DMleLMGySiMP)W$~Y3j%Mi(V2DqS8N4@ z7J%mN82yBgk}Asugb&EbG)st0+^(|Zc%az{h7;)AWZo#G?K}%XCohE=ORdb@X*=#? zr(Rl7(LR&+%}om)@xc$l&=vMLBPY{fDk~6{mQs`BGugp?t?1A5@L{g>PJh2k5xzYL zdreHUMn7=~)jiS&N)s{^l1wh11)2^s?aH((jcZ(@;V^9@+cG#%?^4*s7#r$b^gLi`EtNQ*A% z)a5UYB7Qso8Wl2P3aY%2(X*=y~#OwV7 zB9xKloW}M`vcsh5R)oAlCR&K=BBGwVb___@p(NP&Ch>+J`!QN#>NcOM0J#&oP zco$_ zzhHm=O)7ZFHw0s@{3{6a80&oKU0pK(s6W*VKzdeLT!|t`bG;h`JN&pDNbtwG z+%@pmaoW+_qXGb}JGI>g^_r;dw{asl1d($IGWZWnt2_h_>gaGGJ044m{L|Ls!+ZlZ zvfR)^IOfRtfrVnY&{uqm5tjkW;^FHnlcOQQdEnr@@S)*Sn(Leg!Ew{~6sA_ErI>hm z;97?P*}^_a?U1sfC4K+^M5|Q0g~#oH#GO7nMhqK88GTpylJc4lT-6&J{_Y@pW(Pl? z9~(mnY7?z}fNvuh#|v<=-%Fhy&V!s5%3I)?w9O1N0-IKpELguRu59`NkV48na5SYK zWc9W)9^!n+$kw@sZX$dmJ!*-Zut0dC_6blL>NJG80PrUfyW3Sh2`;Nbc&PXQ<n{qGAwtRXTbq{KdC}if|}a4h@<#;!r(}2$0L6CFz4p{^d|@$gBLH0?wSz@Oytg!T;@^4TX2hcG_QzZx`?8BhAsoX1zyCvTxi z0QgtMPydQ(y!!Bt_L{7f&$5lMt~5)RD5i}bN>F%Hsp7DAUt`f&7k_)8Tkaz?bj1BU(l6^Ql7Rj%fK{W zR^Y1^vU;#8w9}{*Q>*4dpKl>!K_`++9RN6_Z4%kn%Au^2DFVL5TK9uqB7Nfp-cQ{I z;NwDv8_!B?5NJUuvzc@i;uL`cb^v?wYXI~yfHsv)frI>YXV`e*J&xVyvj^@#8**s%osP$$Bf7cDj@NkIMsuk?)3x&W z?6;;BLJkROx0f0H2vT4Ti=6V!m)_FztUv|}Ku6F_K7L$1?srqiXjwg5U4Eby)q#SJ zFzhp^rhS=c&$g^-8JU#79-Hsb^F^{2TKPp|U`q*-0Q(9$^i?k1;*r9Gq_<0qdeyB9 zHtJ8`YjD?pX{2_l2z>6gT+mq4ovma>5@!mqVjpJkAMaBP%Qr*xqQPme z^3>8!EtfRkeNj;z&|%DvvmRJy3UBCBQ>gr1@4gzcLGTT?Q0Q6i-z50;{h+%y+TAKfm)%K;Tn7f<%bx_#2KIW3@1 z_Fk!W^AL{jJ!WuMP_(YnZl+d0x=FXS@-q40>t_iIw6^mP4I_1qbd6FCkMj%i4vtUp zNJ^KIOU>4c$&1#>Dbf$lNG>i{F3rfQs1?e0FNm#c5l(EAY3&rKYOCq$i)dK~zR zFCG2TQW{*-*=_E7WIPhZo!|V3F~SHP<5d)^PJgwjcg6sOd|uxHO*&p(%S<&8zi3cE z)p7cpw3G2n`jbr1lb4U#QF9d5`c;K%4#nztORa|bYs#iF504i~&1<=5s~muAsAGKW z+6@u$W3e)VIeLU{H>Vpn&X!RFyx{wM?V^#1vKbU0^zIVUly^r;B_PAS0SjqL;nth#Gsg{n9{m@9A z%+&YNCw_Y~AIwRDl5DSzmQxw;mkoS(-A>tfegDBkJJS*j^7AfT@L~gP#r$E5mU0dHt{lQQlTOl(f;9#=qSaP8A>-D3E2&z}g%7f#uv} z%&nlIekCHWubzhT@tEOSsNx3vjRgUyU^Seb`YOl|jGsv3@rVyj{}OlCML*_cT;QDV z>)}_6!J5N$a!FEdSGg*0MOYr#-zDzgM|7emZlr6qUS+1(t0)`$Jdv59OSfTNW(s+R zF;(EPNF@A8y2hF`8}J&s1nE9aOy@>K{~SYU^r8t`jR(O2+Dx?WxKtksp>& zlp45On3azM!!U8G>2PIx)*w`GF4od$_5hVsg=w!`gIIXvt^yHyTB;P{E8ed9j1Q+w z{(>q*W7}+sNnN+*y0;f(lE%iKlSMAgn(14ad@pF}2Znk2_?T>QOYN#~e(U^SKAyoo;tJA38Iiw#3fP(+?*WrEreaHCSK|f(9r#`>qoP$$JJ4=DC_j`BGNu zX?g`5+MhqF0RVw|P>2e$9-_ngIy2>Kk!%yP*etkO-WLp}$>5t>5yE(^fDDNsKovw; zj$Xneu=v<6!vf`#F@H7+00AHSo`q>z$MVfdxV07}H9OHOd)FJN|T-o>Z6X$L3T#+ue6n%eO9vywSR_DBC{Xn4QmO4ZuGvYarKjEUWX)D2^ld0ADNKwV~!n_FRp}5?= z#Q1UgB$#b9D9ZXRm`3Fkoa=gQqkLj03ZrhMly7nT{}KA~SO%FB_s@m>puC&Y?Ic(a zE1R@es;7+S59kZL=eJVH5EP`%zbx#A08*~D-xhW#7Cq4?=E%Ry780xQKWB@-u#<~T zDE`arC7 z5BG$U{;Y*D)Z^pHB;PF#* z<@sRgi%8OY`CA|oPf^BU`q2nKlyvOdBt(*4Aw@MaH!mYQC%^b(MB%HFiptP3m8!aW zyPDdDmR7?i8k9zB*N<0|ZZ*kJmyKv{_I z`R0@Un6Z&Gl4P0On8%ydh3YVkg(9wEH4dfpAGb1->JvWi#;sO09Sdjc9(7!Q1lL)m zR-qm2>U7p}4Yxp315zn?%U1{_zEkUB4VS6(L~Qi?Qj%HA^@ngccU!2R>N%!}x-nuY zJZc`j&mwRr+woYgu3#zbkW6@Oznu<$>0_vJjg^0i+9#i(=eytwp)n!UZJrvkctGfv1ywyG4y$A@lp8dY$=6Rsz$@Sst`;*h{lT@^Du@;Za z6X4krKhR6^z9y2Jclw?A4Ha0~ON9u$B7|StlMW+bt;+BY-G~qUKvwzcZNO-VK)U}* zWWfXfna2V8A6P+`Ga;ZJsgOYSG$VtD6q{RF<}`=Qcwyq#UTeWTL|3xmao^!@BV>pr z3}di93(N$LDbHX=e-li+AEP<;=v_hyrR#&lI-8l4_&8V~Bkc9qWgffHrute+Zh;0- z^0$US<3QV}bK^wVm>)y1cWKs^*?Yb%2QT0zq^Cj};)sMk;2cDSNEg`{&e zf_D3|0(ocS3io~bS?O|UuUQ!jf^v4v(uQS>GwXMRSj*s4yP0LtU-~tz5}jn&GrV*g z*gv-MIB!;kklu{ll>~0cShAE_4ZN(LWpK~0^H9g6tW4>UDivLJt2?Brz_~f3*|hRK zF!*{tX4z`nRZR8?_Jv}k#lsZySo)yR`B({kfQi!&v-d%{>-MR!O;_-Ka0S^9>iUON z1f3GcHun|39M>~sf3|gGk!3%Gh@P!> z5IwvEuwY474FO<2M#P)Jw?j@ZtgI_CL9<<<_3uSrIx7Nz%%g3yiV$3gn{V+-9XR;N z0wjZsiz|4CnrT4b_BN4Xym*3GV zxzqXKzZ!pX3$|z)efeW%N&&h)R=k9#gimd}BL|hyOY(e=Mvu&=Z-%3dxmV=e1|}DS zB{fD=va2Jb>vei#12Vy)QXRN)quvc%_E|I_{OSJBmk6w$t0ZzB1y=yRAI_**u`!uEq_ ze{(qG0a$@w{*LO1Frs&MS}grP7FGWIZwjdYHI9PoFP&lkjHAFzk1QGebHM*!>BeZCk@YWtmPp@bslh5fsnUF*MguJL<=TQWCsGwNR&+*a{s6n+nm zf9&8{8%+Kg97oUIluCnmV^EomZ9UGCLi`%LBL!lJaI#D)#!#Vf(a+$x8Qcq8M%oti zU53v>1ON4kEh0Ehrhj|h%uEUw1Bh@Y2AcSpjk&2i>#Y-PZu&>eJ9Ug=pR z43EG)w7iIA?vh z)E2*tGi=7MvkH&KBrCm*v7O;at|K$A6*}7+bG_>6c;cS9Hrkm@bbsL{5xhBI`6)FG z?{aaKDY|ZE5$pPTeo|{EY-!|X>-hVZbkYm#fKX4>W8;iF>boH(Jt!{6<#QN*(x$H$ z(d=g$pKpTdx_+8U;4B`n3T!37&Y~d8pFGpWH-Php$|@mK&vs7`rEd4CH=hd7AiQai z`FSX$2$rpSx^bxysd5WnXBC$eTaPxPY%qvAQr_{2))aDn8}FcAXs9n-gu+OGnCRii z1bS_G$(F4w#wiXRJDV;#a)pfdG~xu~(;YJr%AP6CwRDWqwkb1?M_6HYwk$^DHm=}5+9xZgXVfGgN58?eNGt?nk3LTbw)>Ie<27rJ;>k60 zsSq4vpRR__);tn7Ac7rrfUkJJYEWD@uPo&dgXS(Onp1YCJcV$etK#Xd%t7_^wOL+{ znHd{vT__}j6Jv4lm=hJF0J_^uCrJV=u5z3{Dr;eEC<8^JVp*5nKOC@b-g&?cYQ0Bt zvWCzkExdsI0@_|Z`;rga&~evXeQNtO2gO4fqj4)?c&FP(4T!etnv>sg{XK@e+4&@6AacA7*j}Gn|9+x}~4@EC!M!@0E!rq`n z=afG~4VSX*XQAP!?&kutb@b|#Q*k6X&{gns@=VK%k268d4Fq=04$j6uAboVf;NAlR zFhlRti7ifWdTvfUhA-ICzNdTO60#cCWPcZy?QUi@wIkCk$e4OxnRGeP&vPT6FIe|- zzxY35Z2GY(StH{KjEIj9BXNEQV`Y$t4biowb)4}-%TO;@>5PF$ll<~xNK8_1T0n#u zOrFTZPtq^HEtV;@f^V8eMO%d7=@^S@Et}lSpzTfw@~S@!Q)w9l{uqzKX(LjW67GfF z3~-}KcnYSC_;5(KeDi~`13wPehwgDE#&fAMf?6A2ZgxE^V*&9w30zONnKYEFttV)# zHvS?x03;_D2u5=^=%fh>YNmZg6cype>qAS}^a4W2ryTU9lNQU~USx~xAqW?l?mC4Z zc!$?91jPLFB1O@twb3nP#i0a6J_U~oQk zyC+8rYBvG$x8jCFtM!?);V+bh9)_o;tTFME4H8a%=3QJ%Lyy@38MQ8dV8qS9&MEXU zh=V2#x_k3h^$l6M{a26bM5@7)ujv3w**%bq5{Xi2M&L08LdyO1sQ#P#(Yt?oKic>$ zmpimj&KMyk&wk4ja2$fTGJ2e%ws94$~@v5=52Qi<>Xk|%Uls1#cCDqm)z zNb{^n3(Wct;bc`tR_ZcTtou*H$$Cgxzl4)DdUAUW$pa#UtgM73HYg9@m4=U)8}Polgh%EfY6s*thvF{Fg*myBpX=x@ zht0ML`+W^UqFLYUx%eb=XdOBsYY3Xx=&2QX_~H4&(pKD5TZ2_iiRqJl6^h2@>25Z+ z&+fWs)N_+>TEC{+bLee0s`aJz?C0MrHX~bd95q)stc#yJusN!kpFOK>s0p?r%WhiO z5pk{^xD9umyIH*S+^_vQbmVz6mydQ`*M^pMHgiochxTyyr`f+G-SOuq)h}0Xf`l(&T0b>5cZ9cf*LA`}dIsA2 zhW!QyM#gPG&;zXr?BSGaPf|{vWnK!_=@s()1QnS;=Cpz=gk-Y1?A>fDKr2G-2_F1FGMwNi zkv2oB5Fohgf*KCd708UBo+x-5LQAWG8cBL-q7VreG)0XeUNzc?m7(>?j?;<)=Em$P z1?nVxH%WLGYvT8CGwMa{RcA839n+SW*`)DSs^)0JbnxcMm2diKHw!b4`mX76rUvdT zS;lAXS>J5QLlzdIz{!T~TverO@|;1NS>yOsGFCGz1f_GQkT`O8B;KM@$Twd#iM3eH z)r@tmq{NK{lvv;9##n~eP?S;9l^0=_SWkqRrc}~AC&n$ zG?J-b4>K>V-_`^aefZR|b5IxbgX~?iyr(;;C0t)?C+|E8%JuYVO;@60=c?{U-D2`x2q`>Y;kO{8WX-`YhwvGo%y?!3=q+(?kl#`LUa z_{BcNlU;`DB0YJ${1&tZKt*~b0tHIk@Ca^J3vdHAaM}#=?zS?DS6w$U(dO!R(hVXS zkx-R}ucn_eMYw^|M;2>Wy6N>GAoOqVsrHc^!eGF1{`d2neg2;BQQAc_+y*jwO9ucr z$YsK-Lc#zjYx|sM!}j|}Um+)n$ZcKPoEEyM!To4dcGAM$CH4eXGS3{Iya*;8oHOM>uh~Qd#Xvl>|TB23lt$~#EZlA z#;F){m#pVU%^D#FU_Id0H)+j^NA0Otm8tg0iZ3^g%pBrNq zZ>$1GvQf~iAFyNXk2(@vYJ=7<#4o9EN!QFXHyhPqcYQ1smRKRH*Kl=ArcE!u3U8W= zW!Te4jNA{z9LAgvnR~P!AA3O`^`47d1XE0QIIDyV5xNFoA_?#~l?LOToAe6n!H+Cg zXrxYdd*KzfJfxXbIzMbyK7D!0<(6qc%aOAoaz7*7Pj_DBA)~a!n?X*eu#YtOmM8GF z@59cm)vL_5cu(;5xn0|14Bpm93Q18z5`7DEit<>v5FzrU!K}Q|_1d9sF@-pv;@Ck- zNq#UDr`MvkUTJmT;|Hl#WKMhJ{9j{-p9ry}nNs8nw7;(Qyhe;=*aZ+YnNctDZyDg< zZrK0V#^XT|1g&Q=gb(yShn?VGGmg_ktH%v zF_+n2iL%X(B_WtGzmH{;jpsGxy!$E!vU9Vu=e6}iC05P@bBovKb#2(CHvY2ntK=8I zq0i$7<~M($&qGTc@)78B&5K5|X$1PbZeZciZORY;E_3OXT|7-90T^Nb;>p8C5Z0Ce zRDUC4d~^-uA|A2fsQdq1Qd*NlBE>%@*!jHbZGLABR>%Pf0BM@Oal3%YRI0U zoB{c-UP)_U9zYHdj*$BN|1U5DvU75OWd>AM75tjnw*aOCpny2UXKVU@;j{fVVKw|A zeEr8hPHx=!KRS2>kX3$R5d3@|#owMMECUvb@J;-A=k{01V8)+!Ziu?ApLcGEx~<>t S-2R3^@ZU**G(>#m!v6#A139+< literal 0 HcmV?d00001 diff --git "a/images/\347\256\200\345\215\225\351\200\211\346\213\251\346\216\222\345\272\217.gif" "b/images/\347\256\200\345\215\225\351\200\211\346\213\251\346\216\222\345\272\217.gif" new file mode 100644 index 0000000000000000000000000000000000000000..d5975d0c6c403fb48f7341b8babb28d8afac4a9e GIT binary patch literal 146405 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/)cky#93;=TPv5HZ)%jl26U*4D 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

    r^KcUdu3E>*v|8 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 #_89u!(q%TM^2iob>AOU+rkXuV3v|pL?^i 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 UpH_VFbXIUOl8O=~VxRo~A8spv5C8xG literal 0 HcmV?d00001 From 700b527d2fe4df4dda2311946db9f2f04ea401b2 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 15 Jan 2018 13:37:20 -0600 Subject: [PATCH 0368/2496] =?UTF-8?q?Update=20python=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E5=85=AB=E5=A4=A7=E6=8E=92=E5=BA=8F.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...53\345\244\247\346\216\222\345\272\217.md" | 370 +++++++++++++++++- 1 file changed, 369 insertions(+), 1 deletion(-) diff --git "a/python\345\256\236\347\216\260\345\205\253\345\244\247\346\216\222\345\272\217.md" "b/python\345\256\236\347\216\260\345\205\253\345\244\247\346\216\222\345\272\217.md" index 730fdef0f..b45d9c9ff 100644 --- "a/python\345\256\236\347\216\260\345\205\253\345\244\247\346\216\222\345\272\217.md" +++ "b/python\345\256\236\347\216\260\345\205\253\345\244\247\346\216\222\345\272\217.md" @@ -1,4 +1,16 @@ -### 直接插入排序 +## 前言 +八大排序,三大查找是《数据结构》当中非常基础的知识点,在这里为了复习顺带总结了一下常见的八种排序算法。 +常见的八大排序算法,他们之间关系如下: + +![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/images/%E5%85%AB%E5%A4%A7%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95%E6%80%BB%E7%BB%93.png) + +他们的性能比较: + +![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/images/%E5%85%AB%E5%A4%A7%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95%E6%80%A7%E8%83%BD%E6%AF%94%E8%BE%83.png) + +### 直接插入排序 (Insertion sort) + +![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/images/%E7%9B%B4%E6%8E%A5%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F.gif) 直接插入排序的核心思想就是:将数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已排序的元素小,则交换,直到全部元素都比较过。 因此,从上面的描述中我们可以发现,直接插入排序可以用两个循环完成: @@ -19,3 +31,359 @@ def insert_sort(L): if L[i] > L[i+1]: L[i], L[i+1] = L[i+1], L[i] ``` +### 希尔排序 (Shell sort) + +![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/images/%E5%B8%8C%E5%B0%94%E6%8E%92%E5%BA%8F.png) + +希尔排序的算法思想:将待排序数组按照步长gap进行分组,然后将每组的元素利用直接插入排序的方法进行排序;每次将gap折半减小,循环上述操作;当gap=1时,利用直接插入,完成排序。 +同样的:从上面的描述中我们可以发现:希尔排序的总体实现应该由三个循环完成: + +1. 第一层循环:将gap依次折半,对序列进行分组,直到gap=1 +2. 第二、三层循环:也即直接插入排序所需要的两次循环。具体描述见上。 + +```python +#希尔排序 +def insert_shell(L): + #初始化gap值,此处利用序列长度的一半为其赋值 + gap = int(len(L)/2) + #第一层循环:依次改变gap值对列表进行分组 + while (gap >= 1): + #下面:利用直接插入排序的思想对分组数据进行排序 + #range(gap,len(L)):从gap开始 + for x in range(gap,len(L)): + #range(x-gap,-1,-gap):从x-gap开始与选定元素开始倒序比较,每个比较元素之间间隔gap + for i in range(x-gap,-1,-gap): + #如果该组当中两个元素满足交换条件,则进行交换 + if L[i] > L[i+gap]: + L[i], L[i+gap] = L[i+gap], L[i] + #while循环条件折半 + gap = int((gap/2)) +``` + +### 简单选择排序 (Selection sort) + +![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/images/%E7%AE%80%E5%8D%95%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F.gif) + +简单选择排序的基本思想:比较+交换。 + +1. 从待排序序列中,找到关键字最小的元素; +2. 如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换; +3. 从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。 +因此我们可以发现,简单选择排序也是通过两层循环实现。 + - 第一层循环:依次遍历序列当中的每一个元素 + - 第二层循环:将遍历得到的当前元素依次与余下的元素进行比较,符合最小元素的条件,则交换。 + +```python +# 简单选择排序 +def select_sort(L): +#依次遍历序列中的每一个元素 + for x in range(0,len(L)): +#将当前位置的元素定义此轮循环当中的最小值 + minimum = L[x] +#将该元素与剩下的元素依次比较寻找最小元素 + for i in range(x+1,len(L)): + if L[i] < minimum: + L[i], minimum = minimum, L[i] +#将比较后得到的真正的最小值赋值给当前位置 + L[x] = minimum +``` + +### 堆排序 (Heap sort) + +#### 堆的概念 + +堆:本质是一种数组对象。特别重要的一点性质:任意的叶子节点小于(或大于)它所有的父节点。对此,又分为大顶堆和小顶堆,大顶堆要求节点的元素都要大于其孩子,小顶堆要求节点元素都小于其左右孩子,两者对左右孩子的大小关系不做任何要求。 +利用堆排序,就是基于大顶堆或者小顶堆的一种排序方法。下面,我们通过大顶堆来实现。 + +基本思想: +堆排序可以按照以下步骤来完成: + +1. 首先将序列构建称为大顶堆; + +(这样满足了大顶堆那条性质:位于根节点的元素一定是当前序列的最大值) + +![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/images/%E6%9E%84%E5%BB%BA%E5%A4%A7%E9%A1%B6%E5%A0%86.png) + +2. 取出当前大顶堆的根节点,将其与序列末尾元素进行交换; + +(此时:序列末尾的元素为已排序的最大值;由于交换了元素,当前位于根节点的堆并不一定满足大顶堆的性质) + +3. 对交换后的n-1个序列元素进行调整,使其满足大顶堆的性质; + +![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/images/%E8%B0%83%E6%95%B4%E5%A4%A7%E9%A1%B6%E5%A0%86.png) + +4. 重复2.3步骤,直至堆中只有1个元素为止 + +```python +#-------------------------堆排序-------------------------------- +#**********获取左右叶子节点********** +def LEFT(i): + return 2*i + 1 +def RIGHT(i): + return 2*i + 2 +#********** 调整大顶堆 ********** +#L:待调整序列 length: 序列长度 i:需要调整的结点 +def adjust_max_heap(L, length, i): +#定义一个int值保存当前序列最大值的下标 + largest = i +#获得序列左右叶子节点的下标 + left, right = LEFT(i), RIGHT(i) +#当左叶子节点的下标小于序列长度 并且 左叶子节点的值大于父节点时,将左叶子节点的下标赋值给largest + if (left < length) and (L[left] > L[i]): + largest = left +#当右叶子节点的下标小于序列长度 并且 右叶子节点的值大于父节点时,将右叶子节点的下标值赋值给largest + if (right < length) and (L[right] > L[largest]): + largest = right +#如果largest不等于i 说明当前的父节点不是最大值,需要交换值 + if (largest != i): + L[i], L[largest] = L[largest], L[i] + # 执行递归操作:两个任务:1 寻找最大值的下标;2.最大值与父节点交换 + adjust_max_heap(L, length, largest) +#********** 建立大顶堆 ********** +def build_max_heap(L): + length = len(L) + for x in range(int((length-1)/2), -1, -1): + adjust_max_heap(L, length, x) +#********** 堆排序 ********** +def heap_sort(L): +#先建立大顶堆,保证最大值位于根节点;并且父节点的值大于叶子结点 + build_max_heap(L) +#i:当前堆中序列的长度.初始化为序列的长度 + i = len(L) +#执行循环:1. 每次取出堆顶元素置于序列的最后(len-1,len-2,len-3...) +# 2. 调整堆,使其继续满足大顶堆的性质,注意实时修改堆中序列的长度 + while (i > 0): + L[i-1], L[0] = L[0], L[i-1] +#堆中序列长度减1 + i -= 1 +#调整大顶堆 + adjust_max_heap(L, i, 0) +``` +### 冒泡排序 (Bubble sort) + +![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/images/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F.gif) + +冒泡排序思路比较简单: + +1. 将序列当中的左右元素,依次比较,保证右边的元素始终大于左边的元素; +( 第一轮结束后,序列最后一个元素一定是当前序列的最大值;) +2. 对序列当中剩下的n-1个元素再次执行步骤1。 +3. 对于长度为n的序列,一共需要执行n-1轮比较 +(利用while循环可以减少执行次数) + +```python +#冒泡排序 +def bubble_sort(L): + length = len(L) +#序列长度为length,需要执行length-1轮交换 + for x in range(1, length): +#对于每一轮交换,都将序列当中的左右元素进行比较 +#每轮交换当中,由于序列最后的元素一定是最大的,因此每轮循环到序列未排序的位置即可 + for i in range(0, length-x): + if L[i] > L[i+1]: + L[i], L[i+1] = L[i+1], L[i] +``` + +### 快速排序 (Quick sort) + +![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/images/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F.gif) + +快速排序的基本思想:挖坑填数+分治法 + +1. 从序列当中选择一个基准数(pivot) +在这里我们选择序列当中第一个数作为基准数 +2. 将序列当中的所有数依次遍历,比基准数大的位于其右侧,比基准数小的位于其左侧 +3. 重复步骤1.2,直到所有子集当中只有一个元素为止。 + +用伪代码描述如下: +- i =L; j = R; 将基准数挖出形成第一个坑a[i]。 +- j--由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中。 +- i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中。 +- 再重复执行2,3二步,直到i==j,将基准数填入a[i]中 + +```python +#快速排序 +#L:待排序的序列;start排序的开始index,end序列末尾的index +#对于长度为length的序列:start = 0;end = length-1 +def quick_sort(L, start, end): + if start < end: + i, j, pivot = start, end, L[start] + while i < j: +#从右开始向左寻找第一个小于pivot的值 + while (i < j) and (L[j] >= pivot): + j -= 1 +#将小于pivot的值移到左边 + if (i < j): + L[i] = L[j] + i += 1 +#从左开始向右寻找第一个大于pivot的值 + while (i < j) and (L[i] <= pivot): + i += 1 +#将大于pivot的值移到右边 + if (i < j): + L[j] = L[i] + j -= 1 +#循环结束后,说明 i=j,此时左边的值全都小于pivot,右边的值全都大于pivot +#pivot的位置移动正确,那么此时只需对左右两侧的序列调用此函数进一步排序即可 +#递归调用函数:依次对左侧序列:从0 ~ i-1//右侧序列:从i+1 ~ end + L[i] = pivot +#左侧序列继续排序 + quick_sort(L, start, i-1) +#右侧序列继续排序 + quick_sort(L, i+1, end) +``` + +### 归并排序 (Merge sort) + +![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/images/%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F.gif) + +1. 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个典型的应用。它的基本操作是:将已有的子序列合并,达到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。 +2. 归并排序其实要做两件事: + - 分解----将序列每次折半拆分 + - 合并----将划分后的序列段两两排序合并 +因此,归并排序实际上就是两个操作,拆分+合并 +3. 如何合并? + - L[first...mid]为第一段,L[mid+1...last]为第二段,并且两端已经有序,现在我们要将两端合成达到L[first...last]并且也有序。 + - 首先依次从第一段与第二段中取出元素比较,将较小的元素赋值给temp[] + - 重复执行上一步,当某一段赋值结束,则将另一段剩下的元素赋值给temp[] + - 此时将temp[]中的元素复制给L[],则得到的L[first...last]有序 +4. 如何分解? + - 在这里,我们采用递归的方法,首先将待排序列分成A,B两组; + - 然后重复对A、B序列分组; + - 直到分组后组内只有一个元素,此时我们认为组内所有元素有序,则分组结束。 + +```python +# 归并排序 +#这是合并的函数 +# 将序列L[first...mid]与序列L[mid+1...last]进行合并 +def mergearray(L, first, mid, last, temp): +#对i,j,k分别进行赋值 + i, j, k = first, mid+1, 0 +#当左右两边都有数时进行比较,取较小的数 + while (i <= mid) and (j <= last): + if L[i] <= L[j]: + temp[k] = L[i] + i += 1 + k += 1 + else: + temp[k] = L[j] + j += 1 + k += 1 +#如果左边序列还有数 + while (i <= mid): + temp[k] = L[i] + i += 1 + k += 1 +#如果右边序列还有数 + while (j <= last): + temp[k] = L[j] + j += 1 + k += 1 +#将temp当中该段有序元素赋值给L待排序列使之部分有序 + for x in range(0, k): + L[first+x] = temp[x] +# 这是分组的函数 +def merge_sort(L, first, last, temp): + if first < last: + mid = int(((first + last) / 2)) +#使左边序列有序 + merge_sort(L, first, mid, temp) +#使右边序列有序 + merge_sort(L, mid+1, last, temp) +#将两个有序序列合并 + mergearray(L, first, mid, last, temp) +# 归并排序的函数 +def merge_sort_array(L): +#声明一个长度为len(L)的空列表 + temp = len(L)*[None] +#调用归并排序 + merge_sort(L, 0, len(L)-1, temp) +``` + +### 基数排序 (Radix sort) + +![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/images/%E5%9F%BA%E6%95%B0%E6%8E%92%E5%BA%8F.gif) + +1. 基数排序:通过序列中各个元素的值,对排序的N个元素进行若干趟的“分配”与“收集”来实现排序。 + - 分配:我们将L[i]中的元素取出,首先确定其个位上的数字,根据该数字分配到与之序号相同的桶中 + - 收集:当序列中所有的元素都分配到对应的桶中,再按照顺序依次将桶中的元素收集形成新的一个待排序列L[ ] + - 对新形成的序列L[]重复执行分配和收集元素中的十位、百位...直到分配完该序列中的最高位,则排序结束 +2. 根据上述“基数排序”的展示,我们可以清楚的看到整个实现的过程 + +```python +#************************基数排序**************************** +#确定排序的次数 +#排序的顺序跟序列中最大数的位数相关 +def radix_sort_nums(L): + maxNum = L[0] +#寻找序列中的最大数 + for x in L: + if maxNum < x: + maxNum = x +#确定序列中的最大元素的位数 + times = 0 + while (maxNum > 0): + maxNum = int((maxNum/10)) + times += 1 + return times +#找到num从低到高第pos位的数据 +def get_num_pos(num, pos): + return (int((num/(10**(pos-1))))) % 10 +#基数排序 +def radix_sort(L): + count = 10 * [None] #存放各个桶的数据统计个数 + bucket = len(L) * [None] #暂时存放排序结果 +#从低位到高位依次执行循环 + for pos in range(1, radix_sort_nums(L)+1): + #置空各个桶的数据统计 + for x in range(0, 10): + count[x] = 0 + #统计当前该位(个位,十位,百位....)的元素数目 + for x in range(0, len(L)): + #统计各个桶将要装进去的元素个数 + j = get_num_pos(int(L[x]), pos) + count[j] += 1 + #count[i]表示第i个桶的右边界索引 + for x in range(1,10): + count[x] += count[x-1] + #将数据依次装入桶中 + for x in range(len(L)-1, -1, -1): + #求出元素第K位的数字 + j = get_num_pos(L[x], pos) + #放入对应的桶中,count[j]-1是第j个桶的右边界索引 + bucket[count[j]-1] = L[x] + #对应桶的装入数据索引-1 + count[j] -= 1 + # 将已分配好的桶中数据再倒出来,此时已是对应当前位数有序的表 + for x in range(0, len(L)): + L[x] = bucket[x] +``` + + + + + +## 运行时间实测 +10w数据 +``` +直接插入排序:1233.581131 +希尔排序:1409.8012320000003 +简单选择排序:466.66974500000015 +堆排序:1.2036720000000969 +冒泡排序:751.274449 +#**************************************************** +快速排序:1.0000003385357559e-06 +#快速排序有误:实际上并未执行 +#RecursionError: maximum recursion depth exceeded in comparison +#**************************************************** +归并排序:0.8262230000000272 +基数排序:1.1162899999999354 +``` +从运行结果上来看,堆排序、归并排序、基数排序真的快。 +对于快速排序迭代深度超过的问题,可以将考虑将快排通过非递归的方式进行实现。 + +## Resources + +1. [算法导论》笔记汇总](http://mindlee.com/2011/08/21/study-notes-directory/) +2. [八大排序算法的 Python 实现](http://python.jobbole.com/82270/) +3. [数据结构常见的八大排序算法(详细整理)](https://www.jianshu.com/p/7d037c332a9d) From 5b6c4dc007cfe075efdfe10e1a15ccc1851b9da5 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 15 Jan 2018 14:55:08 -0600 Subject: [PATCH 0369/2496] Update 345._Reverse_Vowels_of_a_String.md --- 345._Reverse_Vowels_of_a_String.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/345._Reverse_Vowels_of_a_String.md b/345._Reverse_Vowels_of_a_String.md index 238022466..380c1b513 100644 --- a/345._Reverse_Vowels_of_a_String.md +++ b/345._Reverse_Vowels_of_a_String.md @@ -27,7 +27,7 @@ class Solution(object): vowels = 'aeiou' string = list(s) i, j = 0, len(s) -1 - while i < j: + while i <= j: if string[i].lower() not in vowels: i += 1 elif string[j].lower() not in vowels: From 85f43a69b75bc3753c53126e90834b746e53a9bd Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 15 Jan 2018 15:14:09 -0600 Subject: [PATCH 0370/2496] Create 760._Find_Anagram_Mappings.md --- 760._Find_Anagram_Mappings.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 760._Find_Anagram_Mappings.md diff --git a/760._Find_Anagram_Mappings.md b/760._Find_Anagram_Mappings.md new file mode 100644 index 000000000..fe69ce141 --- /dev/null +++ b/760._Find_Anagram_Mappings.md @@ -0,0 +1,31 @@ +### 760. Find Anagram Mappings + +题目: + + + +难度: + +Easy + + + + + +```python +class Solution(object): + def anagramMappings(self, A, B): + """ + :type A: List[int] + :type B: List[int] + :rtype: List[int] + """ + if not A: + return [] + res = [] + for i in A: + res.append(B.index(i)) + return res +``` + + From eb41696499bcfb6770a1d876f90df238ef9338be Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 15 Jan 2018 19:40:33 -0600 Subject: [PATCH 0371/2496] Update 031._next_permutation.md --- 031._next_permutation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/031._next_permutation.md b/031._next_permutation.md index 35c92949f..69d810cb1 100644 --- a/031._next_permutation.md +++ b/031._next_permutation.md @@ -92,7 +92,7 @@ class Solution(object): idx = i break if idx != 0: # if the number exist,which means that the nums not like{5,4,3,2,1} - for i in range(len(nums)-1, 0, -1): + for i in range(len(nums)-1, idx-1, -1): if nums[i] > nums[idx-1]: nums[i], nums[idx-1] = nums[idx-1], nums[i] break From 37063d09f20f729e92f1981332251aeda0bf984b Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 15 Jan 2018 21:20:15 -0600 Subject: [PATCH 0372/2496] Update 208._implement_trie_(prefix_tree).md --- 208._implement_trie_(prefix_tree).md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/208._implement_trie_(prefix_tree).md b/208._implement_trie_(prefix_tree).md index 1a442748c..8ee06db58 100644 --- a/208._implement_trie_(prefix_tree).md +++ b/208._implement_trie_(prefix_tree).md @@ -56,10 +56,11 @@ class Trie(object): :rtype: bool """ node = self.root - for letter in word: - node = node.childs.get(letter) - if node is None: + for i in word: + child = node.childs.get(i) + if child is None: return False + node = child return node.isWord @@ -72,9 +73,10 @@ class Trie(object): """ node = self.root for letter in prefix: - node = node.childs.get(letter) - if node is None: + child = node.childs.get(letter) + if child is None: return False + node = child return True From 2dbb3fb12c49de99efe45599d4276ae063ce27c5 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 15 Jan 2018 22:44:37 -0600 Subject: [PATCH 0373/2496] Update 279._perfect_squares.md --- 279._perfect_squares.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/279._perfect_squares.md b/279._perfect_squares.md index a6daecc2d..df9450d5c 100644 --- a/279._perfect_squares.md +++ b/279._perfect_squares.md @@ -35,29 +35,29 @@ class Solution(object): return dp[-1] ``` -但是这个方法贼慢,有时候提交甚至会超时,有时候又不会。。。。因此想别的办法 +但是这个方法贼慢,beats 12%, 有时候提交甚至会超时,有时候又不会。。。。因此想别的办法 ### 思路二: -Static DP +Static DP, beats 90.39% ```python class Solution(object): + dp = [0] def numSquares(self, n): """ :type n: int :rtype: int """ - dp = [0] - while len(dp) <= n: - m = len(dp) + while len(self.dp) <= n: + m = len(self.dp) inf = float('inf') i = 1 while i * i <= m: - inf = min(inf, dp[m-i*i] + 1) + inf = min(inf, self.dp[m-i*i] + 1) i += 1 - dp.append(inf) - return dp[-1] + self.dp.append(inf) + return self.dp[n] ``` ### 思路三: From 726bf955d8ae72fe0c4ebe7b8ba1e643330bbaaa Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 15 Jan 2018 22:47:08 -0600 Subject: [PATCH 0374/2496] Update 279._perfect_squares.md --- 279._perfect_squares.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/279._perfect_squares.md b/279._perfect_squares.md index df9450d5c..2e012d1be 100644 --- a/279._perfect_squares.md +++ b/279._perfect_squares.md @@ -33,7 +33,6 @@ class Solution(object): dp[i] = min(dp[i], dp[i-j*j] + 1) j += 1 return dp[-1] - ``` 但是这个方法贼慢,beats 12%, 有时候提交甚至会超时,有时候又不会。。。。因此想别的办法 @@ -59,6 +58,13 @@ class Solution(object): self.dp.append(inf) return self.dp[n] ``` +这里有个问题现在还没搞明白,以后再好好想一下,写成```return self.dp[-1]```提交就失败, +``` +Submission Result: Wrong Answer +Input: 1024 +Output: 4 +Expected: 1 +``` ### 思路三: From 47ae790f61732c6ef9f6647b668537c290a61049 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 15 Jan 2018 23:09:16 -0600 Subject: [PATCH 0375/2496] Update 279._perfect_squares.md --- 279._perfect_squares.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/279._perfect_squares.md b/279._perfect_squares.md index 2e012d1be..f4d8bd50f 100644 --- a/279._perfect_squares.md +++ b/279._perfect_squares.md @@ -58,6 +58,20 @@ class Solution(object): self.dp.append(inf) return self.dp[n] ``` + +进一步简化可以写成: +```python +class Solution(object): + dp = [0] + def numSquares(self, n): + """ + :type n: int + :rtype: int + """ + while len(self.dp) <= n: + self.dp += min(self.dp[-j*j] + 1 for j in range(1, int(len(self.dp)**0.5+1))), + return self.dp[n] +``` 这里有个问题现在还没搞明白,以后再好好想一下,写成```return self.dp[-1]```提交就失败, ``` Submission Result: Wrong Answer From 62cef32a89d6852c4a608963f58c133f5935c2ea Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 16 Jan 2018 15:44:40 -0600 Subject: [PATCH 0376/2496] Create Google.md --- interview question/Google.md | 59 ++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 interview question/Google.md diff --git a/interview question/Google.md b/interview question/Google.md new file mode 100644 index 000000000..d14b8fae0 --- /dev/null +++ b/interview question/Google.md @@ -0,0 +1,59 @@ +### 第一轮: +1. Talk about the work experience of you + + +2. 算法题:给一个number,例如21200, + + + +Idx: 0 1 2 3 4 +Number: 2 1 2 0 0 + +- 0th位置有个2,并且整个number里面有2个0; +- 1th有个1,所以整个number里面有一个1; +- 2th有个2,所以整个number里面有两个2; +- 3th有个0,所以整个number里面有0个3; +- 4th有个0,所以整个number里面有0个4 + +满足这个property的number是self_describing的 +叫你写一个函数 +def self_describing(self, number), return 这个number是不是满足self_describing,True or False + + + +3. 算法题,面试官自己工作中的,写了一串, +- 问你是```BFS```还是DFS, +- 问你是```recursive```还是iterative,recursive方法有什么limitation +- 不管结果,你给他的代码转换成```iterative``` or recursive + + + + +### 第二轮: +1. talk about the most challenging work that you have been worked on + + +2. HashTable 和 BST的比较,你知道什么说什么,时间复杂度,实现,插入,删除,查找 + +3. HashTable 和 BST 的concurrency对比 + + + +4. 算法题 + +首先,morse_code = { + 'a': '..', + 'b': '.-', + 'c': '...', + ‘d’: '-' + , + , + ......... + } +给你一串words, +- 例如['ab','cd'],这时候因为words里面的两个word的对应的morse_code是一样的,所以我们返回他们的morse_code,即['...-'] +- 再例如有很多words,有着相同morse_code的words很多,你要返回所有相同morse_code 的words所对应的那个morse_code,例如['...-', '..'] + + + + From a314012c72fb4f46976d3fee6bbfe2caf0d1ac4d Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 20 Jan 2018 03:11:55 -0600 Subject: [PATCH 0377/2496] Create 121._Best_Time_to_Buy_and_Sell_Stock.md --- 121._Best_Time_to_Buy_and_Sell_Stock.md | 39 +++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 121._Best_Time_to_Buy_and_Sell_Stock.md diff --git a/121._Best_Time_to_Buy_and_Sell_Stock.md b/121._Best_Time_to_Buy_and_Sell_Stock.md new file mode 100644 index 000000000..a51720281 --- /dev/null +++ b/121._Best_Time_to_Buy_and_Sell_Stock.md @@ -0,0 +1,39 @@ +### 121. Best Time to Buy and Sell Stock + +题目: + + + +难度: + +Easy + + +思路 + +All the straight forward solution should work, but if the interviewer twists the question slightly +by giving the difference array of prices, Ex: for ```{1, 7, 4, 11}```, if he gives ```{0, 6, -3, 7}```, +you might end up being confused. + +Here, the logic is to calculate the difference ```(maxCur += prices[i] - prices[i-1])``` +of the original array, and find a contiguous subarray giving maximum profit. +If the difference falls below ```0```, reset it to zero. + + +```python +class Solution(object): + def maxProfit(self, prices): + """ + :type prices: List[int] + :rtype: int + """ + if not prices: + return 0 + res, max_cur = 0, 0 + for i in range(1, len(prices)): + max_cur = max(0, max_cur+prices[i]-prices[i-1]) + res = max(res, max_cur) + return res +``` + + From 18de1226a573aaae606ff8d2ea50232f7f2b46f2 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 20 Jan 2018 03:22:32 -0600 Subject: [PATCH 0378/2496] Update 121._Best_Time_to_Buy_and_Sell_Stock.md --- 121._Best_Time_to_Buy_and_Sell_Stock.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/121._Best_Time_to_Buy_and_Sell_Stock.md b/121._Best_Time_to_Buy_and_Sell_Stock.md index a51720281..352650cba 100644 --- a/121._Best_Time_to_Buy_and_Sell_Stock.md +++ b/121._Best_Time_to_Buy_and_Sell_Stock.md @@ -19,7 +19,8 @@ Here, the logic is to calculate the difference ```(maxCur += prices[i] - prices[ of the original array, and find a contiguous subarray giving maximum profit. If the difference falls below ```0```, reset it to zero. - +参考[Maximum subarray problem](https://en.wikipedia.org/wiki/Maximum_subarray_problem), +[Kadane's Algorithm](https://discuss.leetcode.com/topic/19853/kadane-s-algorithm-since-no-one-has-mentioned-about-this-so-far-in-case-if-interviewer-twists-the-input) ```python class Solution(object): def maxProfit(self, prices): From 732d93aad48cfa0fd638315810f1d91ad6b92c0d Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 1 Feb 2018 19:11:17 -0600 Subject: [PATCH 0379/2496] Update 078.Subsets .md --- 078.Subsets .md | 28 ++++------------------------ 1 file changed, 4 insertions(+), 24 deletions(-) diff --git a/078.Subsets .md b/078.Subsets .md index c0092653e..949a472f5 100644 --- a/078.Subsets .md +++ b/078.Subsets .md @@ -1,4 +1,4 @@ -###78.Subsets +### 78.Subsets 题目: @@ -9,7 +9,7 @@ Python代码 -``` +```python class Solution(object): def subsets(self, nums): """ @@ -23,31 +23,11 @@ class Solution(object): ``` -可是我不能理解,为嘛我写的这个不work. - -⬇️ - -我的不work因为不能同时改变list和iterate list - - -``` -def subsets(nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - results = [[]] - for num in nums: - for result in results: - results.extend([result + [num]]) - return results - -``` BackTrack 标准解法版 -``` +```python class Solution: def search(self, nums, S, index): @@ -64,4 +44,4 @@ class Solution: return self.results ``` -对每个元素,有两种可能,加入S和不加入S,写起来思路还是很清爽的 \ No newline at end of file +对每个元素,有两种可能,加入S和不加入S,写起来思路还是很清爽的 From e2b4b3066bb61235bc9ab3bc41ed60bf28d2a3e3 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 1 Feb 2018 19:11:28 -0600 Subject: [PATCH 0380/2496] Update 078.Subsets .md --- 078.Subsets .md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/078.Subsets .md b/078.Subsets .md index 949a472f5..e5b100563 100644 --- a/078.Subsets .md +++ b/078.Subsets .md @@ -1,4 +1,4 @@ -### 78.Subsets +### 78. Subsets 题目: From 4b4e2483419c7c9b0855b28c6f0daa446b6e69cf Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 1 Feb 2018 19:37:08 -0600 Subject: [PATCH 0381/2496] Update 090._subsets_ii.md --- 090._subsets_ii.md | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/090._subsets_ii.md b/090._subsets_ii.md index 9a1cdafd4..8f842080e 100644 --- a/090._subsets_ii.md +++ b/090._subsets_ii.md @@ -1,4 +1,4 @@ -###90. Subsets II +### 90. Subsets II 题目: @@ -9,6 +9,7 @@ 思路: + 参考别人的 现在来观察规律,与之前有不同之处是我们需要一个位置来mark,因为不再需要往之前出现过的地方再加了,看这个: @@ -25,9 +26,27 @@ +```python +class Solution(object): + def subsetsWithDup(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + nums.sort() + results = [[]] + for i in range(len(nums)): + if any(nums[i] in result for result in results): + results.extend([result + [nums[i]] for result in results if result.count(nums[i]) == i - nums.index(nums[i])]) + else: + results.extend([result + [nums[i]] for result in results]) + return results + +``` -``` + +```python class Solution(object): def subsetsWithDup(self, nums): """ @@ -44,4 +63,5 @@ class Solution(object): result.append(result[j] + [nums[i]]) return result -``` \ No newline at end of file +``` + From 67a67bedac1d7e1075de2ccc1f37fd56897ee0ec Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 1 Feb 2018 19:38:09 -0600 Subject: [PATCH 0382/2496] Update 090._subsets_ii.md --- 090._subsets_ii.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/090._subsets_ii.md b/090._subsets_ii.md index 8f842080e..fca30b462 100644 --- a/090._subsets_ii.md +++ b/090._subsets_ii.md @@ -24,8 +24,7 @@ 这里这个start是来记录了之前一次数组的长度,temp_size记住目前数组的长度,然后用这个来达到去重的目的,非常聪明 - - +自己的解法 ```python class Solution(object): def subsetsWithDup(self, nums): @@ -45,7 +44,7 @@ class Solution(object): ``` - +别人的,但是一个意思 ```python class Solution(object): def subsetsWithDup(self, nums): From 39ec077157e641e72e01b3d3a9a6e96deb758d39 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 1 Feb 2018 19:48:04 -0600 Subject: [PATCH 0383/2496] Update 090._subsets_ii.md --- 090._subsets_ii.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/090._subsets_ii.md b/090._subsets_ii.md index fca30b462..99661e3da 100644 --- a/090._subsets_ii.md +++ b/090._subsets_ii.md @@ -19,6 +19,20 @@ [[],[1]] 是 [1] 的子集合 [[],[1],[2],[1,2]] 是 [1,2] 的子集合,实际上就是1的子集合们加了一个2 新来的2不能再从头开始加了,它需要从[ .., [2],[1,2] ]加 才是合理的 + +****当出现多个重复数字时,应该从 已经拥有了新数字所出现全部次数的list开始加才是合理的**** +[[],[1]] 是 [1] 的子集合 +[[],[1],[2],[1,2]] 是 [1,2] 的子集合,实际上就是1的子集合们加了一个2 +[ + [2], + [1], + [1,2,2], + [2,2], + [1,2], + [] +] 是 [1,2,2] 的子集和,实际上也就是[1,2]的子集合加了一个2 +新来的2不能再从头开始加了,它需要从[ .., [2,2],[1,2,2] ]加 才是合理的 +例如: ``` From 5dd2f452ef3695cb90443d70939b35d93858af66 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 4 Feb 2018 22:14:24 -0600 Subject: [PATCH 0384/2496] Update 100._same_tree.md --- 100._same_tree.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/100._same_tree.md b/100._same_tree.md index ecc8c94f8..f12c86c3a 100644 --- a/100._same_tree.md +++ b/100._same_tree.md @@ -31,3 +31,19 @@ class Solution(object): return p.val == q.val and all(map(self.isSameTree, (p.left, p.right), (q.left, q.right))) if p and q else p is q ``` +```python +class Solution(object): + def isSameTree(self, p, q): + """ + :type p: TreeNode + :type q: TreeNode + :rtype: bool + """ + if (not p and q) or (p and not q): + return False + if not p and not q: + return True + if p.val == q.val: + return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right) + return False +``` From 8f5e73f4d4d2d59e4b6f56b3832f97e28cf411d5 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 4 Feb 2018 22:37:35 -0600 Subject: [PATCH 0385/2496] Update 083._remove_duplicates_from_sorted_list.md --- 083._remove_duplicates_from_sorted_list.md | 23 +++++++++------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/083._remove_duplicates_from_sorted_list.md b/083._remove_duplicates_from_sorted_list.md index bdca46263..5f7c07987 100644 --- a/083._remove_duplicates_from_sorted_list.md +++ b/083._remove_duplicates_from_sorted_list.md @@ -9,25 +9,20 @@ Easy +dummy 大法 - -``` +```python class Solution(object): def deleteDuplicates(self, head): """ :type head: ListNode :rtype: ListNode """ - cur = head - while cur: - if cur.next: - if cur.val == cur.next.val: - cur.next = cur.next.next - else: - cur = cur.next - # cur.next None - else: - break - return head + dummy = head + while head: + while head.next and head.next.val == head.val: + head.next = head.next.next # skip duplicated node + head = head.next # not duplicate of current node, move to next node + return dummy -``` \ No newline at end of file +``` From a7835ad8feaadaa33a2d1892b1c8461f451725b7 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 4 Feb 2018 22:37:52 -0600 Subject: [PATCH 0386/2496] Update 083._remove_duplicates_from_sorted_list.md --- 083._remove_duplicates_from_sorted_list.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/083._remove_duplicates_from_sorted_list.md b/083._remove_duplicates_from_sorted_list.md index 5f7c07987..a9081a689 100644 --- a/083._remove_duplicates_from_sorted_list.md +++ b/083._remove_duplicates_from_sorted_list.md @@ -1,4 +1,4 @@ -###83. Remove Duplicates from Sorted List +### 83. Remove Duplicates from Sorted List 题目: From bbae9226364d86777a7ea134dd59e229a3597857 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 5 Feb 2018 07:35:01 -0600 Subject: [PATCH 0387/2496] Update 121._Best_Time_to_Buy_and_Sell_Stock.md --- 121._Best_Time_to_Buy_and_Sell_Stock.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/121._Best_Time_to_Buy_and_Sell_Stock.md b/121._Best_Time_to_Buy_and_Sell_Stock.md index 352650cba..030ebd52b 100644 --- a/121._Best_Time_to_Buy_and_Sell_Stock.md +++ b/121._Best_Time_to_Buy_and_Sell_Stock.md @@ -21,6 +21,21 @@ If the difference falls below ```0```, reset it to zero. 参考[Maximum subarray problem](https://en.wikipedia.org/wiki/Maximum_subarray_problem), [Kadane's Algorithm](https://discuss.leetcode.com/topic/19853/kadane-s-algorithm-since-no-one-has-mentioned-about-this-so-far-in-case-if-interviewer-twists-the-input) + + +Why maxCur = Math.max(0, maxCur += prices[i] - prices[i-1]); ? + +Well, we can assume opt(i) as the max Profit you will get if you sell the stock at day i; + +We now face two situations: + +We hold a stock at day i, which means opt(i) = opt(i - 1) - prices[i - 1] + prices[i] (max Profit you can get if you sell stock at day(i-1) - money you lose if you buy the stock at day (i-1) + money you gain if you sell the stock at day i. + +We do not hold a stock at day i, which means we cannot sell any stock at day i. In this case, money we can get at day i is 0; + +opt(i) is the best case of 1 and 2. + +So, opt(i) = Max{opt(i - 1) - prices[i - 1] + prices[i], 0} ```python class Solution(object): def maxProfit(self, prices): From 81c7df86f189113b0f7d8286db0fe186f8893d27 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 5 Feb 2018 07:36:04 -0600 Subject: [PATCH 0388/2496] Update 121._Best_Time_to_Buy_and_Sell_Stock.md --- 121._Best_Time_to_Buy_and_Sell_Stock.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/121._Best_Time_to_Buy_and_Sell_Stock.md b/121._Best_Time_to_Buy_and_Sell_Stock.md index 030ebd52b..2edfa898b 100644 --- a/121._Best_Time_to_Buy_and_Sell_Stock.md +++ b/121._Best_Time_to_Buy_and_Sell_Stock.md @@ -23,6 +23,7 @@ If the difference falls below ```0```, reset it to zero. [Kadane's Algorithm](https://discuss.leetcode.com/topic/19853/kadane-s-algorithm-since-no-one-has-mentioned-about-this-so-far-in-case-if-interviewer-twists-the-input) +``` Why maxCur = Math.max(0, maxCur += prices[i] - prices[i-1]); ? Well, we can assume opt(i) as the max Profit you will get if you sell the stock at day i; @@ -36,6 +37,9 @@ We do not hold a stock at day i, which means we cannot sell any stock at day i. opt(i) is the best case of 1 and 2. So, opt(i) = Max{opt(i - 1) - prices[i - 1] + prices[i], 0} +``` + + ```python class Solution(object): def maxProfit(self, prices): From 748c79c493b80479a4f9924851818f1f0b4c9593 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 22 Feb 2018 14:35:31 -0600 Subject: [PATCH 0389/2496] Create 740_.delete_and_earn.md --- 740_.delete_and_earn.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 740_.delete_and_earn.md diff --git a/740_.delete_and_earn.md b/740_.delete_and_earn.md new file mode 100644 index 000000000..3810c4b09 --- /dev/null +++ b/740_.delete_and_earn.md @@ -0,0 +1,29 @@ +### 740. Delete and Earn + +题目: + + + +难度: + +Medium + + + + +```python +class Solution(object): + def deleteAndEarn(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + dp = [0] * 10001 + for num in nums: + dp[num] += num + for i in range(2, 10001): + dp[i] = max(dp[i]+dp[i-2], dp[i-1]) + return dp[-1] +``` + + From d793c7248a952b9eb27d9eea15c1c9d4eabd0b9a Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 22 Feb 2018 14:35:51 -0600 Subject: [PATCH 0390/2496] Rename 740_.delete_and_earn.md to 740._delete_and_earn.md --- 740_.delete_and_earn.md => 740._delete_and_earn.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename 740_.delete_and_earn.md => 740._delete_and_earn.md (100%) diff --git a/740_.delete_and_earn.md b/740._delete_and_earn.md similarity index 100% rename from 740_.delete_and_earn.md rename to 740._delete_and_earn.md From 6e4db16b6db206d63c40a7edc9d46ce3b7bcb5fd Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 22 Feb 2018 14:40:59 -0600 Subject: [PATCH 0391/2496] Update 198._house_robber.md --- 198._house_robber.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/198._house_robber.md b/198._house_robber.md index 74fc67d1e..2b2deedda 100644 --- a/198._house_robber.md +++ b/198._house_robber.md @@ -1,5 +1,5 @@ -###198. House Robber +### 198. House Robber 题目: @@ -18,7 +18,7 @@ dp[i] = max(dp[i-1], dp[i-2] + nums[i]) AC 代码 -``` +```python class Solution(object): def rob(self, nums): """ @@ -38,4 +38,16 @@ class Solution(object): return dp[n-1] ``` +```python +class Solution(object): + def rob(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + last, now = 0, 0 + for i in nums: last, now = now, max(last + i, now) + return now +``` + From dc80e46d8e2678e1fe469d70851784686260bcea Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 22 Feb 2018 15:18:24 -0600 Subject: [PATCH 0392/2496] Update and rename 012. Integer to Roman.md to 012._Integer_to_Roman.md --- 012. Integer to Roman.md => 012._Integer_to_Roman.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename 012. Integer to Roman.md => 012._Integer_to_Roman.md (97%) diff --git a/012. Integer to Roman.md b/012._Integer_to_Roman.md similarity index 97% rename from 012. Integer to Roman.md rename to 012._Integer_to_Roman.md index 617f287ea..a4d377b67 100644 --- a/012. Integer to Roman.md +++ b/012._Integer_to_Roman.md @@ -1,4 +1,4 @@ -###12. Integer to Roman +### 12. Integer to Roman 题目: @@ -86,4 +86,4 @@ class Solution(object): -因为dict本身是无序的,这里做了一个排序的操作,否则可能会出现IIII这种状况。 \ No newline at end of file +因为dict本身是无序的,这里做了一个排序的操作,否则可能会出现IIII这种状况。 From 67f0ce833ca411a3a3853af17bde650a354eab3d Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 22 Feb 2018 15:24:45 -0600 Subject: [PATCH 0393/2496] Update 012._Integer_to_Roman.md --- 012._Integer_to_Roman.md | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/012._Integer_to_Roman.md b/012._Integer_to_Roman.md index a4d377b67..529a323e8 100644 --- a/012._Integer_to_Roman.md +++ b/012._Integer_to_Roman.md @@ -64,22 +64,35 @@ via AC代码 -``` - +```python class Solution(object): def intToRoman(self, num): """ :type num: int :rtype: str """ - lookup = {'M':1000, 'CM':900, 'D':500, 'CD':400, 'C':100, 'XC':90, 'L':50, 'XL':40, 'X':10, 'IX':9, 'V':5, 'IV':4, 'I':1} - romanSt = '' + lookup = { + 'M': 1000, + 'CM': 900, + 'D': 500, + 'CD': 400, + 'C': 100, + 'XC': 90, + 'L': 50, + 'XL': 40, + 'X': 10, + 'IX': 9, + 'V': 5, + 'IV': 4, + 'I': 1 + } + romanStr = '' for symbol, val in sorted(lookup.items(), key = lambda t: t[1], reverse = True): while num >= val: - romanSt += symbol + romanStr += symbol num -= val - return romanSt + return romanStr ``` From 417a474b080b38853a1f8fff297c1e28cbb25424 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 22 Feb 2018 15:26:45 -0600 Subject: [PATCH 0394/2496] Update 012._Integer_to_Roman.md --- 012._Integer_to_Roman.md | 33 +-------------------------------- 1 file changed, 1 insertion(+), 32 deletions(-) diff --git a/012._Integer_to_Roman.md b/012._Integer_to_Roman.md index 529a323e8..df577b5c6 100644 --- a/012._Integer_to_Roman.md +++ b/012._Integer_to_Roman.md @@ -25,43 +25,12 @@ Medium I V X L C D M ``` -组合是这种方式 - -``` -1 2 3 4 5 6 7 8 9 -I II III IV V VI VII VIII IX -10 20 30 40 50 60 70 80 90 -X XX XXX XL L LX LXX LXXX XC -100 200 300 400 500 600 700 800 900 -C CC CCC CD D DC DCC DCCC CM -``` - - - -可以看出来,这个进位或者组合是4和9的地方进位的,比如4是加上了I然后到V,9是加上了I到X。所以题目要限制数字在1-3999之间。 - -然后就去谷歌罗马数字最大能表示多少,看到了一个更好的总结,不过是可以更大的,数字上面加bar. - - - -via - -下面是几个通常的规则来构成罗马数字: - -- 大部分时候用字符相叠加来表示数字。I是1, II是2, III是3。VI是6(挨个看来,是“5 和 1”的组合),VII是7,VIII是8。 -- 含有10的字符(I,X,C和M)最多可以重复出现三个。为了表示4,必须用同一位数的下一个更大的数字5来减去一。不能用IIII来表示4,而应该是IV(意思是比5小1)。40写做XL(比50小10),41写做XLI,42写做XLII,43写做XLIII,44写做XLIV(比50小10并且比5小1)。 -- 有些时候表示方法恰恰相反。为了表示一个中间的数字,需要从一个最终的值来减。比如:9需要从10来减:8是VIII,但9确是IX(比10小1),并不是VIII(I字符不能重复4次)。90是XC,900是CM。 -- 表示5的字符不能在一个数字中重复出现。10只能用X表示,不能用VV表示。100只能用C表示,而不是LL。 -- 罗马数字是从左到右来计算,因此字符的顺序非常重要。DC表示600,而CD完全是另一个数字400(比500小100)。CI是101,IC不是一个罗马数字(因为你不能从100减1,你只能写成XCIX,表示比100小10,且比10小1)。 - -**规则总结:  左减右加    加减时位数和被加减数相差位数最大为一(两位数可加减一位数 三位数只能加减两位数)  从左向右计数** +见[Leetcode 013]() 所以想着4,9这块需要特殊处理一下,但是看到了一个很棒的[算法](https://gist.github.com/imilu/00f32c61e50b7ca296f91e9d96d8e976) - - AC代码 ```python From 8dfd44723eb1b4fb6f61ee761bfe43cd7e2ae534 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 22 Feb 2018 15:27:32 -0600 Subject: [PATCH 0395/2496] Update 012._Integer_to_Roman.md --- 012._Integer_to_Roman.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/012._Integer_to_Roman.md b/012._Integer_to_Roman.md index df577b5c6..6177e3322 100644 --- a/012._Integer_to_Roman.md +++ b/012._Integer_to_Roman.md @@ -27,9 +27,9 @@ I V X L C D M -见[Leetcode 013]() +罗马数字表示法见[Leetcode 013](https://github.com/Lisanaaa/thinking_in_lc/blob/master/013._Roman_to_Integer.md) -所以想着4,9这块需要特殊处理一下,但是看到了一个很棒的[算法](https://gist.github.com/imilu/00f32c61e50b7ca296f91e9d96d8e976) +这里有一个很棒的[算法](https://gist.github.com/imilu/00f32c61e50b7ca296f91e9d96d8e976) AC代码 From acb990006a89817ad0b3cdda2dda15c667e09e99 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 22 Feb 2018 15:35:22 -0600 Subject: [PATCH 0396/2496] Update and rename 453. Minimum Moves to Equal Array Elements.md to 453._Minimum_Moves_to_Equal_Array_Elements.md --- ...Elements.md => 453._Minimum_Moves_to_Equal_Array_Elements.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename 453. Minimum Moves to Equal Array Elements.md => 453._Minimum_Moves_to_Equal_Array_Elements.md (99%) diff --git a/453. Minimum Moves to Equal Array Elements.md b/453._Minimum_Moves_to_Equal_Array_Elements.md similarity index 99% rename from 453. Minimum Moves to Equal Array Elements.md rename to 453._Minimum_Moves_to_Equal_Array_Elements.md index 064670f71..2e9668086 100644 --- a/453. Minimum Moves to Equal Array Elements.md +++ b/453._Minimum_Moves_to_Equal_Array_Elements.md @@ -48,7 +48,7 @@ class Solution(object): AC代码 -``` +```python class Solution(object): def minMoves(self, nums): """ From 871f97606dc11d1dbea943c4b85a4307eabed7a2 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 24 Feb 2018 18:32:06 -0600 Subject: [PATCH 0397/2496] Update 053._maximum_subarray.md --- 053._maximum_subarray.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/053._maximum_subarray.md b/053._maximum_subarray.md index 984552d8f..e71c549d1 100644 --- a/053._maximum_subarray.md +++ b/053._maximum_subarray.md @@ -1,4 +1,4 @@ -###53. Maximum Subarray +### 53. Maximum Subarray 题目: From a0e40064162c42121dadad1c0823a5fed6ba994f Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 25 Feb 2018 02:33:15 -0600 Subject: [PATCH 0398/2496] Create pocketgems.md --- interview question/pocketgems.md | 121 +++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 interview question/pocketgems.md diff --git a/interview question/pocketgems.md b/interview question/pocketgems.md new file mode 100644 index 000000000..0b108c0df --- /dev/null +++ b/interview question/pocketgems.md @@ -0,0 +1,121 @@ +## 1. delete and earn +```python +class Solution(object): + def deleteAndEarn(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + dp = [0] * 10001 + for num in nums: + dp[num] += num + for i in range(2, 10001): + dp[i] = max(dp[i]+dp[i-2], dp[i-1]) + return dp[-1] +``` + +## 2. movie ratings + +```python + +cache = {} +class Solution(object): + def movierating(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + if not nums: + return 0 + if len(nums) == 1: + return nums[0] if nums[0] > 0 else 0 + if (1, len(nums)+1) not in cache: + cache[(1, len(nums)+1)] = self.movierating(nums[1:]) + a = self.movierating(nums[1:]) + else: + a = self.movierating(nums[1:]) + if (2, len(nums)+2) not in cache: + cache[(2, len(nums)+2)] = self.movierating(nums[2:]) + b = self.movierating(nums[2:]) + else: + b = self.movierating(nums[2:]) + return max(nums[0]+a, nums[1]+b) + + + +a = Solution() +res = a.movierating([-1,-2,-3,-4,-5]) + +print(res) + +``` + +## 3. roman names +```python +class Solution(object): + def roman2Int(self, s): + lookup = { + 'M': 1000, + 'D': 500, + 'C': 100, + 'L': 50, + 'X': 10, + 'V': 5, + 'I': 1 + } + res = 0 + for i in range(len(s)): + if i > 0 and lookup[s[i]] > lookup[s[i-1]]: + res = res + lookup[s[i]] - 2 * lookup[s[i-1]] + else: + res += lookup[s[i]] + return res + + def royalNames(self, names): + """ + :type nums: List[int] + :rtype: int + """ + for x in range(1, len(names)): + for i in range(len(names)-x): + if names[i].split(' ')[0] > names[i+1].split(' ')[0]: + names[i], names[i+1] = names[i+1], names[i] + elif names[i].split(' ')[0] == names[i+1].split(' ')[0]: + if self.roman2Int(names[i].split(' ')[1]) > self.roman2Int(names[i+1].split(' ')[1]): + names[i], names[i + 1] = names[i + 1], names[i] + return names + +a = Solution() +res = a.royalNames(['Akk IX', 'Ak VIII', 'Louis IX', 'Louis VIII']) +print(res) +``` + + +## 4. wealthy sam time +```python +class Solution(object): + def minMoves(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + res = 0 + minVal = min(nums) + for num in nums: + res += num -minVal + return res +``` + +## 5. design + + + + + + + + + + + + From ef92127573355d471f3476493f250629618313cc Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 25 Feb 2018 02:50:47 -0600 Subject: [PATCH 0399/2496] =?UTF-8?q?Update=20=E5=85=A8=E6=8E=92=E5=88=97?= =?UTF-8?q?=E7=AE=97=E6=B3=95.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\250\346\216\222\345\210\227\347\256\227\346\263\225.md" | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git "a/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" "b/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" index c371aba66..767617664 100644 --- "a/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" +++ "b/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" @@ -1,4 +1,4 @@ -###全排列算法 +### 全排列算法 #### 46. Permutations @@ -86,7 +86,7 @@ recPermute(['A','B','C'],0) 这样的写法更容易理解: -``` +```python class Solution: # @param num, a list of integer # @return a list of lists of integers @@ -191,4 +191,4 @@ class Solution(object): ``` -所以可以用这个next permutation来解46/47也可以,然后我兴奋了一下,这个算法很快的!然后我又冷静了,因为permutation的个数是O(n!)个啊|||,所以也不可能有啥大的提升吧 \ No newline at end of file +所以可以用这个next permutation来解46/47也可以,然后我兴奋了一下,这个算法很快的!然后我又冷静了,因为permutation的个数是O(n!)个啊|||,所以也不可能有啥大的提升吧 From 5fd786bd261ffa18bb8d4a3d546c3b145b3c55d1 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 3 Mar 2018 06:00:14 -0600 Subject: [PATCH 0400/2496] add interview questions of Wepay --- interview question/{ => Google}/Google.md | 0 interview question/WePay/WePay.jpg | Bin 0 -> 492900 bytes .../{ => pocketgems}/pocketgems.md | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename interview question/{ => Google}/Google.md (100%) create mode 100644 interview question/WePay/WePay.jpg rename interview question/{ => pocketgems}/pocketgems.md (100%) diff --git a/interview question/Google.md b/interview question/Google/Google.md similarity index 100% rename from interview question/Google.md rename to interview question/Google/Google.md diff --git a/interview question/WePay/WePay.jpg b/interview question/WePay/WePay.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9f5eeadb506a3264da89a6f07240aac5d463eae5 GIT binary patch literal 492900 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

    y&B`PeXKeQE9zPYAF!+)Lg=x*9vJS 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 literal 0 HcmV?d00001 diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" new file mode 100644 index 000000000..bdd0b3ab5 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" @@ -0,0 +1,96 @@ +# python有无数奇技淫巧和许多人不知道的秘密,这里用简洁的语言一条条表述出来,不断更新, 大家一起贡献! + +# 1. python 排序 +# 用lst.sort() 而不是nlst = sorted(lst), 区别在于lst.sort()是 in-place sort,改变lst, sorted会创建新list,成本比较高。 + +# 2. xrange和range的区别 +# range会产生list存在memory中,xrange更像是生成器,generate on demand所以有的时候xrange会更快 + +# 3. python处理矩阵 +row = len(matrix) +col = len(matrix[0]) if row else 0 +# 这样写通用的原因是, 当matrix = [], row = 0, col = 0 + +# 4. python列表生成式 +lst = [0 for i in range(3)] # lst = [0,0,0] +lst = [[0 for i in range(3)] for j in range(2)] # lst =  [[0, 0, 0], [0, 0, 0]] +# 下面这种写法危险: +# lst1 = [ 0, 0, 0 ] +# lst2  = [lst1] * 2  # lst2 = [ [0,0,0] , [0,0,0] ] +# lst2[0][0] = 1  # lst2 = [ [1,0,0], [1,0,0]] +# 因为lst1是object,改一个相当于全改, 这样写会踩坑 + +# 5. D.get(key, default) +# 如果这个key 没有在dict里面,给它一个默认值: +D = {} +if 1 in D: + val = D[1] +else : + val = 0 +# 等同于这样写: +val = D.get(1, 0) + +# 6. 字典赋值 +if key in D: + D[key].append(1) +else : + D[key] = [] + +# 7. 字符串反转 +# python字符串没有reverse函数,只能str[::-1] +string[::-1] +# python的list可以直接reverse(),因此也可以借用这个特性 +"".join([string].reverse()) + +# 8. 快速统计 +import collections +lst = [1, 1, 1, 2, 3, 4, 5, 5] +collections.Counter(lst) # Counter({1: 3, 5: 2, 2: 1, 3: 1, 4: 1}) + +# 9. python自带小顶堆heapq +# Python有built-in heap, 默认min heap. +heapq.heappush(heap, item) # 把item添加到heap中(heap是一个列表) + +heapq.heappop(heap) # 把堆顶元素弹出,返回的就是堆顶 + +heapq.heappushpop(heap, item) # 先把item加入到堆中,然后再pop,比heappush()再heappop()要快得多 + +heapq.heapreplace(heap, item) # 先pop,然后再把item加入到堆中,比heappop()再heappush()要快得多 + +heapq.heapify(x) # 将列表x进行堆调整,默认的是小顶堆 + +heapq.merge(*iterables) # 将多个列表合并,并进行堆调整,返回的是合并后的列表的迭代器 + +heapq.nlargest(n, iterable, key=None) # 返回最大的n个元素(Top-K问题) + +heapq.nsmallest(n, iterable, key=None) # 返回最小的n个元素(Top-K问题) + +# 如何来用它实现max heap呢,看到过一个有意思的方法是把key取负,比如把100变成-100,5变成-5 + +import heapq +mylist = [1, 2, 3, 4, 5, 10, 9, 8, 7, 6] +largest = heapq.nlargest(3, mylist) # [10, 9, 8] +smallest = heapq.nsmallest(3, mylist) # [1, 2, 3] + +# 10. 双端队列deque [http://stackoverflow.com/questions/4098179/anyone-know-this-python-data-structure] +# 可以很简单的.popleft(), .popright(), .appendleft(), .appendright(),最关键的是时间是O(1), 而用list来模拟队列是O(n)的时间复杂度 +# 还有很好用的rotate函数, +# 一个简单的跑马灯程序 +import sys +import time +from collections import deque + +fancy_loading = deque('>--------------------') + +while True: + print('\r%s' % ''.join(fancy_loading)) + fancy_loading.rotate(1) + sys.stdout.flush() + time.sleep(0.08) + +# 11. 用yield 不用return,可以返回一个generator + +# 12. 符号~的巧妙应用 +for i in range(n): + # 这里的```[~i]``` 意思就是 ```[n-1-i]``` + a[~i] = 1 diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Range Sum Query 2D - Immutable.pdf" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Range Sum Query 2D - Immutable.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..09410e209c3adc3ad41ebbdfdf0de177bb229e9e GIT binary patch literal 167781 zcmeFZV{~R)yDb`5Z1as-v2EM7ZQHhO8x`A5Dz=TPI2BZGYOVF{z3)D!wcXBX?cQJC zpUlyQM;~Ln^XX52W=Q3QMZYr8GC`9L9o-&Xl-=de4UIrE1Ly&EhL+IW+yFXh6I(N9 za{$X{mLh;o)WX`?#PRcKZQyJoY+__*Yy#lrg?4gwG%>J&b_br;+;GHcNAk(5Z919%Bm!yQc2Znxm3BcD45f$YsI2LJ?*!Gf~}&WI;}FVZadu;lELIH z_538eRZe5$_?u}Jgh;74genW-1EmoNNsu3^2e^zNv^2jaOPZ|&VtosJE>)v;W&&G} zT5u|V+&V>7gz=(}tVIJ{yv#(Qf+-0N3nHHw21tDoIM7)pb3+?LM-N0tzY@(D9v~RG zq`XXeA)MkeY|IH}vV~~-LKw1~q|A4aNo7*fE-7VA`FyIN|7>0rb<{?bveTJ(H zFxEB8wLy`B0wf|MN@<*rFw06R@kAVu%gxyjX~FIclVux=Eu$KrHdWAE-wxB8Aed3+ zp=0d~9i4?pSC>LjE5em0lMb!y;!*EnmXxj}!6?LHG+eJqgtHQt^@zc%#Y?+Rc>^O~ z>T&c%XOuMoL*?8vM!6U(X? zBv~nXg*=F4MlTO zBeq7BpdNF>Iu`B^s#}N9w4&O%3R{_rtK!giY-HJ615vLbw8lBGeBaMgU;+3`#XOl7TD zGGROdyNh-!wfn6zUP){f;!HSydZ70^Y1>v3qw5i^a|(8_9OCxLQxy^}gnN(%gjy7E z@;6x=ydvk9V0d-_@wEWRCe9x3+8~ccb|8g$r!e9Yr)sNxUUaSKqwZre!W+}EA2*qo9h1Fpf>kl#c1sy&q=0O^NTT7N=$9`fr^(3 zT}XgjUTwYr8oq=iQkhc{4~I%yc^;^ErVRT*_Wcp$3lKgZ zv;u96^EV&nITfX#7Z-w0y?@`0`cw1y~Ri{dZU3nnH2plU7oKu7-J^5u_;t41di)*BkeK%NbvHw8-HlR~dM zljwxYLwaQ|E~#s>fJ+*#3T*V~(& zJU03OFjL~UYV-kYZEw&NGR^b^yM1a+{iESA$60;e*GxSuH0r&Gv^8{Q4^b`w--nyW zY{5do7Dri#fwyklEPZWXek|E1BG1lLYmIqh;5dV8d+M8||J7?n?U>^(j%v#kDJN9~ym53ZIfX_vHc#75#cNJJSYMd&y`4q=h_jyW1D?^&^Cgb& zZ4J(P%&N4UJqRqL)RPHP8F9~zmruWlXDO{NUv5PKQcV+)O?|+i431D+tAI$HjV`OO-a_TFfOBS!Wsm9ki##SVyboyCycJFF)c|BgtF`L8z5X3S8`OJ~n ztY%SAVay)ftNe(8gjBUmg8m{CUnL}3ftZH-Vg3twP3E{nCULGQ_<>TIxzrwEb{9xb z>xJc?`}Q>f%I4wK_-2)QKRWg0T69>g9*2^vNnAeu~a<$Oa8}=`s$-1gs zJ(ysrrm+#*VEc2#`&HlXb#6^d2fMy^;wIQUt5@ zh{qWd=fxXcd@u8J30`@>SLD%Mt;RX5>@3&?HZ&Y@qh72$HAwP+d~x3#!x4LFC~)4` zfrEQ)h`IM-AgE*YR>ZA%M#R`|KNq4ESz7PB;G$pPGV5RC-g(%=U<>0Mg&3dQhfnLK zNvOMb0(`kZ;jqus=jBPho`Oqj+a1~`S}`;7n|il&jd~57-tv|!IH%ud7c(C0P$^$; z+tlq8^=H$`YMG%Q!HJPd9x`o+QA^8foZ(ATOb55u#BKn0~i(*PQW0lr+a{@ z=7Lg?zrUV<%QF_y3=ilgAuLJ||47<_E@RjX%ooYz3&>zLuzsjhFtdE|n&D1LB4so8 z2C!=$6>d<_-H_CIBBoM*x0i`ZWZdtx35gX-#z&%>sOi!cdZkExo+Qc7D-lqEKoa5x zp~0|>{0G5hNfN?C2Vp|8W$`=O-hi+TMjOU1dz@Pqmvs?Aa4_zMM(Y zR{|g~MTk~+lh~Xm#EPnU4&*gwMyr(*zqM#PJ<(zlsHfsH$CEysB7UtCbVEm$&8;4N zt;TMtu*wGF1ix@JEg=pWTYYF>^^h2j7W*pxnyGzWB3J@s)C%|2kv$1@aHuB4aC&j+fsfN?=L@MgwT^)Zj~EDoNouR= zQR*8XiaPI&15)yqdDa%`Z`%R*$g(%n#zFR#I74ZyzmW%*BtQ|&9tl_$NC^~MOE9Fr z2YS7r<1TUqaK8#E_7lVWD1^%$Hg5O7-A>L9(U}gQXO#b`q}+iNV4}UzPLtckiE4jb zcykKuoXi0Mf^p9oX*9@1DR(O?1x8Z~Ve%_rLVzwE7U)-IJ=lpeEI1on(wb5*;g5qM zq*0Q&#Hf_9G*pT=U8&96k2r>Qhs);?B>3f`B5wP9>#_QxrMC63FON}S37$?oTlwex zchGukA%mrdSAM`P2Ko8WCbq`^(5lbWA2#-fg8g|iG1D{uDgBdX{4Y#R*~8uhKqqft z_SauW6I*8h)8DL3(ZtEl#nH&b3BdYyhLD}D^Jlpe;1ARLq;)bT#uf&GcJ2Tz`p*nj z21WoI2cr%&oq(;a-DfSvKe>v3h~7WL{^{ml1X146&Pd6`8KCt!wy-FGPT9oW89*mt z^EnT}f1X1BJS6}+06HN%Ydc3JdjlgAz#o1ogs-@$Y^Z{|1`zZyL?`_ozDmg7dE)|Aps2g!^+3{@R+qclBR$ zpi^=&bpC6f{{k35r)FXN$<7&A7yxwQCKhJq&VQ#RKKIwr-tG@ehjw;!`8*N-1$M@N z*7>K>CyI3PCZA`+-r2>#8bGHcW8h>3VEP9+K?`T6&r%^f8+$w3&$`g;|Fa9=DhH|> zbr?PL%P^dS8lrs^Hij^Bqyhs~o4>!PHWIT3RrmmC$QM!mcq>Rj;|MKSOKro#k#IuE zWWP58r!xXZTmfUJzTv?i#2DpXSo$UPpo#FY))0OYB`+mA1;-ZUN6#U&<{pN z{Q5quU*?R9+MRYIQbRtX3+N%93O`E%pXN{65}WYseXO6qs6mKOe;5 z*md2^2_bA*R@HpluoG5)eqC>wROCEl7A}`S@Ik7`_LIiR-q< ziIOZwiQmU>uB&F0wOk&r-!B(+q7ue|hPVl3B$rE77~rMS8HSuVv6PxS9w&HmBC@|& zly-YwuZyPozYx5wndM0=eJ_#PXtj%b^?o@k!#_e}*>IWVzLTDyQ?KtsA1Ohx{Jj@O z0MGrC|IOs%{i#gyibU68810l}FBqlg4FFa@*M=NhDdVT@~Cc3`AOtfb2&lZq$J&sbo%}KnnaD~irUeHW@ zAxZd619tsqda<0)M=ePdyG>MKdfZL3eFE)RNzcK#o3?Um<$GRHMq&T?hZF7N z?QWLUX5G4Jnic=ucRF^Uo`hDf$2;olw^ggU?q)^9_2Kk&31@4v*D>O_`c=?K3|;qv zx9YF`K=4|~86(pfWyZVi zX5nf9NqpXN+qr6*<)sz84~^Wy~VrZVUaEi5F5JZfqQ1snKMbK^B-4 zzGKnQ{G;cUQ9UD+8){A*9J2D1JUU>p@Bs__<(g6u zhZQ+@rb_fH&BRZ6ldJWXMDDvOrp?QR{m*-CTjluu^Ew;}C753@pUDqWBH*`E^wMRC z=76Db;1=Wz!<`Y*B(<>>_dc90h{-j)JYG!-F?AYytk-4S(!|)CMK+l8y_^;S2ZxTS zYA32JTH`FdNWA?VL}(|9^?iS75Vwzwlw(&}={dY*z97ZNzU+S5=I{ReWx5GY9W|lh zn~>r}PUcFyy|n9ncYS|YVFE489)?Be!=TgE)}2ZqnYXUY&pQd0ZV}y=DE=OekH1A< zL#`3*&a9MU5e1SkiX?`+$B?d6c|@o5ppmSmv!d5fyEalLTNndzmhBpsoq6R?K$WG$ z>}csqv5d>ZAwpbc%C#Fdaf}+1orxF8A|@w0-*@@afCSjRACcFHhbozvS6Z&s)9_f-LMXV!gk@u<-fGw({Z6r035Ugo6G+FcekxV^W8MO8EO855xA-D3(g-6Z8G= zB{;TCM77B=p3i0ng1ur+Ujw9kr;j_tizD|GMXVpw;c~N&VpKa*4lUwLMG8eRjFlWMg2=36E$C z%svckQmm48bX}6B8)<(ymXNS+O*njM?a}es$-VNTbOsej8nR`nx;^r|hVSW?mu}`) zz9aE{pa42sTK3n|qPTUHp90qs4su$U8L3ir{HCY+``jz zTr==u#k8QGaygtzE!b%HfP*nrW_Ukus;dr2AmXiR*XP!aTGTQ`M}6C8cB)M6BkeVP z#STh>%+*E(#tRh#A%z?|AbSr&;H}S!mG%NMh-qFk&1y*BJHb#+b2E+LPEs5r2$V7493U*==vx@9bb!&`w{$JUJdu*MV<~hc#t!pBf5>D&y zWs5MHU@_}Ovu~zqC^bp`LzhI+`t=>}Wr^|WNZ2i6dA}r>ielRiwfCg z#ryTDmFYTwdvuh*&)RnyNN{-mkI_Ev_xnzypuSX`D0$BzQns)cjYE5Qs{E7*oxU=} zBU#}dt6&Ya2(5_w`!PC}Y*Q5d?GHW?ztR&>82g6MIIv>vQ*nC~8FjWT=cMpCa{0;m z)l+DwDZx>K%Zh1hb&C3%rpO3*adMbRV>F+U;_hnY~0VK1UuX0E=N{pR^ zqD+WOjV#Ejzic2>W`8RMf*WV=!~%WD@%{pv2AaeLGfz19T5}+5J=S>;%hhxLT`CZ= zaW@bL7~f>!%W28!$pYEUxnMvDh2y(4@N@*;Rm&))ZzB-$UaY^{qowja)`}nlymaGP z{le;$ffPtFb%MGVO3NxNOQz?lko*G5BTxmRXcPLc-B4;mx9Z{fT}?A$zk2X}W@W{k zYfEkiM~1GPNE-J!35K_*YN!>FrV)eS48{uGF*y8V{ z+XLh(Bn3q1zMn=9;}r9`94g1AJNJCPK`l13|1diSX5~jxA2BwM$-8H$0CfF`zZH-G z6fJ~La=%%Q0>+BJp{&BTZ+u{OV*Q99`1TU?(n>5rZ>{`uhdibV$vlm(IR@w{_oKi5 zlx&JQ4+#jKnBW0}7HI{@E)5!g&=DB#K(bi}gIR_HP&OzVm^Wlf6rllSc?eOh82V~L zetSc+%WnM$m4>;g%Cs#fOi(3BPI|FG*6R=(bjZ@M7A(oL=Itc&)eA~ZfG|C#B<;=V-Tk{5LXbsr#Kg`N9YqP&+0kZV z4o-f!pafp^%ojKUt15xNTn5F{HnQyP(Q)P0(gOl;nED$NarR__#G(tSb*53 zPQQB;NvoP}Xi@tG>c*^89%1~}+Zo>gl0(0mmh48gNDom&_J z+s(W*Mi43qFZvn|;ZYu-s=z-AFu*S1kQp*ZZ!%Y%-9rJTAn?k7k`pdSsJ9$2j6p3W zRA_?580#X~5KdmRHVT)tscA!MTrZ!6n`abiJIjA{M7k#2 z=I|ND7Nj^Y2IoZj$P*UauuoPKkYp15ohnd3#j;<<(m`b}`e2nfea4U}{o)b0Z;8NJ z(kSGN1T$1>APPH#ojd2YIVwAMcP<$k4kuvM`2sNCE*<08h8C34fQueoR72|<^zEB` zy5c4N&q5JmA1z%7XCg?!gnTe%718S;uzhCa?^;v#k+|1D1my~X1pcV-(uVEgLZwV| zTKTi-V$|6tm<=|pW>-U^qC{#jX7d|ZP*?cWt%XK7)&^flZfH^|qGPN?JRw>(IO8nQ%Qt>qskDDSbk*AEXGz;I|3~EebkvcEt|dbP*kWelx9=@ z5(v8|AB}4TCS5$AAHI-gR|#J<9VLeRcc*-x1YAV20WXMCqyW!*@ZgjiHurq=>;Pm= z*f$DTI!F#_5HY8G)8--W<~5;m8JXMWA`Xw?)x@vN0Th<#^>jRGO6|o zXdMuBouuL+i+>LLk5rG&4GjacEAKNReEL|@Xmy?=d~5FW)0^aJV*4^~qunpar1f1U z2=sdT*nPi3+cPZgv()oTY~x$(^ziHiG%m?-sjyC@7dKT&HERD38Ccgk;R9I0kOmJd^$BQfeTbuaUh{$iQR{h zgb3C|;grg5RmZ(T22KmfiS)6T^vB38Zv@=)SZ%O>r1BGVQsujTdZ#RT#?9KNOVL>m zsi~kh>7Sn)h4_+W)tJ-J(-0|VG_sL;`|$D+@PTp3LF|25H0%6+9s`jKK;ld4G{C07 z`iT3cvnPB-xj%wIhNh=afM$Z7z%oFm^Ril`z%&LQPosOp43DeV zE`UC|nr9rQzA32+Cr(J%*&;sWuZWj4wX7Xv%WQBm}ou8WW_1yT)fRQ9LU@KuU(~sM#!K~YEb*v4H zF)tAx#nOjNpJA|WzTGaITEiBTb}Tr1EDIGvGriw{kn{q>XNeykRP)#iU1JFN zZ6F|*eM6x@_6te{iC2_zkUwFjs&v-)cq8D+Tng?i$x#}ad66*IG+qh%X0vf?SZo;~ zJnj4~m+UOrhYk?I5gBP2n4V(bGh=uB=^%J?4<>yiSQ)G((l_#)*`I_s<&FdFSz}J!3u*;(9kK4^ z(-(sStYq@HFUHJ3iE88CZ!%#lf4;>^jYhl2yWIu_0Uc2`lX)Cnw3HH^(k+;hQx}^V z^~q#gMQ*WJ>-WU4^1+x^))WcwfQ%1_69 zs)&nzmel#FONnv*$8_Kyz5>?p|KcnEx6~(e=d$`Ka)QV;BEPG_X!N#GrqlI`)8%{! z;~fTr)_EH$?qD+xA_21EpayyK5~b>UonG&!3v;f+$N6$KLCx<#n#ECtVeM8}w3FBb zqqEuZXaXLO(_W{GiPd;49vBpYpLA_Ji9AhDr#(3FNKm4(nFBb2V~d)qbCq;}oX`-O zZ(SRDw2wiAnvQt{$@mZ-x#~|1k4MBIOGlzO0ui~10Q=;CL@|;HL6rSS* zcI$er>4r+jod&wl&diAsD)P)ii7$5xh2pUyDRM@n?6O{C-1yekY&n$Eas(`49lA=Y z`$0UHA1oH|jLKEL)I&=ygC(60IpLOXt44Ct;UX73h@!`H6ByS>!T8TagPPWfDV z!cX+|qm0BohnxN3b!tgI8-uAR>1NbFqwR&h38T#twzHAMHp=DkzBCl|_`Ke3(jbFr zof0-ke!^}37`abd^eH*KL?B&)}f0dgoi6Y;sfg zQVtI6nC)T06Us)P$jwg;1|t!R@)NNdaqzJhbr(h(49EN29c41qc1 zH4SMQC8yzTobGVm@!;`GUJOvZvD+KM>ll~Z|0>=7CFcDR_*gj@SpTK^{Ux&fH`R~n zZ}E`s|4#M$PmK?nPT0iN!pKC-(ZJ(VeEm-~5b(De_}_)SPfhfHjP1ReV*myM0vgEw zU10{z7tU|c_o+caz+%$t|9_QWM}W0D>&EKhQBSGW`qAzl7p{!TC3S|EVU^ z2?)qba|#Ijz5M^8+y2pl|HnqA2G&l0#X0{Ye>448+5I2Amgyg@UG`ISrxW-SC2jjh z#{Op?6vaNZ@c$`zIw#dlS!oSDY_^-Ndk&chKzfhu2?hAhC5{HB5Fz0&4-y(o<|+&> zii$+3YOLG`EEYy&B!UVP6lk~tb&DuJ(yt&aaO&FqKI zN(YeqTOingvpTRpbAdYQ^+mrnGRox869^_EFuXc&-=3){nAo#0$l_Z!Pew+$_(;>^ zHLbsK=LSu$Jekw-hhG8_n-B>E5VXh=E4MEh#t}%eQqwRN;|JKpeF`OGC<7yU0aRf% z(ZNui^<&vFb?10`8rfk1w#E!r7jtfOr~Gy%>0VJZSb=sr>8@Fk_ZO3HWr<9nqbG`m zh39N(AbQjcy{Qwj0_zAy5mc<}h+7aK$mAi8E=TyNUmWJSK<=exhml|r5}$sOm2``v z(=pSRnAKN@9!WH_@S1v3RDhaoAo!2=s^xwFfNsHonzys> z@I$S26NmO;$zh@{FRh(`^Q>s8PuX7c0_`SxLph!@Ca+&rxk@qk0*EEhm`p^DO3O;6 zgr}xp;nQY~-=7da4*EDOrpE_qvh(^dZbD8~6i$<&f+Ng3L%0Lf<7thdgZ-BF{4iO` zzhL?1SfQG`=mGhJaLBhwd>OOj0TLnxC9&o61o64hLS%p*>*+GDNvLy*WAyxe@_}QjgH^N>Y~2rn9RI~RADTIUmL7yg9}d@_$sTkY02J&mjtH6x zN-GXx!4K9bz`F_rEx@n}>>6Zg540HIIR_>i$Z8Lv4W`xyXAcAGFUAiY+Al>9yd7Wx z8TbWRi!bGSxpg{0)7RS7%nxGs*_jqxk9lbWyO3QQq_;s*Q!rz z09`e>iNZAm(D$pf? zOD3CyDiKP8p-4iR(Hx*GVM(Mz#zWRkm^995Ear%*!LKVT5JNX+O0}%f^t%H>U4T_3O@>X74mBGihIR+wfrXf z<^b#ZQ36^0LYR_5+!2BWt3JI zx0UrfW}9bWt&Yvfn5$SiM+@sWH8iS4m-9IWxyQVVJhFaK!|+6@N9CYzq3h9H(I|br zpdrwp)BsnvX+E!i8C)OAw9+y184a~OFlw49-8ycmsrb6%+I!{0m8ny|h2AOKIr|9z zNc2kf%J79J%ss3d{%O_Om7+7)X9?-zbgymZCi>tDxfglEf<)O)j>Zh-4BSi+3@pY^ zjK!~*j`I$CZMcpJw8pg2dhYfGiz*u_2bvczQ!*=i3tA;v-E(Q|?Q~kmV!w7{8?gBR058U4wNI>^pk3@SB9YpX=$Tfr;iUn2&?ZpX` zmWH{S?9!u6#ogE44eYC-h_KL5r+D1h_c5`k7<4IgH_>siVUZ;<84)j$G!dyZbsCMP zL(yo>Xh10sIsp!v7m2H5#nbmKsj!2~edvR0S|;t(rptB5mZOTv+1hx$ehmjId>jJ2 z9mJ0al!1yP>Dqg}cDEz2m88zF*Tj<%>XVooooAD`1hBN=#^8D3v>}}cBZ*oGG>HQc zIf0g4mqxwYfWwO9_~ar=ri%HBX^Y_I=jH`LQiI5PY8@sX@@~38<|2BbjtPsUYZa72 z{`mxH3MUQI&h*&d(huU%Bw3_E8Zb?kjoW5oCV3MIQ%J}6hna`AlX&BIU;Ff zn|>UR2(}9<>~(*g(So-gwnnqQ+A?jbvD`=_(w%=WoZOGxmm}Rwyx7t3QTw$u^%#8B zUGiA+>bC0&>9)Cb)^VqvVW^?IHdni=Q*$(RTX@^rsdm|;YM|wyk6;mJ9M{ZP-qP()g zsQnp?osi>ZfApE)M=mV)nn$EhV-s879%}C9H<;~@YZ^f(@UeaDWXZ{O0cr$ok z`LaH|@1q|xGMgsMq-GOl(6X~Q^4xrH1xG?|q9QQDIMtkaJDLx_=hW8MZchfJ)#=`} zJ63FTzrLxYRhiXt=y3Vu_;g=|zQ-)%cjl(*UHV#_wfwN@KC^FnPd%uK?E&{WdC_^L z+kWiuIg0(r!2ykec)6zS@%qr+-%exLtRfuPGb<;nhT{%&-6P)H6fN0nR2SM$E~ zykc6>eSew1qCeXdZWb5XCPep<@~cj65PY^`mRht~^jxe)Y&QB=^p@vmp!v_q=(L4{ zkY38)-=0$DtMYu^Uc1c<$A^Ae&0l2jNp6?-aJ(!(+MF1l9xk|9{3tDp+^*{3dklCl zcs05oO*p%hdzMSdi{W$ghI+eoC$lj<-gyeXd;Q;7#(&JvKL#!1XB6jun8tqs{{Ccs z#%M|i2?-iFnHU59GGY}0{}F`9^uPJ)kLmAtMY?|*wf{D1|83O%+o=7wQTuPB_TNVB zzm3{|8@2y7YXAQH48Xc{q zjgb`J(Yn)V-e4mu`Zm4BHAxQ571eLc62rMvd}E&Z?D3&c64BywjZ{ay=R1i%oQvex zAj8dBEz(Hi!FaQ^^0f5c6y9{aQ5{Gd#ScvgCzw%QMc*h~_xBzM(W`>Ok9xz5lbtWIxFAY;cF{gRgI~Z#IKlCW-9&*lemdQP9!^1%y z%;`y%d<#0R4mBW&&q4$Y<39o(x?%^oDJq2{QC14Wi|DJY3blWSw=Nq*&U&bXi6rmE zhL_J!zbNU{2}>rABkVH7oCVNa`N@!4#})FPy6p;l4!1xbN91Yt!7*5M>mM+|J!*4H zdXAht`BWtbP(dl{kxx!*4?fE{OsmcZ+XSRvpyUd$vVS!icFa^B(wK%_0dCSl>2K)z zbUzd~c%;{Uo0d2EUd>Qk@4q|fZP&lz9@S|kn{$?n%<^_ANI~& zi97t3gp3U-C-kGzM27Ti5$e-4hX+e5TGgOL4s-E4PSC> zvdGnqkc(l*$8JECySmvbMf$PPz1n;gb*dTg1hYw&Dbr-*x+T!HvjdJeUAPrE-@1SE zp{-uywYMbih;GW!ycI?74{7A6I&>)qqelC+j|9GoM#-Ni%VGA!@JB!xgNoT2KUVaL z=dOtYX3~$A#Xk2u?w|C?iH-Pu7Qcq^?M1Lt_58h#fYr!^bvOWWRz^nwY6ix_;Gu;K zhN-!6th?9~B)O$_2LgIIVWim?{yo%-3Zfi^hZsM7J36!bkOLSc8wmsGMLD*A4}#K3 zA=aJ~=9;dWy`^F?D-O=eTC5tq3F3_Dmu>}w^(Tv#5~yT` zj;H#P|LD|r&-no5>L zljK9_11g{Avk#TjG|s&|b9~7xXVS@HW|2&wsgWs-K{juE1O+W%BQBl((4f<_5+$9#UrLDD$E(Q~=NN7p$r=FZ7?neep> zn@j}_yxCa3Wi&?yeijK^Ox*VXwW0vn)N!SACSg&6a7Y4Q^Z}!Or_1MV8EG?7C>sNn z3gUZr3@&srzXUM3CX zR8zuSbXSHrgDjWp8oy4OW2INTUpTyOHEz`T8AyOF1PNeBnc5GFsu^jg(1G2xd@nXP zI?Pm{O)(YtVtLOA8|`Hj#Hzow;$uW)2InT2?jqqb!k;d^)4M7?d&gDb!J%Ju zsVpGarpOVYDQbX?maJAV!`JWXpkV~1-mf2gDp`3|jpWVbZk5H4e(J{sy*MIN2!SCJ zJCW5TA)y&y33h39l}c_PZR)%H9_J#&8r-vAvGcs75S`>LHPy^H>Fn-em~5&?c7C6hJO9hy(+A9JVw{>@Kz% zNEGObaF$WW2K})iH`7f;tTt3sPg~(;j+o(bVz@Fuolr5U8`|FqcY(_TM~`w|QiAG3 z*i6WuBhUp^VUZmy{`!S+sjtfQprC|V$Te3HW-fkW%FCQ`I^lSH&f+I?NNs?vBaH!W zffBQE4%EYfV#vHkA#W#3$?5ITgM6_j7^dWm53$jUqbDsDL^0zJe94J97P$(~E`}40 z$VV;S!|b#B?+U7bCYg%B4wedV#&San#Tt@m5(H9%M1<~N#_MaZBzx&I&?*n7vz=(^ zPSR(ll$ztbHYpbRbe!VG1MD z$WaTfwo@-8m6xtFuS(OIy3wWio17Y1(uFlmW$mT+T`(S|!>mDVcSCqsTjxY9jT}~% z2G}%K#O-o32YCS7oD;JXoJUtM;aZKD={tSQmLDkY$*i|ktc~{N9)(oYj8u2VI!et; zL|4}o;;*L*B21Gw;EC1`Q?es;Hk|VwKaxd$J|IkCUW&q?NI4uQ(>;BDJ7zNzN;ik4 zOJ*v^>uKibJId79GJJx{OEzR98{}4zNE6juDXtn5>cmp;dAL+aK$&**{H~I!N+}bi zs1sqmECeQGr?O!LsmL+oEh8CYc{mm(9RXB8iy4^+{|!lfICD^lfa#>VWW zcT)^DNrH{cd+BY7kcf2$xn_CMh}+g8x*hmfY3HN)nV^q(1D#liw3t*PT;RU9Fnlg| z@Qc=0nUPLq_as(Z7G|+N-*M)II@4A_%V?1Q=9jGa|Hx~{MCE3xK$v^Yqg5n61 z4Z<};i6F^Rk|t=Zt2ble0}P+;7rlGt!I%&6p8mGq&TsUGiV`aHgXCV;TGf?6gb_t^V#A*=U)m>Fk@>oKi=uJwLeXx)hM3pY$@vHkB&8CJ z?Bvi=%t4gXb&8I;-cXBI{01ToFY&_v&lL*c9=zt0-b zp@87Whlr}?)fY{9y7`3_OY_(*NaKwEep|}!)&ME#s1|%L2an9n-Hf{t-xyUDt@J~5 z3)s+QY$AxHYGEwwiFk+5B&KVvc%L>uy*v$vGYl+QRd)%vDM6~+ZcfoxgGO($67MdT znC$oPog_kz0#t>6vymW@L$V=onxR~^He0Rd6b;s2(q%cBW;bQ<3v9VtJ%VJlA@ZuV zP|Drpd;WeoJZjYR;Z0ue;D!`w2XD_4bDEomr+u@T%as#~xn{h2fJO|(23;Hz)n#L- zx{f_hpQs?KcBp<(AXB&lO(_Cu_wx{&i6-ELfd+$g3^92;TV*eOio1V~54?FO1~>W} zBP-p@KA@G|bv9-duk}ZM*kkwHD;^&niC#HH+{PBLUX>XF-E^ha$ELNXOE)sy6`0FP zQi5g75wS!?O_AHTpB#$i^uVn#`9=)-d-BjOIgsDd1_jr!S%W+w)j1nGcwLO?j}X3I zwxlU|z5S%o@7#FIhg&t6ZZ*MLRR{{v1jnj>XxwHD9IghwptlSKoAym!rE(2Se<=9v zhOf&wIS5@+A&{)ADCMErmMLlkFCi;s-Y~E3u+_;7H^${CgrP~PZBUT}-4O5+{LBQ| zpblXQF8DqU-|)f(U3?loe;3f9Iz}}_gpD9bb1m{Q7_9!M@ZBx4@wZ2oDVibOs-jG) zh7mL&AJPT_-QN|WLtkwqoS21!j zinCm0_OyFw*dt2P>Q#T{p~d8d$CnZ(SmyG4WHXLAK~9S=gP1_Al|?hJqIy@VtA&rO z_8Vb#-H?amtCMWrNMmUlL|1Qa4%F7_|?5+0k{myYc#L7#9ZCv^0_MSd@bg2+1 z04sRSQQr7ga}s$HIpJ$v4j+CPoQHitOC?BGL%8sh-~gvLdsn~%>YlgXpl|1hD0O`7xh-ESHDxer0$;?@4Mx=M7)37aaso3 z{-U~5)S34^Dobq7yqJvSsIPGG!C{pn!@XGreLa#rv8>1 z9|O0#$@18UW?B;cEM&>T%Nf7o$I9Qe$<-A;lDDsX{RUs&CA2c_os<>7Kbnnko_r-W%hkwAHEe(Ec(u=teB~(n zdNZRKw{Z@YrR{GhPVywX0zN4vD^M(#MnFdaFyQmahrp76*mc9}q*WtRKVVQMXCZny z9l^T6THy{MKg!P3ame+1^y-@&f7^1{VVy`pWMP%0@F9LXsC46c+1}QhWnC}zFcnsj zLN-3TKpyWsc7c;SMSj`kTQJ~1oi4FFpT_A(`mBGxxJriuVJs|=&2K-(|8W=dnjNPl z_QEF^0z3TiI~11##Xb5s8Gd6;+M8V-_pj&I>zl0oe*Q?>8J$Dk-R`s_#`8s6M~Et5 zM_YCgE#NnA^@*0lE&jNXxuD2HI9H{A!YySMJFlWr_Re(t;g$J56FpXifBeBjR?F>R zYqmV2U5T@CuwNjyLajHr*i;)MkUs;eR92W{A~-h&$Vtd(xz#U3M*=BsENzTxDhUKRWkSKkzc^e^YB>{pYy+8&qcfk6!-Y zLFIbwRa;VySdRlWB7I%5RT|7=9lH?3RyTbHRF+zn3RnUA2Z$j3#wM8%W~t`&?G&#~ zzfxhtSZ{TrP=diF+876C<`@n#g{?2gR>zbDxL@;2%RhfT2w0(?k2;oG?^rgeU!q=r zt<_5YGVhQ>@O2q$z0BbO-l_6xqx|{8?{~iCI|PU4MhUCQib`X`eaA5vi}r$G`3%s3 zVR3)&BSTsK>9_H$=S65749gJ;nHt-sVI7BuyNmhWh;=OoF0HcdiS1T%z<>I}?u}8+023?{>nzNS zR|SlVk*ruPlnMf#{09QIEp+HqEY(wzK<_t(B^C3H_A_FrDo^c z7p*fWagwkG!cWTmI7ART)*Dk7iHwetM>9>d9~xK7z}&$ScE2de17)aNWwcLphIq}m zUBXpVW!nseY^Fmrw<8CFLj`_K!7=hgZ#xu;trZ~uI<3OF!AGg}>w0eXVeFmi{H{2T z+x`>3;?06IVp=;$pMhHpM?=8FU=6knI);bv$O=2&!s_TEh=lw;+u)|ZeF%aQYx$ZF zB_QBb6bl}!G$m%pZvlGts6&QED|pRoMu7rq7knp%j<1-oQz-bbV=!Dyqv3M=l+!+c z%3*l0bFCN-bIPyYl76A{)ewV);hV|0dhxpSEC|McXe6*83|G= z9loz`yU$TRTf)c`sr#4cQV-0o#i3-Qr6Vxz?|4FWmT`srWYUJ0&w{)c!48G<3y~)6 zF9z+Jkl+Xr>_27_EzBS(r^1X?l4-%>px>^q9}k{9TYm?@PQJ(&x>BP1vqi;+J#UYE zn2>*5_;C2Og8isqEFuZ+P~)N%Y{D9?l`f8%@TZZ44RPNmpj?+u9EBBXgrJl6M}ih* zU~QXZX{m6=Hn;!*((32xX^{q@>|rFPVLX0d9DX|35`|a@_Bk;Z4jSLf3it4_$Pctm zU5F!>3V5Wnq845Pq5@$JSH%<7;n`9eGWIKN4|p=#mr!t@sM9CwUvJ=%k9U@?G*Fq$ zUq&>*S5`dAU5>%;Ob{P1l0`Y-FgAG<;%gvlezfZFdu#|m=7v>|%$V$v|l+^%A~gch3z_fjQGFQ#VD(5;U>;YR8a^xp5vJ)Z8Gss`l`)<%VoYxxO3- zkS41R&9dcYd}#ZqEK9CXgvVIlRXq`JWTKQ5luY*ed=oHePD-8Dt8T;<7}?^KeBCAu z?@|1fH)cFNZzA4*I)}D%_iCSi)-?)d$CaI+`hVi8;la-fs?S0H+6N~AL@F7 z&@gp$ztvZIj+=#lwv3@%zZP7m0ZTNEV ztd!EjadJxJ5Ph469;a;5TxNIu(pYAPcX}0)qID3$JlGw^D5toOf>**qq8qvrcv)T% zG;^~OE3ZgT>fMzLn;gtf*O_i5h4WgZN=Tv;XbOf-#|U^(M9d0=ODf{ZLuO(newsHe z3I|`NA!he5#L**Ixf>Cnrk)O;?!7P1|1~c*P~dN-Pe@t9B{Er^cIpy5SgJwhm1Ie! zrT5*%2TN&V53{GX5GA#+%@wl%5-jdSzFeu4yQDtrMgyAoR>9aF*;K&L7&gutDAP3K z<>tAxqwl+QO4a{!v?SSj%btkqB0DVC*V|>Pi1JwJ-7zHfXUJvIIJ?3p{a<31%ZVP`t>;Rfl9eOnT*&o)W`=+WeUb%1ls6%w<~Zxcu- zG!U&2b5>nZ*mK!!q^if;S_&1zQ1_SW`SSUrh0_MhVYP$z;YyP^=_zo|%-`u;0j?2s zFBJk{daw}#*uw#vrSf>TkPRZPs&-bfk0A6-Cvo+=x3TyQ?=KGNg?LNcd1&aWQJ*;i zUWOmHCPik|Lph;1AJ9-X%Rk^Fjj~T>*h}9XG7m**1>ml1*@Bb`Mn4T%kmD=G(~fo2 zVkHsM@y9=q@FkrMDWT^SLfe4c3xPc95>o+?2%+Ig;i5W-`I5C!&s@7kLx5UVr*u}` zHsws3j@{~d>WWfLy4SA)X!|JYd_XgaYg~&qJCR%V1Zv_j`0|IeqZTreWU`m%8&dts zX~MDAe$asS1mQHOIajxdc8S{S3-|;4VOMM;EB&Ze(a5SJtcUPcVWu6}Mgjgt)Z)o) z>dLlT!uT^h(rtyJO=ONh%)Sg<;dCPB?hIUCQs3FK?1AMN1L^E-FP{lf*NhNsa`=dW zbMRVIY+aO3>~zw+8&87H`9X?}4_nK0t}fEfiJQjS9;ROkjCar(QSq%9+>$|hLLca6 z6=xs1Y%;dHBDf1-B1b>^lG;c-XVPaDv%pSD;|hJ5`-HS+ygS<)xyTC}ng7bU&p^Oi z$pUK?TGw{rzZJY;jChnY7y!MUArqDBx8_XCp2^w8G!4dcf7*fGL)uN6>u0Qol8NcA zWIxp8C)6d%O2PfzQ6!r(QcM&^QQPG)!)hzHg@m_k2-XRU4YNDuH%V@U@f*rU^KBb6 zeTyKHwff$PtARWwj!^6=Dmy(5Yfo*>ml_+zGE_#?h-#Z^6$$S|li~WO^sjT`{Kb&ya*}Xi(f2M1$EUz0)f8j?U_0l$jTmNFvv@LQ=`%>HQXiY@NoV3 zuy-&Y=;RY1AS%>f0OPbGf&ny=KCC6oMQIq3q2}B97^MP*+f#yXw#Em3sW|J}`oyd` z&{82opM)JVaMH?@cegd2h%?X{eyBpv#E6P`36?|y;0$+0Ed?Gmb%l*{>&H7E1))kk z1}pAh68=d?o=IXRhY;ZtV!TGRtP}*s&>P>PM9&DM=GnY$_Wvdt%cmb*?AB)uh)I8z z{3y$tH&9%BS*#K%aoty}8)zC}L6fjtJf=d&$V;ss?aaYM8hgp~IparY#oNA(D02U_ zNd#`ZbOhqta!z00#iC%|Ef%Ua*!-L07YCCbiVnpAvQT{CIs<}Ig(`5-_0tb|%y4rR zk~g^vHXlS%q&ZiF_7wMwM+ex*<;s4BJ5`d9^O?4`Sm%_HqD8h;ev}Ag;oii_zl*G8 zx|Mx*T>bqi?NPkqpf-nPC;qA$c>rNMWUKGaeI;~K7LI#l*hS78buwX{=h6I@o^i(2 zKW=sc0>C&hY+^>x8$)A|o}LJaeZd@>-wy`hv@I3Fw-YCu7U9zoMalfZv>_&Xppl4x z_d}%Z@eDk0C3{=r28uChzXEdp}0P zQ9|}R!LM|TH1MltWa;D~bwQ(FEkSFni8uy3hht^Tcz5j0^PS!rNG&Eu1xr{rnn#G0hc)za=6I<$JC7;f17%4WaN9im%jTgSGy*)M5rb;ePV=;qM#=>=6R9bGh zbZ)V9tHy~~Ym8o@Ww#Xgs^#P7c-_+3>9tO}Tf3i8+P#g3xz5q6YwA}H{c9V3(Bs-^ z^$WIP?`v!=*Y-`2m7(}mM=gZ~T^BrC>qx64yE$+OI$)!MAjz~_^EIO-GlPF{M!&K5 z+jhKMInQE=##HQP_7x@zi=o#ZD))FIDoaE!iEV`46m6~s!NLN(FOP$!u)ZCi{39Mw zP=KCD4NLjfLW5x6eK!SNBx=a_%PS{d>3zijT0UVsstz?ZQ!DWkm*%em?X-=$RhUTa z?Z1(x5As@`FO*@bmd6og`5CU>x^9=Td{QX!pT+E^JBhOI=S)|xa zVolPUqz$L=+f1b*BU6IDhq1)0?6Zk(*k6SjGzUX1G%y2V`UvX55r$P2j349VZB&Bm zJxLo3pqCs1Ma-%aIR-p*?{E0nBgl@=!LVxDGr6ov=Hpg&$NTq98aF#=@6#$)Cf}`^ z!)mgyCVdW}4>Sp_$(%xeX0i7=;^Gy!`%8v~|IAu2zmzL87=pW>B@s1}yTQ@-f33r; zk@b7E4+}<;L%pO&djgD5uxV6+NwQA}3G7XgY$%kn1&pncC1P}{PW*DUU z=>wIB>29y^y|8XQeo~y`Pr*6(+4PhV{Dqc*19J>eys>7LBpibWBdKLwd78ja%bzvu z5WUh;Mn*O^JI`aDQ_BPwzbpXvYnQx)*pk|JQq2ak4xR5GWF|bu?~b1~8tA!ej@tTN z&V$%r&s{n=>088+kQ=wmS3b!<^p*qUBO$sDKljM3`Xz6#y+H>Y6YDowJQK+st>TGj zu6|;(L?+q!;*;ztIzti({SBF9r7|K+Qa_42Jm8nlph=|RLGhIk6MLcoq1(a9WZIeO z`(?3?qc##h{_1arln`Gm2_OX~4s34{Fx&UDHHpzzwqiJ*6|5LmRMfTb#=`ZK2AF77 z%sl9=z}p`GTX0uSG80q@#4f+!=^1*G5I)lnSh0xNjB(vPFHL?JZd=CiPuc+Rd)#`F zPwaCx9uD`{k2T`d4>wB0X{FKcrzj?ap|9NpwVpE`e($NvbzCZLoY`%g z4G1`!0(nZOp+n>DSJ`hB3WSv#Tl2?9wXP4Go99WZ$cx9X4`Kb+E}d->%8sY4+F$KA z<(`WwlsX$1ygcFbKYW%&MAoPAf4aiy#PYLUdYo-fE$h#rI9NSDrm&+pUWW#A@@AbWz&;F6ln>yE=nawH<@C>15!VKD4UZ zBl$;(J(gl##r)f%anFGK2Cw9c2>d9m(6SKAZwRfL!xOfw(Pi3;Rn9&_r3|py){&kB zb#6NJmwRawQ7Bph20ak$Wkt_>42QAB054G z=MT6`eXIyN0QYrjgY$(dt()V8+1$mi^YDFuLEx=hvVSlT?yBV@#P!#I)MF94!_j$M zPD0Y-5pBTM5YY6^dZHD z*O^2-x6c%VVTgT&|co$eOT~>b+M|pUQv94J{hMKRU~bu!SeRuzVxIMURXd9 z^!NpK!MvEigobiB#Kae3VLG*N|GNbJzsb)37Z&+1{P>4g{)^}kR-%k1mvSj;j$nx)_|Lm@RMs)kX5twIYXZ@GJJTp7nf02~q1m93sFAWKyf?EGsFiALdagy0lKP6SrZP4ItR4f#{#23eLxjRa z1^9<}e1+67!Z!Tot@r60P(ks@>w-5a$Z5juBBeE*#rB-{!A@ZDq2qvW@;US1)noI( zWwIGb=o`b0w+m4aOat$4Ot&-`v^znhWsB>tA>4i8X)u>v6v#r6U?Y7MQO|4+$8$|` zhNmgZ_FTlo4&=We0a50oqE5pBN=Y`TB%kSGqxGCFr*QzzM7PIV zv5fSW9~i;_17cKlSM`1jNC_kTX*UCWpcCq#!}{GI9d7KpBhOZyPCJZz1p;yOjTuam ze}5Q!1i-B5<@LLh+eWFod?yr_o;6JbLKt8ur{}uZrO{p)MZVRe>$0S3BANLuMT=o^ zWGlC5!-ncIY#_i!(F92ADvnkp-#s0*(77&s6Y=%H>f7%A?*~nM)7SncMtYj?u#`nY z;uQghozeyUNq0A|Q$!8sH|`OEQZ`TqKG-x=QKp_RKf^CMkX_qzX`B#F_O%(l*|&RC zYi+ie1F->AxwcK}JZJDR9vjxtP?Vgd7oiKZO`G8eySced#+mMc);1Cwgq-6orkk>H zm5mZ>3C#52VWB(vXTMG-xCH=gi)RKvqG$F^e0Q5-DtcC(wG0LwR^(R=8PRIqQaaY~ zu#sima^1NDT#{!`mj>kecVjLB`!loW^TTL8pb84WOqY{C?^(Xv2l*GI!Hl-ASTslW z_xnwJAX<+MjFYg~p5n=3CtJRe>eB%dY+SXY<~@bQ)SiIMX|oQl*2mpk-<|&7cfb9? zc_TaSkB;U)r!IC(*O_mGz250LO`R0Tstmn@M(?My4~+9y3;^)US+?$X1M$lDbhA!e zb5bR2K*BJTae4aF;e2NTp)@rv51#e!h~7epcYVfM*`>GKJ=L!;$f-lwGdp5o4O;vQ zY;1I9#>VPR=AV}5296t~K^4VfpkddkD|k8F9f0aN+>#e0PQYcz-OG9~{__riMw@Gy zk)BpZz3p}BZZ7BKHq#M zWtbJ7m>s9JlnO(qA=0si<8n~9{h_%pPd_D|25C7E5EVsD2Uk!KrVq;TlJ6U6G&^W$ zb+7@Tk>7Uf0=*vYU)9_GQR0KQjUMo^^ry2PDAho~1=ycQzUp1|fKr7cY(o5bq^xHr z0F(-p3(TKNss;4_sVXQJhj1iCn9}EBr)3$sirP#uNQ#Yi$r)HtYfT8O<|K-0wF-F1hV<6zS zD#8F%C8+Ni|NLWbEfq}2-Gm;F&@Y5=MjE1VSH^JYGGDp5`HG(Pf?)-(rZd~>dZfi2 z4vuifvH}h>Ygk(szR+}8RD-{7`TJ#0clrF}yc3gZk6vKS&a(I9EtR zeF=4N&Bn>gTzWL1Y@_phpJ(E!Gi)8b9@t}iw-zjXY8ZjAxmwMm(PBNGY5&_w^xNj! z#Dl_a%E8Mvicu5p-%SC7SApXbkFEXCB^*hSM=QZ8GIj0%8}76$GAg)#H=kD04Vup?A1 zv*XTgT{x{%G83q>iLE&C9CMa%y~loL!!Io@1;;Dt{5_ymK%Pcq+VNCz(S(nP&m^Tk zZkT3)q>tBfwBR)yG8vhE+K>-CH5Ms4c*gnDY$u0*G&@zo;ka&@|C!MLQd~a0+4v5I zJ2~lq9@T_cv*Nn}eS$fn;X*|$D1<;(_?**oH$nMR`I*OsS2&fR%))(?*G`=Kee(rs zy`YbCUx?d_u~iA#litU<)3%cba(79-Jp5-*v4*-_)3|25zf--N1_3T8Ss$>tu?M7ELvkq zFf>*nr1)1{8rO`@!twb*dKGC~#f4YFc$k51fs)h6s{315C*MVnpXY+ynfn`pu6_mo zdA_dHxZ+?YnYg&Dvz+OR7J+I~{VC}_|77lG`#kD~ z=L5uy;bYU0%7|f#Gn2!Feuu4J5^fPIkw59Cm{ftpP$w&U*d}i+`5v8e=N?^*a2jt9Nga0I1b>A7PPKJlZk)H z7)0kwT=3esiN4oqw8ekcn4W3tw^F#U%h57S3X78;8332}p{B*NxxF$?^nhe*5yF01 zGd}Viuc;GioSAm&XbrP$;qpgsLM94A;(R>#Q!peO)AQu}$LK_kxAv$xTJ@{Sxgn#O z4u@x&B6Hy5hK%buYl@KJZ;U8WvCP|QgM{yy1~$4XG4OUx$?`mI%7eyeZhYUBn&GC_Eb`5&cLqH!{8 z7F?#fmHooSwRFzkdiHk0bXP!<3{6WXMRUe&-W}r{@33sVqYDUGtads4osSEVn|xPu zEK$7s{uPZA{6;TV8_x(ubx8*R-nT6q_KVrptmin77JWG#KKj?Z6;Lwe5`WT)7~z=? zLi7=jHS= zuTH#yZgaIDY+*<>b#PWwg!rbd^(N6$S1C{xA9>vQ_@FTc$Cv~YBh9<>Os!L#4_S0g zhpN%fN`x=*e!l7Qb%Ebb;$EI;OPtF0R|g_E{{wQ8F+oqUGlu6C=AygBGyal9t)C?ub-wwa?VqUJY>J2L^$%LrWR?lp=k=C*9t;=?y&l0p%z2g0ut#X63M-k-* z`F3x6NnDzq4^#tpiAk&dg}abWDxS+tmmaZ+&2ceFjGCTB-N-8!FAsii^=5K#hI>HE zu^O;N7Q23YeroIryBcesT2n<_&v95cgkP2ol;!H2LUn#HrqUu zbas@ajng|pOBsJp8!)j7skdmY-ssGr<)c(`bd8)0jwS5x>EYo68|Xy%=LnK7iFV>A ze=k1-as6PzGO+7O{If}}axtg^W9BZ&;Y$3p%AZWn@XFg3^|_o}Z|VU2_Jyr89VbwG z;^=8YuBRN1lM9&&P+fIKMeLY15HOli+EWo;kPg}Zk(SPIy21t(O-XY{R_F z#Rk>ax2l?lE2p`)+$JX4Dgwc#{MiJ!6@kG;90EGb)1xZM$B@zLkg@(45c^?wb?u#o zbmq7s6_mBG`!u%sk@_Vgx8Eo1T4Hrc-QyqtknXWD@Zi$!`r!F(Dfnr*lL7w>9<+Bx zU3~A9gJY9QwjkAEWf*#k!dmNJJ-DYH#}5uG_}bXgNWXra0!51oIyYUCLCP{nB}eS* zUnRHV@!2;!8Vbo2aFT^gQ~dHzH@sVEY_{#n*6Ss7eXPdyZ0vM4sNG7>DO*t|2}g+W zc}^h#sW~#$NSp{LTf3o7epdeFZ%p43wfPvdKCodOnmz6Da&jL2`~y@esZcW1ZZU)1 zx>`-qpAzqIQR$h~76icOmlKQfxMNTc_%J=^%{$xl9Da3G49hyB2Bx#?8x#;YAPfYY zAW}ce->=3i#Q877(qr+uIfOyCtkqb*<_^-M^VK!WA3KmUX@)nZY3%KsPUDL7jyeq~ zP468yTja+N1kiwvS?o?L2Ezd_z;ch%WGsx9yNr!CPciNJ9Pj}`U7DX&pwd5IOOyfe z9uH4l9OPzAadcYVDXxU9l?2?;&S3t%PsaxXe196frzYl9;=5~#W0-TnFj$G8*_ud& zV~w5}sx}YRY`q*LH?RZ3XPZzyHD!Uywk#@0xUpes)!j#?c7l&QuVs|!4y>c$JbyaP zijFvE5(9nL_A=eDqpubenz&;^x?=5Xvpw4DRI^#=pGr2izn|M&qPxHOJYrr~hQ-mT zx_GOpZMPntqhVuDsIJuo(LpAjrrbsDJOlcKv%=QqS0LSe&p=_)d8c^#PnW6Bzp?yn z6ocbl*~#Y~?bLi@rl`4^)!E&w5wJ9ngx`sS*IJ2#{mYwmP5nKNwgI zy@<#QO%*JTMLbxoBP7+>Y(M9(?@wH`ETyIcWn1@tp&;Z`@$jX-&Q77O7YxAx0|Zvw zfvg?Q4q+TEz`If##VL7Zu^k=_g?dQz|&u{<^iH*{F=k3wFe-wz574`%D!X)K^NKHWy^O^z5K15Z_ z4ZdkfW@33Gi+N9f@@=+RipRmRcTQ^eIX&%_TJk4I>OB_~H23}SdekxCere|bYQ`VgeYGgUHPJf<D6l>=MEvR5P3BoPbZO54}8KI2bcG{QAmr$ zLriMIqy={6D+9~bIaXzo!b3mX6x|%@F@m6&8}l4W7ztJe3V}VYLRsw}gOoeOPxI73u|D`hdvphrn`Rvl6Df{TAj-8$kki zI4>w@Qba_AgM&k@(PW}@4Rr(VK!8AP!Mu8#WNO%hpSK(s@dt7S-Hvoy<04td{AsXp z1Pu3yG>)h$VyfbNJ|{Rq?+OlMD%#5*z<6;VuSA;|JU~Vi-saO!z&^B(saE1cYAVh> zQq2#+VKT+LyStS@a0OZ*=(b$a+}xa#BZRE@rK69!r~mn)^UDUg1eYj|A@C8Np<*~t7-`yy5*@U8P_Ke0#yr}30*P*`*i6k-od z?1Bh}w=kx>!j#B2^5Ix(A>5_uJhE@*OLu+x2o0UqaHZJvrb(SFZriCxH>;1e^5^xf zd%~HzV;0UHJK-&*QnjFq!>|?t=u&hLZDz5t!yy^bzXV<3RX53@_`E|%kK?od6*XS);cM5iM$uld_+ zmQHKWnb_3SBol+$q{bZW0``ae?C;z9LMUyZ@Nke&xe%p}A`r&G6B_r_VUIB!aIvi` z%6Y({Jor6*Q2esfrah{uY8RU?w58_2Vr(jv4}hDb_6S19M2tD2J zg=52xOePEdM+k*qIXZZq;MS>e@(L%&M{{{Vs?Sv)0YSVsLMTnY$+(MSO+@mup{-e| zP&9-`-$3!*M4#Mi>;_Y9g=Bi7@%q7s(^l0KLEBJ*G?cZFtANSA@SeWvtLXzc0oI8mZZYJ@<4O!w)zF5~_cIHRH#HPjuD3-z#a9PR;xM zf^-$fLk+0g9u8I#Deq3rR9ES4vNoz^Zu-`YHGU%{y{ki1f|L>kuazd{BiQBp1vYqV zC&5MLuH3y_(hURJWV5FqJpue^`9Fn7KZA)f=mHia*OegwPW z#g;3BQS*Gq^A_c%N&7`0`27Tpts_iL=?&}`Kk!Kg;n9wBe$JR#$}gGa)gMNdqWl|< zUF$AE8|j2$OVc;KDv-0_YV0LCR1-QBY!#icQc0fOcqB^OwJ?M*1mv*ia{I-I#e4`l zWs9ZFXllOD;G>$^x`>jY3M4IOf6W{tG-UaM2`U{AY<^^*V*PQ}dgF%19(4IeED1iz zqAfXHEArvi21ZfSRgZtcRVJz%@XT1Y5CJS{Z$rC5aQPZT3PyC)Tsb^=Sqnbe5P26$!Q)%G66gEw&++zmoWgf@*_fqNc4m*)$<82jL>)mS@Z%MPj}DHXit^HM zSL-dEtC7leo$x6Nv%Q(f!d&wzRptpCpoOhaaE|H#3~vYcTkin~3SGeJX8*Q#KoWHDtt?9{cM$8w60GziB)%RW`#L+VM~CZ(xkX+YP5;69bzTum$u7kirD~^geiZr6tBw z$|e&5KY%AseIy;q%$K1@6vxitVW+c8QQxN}4^#F>m>MeQwdo8;NWpk|L22H~46ls% zj)223l^Kar-CWW^#!EwhRFXLzb?#!~4X()M`%BI+LC?C^N|h^==*X8{AHG&8?^PPi zrOfgZO?R+sBj9}+qA1(TxtsGHCcSv2zL(KivIw84VazI56Fed^`UKo)plUq-+nC<8rwT{D~H@ zOCnmJ@o8EJ%XBe9G%;fPsNOYu7kCu!3}$I*Kplq=GbV|f9p{h<)&!A9u)~Q@Vq9)+ zsMI7CH%EbZ3!Vc<>RS9~d3dIAq*p*%!DiBjL=WwO@i7ff5zCC=%CJ|Cafbwb``f}04(-L{8e1D;3j zlS8`k?QjDt+7P@PTXZ9u3RT(wavWC5A6kf3zmB^!7ap?3lmpxQgUzT`c$vrfq$FtB-{5aY#$^u|u%jHOn*D$<6ByL*${nJC|v1LsLe&CSd zxhQBmzvLXdH7dOe_?Txa_R5KpC;cde#n)++aMsUat-cM`Ur-#IlK`3G-pe?viHw@% zznPP14`t6~SXrszk1;k%0mg-Uex0jI6i3p$i#KQuR5 zD;rXClt`5;5ti2{4eh81-dBIN$tT7vUf=?y1B5gZ+%TjyG&}Fn-7K zh@IMCz#ls_=JsN9SmI#`sxKYT26u6xDc5OKLpjy;XQtJ*+ibTMuu|5ljAWoR%oj)Y zZz946M~G^EA5J}$Ue|sv5IRIJIq{?X6%m~ermxfcj^72boE--g8^T!qx^e=A_QQU2 zWaf-OxL}1kcTW>YsgNhZrTCHg<9fx3V&ezW*wLd8RKd&4)Ygd7%lH*ub^bVi*b$t( zxFl^(aS}Le_NN*mQ+o|VIm1@E8XsvrV8=F z@I0j)+S?A#;q~s%mPfE2(ibxT<^@Dpt_0kPCP)q{Ywq_ve=>RQ4?XCM*tP)587M%c zkRxl#iN#ZfOL2-P-9qDk8VqvN!?&c;qtjbAF*HcfzUMvbTCzye3#N>aQL!b_f}W9EEa>=JSC#4Cb`O9cc%Ba6)2`P2QUajrLQ93O zvEh24b2HVZXYe0O%#+wSzO68$doERc$e02HcpMOXx4hT(CP?c%^*CDxmFs{8APV`I zOJSrWnjBpo4qdAAR(iQZq~5(53VaDHlvNi$R)^qL8; z%1uBnDbvABP&w+P0>>uy)L{KwoyJD*egN3}t`fQtjZPyhKq9XeLAzd@(VwNo)bay_ zY}{v4zLD6pS|B+u7$S z^-s-p*J^tGgS0zt!fcth1%;uRNq^WvQQ&G}SuEpR_NgYBVSN6~xMFu#@pT1w?QhK}Zi10PAHV1a{0fe~;>}N*`rTzF$GP=_uSBJ7$0G z*KcH4Y)-M2(TzkbnT|*FX^cWBLNjEF7>5CybjJ4In3C50TOUakEgyqaO{lU18^0Sf zYmVfaF6&;Jp|q%~|3WcUlUz50L>v&`>Vh>;URz_253?0MTnnx;VFGc*IQ6-;7!x8l z_U55jvE*oE75kh& zvLjXwCP8f-v9eM(MCAPh@jZ1H$ukBbx=P^bAvH!g!j-s*^1dsx3Ol_p(zY3wJVl&d zRg9g*Agzt){q#^~gdacrB9k?@ki@w@W-P`hz)p*8p=`zlRye{UE*zJ}cu$xu7>;@S z>qb~96a8GH*i*&$0B9-BT>=m~oi9nFAiW$I|Jm`G=z*J9JJsN;AQN*Q+Fs8^WjfBT za2wz`{u7{s*1*YD*e*z8mxOo|=dX#{RH=^hFL_ZD3nkOL5-w!;WBC1Jt)AOa6hXO8;Fb@(P`@&sa`&xnuQfl@0MmFg{10A+SkWW;%61 zAp&F*-w_Me-4({yzv{WB!t}Grsr+LQ#}r8e&P`<6PRb=^H9UZAuDUdy-Scb>vAAi! z5BVph!T&b0*H=sZ*t$N(&aS%YvJGXF)p+$96!vcWBg+Rlsw{1GtpUc|YkQsDb>1*?G4D7d>Sm<_8Q{$VsfDbk52+|Yqr|R67LpDuFD_dl@}_SeXiR-|F@Sz|9fWX|H!-L; z{{r^>#*i}rqJz25k7EK79oy?KJ6T^)IoT2D@mi!$dZBjp{RY`x2mXawf9anhN({|i zEDJotyl})!Gl!Fu&4X2fdB^V|3r|}OPqAA^@sdF9SzavLVNor2X`o=+ZO#p=YnbG7=@E9eF%bZc&h(pja1fb?tQ;b= z&;#DG(ZkP)$WsD5Ek$L#&PhNnL_-JqF1>-yHfMd{5x>k6`;3o@*T=+d^juWBnR@2M zTgNk2O-z1dg^|n6FG>;A&yMe2lYu640tuxx*PAhEld*ZagHKcOv*4-|fCSoPm#6vC zj#QIEZ{Z+UZ+zvnkQsI&ZD*r}!SW=d&)7!3H6>z8-?8(Q0j$H*YU6pS;o?4F&C>3` zN!whGo_=8wxkEFtcdKRo@H zXFzhhuL5MG-pQcg-5PHMxk~ml6${cYlv|a4N^1XHz-IBw+?r;Rf`t2P#?h zRkBw9U9dq`3lNrt1`2|lWTdaWZE`q`yPLW&LA`*M$M(mM1Z29xV)(wWlfnEns(4PB z-1n$o$E1m_JaINa^qf?+b50tf$1)%~2Axr3Z2z6I?@Y`7Zt2$H+Vgha!98NJRf?+n zpl5GoWZy@f*LpavjKRhB>!=$WbVQhXo2mHBxlh)EhO20n_y$H3mg=M2%iaJ2_24M; z!lmFTdmM9_OFZVz%?BcLJCkwtq=_Vs|H0l{0QV6r4Sp6gv&GEJ%w&;87XD>1Gs}`J z23yQ%F*7qWGn2*443?Djd*8cz`R-Deq*6&;>Qtqw-IaEBwx_qJr~5ZEUw7uk(ZSi7 z#GK*--Q&O?3mQDB-Bx?3w0zX|Ky2vTLb=FvovwC9VO+bwF|m zA{ZawcEtXJ03xN4N8d)(Az;u8oMMq(+V=gMvm@L6O9ipW{tNI)lm_nn{}?428iqnB zXdiR| zDDvu@Q#b)uEgEKqax+j0$Wo{oT#=FH=Z}^F6jPu;G!qy#hxQIx9soAM(K3Pn#}5#J zpEDd!HjpPI1<)xO8H*zzyMc>CijpVS1s4HW*kZu=i+z$y0(zb%SPv2qxS~0bNRR{&|C*)m zVGrz{^)CjNS=GhR`5#wgZ4AtSKWJDOJDZdIKaQpT$29)`yI3lrdcpwxCU^zQdFy5c zYc~>J45_lT!{?qRbTDP*ULJ6%Wo2b-G)z$fgPzS$2yk!%1d2dPDr-`N?r0g`2}N|7 zA*ou9Y&gO9hY3&WhcEM`8h6j@T=N%ml|Iakw(Fkf#TVay3m$xFKfk@Z8&6>`WbQIB z1)CS4p@oeh4E80B4(_^tc^m(Z=$8eXcV%l;i2xsp#|Z?!0r>ci$>^V>kv5;QZ{ z(k>6%S0S?0@(jDn+oJiT`E}K2j3GJ^3UUcQ6jTtFTr(mD=g`{Q&I$4rIX$%hl*}aJ z+q)ffM25Y>b9UKpP<6aLTyd22cAd-|;r?zrk2G9mK#sz5UPr&r5GG4OW8T67LgWIKHR+)jl1_IdG5W0R{5iG=nXh+vzBX%@d;4+Jpwd=OZ~o(K&=EKrVvazG=N~<+Z99Cz2X2#Qox?Le$w1caQ+3<+ zuUw#HCjGw6Y01eoqo8}FUQq>}=^_U!Z^kCG0)*NAtQpCN(*OyaPOC>xJcREx()q)o zwd@(6Qkdj%0zTmg)>`qO476xEUk@taOm!S7g)k!nmp?L3SYa}^P=9avsLT*$Nrg1q zzq$PNww%X}I{Ot0sR2c9qC_uBD!kU)&25du+U*|vMTkUZ6N@@-?F5>Z1QNt2 zllS$lc+_@h9@qf7sN)mQ7i{;{T*aen+0p(0!uP5_r4htcSX49a4lNs}Q|)M+r1tU**Z+aWcBMdcD?W zzW%{sYB7wpa^3%90z>ThIAP~`fbg|x{p9y$!MfY;S8D3_Z(F@eEjF%eS6Hl>jjOgV zZtZ3?KlSQbLK0DImb|WyI`MB_iJRNk91%8J*6|ZoZ5Nzl0$a{VMo}x4Uy%hgVecc| z+HttPJB?*C|2B{==G`yslxc}q-bo!d-`C^YTkK4#W@>(>Dt_O|U$kv}4KqwXxV5=( zf4FT9tH023{iahBG3T{s^*d`>Sy)I*v9e{0>ue8O`*PuIqiD^w77*T?4UAT>{dkAV zL1S;`V#hg>9ML+3MrEr>FpFgrTIQ$!cv?XcELcu=)akuLqT8|AoA=W_^SA2oNL2mD zBIbwX77}`HoIl$?M-^UCrd@Q zr>P3Q937hD@>TBKe^z7VpVf%15XngDINf94XH3;J&^Kg2N6njMqJ{QhdkAQB9pY~GT z84KeICS22Gn~NG{5sEo&xUE`bw%1&vTcH6P=8)a>S2Q()nx!2m}LXp!eqM!YVwgtJFe^;JRsk z&Uc5Un3>U6f)Cc~TiQ%%OtDi)U2EeyHTMyA-|2T9q88iVB070?2$W$6;^e;aAMzh> zS(rt{jleaoL50x!XtMs~*eXu@NG4I9`Q@$s^5+jj$Xe^tV&3g0jQst9)psh!&WC_p z7ZP~z9!37nfYM3NjhlY@>7Y6{;brg4o6aQ52PN-<>&~0J0u>0~@|NjLf8dkZ=o%xO z@dc>OW`Z4$$R-M_yT$>60-`t9wRhRkw2QW+PwTXu*Xor|6AuI5uV;1MjJh@2pX(VG zzph-I%zU52dB7m|`E})1{4{FL19ag4>yV|L26k0>Z_FL{I#%AWhD<%jrWi$F*u^!a((FkeXu08Bz7Hf-F*OOlrPW zX3WP|#E5d_xk;c2;PelhXN`m1)}FBec5~yl+TtJVrmMHdt?2d^=z%GwKl76Y&S~o% zwgk?L*H)=E#w?VB1g_^*LR>u(U+l;`foJ$9qvN^a*7s5Byf?Q45JiNlOSh?XYPPe5 z6l(Tkljs-W@o_AcOkr}h0wd{{GUw)6bX!{INx zNqBp9ksX=T-gYnM#|6Nf^ZizOFW)M@wJhBk0q~}XH(=rfEZvjJxrI(TLT+FCSARcc zRGz<&PrkosxUN;-XE-#jKVbfv5xRf#*T4;VJLFL>6`FW`s63rSEz%2_5;M1U$@-2B zwEqVf{qvz4mqo;&+s!a+FJf`sSal6%W#2l-W1*;L09Gw(tm=(?mk3aLU!^IJu|YU# z1BlIUlS<#EtZ39W-0T|L`4i)nOP|GS!yncK^mg#S)`{L#`s}0~O{}82!P269Xc!jN zDPjdth~g(VlY3I5UXoynT^~Y&6FVNFwK0G3amRYgHS&4eZ#*9pN{wJg$#woc{t^cB z#Tmgx_$K9JuhzT?e;0hE6b1K=s@3sVa6HG=beQ^B@IMF3IB#v6P|SUq+2SEJZ=*&u zHdGfipeI!CL&wcV z4~?<61qiXR>ZRf%GHBRBlNA1|HYmHN66mky@0IUQPS+dt1yHrOd)=p7(r=o?^2MBt zb*5ihx#{ZG%K+VTSrttrZJ?_?*T{~A{X9!-#~%JLXkC)&R|PzEnrUL2~= z4*<*T;7MkREd$&|SQ0|y9+D|2cJmO@DObqTie^GZ^3; z0JqBHh)i#hBr~ZYYyYh#G9j}6-_nDS3j>e9A^&k}GLvskuPDpk8cYE`7y%yv5yy8jV44IdullU%^LnI!cYe^-O|fMw#^d*3GkyBAc_wE)caa5+GAQ0nX|u8=~W=j56EZk)oH zO*mg3%m3K#1jVnG?$z`?uYjb*pHBavdW?W6K(mrqV6&2>pt82(IptjB$9*A~bo&>&N~79168cM# zbLMX?OnlFm#5{vB)EQjoKV^M<>Kd2J7b}x2$5}yhh2_t7am_l8KesuzPsMs@+L=s$ z6*m&m|6w^mpN7=2BZB`G*u~`0uB3{U?QCcuHr!m&jLCVX`1@v+&eZItEr;ICEHb~i4Z zLc7}3r5~XFRT9r}24l8C{}T)Xm6>oldA@bHjVineH>_WIDJ-qo%T&)is_l*xYAw=1 z#X$kH#uhN6pV6o?vmwgYTS;|QRr)TIYtmMP3{EHM6TSK~=?MRResvU%1v}HpD zLI`dBcH>(IrN6PkH0)}bP;*647nes`vo7rnP2g%cai4WSvyRVE_6JUil?P^gD>pr* z(j2?>H*+Eue|LP?K(*QmCf6Ue`!DQHzEdAo1rALb;rwj=AfNG;%V%<9oK$Yq`(xmr zK}ES$RuZhICCZnHa_|2XKqK#4+uG?$0ov;Q8Qaro^4TNlRbFI?i?8B|9CkKHx&$np z-)HU1gvx-Nv*+V|2-AT)3hVn zJ}(n2co{dGl~l!cM;ej%fe9+(aVw;Il?I`{Z%aQ|d*q@Gi_={c>`R#!uW{6i>P zDW~oJ&TbazX;z?8$N}B(9M^brY~g}K7S~lXi317yF|~^eOeGA9R77UOG;D(N9J|Lx z3V6DZ+xpH!2^q)!&s($Gc90pIKa5`bMi#Q%Ki}GQ{Z@PCkj3;M28KxRJUD2a3!4*h zdubv2=%JIe%H_P~%V}ep0|e=sX*h|g>V8FIA@z#}A{|nyPzlnu4GAiEib6M+V#30N zxV}}(<$jKu6ON?=3ux*0@Rgc!4Z)H#X|35+kBI{;$4EUl2Qb#ul?)W`bv9Un2XE-S z#58*eqa(l$i);B17b(c0=ga`UW!t8^MCGzoo_WRtcI=w`V-?nLVOtW*v=@-b(Kuka zipcbVQL8&(`~i!5scLI0gjfp7YO&(%tlX;??=9CKpi_PRJYF4&p+Jgx+G&SnCNl|)$>XT= zyj5Q?%lsq)X0S*Tc^I#^xHR=p5$F~MebC_b5ab?=D2}DmI z#+;Rdc8H4*>aq~ORvSWrkqvmX(?M}K?nH1`Xw{lNUGJd?T>7e!;kn{(jA09~g4}&m zn7~gAoiM9uNof6tqlBJm_LdY=PGxc-(s7h8hd2CYlK~jFy(pO`fJ2P|-KuSv(b2Hw za*7QEIV-7zDM%m*QqEgT-1ENL?jMq9Kt!Ba5IJIGMC%tv5tP`TTVDs5W4bd%!6$T( z1Wp>ao#{z7NT#x=25>;(BqC!4OH$qr&Ej`Z|vXwP)e zs68w*Aslh3M&*JWW>r}MEc`b(E!mp94Yr?p`8Ye4gE>%un3wdYq5c@S1Ql(p?+Gav znB4ltF`UL8bV)H*H4HkwP-lA8#D4rilM}id5_$RMhVqChOxV~oxBRvM)w4;$t$oC1 zJNw&cQ>qoCPD7cnj@@h!_ubwi6ouN)o=naA^L6VT3=?fjj3T*#?Z_O71n@xVgc%%| z&!6%;O2SN(14Go%3H9soKeEsW6jpu=*^r=IM6z_|@lem+xWBzU6sMbEH%wWr{=DqG z)vf*=RMm3KCtooAkvraki02N&O)IzyH9>*nsZ9vkzp-q!$Bdw8n&)St#I(~JF|@Sd zh;b?!ZILL?N6b)$Y9RZkhBJgwIH#kH9=uD3&1E}w6%ug5jrFqVyalH69b~PQiNoMq zl()8lw9l_xK$+I-3aUnfnp9RMO9)3`j1kw+z%e$R1?xRhbXC*&lWR_%^TFWVcQy6T z5K}-=weyimHh0Mn*))ZgW3dLJV@9E@&&?z4jp z2%SDO&g+akKSNMUavtks`ycfLl>TYibRB95GPQ^B_uyVyq~2Agn+eWO2>6JOYf&a2 zcDIK)J*|1F>N+29Egw-JC=jllRDj@K@q<{XYCo4#W2KrKO;;Vpo(QdZBj*!czhHIZ zvHI+%*&vwdtSP9`dei`=FZvJAln@$v7VNZLG}vaL2W;bKip%S?80Ll=MukPDqrLew z-)IzYn)2kONHnvO(ikXzOGK9x9|Ynr>S*BXdg4Yk$KT8WQdU<4iBQCn^*~Z&kHwba z@mo>Rm#mQ|>3*4o-bejxp36aQx8)E$%7K#EA*7&oNT&3~2+6Q8Fd+4c<{Qh;4AGBo zeofBKt}u>h#A|7MTL!JcanhPi&Cv}Gm63g*8M0@7?- zXm={s2i!vo)&@ew!Y_Y#HwU7i%(-N1)OSUYU~oT?#!o@*7zf+7^G7G%7?pxju^IH- zQL(~tBAIQH(%Hk1RiZlnWYTosLP0{sRCDG=b50sesKT+b zO!>x0jj;ID$D0k6=JS$<>XKhO1v?u6H87H+=5s8#dsM6CZFyM)4is@>BRglM2MH|g zbL5Z9+u+3&dB}EXh&J{>IZJq z;t*&oA6vxufQw`>`>KWs=D(}l720LAWh(cwMmZaVpbpF7cAJ1?%ac&bZ>A|jPE7+>C-Sv8Rc*f!R_DFy> z7Ft8kgEC?`m&cqT!AoVbM&471R!*=zZ^lJ`CQo+dBvHpUh0`ig$7$83u{k0?JO*IT zKQTl9;&Y+9t5f4|avmgf)Bl8wPHih%shGkhd3tH-n>O>!y2a=U#?sf{tiSFcuC<_j zwTtnfZ{h43g+Zt7GBJOQGlDXH9ZZW=wh14>xtQ8DlrxsTF_x0BM&QvNHp6SyDb zM{fFD0wv++=TL^!7Iw%ZJa0}timxy`5I^vS!|M!KleiEIQH+`;1b^TqJ?2$cJVC$H@?$$8dY-M!ltsiF42zE;i`XWDd3`RPCNo zxgl%xi;oFj(y(J4)f_^N-jgzfz~Z^9W}K?lQe9j%wYkw_&SgS{LcodF=SmqdE=hmb ze|1H@JEB=Zm88#wC5xfP_y~*oNk3IJB@e^UVBVw{p(09&QVb1?#>z7%b$ZmtX-O3V9NL8BEDdDeK5nbES#s0^Q~FLqeSmp>rK^@qB5^%fCeZ6J zT#zm*!Bl_P4?wX-Z;7KA%6-4z3?-1whf^86WfjefbM3K4inTmMNi<@@Kj!)E>NCMY zVm@!fp~1||gvCR%m2wW`fXSi_$Nuy$%@eG~@|Dij6zR$F{)UG0*{=`tuED$;`28Jx zrhp^FQSOJ>s*eyR&?*BvynUepUUS6&3WdzoEolWj#BoLumtoE2) z{kyLCmnv8@^Ga?Qd`>^<;B!hgdcqjf!%--|kL`3VT~xM19U{#A@a7aLhCi0Smxx@* zAXGGJFaHL-59unXXj1eX-*!x%A^6WQYqMDR^OuTWk|BO^cm$`jDBuM_?&6UnIrDd^ z=jCyj<|o`ow-r9~50&PIj!?*HZQ*IyO_;FdHtqHqoJDE{c7?IqLh{b4t^KT=-QU_PE`Qn1+a>|hUh!WpL0c)kw+A|KW;Pi7Xv`<^0)&gJ6xfqGK`w+_BW_X%* zFVk^$#JSJYwjVkQHrx#y>nDMwJw7oAx1d6V1@kO9=l;}OgwxFrJroH&#E!V!WK%I5 zdW|fwkPk(oojtDLepbBqo3NwF<0Ne-9#YMy4S24GN&d-zCez@6<5h^^3X#%|8Fv@T zTQW972E!puMS*|4nAU~5haYY(X(7q>pVTB@T}-5-L(XmvfKX5dV zHDx(H>W}0C&dad#yqbSJFmp#aDUuLjKs3s=2xXTw2mPrHy5|?I%_z#0NSjkUBUvuv8X^VO(DO@s;7njz~s77!c(O zcCS@O%Vum<`cP9bMb%p5QD?9yg45DE z4#c<#SA4sw8x3U0udHfSBxU5$6;zr zNiCY7^3r1jtk1pOACYhRRe|kA)gN%Y@B?M?3}fWXKSwk@gxI-DZg!Dul>9|w5&Te3 z(j2s@fOhvGLl`F{2)-|CoQjpiHSFbZq)0{)ZtnZYG|c<;%?u1@W+qmox9W4_z$Fv{ zENURuB98p95gCOz&chb^r((pd)7E+9JL~(n3uN6*ir!1xzTn$&thFQD}p5@GW?mB&v<)TovVv zoyUM$3T`bGEL@R4E{;JQf2h0WA4)6namDX9p^&`N988|7ocW)zWCdVEU20P{K&;Lzvh4=ihVC) zDi>t4>@pp_RSu$=UrS*!jumG>EG@C}c`y{MV7#K2zWJKcgsWN@6SuH$}VluVrvs<-kA@6Ufkq z(f!Td2Zj72M^7PP+IFbL>-k4((93KxrZ*UA^$CN#^LgE9ve|Wjy#D`-_D51C@3%m;bK%-+?%~>~e+Jo3*PJY234FTqWEXYao-!w2 zpSE6TXq2621jj|peQmgGJt~5`7Mg3dS)-_fRs!wuVf>R7ezo4s9z){3l|F5p3bQ^O zU$lGf7Nc-{WeoUdoYMsq{_E@0yTh^cgJ7YTf_tq32e6FrH<#ni;-!KH22DJ0K*-#1 z7EX%*QR6=|bX6~0b>uSa_BUYX0R-$^SgFu(_Fv6Wy3Hzw>)#3J2xB>{XLYd4kidZc zEG;m;`K069BD~D1gi%4?duY}o=L<#O8tZmficMKq$2|Aq_K_cs8Po)(buBA^7(xO$ z7?juDwY#x$U_z1ZG>R4?iC_DR#T7-61zyYHNyg(59l*EfB(UnEuZ9muGUdDL~JpX1&Oo980d(ukl5_rf~PglzLO#ic-kaoZM9F!HizN}%|bkk7&-<(1lp3DSj z@>IL+5!Bi7ifed&>9skwKhw_xL}?4h;{4KD<+&X}^2a%?M9kkg$&-ShBSwH={#uPQ zz`h1(O_niXP{y_Zz>l2a@ziXR>4xcjKbzlYH5|bQLVDDQ=AQfYWe)qw#2@Igpxe7S zt^{T0KM?1+o)6e*Nu!WrqM)+Q+s`rmFHFN;k-z+HoYt=EfT;Nyv%v1`e#OH8h9wP> zAnn_6iCe$I!Jqq@z41Fh;(zP7a8p!$)1ExVf6}vFa(L;TOf^|OTXolEcL!)y0fHUZ z3=msx=AXAWydP9ZxtU7kw9;To|31yU*Zg|*>$byl_mS61qe8dCeye?!>X+Nt+eoH2 zwQpYsM6n^Kl+Mn$1_0r_H{S~FJ31qjmmdiRNd}&TEcbI^cFB#| z+$i8ki|M+*YCi^bEoj|a_A{Vpw*Y}%0ysl1ah!T!9Wq0J|FL@Pm9XPos2{fZJqz1Gh1-BF=toFtMWy>oUkN~# zPy_bILk;nOghYo3E3zw?ky!^_I(+_Bm@%J;BfCay741+s-wS~hHZfYV4;a5$|G2ZE z4!|oT{|xU+>9S>24UEpGpy}Z-M8_5mCLqyK{rc4IYsnxnSQl%$~$f0f+UA zW*cl@og>iIBr_Sp#)ozJwQ+*_Gy&cdb#}yL0SFFCaxAnCen@u9{;;VTS=T90T_k(KZC9$JS5Ej zqdlz7ru;qtKfNSA$DpkbL7xq}e8C`~5ph}c|JT9)86mVmK%8Sp75{hC<6j$#v9t01 z7v=a%B>yKwn(IGSQT|`b@&7-y`#)5Ue>D1EMff-6;QAL;|8G0das6{;=>OqYJPy)w z!k3QyK3I9U%(ba~CPE+7IRiNxkc{nw${8yH95l|E9x1)GQ9v8ml2NTKCmH9Q z47ep+jqHup%%W}Hqko9!zFnUVM%H$3YwBTp;j@8xLBz*e%$AN^EAZ7Nsc+nw80nu_ zlI+VsCLUOJ6KF`V$yYG1c6-5``&O;WGt%g>8zg)vH86SmWXU9U*_mtdoqD}m8{Qwr*Dx!?w55NiYIQu?=~VvGVc zU?-4zJtWWm8?FyhG+aq~kP7uxcD_lh%vM8P-nltNXIY2!X2i^bH-yz23Agy~J5YbX zwQI_HKb%q4Mt)76WIU1h)$Uryo^BS;OO3$lV*n@IEurn?AjymxQi^6YcFpv%PX$5Y zeFgvClay^7j$?x|T^E+tdiuOy(9`5}BlJSrI`r1in)mf1C>06uLn(b1RcaR2VnTVq@#;w`MIt-3!|b;j#)MqKk^}-*nHuw`>1i7d*H7ZS!T( zj)}Q8?Y-f_WasN;X%{KYhn^vs(FMpq2~H3`N9$STACsy4^IZZO=&n0N&8w0|%eu`~ z>P-$dmPCvN1BCo96^aA-)p)n7_~Ft_S<@r8d!XM29?4-e*@W_MvrcFC$`VCK_< z{5Jz&ogh=m-m>PNB?DTByhs_E5_Ro7jLh?9~v7QGH1-ExjvXwO>1U$CbjoeGBT#L7yRjpZL$B#Z4H;) z&e2$70ey%LXB=>;blc;+Y9JczGLPrl71BSnCAD8 zCt|csltcA6GIUDVV$=muV(VS&{NA>jbkC5=t^&kncAjp69}aFi6On-Z{rA?S_CWT>EOrX!Hl1oeZ{er?X&3!8^1)AT0glznA;^h89erW^UO2| z9J|-KNf^L68W+SIqE?|q}DZiY#cKZ9;Jt&UcD@tKx zht4*Vu4boOIX8AQ)G*(4bgB8-?prrF(=PT~u}&_#i^p+?_R6+NLlL#LSI}5e9JcZk zR{Gmv_oI0awbS62}*8$#d7C_G^YZ=1-}<{SwYLcnxo@vvi6Eny|e|3 z_vYz`Ux6(V8(9zX%vVm`9m0>SHQYmowEt1A%9p&}v=+E>pas2%U#2ypBLnZf#ce#b7 zydMQ0JoEVC!J&LN2B{S|2CRzf)Cr+!Odr!|F%&jQ7l}rX;ex3Z<{*ClXh_~)#EQ7; zsXE|pZGU%g)uxwPavk~ujT6$QB2dr+t1~8-g^sBmD3O>Aob;_{OXw?Y(S}DK$Bb(d zZ~rn11o;_`P7#2A1EUMCDkbTfLDC(B_i$-JbLBidiMmWS2tspJNYe0j$ubyZE)ey& zf2CCUOd%7R6qQEIJ{C9@`exDC@wGzO=1aW%=HC7lnAXDlG0wwJ$MU^1Q`zRFPgqLB z4$ADIFfS>zl{}IPvriQROXypSOqf#g;#ebj((X)bR^hk?S+IxfF)1!3p?QKM6-F1Z z0$eS_-ODg^Xe5?UMmLxlWU(qPr4`ClltBcuh4w$uWAN%*I5sjB-D=QX2Cz*YAf7cz z;i>7<$cS~WwGEbF5>D^I;>yQOUv8e?dWjXO8>ISrSfrO2qk4&S(XOrNHtve{^Di+s zRE!KYxsqoJ{~q?fLTiV@UTN~e+ZF3bbj3QJ1%ANVP{~DKa#q@;ZObRpE_o-vkeMpH z#FmF(ffn`y4oXC^1K<`7eaoVkH^{aMMCX0Xp&dJMFHdF#^F&h+R5R=Rv501zi@IHs zI_&MR~=tP$#R%Xf0V=C6VKhwcru* z;Dr(`S)E`Hje@bTm&o*TqdgBDBhtRVpF1O1>x?0_QsaKn)DJ`JV5A*K!M%r922P+p z1g3Cg^ng!?MB}WZd6%IELAgTh2cIcVJs{FERF%?c=VW0jiiHoV_L&>o$&5xp^O|ZJ z_<;gS?A(lJ%rx~ENiA&58#45Pi-bQsj zC$=EJWU5FI6xrLJ3%7nw3Tl?2+68NrI8Gla5qnuxR|nyBj({T?%H!Sh}U?1TNEYa4B2VW# zctmJZd#FB&PHiD%y6~OudwV|-@GEHVzp6NLy-Ma*6v=vQx(gSX2D=6@4}rDZ@gW) zQn`~XqTdK3n!wC>0!BgrTFX@UP1+IU@LTuAUS@W+{~To0v>&nd=T960HBe*dCU zN2zj`liw$2?B`;A(#oFR9RX!wZCNei-LL<`ml}oOl-`ZPK?b*E6*&z?inGf%v|QpD zxd4w4Y`)ozNesT^wt<*WT^MErM*n+lpqA&6))*DU&m2DST~w z`?Ic|p($IjNApOtG?sM5AS&&qN;K0vAma|E_eYneE~ZxoJ{J zrJlhrdn1sEnXl0~BX)Zzd_m999C;x^@yu_^Oiva_;!Fi7y-1Adq){ib)1x0+=?73Z zzhIRNQbkjH?aRpf-SKw0!Vhe`nLK25=n(QoVM(U=A=tAYN;8!jDUQjAuHqF#AKCH@ zC1EI4Qey}5CNhJen25*ljQW}(RJ6<3OpJ}0ACkHUlLJI7{kDeOvwa|Aftayp<>H0(-O~+#~^QVEI^?|DrVBIGf%Dl<(G2N zXtrz~9m!gU8wk0*f_H~dS^ChNXM+9QwG`1dT2Te#9_LZY1KM{y&*$+1fc zd?RzEnuQd9HL@Nx%~A@~@PSV%kLW~sW34N5@OYC>W!cD+BxGa6hXcL8_T=2BAOuZe zn#S%|Z=BMr9}o6;!p9+ZwlY#2DD4YL7!4$twSx-$%L2EOyPU#!)06t9TDtYF(WL}J z+=ivdc!Es*#Z(~+r^D5fa3eW$hlTT7CfpBTm1c5bZEZDC##-Xlv4V|k5BOX|LnMbf zSoW9(_(ODxucYnaRpCm!(9(O<{8xy2t1sVPZ*ej5io@MXE@Q=Aqw}S@R=g;ORPf?b zgqaHy0~2D}aqBEZK3^Kj7kn`|5d9T)B@h8GSAx%wxIpz3wziWS9S+EhxpNNF z%)c*|bkgA0tgMs~xKG-VxWxi%l$57CS*-||NkwGr5Su%K&}`WVld-{9)XC^#OmxUd zI05$7&2E0M@=+#tU(7xy_X9At;56Ows8Ss^kpX+B2pV1?cmgY_IMC$>T6Z&8CFmhs z#Td}g2U`2FaL#1|x>iobescQ{kG-=vX~O=gkeU_zSU9yx;-2x;9Q?~z?~^F_SYU=0@>V^E-#tg^ z4TH+@SXa5f1cZ{~>V`aX@KJqU6TRyG^^)#>6RF+I8HT$+ z3XXu%Z)3e*zHw?n!#DPE+DcurB|Y|Kcf*#3@RN-)18bH;JI!8*+*%6GbJg>K?QQOB zQ!eLlEH{FnlqfuuYeek4#ZlumneL}Ovh2xT+FhDjJ3k{=EKB6;@K7Bjk61Gad#8DV zKuC)@S^F1Px+RKu(q&1Bj9?wx7ujg;6kqD0oqoP<{`oJlie#g%tW{KX+h`7pk+kmC zK|iNH8k@)HVP7t`J*Yp`DAxmRg7ec8NRte2*Pc{BK=WKH9)ErKP#6!^r zM`H$7NTa@Bl(JUQyC+vZOF-`kt}-76Coaj}Q(Y>WQUO~Ry9z-Lb;;y@WB0zQH-uvro*@;)9SS){>1+#+cC#l#xKpNd`TJ z#KPi*meQo~{l}UKD5`ExyoKg*Dc_VSJR#ItCQ4FKFEo{W9!v=4M*N_}JVmn5u{JTe z88dQs=3c(VuaL=b^A^L4Jdl?rG<$~9h=>{`irn7CWUyp66`#>@P$17Gd6MS&!A$wo z`C?N#NjeaVb-_dZwq)Tchx;^9Q#=%WQpUoeF4Z;y9%*k3{EVKzr&+`gQ~0A76}%nT zh?6YISKi}E)=HO+D;oMw#)wA$lIWVnsCI|VZZ|xOvxGaRrZ$|6xUH#U7}_Xv-jdbs zHS8Nc<>=;PZiFYG|6bD*-xUYRtPM@wgE|0L%}Y%l-WTW>A8 zfy?hcb+$i(Bq0Jan?-%t7%u{=0GG}mGVw~F^W(AmOR%Qb&#LY)OaFl}x*Vx!ole-= zSY>vCxWdqnZ6#D|86`jSS~o*KHFjV_SoupuKMZ6=KufgBDiGl9z}{G3gp)s4V(BvysUXuV;`3moa9vLlST?dILI)mx?xtuujcUS=@Nw??iK~#>QLjT^oBx) zhNZDy;>DxJFW>9id(q@O%N{zn+p1Q_D^X5h3=W^?#hcylR(vs+Pc$ayRxQ#huyvM< z=ymxr7j(0Ed(%k*cdDxD*}Wr;E>>;*%*^$_p2K@m8m;3h&~souK74G_4|Dzg-0p1? za|ODQ4I9tlds_$pEg1r4gLoc&hUIF&w6}4NAI$dh5^cKT^_0eJ|GZzTLkkU_KUk~d z{QAxBxxLQLo`Y7g#jyAdOj=`{-#|T*IeWv_^NWc)j1c_iYLHtH5zOf<%==}i88Mo= za;CVthfL#n@4>@3Aw>W=A3Z^Mgb`MTSo&8Oq_K_x(@Dyc5ws&`N$TI!H2jd>(9YQ*YlxklQof93%yH zk3HfjYaaK;u=g=W=+bb}AhxKq#5V~oHSeBU!#?OVpCneYT0(2+OxG_cw5C%_7!{YH z>NLYch*RofFl!YRLq5b0JhtwhnP%KP7>{wnd)$9u3l~!2P7_yOLSD}ung{&`Usm6> z1dC41@^aP1uP0c4p?QMDCNWR_ar-BVfwPU}_&T3)usn^r9%m_ms;GvTLR72*_8E#S z-%Vr-fk9^}f_V;XXF92&hJ%&9D1n!oGj!<=MFLskG!rd-bTwk5MO&S>CT4@4puP=- zuHN)#cY8L`NSoUygW))Ow2Hi&F*!c@Y^175R#gII{{(o)QPk*pPLH8a{!*BApZIJz ze(>R7~RqZ*W+mMvNSIfQ_G*51KKS`S6kXwH14ZzuaF_DRl8-z#< z1mq5R`Mq0w;LV-S*Jl68gWuyprw%Kox}+yJm&3G3ujAF&(?1x*G3!t7YW?8|sohx? zrpw7W?4~!3zxzWlyBsX(2GqLyzO2A&c^H%xgs5dlici+i=!U)UALWQ-dskse2tfGy z!bWbk*OyV*&gNigOfmn9D2vhW_*qtLgtbi-3{s>gXXC@m2IvMEb2hj;T9st( zcWG^5Bwk&++w2wIolV3Gq*Y{CYo#3<2Lbc?4=*M#IRFiS7qY~LHT9v45PcW@JqnQz zqD4F~5qL~r5GcON6exEKTi+*+ju4gHAe2UI59vS^@6^UIwyXZZ#mVpd;1Yj>6`}dS z_^Ry2KH*rV(&o%04vSwX^5P=r4J@AZFLd%qc8tf%F6z72SKWFg8mTP}1)&FLj%}`) z9fI4~SXW~|!@F2NI@^!okEnI+3h-pgah>kGBpH{&#k|>GcQvMTs|SY>JVBm~h2g}wjwqsAe3`P|aT*6G)|9v4rm;WM? zZZ;V%ZSdmNWEk>KW5`+=Qhr92ww-;F@6MdK5tBGV{~%rclhMCQmbbO~q-1DMq(ww8FDwdp?+u;p z0k8WrVwK=OSD}Bd5=0Op`v36L6FqzIgzP>L{ozGLdZvFBwX(GT^IBP%k?3!+&lIsA zh?xK7{#E|KOvL<;yH8n}iRiqlqv{mAN=(giu8CoxPc)-8h@ExLz$wUmr z=(Q2@eZ`390Q&_%ehtn<%=Xoj&-utNPJ|{tM_dIPgZ9dYzpqtLaN_0gL^s9xeUa?+ z?%h$btID*>x819)=JK`yk1GHY%;o9sX~piyZ91*BwUxte`yBV3C5}A4zpro9^%^2O z^mjDpwMVZjLbQT_@L7u%#Cl3tpVCAq&z$`xhEdgaA$V6{PI&qxYLH5G3Q=N#7l;5Imn=YrGK z**CH?@bBi)kLODl^>)(4B6uICLhKS~VmJaKtYH27@!1CHt{(-r#~sG~!LCQQTTpt{ z$}U6Kh8!`Jx_j(C5D-!W<{L^{enbf!I{-ELw)Lmcxdx_XlHF*F(~`|J?hiA=-)S_g z``pvi_24htBg05b>2Q#eMoElsdi{@}a%bwE+wYU8%d2-sIRlN^Rma4%< zJ{Ivm^Sr80^&k5)V&D-*7LzF4cFhM5`AY4dZs_KVH8&bxAcZy9Rd;?sHmB(ZKgEuV zT;+O5f@)w-Y0tsj8n=<`pJmiDz)j%xF8!m$60~7xt+ns&y^X(;-M(rUynRjG zDIprJl`$jeyxnLGy?{Q4xWEmuALUgCKQ$g58!kRQEJ?|TevLm<9&pfOcCwt2wR8b~ z44K!Mo$XnV=M$nt6rb=UlJ!Ve=?OE&|QXyo`AFdk^)hog0>b5Bmp_SB+44!Z`dh z$3zYlV>Z?GcziCD4J*lA$?y?y(8OvW4>=td`@D|X_uT`(lC@mKQ(y5N6ML1<^7F!F z3s)kVZ(6j1Z_iQS4lns^2AW0oo7@PFHS11pkBmMu6Wq z>>Az$tcMKfULB)QOPnFeek6r{n~Y+r!`8IS@U%|oq0&m3cj)xaWsFK~bnvM+6Rl?> zV0^JbgFFd~^SY4xo4gt*{?xUpai$bt720ZaFi;x4TWx$n6A9{p&ccQ;(+4O^&5Be~ zt}Xj|?+X&*`-$cROTorv$9dWB>9{+^3RL|2^Y`P4!~^aTB>C5ULwoqpL(z4b1e^eZgd1BIu3k zfVwi|*=Lv$9BC$!ifE15fce=MYmL^==pn1XrT!Ud#2T`>zy64w z+UjwBwNgEJSL=2vb)9A187T)jKZza4GeYuSl&)4?uwSGtIk^Inpv;OyfVb&fHZQE) z?dJFgx>oLd5Y+f)xWf@dSFs^-Uh9(?4IkHQtTU6ZzjpNG;Ed}yEVFzH#1IMlCuFnkVW{Dg#^^3^aeqw zoXTab4{1-(Z&7jW<_2{hkqS935%^GW<8=v=z_O1$R)!_W?{(i_J~@wL(>t$)e`=xJdYPfy zb{;(}m`-C=uk`bncm0#(x4;0XU%qHWc=zp=ghm#|!2tLckbQ0JIC|$!+xd#yamy8r z?gd_l2uAx83vN>#h%wXwMEUubH~H_tNq5^^<_!8O>73H<%m}P zX2ao;hz9)LbP7c~olO)?Ilp)SQHqN_yRdHiwO!^^EIg z-A^R8yyN-_??CFZ*Jg9AptuW6F-mAOp-6GiSwfjtSL$-MTHeWMxm%Z<9G})yrNNSt z;!U1kTai20#gL66$5tTMs`YL;Hbn>pw{6G(9t_daN7>UiDpDDTPMOqb6;7O%X! z8;`ttvhpau`8Hdn>U9~Wn{b))xF4o3tdz+IanGB&U+Wyq8~RV6hcvqv@V~Wjm{`Sy_`s*_6qMP|Kcg_m|=~(Y@|RSIP9^Zo(c@FW>(@t95El z#Z%_~{3vM=*qDcl9ty0qs?Lo7G$CFg$RejPvDNwO>)%fmRw^WPD`R&vbuCJG^x9|a z7aEXX2^>>!qt4TaDV@Fs?27%ozIaPS(yiO7xPlo(9a^}*(vFuUSeNXvASdtm!QuCF z@4N9*Q+9ZcZ}f@pT!yaXROMuEwm2rdy#@20g%YCw&`XD`{#VEK7jy(6q1=}SKdAe; zHF$7%o!UDDYq^dzsKfZ;v%sC+B#j>>)I3ESi6Vm44v=g9z=q+wmGDM3T4~G%@m77C zdb(Xi&aLD%iMjn1I~;5&G=``aVmLAGkX3Txj6Ojz1*c`Sq}qHs%;kPFX61h9)kcbo z47vQdGucUQDrDBJBtO-`M9A{yh+YuV7r~wv26^(+!K0U7sa@a=!do^h2KRZLKfpvhu-?N5s>qtFS^G_ zr{I){M`t0`wOQ>13CEuh6Ak)N$|Wh}WUjf*&WS(e@?_9^_0Tljp2|f`;LX?G56X6Z z7p zgqIZ3j#K3X4b_0)zuABS`*^D-_Pa{Gzqk10nBZ!It;JC6a@_o@%bUDAO9CW1^=Z0< z3k}TTMso!9wdvqZBX={I3n`*5%jC06RYmV7?z>JxM>OCYVtnGjI_lduq3{Qc2Hmlq zkEs=;TL`MW)Iza$r)aCq$l&+{wIy~X%|C7Swie>8ZVWD9sZg3Hs++o6&U;Jtc^%u2 zLOePEDoF*In>os=q2jy3-5&uQmQ{$1DD6tx8a+al(Iv>$xat&Q<7q2hIuno7sZz8<<^yYlBj98ut0DY zJ{5zi*nzMpr)9$1SvK}YTgM{rx->@YpElK*dQiTAUWM;0Lq<=7oBV=kZZHGX6OGP4 z<2mbn5@r852(SZvz76vRW_k3pj`^d6qea?*lzq>O?T;?*`%@1CjkVKf&1?-ZK!4W9 zRltOOegf_g|7;F`20lLldxn2+6P}-d4Ffb#j7S0?(w?`xvm!W9&xH;GYT&Yi zuTjGcRL>?xNIt{(?vt=c1*CAz1`MV3tUnK6E*fQqIzuVnhrx(hop50H69ynR0$mmN zryCXjcAg+}D5#j8%W$e-Jm`S!HmI(w|8k_TGWg;Zo3oJ{j*j&Z`pWBw98cT5`jE*Z zw_LWJGNnX3y;QTsfe<)E0(wQJv5!Xy=_StL?8W4I>O=VHsOj?>#=lC%0*;v*gqhn} zSy1WH)Vx*Hz058_D}k(PDk7LHzQcu zJGCdR6Wv;*Xl5y;d-?}0a#WZ&>7L#%7%!K9)Kpm#gBBWFQtChYSeRuGzL#O2(8NTp zJ8kba9|1mu;%WXe+9%j!Fnk= zBFnIO#v^b5fXb=` zV1Tnv9nSq^d&msER(&{#!f1aOqJl{Jo(>E%#`Mr86;-*_>|v)A{O{~wr3weFd7@Q`s8Eb9`yKCHJ_dZ6B6r0x7ICs_xPi+NmA@;J5PybEIfHm zy1OEY%l#cU(4KedOZry3yD3hmk+A+2u^Vsse1W+u&Jt{wNZ>?d%(7!SZP=v3EWbhM z+ZShs){kp*g7|eqcrwwT{$L=E6@It>V%(i_h?8 zH6tVT;i88s8uj5~6h@zimr_=g(ED)q7WGSNOl zS20}X19L|AEiqu>m9ai6m(!V-E+1uks1r*+(m!S4(TmEa{1DQNP`O(9uvQVNe9fe< z-E3m;GP;L#!HAy)XRZ;fs1%*t)WAns8q^iTb0MKzRmZ`2L|Wh^ z^X2!q%6cFE&Th7$0E7r)j{jKT%gHY|j-=IPVNqzJL~oPnrWT>>qBm73 z0g$s?VeNtjJK(Ea4cgZl5QYI&w_i+`r8rPcZ|QMrH6Xb&qq1LLIJ_U~W|batZKmux zcNwvr7oRD6|6&U{?K;T*L@PWs(t-22LX2Hy~1y-mW%a9!+6RSo)5Rn z%M&20)u)L(spGaMPhoTdME}dR5|`!*QK5`ve;9{c^AAq!s$|vEEC{MrKWlcM0l=Ua zq1&*fiGq`!e&s}xAeDZZ^6`B}S9F z@ggY@R(%ej4Hnp{r9BP<(HkAh|747-^q`hdEm6<1pd<>7r%{VxcW`n#`|Rx+;`(au zAd~$!xM6^Nf}w@^h1GYfmgmgA0GS0b$l!QA!+UjBTP|_-(WkDXF|&>wfL8hJRaArE z^qlFve5r6R?PK_NPpGryKf}Vc_?L7Vgs_^3m9L|2NQ%t{K#O-khi7jpoFK$R6(o7f z_a?vwHj5ON!Ku0pTNrSDEYBA`N!ScxJ;BMN440aq++R;76EM+~BX<3Z?iI*1!v6={ zOS*0uhse1ZF`DqU(Rn@OeO&g5@l1&Z)f1OZC#O3AlNOjmsgUQ5)aPPAS&OQt0}DBg zlI%n(c`elSAW_voi-J|!YbvLV)RHe66b3stIoTDVRYt<;n`mzj@qeM2`QhB5W3MQT zDY^HsZiPU9BAU^>`Jigh-xKXkc2$VyudJYR8??kZF~khwZ#A2k6K0mA>DEQk>2d&h z$U0o-c&2y0{d^+$RWAI?;5Gd57zQ%6O8(yzYII4!#!J}q*S@bqlD~F6l)^W;jP&1a zhnRB_XcV$v`_O`+39^N$UqX#xa9Bs_Mk9y7&bj_tAARKH;!WL>{2fbH9P1B(hrd{Y zEfS#6qyJI>e#6u3k4mY0oc0i*?Evwo)OfBu)Y~;b+l|1tmWUt58HY0oagl2_iD1z2 zKKr@CX?EI;!!?A$!dZL~a1JvpRft~4Q2VZfY>q_zHk?dDM>a32me)ytKGHP=#@0`` zcg$j-kqv!#fD%Xg#5s#eof>P+1*@TD4Bk@P<6@fX>F(B_JEdhTu%a^>lAIG^E4e55 zX&i1VDuHF;^Up4RM1}?UbTy1NGL5ff+>wHxvubj5w0odhIw%L%hY?}=RgQuYJA=!@ z&>WGOk+P5zJ`=-ds6iZ5f)*R)ifg06@fcRXG|-14bRdD-qj%f7#uW~k2u4{dxvf_I2Y=i>}bCf=oNIFY?D(?EO3$*NwW+w5e z{-+zR474}-0-f)W`q$+sgqW)Iarm8!&0n^(9M&#m%7`xom)&lIQr}D!=dLI)3qYF) z;8j!zapMU$jvXm_X9&NOUL(Wv-!Y4A!W>beO3!IEoy-rw@%B{^EHqMLvBcqe0|nck z(^np)=v8k6@%Lx=`K%R3mm0|wpoPftxjcm8nJDm~O{5@XS@LlVT{Sf2&5FtJBBnyF zFbdyed`s@tQSIVW+@K~u zn2s*_$pr@YE00OWx)4LxkbsoFsWN*=uFVIHIXZ{&G_pq47&?>YU%IygD=srKdA6d+ z+KRkggcGR4b9$L%)7FX;=Ga(E8dgw|tY(sC6Tu0pMr(9NHYx~ARuii>7?6zfgpbb#dQQGW%`5t|haRSm@qN`mcUxJVTXtXE$l zvtW_LBgG5yl;rSiexq&7OjHg;>|j=b`b6Btpd*|m#;K3lF@aqDYG6->hi>{cxIcp6 z^Sj_Mt+C=Fyf`qb$QH&%s7Eqmji0l`p2_HY(aw0{=79WxvM^?8k#RU?XA+6V82=S4 zMBFla-%wj);=}@fA2j&e4wp?KT?6u0-*|HM<8dHSZi9mOB*F#?@g35_V!HTP4FTbK z(qLgmp|?XMoEkeeMD|}?vBaFP1U||3Q1}EUn8m_#;+VxqQ7COU%8v~Os0svfSo^U= zy$txs0+N1JXU2M{yh|&k&|1(wnM8 zuXYsv=}u2rqrx z{civ@?J^&L+S^LdG8s~9a!I8~ENj@t^JEflnx!36DAjwvV6;7yd@zuQl5k8*_%i@{ zc_f`D)rbA4e&h9vH4d}6)lizU)fn~stBYA(dK7-S)KjDT#{IHSB_%L^N;$`Y@W%D5 zVz|D?^y=sK$b}MuPgP2EHXGCW8(tbM8pY&Sh#oyI6>==tkL;SEWQnuIDVLn~VFEDKhCRm>VyvEXt&q)Rf3~5&xc5xx>&I8@O z+(T(KhAo0pb2CgBvmkDr?z+iKmtvwWOht4U+iw2(NVl<2{LR6|DcL)nQKd~i_~{b4{mR$odsJR*vIm<%goHuAf^BK046M0g6- zRTmMosMpM$j_r<$_z(~kJA4)T$8eP*{@nx3Af!IZk66OKU*D1SpCi4b)!}Da(yVH) z(w~fpI8bq@lj3odJS?^YJ=5C?GFCIv@Kr{&&Q9RAR%+XQ6rKvLifd>0W;sIqagvbc zd!%Yjx+uMtYo;WY>#ZXXl@Nls>93Ah$E4u}FTc_F2FWEZ>it(<3QaXBVnye8#<-8D z7*!$z!Q!n$`G+p*xfp&%C0%GS=p3145rVdYQqyp1FGST8V?D$E5xk^)=X_rApsO2}yG zbdU<=fmpN&PjxXoOaQgZbh|6%og!q`3*r-RrRco}z=64bmV{64noio4SDJ`M5W83P z6v5kC8PkJGl%icqn!xqXV$cmQP#^#DgSg#KuF$Lg4i=Y&)6tup0THqi|~{y(_Y%b978g z-UV*bwlPzbW-|^dCgFPSV5a_rzY??!Ok@ZvhGlO6-H)3HHjkNf!jMmu>Z|pvF{OW! z$Cve+U8N1P@OwQBVg0b*DDFq-^UBLv5E_%{EjMwrcN7Wc9`TzNVq(KJ4lLh({g@=^ zoxF6hl=EzO(U*l4Iqs9#twy0`NJz*h)qilxZkz_}VFYEd1DPxZ3~6vos6t{ny*cZ} zLaUzh3wC$T{W7q(2hh*J}~3x!hL#@=)_4}zG1yYn(G8C zlnS-4V4)4(%ugwGN6gDh5+i0USR{lQu(sC@H$^mRc{B9gA^(EayY?4kz)b1TL8NGa zy&B|v^*|Y=WQqsl7O;7)0y*(S@la4=qKctobu>YnP|4VdEqd9k9=O*H68@oEJoW%r zBC7opWc-mU=aU9k42wb+`9&!7qqXjYC?DPS>kSdc{YH5JoN8^cL-86uZT0Ovx^3V- zwG^AV@hNKJ=K{(b74hG$cb0mLG|dMtmHCUJ-lnsXy3+B6gqD-!Q*d-FiAu-kUMBo121QD%Tcm~zP&u;(@ z+eM|&z{Zd9`6z-y?1(!WJk;-T3pDLPZu;(-)NimEIMA9qH^sBs!#7ozZ_Z-7l zIhm#SG6Pyf|Kdi9>VGI~xpiYCe^XxnC9&NtJ{01TW=6_}(t3GbKuUsidFL$X6fMW9 zqrA89_)Q#^H70eRWH>t*V=PGppIT7d#j7J!#)qK;%I!Ow;jm+$J6Z92q&}LL^SWb+ zN){A8-gu%4TzXKX2Ey4C*dM+81c&i0#pW(o#NEg-s{=Y6qc#GhK{aHRde!ZsFzMA) z-o1*L`J$VweF6m|`Q8>)_U~u2c^93e-ttDj6o3*4aMWBC2ikSVNL&#OwCk?qm+wn* zoeE34iYyBEit4_y6M(`NV?@Z=Kj+mBMw^G9xvj5jjNJM-w{GPwkTVCbgALvtZg8D(LN+7z~c)nc>^{F@_8 zM;RpUSL!skyz`n_nx6rf&xpGV1byb@hzKkzImzowz)oADHQ)PVds(&TfZvK?UzSd*A&bD{2)?wD@ zT%9KDfn~G$oRL9vF6i#{S11RB5(DX^Bs%311Pn~HFGDy;fSE?p`oAy{16W=M))q7B z&Vb012?dPtBDjAn*Cx3$q0Uqc^M=U)?Wnwuk>4`#1is^d+3 z;{DcFLc+=n-x#v@%S(v zcAThe(LMQ@a^kiuu*jo^kP(+^zw$;OYL8O2d1#QG8h3@yK;s z^>X18MJ;id0GaikC%m(wpDD*Pg4gXSBY@yV^MJnQDu%P*N~cv)zGe}IQ#A}!QM$@* zmg(+e$FD_~!UVc>z+w-6l|Byyxj?Qv7)5h>%SV04!z^SsRKb7C;RnhwQd{pSU%0)@ z0ZddktH~CUpbenboLlLymKV1g$ESKqz>USH>pM=YhFP*XBtG&=Kvc{LchN}6jw&bw zLjwZD-YDts$$q07Y#F`}6M@cBft(NV$r9l)jRSEn%!uVUe^Om2v&I8p(7q?*9?oIm zgFreFpkDS#ee1gPLmm+jn1$YYmdQ?NtrgwesB#vkmf6P&-wE0Gz2#-DY7nQ(aCBZ@QO~=fVF80BtJ&xh5QI~(+I6-!@S{}(QkK$S(|^gMEZVMqs{dqR3z*unfGw<6RPs#0U!BQ9s%WSFDu+r zyR0^d*b>KNDy``|6SZ7k9D=}F9K~-MOe+K?olSQu28mV&8B2Kb$!$Pfa3%e5)IZ`nL#oS0y+bwFtvtM$h-oy$;r4T?P!Iu?htM zO5Hp2r0r9Z9%j<0a9|TP5NnLFgcMNvBP=cynZ=2K-r$H<`QYDS(m7VjlpL?D>z|h}aGkRdh<&rm9Bq&y_F$ zh!+$ME+&OhvE2^z2Vo+ncnei^h7JdGnNYaCS8GOLaL@5I=*050&~IJ#8-vx?kekpa zLk*vOgTZK&I6mRc4iI5LF6wpH=mYM^dN2uWsK`fBD+mZ3@Jzn>P^xb9ECdmK^wH<~ z07=#jxbZ}#X%e2pct`{@)nQqG&p4n1=G}n*dD*fSBL}YqkygZ$Moo*mLRnDL*u-RDF=U@*PBq3tI_YkLPhb0T^r89lqtMC|{B|Nh?vsv>_?QMvemsu^OK zXGrgsZDd68_>`czt&65x7?KyiNyF4dOSp+S%uJY-6v=!M=|v+cq$E#(N_Y#q|)B=n@zFusrv{A7Zwj{Ll8}B?3JlDWkqj5!7QZ_EI>Xj zXd_Q5fayjQ3a~H(_g(drF=2H@`P`lhEZ>~&w%5W@UUL@QY0NJ3I&UlD_d|;wAVVqG z9$4NW)wV|Mn`mQoh&+60a&4GSnQuV=Q+W$-WX-{uYyXN$^~McF^IHw&J~r2I*pblO zDRDyxPrKRsimQ~-a)(Fv#gomwTIZX4pbh%3pUGO$3#_Zz+ZqyIIYqwlDm=(CO_vjR zNhE|nP9L*yP2Kz1bU6FhJ8rA`a@I%?-E&x!kj>Gj41OEQ8~gxQK^%>v%D&^9!y>6h1)=12g*m+ z46ek63^t95JRG#zX7*S|LA~GO_z1DXS(NJyc**|N8z$U>7`!(y8sByG{n`oFuAGk% zlDE(T=a}~;jDL1yF|ex?4Ro=U9PcowP20TX)*GOm)_F{<-(pi~Q9tH^S;z34X4zi2?Uz46JUqt5#Il?T*)1 z-eoGz+vw(xaXe9`%liBhVF3a&#!>pr`c6`64{1U6R~s(L6K{UNq6i9r6|MN}RPs9m z{M;G$jEz}MbIMT5Ywlc2S7V7J$fVkRT(y$I;+C^AmkZe<3)Cyh$~=`0Q;I+Y)2U12 z-|2B?gby&AcnI@gEbA@ag4y@izscFGogN?`HV9yw5_iGA6L0rfY-F_h(4?b#(;W`# z^HbFHIzBSKax2R|!So{m&}x0k(i&8JLeMvw_TJ@)fEjl_7nDM(-EV#yex8Yv!Cpbw z@U5(JjxG@}K?e2YjFsfuMAJ&BTj2upvn~QRe1?QV<>yV6b4NS53EDF~I_LuSB|DlW zK-;aSy&2*C{I>`o%>{$L^uNA~x#)R)cX1fDkGN^uage2CLJPkW+7r1$=2+)$qva%Z z@X_4PPyB}z#^y}D{Nfj66;EGS=?tOsXKrvT1QtO`x+rg$27s>|xkmuynTGxOEl_G_ zz5Kf=2H^GIRq=fHKQ2L-Huy~}{-xnl`ps*%-4^=vLAcmJ*{sSpUq9gRrN_=K{q8wj zVM>hZm@_*F9v6?&0@}(1#`1xEnZz6Ps}$&H%GYN8@|r|Y2)563?4f>me+B_~`{tRU zK8w9T4|v@hu$~zRB>sP&K*2k#Vfrn7)84HWfqS2r;~gd6o7socOSs}?Rbp&YhCY!Q zbEWTdOW8 zW2&RDAJV#nXDPpZptC*S-Jz&Q2}f1|7zEY$z#!duH{I7Bmv$Mt&5qTHA%hP1n7!8H`PKY z6g}I0AYP6~aPQM?@f3t4WqB`tIFn*|+K$R8*`5#wHKwrvYXlz({Y!I`c2t@C^*GQG znmriUqq!Q$%08NNMdPaABiB{JiHx1zQM8@+7u*m@aKk#MA}!TBK2Ppd@tg36qlC_! zNFD`A@bTS`l<;GzwM{h~B*b?q3}+5VR!w(ac|QwmwiJV|D8SjWRCh1gps8DvzMzfE zY!V-L!WpkkR~ySw9ZVHYW(5(r-fShJ5^y{Be!;bkyZZ2{S3H1#$JJzwJW-n@;A+W< zuo1gStz3s~*?9vB;oVq+-3}Picz(Rn*4+Fx1)vgp0_^((cNTR^`2-B?_$WY_0Cj*; zzH}C9+(F%nC$s(M*Mz*02F6*G&FXfmu-IFd)%Jm0)U@@cZ@QF z+vT@q(_!GK-3Z5z(u8E(PKi!#v9v{~6-$fgvgW2!-@JWL>pAun<>k)hZD+=jJOB2Y z$miwgoK0%Zt!2;A7gX;)I8sx|W940xyo`L8eKL0ZF8MoC8zC;Y;@4GGj4Yb67758- zX?GE7i2eMuE6J3rZ7)k%I{z8fP|G(Lz!LNctBZcgIxf+L(? zeON`{6AnQ2GGLn*){im%5sz`H+|wTwoqP~x*c!*pXIgvhPf8W-wB{?qCT1f@oT{cc zc^I?M{XI*I8Z#^R>!5*lu&NMcDb<^v9-$ez;N?)(O-Mr$dvz$6Ys<*Z)`ORu^!M(^ zC*C_x88g+=IbjztsL{Z&fqmnPG;QWf={14NfbO%p*Id3aPn??!H|+N3!W=z)i37Q? zO9LUTmlrS&_m|@_ zaX}hc0WXF6BS9%c){$Dr>(K>$X}qk31|b5fku{!+``Y8vQ)-~WO}VT=xP8mQ_9kna zfk@9Hasp5{dh~wgH_^}d>@l4y=MAE8d_bTL>En(GRoiivSl;ieh&^I*kgjLx%-5EW z-{G6aF^wdKi_6>MQ!=hMzn#-QOLtNt>KLbR5N)!9#%T||6UWZIuHBtFBaRt?TPLcp zlw#1-uSH!QSo}o|RjZ@h&aHK(jHNKn;d=J-rZ|&k@76S@#~0*_gQ`6VD&WaG(B0A1 zMMk>IGOFiwEYD@%qA~YAEJLHU7?DKzK!P@$+Y(eyeAr?C&$m zXry^AAMbE^*#1@&=+={Un!Ys^@kOMa%lX9CDz<$SoDp-;-Nsb0)a}`+5XMM8-W=;~ zGmX~_UB#IF!_KoY2SP+?n*?7Ia=dU5&v%3X2jHXisPBSHH>fld9;L7!!YBB~BWFiV z$Elhdmc)U;^PFmTp_*QHR#m%kW@agDvLUg#acO~q0b^8Terew7=;;v>tt4D%4G_U) z`jGwH)Eim9h+(k_6PQfbMzwG#CYWQ6`lhY^v;I+QNBgApRL!|;J#G6W zvvhN1v3_ft>5}|0`Ll}q4}!C9YBr?1wtkW|9<74wWUtRwjVPjP3NQq+ljqLOKKHo8qzRuo#UB1U1 zQ-zAnugwiA0=YCmb#ZaN>b5zTQu$)xA#Y@F))#o(>-&#UabEDfWm4l!RTXJVs;`ZD zQ}shKG;GMvR>u6^(G}hAqjnq~=)2IQ7kZ42$*4zl8S6vQLbJ1hC{7Ck2=fEbr%csS z2Xq(TvE>#i{VMG2E%vq0dPPEP6wc1qaN&R7lLUY1gO4`1?mKHTs5hx4jF(hdqVnPz z`|jm1`Dl@TEEjE~ps8JQ{n;py7Zp2PBq&@xMfatwX`yX&%Gde)rq9tf;|H~nquvNL zU$W*Hb>7}19PFKiZ>263QaQJ7ug?kZ3uqF#@S@EXIj}ZU$h$<&N_PXRXg1~On|K%Z zR7-op6hlGrUa<_(^pu&Q4{sxD%R*z;vhSjhSWR7~htfEItv^L~gfya@yboV2?5L+C z1{*yQ^AI|QM$DuY7=gI&m?7W1RGDc;Z=#;(BQuQeSs3=rr&4%i`0jd2eDGf2*RcZc zWxuoIaW>^8QX~#H`9~xTevHwcTdL&TabkVoAfn5&+5lHdN6YvL=+M_7?TNtK+fFb2 zsIsv=Rg3k8KIrAgm0l4En{iL#db)7r!JOtp3bM8M?%y9A>-yMNJmZRwE*Ajtx7N?= z2o?4;w}b}@^*{@yi>%_7#7uir^qTSZI^+M6M$pRnS9p4=PB}j>2d_ zYqID$#>Q-%0|g}0wLiF>#=Ao>7bI1SFMuOGi5l5L0&?dw0baFUS0FZx zDt||#!#*C~MC3XeJ`TMOx6_e!rnRmd-vjf7U7LuQrTsm(7yBxQ!U#HL+ZR!I z4A5`@*QidT{cf|%8D$W16;;C9|CIbq!(5diau~E=`ySog!11o}Mmy^wFQMG9;6AaB#TS%OuEt7xYsrnDiI}%r1YucTS5{W!jAoUUUi~Rg+%?8^% zbA%8R4YA<#UGIT61^t5YM*_J!&2Sx!N6ht#Of-CK6+s;cV9P0D zEeO2tQ;#C2XN<~E)}}E8iZLr1=~p46G@!}14z@fkAxENutQREg+Y!+sosa@Zq>5By zV;=AGAB;*Bsp?>aMe7#kPAIhzt7X3JCmCv!r6HH`HMI1-vLIrRLnk2^)+y+k8lZ79 znh6AhyhRO9BM%1@_nQLqdA=gPNPTU%0mnJpjmn>NrZ+6oq*1IKn)4IN-Bkm}Ni^^k zF3HlyTY#nK3x36yFpO2-T}}TEE~W|^g#LCFHBFgU2ECgH0WVUTwChs~=-^0sau^DX zZJe}O03syz@+l~^pA!Qz3AV@2_l&q3!}n8?Rg}| z4n$(Rex1lN%QfZ2sCW~LaJWye1hv_JIeh?Qbi=uRbQNA;Tp`H?!~zs_gTEwx+I}N; zB^A9g5pyP+PC>A?$a{-gZ!B{3z`+0tQxgo2BHO7-fC6Vb(3cjvf@x;1Vpm~3)a39IUut|n>=c?UYLk= zd(=4HrB{WBL|8fID;ib-(SVq3A54|_$TJZtCx;Z=ww@Ya`o!Wu#cuwG8r$P_(}HYN zJkTZ<9S;J@4*BA0GRUV3S;z9n@1HtWXEUasvuwsG!1V@)Qif+bT;1ND_I9Gm;n(BD zSoQBo%B_1OY<)Wm865VMa|>*sP?-~DJg4@lCk?4dm3Kg|m-tsNX0SOty%P-rt0!r$ zEa8ZS$ivyzgME{E-8O`X>_YIQ5}elxOS3Qb+*&RoYL9bl6kY)gs6(NMZ}Nx*)dZI- zfW5v)Q8YFaRJPVsjN2g^Yn4sj{x4>Wy)<3-b@|8`&(F;0bwn?aHKEoNIyM9&Lw)35 zGS_FvG6auIzhAKg7;sI}1;;tohFWNR5CVOx>kGE?&Az-kSoIf(;x1wh-OK4iW?Ozy zyYcC0uC^;=7Err^$Ymu+Z-^V18o1I;UP773q-95s4brzA%m|xuCXz6bN#fT8$&1we z1~c)YENShH@Mzf3yZSJ_{s0HKlNk49y+rL0_R=`YkGM9x#{K#m#DgKqn zttH;Oc{gi;?fXrNbAG(Db(;|rR}!ozhp+Lg(=7gZcqE2NO^~~xb^cTO88=~gSPWngk}r`xmL8OD7}_LxkNzTB zutR`JdP+Q4SyDp4G%km8kCb5=yEJzUJ0`Wp8q8q75zwTTqrHmxF#un7;2>Pcj9SKC zLiOBv15Vo=j;CmfpA$-I%!h3^C`nCHM#_Xk)#hWqZ_^9ZbuC}=^mFFIH_rJ?hR-C zO4o0pF8Iu*C^^dSMj+dOv8MTaLJFYPZ12DR|JeHqsH(QEQM#q2OS-$IyGyzc-Q5UC zr*sJdQqm35C@Ce~-Q6Hk>N}u#)%(RA_x}GFZ;bZ_gLC#?XYaN5oNKPRX0Ca>s=+4_ zIGin>l#pP4+647r9M{`nS0;lm?Sk0(sQ&<&!P-yIwy&>`3x(m01$J~^x<_vbLITxvGZLh)OtijQ8tKVU)GJ;>d~H5t%jvhg6}U+vo% z@bEHzzY58eZ!kO~S%ndzwcx%#vRa_y!Sf+aBaQmSpoT`Yc#NkRb)YO{+ShqmWyJL~ zwR$_v13q9VW!AdIlE$ED7a3PmW5=r^pcL!h~3JjBp+ z_n0df8KQ~mn^h?A*-!}>F0Lwa$aVq*RU5saaL7ZIK;vYW^Hgf9Ew-JcCz>C74JbKN zLOEEhtxz2ZJhGJx?iOYodMHG^ZicRN#q`LvLgqE;dQ)8W+IUnE>x_jLLM3?_?5l0C z07ySOL1>3KZgL;z&IW;`1@zvL*;DN`@!DEZcJt;Gdz4RCVD5uu1-N>A@(>X@MV6yq zHOpu`Db=et(t2}oP5QO?N(^B6%jmU*X^`!T01UI`>j{M_D`8tK#^=NqBhfWG^zRX% zAJpluh(;gOxS%;>pp+)Rc%kyLIB8zhfaPmkKcnHQNLIvw&2V(IFNcZk84`0bx>Jo1 zNB8OYqbAB!2eD-^-L-R26ws_=fh5+K=BFzURt>KEvmNrTfL7aym(XNY2%qYbwVGob z7$A;NLSD6t8n*Vp>;oT0%#4~3hRDkO^}<{E!HM--i% zuaoCWZHD;T8kVy7Npim;TUPGeynU==j~uXis*oTTS5(rz05X9<^1BZBT4Yd2)F)>V z_^c7(`@!(!F6=4E4U*Tx)N%ZRf*+gQ_Dw!KB_Ajj+UX5^{B_eo5LTeMIgKO{Q8c&LHlL7Db6c8_OHz%O6H#T|%qX)&2OC1V z*{#oU#hOa!R2r3#Mc#e*N-rrtqu73u|7KHBpfw=MgGm5n8w`dFggDE1`-6j)(btoR zOJ!vGAug)u6%ep0%wn;9WxIChbsT?*iX1*kbo=1m92N8|B^|vG0Y&l(fsaenFRl@( z<*4g|^`ViI+cW*AK($5Cmi^o^hXXcf-#LrE>ae$9ron5NGbiL}uhSP0LTEcjW&mc< z9&-bHUoiqUc1QJ!Fk~nx{J|dhfxX$mCWFW9K>tv-6sQ{i?3uzd!VZR#cj9n8Y4IeJ z0?`DRTWIb@=<|7k-34<9&=C5qX$Kl+5-X&B!SGuG`#Z7-I1X^`m5~o0JQj6On<<(Y zd5;{sq%An7*<>c&BmwU|ta*|(nK&jCK%*=Gf;};e$~@FWU@RSm3muPUpnQ1|lX8Lx zSq?=zQdsPOy}+4sne2fE4w^SP|Ni+Juzqe0&8$KxQP2J((T=FSVMelIbfX>tqN6uT zIx=+{0yrC4YaTYW_#*GRM5${&tU_v_#ql48paqh6kM;4$V+0h&Fm0nvBSLW{gz+@5 zvRdN=R;$p5z#NfD#!M(5_n~T~m^~tOFogiIm+K|{syEW87%-**Q?Bch5V6l!FS5{y zgPqbHDKaJV#Yi^ZPNEIMOuzhUX+f{CQ}0!#ed|&HRsc{$VJ1HXC_YnFe7p;jvs+r% z^HuS29KX|6ENINBQ6Pnbil?ssIQP;Jgsmnh2vrQB7#96hY~jFxI10KpeZD}1UG}q? z1_Xej0Gc060g49Ntf~WLM-4n_sDce$R4=vcSrDnRXFb%ifDn`>nK3GTJ`_xjI+l@C zB`Z;6G<;|d3Kt8bcqkRM!z59N0`$-lA~I*7TQ=;Fy#)1>2c*;WxnNaZn{gDbeBRXu z;_LL#>a;AEjmytezy(FrMnk9%`|5@^1x_O6#o>e__SvH_%?Q@3>ICw6(DI9{+JF%y zBLT1o!z{#@ym92m3dn&6YlAH`k|;UR=u~rjMJt;TS3ITk@mZnuH7gs^3O|UdPKXls{@=B!IN4Bb4jzsBAv!9tH z!4Lyd?T0bwk=f&T4jUd6Igr7FAxB!ki69FufPvL|I!~lbV6#(n4 zP&V;?A{SKNpo(${S@B&nnV=S*1)FaO>OhvaHaJC&%8-as$7h?vLxz*ECj7u#J3}F2 zqY8b#Kdq#dI&Jxoz$PtRbVYn!0m?Q8JZKEJ4@7I5$be{R?z)5W;%G>->H~#R!m{8K zl$t(1>npgf&&)uti@bBEogmr@JFbtCj+^w~UYj47BvBjlGts(Nf94EuSZDxU7T}XUFjRc)YG{8;AV>%Uv0s zTZGE1Id$v(#P_vsk=If$T2ORTq<32hnZ?!(jC{%pG}2-)#CAefnoQ`tRd8qPG z0l~^7iRPqN-t2Eo)H$FWpfh>A@zQ*5BeUNt>XH(*&yhsSt{0h2T3_Q_ThfTX9rl70 zbk=*!<>+v2%V}N}Jh!Gsa`_5oYDH8aj80d*soX7w1+1Z^n|Gu&7P(?-0ux81jvIqP zBs_k#}Z4z5W88f%l{$C**5ZoxKrl6m=($#c+F4U4_cN-0(CB`=baDy+?FB$0IAR;;(nXY~N zVYE5y#_|D!JeP;iU){E;xPir0Pm3p@fR;8UdW-j_kV79MxjvMBc|9%6F!R>)?PbYe zBG8JL!FBMpO`BtPA_Erhv8WetaZSdWy4s7sq*5=!hZc?~5q=u4;cVmc^)RPaf4X-! zyzsGntl|zI>FHsjEyZM{O+d7WckQ&>@M8*kWo_@Ah(XxwBn%wv)vTNq(fJ|a(Il_D z{7>Qd7q$zv>CfOLtELRyJ!Y9P3&t6YR<@`8;UMK!v*Ll)-!u)|PXu$Iv~N~Abc@g7 z$1QO&3mRhHvx!C6fUBY(S!lZzIE4o>JUj2c zNYBvDzJ}70e!5G%(J|tFY)~+ti&C z$`WhDlgR}S8?BA3^W$*Ha9bW#JHpus%-rf0iCmnnIig8k?jw`06Dqvyt6L=q66b=@hoz zM26&(E$d2KpZQ3qw~g1)FMus&y5&pb$Jqo88~y!tBEtnFa0_Gp(yLixbrQL%@;!S} z1&DardMKAF>DYDFPu#xDXboEXZbD^m)n>z+D2%w?n!A^JCm6iX(@o@iMHMHjt`M=_ zX3@VjN=>ri1?Awkz2;lr-oJYJVtL75jB=Fl^Nv@Ezr{H5L18tAl1Thvbdn6 zsK|D7|By$DMoOkcSt?cwIPUdkqWQptl-OtBypd+W7y>RgEX+3t=Qh?vuw|r)Q5B7% zeeMUl>y%Aikhk3On^o3r9uDQe^ZIO2iDoqmqRwo4Vfd zS*0Qo1V0x(30t(57Q4-U{N5IWsVaLU+ za}3v?q1DoEmMpv(Bf{-Q!I&4m=+R>uyoa!l!-dM+7JjPQWCIEqq`^FJUnjm~qHnWD z$$(%^Us3VnWTQ92n|t@jr74M_qb56egMEky3p4$TthsM|B5m#M%Rd*Wguu%O9_HQF z_56RnwO*SMFw-Zd4^8N+P48eDg_y|LhJO}aTVHRiZiNgKI_;MQO{L&-s*UafbZjAF z$(96~+30yxfMsX@pKtxJ-X?V$75MEBE&>>!S&V*i7l7&LyvHudDihU%}UZTRQV@&~FLhr_z~s!Lq**2j{m< zYyW2S?*Au_|C_6^{#)X>8}#3a<95H|--+YN=2D13uDdZSkM_0Ya>7G;IjV<}pSaFEZLUyKJ4BsE&B(#Xa1BSjE5U%p_;Iot-H zk1Ncl?e-8~h_ANUMw=fwYf>9K%UK)c;OV=LRW;gG5|hT(C^8F8(!lE9PI=7_*p`(S z)qU{Q?v=F-G^TmKT-(&rz7o0d0=@QH$mnvOW>$TmD zxftAYc>xF>R@NsCau_#L)C_QFi+)nO6|~b6epxXz>`V{M7!|w3;5U1i>xUn@Na`vG zwIjan2j+?MFGzd{m~zvVXqKeU>iL43a%y=(QWrw)Cn|tA_6#~GtalYzXAagm%)YIl z6OOVE)wfq<7t+8E@FEoiIUAH9N>*1L|6O3GTN^nG%%A~VK7v??S0^HtumXU4^&Mp$ zDv4l|HyPXW_Ltdbl7EV&+l|BJNIJT)_F0F5|u@CjvAvu^tdRo&R3;-zZDB#*!@lkP*> zd=3^RLDRD1lCXyEhby%;wbKY5sUKKzCiYUu31?G9- z{KB*nzyJc4{@CvtaIBL}+gRdj=xU9?EfRIfA9lD3e{93xcLQOAQ(qA24@mM~g2tY# z5y7GmG4ihhQGT-`Bpb`)=hNq<9mm?dnXxT5dst2cipcX$CxoAo2_k+dNSTx#>|D93^OKhAHXVdi*%_LKr&%ml{wB7<@}4$%BJWKq zPN6)#PLd7^y-rQ~ZX9_FM+5`LQIbMl@X2qaeweQv-KGP^fo^ z@-PxT4F>0v`%nzd&GAr_+bIqmcR5Pc!AimL2kE9u?L!Y~(;;btBIQzr%L;Tc3Bg_4 zOazR5%r<;fzt(X_mZX(#^8LO_!6fTO^XQSL zZPig(*IKjJVvcf85W||-PoP!0P~=9>Xg?#^aW<{L_AhNSJfo<;;p$AIxCR z&i!z-RJJxHrUCG;U-x*}cjdvz5-_a13SE>pJZdN;6`Gs3Q{)g$P5$u^@Q8IrK$!kMIj*Si9@kpVNCdZ#nxdw`XEyWxf|FIe#v#{Z}dq zaDLm>9=NCfU4o7y5$E@v`DKlb%mG5SZg5(+`8n)N%tRbq%)rh61#N6>oq(5plSu!l zC~()&{o?aKT2VmM%}M-;6EM5zuB?E#BQp{6_l^CFIBBt+v0c#Ji z6LH>M1P3fca9@+)_Ih=B0}ErrZ`BGUt$|m4ON08QM!+4Mw_s@zaeYfv;`%0Taeb>1 z!1WDXT;G=2ALRhn zb5k>?yTkvOW5x9y)cYJOC1YSNmbr`ZooHunZS3S=Zg`(<#q~Ya>+fV+8S1~{(>FAf zmXjkN(SBusgapjww7L2EHRBbAQ76PW5=E!FKY9{$Oy{y797>bdH9O;6v_GN-llDuO zFy8}7Sy{3XY`gdVX%VqJk*6 z|GT2Eq5d;)8%s{Kj-}F+)F@JrH3H2&Fia4~Ml!(D$~pyjfQK(@w-70Pw-B-`$`Elr zBTiB)0Vxe)9Ha#UsJ&oYcxI_1xI=53-Fv?a1RG>}5G`mfoGbc+Zn|mV(emWXsjd-EcEeTMZ`o`0zQ0i&&m-r!;+q6i{m=O z&$jn%5Z9*{eFxX7k6&Z*`;tgLWHA<9f1USQTBN@p0WoRN=<_G!udDC4%s=$B)4t4j zhj|>hrJ}eM4;v6_))>g+s~$~n1Q*~lzU+g=P63VWoo0z{=Bx+e709JfCkfqc%L^h* z0#0hf?*Zlo40mOM>uzZ>D~Ty{jAHiqvUx=auN`KyEF(z#WaAtm%E*B%ixxY3F~F)7 z3^f|s=@lHSFFhj|t^NbNXDoK$3q&9R&m@q+6T#^vz{~|8Dh2tbK;Q(Kra)c%E$l$X zd_9IB>-aW8`M|dVK02kCM%?P>x_Jk`xj;kEAXC?IN>zF==fi~f*vAbh58KY6@ZcqHVSw!1@h+E zbopaE81c5gB@wrWFQGBt%`QvTVelc=wqY*g9)ZvX>b1qe2z0}M4~wb8;2w(zMXQs7 zqCB#UAHTAEmEVo>T!o1=xFxhxq;-_6nYzcO8~CvkhA* zL@m-}MB}sF_6N)4$8Js33+RV_NUe@X22UTg!1>_$5G+O!cD<#DhSh|y^h0`-NJMHy zs*H>SvkCJ#0Huvp(Klb-i8u(^y+hl8sv>equt^e+TrLh>GKdsYiInO^wXd?I1+fk} zFM0E$xE^jJaR)370bTi0(hMR!GNf33g?LJGba^Q}QK4x$E~$C}cL8_dT%`y3He>3A z$qi|m^35V%QeF(=aV$xvNvl02aYZqf3A;(2Wb*NoNv=tH^cfU-k9?%QyuPUeQ*0Gz zed3#4u9_*fT;0YSC@Gqfm0%EJkYW&O;J?DwsYuoo>l<5(DqkS5T|PpV`v^y9G}nEk zu3EO5d&YQ%5nr4m=Xx}5yYq~2tN9Gpn9NvfopK#-9cR6&R|%?(QU8KP2|G6;E}}6a z>Xdb(esFbgmc7he_iGbX!X>p0_0t661d{~Ngs4Ip729$2@w7tgLisU93vvs9#k9rs zIDOIc!Ms7&^uaVe)~{pw6IIrg)girK^G94}Xp!4Gbsk5$_Zo7nc?F6ipJ9PEx1Us9FZ`_Plr#i8KS z$h>s$>fQ?6>H$5Ac4F1uj6=O#8QNL18HF2q&BqT^(6R)EV`L~DHB1_lBfrRel!zcr zCG*#Sud=9IFcmk>=vC}T**IHES+nWG?>X(c_GU9-b9FXtarqK-)5>;WiC7XiQK~&# zFXyV$+OYhwWjD&2$Xa6hs86i#xiRjdP1wSi;w#1S7Jaj-!;LPXdLhN-X1W0_M5|7# zhgSRZCRHUCvq{9d!ygU$R>D@~$>w5r7d5=pF6aBt1NNJ9&vUO`mt0_6=jOK?PSsx+ zXy{H4l`iR&toNT}ozym}?X{=^wCwef%%hB=s+sdEo2AMu#K-e?a&~-iqEa@RcRXwN z(`Me!PQG2V_8A3z4&DjPM}UskeIGc24pc&$f%O~VBbhq^kT zZ}I%9JIA~2weWcux&TR+zu$xNv)O0Ez11uVIC<*yLjID^;}?@A1`$RGf7l^+hC&t_HrP`ts&e!f;WBx9fGY zsX&923x27E{1&dOiF4~sqph`3SM$Tyd0`7hE&S)cpEIuw&)&yu@5x`tCuBV5 zcYO+bbK*vBZL+cWDd6<_Ur4LBV(6{3$_&&ff5@x1`pa!2umGK;u&@xo(b$NH>ziKp zL!qx|Kuc#9Jrl<44j>m>aq? zuyS#6vM~KIX16r=^O${Cmj4cnOl-F>vfqvwD;uz0;%_u~udV+#81Jn$f53RJtp0$} z$lTG;+0l{yH(InaH)LR8{sXq3=jZMCeOGY*4s7hK-$7$yV+J1m3AlTv^oxj9Dw#F8&gLHCPoh6KLfvmv6Hid4KD-0!O7gv z%Gi;?0bpZlOy}rqO=s_H?BGtvY(!^nZSCv?Ft9TI2^079{(VjYC)3}?1T)JmkGaJJ zD=X)pG4U6946sz`@0j?{Jm!B26F>6|Aa&ncGye`vFtdF}1T%2)`x8n0{Gk6t5`SV& zK+OKeoPL?G|5J##NB2ER`~w#DUna+2WMNEyVqteJ|NE2UXOg`oiGRTG{>$X}i~NrH zmIdF|)cwIG?ppr$G4b2d&HN7-=6{?VcOCx)e#!hNetFmOzmJID)_3NAz%N;u?qti` z<%13AQ{m+JW#zc*`LAH&PyCYkeggkk-+y5fKUN4cTW3dOItN<=17nAuR)pVHdFFp2 zrQPyD_Ph0w>-O_^5dR`41WK&GQ~iJDgg-$1eG&W@Dr@Mj(`| zEVtvz#&|2e0Ud?(Y`>1{Uu1eeylj6=^*_mNzl^J)t+RupF@vEQzz*nZaQvZI&;iwz zKS=}s0uijgBjO)$J79Pn5i<+pE%?B1u3r)G7kM4<_TNVRuI1lP@qdbdJ2JbUaX@wt zQ~_^afZ^{@0_UAn%XBN{0`+d-C&w+@`vnho-QPd%Kga~t0Q2;PBqhqBr1bzYWK<8);#FeoF9l-E*hfHImKM-^O z#P3Xj-wHD{}ZwNNi<~n&s_4y%s}%95Hokv3Amp8N-=+tg|hyMh2FLN z&ru8$oq>b1lQEr%EpU%nIwxS{!@tGPZ-Nu+KVYtGcWm{}qIJh-nVEm(GylN zPQR@%cP;-IJ&v|k&bQXUAME5#tN!(c#DLL1KiM9Y9h{B7k@>AH_S=s#!a~wdRA^+4 zZLDnRl#ETCtpE0enAU0xA#Rf?t5vS~#GQ6NrwV|886ETmRMZecNx}zw~tf+t2;p z9^bbA-u9<v-P(}>;#YXA^r4+4oUsEp7X;#Yed=BMZ%Ch}Zu zg^tPK<_H8`=V3=3?g~zJ*N4ikWJQEWVWDcO&trvUwK>Segd;M-Q-H3)j~?%2Z(P1U zJKW8@!k^bETPWL68Q(QokUq^r=A|MPXo@qHdnp`Gq7Q{ZLBWu`c~(0f4ucYVvdP0g zx;Syr>9Tgpg0Xo$8>A%UXCt4+%rv-2{z2U(Ee!t)`@WxXV*$(NBSP;j`PBl8uDza; z$p`ZlyapQ`q9vrGq?vgXYhCTLk z31Pm-VF~Jj@+;l&BIIC9F;WJPL~#5+Nx3EHVJh3Zx?cOGv%H=si?LYmF+3HDbzkpq zoD?Q3HP2Kkxx%)(VmN`ncxgc%P9(zf$?ik8K!NIVM_Dy~1z%R=V@hXM!40oo|Oi4|2x_n3lB3 zXV2x5L+vS2IcwC5EA3>BAW22NI#aMk1n+ufOvTFL*1aT%dQ%1EtpWGxFhS}Q_FNg- z;rxe~gM_wbp<|mT)lMAH2OgcT%`V=j$&K(6yi1ciT12p6x!{7e(OAxNFcU$+#b&)C zNIT_2_1S~wuw9en=vx*exOum9^$9TI47C{C>WWa>46?|4;rT%OvsQ@HN6;HOh|>6W z4ulpHyUSSFhW@442lR>UYI-v{Wmr$^RVlp8{TUM5HhEux;y&PA0`ou3FwZ?j;2Uk@ zf-=Q^NyRR0+O}LKctqttx^7q4L6T-*7uy<|YxlC10)fxO&dTzc^57DsKM4Y#fkN=j zPVrGDfdzklj0N^nJGZ7Y!3R$jC<#iBC4%3#1IpA_eT5Ma6aCAIYtQ)n!PW8HKn@?3 zeMVUL;P2&rgbA*!wKRyZ09e4dK=W@#Sa|b}0IJayJ7-?9ybr{7pHvsg_*{!Lx_mLSSD+mtHIQzIzU zb~j-Tl#ALV2`p0)Z))nH*fGOWCp>dxR{?QqbKOg>2<-Zv!Vii+31IsvPT)=~TTN;J zN)V+gvRRR&kgHLV&{F{q{KpYgnbb9m5>=TgncIDs)LWNS9D~kwB-969*`d&S8W&VY zw9-fe3cz(u6!f2wAz(18ztjK1)6BXEbLtiE#t?RT##koz($cqH_m~WdfjPNd|GYS6 zWX~a)jYTzu4b`Np4FQUQwABe}G**8H+^q%b1X~6W{a*isG??{8E2%*&IhQ`Mzc$n$ zQ!=9}g)HN{3mz<2y!6hlDpjl^@aioqng{@6N-GQC(FltqV_2&M6bTlB9$Y&Xk9A-s zLeLO|IgEcR8zUtK6e3I_l#4&87wyP1{jCga+K;9~NLrsyh~Tv}*rKr!yehJ7Ikw^e ziC5~cqU4V}*bKyMv*Q6l2pIz9hM{h6SZ zB=_r|7@D$fk!7Pqc<&*AYWBQ>_9tuv>7W;Y2Mw9`RxAVMtu3+1iuA=W%`$!k3swWG zj9_F$#}Zu(!pY?Z0_Fn4`z#BD6*L4kKWgJ)Nv{1@AH)-%r_@;7UTg6}o?B3~?gYyu zMFGZGxwGDU4(Nv{@z+n!&~=270A3Uu7k z+9kiFpy(zm*2yb)HaK$HAzHS?X-N?ENPzB5YCCsg!?H zIL8SeIWOmt?1B*#dwTH{6dQ7NNwiKRT%@)R*(RFVSAhP7+ z{KWtxXZ0yuN2?M1bmUV*WNaZ5VYo=XRCEc;&-|6pKCmO2l;R=}S#E(0sm((y1v>X5TLGII#}j4Kih`;6>?zhv}rs7anZkD`{C9mtJhPn*Jp)n_%jt6MbSu91~JbtgSM@tZ`w%6|< zmzEstKtraRtn_je)|8Ri6DM8VxUsOA3lLTG#KGZW%VPkVuyr=vF}nRs6;Yj9Cr$I{ z^|K4X0gDiVL|&f8hH_i=np#`A7|(0DF6Nrh)95eG+GRCxsKE;M$sYaZV%=Vzkv(Mx&s> z*@s<^=jdzU*Za4_4O8nam=%@OushX6Innz0oA zYdScGKpi1hgf&IarJg6Wc7q!vVJj~jzfqP@(J(UI@UkQ5mdXqw$$?oqPrtkirS;rL z9(xD_+@u7DsUtj*JyNVbWK^lP_ys#uK|E4aW6}=MtdLaT4znVxrFLIYo_|aly4Drb zYYHSl5eg*pLo!N+*j@I;qCQ8R4F5zLJf>He0O|fpo1R~RtYD+yO_AYv{f_m{Asas1 zW7b78|LRpIKN}S0huzAm^l}LvmkxdEERZr=)$HjA^s9o7eiH|Q~w&SN>^!k0UsA$X% zjHgeuVSH`Y8J1NTCYwsV201zPWYOon$5Wqhg3q%LH5c={*$~&mE^D-jsWH}LyJd@c z1c3cSKT2hwiEH5TU=f)6E- zh7T6;GDPz#uB|w8$L9)9134?y>z)l^T~=X%QdvB~Oq${vGIm@K-zU(;px@hA1)=gd zE8$eXLg{=UBHh?__$kH?j~EP=-f%u(;fNO1)^OfUqqQq!3Tw8UiI`oiIZDMZjgBG7_SnADv0+UyWuGez;9aUAAJ6#VTen8O(HGY$&!(Fi#@I9arP;RX z?h;7ufQFOPPWRJ<5@EyDqVT~Ca*clSR(!H#*+hY2*U(Hs->J$O^J>PAn~knMU+N3C zH=W5;Cu|h9XJQ4eunpQ1%hir+14?tsmTcGk>8eTguS^ufKg%9-UPq*9YY}NP2t^EL zrFO>-WC0pKb3Xy(Ww8{DKI*jGLe^%JOMEH27f~cCbxfM7NH!+mSw8O6Dmhbgd0}I} z<0*d5dl5zxVt_}Hh3gn;$2>Qi9^gr;0fz_+>6t8^n2Qj1S@I0dvR;Dv$SX|sm1Zz+ zFT_5v%!iL3o;y3k*qDwKFclP3Y&#KOnIuSF^;pTT2l7%;^!f|uIg!nK49C+CA5dx} zjD(X@gt8YEGb?cGx#hWgKX@S5(>J4jv3JZh=)-)BI=;TB0I0xi?$-eA|>r#x#=iQaHg!3 z-H4ef*v@r%H(lRs4sQDJm~XatX}z(bn|=c@mfIieBt!siMZt!QecH3}_6yehfrwPn zNllsRfi|%+9el8P2KYz$_mM=r&5Bvn#MMH^^h_mHst_;_jhqE?Euz5j zIu2gVP#T0e*^y0>$b?L>iO95uk7q+XO-QY$4*ekI4UYGIH)3c^iI9W*3$%s7;)0%= z)mEJ_+M-9l!S3mYq|mM-uBy|l#_3TY-|c_k$4G|}+g zI$5)!MKN`;erEAjRZy1?;nhYa9~4}3+7A{p_*h(}uq|fVSm4)%dNn^CeZ5YjR+e~9 zc+yc$v*)n@zxRdzpxo1mZ(bm2s3wMv1#y4Mev84!16t>ifu`TpUQlu`X(ukRI|TAO z5-EeAfDk_jB^UF=x^)juO(49a$N*F7=j^m>^%E24Ej88{!6f@OYlxNpP zR+XySwDcX1b#%jNeFaF5@vkTnXgk74p?u{m*Bosusq@f!FswKi1Ap;Feun)kzGPqQ@ zGO=H?WpY&KoGiZG8-ADODu>Q3;`s`fdxW#MIc%l8pnm)j+*^b+wv{op>mYQQFI(s( z4dUw@ngia=0G&>cWs=>!G%ISIo34vQHl=os4C_J^2Thyi28T-=p+KX4fBK$qgsHuO`yDRY=zq18%uGfbV3OmPr$zu*)j<+f_)1K6# z+i;tyDh}6SWn@v!rPc%u5S@JxvL594QfJha=(^SFFW;1RC=)9)~i6CjN$j$y$p{9ozZ500sX?}4g2IXfW*35R`Tpk z$yK{+<*td`<11RvZhEE7{lP=EU5;Y*1_@H&1?e8s91l-j)CQH- z3_goW7g?Ww>I&Gx2QcB3$3sAwOW_OViV5^NVMTQjY$Kxy8F}$f8`ysoZ|_il^(yF5 z(}HdMYp8?9A!a5#O7j=|lu!maPhWz6M6UyV<7Xi+8B|e}Sf;7=#$%d#v1HfZHS(qM zxasN61s%(-?Lu*e;zAEaPWt6aIE!gZLwAdf$%kbCGcZE&Vo~!$ z7Oq>PZ3>INqzkykOd#HUvCtI;#gTB+78_? z&%Fgr*$1;&rd4pZPeWHz;`(}DB}E^D^SR?1W6=a>K`?p4f}y{@0M;rur>EfyyM8U~ z2EABK>}rXuN#P2*Rjl3i!ql;)?s&s!h1Rt%=1yQf^ zOFiWram4DxeE2dFT}r5)Q>2*@!+2-a>SZNUlJ$lbia2MHE2id4BT3cfLFWbM1iuc> z4bBtKc?_4SKpPLYE~Jv#pztK0ZY%*ZVY<(+PpDU@udTPOkGL1lhCBTvhn6zni`0v+ zBZac{lzSm5>~`aOI#e3%=`#u3b^<$Ew)NzBNa>7XfXjWZ zCUi%~(UB_jj4o^V3b&CrkvE>RLL4WyR(%YeK5yulT$2nm&9t5ZQ%N-9TvpDZdUG+9 z3OA1h4Vlg%!%Ni4SE_F`{I@4;E6bAg_R#|ia(5?_N_F0P??1o(WV2A`id3q7)3iL2 z8#KsZ)BbsJaazSCoqTE60(!sOx*_p7hWK*boGH0yJK=S|rZ5>VoH+52-uV+AQ;bh3 zlD$f8AHPmndtBfsZEP==h<%+w8VZC)a;SCx92|FSBP?cI#r{jB{~*ioqf0zAS#JR?js zo*JWf3*eNS!8BL&TX5lzT`o?X`rMg5jkFmn?xVX)fbWQjxf^spE#nYiz;Zg52-YOY zuXYj7At7l)DIVt{7R9B?bk3^jP{q`?z>wyx+31~uDWPYU5lu&odjPIn$wtjGaVS=1 zUt3@_h9~KgBrXh3u3}9UAIn!T6H7^ky%rNw^x(;!57%ToeOkbqIb1%k28*>3Kl?)@ z?W#A&RWZ=7`F-5RViR1)UzB}4Sm~*F+&T6c|1lyVm)WaXN3(7|I*{|B)%Fwh|{2owp23Y~GDMvpaTn@_&vIOvKf+pevGMcc@z_b@@Sd}TjEI2BWwSeQg%J?AdfO_$wlCzH+} z5Q>(rZkeFzAu{N7A>gzTM)-cKy(Y2@CcXwEWMGysn=trbE4u}Aqe=7Wk^bg9!@<0$ ztG)QZd|mm)^0^M$=}`D7*TyoQX;?j$Yo6Pzp)OIVUm6@L1IYW>0(?Du6BvQWC0v9X zE22IWVADI z9c?mFj5ICH57;As^dwZxq;(6~RKVb6^JHUCR3XZM@QZO(wAT;DMR$$^>8u$g+HyF%Y-8=l%#$2td*TEiKsG}Bu`eab30BNH1Q|A_n^g(7;5ph# zj;;^`mF%ouYIYjEOx$Y=_yFT_b!~F`7~Ki_Q796djWx#JulZWy^U#s1pS`b#!S@6| zHeMH^ybBZ(lcpf6Df=Wbf!D@&Fqdu?ojr01rHU*YV{7IP(I7zqNq@X zaI-3_u8*1*LONAQsVc^cT8^G0H=4Z<%dW9_nJs2#N%*xc$#fy=_P;Y zBYoKM=>%T_Zdb-04n`8N}c%0RR6rV`Yh|6dwNJt9H%RP|*SeaPe#+l#ypW%Mg6< zAOF=OsT195(@umCbjTAJwVz20NOcjEP|1_xa!O6y2ZiB8837B47GCfUa!IT9M|%6& zXXE|NShLfD@zNnxG674(z-)lDdYmAZokMyJSTW1xYm32tZe}^Vw{+N>15uzkMj$u- z(PViKT*Psq=8_h)DwAJk=zntFvCPvmyy?RB3JRiv#1PkX9X?hWglWnO9vGQh-xnCm zSal4Ci4O@m$LWCxmmY(PJ4a)lW|c}G49l$jDz*ZLu=;^YlS~?LIz>$$NOUQn#KWt0 zGpWv=K)8sO!bS!Ml+7HIcm`HKJ1}*ec$W~y^EpQSE1I|uf&u!Cf5Z>|65#g-P5c|5 z_J1XXJ7=(|BOEL6;JbsHNQ>^49_WBOnlLf5-Ht0K>%Vny1Ahck#SafRFue)xCl5Cl zJMhOpdAK=%QNDk8xWDyq`|x`g_qU*%pCY7Ke~y&7Cn4aQ{o>;0{3{-A9Yt9yR7K?U zX|KIDCcgu!}j?Ar3l>vVyms%qaP4+Mt?8oTMzq7>8s5V-Wz zJ8wVjL{><(kcUR@(h@|Q4%0zi7SXUx{Y8K|pOjmLw)LUhC7O_0ZhFSL9_nOa{k%CZ z7RsjyhjBl5-E&ki+>ffWYp8=|UsmBgJ7%Ao045kd<_)|s?UAsOQw*;L91+Y3MN?)C zB?2TVd7?&|uT0<6tjm1y(pPOt%GE z97=I_cXx;44#nMFi@UqKyGwC*FBC7u-HW?B_o4k>`Rtr??;rOE&t$SQnJ1Z$3E6wC zwUauwPJztuALiz{4!!}I09lr}D=K;Um{v{^(yjXLHh=(|OU|}{nL&yObx5g36)raZVv21rS?rl?%qGBI zZBgkNYz(S|5{#)aCC)71v=Ss(JCGY$Ih7H1@k6J|-Z!5UILe9M!U@Q7h?av}w;hU2B&Jr>`M!*hyN_}$pf;U|mt zckgD|J{K~T_H!LZ;}x7#F0Tz1*d^*4wJDoxxvG*oQnu{ieQt@@`46}7uRqea8Jv~= zPnnTF?&>#G;$JuL{{kcWBqT2^FGVG0Wa(rC;0Ec*7&#iz2z<6Q{C(g4b^E_(VEG3q z>o4Tc{|hV;0DJNac=CoNV*DkkNsrI+3tjyi#lr{?lX?5Rt^Kk6t^U^L@1NhTfA0xs z_YVxvZ!0T6^N0vO23Y5yXZuGBdVDs(k-W_stjrt$ z?&;h4{q@823-9{7e6zB!y+LH&%D0xk*M8LieKG=oJ8x~?mK^k~@87=XZQJiYnE;|i zEC9?R6JRF!eMIa49@CqJ1@I*Pr-$0FG5+@_^IwL)mD2b6s5thJeSnMR*6a362Zp z^UhX>*d>gR{GeJmla%Bz$B`_qNtT_v7jX%TkJ&{CFk z%XXPaqIjsFF>ajQDXn$N40DMo)XMky<@TLK?Fz9K$o}rh((P*3tJmY{?Q2`NRZ|xC zSI+rNDg7-7nbEb;>F5piur4l}gT`tnn#O!=c8|+gq_IOj6RBi&yQiqWMaL!oh`=uU ztBEK6}=PmN&s5OTi*DkAfbMCUEYpX}uT3;RS2JVr9 z>vtbtpp0I}*q(>1#tx6kPuuTj1;=*psVf2SrVZf+eZ7eMI6XLeBCZ|>sgg1NpfFnB zbGvKatoz-zgYU<6uw6rKg*uZ=vX#$cq?F!wD_5gj4mmq;0`K{dJW`TMt;cvanu7cA~nF}boEu8r-z+vy))P| z&J&iXp(c_Fl@uD$HS995 zg{0H&`y??mH`sQer~8y-#BFfjwLyHi2Oq5vA7&iFbivEnblx;qgQIdPbT&-3miL*Z z3#Es{%X(g=3XSd7#6pXuORQBoPf*vA2~qf#edo+UZc7X1)t(rfcF&f{Zq5dXGz|Gn z(GdwZ@$KgibP_eG3p91%&N2_E-^g}7V#S&}?~X=~HtXU$2bZz4Cacunhnu};PKT*h z%l`VzDm}uw=M&aaXCh8kDMVd+ceGH~S%)6Fm?xCPZo#Tsa1}AFp|iQgROeu!8G2X3 zA4-le&%g$?GVl_)WPDgnERdA43PO?I4m^3IBzSHKF>0Yg!15Z4-|$2bqyCC7W>uD? z4OWW7x&%2nejBWKkK&j`hjTmg{hH1*jx6~;-1+1zhNtYi*r%w&6 zZGBSjSu7EI`^f=%lcxEMK8!)PRGQV8p$geDU;jFo4`y+#%?=y#`>wH@Es`Yc_HI7DaBibUE2*G(Wm@pNH zhU7VNeX4MTPyIr7J{tZ)F~HY=W!k_4HeX`gKG+%QT;BaX{(%*7 zxvOA;!02iz-$_ZEH9coVb1x{;$nyYfmNA-$2kKjwD@=^!rqb@6zoqWu zxcX9Kyo8DO#aQ+8KzW)P7$evM6vqb+uzU7xpuuDUS%ED7l-u&yh3HSND14hvJj|E&=!>@}v|V3i!)Cbs91PW2_5xr&D-)ZPS!>x8 z+jf$b6d;8og z9_ifHy~=nP0B?7q^BDb#Jp3(Y{v%iuKUoV)u(taCw5iW(2+rAnmM~Y>Evjd^`l%N3 znz$mN@k@`0bboxydY$#Q41?1vqU5?GA(Av%rQYXt!U{+f9ilT~*f!DrIY^Jl?*Cqt zY)aA|gJQ~D2}yRFoni|i&Vv=@%CuE8=1H4`_j-xeFjIyF(k3JAb;}X{94yhKH3~p% z2w8Ps>L~qWOddnoGNloOLVzjjLRLHnBeaDy_j6$9Ti+AIt1c_O>IXDL1PxP{mCD#D zokvG2618@@w0tBU@nliAK{sl<=+{x4YYrVn>LrE{y-hKH{*9hlJu3i$j233>?h0e z|IRKfo*r)lSq@PJnp=U&G=GPU8^o<8^N*{qFADQB62gpd{DizHzrn1Z z%jp0=W-s-uj}C8cf{$)K@tue065Tx#dW(*+4TOjXa&p_T01@C7a^9C5 zcm+gOh6cl;YZhrobd-Y%)jVz9Up@ud?`H8iM};OfO$=?F@j;!eK@ZIJ(5Sb7ft(^$ zesBYIIGDaZ+!78B7{%YDy;wUzXzN_PyA}j#@3;`#l0Mmf7|?hcl1%*WjmtUIbvW^= zHZ85|1Nx0MJD*5?ICpyLs5{>_7br{L)HMuH`V^zDQ-Hhtmn#3YAXuU3HLvg`FBoTH zk_;Fp%AR75g71H*2w!)~xMW)>(dA-;E@qO)2ROmIGQp6C05ur6D1H{rter)5qn%Da zQkm71sIqY{5ciN?jkl4Elo%elZQJY_m#97G>7;6M*RmS}?L9fW*<5=vvYkedX}zE8 z)ZhEyT#UqRSGq}ISy{faYa^@jKHf7k8MQ09;=x^0L={ovKG6l-RXQUR@Lsg+kC_bG zL&9$(4zGy_`roQRU`dy6PYFMdaDh~596dIXG6+>>bsj=$I%DGZMHNO$O4J#spITaO zgtqwwjh1S1E1Zvqe>$x+IBpJ9fIa&U&`kY=!APd6%f%)qdw%Nw@obUT(04ng>AthB zt3P$#FjeOn&o#NQ;Fe7kW|&>p>G-a5M&=&DN@(yM(T=b)zZMuX8Z(@_fS~sBtR{w4 z0>nJRefsMG;rt!>+RPnemteb1sokwXF`qq~w&e{&0B^*Hg3qQmdLQvNft8_uil|f~ z7SxxKvmf;v!(Cr;&)gwo6U}gYJ^W~6={PdlOH7GoMM^tHyc$jzu_ZJytS!j*%3AHq zzcV$!?GGFka2PM_AhT$}tne6nb*MOBIDBe~q$@Q*R2aK0q-g(aG^e#d*HW3Z8GAU{ zSbNIdUJmx->KI%!s;DimPEIaUVD;s#Zl+7!`vaBAJF!%L*bGCZwm@_cpUj zhuN!K{j5#|xkL1>3%&^WaNF$s{cI>!%gCCAdn+}vuFp^L(`j{S6}D^^_8 zFIU`BYD#l!KqX>i@L$6Bkb$dcpM8IH<5aHY?Xa>ji@0*bKs|G{{7~%49xK1dW6O8va<+C3^+GE^Kib2dYz+Qa(IcAGRLZVBORe7ovz*n4HHgYE3Y;p zU`XGvtZ$ByGxAXmTwz4l97Br6zto7n;X_eU&opC-`Y)rJk@=?a;`T7P6}im4!a@D}{ku7gORn8^{Knr`%A$> z){a$=&JHb9&3boz-wnGQH|ePCd#^^tq4NgStCPu(=AWn2hK-IoB{(NZx#yy4PIa^i?As=*>h+s4G$dmB~YwAy!iY{r4g+Oo=N`y|zWQ z9>)*bp1zo~3wN7&C#7pFR!J#r&ss)q3)22doU?=$&IOZ zGSApR!gYp-D0MysOx9xX1c`ytYMI(8acn-^-{a{#B&D?0Qx~0(ZthwlnxLf9lYObA za!G0yk?bLF%j=gNoajv14ArMgB6D5ZpV};Rw(eA;o@C=^*Yc;${{p=cA_&w`n^rL- z-DbGwZ+ub;;sAWZHKdgAnUUsSou(Ak~2;_SDXArJ&r;zh)!$&HL@z7`^s>{PMF zRNlgP*Q*E3Q+pW0MlvQXMn26HvH7Jw|Am3W z;pU3`rSdy2g9f2j-D&Gd=jOI$-m>L*?pfpML*gOBTTUG9vQ<3UiMdY+P3^R9^qu5w zMi^$DNlkYR?fr0Hu8BUM8%TL=)BLyJ7v*lzs z@{@&WPlK2fZ;V~Hx2_Jc9iQcmglZQK;~k%wB#N;bGC6D*lW44AHo?1`)}k%tYzc6xdPYRWvX&_=yfV`xJb96LA3gTrSVRH({*?5ULb%d z!x}kXff1-lU71={3Q!#+M^`1G<9q@&l|iw4q7^L2%cQLr$W2QcxGR25YZXmON`@z3q!++{Ll_zVOya=Un zKv_fx`{kh9={i`_64Hk={qi6HN-&0g0v5#eD<|i10z)?Aj>3S)aEdI(C4~X6(P(kR z{ojo5Kbzms81PbvncIs&G&3h_ja>}iOXtwUg2|g*@r(U9nTIgRX@zqH*DmH1=7n4I zOxZOGh}C8Rr>%L9yz8TVijvAz(~6aGRq0CC+8U!UkxOcWi^7e&f7_4_QkoNY?yTyc zn*1H|l%;>T(f6aXkvmOWAB~G6yE2ofyhOzUcKTzt&vSiO*8yC@Blqe{Pjy$y+32~- z!M>{9N|u1@T5G4vnxP|S!XBO^yWKU$X2^S=TRj@b8X6T`4?3a%3k(s64d7fs8_EVG zfjh3B5eYi!^wKv)yYs%j(2i{fhY5~Tvt1*?C>IzV{52}55)JzLJz1K3Df1`s(?XN2 zExfF&&4Z%$>1DZ{%%Y%veA8#QuJa;m2#P}_-lthOQ9u@}9V*4!TlaxrHCx+5sgj?! zpv|~#)oxFh*rrhjg;IQ@AF`N1@TBXaVy=kh~r;we+pXNqo%C!aeKmL&6yH@>?p48*N(+ue%Ptd6>d+d-x1Xt^6w_%Rr;fkCxi-cIDqZZ=xfjVJ4S zd%2G1cddc|7lhgZIjPc9+)*mYEL^gK0YyB9b%b&d*W^tD-Zj05^^AzM@QWoF@j(+T zGbmNa_ppMwu&0Ip_WNF!rwn&U94Pj>E~fQ zFIP6?QhP?et2T?@yWGqU##GzA`(EU)CyJz~Ieu(^@Zv>j`;40CtHL5`|XG9B-rrd`_L#KlO^<( z>rFnAOigB&zZb;5W*FvP3Mu3bL5|;Ec1q9<8PqaSOuZxjBT{R;zaz&e1rLXid!k)@ z|Hv0Ob9WRlwuX$TC%F-jFJpH?YmDXAT6-3~GgFjDm+Dx_beRaH4O~;tT%-?Askxu3 zlWvxlU!vxH97N{WS~*fPFrud-rMWmg5vaxwv2|!>;xlgyJLcn~*qT>T??f$vIH1oizVLWXQO$Ia$gs8(~ z7&`17v5;y4yebfkmCs6j7X^_rk%9u6PN8~H1fOz{Mn_|{eK8vkvhB5VS}Ug;w`kzg z!uJ!4C;Y5S%s_{H_$=J<8=#l>cSFGw`4>f{sp07p&u#gb2wl)xQ=L1Mt3rxOR}uLDIir3g{98v z-@D6}tSj#Y%ao|Ia8Bp3Vi$7mX-Yhc?kd9CekaOaB{Tkhg8YbkH~Cz*=|;eYyW@_f zv;Ek;)P@xuhvjG4`on~a(TLMN?}`6VBUnkMYl*4k`NsnAj8BJRd22XgCqp#V$VfJy z*VBecriHI(ekgg zzqS9h@9#eT>ggYQ{0I4hza$j?==JZ*e?R(v?&+Vm|8s!y@7gziU84USp!`o)=061{ zncrX`OaOsQHh}CAK>778ug(8Yx(6)31r7cN3i)OEw@Bnaa7=$hBH0;O0RjyFo9@Aw zn!AgFQsdfVxu=X>9P?>`*%T`jLExmoVtpa920J~N5UA@CVW9j{9Pm%MFP|_9eA>h2 z-5d$?{1f?w26~3^6?&lAr)4vJfp|xZu!W0>cn3;Ra4P*La8DM+&m6n%A6Mg#>b`p! z9oi>GIJf1QBy*mnQN_{8 z#`oORYR#$SWL=vIz3%=wqRjersZfjX{ZF{8?Cj?l4rz^k-_*R+C(s-)nfvHev@ zyEovUSb>8D&g@X?Mb``cS+5))Cts$2FbEY$LB5Ut;1paPQ|9S#ANWb5$bFdeg1hQ zrrDk0i4jz`>}=X`-VrBDQLh*!3-aSvu;|h=JWB2_0%h-MW{hi$Xt-k-1(*H0la2Qd*^4Yw;FU=MM*I^Kpwl%>~#=Bps%QqYToWVMNdkYeh;RMi)7Nbf}xK~)pFH7gJbkKi=1?`%!2@{6M#f3aiVOF^S?@znaYFmVPcarLAO zL%`zLQ!ArJ!C%GKh3v*5+240-zhg}!U99wH0Y$YJtJj2Jib@mIWlRbyYS8_fRD+Bd zBPD=|ent8t2HXv4uUe;!Aw(U?)BxK&MlceHIYTg2Jdav}GlsLoE+v#P1Sf%9JVN+g z04T!b87#8d1T(&J4ojU9y@SeOG?e&zu0|bX3FWb$2p~9eME%<6*EWc`8 zwds(iagLWAxTt>JPMi`oly+Z@W^JV6W=dFKwDM}+*AI8tdfVL04&raGzuOMy(#QK+L2?>`7NB1nlrMx#^GP7gwlX?n<|sCTxkQcZX0u8KQJ-uZ zi7_B%&5Sq}=sod>g*6&5QrTjnS>bBau!mrs*W^_i%c>J&15fUcCELrLY55)0k;VQ5 zCrHyJweGd&Q}DK6W9c;Y11mm`N@5vDO<|~;G4g(}vynF22HSbG!<2bi@H4KOycPG) z^GlZ2H_?`?D$&?s8;ll+t3^qjQu{ev8Ng5*-)`siq{29J>n z-fnOoL^mbttppiSqDJMuljMr>_P^F!{!!B&p{q=pD~-sQGCIHuliT;adt7m5J>HZF91#DZ+Ib74uE)?_Y#YwRfk3B}IJM|dcU6%M~hd?)be zybPZ+C?62a418Uh?2++Y)a*W!a}AGs-taR5o)Vc?flP^|1usW8I`6$gh}dXhb2hQP zA>p`^J)iP8A2}S_$(c(pGPKcs%Y!}{RaqxGD3=@4U=rxIgLFF#kQ#)nI%DRLP zqV*lrLsKFw;q~K&-u0IYe}a^PkP>t(VYgS2lO+$UtUIl5VS|Nd<4=&-?WeGnm&-XT zdO%OMpeQwnv?N=M5oHMfVBilK7X;AmIKrIv4*Bd~ITaeXP`jRUpTKhC`QZc$j}h-k znNObYC5d-Ra4805yE*|@Kk`i5L8pjP#HovTS+<_gkzRi;?Gb*(StGveog~Gjtvnkq z@{tZ?@T;$jaXy5qzwPYDRr%3cRR6@1cwlO2G<*uEkm9OuaUn6t9Wq4kegKzFhWF%+ z@LNa}bFM3EB)XjOWs6***D{Un`S&7}VC|yBgA?!i(#^mZ z6oHXzsT=)Q3B7NTshW6YF|YF5I;2bq$kQMw#F5DB?aF4tq2>V&J3k8I6}6;LmnAqJ z0|OW2WDGP3gEh!^Cv-&^#9&(kt>e-4>+Ve*_*6a0Oc|{5r91^Qi*G{FtTXicAq(yX zD5keaPXZDAaXQo@88yi)SfrxC-w_(X$DrE++tbc*Bw>|(*z*P|FAe1kO^v&zUNE_4 zzbXm1}87AmG+XzW5Mith&n15j1tua@O@rA5VHx1ypKRrE;Nhj_r%(A-rsn# zzHc;bb9y-79X~!;B#Pf`&Fx}~YGg(^6bbF;gm3VY8_(hdK7J;z zBo{u$bshfRaCfN}Hr)B5UaRxC-rRi3-jwRf#;4D;fVoTyR4WcOj3|CVj0qE$MJ<(p zs?ME)R7idGxo(=wni1Yxg3yPG-{~OOwcG5wm?%NE2uJXzAP*wVPLGCN^XQhjWsMNK zXwSODTvxM&EX&VXr@XnVa;M7xWu1!F>!|B-)=812ZPpduM_$qN{IP|k`5n8YDWJH% z6QLorsdv4s@~=Ku0A^jMW@RW)9H}?**fnS1+>Lb#Q%i2>!;Iwp;};ptPo*c(&}HUp zs_p9)Kd0@)>Bq}k?8ha$>Z|s2x^ALMy;x;KOXc(4pS-_JF4@?iv0rVUcdX@Pl=94mMGiXI-<$UrM%UJ^%u=8$%PuXZLOT+q zFPV4_q3WL17s4wdCbJ@o9H%F?WMfY2yI?JmZRCI{_&6-P6XTK-3H_A5di3u7uq3td zCNu{UP2VSTTL#qXZX5{8881z)%-)P$6LMLZ&kGG@MzdQ6&`eDGkmkj(>g>dl9qKkq zvCofiXi?i2sp0Iio1N7L%C^OuZ0v|fOQHEBJ&2@{F=ruE@5%Z%h=cS*ikB#i3h)cE zI>*^da4*T4q4V;Fm9I=-OpwMgzjKba_FtUZ>;#4MZ%7KZz|i@SYr~|=PdRoyl)A+h zJs)bAA13ctl9h3x=^!c7R%utzp)&@+7FwGZ=1)7%l$GHw(%UgtSgAG`gAE_!KSV5j z3Sf;ZCPwN|1EHB-*0+o?1KgEq^endKj&V2!iY7X8WDiuGT5_d3t1&2(G~fdjzDlkpj%3=s85ABZ)e$;ck&m0!TehdMwnB3R&d<|5mum=H$%N~e_z^fviCBFR7-kVQQ<;vb_@m3q z+#H4yd~~BGrX~$)8`6wlTn^SucyGdfVs=^PZuEq6PTu1{XmFC#D~E_X=j3Y0qtiQA zO^of@G{Yi-Qfu)o`hbq=v6VE#S@>{@eip`-`2rjYlynjGryW{cCbEV@lU0QW%ANV) z5Jt^~@|zc^2Hyx&6weE3Il7`K$e>`?FUT&bDpwNPkt&CY9h_CXdyt&|q5LZJ6e);O zFhyWI+*#4Hk+adP5seXzQH_y}(N4`H`Ch%DbXe33Fb1kGCj@gnnIQ`7+hr|VKa5l+ z1#^3JKEMV}R%wc{f>b)x;O)YU&8B z`VY268dB|zmi+iwg4}4yRIksuNes4ZySvnK7{Xacxa^!!+#K>5Xk#$~SdagDvYEnp zC0{$wOV;oQlY2n;Ge)m3ggKsTwKq=LypHyzjOChQUX^Ol;lVleri!KfJb!PIRg_!u zQ9Ue3F+pFT#RW-A+h*tn&0GL(W*U?;sPQJ=#{iq-gPDeK<*Jj6kt8~+{ zdf&>v^W0L>9pIYh^&e1-I(Es+{?I@9HnU)fQfVc^r(NPARx4L8Xg6;PXVHXlxSv0f zW^Q{R7;5_33&-7ZZ#R0dS&0oIopIO<_Zka?`_tN8wcx>UuAgnUeqvZ7%hTCAxL~O( z2LOzseX4b<%>pa@P8><5=k@nr^ci2nY8kg%@4 zfI-%T7|t5M9ciuO!XZH7L)Lj=`qmWxast3Yc8y6*WHDBJh%0>dEZ@`>wlbHPZqydi zGTcn_AGDXS_2Z{M;4xEIo7kJ=HUm=o=J3D_mmhU}Bcd`dz|dK3^Dh5!omuVF)?$#n zX-YN6b`fG5jy0d@^soinQOp!sAL}T;Ky&B{kuIp^gH=#Q z?#P4*IwK-ugj!<`&)%S&ae-lhaedNu546W8|I2q`6~F7BFm zNME~qPC$;Jro@(G?oR78In3(At&cV;iN>~NTNI7jM2x(m}eGsLWXJXkwZIoR-mYm7AB`(hXIs zuuGG-vBBL2L|`P_;!Wb5!$z7y?Dy+(VEZn05`4YjL7_0`QFeY^7fz^V7Tj4bK#n0=E;8gAXl_Pn7}B)D9N?(4kFcR*xA_I@WM>xlBEWAGpDETJNsTTaeua*OEh|K@7STDg$yo?-w?T*?kG$udM z51e_JcbsYW#g2U3{mSEBaL1ea!?rfk&s9pMBBZlZP&uLzw`~<7+cBsNglRnUD!CN_ z=TeAOZ&{v?&ShBpNBQ4WgJl^FP2T0j<%Vi;z!PnaPceN7i~BxN}BL=6H$LBho~YH8c=-P4u+ zN(xv114Kx#F{D)0jp1QSDh-bZd0FDSe5uxCfn0e;3pLBdF?2W{F3Z72Kb;4b8WOI~ z{knhRRv!%+ZkNM(Xd>Bxvv&K{{CO(PZuXL;z2%B~kt6D^uUCH2`%{V1yUuRAfH-h& z=8d-KDeU*1T0Mi*?T@huZjrBJ5<`01b7()C1cuH*mu39L4`;dJq@=EZ#TVB}v7U-x ztR)5UNhs6~>E*f-V-2H0w$ihNF<|v(k?o66x6i&|U%sfi`9`rYj2rjRa}#~Lcd}zO zFr(PzipRD7u%_K|(*uTNjzu(=Rkg%mJ{{G%TP3V++?27f?#XV#f~dg>;&IAu5DsO zs_&KDI7aPmeB0V1S|P~cl;CpEL*6&x?6mX_6Vcm(qtS5u`+(GNhGvJuP;IV3GEFJr zD@b4Hj{koOJiU4He>3M8INr9u)&I;3_Wz1IC#dpCPFeI{xO2bb7Qfj}e?>(A?74r) z;s4)4P=E}Ge-A+c0#bjn=iXRu{~8$j`}!NF48T+SrIG(uzOm|lv(*@XWx)Zk)BsBW ztM&aaUfnNN8$JFT&+UyF#stW0^_yMC#=`N-^3UO)zmu;2xA4#ZJU+hyK^&~VIpc2v z*Z_Vo2Y@&Co1n%5V9x>QUTpso38DccKKoMx8!)7Qr>OlCLzwNY;hzlQKPhT}pv|9p z*l!Zrf9hc~{4+%jaJ_yr$^RZ0`a8k$cOVF#0We7a#1>{@dh7Oo3k+4LT3BMuC3fDz z4k2(LuL(xor9cG3r4|UuBMXnjQE(&~D%dHuAsA3ZZ4EYBQZ*vZIj+-wYIvatl^DnYu03U-fFeJ-N(_4N2}Dq@s*ViCVI5>3}JOboMc-OS% zA$q;L3t7-KLFcFZSZ!hQdmo{}#`4VozF94kdUY%p2#2$a;Fjt5)0zS%!HdH;PS{}$eZ1SeOz<){i$CFR5HFH%(oMD5i3KWGoV?zj zDTR3;=PVEK_47^oG-<*ba5U zI(%SYTVB7arMBMT-68uOrwi!RTyk}IT@5U5wNS5>{2dM>MIB1Pl#A+>;s3ec_lkrHk?g$1JU3nGR ztX?RKK4yA?1B5O`Hj!a5+y3^su$RRoGonW~vlNIMwX~j1W^RS2ljk`Kc?b81P(sA3@ATe+R}I{u_Lj$jEeWAaYlgfLr`* z4?sft#h5j~qVKaW_Wms+hQ1CNA(FGUk*83Qiz#1d&CdAg;CJT}I|NjxlUl?AalfmV z%(g3UC+&QLuev0gCRK5sdut+I^VlD|eQ0|*wmXPF*8r!TUTjbke#9QsK&#ASse<6x zCWxE4iPPRB@~Q_RHjRX56!hYM^&hKE4k$Up&=b7N+LHSgK3+C%q9v-8?dbRwgwRAj z2$U@4_H>?~*n~Y8KVf80LrnHvjVFX3>(T)F1FYuC5@;xAM~F6uEwr0!y5tHF8JrUIt}gV>0uSk?O0ZB* z_Zldo2&phDV--j*qGK4|yD5~w!7(bBP6sKHih7KC++3QFddETU$<>JJZ*mN6?CJS2 zmGm z&xZf{&K2{*XpoIyE%+)cD2z{dD;XY~PTEoBo7pU(E%Y-g_mA#_Wh9t-rHH0-tF2EX zKI$}@kG98jeN+ua)#2@XNZTR9=7L0#DO6!2px1ItnPqVKGX+W6lf0b@Zm2PhI>t7>f#A-L$-tx8p(kD9rj4T0FlE+=7+xGXJm) zNLivwR%Xn1X!suCs`=84tpbv_euf#J{|qygJyPu;;~+&}Oow~`=OJGye91C{MIq(z zvNkBPOk2vvl$bV*4^9!gF{iSw66xU;zt^3ajD`*T-oP;g3%reCTp?TChP)9C*@fTt zzZVHwbmV7#z;y2(>Dj|Rqk^x(#?>yiaUA#W_*xk<`>ld{*aZkK(R0-Mm-8-zuFE|X zHrm+QKG;#Y-`6PMMKuUsMoK9iN6zhhX#jD!S8VHasJNfM4o0JbNO(bLu(2yr3?_(h z(Y?jfYl?DsUM8jJ5rAO0K_=I;r=z|l9AH_}hPg4XR`Kt^Jetw10(WPbFYEc6$?5o) zm0w9UHbKuB8+-UTs?QqXXmp8iai8{X|6}1Iz02OV<&>)f%R>5q2@KcM_+)X4#kIO; zi&Dgg1~TYxX(X~-%v_jN+j$Pq=-aIbOu#r-IDMF~Nki5B@R{p$9$U#GMYGtn zT<=kmxgU;qk=K6JS;irFDvgWq-Y@l&l_H!Q>a#-`lVHW)v!Y>^rHx+s^Ga1Nd}#xi&m#pLG|nT^Ka>GDR1V+O^qnx_owDKP1I zYIw-2ponG%f@sv{UnX1%eiW#2Wl-bx!#w0qeFGUSgqc=A+AXg0OjIsxjWNtpeHBu| zU^cMyO?%XMhGzRfF?s)mk)6fn?vv%2m~fS;FGs6m5XF6f_tkX6kBg_0B#P?gW#0&N z*3EwZmI=?x&{_LbCkxXX-Ir}klB7NW(7F@pqKiHG4g&-HVZ5o35MD%IAp_Jo4^E^n z8LhIqE}1s7^A`Mz?n9CZ$;fB!LCb892YYB)`!C;mZ@Brv8i}^2G$0MRR_tzul7Zce zoffzP;l+GA6m(CKAsNALWPVrYx&Br)s&Rhb6C?7eU?UTI@zMEv+dJ?N^9ny%INIg= zrP+w1hT64`MBt+uNrgd&5RxGkT$3TDwdY9XlLxm(NOrKwETAFW2t()V&5T#{>v$+d z48^5Q1owf8ZR$M-_vLP2$b!C?OiDR!*Z1^}x}L%ue4p7me~CE3Rp#Q$k7K~S?C)Fk zQete+l;%X_fuE8LT~*IjE_^hK^65%DE5_BW58mgv$;Ik+yS%JUjMH}P~Q9U z?ojI{nRO_mqfJy`<8xYLTOr0O(ABSl-z;OOqijNrwlQd#Z${QCG$Eo4J@ zMAeB*98s&ORT_SXaa$P+bCBLTXcxFT60`Gg(9^^5emH6GU9M&bA%29CKxn3h-XIAb zQ{T%!-k&ukNJkP}{|YZa5s>oU_g9sj0aWILFVelcIb;SpFj-J{Xs*_qK@gS9t=fFD z5g#KTz&*iYl|O`Dw*F zkM(-q^5lG`bj1GNX>G!Cro0fubB5?=YCa!rmx&@ChogbMqt$jU*4RtGGD#AioIPA4 z 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 literal 0 HcmV?d00001 diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Recusrion & BackTracking.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Recusrion & BackTracking.md" new file mode 100644 index 000000000..16e0f9279 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Recusrion & BackTracking.md" @@ -0,0 +1,237 @@ +#Recusrion & BackTracking + +##Recusrion + +### DrawFractal + +``` +void DrawFractal(double x, double y, double w, double h) +{ + DrawTriangel(x, y, w, h); + if(w < .2 || h < .2) return ; + double halfH = h/2; + double halfw = w/2; + DrawFractal(x, y, halfW, halfH); + DrawFractal(x + halfW/2, y + halfH, halfW, halfH); + DrawFractal(x + halfW, y, halfW, halfH); +} +``` + + +Sierpinski triangle更伪码的写法: + +``` +void DrawFractal (x, y, w, h){ + if (too small) return ; + DrawTriangle(x, y, w, h); + DrawFractal(.left); + DrawFractal(.top); + DrawFractal(.right); +} +``` + +实际上老师故意调了里面几句代码的顺序,让来看到虽然结果相同,但是画的过程是不一样的。 + +然后老师还在黑板上画了过程树,分枝是怎样的,实际上当学到DFS的preOrder, inOrder 和 postOrder的时候会更印象深刻。 + +一个分支走完之后再回去走另一些。 + + +### DrawMondrian + + + +``` +void DrawMondrian(double x, double y, double w, double h){ + + if(w < 1 || h < 1) return ;// base case + + FillRectangle(x,y,w,h,RandomColor()); // fill background + + switch(RandomInteger(0, 2)){ + case 0: // do nothing + break; + case 1: // bisect vertically + double midX = RandomReal(0,w); + DrawBlackLine( x + midX, y, h); + DrawMondrian(x, y, midX, h); + DrawMondrian(x + midx, y, w- midX, h); + break; + case 2: // bisect horizontally + double midY = RandomReal(0,h); + DrawBlackLine( x, y+ midY, h); + DrawMondrian(x, y, w, midY); + DrawMondrian(x, y+midY,w, midY); + break; + } +} +``` + + +### The tower of Hanoi + + +``` +void MoveTower(int n, char src, char dst, char tmp){ + if (n > 0){ + MoveTower(n - 1, src, tmp, dst ); + MoveSingleDisk(src, dst); + MoveTower(n -1, tmp, dst, src); + } +} + +``` + + +### Permutation + +老师说permutation 和 subset 是 mother problems of all recursion. + + +given a string, print out its all permutations + +思路如下: + +- 使用了的string sofar,以及还未使用的string rest +- 一开始rest就是给的string本身,然后sofar是空 +- 每次挑一个rest里面的char,然后递归的再把rest剩下的拿来permutation,这样每次都会有一个char从rest shuffle到sofar +- n 次之后 rest为空,制造了一个permutation + + +``` +void RecPermute(string sofar, string rest){ + if(rest = ""){ + cout << soFar << endl; + } else { + for(int i = 0 ; i < rest.length(); i++){ + string next = soFar + rest[i]; + string remaining = rest.substr(0,i) + rest.substr(i+1); + RecPermute(next, remaining); + } + } +} + + +// "wrapper" function +void ListPermutations(string s) +{ + RecPermute("",s); +} +``` + + +老师的黑板图真的是击中要害。 + +因为老师强调的是,也要用mind来trace它是如何操作的。 + + + +### Subsets + + +``` +void RecSubsets(string soFar, string rest) +{ + if(rest = "") + cout << soFar << endl; + else { + // add to subset, remove from rest, recur + RecSubsets(soFar + rest[0],rest.substr(1)); + //don't add to substr, remove from rest, recur + RecSubsets(soFar, rest.substr(1)); + } +} + + +void ListSubsets(string str) +{ + RecSubsets("",str); +} + +``` + +代码非常容易理解 + + +比较一下:两个都是有关选择,permutation是每次选哪一个char,而subsets是选择这个char 是否in. + +两个recursion tree都是有branching 和 depth的, depth都是n,每次选一个,知道n个选完. + +branching是how many recusive calls 每次made,subset每次都是两个,in/out,而permutation则是n,n-1.......grows very quickly. + +因为permutation是n!,subsets是2^n,跟树对应。这些都是比较intractable的问题,并不是因为recursion,而是问题本身的复杂度。 + + +这两个问题都是exhaustive的,然而,我们会更多碰到一些问题,有着 + +similar exhaustive structure,但是遇到'satisfactory' outcome就会stop的 -> 也就是backtracking了. + +##BackTracking + + + +### pseudocode + +把问题转成decision problem,然后开始make choice. + +``` +bool Solve(configuration conf) +{ + if (no more choices) // BASE CASE + return (conf is goal state); + + for (all available choices){ + try one choice c; + // sove from here, it works out. you're done. + if (Solve(conf with choice c made)) return true; + unmake choice c; + } + return false; //tried all choices, no soln found +} +``` + + +###IsAnagram + + +``` +bool IsAnagram(string soFar, string rest, Lexicon & lex) +{ + if(rest == ""){ + if(lex.contains(soFar)){ + cout << soFar << endl; + return true; + } + } else { + for(int i = 0; i < rest.length() ; i++ ){ + string next = soFar + rest[i]; + string remaining = rest.substr(0,i) + rest.substr(i+1); + if(IsAnagram(next, remaining, lex)) return true; + } + } + return false; +} +``` + + +### 8 Queens + + +``` + +bool Solve(Grid &board, int col) +{ + if(col > = board.numCols()) return true; + + for(int rowToTry = 0; rowToTry < board.numRows(); rowToTry++){ + if (IsSafe(board,rowToTry, col)){ + PlaceQueen(board,rowToTry,col); + if (Solve(board,col+1)) return true; + RemoveQueen(board,rowToTry, col); + } + } + return false; +} + +``` + diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/backtracking\346\200\235\350\267\257.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/backtracking\346\200\235\350\267\257.md" new file mode 100644 index 000000000..dbb7e8cf1 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/backtracking\346\200\235\350\267\257.md" @@ -0,0 +1,295 @@ +## backtracking 全集 + +### 回溯是啥 +用爬山来比喻回溯,好比从山脚下找一条爬上山顶的路,起初有好几条道可走,当选择一条道走到某处时,又有几条岔道可供选择,只能选择其中一条道往前走,若能这样子顺利爬上山顶则罢了,否则走到一条绝路上时,只好返回到最近的一个路口,重新选择另一条没走过的道往前走。如果该路口的所有路都走不通,只得从该路口继续回返。照此规则走下去,要么找到一条到达山顶的路,要么最终试过所有可能的道,无法到达山顶。 +回溯是一种穷举,但与brute force有一些区别,回溯带了两点脑子的,并不多,brute force一点也没带。 +第一点脑子是回溯知道回头;相反如果是brute force,发现走不通立刻跳下山摔死,换第二条命从头换一条路走。 +第二点脑子是回溯知道剪枝;如果有一条岔路上放了一坨屎,那这条路我们不走,就可以少走很多不必要走的路。 + +还有一些爱混淆的概念:递归,回溯,DFS。 +回溯是一种找路方法,搜索的时候走不通就回头换路接着走,直到走通了或者发现此山根本不通。 +DFS是一种开路策略,就是一条道先走到头,再往回走一步换一条路走到头,这也是回溯用到的策略。在树和图上回溯时人们叫它DFS。 +递归是一种行为,回溯和递归如出一辙,都是一言不合就回到来时的路,所以一般回溯用递归实现;当然也可以不用,用栈。 +以下以回溯统称,因为这个词听上去很文雅。 + +### 识别回溯 +判断回溯很简单,拿到一个问题,你感觉如果不穷举一下就没法知道答案,那就可以开始回溯了。 +一般回溯的问题有三种: + +1. Find a path to success 有没有解 +2. Find all paths to success 求所有解 + - 2.1 求所有解的个数, + - 2.2 求所有解的具体信息 +3. Find the best path to success 求最优解 + +理解回溯:给一堆选择, 必须从里面选一个. 选完之后我又有了新的一组选择. ```This procedure is repeated over and over until you reach a final state. If you made a good sequence of choices, your final state is a goal state; if you didn't, it isn't.``` + +回溯可以抽象为一棵树,我们的目标可以是找这个树有没有good leaf,也可以是问有多少个good leaf,也可以是找这些good leaf都在哪,也可以问哪个good leaf最好,分别对应上面所说回溯的问题分类。 +good leaf都在leaf上。good leaf是我们的goal state,leaf node是final state,是解空间的边界。 + +对于第一类问题(问有没有解),基本都是长着个样子的,理解了它,其他类别迎刃而解: +```java +boolean solve(Node n) { + if n is a leaf node { + if the leaf is a goal node, return true + else return false + } else { + for each child c of n { + if solve(c) succeeds, return true + } + return false + } +} +``` +请读以下这段话以加深理解: +```Notice that the algorithm is expressed as a boolean function. This is essential to understanding the algorithm. If solve(n) is true, that means node n is part of a solution--that is, node n is one of the nodes on a path from the root to some goal node. We say that n is solvable. If solve(n) is false, then there is no path that includes n to any goal node.``` + +还不懂的话请通读全文吧:[Backtracking - David Matuszek](https://www.cis.upenn.edu/~matuszek/cit594-2012/Pages/backtracking.html) + +关于回溯的三种问题,模板略有不同, +第一种,返回值是true/false。 +第二种,求个数,设全局counter,返回值是void;求所有解信息,设result,返回值void。 +第三种,设个全局变量best,返回值是void。 + +第一种: +```java +boolean solve(Node n) { + if n is a leaf node { + if the leaf is a goal node, return true + else return false + } else { + for each child c of n { + if solve(c) succeeds, return true + } + return false + } +} +``` +第二种: +```java +void solve(Node n) { + if n is a leaf node { + if the leaf is a goal node, count++, return; + else return + } else { + for each child c of n { + solve(c) + } + } +} +``` +第三种: +```java +void solve(Node n) { + if n is a leaf node { + if the leaf is a goal node, update best result, return; + else return + } else { + for each child c of n { + solve(c) + } + } +} +``` +题目 + +八皇后 N-Queens + +问题 + +1. 给个n,问有没有解; +2. 给个n,有几种解;(Leetcode N-Queens II) +3. 给个n,给出所有解;(Leetcode N-Queens I) + +解答 + +1.有没有解 + +怎么做:一行一行的放queen,每行尝试n个可能,有一个可达,返回true;都不可达,返回false. + +边界条件leaf:放完第n行 或者 该放第n+1行(出界,返回) + +目标条件goal:n行放满且isValid,即目标一定在leaf上 + +helper函数: +boolean solve(int i, int[][] matrix) +在进来的一瞬间,满足property:第i行还没有被放置,前i-1行放置完毕且valid +solve要在给定的matrix上试图给第i行每个位置放queen。 +```java +public static boolean solve1(int i, List matrix, int n) { + if (i == n) { + if (isValid(matrix)) + return true; + return false; + } else { + for (int j = 0; j < n; j++) { + matrix.add(j); + if (isValid(matrix)) { //剪枝 + if (solve1(i + 1, matrix, n)) + return true; + } + matrix.remove(matrix.size() - 1); + } + return false; + } +} +``` +2.求解的个数 + +怎么做:一行一行的放queen,每行尝试n个可能。这回因为要找所有,返回值就没有了意义,用void即可。在搜索时,如果有一个可达,仍要继续尝试;每个子选项都试完了,返回. + +边界条件leaf:放完第n行 或者 该放第n+1行(出界,返回) + +目标条件goal:n行放满且isValid,即目标一定在leaf上 + +helper函数: +void solve(int i, int[][] matrix) +在进来的一瞬间,满足property:第i行还没有被放置,前i-1行放置完毕且valid +solve要在给定的matrix上试图给第i行每个位置放queen。 +这里为了记录解的个数,设置一个全局变量(static)int是比较efficient的做法。 +```java +public static void solve2(int i, List matrix, int n) { + if (i == n) { + if (isValid(matrix)) + count++; + return; + } else { + for (int j = 0; j < n; j++) { + matrix.add(j); + if (isValid(matrix)) { //剪枝 + solve2(i + 1, matrix, n); + } + matrix.remove(matrix.size() - 1); + } + } +} +``` +3.求所有解的具体信息 + +怎么做:一行一行的放queen,每行尝试n个可能。返回值同样用void即可。在搜索时,如果有一个可达,仍要继续尝试;每个子选项都试完了,返回. + +边界条件leaf:放完第n行 或者 该放第n+1行(出界,返回) + +目标条件goal:n行放满且isValid,即目标一定在leaf上 + +helper函数: +void solve(int i, int[][] matrix) +在进来的一瞬间,满足property:第i行还没有被放置,前i-1行放置完毕且valid +solve要在给定的matrix上试图给第i行每个位置放queen。 +这里为了记录解的具体情况,设置一个全局变量(static)集合是比较efficient的做法。 +当然也可以把结果集合作为参数传来传去。 +```java +public static void solve3(int i, List matrix, int n) { + if (i == n) { + if (isValid(matrix)) + result.add(new ArrayList(matrix)); + return; + } else { + for (int j = 0; j < n; j++) { + matrix.add(j); + if (isValid(matrix)) { //剪枝 + solve3(i + 1, matrix, n); + } + matrix.remove(matrix.size() - 1); + } + } +} +``` +优化 + +上面的例子用了省空间的方法。 +由于每行只能放一个,一共n行的话,用一个大小为n的数组,数组的第i个元素表示第i行放在了第几列上。 + +Utility(给一个list判断他的最后一行是否和前面冲突): +```java +public static boolean isValid(List list){ + int row = list.size() - 1; + int col = list.get(row); + for (int i = 0; i <= row - 1; i++) { + int row1 = i; + int col1 = list.get(i); + if (col == col1) + return false; + if (row1 - row == col1 - col) + return false; + if (row1 - row == col - col1) + return false; + } + return true; + +} +``` + +参考[Backtracking回溯法(又称DFS,递归)全解](https://segmentfault.com/a/1190000006121957) +以及 [Python Patterns - Implementing Graphs](https://www.python.org/doc/essays/graphs/) + + + +## 以Generate Parentheses为例,backtrack的题到底该怎么去思考? + + +所谓Backtracking都是这样的思路:在当前局面下,你有若干种选择。那么尝试每一种选择。如果已经发现某种选择肯定不行(因为违反了某些限定条件),就返回;如果某种选择试到最后发现是正确解,就将其加入解集 + +所以你思考递归题时,只要明确三点就行:选择 (Options),限制 (Restraints),结束条件 (Termination)。即“ORT原则”(这个是我自己编的) + + + + +对于这道题,在任何时刻,你都有两种选择: +1. 加左括号。 +2. 加右括号。 + +同时有以下限制: +1. 如果左括号已经用完了,则不能再加左括号了。 +2. 如果已经出现的右括号和左括号一样多,则不能再加右括号了。因为那样的话新加入的右括号一定无法匹配。 + +结束条件是: +左右括号都已经用完。 + +结束后的正确性: +左右括号用完以后,一定是正确解。因为1. 左右括号一样多,2. 每个右括号都一定有与之配对的左括号。因此一旦结束就可以加入解集(有时也可能出现结束以后不一定是正确解的情况,这时要多一步判断)。 + +递归函数传入参数: +限制和结束条件中有“用完”和“一样多”字样,因此你需要知道左右括号的数目。 +当然你还需要知道当前局面sublist和解集res。 + +因此,把上面的思路拼起来就是代码: + + if (左右括号都已用完) { + 加入解集,返回 + } + //否则开始试各种选择 + if (还有左括号可以用) { + 加一个左括号,继续递归 + } + if (右括号小于左括号) { + 加一个右括号,继续递归 + } + + + +你帖的那段代码逻辑中加了一条限制:“3. 是否还有右括号剩余。如有才加右括号”。这是合理的。不过对于这道题,如果满足限制1、2时,3一定自动满足,所以可以不判断3。 + +这题其实是最好的backtracking初学练习之一,因为ORT三者都非常简单明显。你不妨按上述思路再梳理一遍,还有问题的话再说。 + + + +以上文字来自 1point3arces的牛人解答 + + + +Backtracking 伪码 + + +``` +Pick a starting point. +while(Problem is not solved) + For each path from the starting point. + check if selected path is safe, if yes select it + and make recursive call to rest of the problem + If recursive calls returns true, then return true. + else undo the current move and return false. + End For + If none of the move works out, return false, NO SOLUTON. + +``` diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/delete_node_in_a_linked_list\351\227\256\351\242\230.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/delete_node_in_a_linked_list\351\227\256\351\242\230.md" new file mode 100644 index 000000000..e148bb218 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/delete_node_in_a_linked_list\351\227\256\351\242\230.md" @@ -0,0 +1,69 @@ +##Delete Node in a Linked List问题 + + +This is a LeetCode question, I knew its solution, but wondering about why my code not work. + + +>Write a function to delete a node (except the tail) in a singly linked list, given only access to that node. + +>Supposed the linked list is 1 -> 2 -> 3 -> 4 and you are given the third node with value 3, the linked list should become 1 -> 2 -> 4 after calling your function + + +At first glance, my intution is delete like an array: + +shift all the node values one front, then delete the tail, here's my implementation and test case: + + + + class ListNode(object): + def __init__(self, x): + self.val = x + self.next = None + + node1 = ListNode(1) + node2 = ListNode(2) + node3 = ListNode(3) + node4 = ListNode(4) + node5 = ListNode(5) + + node1.next = node2 + node2.next = node3 + node3.next = node4 + node4.next = node5 + + + + def deleteNode(node): + """ + :type node: ListNode + :rtype: void Do not return anything, modify node in-place instead. + """ + while node.next: + node.val = node.next.val + node = node.next + node = None + + + deleteNode(node4) + +But After deletion, it has two 5 value nodes, the tail was still kept, can anyone please explain to me what's wrong here? + + deleteNode(node4) + + node1.val + Out[162]: 1 + + node1.next.val + Out[163]: 2 + + node1.next.next.val + Out[164]: 3 + + node1.next.next.next.val + Out[165]: 5 + + node1.next.next.next.next.val + Out[166]: 5 + + +Really appreciate any help. \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" new file mode 100644 index 000000000..864326ec7 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" @@ -0,0 +1,14 @@ +# Local Search, 一些新的思路 + +当一个问题我们只关心解法,而不是其达到解的顺序,那么考虑使用local search,比如八皇后问题,我们只关心哪个皇后放哪,根本不关心加入皇后的顺序。 + +local search还能用来解一类问题,求最优。 + + + +> A complete local search algorithm always finds a goal if one exists; an optimal algorithm always finds a global minimum/maximum. + + +一个解八皇后的新思路是我们根本就random来放皇后,然后如果state 合法,就get解答一枚,否则可以Move only to neighboring states,当然,选之剑attack数量最少的state. + +这种方法叫 hill - climbing,很多问题,可能被卡,然后random restart \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/python\347\232\204\345\220\204\347\247\215pass.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/python\347\232\204\345\220\204\347\247\215pass.md" new file mode 100644 index 000000000..c1ac085a8 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/python\347\232\204\345\220\204\347\247\215pass.md" @@ -0,0 +1,123 @@ +#Python的各种Pass + +感觉最近对于pass by reference 和 pass by value又有了一点/一些认识 + + +1. python不允许程序员选择采用传值还是传引用。Python参数传递采用的肯定是“传对象引用”的方式。实际上,这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值——相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象——相当于通过“传值'来传递对象。 +2. 当人们复制列表或字典时,就复制了对象列表的引用同,如果改变引用的值,则修改了原始的参数。 +3. 为了简化内存管理,Python通过引用计数机制实现自动垃圾回收功能,Python中的每个对象都有一个引用计数,用来计数该对象在不同场所分别被引用了多少次。每当引用一次Python对象,相应的引用计数就增1,每当消毁一次Python对象,则相应的引用就减1,只有当引用计数为零时,才真正从内存中删除Python对象。 + + +##### Linked List的例子 + + + +``` +class ListNode(object): + def __init__(self, x): + self.val = x + self.next = None + +node1 = ListNode(1) +node2 = ListNode(2) +node3 = ListNode(3) +node4 = ListNode(4) +node5 = ListNode(5) + +node1.next = node2 +node2.next = node3 +node3.next = node4 +node4.next = node5 + +``` + + + +来改变head + +``` +def testWithPointers1(head): + head.next = None +``` + + + +运行 testWithPointers1(node1) + +然后node1.next 为None了 + +// 可以理解,因为传进去的是head这个可变对象。 + + + +``` +def testWithPointers2(head): + cur = head + cur.next = None +``` + + + +运行 testWithPointers2(node1) +// node1.next 同样为None了 + +Python的object,list都是pass by reference,所以是改变的 + +看另外一个例子: + +``` +def printLinkedList(head): + while head: + print(head) + head = head.next +``` + + +输出 + +``` + printLinkedList(head) + +<__main__.ListNode object at 0x1044c0e10> + +1 + +<__main__.ListNode object at 0x1044c0fd0> + +2 + +<__main__.ListNode object at 0x1044c0c88> + +3 + +<__main__.ListNode object at 0x1044c0be0> + +4 + +<__main__.ListNode object at 0x1044c0780> + +5 + +head + +Out[39]: <__main__.ListNode at 0x1044c0e10> + +``` + +其实这里的head为什么没有改变有点疑惑 + + + +##### String看一下 + + + a = "abc" + + def changeA(s): + s = "" + changeA(a) + + +a 并不会改变,依旧为'abc' + + \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/slide_windows_template.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/slide_windows_template.md" new file mode 100644 index 000000000..919d1c0f9 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/slide_windows_template.md" @@ -0,0 +1,185 @@ +能用此模板解决的题目目前有如下: +[leetcode 003](https://github.com/Lisanaaa/thinking_in_lc/blob/master/003._longest_substring_without_repeating_characters.md), +[leetcode 030](https://github.com/Lisanaaa/thinking_in_lc/edit/master/30._Substring_with_Concatenation_of_All_Words.md), +[leetcode 076](https://github.com/Lisanaaa/thinking_in_lc/blob/master/076._Minimum_Window_Substring.md), +[leetcode 159](https://github.com/Lisanaaa/thinking_in_lc/blob/master/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md), +[leetcode 438](https://github.com/Lisanaaa/thinking_in_lc/blob/master/438._Find_All_Anagrams_in_a_String.md) + + + +带注释python版本 +```python +class Solution(object): + def slideWindowTemplateByLisanaaa(self, s, t): + """ + :type s: str + :type t: str + :rtype: 具体题目具体分析 + """ + # init a collection or int value to save the result according the question. + res = [] + if len(t) > len(s): + return res + + # create a hashmap to save the Characters of the target substring. + # (K, V) = (Character, Frequence of the Characters) + maps = collections.Counter(t) + + # maintain a counter to check whether match the target string. + # must be the map size, NOT the string size because the char may be duplicate. + counter = len(maps.keys()) + + # Two Pointers: begin - left pointer of the window; end - right pointer of the window + begin, end = 0, 0 + + # the length of the substring which match the target string. + length = sys.maxint + + # loop at the begining of the source string + while end < len(s): + if s[end] in maps: + maps[s[end]] -= 1 # plus or minus one + if maps[s[end]] == 0: + counter -= 1 # modify the counter according the requirement(different condition). + end += 1 + + # increase begin pointer to make it invalid/valid again + while counter == 0: # counter condition. different question may have different condition + if s[begin] in maps: + maps[s[begin]] += 1 # plus or minus one + if maps[s[begin]] > 0: + counter += 1 # modify the counter according the requirement(different condition). + begin += 1 + + ''' + type your code here according to the question + 1. save / update(min/max) the result if find a target + 2. result: collections or int value + ''' + return res +``` + +无注释python版本: +```python +class Solution(object): + def slideWindowTemplateByLisanaaa(self, s, t): + res = [] + if len(t) > len(s): + return res + maps = collections.Counter(t) + counter = len(maps.keys()) + begin, end = 0, 0 + length = sys.maxint + while end < len(s): + if s[end] in maps: + maps[s[end]] -= 1 + if maps[s[end]] == 0: + counter -= 1 + end += 1 + while counter == 0: + if s[begin] in maps: + maps[s[begin]] += 1 + if maps[s[begin]] > 0: + counter += 1 + begin += 1 + + ''' + 1. save / update(min/max) the result if find a target + 2. result: collections or int value + ''' + return res +``` +带注释java版本 +```java +public class Solution { + public List slidingWindowTemplateByHarryChaoyangHe(String s, String t) { + //init a collection or int value to save the result according the question. + List result = new LinkedList<>(); + if(t.length()> s.length()) return result; + + //create a hashmap to save the Characters of the target substring. + //(K, V) = (Character, Frequence of the Characters) + Map map = new HashMap<>(); + for(char c : t.toCharArray()){ + map.put(c, map.getOrDefault(c, 0) + 1); + } + //maintain a counter to check whether match the target string. + int counter = map.size();//must be the map size, NOT the string size because the char may be duplicate. + + //Two Pointers: begin - left pointer of the window; end - right pointer of the window + int begin = 0, end = 0; + + //the length of the substring which match the target string. + int len = Integer.MAX_VALUE; + + //loop at the begining of the source string + while(end < s.length()){ + + char c = s.charAt(end);//get a character + + if( map.containsKey(c) ){ + map.put(c, map.get(c)-1);// plus or minus one + if(map.get(c) == 0) counter--;//modify the counter according the requirement(different condition). + } + end++; + + //increase begin pointer to make it invalid/valid again + while(counter == 0 /* counter condition. different question may have different condition */){ + + char tempc = s.charAt(begin);//***be careful here: choose the char at begin pointer, NOT the end pointer + if(map.containsKey(tempc)){ + map.put(tempc, map.get(tempc) + 1);//plus or minus one + if(map.get(tempc) > 0) counter++;//modify the counter according the requirement(different condition). + } + + /* save / update(min/max) the result if find a target*/ + // result collections or result int value + + begin++; + } + } + return result; + } +} +``` + +无注释java版本: +```java +public class Solution { + public List slidingWindowTemplateByHarryChaoyangHe(String s, String t) { + List result = new LinkedList<>(); + if(t.length()> s.length()) return result; + Map map = new HashMap<>(); + for(char c : t.toCharArray()){ + map.put(c, map.getOrDefault(c, 0) + 1); + } + int counter = map.size(); + int begin = 0, end = 0; + int len = Integer.MAX_VALUE; + while(end < s.length()){ + char c = s.charAt(end); + if( map.containsKey(c) ){ + map.put(c, map.get(c)-1); + if(map.get(c) == 0) counter--; + } + end++; + while(counter == 0){ + char tempc = s.charAt(begin); + if(map.containsKey(tempc)){ + map.put(tempc, map.get(tempc) + 1); + if(map.get(tempc) > 0) counter++; + } + + /* + save / update(min/max) the result if find a target + result collections or result int value + */ + + begin++; + } + } + return result; + } +} +``` + diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" new file mode 100644 index 000000000..656ec8a1f --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" @@ -0,0 +1,156 @@ +# Tree Search, Graph Search, DFS, BFS + + +其实原本是根本不知道还有tree search的,只知道graph search,原来graph search就是一般我看到的dfs,bfs,有一个结构来记录visited node,这样在寻找邻居的时候,防止已经visit的node再被visit. + + +## Tree Search + +general tree search pseudocode + + +``` +function TREE_SEARCH(problem, strategy) returns a solution, or failure + initialize the search tree using the initial state of problem + loop do + if there are no candidates for expansion then return failure + choose a leaf node for expansion according to strategy + if the node contains a goal state then return the corresponding solution + else expand the node and add the resulting nodes to the search tree + end +``` + + +## DFS/BFS + +可以让stack/queue记录更多一些的东西,因为反正stack/queue更像通用结构 + +``` + A + / \ + C B + \ / \ + \ D E + \ / + F + + +graph = {'A': set(['B', 'C']), + 'B': set(['A', 'D', 'E']), + 'C': set(['A', 'F']), + 'D': set(['B']), + 'E': set(['B', 'F']), + 'F': set(['C', 'E'])} +``` +### DFS +The implementation below uses the stack data-structure to build-up and return a set of vertices that are accessible within the subjects connected component. Using Python’s overloading of the subtraction operator to remove items from a set, we are able to add only the unvisited adjacent vertices. +```python +def dfs(graph, start): # iterative + visited, stack = [], [start] + while stack: + vertex = stack.pop() + if vertex not in visited: + visited.append(vertex) + stack.extend(graph[vertex] - set(visited)) + return visited +print(dfs(graph, 'A')) # ['A', 'C', 'F', 'E', 'B', 'D'] 这只是其中一种答案 +``` +The second implementation provides the same functionality as the first, however, this time we are using the more succinct recursive form. Due to a common Python gotcha with default parameter values being created only once, we are required to create a new visited set on each user invocation. Another Python language detail is that function variables are passed by reference, resulting in the visited mutable set not having to reassigned upon each recursive call. +```python +def dfs(graph, start, visited=None): # recursive + if visited is None: + visited = [] + print('visiting', start) + visited.append(start) + for next in graph[start]: + if next not in visited: + dfs(graph, next, visited) + return visited +print(dfs(graph, 'A')) # ['A', 'C', 'F', 'E', 'B', 'D'] 这只是其中一种答案 +``` +We are able to tweak both of the previous implementations to return all possible paths between a start and goal vertex. The implementation below uses the stack data-structure again to iteratively solve the problem, yielding each possible path when we locate the goal. Using a generator allows the user to only compute the desired amount of alternative paths. +```python +def dfs_paths(graph, start, goal): # iterative + stack = [(start, [start])] + while stack: + (vertex, path) = stack.pop() + for next in graph[vertex] - set(path): + if next == goal: + yield path + [next] + else: + stack.append((next, path + [next])) +print(list(dfs_paths(graph, 'A', 'F'))) # [['A', 'C', 'F'], ['A', 'B', 'E', 'F']] +``` +The implementation below uses the recursive approach calling the ‘yield from’ PEP380 addition to return the invoked located paths. Unfortunately the version of Pygments installed on the server at this time does not include the updated keyword combination. +```python +def dfs_paths(graph, start, goal, path=None): # recursive + if path is None: + path = [start] + if start == goal: + yield path + for next in graph[start] - set(path): + yield from dfs_paths(graph, next, goal, path + [next]) +print(list(dfs_paths(graph, 'C', 'F'))) # [['C', 'A', 'B', 'E', 'F'], ['C', 'F']] +``` + +### BFS + +Similar to the iterative DFS implementation the only alteration required is to remove the next item from the beginning of the list structure instead of the stacks last. +```python +def bfs(graph, start): # iterative + visited, queue = [], [start] + while queue: + vertex = queue.pop(0) + if vertex not in visited: + visited.append(vertex) + queue.extend(graph[vertex] - set(visited)) + return visited +print(bfs(graph, 'A')) # ['A', 'C', 'B', 'F', 'D', 'E'] +``` +This implementation can again be altered slightly to instead return all possible paths between two vertices, the first of which being one of the shortest such path. +```python +def bfs_paths(graph, start, goal): + queue = [(start, [start])] + while queue: + (vertex, path) = queue.pop(0) + for next in graph[vertex] - set(path): + if next == goal: + yield path + [next] + else: + queue.append((next, path + [next])) +print(list(bfs_paths(graph, 'A', 'F'))) # [['A', 'C', 'F'], ['A', 'B', 'E', 'F']] +``` +Knowing that the shortest path will be returned first from the BFS path generator method we can create a useful method which simply returns the shortest path found or ‘None’ if no path exists. As we are using a generator this in theory should provide similar performance results as just breaking out and returning the first matching path in the BFS implementation. +```python +def bfs_paths(graph, start, goal): + queue = [(start, [start])] + while queue: + (vertex, path) = queue.pop(0) + for next in graph[vertex] - set(path): + if next == goal: + yield path + [next] + else: + queue.append((next, path + [next])) +def shortest_path(graph, start, goal): + try: + return next(bfs_paths(graph, start, goal)) + except StopIteration: + return None +print(shortest_path(graph, 'A', 'F')) # ['A', 'C', 'F'] +``` + +#### Improvement/Follow up + +1. 一旦BFS/DFS与更具体的,更有特性的data structure结合起来,比如binary search tree,那么BFS/DFS会针对这个tree traversal显得更有特性。 +2. it's worth mentioning that there is an optimized queue object in the collections module called [deque](https://docs.python.org/2/library/collections.html#collections.deque)) for which removing items from the beginning ( or popleft ) takes constant time as opposed to O(n) time for lists. + + + +### Resources + +1. [Depth-and Breadth-First Search](https://jeremykun.com/2013/01/22/depth-and-breadth-first-search/) +2. [Edd Mann](http://eddmann.com/posts/depth-first-search-and-breadth-first-search-in-python/) +3. [graph - Depth-first search in Python](https://codereview.stackexchange.com/questions/78577/depth-first-search-in-python) + + + diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\344\275\215\350\277\220\347\256\227.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\344\275\215\350\277\220\347\256\227.md" new file mode 100644 index 000000000..aeaa44c4d --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\344\275\215\350\277\220\347\256\227.md" @@ -0,0 +1,38 @@ +### 位运算 + +位运算包括: 加 减 乘 取反 and 异或 + +- 0110 + 0110 = 0110 * 2 ,也就是0110左移1位 + +- 0011 * 0100 0100 = 4, 一个数乘以 2^n 即是将这个数左移n + +- a ^(~a) = 0 + +- x & (~0 << n ) 这样来看,0取反全部为1,然后将其右移n位,后面的全是0,x & (~0 <>:右移 + + ​ + +Bit Facts and Tricks + +``` +x ^ 0s = x x & 0s = 0 x | 0s = x +x ^ 1s = ~x x & 1s = x x | 1s = 1s +x ^ x = 0 x & x = x x | x = x +``` + diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" new file mode 100644 index 000000000..767617664 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" @@ -0,0 +1,194 @@ +### 全排列算法 + + +#### 46. Permutations + + +Given a collection of distinct numbers, return all possible permutations. + +For example, +[1,2,3] have the following permutations: + + [ + [1,2,3], + [1,3,2], + [2,1,3], + [2,3,1], + [3,1,2], + [3,2,1] + ] + + +#####从空开始加 + +先跳离开这道题,来看类似的'ABC',我们要求它的全排列 + + +``` +def recPermute(sofar, rest): + if rest == '': + print sofar + else: + for i in range(len(rest)): + nxt = sofar + rest[i] + remaining = rest[:i] + rest[i+1:] + recPermute(nxt, remaining) + +// "wrapper" function +def listPermute(s): + recPermute('',s) +``` + +会正确输出`ABC ACB BAC BCA CAB CBA`,题目依靠的是每次我们从余下的字母中选一个,如果画图则会是这样: + + +``` + A B C + B C A C A B + C B C A B A +``` + +时间复杂度应该是O(n!) + +- n choose 1 +- n-1 choose 1 +- ... + + + +#####另一种市面上常见思路是交换: + +思路是这样的,同样看上面的图: + +- n个元素的全排列 = (n-1)个元素的全排列 + 另一个元素作为前缀 +- 如果只有一个元素,那么这个元素本身就是它的全排列 +- 不断将每个元素放作第一个元素,然后将这个元素作为前缀,并将其余元素继续全排列,等到出口,出口出去后还需要还原数组 + + +这个用数组来测试更容易写代码和直观: + + +``` +def recPermute(nums,begin): + n = len(nums) + if begin == n: + print nums, + + for i in range(begin,n): + nums[begin], nums[i] = nums[i],nums[begin] + recPermute(nums,begin+1) + nums[begin],nums[i] = nums[i],nums[begin] + +recPermute(['A','B','C'],0) + +``` + +这样的写法更容易理解: + + +```python +class Solution: + # @param num, a list of integer + # @return a list of lists of integers + def permute(self, num): + if len(num) == 0: return [] + if len(num) == 1: return [num] + res = [] + for i in range(len(num)): + x = num[i] + xs = num[:i] + num[i+1:] + for j in self.permute(xs): + res.append([x] + j) + return res +``` + +每次用一个没有用过的头元素,然后加上全排列产生的结果. + +如果分析复杂度,应该也是O(n!) + + +#### 47. Permutations II + + +最简单的想法: + +- 排序 +- 如果碰到重复的就继续处理下一个 + +``` +class Solution(object): + def permuteUnique(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + if len(nums) == 0: return [] + if len(nums) == 1: return [nums] + res = [] + nums.sort() + for i in range(len(nums)): + if i > 0 and nums[i] == nums[i-1]: continue + for j in self.permuteUnique(nums[:i] + nums[i+1:]): + res.append([nums[i]] + j) + return res + +``` + + + + +#### 31. Next Permutation + +实际上这个题目也就是Generation in lexicographic order, + +wikipedia 和 [这里](https://www.nayuki.io/page/next-lexicographical-permutation-algorithm) 有很好,很精妙的算法,也有点two pointer的意思 + + +``` +1. Find the highest index i such that s[i] < s[i+1]. If no such index exists, the permutation is the last permutation. +2. Find the highest index j > i such that s[j] > s[i]. Such a j must exist, since i+1 is such an index. +3. Swap s[i] with s[j]. +4. Reverse the order of all of the elements after index i till the last element. +``` + + +看例子: + +125430 + + +- 从末尾开始,找到decreasing subsequence,5430,因为来调5330无论怎么调,都不可能有比它更小的,数也被自然的分成两部分(1,2) 和 (5,4,3,0) +- 下一步是找这个sequence里面第一个比前面部分,比2大的,3,也很容易理解,因为下一个必定是(1,3)打头 +- 交换 3和2 ,变成 (1,3,5,4,2,0),再把后面的部分reverse,得到后面部分可得到的最小的 + +这个时候,得到下一个sequence 130245 + + + +``` +class Solution(object): + def nextPermutation(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + m, n = 0, 0 + for i in range(len(nums) - 2, 0 , -1): + if nums[i] < nums[i+1]: + m = i + break + + for i in range(len(nums) - 1, 0 , -1): + if nums[i] > nums[m]: + n = i + break + + if m < n : + nums[m], nums[n] = nums[n], nums[m] + nums[m+1:] = nums[len(nums):m:-1] + else: + nums = nums.reverse() +``` + + +所以可以用这个next permutation来解46/47也可以,然后我兴奋了一下,这个算法很快的!然后我又冷静了,因为permutation的个数是O(n!)个啊|||,所以也不可能有啥大的提升吧 diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\345\205\253\346\216\222\345\272\217.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\345\205\253\346\216\222\345\272\217.md" new file mode 100644 index 000000000..83b327202 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\345\205\253\346\216\222\345\272\217.md" @@ -0,0 +1,386 @@ +## 前言 +八大排序,三大查找是《数据结构》当中非常基础的知识点,在这里为了复习顺带总结了一下常见的八种排序算法。 +常见的八大排序算法,他们之间关系如下: + +![](/images/SortingAlgorithm/八大排序算法总结.png) + +他们的性能比较: + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +### 直接插入排序 (Insertion sort) + +![](/images/SortingAlgorithm/直接插入排序.gif) + +直接插入排序的核心思想就是:将数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已排序的元素小,则交换,直到全部元素都比较过。 +因此,从上面的描述中我们可以发现,直接插入排序可以用两个循环完成: + +1. 第一层循环:遍历待比较的所有数组元素 +2. 第二层循环:将本轮选择的元素(selected)与已经排好序的元素(ordered)相比较。 + - 如果```selected > ordered```,那么将二者交换 + +```python +#直接插入排序 +def insert_sort(L): + #遍历数组中的所有元素,其中0号索引元素默认已排序,因此从1开始 + for x in range(1,len(L)): + #将该元素与已排序好的前序数组依次比较,如果该元素小,则交换 + #range(x-1,-1,-1):从x-1倒序循环到0 + for i in range(x-1,-1,-1): + #判断:如果符合条件则交换 + if L[i] > L[i+1]: + L[i], L[i+1] = L[i+1], L[i] +``` +### 希尔排序 (Shell sort) + +![](/images/SortingAlgorithm/希尔排序.png) + +希尔排序的算法思想:将待排序数组按照步长gap进行分组,然后将每组的元素利用直接插入排序的方法进行排序;每次将gap折半减小,循环上述操作;当gap=1时,利用直接插入,完成排序。 +同样的:从上面的描述中我们可以发现:希尔排序的总体实现应该由三个循环完成: + +1. 第一层循环:将gap依次折半,对序列进行分组,直到gap=1 +2. 第二、三层循环:也即直接插入排序所需要的两次循环。具体描述见上。 + +```python +#希尔排序 +def insert_shell(L): + #初始化gap值,此处利用序列长度的一半为其赋值 + gap = int(len(L)/2) + #第一层循环:依次改变gap值对列表进行分组 + while (gap >= 1): + #下面:利用直接插入排序的思想对分组数据进行排序 + #range(gap,len(L)):从gap开始 + for x in range(gap,len(L)): + #range(x-gap,-1,-gap):从x-gap开始与选定元素开始倒序比较,每个比较元素之间间隔gap + for i in range(x-gap,-1,-gap): + #如果该组当中两个元素满足交换条件,则进行交换 + if L[i] > L[i+gap]: + L[i], L[i+gap] = L[i+gap], L[i] + #while循环条件折半 + gap = int((gap/2)) +``` + +### 简单选择排序 (Selection sort) + +![](/images/SortingAlgorithm/简单选择排序.gif) + +简单选择排序的基本思想:比较+交换。 + +1. 从待排序序列中,找到关键字最小的元素; +2. 如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换; +3. 从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。 +因此我们可以发现,简单选择排序也是通过两层循环实现。 + - 第一层循环:依次遍历序列当中的每一个元素 + - 第二层循环:将遍历得到的当前元素依次与余下的元素进行比较,符合最小元素的条件,则交换。 + +```python +# 简单选择排序 +def select_sort(L): +#依次遍历序列中的每一个元素 + for x in range(0,len(L)): +#将当前位置的元素定义此轮循环当中的最小值 + minimum = L[x] +#将该元素与剩下的元素依次比较寻找最小元素 + for i in range(x+1,len(L)): + if L[i] < minimum: + L[i], minimum = minimum, L[i] +#将比较后得到的真正的最小值赋值给当前位置 + L[x] = minimum +``` + +### 堆排序 (Heap sort) + +#### 堆的概念 + +堆:本质是一种数组对象。特别重要的一点性质:任意的叶子节点小于(或大于)它所有的父节点。对此,又分为大顶堆和小顶堆,大顶堆要求节点的元素都要大于其孩子,小顶堆要求节点元素都小于其左右孩子,两者对左右孩子的大小关系不做任何要求。 +利用堆排序,就是基于大顶堆或者小顶堆的一种排序方法。下面,我们通过大顶堆来实现。 + +基本思想: +堆排序可以按照以下步骤来完成: + +1. 首先将序列构建称为大顶堆; + +(这样满足了大顶堆那条性质:位于根节点的元素一定是当前序列的最大值) + +![](/images/SortingAlgorithm/构建大顶堆.png) + +2. 取出当前大顶堆的根节点,将其与序列末尾元素进行交换; + +(此时:序列末尾的元素为已排序的最大值;由于交换了元素,当前位于根节点的堆并不一定满足大顶堆的性质) + +3. 对交换后的n-1个序列元素进行调整,使其满足大顶堆的性质; + +![](/images/SortingAlgorithm/调整大顶堆.png) + +4. 重复2.3步骤,直至堆中只有1个元素为止 + +```python +#-------------------------堆排序-------------------------------- +#**********获取左右叶子节点********** +def LEFT(i): + return 2*i + 1 +def RIGHT(i): + return 2*i + 2 +#********** 调整大顶堆 ********** +#L:待调整序列 length: 序列长度 i:需要调整的结点 +def adjust_max_heap(L, length, i): +#定义一个int值保存当前序列最大值的下标 + largest = i +#获得序列左右叶子节点的下标 + left, right = LEFT(i), RIGHT(i) +#当左叶子节点的下标小于序列长度 并且 左叶子节点的值大于父节点时,将左叶子节点的下标赋值给largest + if (left < length) and (L[left] > L[i]): + largest = left +#当右叶子节点的下标小于序列长度 并且 右叶子节点的值大于父节点时,将右叶子节点的下标值赋值给largest + if (right < length) and (L[right] > L[largest]): + largest = right +#如果largest不等于i 说明当前的父节点不是最大值,需要交换值 + if (largest != i): + L[i], L[largest] = L[largest], L[i] + # 执行递归操作:两个任务:1 寻找最大值的下标;2.最大值与父节点交换 + adjust_max_heap(L, length, largest) +#********** 建立大顶堆 ********** +def build_max_heap(L): + length = len(L) + for x in range(int((length-1)/2), -1, -1): + adjust_max_heap(L, length, x) +#********** 堆排序 ********** +def heap_sort(L): +#先建立大顶堆,保证最大值位于根节点;并且父节点的值大于叶子结点 + build_max_heap(L) +#i:当前堆中序列的长度.初始化为序列的长度 + i = len(L) +#执行循环:1. 每次取出堆顶元素置于序列的最后(len-1,len-2,len-3...) +# 2. 调整堆,使其继续满足大顶堆的性质,注意实时修改堆中序列的长度 + while (i > 0): + L[i-1], L[0] = L[0], L[i-1] +#堆中序列长度减1 + i -= 1 +#调整大顶堆 + adjust_max_heap(L, i, 0) +``` +### 冒泡排序 (Bubble sort) + +![](/images/SortingAlgorithm/冒泡排序.gif) + +冒泡排序思路比较简单: + +1. 将序列当中的左右元素,依次比较,保证右边的元素始终大于左边的元素; +( 第一轮结束后,序列最后一个元素一定是当前序列的最大值;) +2. 对序列当中剩下的n-1个元素再次执行步骤1。 +3. 对于长度为n的序列,一共需要执行n-1轮比较 +(利用while循环可以减少执行次数) + +```python +#冒泡排序 +def bubble_sort(L): + length = len(L) +#序列长度为length,需要执行length-1轮交换 + for x in range(1, length): +#对于每一轮交换,都将序列当中的左右元素进行比较 +#每轮交换当中,由于序列最后的元素一定是最大的,因此每轮循环到序列未排序的位置即可 + for i in range(0, length-x): + if L[i] > L[i+1]: + L[i], L[i+1] = L[i+1], L[i] +``` + +### 快速排序 (Quick sort) + +![](/images/SortingAlgorithm/快速排序.gif) + +快速排序的基本思想:挖坑填数+分治法 + +1. 从序列当中选择一个基准数(pivot) +在这里我们选择序列当中第一个数作为基准数 +2. 将序列当中的所有数依次遍历,比基准数大的位于其右侧,比基准数小的位于其左侧 +3. 重复步骤1.2,直到所有子集当中只有一个元素为止。 + +用伪代码描述如下: +- i =L; j = R; 将基准数挖出形成第一个坑a[i]。 +- j--由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中。 +- i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中。 +- 再重复执行2,3二步,直到i==j,将基准数填入a[i]中 + +```python +#快速排序 +#L:待排序的序列;start排序的开始index,end序列末尾的index +#对于长度为length的序列:start = 0;end = length-1 +def quick_sort(L, start, end): + if start < end: + i, j, pivot = start, end, L[start] + while i < j: +#从右开始向左寻找第一个小于pivot的值 + while (i < j) and (L[j] >= pivot): + j -= 1 +#将小于pivot的值移到左边 + if (i < j): + L[i] = L[j] + i += 1 +#从左开始向右寻找第一个大于pivot的值 + while (i < j) and (L[i] <= pivot): + i += 1 +#将大于pivot的值移到右边 + if (i < j): + L[j] = L[i] + j -= 1 +#循环结束后,说明 i=j,此时左边的值全都小于pivot,右边的值全都大于pivot +#pivot的位置移动正确,那么此时只需对左右两侧的序列调用此函数进一步排序即可 +#递归调用函数:依次对左侧序列:从0 ~ i-1//右侧序列:从i+1 ~ end + L[i] = pivot +#左侧序列继续排序 + quick_sort(L, start, i-1) +#右侧序列继续排序 + quick_sort(L, i+1, end) +``` + +### 归并排序 (Merge sort) + +![](/images/SortingAlgorithm/归并排序.gif) + +1. 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个典型的应用。它的基本操作是:将已有的子序列合并,达到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。 +2. 归并排序其实要做两件事: + - 分解----将序列每次折半拆分 + - 合并----将划分后的序列段两两排序合并 +因此,归并排序实际上就是两个操作,拆分+合并 +3. 如何合并? + - L[first...mid]为第一段,L[mid+1...last]为第二段,并且两端已经有序,现在我们要将两端合成达到L[first...last]并且也有序。 + - 首先依次从第一段与第二段中取出元素比较,将较小的元素赋值给temp[] + - 重复执行上一步,当某一段赋值结束,则将另一段剩下的元素赋值给temp[] + - 此时将temp[]中的元素复制给L[],则得到的L[first...last]有序 +4. 如何分解? + - 在这里,我们采用递归的方法,首先将待排序列分成A,B两组; + - 然后重复对A、B序列分组; + - 直到分组后组内只有一个元素,此时我们认为组内所有元素有序,则分组结束。 + +```python +# 归并排序 +#这是合并的函数 +# 将序列L[first...mid]与序列L[mid+1...last]进行合并 +def mergearray(L, first, mid, last, temp): +#对i,j,k分别进行赋值 + i, j, k = first, mid+1, 0 +#当左右两边都有数时进行比较,取较小的数 + while (i <= mid) and (j <= last): + if L[i] <= L[j]: + temp[k] = L[i] + i += 1 + k += 1 + else: + temp[k] = L[j] + j += 1 + k += 1 +#如果左边序列还有数 + while (i <= mid): + temp[k] = L[i] + i += 1 + k += 1 +#如果右边序列还有数 + while (j <= last): + temp[k] = L[j] + j += 1 + k += 1 +#将temp当中该段有序元素赋值给L待排序列使之部分有序 + for x in range(0, k): + L[first+x] = temp[x] +# 这是分组的函数 +def merge_sort(L, first, last, temp): + if first < last: + mid = int(((first + last) / 2)) +#使左边序列有序 + merge_sort(L, first, mid, temp) +#使右边序列有序 + merge_sort(L, mid+1, last, temp) +#将两个有序序列合并 + mergearray(L, first, mid, last, temp) +# 归并排序的函数 +def merge_sort_array(L): +#声明一个长度为len(L)的空列表 + temp = len(L)*[None] +#调用归并排序 + merge_sort(L, 0, len(L)-1, temp) +``` + +### 基数排序 (Radix sort) + +![](/images/SortingAlgorithm/基数排序.gif) + +1. 基数排序:通过序列中各个元素的值,对排序的N个元素进行若干趟的“分配”与“收集”来实现排序。 + - 分配:我们将L[i]中的元素取出,首先确定其个位上的数字,根据该数字分配到与之序号相同的桶中 + - 收集:当序列中所有的元素都分配到对应的桶中,再按照顺序依次将桶中的元素收集形成新的一个待排序列L[ ] + - 对新形成的序列L[]重复执行分配和收集元素中的十位、百位...直到分配完该序列中的最高位,则排序结束 +2. 根据上述“基数排序”的展示,我们可以清楚的看到整个实现的过程 + +```python +#************************基数排序**************************** +#确定排序的次数 +#排序的顺序跟序列中最大数的位数相关 +def radix_sort_nums(L): + maxNum = L[0] +#寻找序列中的最大数 + for x in L: + if maxNum < x: + maxNum = x +#确定序列中的最大元素的位数 + times = 0 + while (maxNum > 0): + maxNum = int((maxNum/10)) + times += 1 + return times +#找到num从低到高第pos位的数据 +def get_num_pos(num, pos): + return (int((num/(10**(pos-1))))) % 10 +#基数排序 +def radix_sort(L): + count = 10 * [None] #存放各个桶的数据统计个数 + bucket = len(L) * [None] #暂时存放排序结果 +#从低位到高位依次执行循环 + for pos in range(1, radix_sort_nums(L)+1): + #置空各个桶的数据统计 + for x in range(0, 10): + count[x] = 0 + #统计当前该位(个位,十位,百位....)的元素数目 + for x in range(0, len(L)): + #统计各个桶将要装进去的元素个数 + j = get_num_pos(int(L[x]), pos) + count[j] += 1 + #count[i]表示第i个桶的右边界索引 + for x in range(1,10): + count[x] += count[x-1] + #将数据依次装入桶中 + for x in range(len(L)-1, -1, -1): + #求出元素第K位的数字 + j = get_num_pos(L[x], pos) + #放入对应的桶中,count[j]-1是第j个桶的右边界索引 + bucket[count[j]-1] = L[x] + #对应桶的装入数据索引-1 + count[j] -= 1 + # 将已分配好的桶中数据再倒出来,此时已是对应当前位数有序的表 + for x in range(0, len(L)): + L[x] = bucket[x] +``` + +## 运行时间实测 + +10w数据 +``` +直接插入排序:1233.581131 +希尔排序:1409.8012320000003 +简单选择排序:466.66974500000015 +堆排序:1.2036720000000969 +冒泡排序:751.274449 +#**************************************************** +快速排序:1.0000003385357559e-06 +#快速排序有误:实际上并未执行 +#RecursionError: maximum recursion depth exceeded in comparison +#**************************************************** +归并排序:0.8262230000000272 +基数排序:1.1162899999999354 +``` +从运行结果上来看,堆排序、归并排序、基数排序真的快。 +对于快速排序迭代深度超过的问题,可以将考虑将快排通过非递归的方式进行实现。 + +## Resources + +1. [算法导论》笔记汇总](http://mindlee.com/2011/08/21/study-notes-directory/) +2. [八大排序算法的 Python 实现](http://python.jobbole.com/82270/) +3. [数据结构常见的八大排序算法(详细整理)](https://www.jianshu.com/p/7d037c332a9d) diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" new file mode 100644 index 000000000..0d4afa96a --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" @@ -0,0 +1,114 @@ +###子集合问题 + +####78. Subsets + +子集合是全排列的好朋友,也是combination组合的好朋友,排列·组合·子集,他们三个都是好朋友. + + +#####从空开始加 + +同样先来看'ABC' + +``` +def recsubsets(sofar, rest): + if rest == '': + print sofar, + else: + recsubsets(sofar, rest[1:]) + recsubsets(sofar + rest[0], rest[1:]) + +def listsubsets(s): + recsubsets('',s) + + +listsubsets('ABC') +``` + +##### 市面流行思路 + +市面上流行的思路: + +- [[],[1]] 是 [1] 的子集合 +- [[],[1],[2],[1,2]] 是 [1,2] 的子集合,实际上就是1的子集合们加了一个2 + + +所以用python写起来也很简单/精美 + +``` +def subsets(nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + results = [[]] + for num in nums: + results.extend([result + [num] for result in results]) + return results +``` +我在这里犯过错,所以这一句 + +`results.extend([result + [num] for result in results])` 实际上等于: + + +``` +tmp = [] +for result in results: + tmp.append(result + [num]) +results.extend(tmp) +``` + + + + + +#### 90. Subsets II + + +要去重了,比如如果有 [1,2,2],那么解答为: + + + [ + [2], + [1], + [1,2,2], + [2,2], + [1,2], + [] + ] + + +现在来观察规律,与之前有不同之处是我们需要一个位置来mark,因为不再需要往之前出现过的地方再加了,看这个: + + +``` +[[],[1]] 是 [1] 的子集合 +[[],[1],[2],[1,2]] 是 [1,2] 的子集合,实际上就是1的子集合们加了一个2 +新来的2不能再从头开始加了,它需要从[ .., [2],[1,2] ]加 才是合理的 +``` + +所以看到非常精妙的代码 + + +``` +def subsets(nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + nums.sort() + result = [[]] + temp_size = 0 + + for i in range(len(nums)): + start = temp_size if i >= 1 and nums[i] == nums[i-1] else 0 + temp_size = len(result) + #print start,temp_size,result + for j in range(start, temp_size): + result.append(result[j] + [nums[i]]) + print result + +subsets([1,2,2]) +``` + +这里这个start是来记录了之前一次数组的长度,temp_size记住目前数组的长度,然后用这个来达到去重的目的,非常聪明 + diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\346\200\273\347\273\223.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\346\200\273\347\273\223.md" new file mode 100644 index 000000000..99fcba752 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\346\200\273\347\273\223.md" @@ -0,0 +1,120 @@ +# 1 +```solution```下自定义函数```func(self, fargs, *args, **kwargs)```, 调用时使用```self.func()```的格式 + +# 2 +```not fargs``` 和 ```fargs == None```不一样,前者```fargs```可能为[], '', 0, etc + +# 3 +递归问题 +Any problem can be solved using dp. Solving using a greedy strategy is harder though, since you need to prove that greedy will work for that problem. There are some tell-tale signs of a problem where greedy may be applicable, but isn’t immediately apparent. Example: + +- Choice of an element depends only on its immediate neighbours (wiggle sort). +- Answer is monotonically non-decreasing or non-increasing (sorting). This is also applicable for LIS for example. +- Anything that requires lexicographically largest or smallest of something. +- Anything where processing the input in sorted order will help. +- Anything where processing the input in forward or reverse (as given) will help. +- Anything which requires you to track the minimum or maximum of something (think of sliding window problems). + +There’s matroid theory which deal with greedy algorithms, but I don’t really understand it. If someone does, I’ll be super grateful to them to explain it to me in simple language! + +In general, try to see if for a problem, the solution doesn’t depend on a lot of history about the solution itself, but the next part of the solution is somewhat independent from the rest of the solution. These are all indicative of the fact that a greedy strategy could be applicable. + +# 4 +[Counter.elements()](https://docs.python.org/2/library/collections.html) + +# 5 +测试案例写法 + +```python +import unittest +class Solution(object): + def isMatch(self, s, p): + """ + :type s: str + :type p: str + :rtype: bool + """ + m, n = len(s), len(p) + dp = [ [0 for i in range(n+1)] for j in range(m+1)] + + dp[0][0] = 1 + + # init the first line + for i in range(2,n+1): + if p[i-1] == '*': + dp[0][i] = dp[0][i-2] + + for i in range(1,m+1): + for j in range(1,n+1): + if p[j-1] == '*': + if p[j-2] != s[i-1] and p[j-2] != '.': + dp[i][j] = dp[i][j-2] + elif p[j-2] == s[i-1] or p[j-2] == '.': + dp[i][j] = dp[i-1][j] or dp[i][j-2] + + elif s[i-1] == p[j-1] or p[j-1] == '.': + dp[i][j] = dp[i-1][j-1] + + return dp[m][n] == 1 + + +class TestSolution(unittest.TestCase): + def test_none_0(self): + s = "" + p = "" + self.assertTrue(Solution().isMatch(s, p)) + + def test_none_1(self): + s = "" + p = "a" + self.assertFalse(Solution().isMatch(s, p)) + + def test_no_symbol_equal(self): + s = "abcd" + p = "abcd" + self.assertTrue(Solution().isMatch(s, p)) + + def test_no_symbol_not_equal_0(self): + s = "abcd" + p = "efgh" + self.assertFalse(Solution().isMatch(s, p)) + + def test_no_symbol_not_equal_1(self): + s = "ab" + p = "abb" + self.assertFalse(Solution().isMatch(s, p)) + + def test_symbol_0(self): + s = "" + p = "a*" + self.assertTrue(Solution().isMatch(s, p)) + + def test_symbol_1(self): + s = "a" + p = "ab*" + self.assertTrue(Solution().isMatch(s, p)) + + def test_symbol_2(self): + # E.g. + # s a b b + # p 1 0 0 0 + # a 0 1 0 0 + # b 0 0 1 0 + # * 0 1 1 1 + s = "abb" + p = "ab*" + self.assertTrue(Solution().isMatch(s, p)) + + +if __name__ == "__main__": + unittest.main() + + + +输出: +........ + +Ran 8 tests in 0.001s + +OK +``` diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\347\273\204\345\220\210\351\227\256\351\242\230.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\347\273\204\345\220\210\351\227\256\351\242\230.md" new file mode 100644 index 000000000..33f295e82 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\347\273\204\345\220\210\351\227\256\351\242\230.md" @@ -0,0 +1,84 @@ +### 组合问题 + + +#### 77.Combinations + + +##### 会超时的recursion + + + +``` +class Solution(object): + def combine(self, n, k): + """ + :type n: int + :type k: int + :rtype: List[List[int]] + """ + ans = [] + self.dfs(n, k, 1, [], ans) + return ans + + def dfs(self, n, k ,start, lst, ans): + if k == 0 : + ans.append(lst) + return + for i in range(start, n+1): + self.dfs(n, k - 1, i + 1,lst +[i], ans) +``` + +理解方式 + +``` + + 1 2 3 + 12 13 14 23 24 34 +``` + +可以参照这里 + + + + + +##### 市面上流行解法 + +递归的思想: n选k + +- 如果 k==n ,则全选。 +- n > k 又可以分成两类: + - 选了n, 则在余下的n-1中选k-1 + - 没有选n, 则在余下的n-1中选k + +注意一下会有两个base case,因为k在不断减小和n在不断减小,所以写起来可以这样: + + +``` +def combine(n,k): + if k == 1: + return [[i+1] for i in range(n)] + if n == k: + return [range(1, k+1)] + # choose n , not choose n + return [r + [n] for r in combine(n-1,k-1)] + combine(n-1,k) + + +print combine(20,16) +``` + + +#### 39. Combination Sum + + +使用正常递归思路 + + +#### 40. Combination Sum II + +重复做跳过处理 + +#### 216. Combination Sum III + + +#### 377. Combination Sum IV diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\351\200\222\345\275\222_recursion.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\351\200\222\345\275\222_recursion.md" new file mode 100644 index 000000000..413872965 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\351\200\222\345\275\222_recursion.md" @@ -0,0 +1,39 @@ +#递归 Recursion + +### 递归 + +递归绝对是一个非常重要的概念。比如安利? 不断的delegate,本来想要完成1000个人的销售,找10个人,每人完成100人的,这10个人每人再去找10个人,每人完成10人的销售,这样就完成了1000人的销售(不懂安利是否这样,拿来举例)。 + + +递归之所以重要,这里面存在的概念太多了,首先上面这个例子里面就有divide and conquer的意思,把task divide小,然后来解决它。 + + +同样有趣的例子 → 吃完一个bowl of chips: + +- for loop,知道多少薯片,然后从0开始吃到最后 +- while, while 碗里还有薯片,就吃 +- 递归,吃一片,然后继续吃剩下的 N - 1 片,直到碗里的薯片数量只剩下0片了 + + +典型的例子: + +- pow(x,n) +- isPalindrome +- TowerofHanoi +- binarySearch + + + +### 链表, 树, 图 + +链表(linked list) 是数据结构的基础,而链表本身就是具有递归特性的,看C++中对于linked list node的定义, next指向本身这样的结构,就是再这个node定义还未完成之时,我们已经指向自己。 + + +``` +struct node{ + int data; + node* next; +}; +``` + +binary tree定义就是靠递归来实现的。 diff --git a/docs/Leetcode_Solutions/Python/001._two_sum.md b/docs/Leetcode_Solutions/Python/001._two_sum.md new file mode 100644 index 000000000..120db871d --- /dev/null +++ b/docs/Leetcode_Solutions/Python/001._two_sum.md @@ -0,0 +1,43 @@ +### 1. Two Sum + +题目: + + + +难度: + +Easy + + +思路 + +可以用O(n^2) loop + +但是也可以牺牲空间换取时间,异常聪明的AC解法 + +``` + 2 7 11 15 + 不存在 存在之中 +lookup {2:0} [0,1] +``` + +一但字典内有了这个 `target - 当前数字`,找到它的index和当前index一起返回。 + + +```python +class Solution(object): + def twoSum(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[int] + """ + lookup = {} + for i, num in enumerate(nums): + if target - num in lookup: + return [lookup[target - num],i] + lookup[num] = i + return [] +``` + + diff --git a/docs/Leetcode_Solutions/Python/002._add_two_numbers.md b/docs/Leetcode_Solutions/Python/002._add_two_numbers.md new file mode 100644 index 000000000..7ead7c7c4 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/002._add_two_numbers.md @@ -0,0 +1,37 @@ +### 2. Add Two Numbers + +题目: + + + +难度 : Medium + + +跟plus One, add Binary 玩的同一种花样 + + +```python +class Solution(object): + def addTwoNumbers(self, l1, l2): + """ + :type l1: ListNode + :type l2: ListNode + :rtype: ListNode + """ + #easiest case + if l1 == None: + return l2 + if l2 == None: + return l1 + + if l1.val + l2.val < 10: + l3 = ListNode(l1.val + l2.val) + l3.next = self.addTwoNumbers(l1.next, l2.next) + + elif l1.val + l2.val >= 10: + l3 = ListNode(l1.val + l2.val - 10) + tmp = ListNode(1) + tmp.next = None + l3.next = self.addTwoNumbers(l1.next, self.addTwoNumbers(l2.next ,tmp)) + return l3 +``` diff --git a/docs/Leetcode_Solutions/Python/003._longest_substring_without_repeating_characters.md b/docs/Leetcode_Solutions/Python/003._longest_substring_without_repeating_characters.md new file mode 100644 index 000000000..8b8ef18eb --- /dev/null +++ b/docs/Leetcode_Solutions/Python/003._longest_substring_without_repeating_characters.md @@ -0,0 +1,84 @@ +### 3. Longest Substring Without Repeating Characters + + +题目: + + + +难度: + +Medium + + + +思路 + +粗一看是dp,细一看是greedy + +我们先从第一个字符开始,只要碰到已经出现过的字符我们就必须从之前出现该字符的index开始重新往后看。 + +例如‘xyzxlkjh’,当看到第二个‘x’时我们就应该从y开始重新往后看了。 + +那么怎么判断字符已经出现过了呢?我们使用一个hashmap,将每一个已经阅读过的字符作为键,而它的值就是它在原字符串中的index,如果我们现在的字符不在hashmap里面我们就把它加进hashmap中去,因此,只要目前的这个字符在该hashmap中的值大于等于了这一轮字符串的首字符,就说明它已经出现过了,我们就将首字符的index加1,即从后一位又重新开始读,然后比较目前的子串长度与之前的最大长度,取大者。 + +### 程序变量解释 + +- l(字母L) 代表目前最大子串的长度 +- start 是这一轮未重复子串首字母的index +- maps 放置每一个字符的index,如果maps.get(s[i], -1)大于等于start的话,就说明字符重复了,此时就要重置 l(字母L) 和start的值了, + + + +```python +class Solution(object): + def lengthOfLongestSubstring(self, s): + """ + :type s: str + :rtype: int + + """ + l, start, n = 0, 0, len(s) + maps = {} + for i in range(n): + start = max(start, maps.get(s[i], -1)+1) + l = max(l, i - start+1) + maps[s[i]] = i + return l +``` + +```python +class Solution(object): + def lengthOfLongestSubstring(self, s): + """ + :type s: str + :rtype: int + """ + maps = {} + begin, end, counter, d = 0, 0, 0, 0 + while end < len(s): + if s[end] in maps: + maps[s[end]] += 1 + else: + maps[s[end]] = 1 + if maps[s[end]] > 1: + counter += 1 + end += 1 + while counter > 0: + if maps[s[begin]] > 1: + counter -= 1 + maps[s[begin]] -= 1 + begin += 1 + d = max(d, end - begin) + return d +``` + + + + + + +Author: Keqi Huang + +If you like it, please spread your support + +![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) diff --git a/docs/Leetcode_Solutions/Python/004._median_of_two_sorted_arrays.md b/docs/Leetcode_Solutions/Python/004._median_of_two_sorted_arrays.md new file mode 100644 index 000000000..8ad14bbb6 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/004._median_of_two_sorted_arrays.md @@ -0,0 +1,260 @@ +### 4. Median of Two Sorted Arrays + +题目: + + + +难度: + +Hard + + +一看到的时候,觉得跟CLRS书上的一道习题类似 +求X[1....n] Y[1....n] 的 median + +习题 9.3-8 + + +Let X[1..n] and Y [1..n] be two arrays, each containing n numbers already in sorted order. Give an O(lg n)-time algorithn to find the median of all 2n elements in arrays X and Y . + + +> The median can be obtained recursively as follows. Pick the median of the sorted array A. This is just O(1) time as median is the n/2th element in the sorted array. Now compare the median of A, call is a∗ with median of B, b∗. We have two cases. + +- a∗ < b∗ : In this case, the elements in B[n/2 ···n] are also greater than a . So the median cannot lie in either A[1 · · · n/2 ] or B[n/2 · · · n]. So we can just throw these away and recursively + +- a∗ > b∗ : In this case, we can still throw away B[1··· n/2] and also A[ n/ · · · n] and solve a smaller subproblem recursively. + + +In either case, our subproblem size reduces by a factor of half and we spend only constant time to compare the medians of A and B. So the recurrence relation would be T (n) = T (n/2) + O(1) which has a solution T (n) = O(log n). + + +divide and conquer + +- 如果X[n/2] == Y[n/2],则找到,return +- 如果X[n/2] < Y[n/2],找X[n/2+1….n]和Y[1,2…n/2]之间 +- 否则找X[1..n/2]和Y[n/2…n] + + + + +但是实际上不同,这里需要考虑的问题更多: + +- 两个数组长度不一样 +- 并不是只找一个median,如果median有两个,需要算平均 + +思路 + +把它转化成经典的findKth问题 + +参考: + + +首先转成求A和B数组中第k小的数的问题, 然后用k/2在A和B中分别找。 + + +比如k = 6, 分别看A和B中的第3个数, 已知 A1 < A2 < A3 < A4 < A5... 和 B1 < B2 < B3 < B4 < B5..., 如果A3 <= B3, 那么第6小的数肯定不会是A1, A2, A3, 因为最多有两个数小于A1, 三个数小于A2, 四个数小于A3。 关键点是从 k/2 开始来找。 + + + +B3至少大于5个数, 所以第6小的数有可能是B1 (A1 < A2 < A3 < A4 < A5 < B1), 有可能是B2 (A1 < A2 < A3 < B1 < A4 < B2), 有可能是B3 (A1 < A2 < A3 < B1 < B2 < B3)。那就可以排除掉A1, A2, A3, 转成求A4, A5, ... B1, B2, B3, ...这些数中第3小的数的问题, k就被减半了。每次都假设A的元素个数少, pa = min(k/2, lenA)的结果可能导致k == 1或A空, 这两种情况都是终止条件。 + + +发问,为什么要从k/2开始寻找,依旧k = 6, 我可以比较A1 和 B5的关系么,可以这样做,但是明显的问题出现在如果A1 > B5,那么这个第6小的数应该存在于B6和A1中。 + +如果A1 < B5,这个时间可能性就很多了,比如A1 < A2 < A3 < A4 < B1 < B2,各种可能,无法排除元素,所以还是要从k/2开始寻找。 + +这个跟习题算法的区别是每次扔的东西明显少一些,但是k也在不断变小。下面的代码的时间复杂度是O(lg(m+n)) + + +```python +class Solution(object): + def findMedianSortedArrays(self, nums1, nums2): + """ + :type nums1: List[int] + :type nums2: List[int] + :rtype: float + """ + n = len(nums1) + len(nums2) + if n % 2 == 1: + return self.findKth(nums1, nums2, n / 2 + 1) + else: + smaller = self.findKth(nums1, nums2, n / 2) + bigger = self.findKth(nums1, nums2, n / 2 + 1) + return (smaller + bigger) / 2.0 + + + def findKth(self, A, B, k): + if len(A) == 0: + return B[k-1] + if len(B) == 0: + return A[k-1] + if k == 1 : + return min(A[0],B[0]) + + + a = A[ k / 2 - 1 ] if len(A) >= k / 2 else None + b = B[ k / 2 - 1 ] if len(B) >= k / 2 else None + + if b is None or (a is not None and a < b): + return self.findKth(A[k/2:], B, k - k/2) +   return self.findKth(A, B[k/2:],k - k/2) #这里要注意:因为 k/2 不一定 等于 (k - k/2), + + +``` +```python +#python3里面要用向下取整函数才可以AC,否则报错,TypeError: list indices must be integers or slices, not float + +from math import floor +class Solution: + def findMedianSortedArrays(self, nums1, nums2): + """ + :type nums1: List[int] + :type nums2: List[int] + :rtype: float + """ + n = len(nums1) + len(nums2) + if n % 2 == 1: + return self.findKth(nums1, nums2, floor(n/2)+1) + else: + smaller = self.findKth(nums1, nums2, floor(n/2)) + bigger = self.findKth(nums1, nums2, floor(n/2)+1) + return (smaller + bigger) / 2.0 + def findKth(self, A, B, k): + + if len(A) == 0: + return B[k-1] + if len(B) == 0: + return A[k-1] + if k == 1: + return min(A[0], B[0]) + a = A[floor(k/2)-1] if len(A) >= k/2 else None + b = B[floor(k/2)-1] if len(B) >= k/2 else None + if b is None or (a is not None and a < b): + return self.findKth(A[floor(k/2):], B, k - floor(k/2)) + else: + return self.findKth(A, B[floor(k/2):], k - floor(k/2)) +``` + +这个findKth的算法单独抽出来也是题目。 +### 寻找最小的k个数 + +题目描述 + +输入n个整数,输出其中最小的k个。 +分析与解法 + +## 解法一 + +要求一个序列中最小的k个数,按照惯有的思维方式,则是先对这个序列从小到大排序,然后输出前面的最小的k个数。 +至于选取什么的排序方法,我想你可能会第一时间想到快速排序(我们知道,快速排序平均所费时间为n*logn),然后再遍历序列中前k个元素输出即可。因此,总的时间复杂度:```O(n * log n)+O(k)=O(n * log n)```。 +## 解法二 + +咱们再进一步想想,题目没有要求最小的```k```个数有序,也没要求最后```n-k```个数有序。既然如此,就没有必要对所有元素进行排序。这时,咱们想到了用选择或交换排序,即: +1. 遍历```n```个数,把最先遍历到的k个数存入到大小为```k```的数组中,假设它们即是最小的```k```个数; +2. 对这```k```个数,利用选择或交换排序找到这k个元素中的最大值```kmax```(找最大值需要遍历这```k```个数,时间复杂度为```O(k))```; +3. 继续遍历剩余```n-k```个数。假设每一次遍历到的新的元素的值为```x```,把```x```与```kmax```比较:如果```x``` < ```kmax``` ,用```x```替换```kmax```,并回到第二步重新找出k个元素的数组中最大元素kmax‘;如果```x >= kmax```,则继续遍历不更新数组。 +每次遍历,更新或不更新数组的所用的时间为```O(k)```或```O(0)```。故整趟下来,时间复杂度为```n*O(k)=O(n*k)```。 +## 解法三 + +更好的办法是维护容量为k的最大堆,原理跟解法二的方法相似: +1. 用容量为```k```的最大堆存储最先遍历到的```k```个数,同样假设它们即是最小的```k```个数; +2. 堆中元素是有序的,令```k1 pivot ){ } + if( i < j ) + swap( &a[ i ], &a[ j ] ); + else + break; + } + //重置枢纽元 + swap( &a[ i ], &a[ right - 1 ] ); + + if( k <= i ) + QuickSelect( a, k, left, i - 1 ); + else if( k > i + 1 ) + QuickSelect( a, k, i + 1, right ); + } + else + InsertSort( a + left, right - left + 1 ); +} +``` +这个快速选择SELECT算法,类似快速排序的划分方法。N个数存储在数组S中,再从数组中选取“中位数的中位数”作为枢纽元X,把数组划分为Sa和Sb俩部分,Sa<=X<=Sb,如果要查找的k个元素小于Sa的元素个数,则返回Sa中较小的k个元素,否则返回Sa中所有元素+Sb中小的k-|Sa|个元素,这种解法在平均情况下能做到O(n)的复杂度。 +更进一步,《算法导论》第9章第9.3节介绍了一个最坏情况下亦为O(n)时间的SELECT算法,有兴趣的读者可以参看。 + +给定两个已经排序好的数组,求第k大的,算法有O(m+n).类似merge sort的原理。否则利用的就是之上提到的,利用已经有序的原理,然后每次丢。 + +之所以这里还有一个丢弃条件是b is None 丢A的一部分,是因为B的数组长度是有限的,这个时候很明显丢A的k/2是不影响的,因为无论B[-1]是如何大或者小,因为整个B的长度没有达到k/2小,所以丢掉的这部分最大的A[k/2-1]也不可能是第k个,因为即使整个B都比A[k/2-1]小,拼起来也不能使A[k/2-1]第k大,所以可以放心丢弃。 + + +这里是两个sorted list/array findKth,想到了类似的题目,如果给一个n个linked list,findKth,能想到的办法也只能是用heap吧,类似merge k sorted lists. + + +再写一个O(m+n)类似merge sort的也可以AC的代码 + +```python +class Solution(object): + def findMedianSortedArrays(self, nums1, nums2): + """ + :type nums1: List[int] + :type nums2: List[int] + :rtype: float + """ + def findKth(A, pa, B, pb, k): + res = 0 + m = 0 + while pa < len(A) and pb < len(B) and m < k: + if A[pa] < B[pb]: + res = A[pa] + m += 1 + pa += 1 + else: + res = B[pb] + m += 1 + pb += 1 + + while pa < len(A) and m < k: + res = A[pa] + pa += 1 + m += 1 + + + while pb < len(B) and m < k: + res = B[pb] + pb += 1 + m += 1 + return res + + n = len(nums1) + len(nums2) + if n % 2 == 1: + return findKth(nums1,0, nums2,0, n / 2 + 1) + else: + smaller = findKth(nums1,0, nums2,0, n / 2) + bigger = findKth(nums1,0, nums2,0, n / 2 + 1) + return (smaller + bigger) / 2.0 + +``` diff --git a/docs/Leetcode_Solutions/Python/005._longest_palindromic_substring.md b/docs/Leetcode_Solutions/Python/005._longest_palindromic_substring.md new file mode 100644 index 000000000..14fd335f3 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/005._longest_palindromic_substring.md @@ -0,0 +1,241 @@ +### 5. Longest Palindromic Substring + +题目: + +https://leetcode.com/problems/longest-palindromic-substring/ + +难度: + +Medium + + + +思路0: + +暴力解法绝对不行 + +思路1: + +所以一个好的想法是 s 和 reverse(s) 共有的最长的 substring就是longest palindromic substring -> 问题转成求Longest common substring problem + +参见wikipedia + +,典型动归 + +LCSuff(S1...p, T1...q) = LCS(S1...p1, T1...q-1) if S[p] = T[q] else 0 + + + +伪码也有了,代码也有: + +https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Longest_common_substring#Python_2 + +这样也超时? +```python + class Solution(object): + def longestPalindrome(self, s): + """ + :type s: str + :rtype: str + """ + def lcs(s1, s2): + m = [[0] * (1 + len(s2)) for i in xrange(1 + len(s1))] + longest, x_longest = 0, 0 + for x in xrange(1, 1 + len(s1)): + for y in xrange(1, 1 + len(s2)): + if s1[x - 1] == s2[y - 1]: + m[x][y] = m[x - 1][y - 1] + 1 + if m[x][y] > longest: + longest = m[x][y] + x_longest = x + else: + m[x][y] = 0 + return s1[x_longest - longest: x_longest] + + return lcs(s, s[::-1]) +``` +因为以为这样s[::-1]已经很快了. + +这个方法是buggy的,看字符串abcxgcba,它reverse之后是abcgxcba,它们有公共字符串,但是这里面没有回文,修复方式是: + +we check if the substring’s indices are the same as the reversed substring’s original indices. If it is, then we attempt to update the longest palindrome found so far; if not, we skip this and find the next candidate. + +我觉得的修复方式这样么: + + 原本 翻转 + ABXYBA ABYXBA + + 求出来的substring indices是 0:2 但是这个s1[0:2] 和 s2[0:2]一样,所以不行 + 同理common substring indices还是s[4:6] 和s2[4:6]一样,不行 + + 而比如ABAD和 DABA + + substring indice 一个是0:3, 一个是1:4,这样就没问题 + + + + +思路2: + + + +依次把每一个字符当做回文字符串的中间字符,找到以该字符为中间字符的回文串的最大长度。分别对奇偶的情况进行讨论,接下来的关键就是对边界的把握,确保下标不要越界。当子串已经包含首字符或最后一个字符且此时还是回文串的时候,下标分别会向两边多移一位,需要补回来。 + +参考https://shenjie1993.gitbooks.io/leetcode-python/content/005%20Longest%20Palindromic%20Substring.html +```python + class Solution(object): + def longestPalindrome(self, s): + """ + :type s: str + :rtype: str + """ + n = len(s) + + # empty or one char + if n < 2: + return s + + # left index of the target substring + l = 0 + # right index of the target substring + r = 0 + # length of the longest palindromic substring for now + m = 0 + # length of the current substring + c = 0 + + # Whether the substring contains the first character or last character and is palindromic + b = True + for i in range(n): + # Odd situation + for j in range(min(n-i,i+1)): + if s[i-j] != s [i+j]: + b = False + break + else: + c = 2 * j + 1 + + if c > m : + l = i - j + 1 - b + r = i + j + b + m = c + b = True + + # Even situation + for j in range(min(n - i - 1, i + 1)): + if (s[i - j] != s[i + j + 1]): + b = False + break + else: + c = 2 * j + 2 + if (c > m): + l = i - j + 1 - b + r = i + j + 1 + b + m = c + b = True + return s[l:r] +``` +以上是参考版本,自己写的版本: +```python + class Solution(object): + def longestPalindrome(self, s): + """ + :type s: str + :rtype: str + """ + n = len(s) + + m,l,r = 0,0,0 + + for i in range(n): + # odd case + for j in range(min(i+1,n-i)): + if s[i-j] != s[i+j]: + break + if 2*j + 1 > m : + m = 2 * j + 1 + l = i-j + r = i+j + + + if i+1 < n and s[i] == s[i+1]: + for j in range(min(i+1,n-i-1)): + if s[i-j] != s[i+j+1]: + break + if 2 * j + 2 > m : + m = 2*j +2 + l = i-j + r = i+j+1 + + + return s[l:r+1] +``` + + +思路3: + +[Manacher算法](https://www.felix021.com/blog/read.php?2040) + +Manacher算法增加两个辅助变量id和mx,其中id表示最大回文子串中心的位置,mx则为id+P[id],也就是最大回文子串的边界。得到一个很重要的结论: + +- 如果mx > i,那么P[i] >= Min(P[2 * id - i], mx - i) . 为什么这样说呢,下面解释 + +下面,令j = 2*id - i,也就是说j是i关于id的对称点。 + +- 当 mx - i > P[j] 的时候,以S[j]为中心的回文子串包含在以S[id]为中心的回文子串中,由于i和j对称,以S[i]为中心的回文子串必然包含在以S[id]为中心的回文子串中,所以必有P[i] = P[j]; +![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher1.png) + +- 当 P[j] >= mx - i 的时候,以S[j]为中心的回文子串不一定完全包含于以S[id]为中心的回文子串中,但是基于对称性可知,下图中两个绿框所包围的部分是相同的,也就是说以S[i]为中心的回文子串,其向右至少会扩张到mx的位置,也就是说 P[i] >= mx - i。至于mx之后的部分是否对称,再具体匹配。 +![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher2.png) +所以P[i] >= Min(P[2 * id - i], mx - i),因为以j为中心的绘回文子串的左边界可能会比mx关于id的对称点要大,此时只能证明P[i]=P[2 * id - i] +- 此外,对于 mx <= i 的情况,因为无法对 P[i]做更多的假设,只能让P[i] = 1,然后再去匹配。 + +在下面的程序中我的P数组保存的是,以当前字符为回文子串中心时,该回文子串的长度(不包含当前字符自身) + + +简单地用一个小例子来解释:原字符串为'qacbcaw',一眼就可以看出来最大回文子串是'acbca', +下面是我做的图,累shi了! + +![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher3.jpg) + + + +所以最终代码中的max_i就是字符'b'所对应的index8,start的值就是(max_i - P[max_i] - 1) / 2 = 1,最终输出结果为s[1:6],即‘acbca’ + +```python +class Solution(object): + def longestPalindrome(self, s): + """ + :type s: str + :rtype: str + """ + def preProcess(s): + if not s: + return ['^', '&'] + T = ['^'] + for i in s: + T += ['#', i] + T += ['#', '$'] + return T + T = preProcess(s) + P = [0] * len(T) + id, mx = 0, 0 + for i in range(1, len(T)-1): + j = 2 * id - i + if mx > i: + P[i] = min(P[j], mx-i) + else: + P[i]= 0 + while T[i+P[i]+1] == T[i-P[i]-1]: + P[i] += 1 + if i + P[i] > mx: + id, mx = i, i + P[i] + max_i = P.index(max(P)) #保存的是当前最大回文子串中心位置的index + start = (max_i - P[max_i] - 1) / 2 + res = s[start:start+P[max_i]] + return res +``` +run code的时候结果会跟expected不一样,但是该input确实2个结果都可以,所以放心地submit吧 +还可以转到[647题](https://github.com/Lisanaaa/thinking_in_lc/blob/master/647._Palindromic_Substrings.md)去看一看,也可以用这个算法解 + + diff --git a/docs/Leetcode_Solutions/Python/006._ZigZag_Conversion.md b/docs/Leetcode_Solutions/Python/006._ZigZag_Conversion.md new file mode 100644 index 000000000..cc7bcbe33 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/006._ZigZag_Conversion.md @@ -0,0 +1,67 @@ +### 6. ZigZag Conversion + +题目: + + + +难度: + +Medium + + +思路 + +参考大神[pharrellyhy](https://leetcode.com/problems/zigzag-conversion/discuss/3404/Python-O(n)-Solution-in-96ms-(99.43)?page=2)的思路, +纵向思维考虑,```index```从```0```开始,我们要一直***自增***直到```numRows-1```,此后又一直***自减***到```0```,重复执行。 +给个例子容易懂一些:```s = “abcdefghijklmn”```, ```numRows = 4``` +``` +a g m +b f h l n +c e i k +d j +``` +看明白了吗,下来上去,下来上去,zigzag + + +```python +class Solution(object): + def convert(self, s, numRows): + """ + :type s: str + :type numRows: int + :rtype: str + """ + if numRows == 1 or numRows >= len(s): + return s + + L = [''] * numRows + index, step = 0, 1 + + for x in s: + L[index] += x + if index == 0: + step = 1 + elif index == numRows -1: + step = -1 + index += step + + return ''.join(L) +``` +假设用我上面给的例子,并且在```L[index] += x```这一行后面打印出index, step, L的值, 输出结果如下: +``` +(0, 1, ['a', '', '', '']) +(1, 1, ['a', 'b', '', '']) +(2, 1, ['a', 'b', 'c', '']) +(3, 1, ['a', 'b', 'c', 'd']) +(2, -1, ['a', 'b', 'ce', 'd']) +(1, -1, ['a', 'bf', 'ce', 'd']) +(0, -1, ['ag', 'bf', 'ce', 'd']) +(1, 1, ['ag', 'bfh', 'ce', 'd']) +(2, 1, ['ag', 'bfh', 'cei', 'd']) +(3, 1, ['ag', 'bfh', 'cei', 'dj']) +(2, -1, ['ag', 'bfh', 'ceik', 'dj']) +(1, -1, ['ag', 'bfhl', 'ceik', 'dj']) +(0, -1, ['agm', 'bfhl', 'ceik', 'dj']) +(1, 1, ['agm', 'bfhln', 'ceik', 'dj']) +``` + diff --git a/docs/Leetcode_Solutions/Python/007._Reverse_Integer.md b/docs/Leetcode_Solutions/Python/007._Reverse_Integer.md new file mode 100644 index 000000000..f4120c1ea --- /dev/null +++ b/docs/Leetcode_Solutions/Python/007._Reverse_Integer.md @@ -0,0 +1,65 @@ +### 7. Reverse Integer + +题目: + + + +难度: + +Easy + + +思路 + +翻转数字问题需要注意的就是溢出问题,为什么会存在溢出问题呢,我们知道int型的数值范围是 -2147483648~2147483647(负的2的31次方~2的31次方-1), 那么如果我们要翻转 1000000009 这个在范围内的数得到 9000000001,而翻转后的数就超过了范围。 + +#### 解法1: +如果输入的是负数,就递归调用原函数,参数变成-x即可 + + +```python +class Solution(object): + def reverse(self, x): + """ + :type x: int + :rtype: int + """ + if x < 0: + return -self.reverse(-x) + res = 0 + while x: + res = res * 10 + x % 10 + x /= 10 + return res if res <= 0x7fffffff else 0 +``` +#### 解法2: +按照参数正负号先将其转成字符串,然后再反转,根据是否溢出决定输出0还是反转结果 +```python +class Solution(object): + def reverse(self, x): + """ + :type x: int + :rtype: int + """ +        x = -int(str(x)[::-1][:-1]) if x < 0 else int(str(x)[::-1]) # [:-1]相当于把负号去掉 +        x = 0 if abs(x) > 0x7FFFFFFF else x + return x +``` +#### 解法3(StefanPochmann大神): +看这个解法前先看[backticks](https://docs.python.org/2.7/reference/expressions.html#string-conversions) + + +cmp函数在python3.x中用不了了,import operator用gt或者lt吧,或者回归if/else condition爸爸的怀抱吧! +```python +class Solution(object): + def reverse(self, x): + """ + :type x: int + :rtype: int + """ + s = cmp(x, 0) + r = int(`s * x`[::-1]) + return s * r * (r < 2 ** 31) +``` + + diff --git a/docs/Leetcode_Solutions/Python/008._string_to_integer_(atoi).md b/docs/Leetcode_Solutions/Python/008._string_to_integer_(atoi).md new file mode 100644 index 000000000..4ff1cddcf --- /dev/null +++ b/docs/Leetcode_Solutions/Python/008._string_to_integer_(atoi).md @@ -0,0 +1,53 @@ +### 8. String to Integer (atoi) + +题目: + + + +难度: +Medium + + +需要考虑比较多的边界条件&特殊情况 +1. 首先输入可能会有空格,所以先去掉空格 +2. 去掉空格后要考虑空字符串情况 +3. 字符串首位可能会有正负号,要考虑 +4. 开始转换成数字,题目说只要遇到非数字就可以break了 +5. 结果太大或者太小超过```int```限制就要返回特定数字 ```2147483647``` 或者 ```-2147483648``` +6. 根据之前的正负号结果返回对应数值 + + +```python +class Solution(object): + def myAtoi(self, str): + """ + :type str: str + :rtype: int + """ + str = str.strip() + strNum = 0 + if len(str) == 0: + return strNum + + positive = True + if str[0] == '+' or str[0] == '-': + if str[0] == '-': + positive = False + str = str[1:] + + for char in str: + if char >='0' and char <='9': + strNum = strNum * 10 + ord(char) - ord('0') + if char < '0' or char > '9': + break + + if strNum > 2147483647: + if positive == False: + return -2147483648 + else: + return 2147483647 + if not positive: + strNum = 0 - strNum + return strNum + +``` diff --git a/docs/Leetcode_Solutions/Python/009._Palindrome_Number.md b/docs/Leetcode_Solutions/Python/009._Palindrome_Number.md new file mode 100644 index 000000000..8e14084f7 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/009._Palindrome_Number.md @@ -0,0 +1,31 @@ +### 9. Palindrome Number + +题目: + + +难度: +Medium + + +- 首先负数肯定不是palindrome +- 其次如果一个数字是一个正数,并且能被我0整除那它肯定也不是palindrome + +这样降低了复杂度 + +```python +class Solution(object): + def isPalindrome(self, x): + """ + :type x: int + :rtype: bool + """ + if x < 0 or (x != 0 and x % 10 == 0): + return False + rev, y = 0, x + while x > 0: + rev = rev * 10 + x % 10 + x /= 10 + return y == rev + +``` + diff --git a/docs/Leetcode_Solutions/Python/010._regular_expression_matching.md b/docs/Leetcode_Solutions/Python/010._regular_expression_matching.md new file mode 100644 index 000000000..f3d51b109 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/010._regular_expression_matching.md @@ -0,0 +1,229 @@ +### 010. Regular Expression Matching + +题目: + + + +难度: + +Hard + + + + +先尝试暴力解法,难点就在 * 身上, * 不会单独出现,它一定是和前面一个字母或"."配成一对。看成一对后"X*",它的性质就是:要不匹配0个,要不匹配连续的“X”.所以尝试暴力解法的时候一个trick是从后往前匹配. + + + +暴力解法居然也能AC? + +是这样来分情况看得: + +- 如果s[i] = p[j] 或者 p[j]= . : 往前匹配一位 +- 如果p[j] = ' * ', 检查一下,如果这个时候p[j-1] = . 或者p[j-1] = s[i] ,那么就往前匹配,如果这样能匹配过,就return True, 否者我们忽略 ' X* ',这里注意里面的递推关系 +- 再处理一下边界状况: + - s已经匹配完了, 如果此时p还有,那么如果剩下的是 X* 这种可以过,所以检查 + - p匹配完毕,如果s还有那么报错 + +```python +class Solution(object): + def isMatch(self, s, p): + """ + :type s: str + :type p: str + :rtype: bool + """ + def helper(s, i, p, j): + if j == -1: + return i == -1 + if i == -1: + if p[j] != '*': + return False + return helper(s, i, p, j-2) + if p[j] == '*': + if p[j-1] == '.' or p[j-1] == s[i]: + if helper(s, i-1, p, j): + return True + return helper(s, i, p, j-2) + if p[j] == '.' or p[j] == s[i]: + return helper(s, i-1, p, j-1) + return False + + return helper(s, len(s)-1, p, len(p)-1) +``` + + + +---------- + +dp优化,感觉和edit distance很像。 DP优化待代码化,感觉学DP的一个重点除了递归学好以外,另一点是一定要会画表格。 + + +画一个表格来看一下状况 + +``` + c * a * b + 0 1 2 3 4 5 + 0 1 0 1 0 1 0 +a 1 0 0 0 1 1 0 +a 2 0 0 0 0 1 0 +b 3 0 0 0 0 0 1 + +``` + +这里有几个取巧/容易出问题的敌方,这里画的表用的是1-based string。一上来,做的事包括: + +- 初始化,空字符匹配:dp[0][0] =1 +- 第一行,c* 可以匹配空字符,c* a* 可以匹配空字符,p[j-1] != s[i],匹配空字符 +- 然后进入第二行再来看,实际上我们可以看到,如果没有碰到 * 匹配还是很朴素的,但是碰到 * : + - 1这个匹配可以从左侧传来,dp[i][j] = dp[i][j-1],that is 匹配 1个 + - 1 也可以有上方传来,这种情况是p[j-1] = s[i],匹配多个 dp[i][j] = dp[i-1][j] + - 1 这个匹配也可以从间隔一个的左侧传来,that is也可以有个性的匹配0个,如同匹配空字符一样dp[i][j] = dp[i][j-2],但是注意匹配0个实际上有两种状况,如果p[j-1]!=s[i],强制匹配0个,即使p[j-1] == s[i],我们也可以傲娇的用它来匹配0个。 + +再代码化一点: + +- s[i] == p[j] 或者 p[j] == '.' : dp[i][j] = dp[i-1][j-1] +- p[j] == '*': 然后分几种情况 + - p[j-1] != s[i] : dp[i][j] = dp[i][j-2] 匹配0个的状况 + - p[j-1] == s[i] or p[i-1] == '.': + - dp[i][j] = dp[i-1][j] 匹配多个s[i] + - dp[i][j] = dp[i][j-2] 匹配0个 + +AC代码,注意一下,因为上表为了表达方便,用的是1-based string系统,实际写代码的时候我们心里还是清楚这个string还是从0开始的,不过也可以尝试往前面添东西来方便。 + + +AC代码 + +```python +class Solution(object): + def isMatch(self, s, p): + """ + :type s: str + :type p: str + :rtype: bool + """ + m, n = len(s), len(p) + dp = [ [0 for i in range(n+1)] for j in range(m+1)] + + dp[0][0] = 1 + + # init the first line + for i in range(2,n+1): + if p[i-1] == '*': + dp[0][i] = dp[0][i-2] + + for i in range(1,m+1): + for j in range(1,n+1): + if p[j-1] == '*': + if p[j-2] != s[i-1] and p[j-2] != '.': + dp[i][j] = dp[i][j-2] + elif p[j-2] == s[i-1] or p[j-2] == '.': + dp[i][j] = dp[i-1][j] or dp[i][j-2] + + elif s[i-1] == p[j-1] or p[j-1] == '.': + dp[i][j] = dp[i-1][j-1] + + return dp[m][n] == 1 +``` + +写个测试案例 +```python +import unittest +class Solution(object): + def isMatch(self, s, p): + """ + :type s: str + :type p: str + :rtype: bool + """ + m, n = len(s), len(p) + dp = [ [0 for i in range(n+1)] for j in range(m+1)] + + dp[0][0] = 1 + + # init the first line + for i in range(2,n+1): + if p[i-1] == '*': + dp[0][i] = dp[0][i-2] + + for i in range(1,m+1): + for j in range(1,n+1): + if p[j-1] == '*': + if p[j-2] != s[i-1] and p[j-2] != '.': + dp[i][j] = dp[i][j-2] + elif p[j-2] == s[i-1] or p[j-2] == '.': + dp[i][j] = dp[i-1][j] or dp[i][j-2] + + elif s[i-1] == p[j-1] or p[j-1] == '.': + dp[i][j] = dp[i-1][j-1] + + return dp[m][n] == 1 + + +class TestSolution(unittest.TestCase): + def test_none_0(self): + s = "" + p = "" + self.assertTrue(Solution().isMatch(s, p)) + + def test_none_1(self): + s = "" + p = "a" + self.assertFalse(Solution().isMatch(s, p)) + + def test_no_symbol_equal(self): + s = "abcd" + p = "abcd" + self.assertTrue(Solution().isMatch(s, p)) + + def test_no_symbol_not_equal_0(self): + s = "abcd" + p = "efgh" + self.assertFalse(Solution().isMatch(s, p)) + + def test_no_symbol_not_equal_1(self): + s = "ab" + p = "abb" + self.assertFalse(Solution().isMatch(s, p)) + + def test_symbol_0(self): + s = "" + p = "a*" + self.assertTrue(Solution().isMatch(s, p)) + + def test_symbol_1(self): + s = "a" + p = "ab*" + self.assertTrue(Solution().isMatch(s, p)) + + def test_symbol_2(self): + # E.g. + # s a b b + # p 1 0 0 0 + # a 0 1 0 0 + # b 0 0 1 0 + # * 0 1 1 1 + s = "abb" + p = "ab*" + self.assertTrue(Solution().isMatch(s, p)) + + +if __name__ == "__main__": + unittest.main() + + + +输出: +........ + +Ran 8 tests in 0.001s + +OK +``` + +参考: + + +[动态规划](https://hk029.gitbooks.io/leetbook/content/动态规划/010.%20Regular%20Expression%20Matching/010.%20Regular%20Expression%20Matching.html) + + diff --git a/docs/Leetcode_Solutions/Python/011._container_with_most_water.md b/docs/Leetcode_Solutions/Python/011._container_with_most_water.md new file mode 100644 index 000000000..4fac0f11c --- /dev/null +++ b/docs/Leetcode_Solutions/Python/011._container_with_most_water.md @@ -0,0 +1,112 @@ +### 11. Container With Most Water + + + +题目: + + + +难度: +Medium + +思路: + + +首先理解花了我一点时间,因为一开始写出来,给了一个例子: + +``` + +height = [3,2,1,3] +解是 9 + + +| | +| | | +| | | | +1 2 3 4 + + 一开始我的理解走偏的地方是这个9是如何得到的,因为根据最短板原理,明显不可能得到9啊,后来发现是·Find two lines, which together with x-axis forms a container, such that the container contains the most water. +``` + +所以代码写起来就简单了,AC无能,超时,时间复杂度O(N^2) + + +``` +class Solution(object): # 此法超时 + def maxArea(self, height): + """ + :type height: List[int] + :rtype: int + """ + n = len(height) + most_water = 0 + for i in range(n-1): + for j in range(i, n): + water = (j-i) * min(height[i], height[j]) + most_water = max(water, most_water) + return most_water + +``` + +题目给的tag是 two pointer,所以上边的策略肯定可以改进,改进的地方就不能是这个一次走一边,而可能是两边都要走。 + + + +参考 + + +思路: + +由于ai和aj (i=i, j'<=j) >= S(i,j)```,由于```j'-i' <= j-i```,必然要有```min(ai',aj')>=min(ai,aj)```才行。同样可以采用头尾双指针向中间移动: + +当```a(left) < a(right)```时,对任何```j S(left, j a(right)时,需要左移right`。 + +`而当a(left) = a(right)时,需要同时移动left和right。` + +思路整理: +left = 0, right = n-1 +1. a[left] < a[right], left++ +2. a[left] > a[right], right-- +3. a[left] = a[right], left++, right-- +终止条件:left >= right + +这个证明大快人心 + + +这样写也能过: + + +```python +class Solution(object): + def maxArea(self, height): + """ + :type height: List[int] + :rtype: int + """ + n = len(height) + left, right = 0, n-1 + most_water = 0 + while left <= right: + water = (right - left) * min(height[left], height[right]) + most_water = max(water, most_water) + if height[left] < height[right]: + left += 1 + elif height[left] > height[right]: + right -= 1 + else: + left += 1 + right -= 1 + return most_water + +``` diff --git a/docs/Leetcode_Solutions/Python/012._Integer_to_Roman.md b/docs/Leetcode_Solutions/Python/012._Integer_to_Roman.md new file mode 100644 index 000000000..6177e3322 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/012._Integer_to_Roman.md @@ -0,0 +1,71 @@ +### 12. Integer to Roman + + +题目: + + + +难度: +Medium + +思路: + +首先我学习了一下罗马字母是如何表示的。然后感慨,这个阿拉伯数字是多么好的发明 + + + +上图 + + + +基于的是这些个Symbol: + +``` +1 5 10 50 100 500 1000 +I V X L C D M +``` + + + +罗马数字表示法见[Leetcode 013](https://github.com/Lisanaaa/thinking_in_lc/blob/master/013._Roman_to_Integer.md) + +这里有一个很棒的[算法](https://gist.github.com/imilu/00f32c61e50b7ca296f91e9d96d8e976) + +AC代码 + +```python +class Solution(object): + def intToRoman(self, num): + """ + :type num: int + :rtype: str + """ + lookup = { + 'M': 1000, + 'CM': 900, + 'D': 500, + 'CD': 400, + 'C': 100, + 'XC': 90, + 'L': 50, + 'XL': 40, + 'X': 10, + 'IX': 9, + 'V': 5, + 'IV': 4, + 'I': 1 + } + romanStr = '' + + for symbol, val in sorted(lookup.items(), key = lambda t: t[1], reverse = True): + while num >= val: + romanStr += symbol + num -= val + return romanStr +``` + + + + + +因为dict本身是无序的,这里做了一个排序的操作,否则可能会出现IIII这种状况。 diff --git a/docs/Leetcode_Solutions/Python/013._Roman_to_Integer.md b/docs/Leetcode_Solutions/Python/013._Roman_to_Integer.md new file mode 100644 index 000000000..4f1184b8a --- /dev/null +++ b/docs/Leetcode_Solutions/Python/013._Roman_to_Integer.md @@ -0,0 +1,82 @@ +### 13.Roman to Integer + + + +题目: + + +难度: +Easy + +思路: + + +``` +罗马数字是最古老的数字表示方式,比阿拉伯数组早2000多年,起源于罗马 + +罗马数字有如下符号: + +基本字符 I V X L C D M +对应阿拉伯数字 1 5 10 50 100 500 1000 + +计数规则: +- 相同的数字连写,所表示的数等于这些数字相加得到的数,例如:III = 3 +- 小的数字在大的数字右边,所表示的数等于这些数字相加得到的数,例如:VIII = 8 +- 小的数字,限于(I、X和C)在大的数字左边,所表示的数等于大数减去小数所得的数,例如:IV = 4,这条规则好像这题不管 +- 正常使用时,连续的数字重复不得超过三次 +- 在一个数的上面画横线,表示这个数扩大1000倍(本题只考虑3999以内的数,所以用不到这条规则) +- 从前向后遍历罗马数字,如果某个数比前一个数小,则加上该数。反之,减去前一个数的两倍然后加上该数 +``` + + + +integer to Roman 是 Medium,这个roman to integer是easy + + +- 从前往后扫描,用一个临时变量记录分段数字。 +- 如果当前比前一个大,说明这一段的值应当是这个值减去上一个值。比如IV = 5-1 =4; 否则,将当前值加入到结果中,然后开始下一段记录,比如VI = 5 + 1, II = 1 +1 + + +所以这也就是罗马数字的基础,感觉?这样才不会读串? + + + +AC代码 + +```python +class Solution(object): + def romanToInt(self, s): + """ + :type s: str + :rtype: int + """ + lookup = { + 'M': 1000, + 'D': 500, + 'C': 100, + 'L': 50, + 'X': 10, + 'V': 5, + 'I': 1 + } + res = 0 + for i in range(len(s)): + if i > 0 and lookup[s[i]] > lookup[s[i-1]]: + res = res + lookup[s[i]] - 2 * lookup[s[i-1]] + else: + res += lookup[s[i]] + return res +``` +或者甚至可以建立一个新函数用于取对应数值: +``` + def table(x): + return { + 'I':1, + 'V':5, + 'X':10, + 'L':50, + 'C':100, + 'D':500, + 'M':1000 + }.get(x) +``` diff --git a/docs/Leetcode_Solutions/Python/014._longest_common_prefix.md b/docs/Leetcode_Solutions/Python/014._longest_common_prefix.md new file mode 100644 index 000000000..a64997ef1 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/014._longest_common_prefix.md @@ -0,0 +1,77 @@ +### 14. Longest Common Prefix + + +题目: + + + +难度: + +Easy + + +思路: + +#### 解法1: +以一个小例子来解释,strs=['laa', 'lab', 'lac'], 如果存在LCP的话它肯定就在第一个字符串strs[0]中,并且LCP的长度肯定不会大于strs[0]的长度 +- 依次假设LCP长度为0到len(strs[0]),在每一轮循环中: +   +- 1. 只要strs中存在比当前长度i更短的string,立刻返回上一轮LCP,即strs[0][:i] + 2. 只要strs中存在当前index字符与LCP该index不相同的字符串,立刻返回上一轮LCP,即strs[0][:i] +- 如果一直没返回,说明strs[0]本身就是LCP,返回它 + + +``` +class Solution(object): + def longestCommonPrefix(self, strs): + """ + :type strs: List[str] + :rtype: str + """ + if not strs: + return "" + for i in range(len(strs[0])): + for str in strs: + if len(str) <= i or strs[0][i] != str[i]: + return strs[0][:i] + return strs[0] + +``` + +#### 解法2: +- dp[i]代表前i+1个字符串的最大前缀串, +- 如果第i+2个字符串不以dp[i]为前缀,就去掉dp[i]的最后一个字符再试一次 +- 都去完了那么dp[i+1]肯定就是空串了,也就等于这时候的dp[i],因为dp[i]的每个字符已经被去完了 +```python +class Solution(object): + def longestCommonPrefix(self, strs): + """ + :type strs: List[str] + :rtype: str + """ + if not strs: + return '' + dp = [strs[0]]*len(strs) + for i in range(1,len(strs)): + while not strs[i].startswith(dp[i-1]): + dp[i-1] = dp[i-1][:-1] + dp[i] = dp[i-1] + return dp[-1] +``` + + + + + + + +python无敌啊!!!有没有天理啊,手动滑稽😏😏😏😏!一行解法: +```python +class Solution(object): + def longestCommonPrefix(self, strs): + """ + :type strs: List[str] + :rtype: str + """ + return os.path.commonprefix(strs) +``` diff --git a/docs/Leetcode_Solutions/Python/015._3sum.md b/docs/Leetcode_Solutions/Python/015._3sum.md new file mode 100644 index 000000000..9f962f9e2 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/015._3sum.md @@ -0,0 +1,106 @@ +### 15. 3Sum + +题目: + + + +难度: + +Medium + + +第一想法,先把nums排序,用三个loop,无法AC + +``` +class Solution(object): + def threeSum(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + n = len(nums) + res = [] + nums.sort() + for i in range(n): + for j in range(i,n): + for k in range(j,n): + if nums[i] + nums[j] + nums[k] == 0 and j != i and k != j and k != i: + curRes = [nums[i],nums[j],nums[k]] + if curRes not in res: + res.append(curRes) + + return res +``` + + +然后查了一下2sum,用2sum的花样,因为要排除重复以及输出是按照从小到大的输出:但是还是超时 + + +``` +class Solution(object): # 此法也超时 +    def threeSum(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + def twoSum(nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[int] + """ + lookup = {} + for num in nums: + if target - num in lookup: + if (-target ,target - num, num) not in res: + res.append((-target ,target - num, num)) + lookup[num] = target - num + + n = len(nums) + nums.sort() + res = [] + for i in range(n): + twoSum(nums[i+1:], 0-nums[i]) + return [list(i) for i in res] +``` + + +谷歌看别人的代码,思路非常清晰的,运行起来比直接调用 Two Sum快. + +清晰的思路: + +- 排序 +- 固定左边,如果左边重复,继续 +- 左右弄边界,去重,针对不同的左右边界情况处理 + + +```python +class Solution(object): + def threeSum(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + n, res = len(nums), [] + nums.sort() + for i in range(n): + if i > 0 and nums[i] == nums[i-1]: # 因为i=0这个元素会直接往下执行 + continue + l, r = i+1, n-1 + while l < r: + tmp = nums[i] + nums[l] + nums[r] + if tmp == 0: + res.append([nums[i], nums[l], nums[r]]) + l += 1 + r -= 1 + while l < r and nums[l] == nums[l-1]: + l += 1 + while l < r and nums[r] == nums[r+1]: + r -= 1 + elif tmp > 0: + r -= 1 + else: + l += 1 + return res +``` + diff --git a/docs/Leetcode_Solutions/Python/016._3sum_closest.md b/docs/Leetcode_Solutions/Python/016._3sum_closest.md new file mode 100644 index 000000000..96b012ad2 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/016._3sum_closest.md @@ -0,0 +1,51 @@ +### 16. 3Sum Closest + +题目: + + + +难度: + +Medium + + +思路: +跟3 Sum一样,固定一个元素 + +用两个指针来循环 + + +```python +class Solution(object): + def threeSumClosest(self, nums, target): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + n, res, diff = len(nums), None, float('inf') + nums.sort() + for i in range(n): + if i > 0 and nums[i] == nums[i-1]: + continue + l, r = i+1, n-1 + while l < r: + tmp = nums[i] + nums[l] + nums[r] + if tmp == target: + return target + elif tmp > target: + r -= 1 + if abs(tmp-target) < diff: + diff = abs(tmp-target) + res = tmp + while l < r and nums[r] == nums[r+1]: + r -= 1 + else: + l += 1 + if abs(tmp-target) < diff: + diff = abs(tmp-target) + res = tmp + while l < r and nums[l] == nums[l-1]: + l += 1 + return res + +``` diff --git a/docs/Leetcode_Solutions/Python/017._letter_combinations_of_a_phone_number.md b/docs/Leetcode_Solutions/Python/017._letter_combinations_of_a_phone_number.md new file mode 100644 index 000000000..e951ad85d --- /dev/null +++ b/docs/Leetcode_Solutions/Python/017._letter_combinations_of_a_phone_number.md @@ -0,0 +1,51 @@ +### 17. Letter Combinations of a Phone Number + +题目: + + + + +难度: + +Medium + + +思路: + + - hash table一个,用来对应digit -> letter + - s用来记录结果,每次从digits里面去一个,然后寻找其可能的char,加到s中,digits长度减小 + - digits长度为0时候,把它加入结果 + + + +```python +class Solution(object): + def letterCombinations(self, digits): + """ + :type digits: str + :rtype: List[str] + """ + if digits == '': + return [] + self.res = [] + self.singleResult('', digits) + return self.res + + def singleResult(self, s, digits): + if len(digits) == 0: + self.res.append(s) + else: + mapx = {'2':['a','b','c'], + '3':['d','e','f'], + '4':['g','h','i'], + '5':['j','k','l'], + '6':['m','n','o'], + '7':['p','q','r','s'], + '8':['t','u','v'], + '9':['w','x','y','z']} + cur_digit = digits[0] + for c in mapx[cur_digit]: + self.singleResult(s+c, digits[1:]) +``` + + diff --git a/docs/Leetcode_Solutions/Python/018._4sum.md b/docs/Leetcode_Solutions/Python/018._4sum.md new file mode 100644 index 000000000..ba6862056 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/018._4sum.md @@ -0,0 +1,136 @@ +### 18. 4Sum + +题目: + + + +难度: + +Medium + + +思路: + +用3sum改 + +固定两个数,活动别的 + + +```python +class Solution(object): + def fourSum(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[List[int]] + """ + n = len(nums) + nums.sort() + res = [] + for i in range(n): + for j in range(i+1,n): + l, r = j+1, n-1 + while l < r: + temp = nums[i] + nums[j] + nums[l] + nums[r] + if temp == target: + if [nums[i],nums[j],nums[l],nums[r]] not in ans: + ans.append([nums[i],nums[j],nums[l],nums[r]]) + l += 1 + r -= 1 + elif temp > target: + r -= 1 + else: + l+=1 + return ans +``` + +可以通过加判断条件,前后数字相等可以直接跳过,使得算法更快 + + +```python +class Solution(object): + def fourSum(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[List[int]] + """ + n, res = len(nums), [] + nums.sort() + for i in range(n): + if i > 0 and nums[i] == nums[i-1]: # 因为i=0这个元素会直接往下执行 + continue + for j in range(i+1, n): + if j > i+1 and nums[j] == nums[j-1]: # 因为j=i+1这个元素会直接往下执行 + continue + l, r = j+1, n-1 + while l < r: + tmp = nums[i] + nums[j] + nums[l] + nums[r] + if tmp == target: + res.append([nums[i], nums[j], nums[l], nums[r]]) + l += 1 + r -= 1 + while l < r and nums[l] == nums[l-1]: + l += 1 + while l < r and nums[r] == nums[r+1]: + r -= 1 + elif tmp > target: + r -= 1 + else: + l += 1 + return res + +``` + +还可以再用一些判断来加速,比如枚举第一个数的时候 + +- nums[i] + nums[i + 1] + nums[i + 2] + nums[i + 3] > target: break +这是当前能凑齐的最小的4个数,比target后面都不用做了 +- nums[i] + nums[n – 3] + nums[n – 2] + nums[n – 1] < target: continue +这是当前凑齐的最大的4个数,比target小,说明第一个数不够大 + +参考 + + + + +```python +class Solution(object): + def fourSum(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[List[int]] + """ + n, res = len(nums), [] + nums.sort() + for i in range(n): + if i > 0 and nums[i] == nums[i-1]: # 因为i=0这个元素会直接往下执行 + continue + if i+3 <= n-1: + if nums[i] + nums[i+1] + nums[i+2] + nums[i+3] > target: + break + if i < n-3: + if nums[i] + nums[n-3] + nums[n-2] + nums[n-1] < target: + continue + for j in range(i+1, n): + if j > i+1 and nums[j] == nums[j-1]: # 因为j=i+1这个元素会直接往下执行 + continue + l, r = j+1, n-1 + while l < r: + tmp = nums[i] + nums[j] + nums[l] + nums[r] + if tmp == target: + res.append([nums[i], nums[j], nums[l], nums[r]]) + l += 1 + r -= 1 + while l < r and nums[l] == nums[l-1]: + l += 1 + while l < r and nums[r] == nums[r+1]: + r -= 1 + elif tmp > target: + r -= 1 + else: + l += 1 + return res + +``` diff --git a/docs/Leetcode_Solutions/Python/019._remove_nth_node_from_end_of_list.md b/docs/Leetcode_Solutions/Python/019._remove_nth_node_from_end_of_list.md new file mode 100644 index 000000000..5bdefb7a0 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/019._remove_nth_node_from_end_of_list.md @@ -0,0 +1,42 @@ +### 19. Remove Nth Node From End of List + +题目: + + + + +难度: Medium + + +AC击败了95.80%的Python用户,技巧 dummy head 和双指针。 + +切记最后要返回```dummy.next```而不是```head```,因为有这样一种情况,删掉节点后```linked list```空了,那返回```head```的话结果显然不同。如: +输入链表为```[1]```, ```n = 1```, 应该返回```None```而不是```[1]``` + +```python +class Solution(object): + def removeNthFromEnd(self, head, n): + """ + :type head: ListNode + :type n: int + :rtype: ListNode + """ + dummy = ListNode(-1) + dummy.next = head + p, q = dummy, dummy + + for i in range(n): + q = q.next + + while q.next: + p = p.next + q = q.next + + p.next = p.next.next + return dummy.next + +``` + + + + diff --git a/docs/Leetcode_Solutions/Python/020._valid_parentheses.md b/docs/Leetcode_Solutions/Python/020._valid_parentheses.md new file mode 100644 index 000000000..3b008ac91 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/020._valid_parentheses.md @@ -0,0 +1,52 @@ +### 20. Valid Parentheses + +题目: + + + + +难度: + +Easy + + +### 思路: + +因为一共只有三种状况"(" -> ")", "[" -> "]", "{" -> "}". + +一遇到左括号就入栈,右括号出栈,这样来寻找对应 + +需要检查几件事: + +- 出现右括号时stack里还有没有东西 +- 出stack时是否对应 +- 最终stack是否为空 + + + +```python +class Solution(object): + def isValid(self, s): + """ + :type s: str + :rtype: bool + """ + leftP = '([{' + rightP = ')]}' + stack = [] + for char in s: + if char in leftP: + stack.append(char) + if char in rightP: + if not stack: + return False + tmp = stack.pop() + if char == ')' and tmp != '(': + return False + if char == ']' and tmp != '[': + return False + if char == '}' and tmp != '{': + return False + return stack == [] +``` + diff --git a/docs/Leetcode_Solutions/Python/021._merge_two_sorted_lists.md b/docs/Leetcode_Solutions/Python/021._merge_two_sorted_lists.md new file mode 100644 index 000000000..40517726c --- /dev/null +++ b/docs/Leetcode_Solutions/Python/021._merge_two_sorted_lists.md @@ -0,0 +1,48 @@ +### 21. Merge Two Sorted Lists + +题目: + + + + +难度: Easy + + +同样适用dummy head + +```python +class Solution(object): + def mergeTwoLists(self, l1, l2): + """ + :type l1: ListNode + :type l2: ListNode + :rtype: ListNode + """ + if l1 == None: + return l2 + if l2 == None: + return l1 + + dummy = ListNode(-1) + cur = dummy + + while l1 and l2: + if l1.val < l2.val: + cur.next = l1 + l1 = l1.next + else: + cur.next = l2 + l2 = l2.next + cur = cur.next + + if l1: + cur.next = l1 + else: + cur.next = l2 + return dummy.next + +``` + + + + diff --git a/docs/Leetcode_Solutions/Python/022._generate_parentheses.md b/docs/Leetcode_Solutions/Python/022._generate_parentheses.md new file mode 100644 index 000000000..ae14c9089 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/022._generate_parentheses.md @@ -0,0 +1,88 @@ +### 22. Generate Parentheses + +题目: + + + +难度: + +Medium + + + + + +```python +class Solution(object): + def generateParenthesis(self,n): + """ + :type n: int + :rtype: List[str] + """ + self.res = [] + self.singleStr('', 0, 0, n) + return self.res + + def singleStr(self, s, left, right, n): + if left == n and right == n: + self.res.append(s) + if left < n: + self.singleStr(s + '(',left + 1, right,n) + if right < left: + self.singleStr(s + ')',left, right + 1, n) + +``` + + +非常牛逼的讲解,需要这样的人来给我们讲算法 + +####以Generate Parentheses为例,backtrack的题到底该怎么去思考? + + +所谓Backtracking都是这样的思路:在当前局面下,你有若干种选择。那么尝试每一种选择。如果已经发现某种选择肯定不行(因为违反了某些限定条件),就返回;如果某种选择试到最后发现是正确解,就将其加入解集 + +所以你思考递归题时,只要明确三点就行:选择 (Options),限制 (Restraints),结束条件 (Termination)。即“ORT原则”(这个是我自己编的) + + + + +对于这道题,在任何时刻,你都有两种选择: +1. 加左括号。 +2. 加右括号。 + +同时有以下限制: +1. 如果左括号已经用完了,则不能再加左括号了。 +2. 如果已经出现的右括号和左括号一样多,则不能再加右括号了。因为那样的话新加入的右括号一定无法匹配。 + +结束条件是: +左右括号都已经用完。 + +结束后的正确性: +左右括号用完以后,一定是正确解。因为1. 左右括号一样多,2. 每个右括号都一定有与之配对的左括号。因此一旦结束就可以加入解集(有时也可能出现结束以后不一定是正确解的情况,这时要多一步判断)。 + +递归函数传入参数: +限制和结束条件中有“用完”和“一样多”字样,因此你需要知道左右括号的数目。 +当然你还需要知道当前局面sublist和解集res。 + +因此,把上面的思路拼起来就是代码: + + if (左右括号都已用完) { + 加入解集,返回 + } + //否则开始试各种选择 + if (还有左括号可以用) { + 加一个左括号,继续递归 + } + if (右括号小于左括号) { + 加一个右括号,继续递归 + } + + + +你帖的那段代码逻辑中加了一条限制:“3. 是否还有右括号剩余。如有才加右括号”。这是合理的。不过对于这道题,如果满足限制1、2时,3一定自动满足,所以可以不判断3。 + +这题其实是最好的backtracking初学练习之一,因为ORT三者都非常简单明显。你不妨按上述思路再梳理一遍,还有问题的话再说。 + + + +以上文字来自 1point3arces的牛人解答 diff --git a/docs/Leetcode_Solutions/Python/023._merge_k_sorted_lists.md b/docs/Leetcode_Solutions/Python/023._merge_k_sorted_lists.md new file mode 100644 index 000000000..9cd97355c --- /dev/null +++ b/docs/Leetcode_Solutions/Python/023._merge_k_sorted_lists.md @@ -0,0 +1,46 @@ +### 23. Merge k Sorted Lists + + + +题目: + + + +难度: +Hard + +思路: + +看到思路有heap,similar question有ugly number|| -> 这个是用heapq来解决的 + +那么就用heap吧? heapsort + +最简单的做法是只要每个list里面还有node,就把他们扔到minheap里面去,然后再把minheap pop,一个一个node连起来,听起来时间复杂度和空间复杂度都蛮高的。 +直接merge必然是不好的,因为没有利用有序这个点,应该做的是每次取来一个,然后再把应该的下一个放入 + +写到这里瞬间明白和ugly number ii像的点了,甚至感觉跟find in sorted matrix ii也像 + +```python +class Solution(object): + def mergeKLists(self, lists): + """ + :type lists: List[ListNode] + :rtype: ListNode + """ + import heapq + h = [] + for lst_head in lists: + if lst_head: + heapq.heappush(h, (lst_head.val, lst_head)) + cur = ListNode(-1) + dummy = cur + while h: + smallest_node = heapq.heappop(h)[1] + cur.next = smallest_node + cur = cur.next + if smallest_node.next: + heapq.heappush(h, (smallest_node.next.val, smallest_node.next)) + return dummy.next +``` + +当然还像merge two sorted list diff --git a/docs/Leetcode_Solutions/Python/024._swap_nodes_in_pairs.md b/docs/Leetcode_Solutions/Python/024._swap_nodes_in_pairs.md new file mode 100644 index 000000000..907744af1 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/024._swap_nodes_in_pairs.md @@ -0,0 +1,35 @@ +###24. Swap Nodes in Pairs + +题目: + + + +难度 : Easy + +看了hint,用loop做,每个node关系要弄清楚 + + +``` + +class Solution(object): + def swapPairs(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + if head == None or head.next == None: + return head + + dummy = ListNode(-1) + dummy.next = head + + cur = dummy + + while cur.next and cur.next.next: + next_one, next_two, next_three = cur.next, cur.next.next, cur.next.next.next + cur.next = next_two + next_two.next = next_one + next_one.next = next_three + cur = next_one + return dummy.next +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/026._Remove_Duplicates_from_Sorted_Array.md b/docs/Leetcode_Solutions/Python/026._Remove_Duplicates_from_Sorted_Array.md new file mode 100644 index 000000000..23b43561c --- /dev/null +++ b/docs/Leetcode_Solutions/Python/026._Remove_Duplicates_from_Sorted_Array.md @@ -0,0 +1,73 @@ +### 26. Remove Duplicates from Sorted Array + + + +题目: + + + +难度: +Easy + +思路: +因为题目说了是```sorted array```,所以只需要不停判断当前位置值和下一位置是否相等,若相等则```pop掉当前值```,否则```move```到下一位置做重复判断 + + +```python +class Solution(object): + def removeDuplicates(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + i = 0 + while i < (len(nums) - 1): + if nums[i] == nums[i+1]: + nums.remove(nums[i]) + else: + i += 1 + return len(nums) +``` + + +这里代码用```while loop```而不用```for loop```是因为```pop```操作之后```nums```的长度会变化 + +如:```for i in range(len(nums)-1)```实际上固定了```range```里面的值了,不会二次判断 + +``` +n = 10 +for i in range(n): + n = n - 1 # 尽管n在变化 + print(i) + +上面这段代码的输出结果为: + +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +``` + + + + + + + + + + + + + + + + + + diff --git a/docs/Leetcode_Solutions/Python/027._Remove_Element.md b/docs/Leetcode_Solutions/Python/027._Remove_Element.md new file mode 100644 index 000000000..3603a5b3d --- /dev/null +++ b/docs/Leetcode_Solutions/Python/027._Remove_Element.md @@ -0,0 +1,25 @@ +### 27. Remove Element + + + +题目: + + + +难度: +Easy + +瞬秒 + +```python +class Solution(object): + def removeElement(self, nums, val): + """ + :type nums: List[int] + :type val: int + :rtype: int + """ + while val in nums: + nums.remove(val) + return len(nums) +``` diff --git a/docs/Leetcode_Solutions/Python/028._implement_strstr().md b/docs/Leetcode_Solutions/Python/028._implement_strstr().md new file mode 100644 index 000000000..cecd6a5e5 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/028._implement_strstr().md @@ -0,0 +1,47 @@ +### 28. Implement strStr() + +题目: + + + + +难度: + +Easy + + +一行解法如何? +```python +class Solution(object): + def strStr(self, haystack, needle): + """ + :type haystack: str + :type needle: str + :rtype: int + """ + return haystack.find(needle) +``` + + +这个题目其实可以引来一大类,那就是关于string的算法,但是此处先用暴力算法来AC,然后再来细读/品味别的string相关算法吧。 + +虽然是暴力算法,但是也不容易写对啊 +```python +class Solution(object): + def strStr(self, haystack, needle): + """ + :type haystack: str + :type needle: str + :rtype: int + """ + if not needle: + return 0 + for i in xrange(len(haystack) - len(needle) + 1): + if haystack[i] == needle[0]: + j = 1 + while j < len(needle) and haystack[i+j] == needle[j]: + j += 1 + if j == len(needle): + return i + return -1 +``` diff --git a/docs/Leetcode_Solutions/Python/030._Substring_with_Concatenation_of_All_Words.md b/docs/Leetcode_Solutions/Python/030._Substring_with_Concatenation_of_All_Words.md new file mode 100644 index 000000000..0dd9eea26 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/030._Substring_with_Concatenation_of_All_Words.md @@ -0,0 +1,54 @@ +### 30. Substring with Concatenation of All Words + +题目: + + + +难度 : Hard + + + +```python +class Solution(object): + def findSubstring(self, s, words): + """ + :type s: str + :type words: List[str] + :rtype: List[int] + """ + res = [] + if len(words) == 0 or len(s) < len(words) * len(words[0]): + return res + n, m, wl = len(s), len(words), len(words[0]) + maps, cur_map = {}, {} + maps = collections.Counter(words) + for i in range(wl): + count, start, r = 0, i, i + while r + wl <= n: + string = s[r:r+wl] + if string in maps: + cur_map[string] = cur_map.get(string, 0) + 1 + if cur_map[string] <= maps[string]: + count += 1 + while cur_map[string] > maps[string]: + tmp = s[start:start+wl] + cur_map[tmp] -= 1 + start += wl + if cur_map[tmp] < maps[tmp]: + count -= 1 + if count == m: + res.append(start) + tmp = s[start:start+wl] + cur_map[tmp] -= 1 + start += wl + count -= 1 + else: + cur_map = {} + count = 0 + start = r + wl + r += wl + cur_map = {} + return res + + +``` diff --git a/docs/Leetcode_Solutions/Python/031._next_permutation.md b/docs/Leetcode_Solutions/Python/031._next_permutation.md new file mode 100644 index 000000000..69d810cb1 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/031._next_permutation.md @@ -0,0 +1,103 @@ + +### 31. Next Permutation + + +题目: + + + +难度: + +Medium + +参照wikipedia: + + + +首先,关于什么是全排列不做解释。如果一个排列为A,下一个排列为A_NEXT,那么A_NEXT一定与A有尽可能长的公共前缀。 + +看具体例子,一个排列为124653,如何找到它的下一个排列,因为下一个排列一定与124653有尽可能长的前缀,所以,脑洞大开一下,从后面往前看这个序列,如果后面的若干个数字有下一个排列,问题就得到了解决。 + +第一步:找最后面1个数字的下一个全排列。 + +124653,显然最后1个数字3不具有下一个全排列。 + +第二步:找最后面2个数字的下一个全排列。 + +124653,显然最后2个数字53不具有下一个全排列。 + +第三步:找最后面3个数字的下一个全排列。 + +124653,显然最后3个数字653不具有下一个全排列。 + + +------插曲:到这里相信大家已经看出来,如果一个序列是递减的,那么它不具有下一个排列。 + + +第四步:找最后面4个数字的下一个全排列。 + +124653,我们发现显然最后4个数字4653具有下一个全排列。因为它不是递减的,例如6453,5643这些排列都在4653的后面。 + + +我们总结上面的操作,并总结出重复上面操作的两种终止情况: + +1:从后向前比较相邻的两个元素,直到前一个元素小于后一个元素,停止 + +2:如果已经没有了前一个元素,则说明这个排列是递减的,所以这个排列是没有下一个排列的。 + + +124653这个排列终止情况是上面介绍的第一种,从后向前比较相邻的2个元素,遇到4<6的情况停止。 + +并且我们可以知道: + +1:124653和它的下一个排列的公共前缀为12(因为4653存在下一个排列,所以前面的数字12保持不变) + +2:4后面的元素是递减的(上面介绍的终止条件是前一个元素小于后一个元素,这里是4<6) + + +现在,我们开始考虑如何找到4653的下个排列,首先明确4后面的几个数字中至少有一个大于4. + +4肯定要和653这3个数字中大于4的数字中(6,5)的某一个进行交换。这里就是4要和6,5中的某一个交换,很明显要和5交换,如果找到这样的元素呢,因为我们知道4后面的元素是递减的,所以在653中从后面往前查找,找到第一个大于4的数字,这就是需要和4进行交换的数字。这里我们找到了5,交换之后得到的临时序列为5643.,交换后得到的643也是一个递减序列。 + + +所以得到的4653的下一个临时序列为5643,但是既然前面数字变大了(4653--->5643),后面的自然要变为升序才行,变换5643得到5346. + +所以124653的下一个序列为125346. + +看一个permutation,比如 + +125430 + + +- 从末尾开始,找到decreasing subsequence,5430,因为来调5330无论怎么调,都不可能有比它更小的,数也被自然的分成两部分(1,2) 和 (5,4,3,0) +- 下一步是找这个sequence里面第一个比前面部分,比2大的,3,也很容易理解,因为下一个必定是(1,3)打头 +- 交换 3和2 ,变成 (1,3,5,4,2,0),再把后面的部分reverse,得到后面部分可得到的最小的 + +这个时候,得到下一个sequence 130245 + +AC 代码 + +```python +class Solution(object): + def nextPermutation(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + if len(nums) <= 1: + return + idx = 0 + for i in range(len(nums)-1, 0, -1): + if nums[i] > nums[i-1]: # find first number which is smaller than it's after number + idx = i + break + if idx != 0: # if the number exist,which means that the nums not like{5,4,3,2,1} + for i in range(len(nums)-1, idx-1, -1): + if nums[i] > nums[idx-1]: + nums[i], nums[idx-1] = nums[idx-1], nums[i] + break + + nums[idx:] = nums[idx:][::-1] +``` + + diff --git a/docs/Leetcode_Solutions/Python/033._search_in_rotated_sorted_array.md b/docs/Leetcode_Solutions/Python/033._search_in_rotated_sorted_array.md new file mode 100644 index 000000000..c2e6eb74c --- /dev/null +++ b/docs/Leetcode_Solutions/Python/033._search_in_rotated_sorted_array.md @@ -0,0 +1,53 @@ +### 33. Search in Rotated Sorted Array + +题目: + + + +难度: +Medium + + +思路: + + + +下面是rotated-array图解, + +![rotated-array图解](https://github.com/Lisanaaa/myTODOs/blob/master/rotated-array12:09:2017.jpg) + + +所以直接用二分,O(lg(n)) +- 如果是mid,return mid +- 如果mid在绿色线上,就对绿色线进行二分 +- 如果mid在红色线上,就对红色线进行二分 +- 都没找到,return -1 + + +```python +class Solution(object): + def search(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: int + """ + l, r = 0, len(nums) - 1 + while l <= r: + mid = l + ((r - l) >> 2) + if nums[mid] == target: + return mid + if nums[mid] < nums[r]: + if nums[mid] < target <= nums[r]: + l = mid + 1 + else: + r = mid - 1 + else: + if nums[l] <= target < nums[mid]: + r = mid - 1 + else: + l = mid + 1 + return -1 +``` + + diff --git a/docs/Leetcode_Solutions/Python/034._Search for a Range.md b/docs/Leetcode_Solutions/Python/034._Search for a Range.md new file mode 100644 index 000000000..e5a7048b1 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/034._Search for a Range.md @@ -0,0 +1,77 @@ +### 34. Search for a Range + + + +题目: + + https://leetcode.com/problems/search-for-a-range/ + + + +难度 : Medium + + + +思路: + +二分法,先找```target```出现的左边界,判断是否有```target```后再判断右边界 + +- 找左边界:二分,找到一个```index``` + - 该```index```对应的值为```target``` + - 并且它左边```index-1```对应的值不是```target```(如果```index```为```0```则不需要判断此条件) + - 如果存在```index```就将其```append```到```res```中 +- 判断此时```res```是否为空,如果为空,说明压根不存在```target```,返回```[-1, -1]``` +- 找右边界:二分,找到一个```index```(但是此时用于二分循环的```l```可以保持不变,```r```重置为```len(nums)-1```,这样程序可以更快一些) + - 该```index```对应的值为```target``` + - 并且它右边```index+1```对应的值不是```target```(如果```index```为```len(nums)-1```则不需要判断此条件) + - 如果存在```index```就将其```append```到```res```中 + + + +AC 代码 + + + + +```python +class Solution(object): + def searchRange(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[int] + """ + if not nums : return [-1, -1] + + res = [] + l, r = 0, len(nums)-1 + # search for left bound + while l <= r: + mid = l + ((r - l) >> 2) + if nums[mid] == target and (mid == 0 or nums[mid-1] != target): + res.append(mid) + break + if nums[mid] < target: + l = mid + 1 + else: + r = mid - 1 + if not res: + return [-1, -1] + # search for right bound + r = len(nums)-1 + while l <= r: + mid = l + ((r - l) >> 2) + if nums[mid] == target and (mid == len(nums)-1 or nums[mid+1] != target): + res.append(mid) + break + if nums[mid] > target: + r = mid - 1 + else: + l = mid + 1 + return res +``` + + + + + diff --git a/docs/Leetcode_Solutions/Python/035._search_insert_position.md b/docs/Leetcode_Solutions/Python/035._search_insert_position.md new file mode 100644 index 000000000..1b14c88ce --- /dev/null +++ b/docs/Leetcode_Solutions/Python/035._search_insert_position.md @@ -0,0 +1,48 @@ +### 35. Search Insert Position + +题目: + + + +难度: + +Medium + +找到第一个比```target```大的值的```index```,如果没找到则返回```len(nums)```,但是代码中直接返回```i```值就行了 + +### 思路一:暴力 + +```python +class Solution(object): + def searchInsert(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: int + """ + i = 0 + while nums[i] < target: + i += 1 + if i == len(nums): + return i + return i +``` +### 思路二:二分 + +```python +class Solution(object): + def searchInsert(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: int + """ + left, right = 0, len(nums) - 1 + while left <= right: + mid = left + ((right - left) >> 2) + if nums[mid] < target: + left = mid + 1 + else: + right = mid - 1 + return left +``` diff --git a/docs/Leetcode_Solutions/Python/038._Count_and_Say.md b/docs/Leetcode_Solutions/Python/038._Count_and_Say.md new file mode 100644 index 000000000..c735ca188 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/038._Count_and_Say.md @@ -0,0 +1,98 @@ +### 38. Count and Say + +题目: + + + +难度: + +Easy + + +思路 + + +1. i代表字符下标,从0开始取值,也就是从第一个字符开始,因为要让i取到最后一个字符,并且后面还要进行i+1的操作,所以将原字符串随意加上一个‘*’字符防止溢出 +2. count代表此时已经连续相同的字符个数 +3. res代表最终输出的字符串 + +- 只要i下标对应的字符等于下一个字符,则sum和i都加1,无限循环 +- 如果i下标对应的字符不等于下一个字符了,则res应该加上str(sum)和i下标对应的那个字符,并且i加1,sum复原回0 + +``` +Examples of nth sequence + + 1. 1 + 2. 11 + 3. 21 + 4. 1211 + 5. 111221 + 6. 312211 + 7. 13112221 + 8. 1113213211 + 9. 31131211131221 + 10. 13211311123113112211 + +``` +```python +解法1 +class Solution(object): + def countAndSay(self, n): + """ + :type n: int + :rtype: str + """ + if n == 1: + return '1' + s = self.countAndSay(n-1) + '*' + res, count = '', 1 + for i in range(len(s)-1): + if s[i] == s[i+1]: + count += 1 + else: + res += str(count) + str(s[i]) + count = 1 + return res +``` +```python +解法2 +class Solution(object): + def countAndSay(self, n): + """ + :type n: int + :rtype: str + """ + res = '1' + for i in range(n-1): + res = ''.join([str(len(list(group))) + digit for digit, group in itertools.groupby(res)]) + return res +``` +详见[python进阶-ITERTOOLS模块小结](http://www.wklken.me/posts/2013/08/20/python-extra-itertools.html#itertoolsgroupbyiterable-key) + +```java +解法3 +class Solution { + public String countAndSay(int n) { + if(n == 1){ + return "1"; + } + //递归调用,然后对字符串处理 + String str = countAndSay(n-1) + "*";//为了str末尾的标记,方便循环读数 + char[] c = str.toCharArray(); + int count = 1; + String s = ""; + for(int i = 0; i < c.length - 1;i++){ + if(c[i] == c[i+1]){ + count++;//计数增加 + }else{ + s = s + count + c[i];//上面的*标记这里方便统一处理 + count = 1;//初始化 + } + } + return s; + + } +} +``` + + diff --git a/docs/Leetcode_Solutions/Python/039._combination_sum.md b/docs/Leetcode_Solutions/Python/039._combination_sum.md new file mode 100644 index 000000000..b5579c25d --- /dev/null +++ b/docs/Leetcode_Solutions/Python/039._combination_sum.md @@ -0,0 +1,64 @@ +### 39. Combination Sum + +题目: + + + + +难度: + +Medium + + +最初的思路: + + +``` +res = [] +def combSum(candidates, target, valueList): + if target == 0: + res.append(valueList) + for candidate in candidates: + if candidate > target: + return + combSum(candidates, target - candidate, valueList + [candidate] ) + +``` + + +问题在于,有重复: + +``` +combSum([2,3,6,7],7,[]) + +res +Out[9]: [[2, 2, 3], [2, 3, 2], [3, 2, 2], [7]] +``` + +然后看了hint,除[2, 2, 3] 和 [2, 3, 2]这种重复的方式是, 把candidates先sort,然后用index的方式来处理。 + + +所以最终的除重大法如下,根据hint做出: + +```python +class Solution(object): + def combinationSum(self, candidates, target): + """ + :type candidates: List[int] + :type target: int + :rtype: List[List[int]] + """ + def dfs(remain, combo, index): + if remain == 0: + res.append(combo) + return + for i in range(index, len(candidates)): + if candidates[i] > remain: + break + dfs(remain - candidates[i], combo + [candidates[i]], i) + candidates = list(set(candidates)) + candidates.sort() + res = [] + dfs(target, [], 0) + return res +``` diff --git a/docs/Leetcode_Solutions/Python/040._combination_sum_ii.md b/docs/Leetcode_Solutions/Python/040._combination_sum_ii.md new file mode 100644 index 000000000..7abb448f3 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/040._combination_sum_ii.md @@ -0,0 +1,39 @@ +### 40. Combination Sum II + +题目: + + + + +难度: + +Medium + + +Combination Sum 已经AC,做了minor change. +- 现在不需要```set```化```candidates```了 +- 但是递归的时候```index```要从```i+1```开始了 +- 要判断```combo not in res```才```append```到```res```中去 + +```python +class Solution(object): + def combinationSum2(self, candidates, target): + """ + :type candidates: List[int] + :type target: int + :rtype: List[List[int]] + """ + def dfs(remain, combo, index): + if remain == 0 and combo not in res: + res.append(combo) + return + for i in range(index, len(candidates)): + if candidates[i] > remain: + break + dfs(remain - candidates[i], combo + [candidates[i]], i+1) + candidates.sort() + res = [] + dfs(target, [], 0) + return res + +``` diff --git a/docs/Leetcode_Solutions/Python/042._trapping_rain_water.md b/docs/Leetcode_Solutions/Python/042._trapping_rain_water.md new file mode 100644 index 000000000..17e03b9ea --- /dev/null +++ b/docs/Leetcode_Solutions/Python/042._trapping_rain_water.md @@ -0,0 +1,39 @@ +### 42. Trapping Rain Water + + + +题目: + + + +难度: +Hard + +思路: + +题目有几个特性可用,bar width = 1,然后第一个和最后一个是不能trap water,其次中间的部分能trap多少水是看`左右高度差较低的那个 - 本身的高度` + +The basic idea is that we set two pointers ```l``` and ```r``` to the left and right end of ```height```. Then we get the minimum height (```min_height```) of these pointers (similar to Container with Most Water due to the Leaking Bucket Effect) since the level of the water cannot be higher than it. Then we move the two pointers towards the center. If the coming level is less than ```min_height```, then it will hold some water. Fill the water until we meet some “barrier” (with height larger than ```min_height```) and update ```l``` and ```r``` to repeat this process in a new interval. + +AC代码: + + +```python +class Solution(object): + def trap(self, height): + """ + :type height: List[int] + :rtype: int + """ + l, r, water, min_height = 0, len(height) - 1, 0, 0 + while l < r: + min_height = min(height[l], height[r]) + while l < r and height[l] <= min_height: + water += min_height - height[l] + l += 1 + while l < r and height[r] <= min_height: + water += min_height - height[r] + r -= 1 + return water + +``` diff --git a/docs/Leetcode_Solutions/Python/043._multiply_strings.md b/docs/Leetcode_Solutions/Python/043._multiply_strings.md new file mode 100644 index 000000000..461c8ee91 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/043._multiply_strings.md @@ -0,0 +1,81 @@ +###43. Multiply Strings + +题目: + + + +难度: + +Medium + + +思路: + +虽然写了一堆similar problems,拿到的时候也算有思路,但是还是觉得很难写 + +参考了别人的思路: + +1. m位的数字乘以n位的数字的结果最大为m+n位: +999*99 < 1000*100 = 100000,最多为3+2 = 5位数。 +2. 先将字符串逆序便于从最低位开始计算。 + + +觉得这样写才是最容易理解的,看一个具体的🌰: + +``` +123 * 456 + + 123 + * 456 + + +先把每一位拿来相乘:得到 + 1 2 3 + 4 5 6 + + 6 12 18 + 5 10 15 + 4 8 12 + +这样在全部加起来和做进位处理 + 5 6 0 8 8 + + +``` + + + + +``` +class Solution(object): + def multiply(self, num1, num2): + """ + :type num1: str + :type num2: str + :rtype: str + """ + if num1 == '0' or num2 == '0' : return '0' + len1,len2 = len(num1),len(num2) + + num1 = num1[::-1] + num2 = num2[::-1] + # 99 * 99 < 10000, maxmize 4 digit + arr = [0 for i in range(len1 + len2)] + + for i in xrange(len1): + for j in xrange(len2): + arr[i+j] += (ord(num1[i]) - ord('0')) * (ord(num2[j]) - ord('0')) + + + res = [0 for i in range(len1 + len2)] + + for i in range(len(arr)): + res[i] = arr[i] % 10 + if i < len(arr) - 1: + arr[i+1] += arr[i]/10 + + i = len(arr)-1 + if res[i] == 0: + i -= 1 + return ''.join(str(j) for j in res[:i+1][::-1]) +``` diff --git a/docs/Leetcode_Solutions/Python/044._wildcard_matching.md b/docs/Leetcode_Solutions/Python/044._wildcard_matching.md new file mode 100644 index 000000000..e7d2755a0 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/044._wildcard_matching.md @@ -0,0 +1,44 @@ +###44. Wildcard Matching + +题目: + + + +难度: + +Hard + + + +做完Regular Expression Matching来做的这道题,按照DP思路run一下是超时,感觉是开心的,至少暂时没有报错了,有待优化,应该在dp的同时在贪心一下么。 + + + +超时代码 +``` +class Solution(object): + def isMatch(self, s, p): + """ + :type s: str + :type p: str + :rtype: bool + """ + m, n = len(s), len(p) + dp = [ [0 for i in xrange(n+1)] for j in xrange(m+1)] + + dp[0][0] = 1 + + # init the first line + for i in xrange(1,n+1): + if p[i-1] == '*': + dp[0][i] = dp[0][i-1] + + for i in xrange(1,m+1): + for j in xrange(1,n+1): + if p[j-1] == s[i-1] or p[j-1] == '?': + dp[i][j] = dp[i-1][j-1] + elif p[j-1] == '*': + dp[i][j] = dp[i][j-1] or dp[i-1][j] + + return dp[m][n] == 1 +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/045._Jump_Game_II.md b/docs/Leetcode_Solutions/Python/045._Jump_Game_II.md new file mode 100644 index 000000000..ae8caf9a1 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/045._Jump_Game_II.md @@ -0,0 +1,43 @@ +### 45. Jump Game II + +题目: + + + +难度: + +Easy + + +思路 + +greedy solution, the current jump is ```[i, cur_end]```, and the ```cur_farthest``` is the farthest point +that all of point in ```[i, cur_end]``` can reach, whenever ```cur_farthest``` is larger than the last point' index, +return current ```jump+1```; whenever ```i``` reaches ```cur_end```, update ```cur_end``` to ```current cur_farthest```. +- Time: O(log(n)) +- Space: O(1) + +```python +class Solution(object): + def jump(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + # Note You can assume that you can always reach the last index. + cur_end, cur_farthest, step, n = 0, 0, 0, len(nums) + for i in range(n-1): + cur_farthest = max(cur_farthest, i + nums[i]) + if cur_farthest >= n - 1: + step += 1 + break + if i == cur_end: + cur_end = cur_farthest + step += 1 + return step + + + +``` + + diff --git a/docs/Leetcode_Solutions/Python/046._permutations.md b/docs/Leetcode_Solutions/Python/046._permutations.md new file mode 100644 index 000000000..a79e7c67c --- /dev/null +++ b/docs/Leetcode_Solutions/Python/046._permutations.md @@ -0,0 +1,138 @@ +###46. Permutations + +题目: + + + +难度: + +Medium + + +复习了一下,自己写的容易理解版本: + +每次调一个放入现有 + +``` +class Solution(object): + def permute(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + self.result = [] + self.recPermute([],nums) + return self.result + + def recPermute(self, sofar, rest): + if rest == []: + self.result.append(sofar) + else: + for i in range(len(rest)): + next = sofar + [rest[i]] + remaining = rest[:i] + rest[i+1:] + self.recPermute(next, remaining) +``` + +交换 + + + +``` +class Solution(object): + def permute(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + result = [] + self.helper(nums,0,result) + return result + + def helper(self,nums,begin,result): + n = len(nums) + if begin == n: + tmp = nums[:] + result.append(tmp) + return + + for i in range(begin,n): + nums[begin], nums[i] = nums[i],nums[begin] + self.helper(nums,begin+1,result) + nums[begin],nums[i] = nums[i],nums[begin] + +``` + + + + + + +好像还有一个巧妙的版本 + + +``` +class Solution: + # @param num, a list of integer + # @return a list of lists of integers + def permute(self, num): + if len(num) == 0: return [] + if len(num) == 1: return [num] + res = [] + for i in range(len(num)): + for j in self.permute(num[:i] + num[i+1:]): + res.append([num[i]] + j) + return res +``` + + +更容易理解的写法: + + +``` +class Solution: + # @param num, a list of integer + # @return a list of lists of integers + def permute(self, num): + if len(num) == 0: return [] + if len(num) == 1: return [num] + res = [] + for i in range(len(num)): + x = num[i] + xs = num[:i] + num[i+1:] + for j in self.permute(xs): + res.append([x] + j) + return res + +``` + +就是一定要有递归的信念❤️ + + + +还有介绍的基本无memory使用的算法: + + +``` +class Solution: + # @param num, a list of integer + # @return a list of lists of integers + def permute(self, num): + if len(num) == 0: yield [] + if len(num) == 1: yield [num] + res = [] + for i in range(len(num)): + x = num[i] + xs = num[:i] + num[i+1:] + for j in self.permute(xs): + res.append([x] + j) + yield res + +``` + +但是这个yield只是生产generator,要看结果还是要用for in的。 + + + + + diff --git a/docs/Leetcode_Solutions/Python/047._permutations_ii.md b/docs/Leetcode_Solutions/Python/047._permutations_ii.md new file mode 100644 index 000000000..68a3ead84 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/047._permutations_ii.md @@ -0,0 +1,42 @@ +###47. Permutations II + +题目: + + + +难度: + +Medium + + +虽然想到了,但是没有靠自己的力量implement出来,还是比较容易了理解的,因为如果有重复的,那么处理只用处理第一个,就只用把第一个提出来,剩下的管它怎么permute。 + +第二次碰到这个元素就不要再用它了,因为可能出现的组合已经有了。 + + +看代码: +base case 处理掉 +sort一下,设置一个prevNum变量 + +如果碰到过了,就continue,去继续执行下一个 + + +``` +class Solution(object): + def permuteUnique(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + if len(nums) == 0: return [] + if len(nums) == 1: return [nums] + res = [] + nums.sort() + for i in range(len(nums)): + if i > 0 and nums[i] == nums[i-1]: continue + for j in self.permuteUnique(nums[:i] + nums[i+1:]): + res.append([nums[i]] + j) + return res +``` + + diff --git a/docs/Leetcode_Solutions/Python/048._rotate_image.md b/docs/Leetcode_Solutions/Python/048._rotate_image.md new file mode 100644 index 000000000..5c727dd7c --- /dev/null +++ b/docs/Leetcode_Solutions/Python/048._rotate_image.md @@ -0,0 +1,105 @@ +### 48. Rotate Image + + +题目: + + + +难度: + +Medium + + + + +思路一: + + +先将矩阵上下翻转,然后将矩阵中心对称翻转,即可实现顺时针90度旋转。 + + +- 上下翻转规律 [i][:] --> [n-1-i][:] +- 对角线变换的规律是 [i][j] --> [j][i] + + +例如: +``` +1 1 1 3 3 3 3 2 1 +2 2 2 -> 2 2 2 -> 3 2 1 +3 3 3 1 1 1 3 2 1 +``` + + +```python +class Solution(object): + def rotate(self, matrix): + """ + :type matrix: List[List[int]] + :rtype: void Do not return anything, modify matrix in-place instead. + """ + n = len(matrix) + # 上下翻转 + for i in range(n/2): + matrix[i], matrix[n-1-i] = matrix[n-1-i], matrix[i] + # 主对角线翻转 + for i in range(n): + for j in range(i+1,n): + matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j] +``` + + +思路二: + +参考这里 + + + +找规律,一次完成四个数的该有的变换 + +``` + +1 2 3 4 5 + +6 7 8 9 10 + +11 12 13 14 15 + +16 17 18 19 20 + +21 22 23 24 25 + +``` + +在思路一的解法下观察得出,每个元素的变换是 [x][y] -> [n-1-x][y] -> [y][n-1-x] -> [n-1-y][x] + + +```python +class Solution(object): + def rotate(self, matrix): + """ + :type matrix: List[List[int]] + :rtype: void Do not return anything, modify matrix in-place instead. + """ + n = len(matrix) + for i in range(n/2): + for j in range(n-n/2): + matrix[i][j], matrix[~j][i], matrix[~i][~j], matrix[j][~i] = \ + matrix[~j][i], matrix[~i][~j], matrix[j][~i], matrix[i][j] +``` +这里的```[~i]``` 意思就是 ```[n-1-i]``` + +思路三: + +直接用zip函数,一行, 😂 + +```python +class Solution: + def rotate(self, A): + A[:] = zip(*A[::-1]) + # A[:] = map(list, zip(*A[::-1])) +``` + + + + + diff --git a/docs/Leetcode_Solutions/Python/049._group_anagrams_python.md b/docs/Leetcode_Solutions/Python/049._group_anagrams_python.md new file mode 100644 index 000000000..1371afdb4 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/049._group_anagrams_python.md @@ -0,0 +1,28 @@ +### 49. Group Anagrams python + +题目: + + + +难度 : Medium + +python大法好 + + +```python +class Solution(object): + def groupAnagrams(self, strs): + """ + :type strs: List[str] + :rtype: List[List[str]] + """ + mapx = {} + for i in strs: + x = ''.join(sorted(list(i))) + if x in mapx: + mapx[x].append(i) + else: + mapx[x] = [i] + return mapx.values() + +``` diff --git a/docs/Leetcode_Solutions/Python/050._pow(x,_n).md b/docs/Leetcode_Solutions/Python/050._pow(x,_n).md new file mode 100644 index 000000000..697863e2f --- /dev/null +++ b/docs/Leetcode_Solutions/Python/050._pow(x,_n).md @@ -0,0 +1,48 @@ +### 50. Pow(x, n) + +题目: + + + +难度: + +Medium + + +Recursive + +```python +class Solution(object): + def myPow(self, x, n): + """ + :type x: float + :type n: int + :rtype: float + """ + if n == 0: + return 1 + if n < 0: + return 1 / self.myPow(x, -n) + if n % 2 == 0: + return self.myPow(x*x, n/2) + else: + return x * self.myPow(x*x, n/2) + +``` +iterative + + +```python +class Solution: + def myPow(self, x, n): + if n < 0: + x = 1 / x + n = -n + pow = 1 + while n: + if n & 1: + pow *= x + x *= x + n >>= 1 + return pow +``` diff --git a/docs/Leetcode_Solutions/Python/051._n-queens.md b/docs/Leetcode_Solutions/Python/051._n-queens.md new file mode 100644 index 000000000..3e7c197c3 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/051._n-queens.md @@ -0,0 +1,38 @@ +### 51. N-Queens + +题目: + + + +难度: +Hard + +八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当n = 1或n ≥ 4时问题有解[1]。 + +对于任意(x,y),如果要让新的点和它不能处于同一条横行、纵行或斜线上,则新点(p,q)必须要满足p+q != x+y 和p-q!= x-y, 前者针对左下右上斜线,后者针对左上右下斜线,两者同时都保证了不在同一条横行和纵行上。 + +代码中变量的含义: +- col_per_row: 每一行皇后的column位置组成的列表 +- cur_row:目前正在判断的row的index +- xy_diff:所有x-y组成的列表 +- xy_sum:所有x+y组成的列表 + +```python +class Solution(object): + def solveNQueens(self, n): + """ + :type n: int + :rtype: List[List[str]] + """ + def dfs(col_per_row, xy_diff, xy_sum): + cur_row = len(col_per_row) + if cur_row == n: + ress.append(col_per_row) + for col in range(n): + if col not in col_per_row and cur_row-col not in xy_diff and cur_row+col not in xy_sum: + dfs(col_per_row+[col], xy_diff+[cur_row-col], xy_sum+[cur_row+col]) + ress = [] + dfs([], [], []) + return [['.'*i + 'Q' + '.'*(n-i-1) for i in res] for res in ress] + +``` diff --git a/docs/Leetcode_Solutions/Python/052._n-queens_ii.md b/docs/Leetcode_Solutions/Python/052._n-queens_ii.md new file mode 100644 index 000000000..1d65adc16 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/052._n-queens_ii.md @@ -0,0 +1,46 @@ +### 52. N-Queens II + +题目: + + + +难度: +Hard + +思路参见recursion & backtracking + +n queens还是属于比较难的,需要花时间吃透的问题 + +八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当n = 1或n ≥ 4时问题有解[1]。 + +对于任意(x,y),如果要让新的点和它不能处于同一条横行、纵行或斜线上,则新点(p,q)必须要满足p+q != x+y 和p-q!= x-y, 前者针对左下右上斜线,后者针对左上右下斜线,两者同时都保证了不在同一条横行和纵行上。 + +代码中变量的含义: +- col_per_row: 每一行皇后的column位置组成的列表 +- cur_row:目前正在判断的row的index +- xy_diff:所有x-y组成的列表 +- xy_sum:所有x+y组成的列表 + +```python +class Solution(object): + def totalNQueens(self, n): + """ + :type n: int + :rtype: int + """ + def dfs(col_per_row, xy_diff, xy_sum): + cur_row = len(col_per_row) + if cur_row == n: + ress.append(col_per_row) + for col in range(n): + if col not in col_per_row and cur_row-col not in xy_diff and cur_row+col not in xy_sum: + dfs(col_per_row+[col], xy_diff+[cur_row-col], xy_sum+[cur_row+col]) + ress = [] + dfs([], [], []) + return len(ress) + +``` + + + + diff --git a/docs/Leetcode_Solutions/Python/053._maximum_subarray.md b/docs/Leetcode_Solutions/Python/053._maximum_subarray.md new file mode 100644 index 000000000..e71c549d1 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/053._maximum_subarray.md @@ -0,0 +1,146 @@ +### 53. Maximum Subarray + +题目: + + + +难度: +Medium + + +思路一: + +O(N^2) + +从i开始,计算i到n,存比较大的sum,会超时 + +``` +class Solution(object): + def maxSubArray(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + n = len(nums) + m = float('-inf') + for i in range(n): + s = 0 + for j in range(i,n): + s = s + nums[j] + m = max(m,s) + return m +``` + +思路二: + +动归 + +ms(i) = max(ms[i-1]+ a[i],a[i]) + +到i处的最大值两个可能,一个是加上a[i],另一个从a[i]起头,重新开始。可以AC + +```python +class Solution(object): + def maxSubArray(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + n = len(nums) + maxSum = [nums[0] for i in range(n)] + for i in range(1,n): + maxSum[i] = max(maxSum[i-1] + nums[i], nums[i]) + return max(maxSum) +``` + + +思路三: + + +Kadane’s Algorithm wikipedia可以查到,然后一般的是负的可以还回0,这里需要稍作修改,参考 + + + + +``` +start: + max_so_far = a[0] + max_ending_here = a[0] + +loop i= 1 to n + (i) max_end_here = Max(arrA[i], max_end_here+a[i]); + (ii) max_so_far = Max(max_so_far,max_end_here); + +return max_so_far + +``` + +AC代码: + +```python +class Solution(object): + def maxSubArray(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + n = len(nums) + maxSum , maxEnd = nums[0], nums[0] + + for i in range(1,n): + maxEnd = max(nums[i],maxEnd + nums[i]) + maxSum = max(maxEnd,maxSum) + return maxSum +``` + + +思路四: + + + +参见clrs 第71页,用divide and conquer,有伪码 + + +最大的subarray sum有三个可能,左半段或者右半段,或者跨越左右半段, + +速度比较慢,AC代码,复杂度O(NlogN) + +``` +class Solution(object): + def maxSubArray(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + def find_max_crossing_subarray(nums, low, mid, high): + left_sum = float('-inf') + sum = 0 + for i in xrange(mid,low-1,-1): + sum = sum + nums[i] + if sum > left_sum: + left_sum = sum + + right_sum = float('-inf') + sum = 0 + for j in range(mid+1,high+1): + sum = sum + nums[j] + if sum > right_sum: + right_sum = sum + + return left_sum + right_sum + + def find_max_subarray(nums,low,high): + if low == high: + return nums[low] + else: + mid = (low + high) / 2 + left_sum = find_max_subarray(nums, low, mid) + right_sum = find_max_subarray(nums,mid+1,high) + cross_sum = find_max_crossing_subarray(nums,low,mid,high) + # print left_sum, right_sum, cross_sum + # print mid, low, high + return max(left_sum, right_sum, cross_sum) + + return find_max_subarray(nums, 0, len(nums)-1) + +``` diff --git a/docs/Leetcode_Solutions/Python/054._spiral_matrix.md b/docs/Leetcode_Solutions/Python/054._spiral_matrix.md new file mode 100644 index 000000000..ca2219ec1 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/054._spiral_matrix.md @@ -0,0 +1,139 @@ +### 54. Spiral Matrix + +题目: + + + +难度: +Medium + + +参考别人的代码,一开始觉得很有递归性,根据奇偶不同来写,递归太难写。 + +然后想到了loop,再想,可能有更优trick,事实证明并没有。 + +用四个变量来控制边界,然后因为方向总是:→↓←↑ 左右下上 + + + + +```python +class Solution(object): + def spiralOrder(self, matrix): + """ + :type matrix: List[List[int]] + :rtype: List[int] + """ + if matrix == [] : return [] + res = [] + maxUp = maxLeft = 0 + maxDown = len(matrix) - 1 + maxRight = len(matrix[0]) - 1 + direction = 0 # 0 go right, 1 go down, 2 go left, 3 up + while True: + if direction == 0: #go right + for i in range(maxLeft, maxRight+1): + res.append(matrix[maxUp][i]) + maxUp += 1 + elif direction == 1: # go down + for i in range(maxUp, maxDown+1): + res.append(matrix[i][maxRight]) + maxRight -= 1 + elif direction == 2: # go left + for i in reversed(range(maxLeft, maxRight+1)): + res.append(matrix[maxDown][i]) + maxDown -= 1 + else: #go up + for i in reversed(range(maxUp, maxDown+1)): + res.append(matrix[i][maxLeft]) + maxLeft +=1 + if maxUp > maxDown or maxLeft > maxRight: + return res + direction = (direction + 1 ) % 4 +``` + +以上的写法非常精妙,看看我自己用同样的思路写的|||| + +```python +class Solution(object): + def spiralOrder(self, matrix): + """ + :type matrix: List[List[int]] + :rtype: List[int] + """ + if len(matrix) == 0 : return [] + + left = 0 + up = 0 + down = len(matrix) - 1 + right = len(matrix[0]) -1 + + # 0 -> right, 1 -> down, 2-> left, 3 -> up + direction = 0 + + # start location + x, y = 0,0 + res = [] + + while True: + if left > right or up > down: + return res + + if direction == 0 : + while y <= right: + res.append(matrix[up][y]) + y += 1 + up += 1 + x = up + direction = 1 + continue + + if direction == 1: + while x <= down: + res.append(matrix[x][right]) + x += 1 + right -= 1 + y = right + direction = 2 + continue + + if direction == 2: + while y >= left: + res.append(matrix[down][y]) + y -= 1 + down -= 1 + x = down + direction = 3 + continue + + if direction == 3: + while x >= up: + res.append(matrix[x][left]) + x -= 1 + left += 1 + y = left + direction = 0 + continue + +``` + +明显别人的代码写的更精妙,因为这里两个boundary都很明确,所以用for in range就能很好的解决问题了. + + + + + +----------- + +最后放一个无敌一行,怕你看完不想看上面的代码了 +```python +class Solution(object): + def spiralOrder(self, matrix): + """ + :type matrix: List[List[int]] + :rtype: List[int] + """ + return matrix and list(matrix.pop(0)) + self.spiralOrder(zip(*matrix)[::-1]) +``` + +oh, my god! diff --git a/docs/Leetcode_Solutions/Python/055._jump_game.md b/docs/Leetcode_Solutions/Python/055._jump_game.md new file mode 100644 index 000000000..1de4f1d02 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/055._jump_game.md @@ -0,0 +1,39 @@ +### 55. Jump Game + +题目: + + + +难度: + +Medium + + +问题出现在一旦有0,而且这个0是不可跨过的那么无解,无法达到 + + +看了hint,根本不用这个数组,直接用一个数来记录可达最远距离,非常巧妙 + + +```python +class Solution(object): + def canJump(self, nums): + """ + :type nums: List[int] + :rtype: bool + """ + if not nums: + return True + if len(nums) == 1: + return True + n = len(nums) + idx, reach = 0, 0 + while idx < n-1 and idx <= reach: # idx <= reach是为了处理nums[idx] == 0的情况,若idx>reach说明已经失败了 + reach = max(reach, idx+nums[idx]) + idx += 1 + return reach >= n-1 +``` + +idx记录当前loop位置,reach记录当前可到位置 + +注意这里的while循环的条件是 `idx < n-1 and idx <= reach`,之所以加上 `idx <= reach` 是因为如果```idx > reach```说明```idx```层不可达,其实也可以直接terminate. diff --git a/docs/Leetcode_Solutions/Python/056._Merge_Intervals.md b/docs/Leetcode_Solutions/Python/056._Merge_Intervals.md new file mode 100644 index 000000000..1f5ab7aa6 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/056._Merge_Intervals.md @@ -0,0 +1,31 @@ +### 56. Merge Intervals + +题目: + + + +难度: + +Medium + + +Just go through the intervals sorted by start coordinate and +either combine the current interval with the previous one if they overlap, or add it to the output by itself if they don’t. + +```python +class Solution(object): + def merge(self, intervals): + """ + :type intervals: List[Interval] + :rtype: List[Interval] + """ + res = [] + for i in sorted(intervals, key = lambda i: i.start): + if res and i.start <= res[-1].end: + res[-1].end = max(i.end, res[-1].end) + else: + res.append(i) + return res +``` + + diff --git a/docs/Leetcode_Solutions/Python/058._length_of_last_word.md b/docs/Leetcode_Solutions/Python/058._length_of_last_word.md new file mode 100644 index 000000000..b9ec0160c --- /dev/null +++ b/docs/Leetcode_Solutions/Python/058._length_of_last_word.md @@ -0,0 +1,45 @@ +### 58. Length of Last Word + +题目: + + + +难度 : Easy + +我的解法: + +```python +class Solution(object): + def lengthOfLastWord(self, s): + """ + :type s: str + :rtype: int + """ + s = s[::-1].strip() + return s.find(' ') if s.find(' ') != -1 else len(s) +``` +作弊式做法 + +```python +class Solution(object): + def lengthOfLastWord(self, s): + """ + :type s: str + :rtype: int + """ + lst = s.split() + if len(lst) >= 1: + return len(lst[-1]) + return 0 +``` +split()方法最低可以分0组,split(' ')最低可以分1组 +```python +一行解法: +class Solution(object): + def lengthOfLastWord(self, s): + """ + :type s: str + :rtype: int + """ + return len(s.strip().split(" ")[-1]) +``` diff --git a/docs/Leetcode_Solutions/Python/059._spiral_matrix_ii.md b/docs/Leetcode_Solutions/Python/059._spiral_matrix_ii.md new file mode 100644 index 000000000..42ae52662 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/059._spiral_matrix_ii.md @@ -0,0 +1,67 @@ +### 59. Spiral Matrix II + +题目: + + + +难度: +Medium + +和Spiral Matrix的思路基本一致 + +也许还有待挖掘trick + + +```python +class Solution(object): + def generateMatrix(self,n): + """ + :type n: int + :rtype: List[List[int]] + """ + curNum = 0 + matrix = [[0 for i in range(n)] for j in range(n)] + maxUp = maxLeft = 0 + maxDown = maxRight = n - 1 + direction = 0 + while True: + if direction == 0: #go right + for i in range(maxLeft, maxRight+1): + curNum += 1 + matrix[maxUp][i] = curNum + maxUp += 1 + elif direction == 1: # go down + for i in range(maxUp, maxDown+1): + curNum += 1 + matrix[i][maxRight] = curNum + maxRight -= 1 + elif direction == 2: # go left + for i in reversed(range(maxLeft, maxRight+1)): + curNum += 1 + matrix[maxDown][i] = curNum + maxDown -= 1 + else: #go up + for i in reversed(range(maxUp, maxDown+1)): + curNum += 1 + matrix[i][maxLeft] = curNum + maxLeft +=1 + if curNum >= n*n: + return matrix + direction = (direction + 1 ) % 4 +``` + +Same idea with [spiral matrix I](https://github.com/Lisanaaa/thinking_in_lc/blob/master/054._spiral_matrix.md) +```python +class Solution(object): + def generateMatrix(self, n): + """ + :type n: int + :rtype: List[List[int]] + """ + res = [] + l = n * n + 1 + while l > 1: + l, r = l - len(res), l + res = [range(l, r)] + zip(*res[::-1]) + return res +``` diff --git a/docs/Leetcode_Solutions/Python/060._permutation_sequence.md b/docs/Leetcode_Solutions/Python/060._permutation_sequence.md new file mode 100644 index 000000000..81935e253 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/060._permutation_sequence.md @@ -0,0 +1,93 @@ +###60. Permutation Sequence + +题目: + + + +难度: + +Medium + + + +偷懒,用46的方法,会超时 + +``` + +class Solution(object): + def getPermutation(self, n, k): + """ + :type n: int + :type k: int + :rtype: str + """ + self.result = [] + s = "" + for i in range(1, n+1): + s += str(i) + self.recPermute("",s,k) + return self.result[-1] + + + def recPermute(self, sofar, rest, k): + if rest == "": + if len(self.result) == k: + return + self.result.append(sofar) + else: + for i in xrange(len(rest)): + nnext = sofar + rest[i] + remaining = rest[:i] + rest[i+1:] + self.recPermute(nnext, remaining, k) +``` + + +然后其实有规律的,比如 + +``` +1 "123" +2 "132" +3 "213" +4 "231" +5 "312" +6 "321" +``` + +是第n个数 + 余下的n-1个数的permutation + + +k = 1 就是所有的顺序排列 +k = n! 是所有的逆序排列 + +对于余下的也是递归,比如 + + +k < (n-1)! 1 + (n-1)个数的全排列的第k个 +k < 2*(n-1)! 2 + (n-1)个数的顺序全排列的第k个 + + +发现思路对了,但是implement还有点困难. + +看了一个最为精妙的解法 + +``` +class Solution(object): + def getPermutation(self, n, k): + """ + :type n: int + :type k: int + :rtype: str + """ + seq, k, fact = '', k-1, math.factorial(n-1) + perm = [i for i in range(1, n+1)] + for i in reversed(xrange(n)): + curr = perm[k/fact] + seq += str(curr) + perm.remove(curr) + if i > 0: + k %= fact + fact /= i + return seq +``` + + diff --git a/docs/Leetcode_Solutions/Python/061._rotate_list.md b/docs/Leetcode_Solutions/Python/061._rotate_list.md new file mode 100644 index 000000000..a26319d15 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/061._rotate_list.md @@ -0,0 +1,58 @@ + +###61. Rotate List + + +题目: + + + +难度: + +Medium + +- k可能比list的size大,需要做一个取余准备 +- 计算list size的同时把tail也记录下来,方便之后把tail的next指向原本的head +- 利用之前的到末端的kth node + + +AC 代码 + +``` +class Solution(object): + def rotateRight(self, head, k): + if head == None or k == 0 : + return head + + cur = head + size = 1 + while cur.next: + size += 1 + cur = cur.next + + tail = cur + + k = k % size + + p = self.findKth(head,k) + + tail.next = head + head = p.next + p.next = None + return head + + def findKth(self,head, k): + dummy = ListNode(-1) + dummy.next = head + p = dummy + q = dummy + + for i in range(k): + q = q.next + + while q.next: + p = p.next + q = q.next + return p +``` + + diff --git a/docs/Leetcode_Solutions/Python/064._minimum_path_sum.md b/docs/Leetcode_Solutions/Python/064._minimum_path_sum.md new file mode 100644 index 000000000..591c171b5 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/064._minimum_path_sum.md @@ -0,0 +1,58 @@ + +###64. Minimum Path Sum + +题目: + + + +难度: + +Medium + + + +非常明显的DP + +状态转移方程 + +dp[i][j] = gird[i][j] + min(dp[i-1][j], dp[i][j-1]) + + +然后注意一下边界的处理,一开始dp[0][0] = grid[0][0] + +第一行和第一列,之后开始全用状态转移方程 + + +``` +class Solution(object): + def minPathSum(self, grid): + """ + :type grid: List[List[int]] + :rtype: int + """ + m = len(grid) + n = len(grid[0]) if m else 0 + + dp = [[0 for i in range(n)] for i in range(m)] + + dp[0][0] = grid[0][0] + + # first row + for i in range(1,n): + dp[0][i] = grid[0][i] + dp[0][i-1] + + # first col + for i in range(1,m): + dp[i][0] = grid[i][0] + dp[i-1][0] + + + for i in range(1,m): + for j in range(1,n): + dp[i][j] = grid[i][j] + min(dp[i-1][j], dp[i][j-1]) + + + return dp[m-1][n-1] + + + +``` diff --git a/docs/Leetcode_Solutions/Python/065.unique_paths_ii.md b/docs/Leetcode_Solutions/Python/065.unique_paths_ii.md new file mode 100644 index 000000000..16e8e940c --- /dev/null +++ b/docs/Leetcode_Solutions/Python/065.unique_paths_ii.md @@ -0,0 +1,84 @@ + ###65.Unique Paths II + +题目: + + + + +tag : DP + +难度 : Medium + + + + + +``` +BASE CASE( i = 0 , j = 0): +//第一排和第一列,如果没有obstacle, 则走法为1, 一旦有了obstacle,则之后的格子走法都为0 + +非BASE CASE : +//一旦有obstacle,则dp为0 +dp(i, j) = dp(i,j-1) + dp(i-1,j) + +``` + +Python代码 + +``` +class Solution(object): + def uniquePathsWithObstacles(self, obstacleGrid): + """ + :type obstacleGrid: List[List[int]] + :rtype: int + """ + row = len(obstacleGrid) + col = len(obstacleGrid[0]) + dp = [[0 for i in range(col)] for j in range(row)] + + dp[0][0] = int(obstacleGrid[0][0] == 0) + + #first row + for j in range(1,col): + if obstacleGrid[0][j] == 1: + dp[0][j] = 0 + else: + dp[0][j] = dp[0][j-1] + #first col + for i in range(1,row): + if obstacleGrid[i][0] == 1: + dp[i][0] = 0 + else: + dp[i][0] = dp[i-1][0] + + for i in range(1,row): + for j in range(1,col): + if obstacleGrid[i][j] == 1: + dp[i][j] = 0 + else: + dp[i][j] = dp[i-1][j] + dp[i][j-1] + return dp[row-1][col-1] + +``` + +犯了一个错,简直觉得不可思议。一开始初始化dp用的代码是 + +``` +dp = [[0] * col] * row +``` + +问题在此: + + +``` +>>> x = [[]] * 3 +>>> x[1].append(0) +>>> x +[[0], [0], [0]] +``` + +这样初始化是做了三个一样的object. + +The problem is that they're all the same exact list in memory. When you use the [x]*n syntax, what you get is a list of n many x objects, but they're all references to the same object. They're not distinct instances, rather, just n references to the same instance. + +参见stackoverflow : diff --git a/docs/Leetcode_Solutions/Python/066._plus_one.md b/docs/Leetcode_Solutions/Python/066._plus_one.md new file mode 100644 index 000000000..8897d3919 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/066._plus_one.md @@ -0,0 +1,60 @@ +### 66. Plus One + +题目: + + + +难度 : Easy + + + + +这里是用的递归,很容易理解,如果空列表直接加1,最后一位小于9,那么直接就最后一位加1,否则添加一个0,然后再把余下的递归加1 + + +```python + +class Solution(object): + def plusOne(self, digits): + """ + :type digits: List[int] + :rtype: List[int] + """ + if digits == []: + return [1] + if digits[-1] < 9: + return digits[:-1] + [digits[-1] + 1] + else: + return self.plusOne(digits[:-1]) + [0] +``` + + +其实可以考虑循环,效率更高,参考[此处](https://shenjie1993.gitbooks.io/leetcode-python/content/066%20Plus%20One.html) + + + +> 从低位到高位,如果后一位有进位的话,那么该位要加上一,否则退出循环。如果最高位也进位,那么在列表前要插入一个一。 + + + +``` +class Solution(object): + def plusOne(self, digits): + """ + :type digits: List[int] + :rtype: List[int] + """ + carry = 1 + + for i in range(len(digits)-1,-1,-1): + digits[i] += carry + if digits[i] < 10: + carry = 0 + break + else: + digits[i] -= 10 + if carry == 1: + digits.insert(0,1) + return digits +``` + diff --git a/docs/Leetcode_Solutions/Python/067._add_binary.md b/docs/Leetcode_Solutions/Python/067._add_binary.md new file mode 100644 index 000000000..875dc9e63 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/067._add_binary.md @@ -0,0 +1,31 @@ +###67. Add Binary + +题目: + + + +难度 : Easy + + +几种case: + +- a or b 为空,最简单 +- 唯一的问题是如果有进位的处理,进位的处理就是先让其中的一个数和```‘1’```做```addBinary```处理 ,然后再用```addBinary``` + +```python +class Solution(object): + def addBinary(self, a, b): + """ + :type a: str + :type b: str + :rtype: str + """ + if (a == '' or b == ''): + return a + b + elif a[-1] == '0' and b[-1] == '0': + return self.addBinary(a[:-1], b[:-1]) + '0' + elif a[-1] == '1' and b[-1] == '1': + return self.addBinary(a[:-1], self.addBinary(b[:-1],'1')) + '0' + else: + return self.addBinary(a[:-1], b[:-1]) + '1' +``` diff --git a/docs/Leetcode_Solutions/Python/069._sqrt(x).md b/docs/Leetcode_Solutions/Python/069._sqrt(x).md new file mode 100644 index 000000000..70c28f6e2 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/069._sqrt(x).md @@ -0,0 +1,101 @@ +### 69. Sqrt(x) + + +题目: + + + +难度: + +Medium + + +思路: + +一看,觉得很容易,一写,超时: + +``` +class Solution(object): + def mySqrt(self, x): + """ + :type x: int + :rtype: int + """ + i = 0 + while i * i <= x : + if i * i == x: + return i + elif i * i < x and (i+1) * (i+1) > x: + return i + i += 1 +``` + +看一眼tag, binary search,难道从x/2之类的开始搜起来?话说还想到求sqrt有个🐂的牛顿法? + +莫名其妙过了的代码: + +```python +class Solution(object): + def mySqrt(self, x): + """ + :type x: int + :rtype: int + """ + if x == 1 : return 1 + if x == 0 : return 0 + l, r = 0, x - 1 + while l <= r: + mid = l + ((r - l) >> 2) + if mid * mid <= x and (mid+1)*(mid+1) > x: + return mid + elif mid * mid > x: + r = mid - 1 + else: + l = mid + 1 +``` + +或者 +```python +class Solution(object): + def mySqrt(self, x): + """ + :type x: int + :rtype: int + """ + if x == 1: + return 1 + if x == 0: + return 0 + l, r = 0, x-1 + while l <= r: + mid = l + ((r - l) >> 2) + if (mid * mid - x == 0): + return mid + elif (mid * mid - x > 0): + r = mid - 1 + else: + l = mid + 1 + return r +``` + + + +牛顿法 + +参见wikipedia,to be done:自己推导一遍 + + + +```python +class Solution(object): + def mySqrt(self, x): + """ + :type x: int + :rtype: int + """ + res = 1.0 + while abs(res * res - x) > 0.1: + res = (res + x / res) / 2 + return int(res) + +``` diff --git a/docs/Leetcode_Solutions/Python/070. Climbing Stairs.md b/docs/Leetcode_Solutions/Python/070. Climbing Stairs.md new file mode 100644 index 000000000..890b2f338 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/070. Climbing Stairs.md @@ -0,0 +1,99 @@ +### 70. Climbing Stairs + + +题目: + + + +难度: +Easy + +思路: + +Fibonacci 的DP版本 + +对于DP的不同理解造成不同的写法 +Memoization will usually add on your time-complexity to your space-complexity (e.g. with tabulation you have more liberty to throw away calculations, like using tabulation with Fib lets you use O(1) space, but memoization with Fib uses O(N) stack space). +详看 + +[Dynamic programming and memoization: bottom-up vs top-down approaches](https://awjin.me/algos-js/dp/tab-memo.html) + +[Tabulation vs Memoizatation](http://www.geeksforgeeks.org/tabulation-vs-memoizatation/) +- top-down(memorize) + +``` +def memorize_fib(n): # n为第几个Fibonacci数 + memo = {1:1, 2:1} + if n in memo: + return memo[n] + else: + memo[n] = memorize_fib(n-1) + memorize_fib(n-2) + return memo[n] + +print(memorize_fib(4)) +``` +输出```3``` + + +- bottom up(tabulation) + +``` +def tabulation_fib(n): # n为第几个Fibonacci数 + fib = [1, 1, 2] + if n < 4: + return fib[n-1] + for k in range(3, n+1): + fib[2] = fib[0] + fib[1] + fib[0], fib[1] = fib[1], fib[2] + return fib[2] + +print(tabulation_fib(4)) +``` +输出```3``` + +这里memo用dict,用array也一样。当然用bottom up还有一点,可以只存每次最后两个数,可以save space.,这样就只用到constant space. + +AC 代码(这里采用bottom up思想) + +```python +class Solution(object): + def climbStairs(self, n): + """ + :type n: int + :rtype: int + """ + fib = [1, 2, 3] + if n < 4: + return fib[n-1] + for k in range(3, n+1): +            fib[2] = fib[0] + fib[1]             # 永远只存3个元素,save space +            fib[0], fib[1] = fib[1], fib[2] + return fib[2] +``` +- Complexity Analysis + + - Time complexity : O(n) + + - Space complexity : O(1). Constant space is used. +另外还有一个公式法: + +![](https://github.com/Lisanaaa/myTODOs/blob/master/41512784914_.pic.jpg) + +由于这里面相当于```standard Fibonacci```函数向前进了一步,排列为1,2,3,5而非原本的1,1,2,3,所以代码中使用```n+1``` +```python +class Solution(object): + def climbStairs(self, n): + """ + :type n: int + :rtype: int + """ + import math + sqrt5 = math.sqrt(5) + fibn = pow((1 + sqrt5) / 2, n+1) - pow((1 - sqrt5) / 2, n+1) + return int(float(fibn/sqrt5)) +``` +- Complexity Analysis + + - Time complexity : O(lg(n)). pow method takes log(n) time. + + - Space complexity : O(1). Constant space is used. diff --git a/docs/Leetcode_Solutions/Python/072._edit_distance.md b/docs/Leetcode_Solutions/Python/072._edit_distance.md new file mode 100644 index 000000000..c2720f92b --- /dev/null +++ b/docs/Leetcode_Solutions/Python/072._edit_distance.md @@ -0,0 +1,116 @@ +###72. Edit Distance + +题目: + + + +难度: + +Hard + +可以做的操作: + +- insert +- delete +- replace + +动归典型,原来也是有wikipedia page的算法 + + + + + + +看wikipedia 这解释 + +``` + / max(i,j) if min(i,j) = 0 + + / dp[i-1][j] + 1 word1[i]不在word2[0...j]中,所以删除 + dp[i][j] - min -- dp[i][j-1] + 1 insertion + \ dp[i-1][j-1] + 1/0 word[i]与word[j]是否相等 +``` + +上面的就不用解释了,min分别对应:删除、插入、以及替代(1/0取决 word1[i] == word2[j] ),反正也是tabular类型,画表来解决问题。 + + +用wikipedia上的伪码改造 + +``` +function LevenshteinDistance(char s[1..m], char t[1..n]): + // for all i and j, d[i,j] will hold the Levenshtein distance between + // the first i characters of s and the first j characters of t + // note that d has (m+1)*(n+1) values + declare int d[0..m, 0..n] + + set each element in d to zero + + // source prefixes can be transformed into empty string by + // dropping all characters + for i from 1 to m: + d[i, 0] := i + + // target prefixes can be reached from empty source prefix + // by inserting every character + for j from 1 to n: + d[0, j] := j + + for j from 1 to n: + for i from 1 to m: + if s[i] = t[j]: + substitutionCost := 0 + else: + substitutionCost := 1 + d[i, j] := minimum(d[i-1, j] + 1, // deletion + d[i, j-1] + 1, // insertion + d[i-1, j-1] + substitutionCost) // substitution + + return d[m, n] +``` + +对应的例子表格图 + +``` + k i t t e n + 0 1 2 3 4 5 6 +s 1 1 2 3 4 5 6 +i 2 2 1 2 3 4 5 +t 3 3 2 1 2 3 4 +t 4 4 3 2 1 2 3 +i 5 5 4 3 2 2 3 +n 6 6 5 4 3 3 2 +g 7 7 6 5 4 4 3 +``` + + +AC代码 + +``` +class Solution(object): + def minDistance(self, word1, word2): + """ + :type word1: str + :type word2: str + :rtype: int + """ + m,n = len(word1), len(word2) + dp = [[0 for i in range(m+1)] for j in range(n+1)] + + for i in range(1,m+1): + dp[0][i] = i + + for j in range(1,n+1): + dp[j][0] = j + + for j in range(1,n+1): + for i in range(1,m+1): + cost = 0 if word1[i-1] == word2[j-1] else 1 + dp[j][i] = min(dp[j-1][i] + 1, dp[j][i-1] + 1, dp[j-1][i-1] + cost) + + return dp[n][m] +``` + + +貌似还有提升版本,但是比较明显即使有伪码,一开始也出错于下标. + +升级版 to be learned. \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/073. Set Matrix Zeroes.md b/docs/Leetcode_Solutions/Python/073. Set Matrix Zeroes.md new file mode 100644 index 000000000..0b30f99ed --- /dev/null +++ b/docs/Leetcode_Solutions/Python/073. Set Matrix Zeroes.md @@ -0,0 +1,55 @@ +### 73. Set Matrix Zeroes + + + +题目: + + + + +难度 : Medium + + + +思路: + +Naive AC代码,一看类似那个 game of life,不用extra space,不用O(mn),应该就是用状态转移机了(?),所以还是先naive AC把: + +``` +class Solution(object): + def setZeroes(self, matrix): + """ + :type matrix: List[List[int]] + :rtype: void Do not return anything, modify matrix in-place instead. + """ + def setZero(i,j): + for m in range(col): + matrix[i][m] = 0 + for n in range(row): + matrix[n][j] = 0 + + + row = len(matrix) + col = len(matrix[0]) if row else 0 + + newM = [] + for i in range(row): + newM.append(matrix[i][:]) + + + for i in range(row): + for j in range(col): + if newM[i][j] == 0: + setZero(i,j) +``` + + + +`正确思路`: + +一边遍历,一边将相应的行和列置为0是行不通的,会影响后面元素的遍历判断,所以要记录下哪些行和哪些列是要置为0的。为了节约空间,在原矩阵中借两条边,如果该行或者列要置为0,则把左边或者上边的相应位置置为0。如果左边和上边本来就有0,那么需要额外标记一下,最后把左边或者右边也全部置为0. + + + + + diff --git a/docs/Leetcode_Solutions/Python/074._search_a_2d_matrix.md b/docs/Leetcode_Solutions/Python/074._search_a_2d_matrix.md new file mode 100644 index 000000000..026a5d34d --- /dev/null +++ b/docs/Leetcode_Solutions/Python/074._search_a_2d_matrix.md @@ -0,0 +1,81 @@ +### 74. Search a 2D Matrix + +题目: + + + +难度: +Medium + + +思路: +想过将```2D matrix```看成一个大```sorted list```,代码如下: +```python +class Solution(object): + def searchMatrix(self, matrix, target): + """ + :type matrix: List[List[int]] + :type target: int + :rtype: bool + """ + row = len(matrix) + col = len(matrix[0]) if row else 0 + l, r = 0, row * col - 1 + while l <= r: + mid = l + ((r - l) >> 2) + if target > matrix[mid/col][mid%col]: + l = mid + 1 + elif target < matrix[mid/col][mid%col]: + r = mid - 1 + else: + return True + return False +``` + + +但是后面觉得不行, +原因如下: +1. m * n may overflow for large m and n; +2. it will use multiple expensive operations such as / and % + + + + + + +因此二分Search,``` binary search by row first, then binary search by column.``` + + +```python +class Solution(object): + def searchMatrix(self, matrix, target): + """ + :type matrix: List[List[int]] + :type target: int + :rtype: bool + """ + if not matrix or not matrix[0]: + return False + row = len(matrix) + col = len(matrix[0]) if row else 0 + l, r = 0, row - 1 + while l <= r: + mid_row = l + ((r - l) >> 2) + if matrix[mid_row][0] <= target <= matrix[mid_row][-1]: + m, n = 0, col - 1 + while m <= n: + mid_col = m + ((n - m) >> 2) + if matrix[mid_row][mid_col] > target: + n = mid_col - 1 + elif matrix[mid_row][mid_col] < target: + m = mid_col + 1 + else: + return True + return False + elif target < matrix[mid_row][0]: + r = mid_row - 1 + else: + l = mid_row + 1 + return False + +``` diff --git a/docs/Leetcode_Solutions/Python/075._sort_colors.md b/docs/Leetcode_Solutions/Python/075._sort_colors.md new file mode 100644 index 000000000..e70f4e6ad --- /dev/null +++ b/docs/Leetcode_Solutions/Python/075._sort_colors.md @@ -0,0 +1,54 @@ +###75. Sort Colors + +题目: + + + +难度: + +Medium + + +思路: + +这个问题是 Dutch National Flag Problem, 荷兰旗问题 + + + +思路其实是类似partition的,比x小的放左边,比x大的放右边。 + +这里是用三个指针,begin, cur, end,cur需要遍历整个数组 + +- cur 指向0,交换begin与cur, begin++,cur++ +- cur 指向1,不做任何交换,cur++ +- cur 指向2,交换end与cur,end-- + +之所以cur指向2,交换之后不前进是因为我们不知道end此时指向的元素是几,如果交换过来的是0或者1,那么明显我们需要做进一步的处理,所以最终判断条件是end =< cur应该就结束了 + +这样的three-way-partition也只是3-way好用吧?如果有4个数,那么这样则是无效的,或者如果是4-way,那么可以转换成3-way+2-way + + +``` +class Solution(object): + def sortColors(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + begin,cur,end = 0,0,len(nums) - 1 + + while cur <= end: + if nums[cur] == 0: + nums[begin],nums[cur] = nums[cur],nums[begin] + cur += 1 + begin += 1 + + elif nums[cur] == 1: + cur += 1 + + else: # nums[cur] == 2 + nums[cur],nums[end] = nums[end],nums[cur] + end -=1 + +``` + diff --git a/docs/Leetcode_Solutions/Python/076._Minimum_Window_Substring.md b/docs/Leetcode_Solutions/Python/076._Minimum_Window_Substring.md new file mode 100644 index 000000000..1407d82d3 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/076._Minimum_Window_Substring.md @@ -0,0 +1,44 @@ +### 76. Minimum Window Substring +题目: + + + +难度 : Hard + + +模板大法 + + +```python +class Solution(object): + def minWindow(self, s, t): + """ + :type s: str + :type t: str + :rtype: str + """ + if len(t) > len(s): + return '' + maps = collections.Counter(t) + counter = len(maps.keys()) + begin, end, head, length = 0, 0, 0, float('inf') + while end < len(s): + if s[end] in maps: + maps[s[end]] -= 1 + if maps[s[end]] == 0: + counter -= 1 + end += 1 + while counter == 0: + if s[begin] in maps: + maps[s[begin]] += 1 + if maps[s[begin]] > 0: + counter += 1 + if end - begin < length: + length = end - begin + head = begin + begin += 1 + if length == float('inf'): + return '' + return s[head:head+length] +``` + diff --git a/docs/Leetcode_Solutions/Python/077._combinations.md b/docs/Leetcode_Solutions/Python/077._combinations.md new file mode 100644 index 000000000..1672b9dff --- /dev/null +++ b/docs/Leetcode_Solutions/Python/077._combinations.md @@ -0,0 +1,123 @@ +###77. Combinations + + +题目: + + + +难度 : Medium + + +思路一: +python作弊法 + +``` +import itertools +p = [4, 8, 15, 16, 23, 42] +c = itertools.combinations(p, 4) +for i in c: + print i + +结果: + +(4, 8, 15, 16) +(4, 8, 15, 23) +(4, 8, 15, 42) +(4, 8, 16, 23) +(4, 8, 16, 42) +(4, 8, 23, 42) +(4, 15, 16, 23) +(4, 15, 16, 42) +(4, 15, 23, 42) +(4, 16, 23, 42) +(8, 15, 16, 23) +(8, 15, 16, 42) +(8, 15, 23, 42) +(8, 16, 23, 42) +(15, 16, 23, 42) +``` + +作弊AC代码: + +``` +class Solution(object): + def combine(self, n, k): + """ + :type n: int + :type k: int + :rtype: List[List[int]] + """ + import itertools + return [list(i) for i in itertools.combinations(range(1,n+1), k)] +``` + + +思路二: + +标准的recursion + +但是会超时 + + +``` +class Solution(object): + def combine(self, n, k): + """ + :type n: int + :type k: int + :rtype: List[List[int]] + """ + ans = [] + self.dfs(n, k, 1, [], ans) + return ans + + def dfs(self, n, k ,start, lst, ans): + if k == 0 : + ans.append(lst) + return + for i in range(start, n+1): + self.dfs(n, k - 1, i + 1,lst +[i], ans) +``` + +理解方式 + +``` + + 1 2 3 + 12 13 14 23 24 34 +``` + +可以参照这里 + + + + + +解法三: + + +采用递归的方式,在n个数中选k个,如果n大于k,那么可以分类讨论,如果选了n,那么就是在1到(n-1)中选(k-1)个,否则就是在1到(n-1)中选k个。递归终止的条件是k为1,这时候1到n都符合要求。 + +注意一开始这里的else part花了我一点时间来理解,因为n必定大于k,所以这样递归当 n == k的时候选法就是code原作者的写法,也就是直接[range(1,k+1)] + +参考这里: + + +``` +class Solution(object): + def combine(self, n, k): + """ + :type n: int + :type k: int + :rtype: List[List[int]] + """ + if k == 1: + return [[i + 1] for i in range(n)] + result = [] + if n > k: + result = [r + [n] for r in self.combine(n - 1, k - 1)] + self.combine(n - 1, k) + else: #n == k + # result = [r + [n] for r in self.combine(n - 1, k - 1)] + result = [range(1,k+1)] + return result +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/078.Subsets .md b/docs/Leetcode_Solutions/Python/078.Subsets .md new file mode 100644 index 000000000..e5b100563 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/078.Subsets .md @@ -0,0 +1,47 @@ +### 78. Subsets + +题目: + + + +难度 : Medium + + +Python代码 + +```python +class Solution(object): + def subsets(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + results = [[]] + for num in nums: + results.extend([result + [num] for result in results]) + return results + +``` + + +BackTrack 标准解法版 + + +```python +class Solution: + + def search(self, nums, S, index): + if index == len(nums): + self.results.append(S) + return + + self.search(nums, S + [nums[index]], index + 1) + self.search(nums, S, index + 1) + + def subsets(self, nums): + self.results = [] + self.search(nums, [], 0) + return self.results +``` + +对每个元素,有两种可能,加入S和不加入S,写起来思路还是很清爽的 diff --git a/docs/Leetcode_Solutions/Python/079._word_search.md b/docs/Leetcode_Solutions/Python/079._word_search.md new file mode 100644 index 000000000..e097a4259 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/079._word_search.md @@ -0,0 +1,63 @@ +###79. Word Search + + + +题目: + + + +难度: +Medium + + +思路: + +其实这个题和number of islands类似,是backtracking基本功的考查,但是基本功非常有待提高||| + +比较核心的是dfs函数,然后这个函数有取巧的写法:如果outside of boundary就return False + +loop, 如果碰到跟word开头的字母一样,把这个扔进去loop,可以考查这个char在这个board的上下左右是否可以选择,补课使用则重置used, 然后return + +也还是之前摘录的,backtrack写法关键: 选择 (Options),限制 (Restraints),结束条件 (Termination)。 + + + + +``` +class Solution(object): + def exist(self, board, word): + """ + :type board: List[List[str]] + :type word: str + :rtype: bool + """ + + def dfs(board, used, row, col, x, y, word, idx): + if idx == len(word) : + return True + + if x < 0 or x > row -1 or y < 0 or y > col -1 : + return False + + if board[x][y] == word[idx] and not used[x][y]: + used[x][y] = 1 + left = dfs(board,used,row,col,x-1,y,word,idx+1) + right = dfs(board,used,row,col,x+1,y,word,idx+1) + up = dfs(board,used,row,col,x,y-1,word,idx+1) + down = dfs(board,used,row,col,x,y+1,word,idx+1) + + used[x][y] = left or right or up or down + return left or right or up or down + return False + + + row = len(board) + col = len(board[0]) if row else 0 + used = [ [0 for i in range(col)] for j in range(row)] + + for i in range(row): + for j in range(col): + if dfs(board,used,row,col,i,j,word,0): + return True + return False +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/082._remove_duplicates_from_sorted_list_ii.md b/docs/Leetcode_Solutions/Python/082._remove_duplicates_from_sorted_list_ii.md new file mode 100644 index 000000000..277b3870c --- /dev/null +++ b/docs/Leetcode_Solutions/Python/082._remove_duplicates_from_sorted_list_ii.md @@ -0,0 +1,49 @@ +###82. Remove Duplicates from Sorted List II + + +题目: + + + + +难度: + +Medium + + +木有space 和 time的限制,第一想法,用dictionary存一下每个nodes的个数,这样只要看到它是大于1的,就删删删。 + +虽然是笨办法。但是也可以AC + +``` +class Solution(object): + def deleteDuplicates(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + dummy = ListNode(-1) + dummy.next = head + + cur = dummy.next + nodeNumber = {} + while cur: + if cur.val in nodeNumber: + nodeNumber[cur.val] += 1 + else: + nodeNumber[cur.val] = 1 + cur = cur.next + + cur = dummy + while cur.next: + if nodeNumber[cur.next.val] > 1: + cur.next = cur.next.next + else: + cur = cur.next + return dummy.next +``` + + +谷歌一下,更省时间的方法是用一个prev 和 cur 指针,然后用一个bool来记录是否duplicate,这样loop一次即可解决问题。 + +to be 写出来 \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/083._remove_duplicates_from_sorted_list.md b/docs/Leetcode_Solutions/Python/083._remove_duplicates_from_sorted_list.md new file mode 100644 index 000000000..a9081a689 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/083._remove_duplicates_from_sorted_list.md @@ -0,0 +1,28 @@ +### 83. Remove Duplicates from Sorted List + +题目: + + + +难度: + +Easy + + +dummy 大法 + +```python +class Solution(object): + def deleteDuplicates(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + dummy = head + while head: + while head.next and head.next.val == head.val: + head.next = head.next.next # skip duplicated node + head = head.next # not duplicate of current node, move to next node + return dummy + +``` diff --git a/docs/Leetcode_Solutions/Python/086._partition_list.md b/docs/Leetcode_Solutions/Python/086._partition_list.md new file mode 100644 index 000000000..c1fd2dca0 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/086._partition_list.md @@ -0,0 +1,56 @@ +###86. Partition List + + +题目: + + + +难度 : Medium + + +思路一: + + +最简单的思路就是两个dummy head,然后一个指向 小于的node,一个指向大于的node + + +思路二: + +不走寻常路了,使用两个指针,一个指向小于的尾巴,一个一直往后走,指向大于,然后交换node + +完成比完美更重要啊,其实可以先试试用简单方法,因为我用我的不走寻常路画了比较久的图,写起来也稍显没那么美观,还在交换node的部分卡了一会 + + + +``` +class Solution(object): + def partition(self, head, x): + """ + :type head: ListNode + :type x: int + :rtype: ListNode + """ + dummy = ListNode(-1) + dummy.next = head + + p1 = p2 = dummy + + while p1.next and p1.next.val < x: + p1 = p1.next + + p2 = p1.next + + while p2: + while p2.next and p2.next.val >= x: + p2 = p2.next + + if p2.next == None: + break + node = p2.next + p2.next = node.next + node.next = p1.next + p1.next = node + p1 = p1.next + + return dummy.next +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/088._merge_sorted_array.md b/docs/Leetcode_Solutions/Python/088._merge_sorted_array.md new file mode 100644 index 000000000..029b3c330 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/088._merge_sorted_array.md @@ -0,0 +1,46 @@ +### 88. Merge Sorted Array + + +题目: + + + +难度 : Easy + +### 思路: + +给的数组可能是这样的 + +- nums1 : [0] +- m : 0 +- nums2 : [1] +- n : 1 + + +所以要判断m和n是不是仍然大于0 + + +AC代码 + + +```python +class Solution: + def merge(self, nums1, m, nums2, n): + """ + :type nums1: List[int] + :type m: int + :type nums2: List[int] + :type n: int + :rtype: void Do not return anything, modify nums1 in-place instead. + """ + while m > 0 and n > 0: + if nums1[m-1] > nums2[n-1]: + nums1[m+n-1] = nums1[m-1] + m -= 1 + else: + nums1[m+n-1] = nums2[n-1] + n -= 1 + if n > 0: + nums1[:n] = nums2[:n] + +``` diff --git a/docs/Leetcode_Solutions/Python/089._gray_code.md b/docs/Leetcode_Solutions/Python/089._gray_code.md new file mode 100644 index 000000000..c0a9f193c --- /dev/null +++ b/docs/Leetcode_Solutions/Python/089._gray_code.md @@ -0,0 +1,101 @@ +###89. Gray Code + + + +题目: + + + +难度: +Medium + +思路: + +首先不是从任何一个数开始都是有效的,所以naive的想法是从任何一个开始,然后如果能到2^n位,那么说明是有效的,问题解决. + +A gray code sequence must begin with 0. ->简化了一点 + +先写了一段代码: + +``` +def nextCode(curCode, res, n): + if curCode not in res: + res.append(curCode) + else: + return + if len(res) == pow(2,n): + return res + for i in range(n): + nCode = curCode[:] + nCode[i] = 1 if curCode[i] == 0 else 0 + nextCode(nCode,res,n) + +res = [] +nextCode([0,0,0],res,3) +print res +#[[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0], [0, 1, 1], [1, 1, 1], [1, 0, 1], [0, 0, 1]] +``` +实际上问题是这段代码的时间复杂度感觉很高,但是试试 + + +不失所望,到11就超时 + +``` + +class Solution(object): + def grayCode(self, n): + """ + :type n: int + :rtype: List[int] + """ + def nextCode(curCode, res, n): + if curCode not in res: + res.append(curCode) + else: + return + if len(res) == pow(2,n): + return res + for i in xrange(n): + nCode = curCode[:] + nCode[i] = 1 if curCode[i] == 0 else 0 + nextCode(nCode, res, n) + + def listoVal(curCode,n): + val = 0 + for i in range(n-1,-1,-1): + val += pow(2,i) * curCode[i] + return val + + + res = [] + nextCode([0]*n, res, n) + # print res + + val = [] + for i in res: + val.append(listoVal(i,n)) + return val +``` + +然后居然有这个东西: +Gray code,要用位运算!瞑目 + + + + +服气,这个待研究 +``` +class Solution(object): + def grayCode(self, n): + """ + :type n: int + :rtype: List[int] + """ + result = [(i>>1)^i for i in range(pow(2,n))] + return results +``` + + + + + diff --git a/docs/Leetcode_Solutions/Python/090._subsets_ii.md b/docs/Leetcode_Solutions/Python/090._subsets_ii.md new file mode 100644 index 000000000..99661e3da --- /dev/null +++ b/docs/Leetcode_Solutions/Python/090._subsets_ii.md @@ -0,0 +1,80 @@ +### 90. Subsets II + +题目: + + + +难度 : Medium + + +思路: + + +参考别人的 + +现在来观察规律,与之前有不同之处是我们需要一个位置来mark,因为不再需要往之前出现过的地方再加了,看这个: + + +``` +[[],[1]] 是 [1] 的子集合 +[[],[1],[2],[1,2]] 是 [1,2] 的子集合,实际上就是1的子集合们加了一个2 +新来的2不能再从头开始加了,它需要从[ .., [2],[1,2] ]加 才是合理的 + +****当出现多个重复数字时,应该从 已经拥有了新数字所出现全部次数的list开始加才是合理的**** +[[],[1]] 是 [1] 的子集合 +[[],[1],[2],[1,2]] 是 [1,2] 的子集合,实际上就是1的子集合们加了一个2 +[ + [2], + [1], + [1,2,2], + [2,2], + [1,2], + [] +] 是 [1,2,2] 的子集和,实际上也就是[1,2]的子集合加了一个2 +新来的2不能再从头开始加了,它需要从[ .., [2,2],[1,2,2] ]加 才是合理的 +例如: +``` + + +这里这个start是来记录了之前一次数组的长度,temp_size记住目前数组的长度,然后用这个来达到去重的目的,非常聪明 + +自己的解法 +```python +class Solution(object): + def subsetsWithDup(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + nums.sort() + results = [[]] + for i in range(len(nums)): + if any(nums[i] in result for result in results): + results.extend([result + [nums[i]] for result in results if result.count(nums[i]) == i - nums.index(nums[i])]) + else: + results.extend([result + [nums[i]] for result in results]) + return results + +``` + + +别人的,但是一个意思 +```python +class Solution(object): + def subsetsWithDup(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + nums.sort() + result = [[]] + temp_size = 0 + for i in range(len(nums)): + start = temp_size if i >= 1 and nums[i] == nums[i-1] else 0 + temp_size = len(result) + for j in range(start, temp_size): + result.append(result[j] + [nums[i]]) + return result + +``` + diff --git a/docs/Leetcode_Solutions/Python/091._decode_ways.md b/docs/Leetcode_Solutions/Python/091._decode_ways.md new file mode 100644 index 000000000..3abd24a85 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/091._decode_ways.md @@ -0,0 +1,71 @@ +###91. Decode Ways + +题目: + + + + +tag : DP + +难度 : Medium + + + + + +``` +BASE CASE(len(s) = 1 和 len(s) = 2 ): +直接check + +非BASE CASE : +先令 dp[i] = 0 +如果s[i]是可以map的话 -> dp[i] += dp[i-1] 原本的s[0..i]decode方式加上s[i] +如果s[i-1,i]可以map的话 -> dp[i] += dp[i-2] 原本的s[0...i-1]decode方式加上s[i-1,i] +``` + + +Python代码(可美化) + +``` +class Solution(object): + def numDecodings(self, s): + """ + :type s: str + :rtype: int + """ + keys = ['1', '2', '3', '4', '5', '6', '7', '8', '9' ,'10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26'] + values = ['A', 'B','C', 'D', 'E', 'F', 'G','H', 'I', 'J', 'K', 'L', 'M' , 'N', 'O', 'P','Q', 'S', 'R', 'T', 'U','V', 'W', 'X','Y','Z'] + numbersToLetters = dict(zip(keys, values)) + + ways = {} + n = len(s) + for i in range(n): + ways[i] = 0 + if n == 0: + return 0 + elif n == 1 : + ways[0] = int(s in numbersToLetters) + elif n == 2: + if (s[0] in numbersToLetters) and (s[1] in numbersToLetters): + ways[1] += 1 + if (s in numbersToLetters): + ways[1] += 1 + else: + #s[0] + ways[0] = int(s[0] in numbersToLetters) + #s[01] + if (s[0] in numbersToLetters) and (s[1] in numbersToLetters): + ways[1] += 1 + if (s[:2] in numbersToLetters): + ways[1] += 1 + for i in range(2,n): + if s[i] in numbersToLetters: + ways[i] += ways[i-1] + if (s[i-1:i+1] in numbersToLetters): + ways[i] += ways[i-2] + + #print(ways[n-1]) + return ways[n-1] + +``` + diff --git a/docs/Leetcode_Solutions/Python/092._reverse_linked_list_ii.md b/docs/Leetcode_Solutions/Python/092._reverse_linked_list_ii.md new file mode 100644 index 000000000..f2b29da12 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/092._reverse_linked_list_ii.md @@ -0,0 +1,66 @@ +###92. Reverse Linked List II + +题目: + + + +难度: +Medium + + +跟 reverse linked list一样 + +思路: 找到 第 m 个node,然后开始reverse到第n个node,然后再把它们和原本的list连接起来 + +AC 代码 + +``` +class Solution(object): + def reverseBetween(self, head, m, n): + """ + :type head: ListNode + :type m: int + :type n: int + :rtype: ListNode + """ + # m == n, not reverse + if m == n : return head + + dummy = ListNode(-1) + dummy.next = head + + mbefore = dummy + cnt = 1 + + while mbefore and cnt < m: + mbefore = mbefore.next + cnt += 1 + + prev = None + cur = mbefore.next + tail1 = mbefore.next + + + while cnt <= n : + nxt = cur.next + cur.next = prev + prev = cur + cur = nxt + cnt += 1 + + + + mbefore.next = prev + tail1.next = cur + + return dummy.next +``` + +看了一下别人的代码,又比我写的好嘛,因为是保证m和n有效,用的是for循环先找到 m node: + + + for _ in range(m-1): + .... + + for _ in range(n-m): + reverse 操作 \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/093._restore_ip_addresses.md b/docs/Leetcode_Solutions/Python/093._restore_ip_addresses.md new file mode 100644 index 000000000..55e31916b --- /dev/null +++ b/docs/Leetcode_Solutions/Python/093._restore_ip_addresses.md @@ -0,0 +1,66 @@ +###93. Restore IP Addresses + +题目: + + + + +难度: + +Medium + + +基本思路已达到,等待AC之路 + +结果AC之路还是比较漫长的,因为不允许前缀为0困扰了一下 + +``` +class Solution(object): + def restoreIpAddresses(self, s): + """ + :type s: str + :rtype: List[str] + """ + self.res = [] + self.singgleAddresses([],s,4) + for i in range(len(self.res)): + self.res[i] = '.'.join(str(j) for j in self.res[i]) + return self.res + + + + def singgleAddresses(self, curRes, s, k): + """ + :type s: str + :rtype: List[str] + """ + if len(s) == 0 and k == 0: + if curRes not in self.res: + self.res.append(curRes) + if len(s) == 0 or k < 0: + return + else: + if self.between0And255(s[:1]): + self.singgleAddresses(curRes + [int(s[:1])], s[1:], k-1) + if self.between0And255(s[:2]): + self.singgleAddresses(curRes + [int(s[:2])], s[2:], k-1) + if self.between0And255(s[:3]): + self.singgleAddresses(curRes + [int(s[:3])], s[3:], k-1) + + def between0And255(self,s): + #前缀不允许为0 + if int(s) == 0 : + if len(s) == 1 : + return True + else: + return False + + if int(s) > 0 and s[0] == '0': + return False + if int(s) > 0 and int(s) <= 255: + return True + return False + +``` + + diff --git a/docs/Leetcode_Solutions/Python/094._binary_tree_inorder_traversal.md b/docs/Leetcode_Solutions/Python/094._binary_tree_inorder_traversal.md new file mode 100644 index 000000000..dc288f127 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/094._binary_tree_inorder_traversal.md @@ -0,0 +1,92 @@ +### 94. Binary Tree Inorder Traversal + +题目: + + + +难度: + +Medium + + +递归版本1⃣️:自己瞬秒的 + + + + +```python +class Solution(object): + def inorderTraversal(self, root): + """ + :type root: TreeNode + :rtype: List[int] + """ + res = [] + if not root: + return res + if root.left: + res.extend(self.inorderTraversal(root.left)) + res.append(root.val) + if root.right: + res.extend(self.inorderTraversal(root.right)) + return res +``` + +递归版本2⃣️: +```python +class Solution(object): + def inorderTraversal(self, root): + """ + :type root: TreeNode + :rtype: List[int] + """ + self.lst = [] + self.DFS(root) + return self.lst + + + def DFS(self,root): + if root == None: + return + if root.left: + self.DFS(root.left) + self.lst.append(root.val) + if root.right: + self.DFS(root.right) + +``` + +非递归用stack,我听谁讲过 😓 + +// to be done + + +via wikipedia + + +递归: + +``` +inorder(node) + if (node = null) + return + inorder(node.left) + visit(node) + inorder(node.right) +``` + + +非递归,跟之前那个iterator有得一拼,其实好几个题都是在玩这个花样? + +``` +iterativeInorder(node) + s ← empty stack + while (not s.isEmpty() or node ≠ null) + if (node ≠ null) + s.push(node) + node ← node.left + else + node ← s.pop() + visit(node) + node ← node.right +``` diff --git a/docs/Leetcode_Solutions/Python/096._unique_binary_search_trees.md b/docs/Leetcode_Solutions/Python/096._unique_binary_search_trees.md new file mode 100644 index 000000000..2e29cf929 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/096._unique_binary_search_trees.md @@ -0,0 +1,43 @@ +###96. Unique Binary Search Trees + + + +题目: + + + +难度: +Medium + +思路: + + +参照此处hint: + + + + +首先明确n个不等的数它们能构成的二叉搜索树的种类都是相等的. + +毫无头绪,对于1...n的bst,可以这样看,k可以作为root,那么1..k-1必定在左边,k+1...n必定在右边,而1...k-1课产生的bst树是dp[k-1],右边产生的数是dp[n-k],所以能生成的树的数量是 dp[k-1]* dp[n-k] + +dp[n] = sum(dp[k-1]*dp[n-k]),从0到k + + +``` +class Solution(object): + def numTrees(self, n): + """ + :type n: int + :rtype: int + """ + dp = [ 1 for i in range(n+1)] + + for i in range(2,n+1): + s = 0 + for k in range(i): + s += dp[k]*dp[i-k-1] + dp[i] = s + + return dp[-1] +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/098._validate_binary_search_tree.md b/docs/Leetcode_Solutions/Python/098._validate_binary_search_tree.md new file mode 100644 index 000000000..c4b5dcfbf --- /dev/null +++ b/docs/Leetcode_Solutions/Python/098._validate_binary_search_tree.md @@ -0,0 +1,74 @@ +###98. Validate Binary Search Tree + +题目: + + + + +难度: + +Easy + + +以前做过这道题,valid binary tree,需要check两件事: + + +``` + 10 + / \ + 7 20 + / \ + 5 40 +``` + + +- node.left.val < node.val + - right subtree of left child, value < node.val +- node.right.val > node.val + - left subtree of the right child, value > node.val + + +wikipedia上有伪码: + +``` +truct TreeNode { + int key; + int value; + struct TreeNode *left; + struct TreeNode *right; +}; + +bool isBST(struct TreeNode *node, int minKey, int maxKey) { + if(node == NULL) return true; + if(node->key < minKey || node->key > maxKey) return false; + + return isBST(node->left, minKey, node->key) && isBST(node->right, node->key, maxKey); +} + + +if(isBST(root, INT_MIN, INT_MAX)) { + puts("This is a BST."); +} else { + puts("This is NOT a BST!"); +} +``` + +实际上就是每次往下看,node都确保被夹在一个范围。 + +翻译了一下伪码,AC + + +``` +class Solution(object): + def isValidBST(self, root): + """ + :type root: TreeNode + :rtype: bool + """ + return self.isBST(root, float('-inf'),float('inf')) + + def isBST(self, root, minKey, maxKey): + if root == None: return True + if root.val <= minKey or root.val >= maxKey : return False + return self.isBST(root.left,minKey,root.val) and self.isBST(root.right, root.val, maxKey) +``` diff --git a/docs/Leetcode_Solutions/Python/100._same_tree.md b/docs/Leetcode_Solutions/Python/100._same_tree.md new file mode 100644 index 000000000..f12c86c3a --- /dev/null +++ b/docs/Leetcode_Solutions/Python/100._same_tree.md @@ -0,0 +1,49 @@ +### 100. Same Tree + +题目: + + + + +难度: + +Easy + + +太简单了,递归一行! + + +```python +# Definition for a binary tree node. +# class TreeNode(object): +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None + +class Solution(object): + def isSameTree(self, p, q): + """ + :type p: TreeNode + :type q: TreeNode + :rtype: bool + """ + return p.val == q.val and all(map(self.isSameTree, (p.left, p.right), (q.left, q.right))) if p and q else p is q +``` + +```python +class Solution(object): + def isSameTree(self, p, q): + """ + :type p: TreeNode + :type q: TreeNode + :rtype: bool + """ + if (not p and q) or (p and not q): + return False + if not p and not q: + return True + if p.val == q.val: + return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right) + return False +``` diff --git a/docs/Leetcode_Solutions/Python/101._symmetric_tree.md b/docs/Leetcode_Solutions/Python/101._symmetric_tree.md new file mode 100644 index 000000000..cb6f5219b --- /dev/null +++ b/docs/Leetcode_Solutions/Python/101._symmetric_tree.md @@ -0,0 +1,45 @@ +### 101. Symmetric Tree + +题目: + + + + +难度: + +Easy + + +两棵树symmetric, 有几种可能: + +- 均为none ,symmetric +- 左孩子,右孩子都不存在,并且值相等, symmetric +- 右子树 和 另一棵树的左子树相等,左子树 和另一颗树的右子树相等 🌲 + + +```python +class Solution(object): + def isSymmetric(self, root): + """ + :type root: TreeNode + :rtype: bool + """ + if not root: + return True + return self.symmetric(root.left, root.right) + + def symmetric(self, l1, l2): + if not l1 or not l2: + if not l1 and not l2: + return True + else: + return False + if l1.val == l2.val: + return self.symmetric(l1.left, l2.right) and self.symmetric(l1.right, l2.left) + else: + return False +``` + + + + diff --git a/docs/Leetcode_Solutions/Python/102._binary_tree_level_order_traversal.md b/docs/Leetcode_Solutions/Python/102._binary_tree_level_order_traversal.md new file mode 100644 index 000000000..7d4ac4efb --- /dev/null +++ b/docs/Leetcode_Solutions/Python/102._binary_tree_level_order_traversal.md @@ -0,0 +1,62 @@ +### 102. Binary Tree Level Order Traversal + +题目: + + + + +难度: + +Medium + +第一种做法:利用curLevel和nextLevel来记录,然后按层append. + + +```python +class Solution(object): + def levelOrder(self, root): + """ + :type root: TreeNode + :rtype: List[List[int]] + """ + if not root: + return [] + res, cur_level = [], [root] + while cur_level: + next_level, tmp_res = [], [] + for node in cur_level: + tmp_res.append(node.val) + if node.left: + next_level.append(node.left) + if node.right: + next_level.append(node.right) + res.append(tmp_res) + cur_level = next_level + return res +``` + + +第二种做法:递归 + + + +```python +class Solution(object): + def levelOrder(self, root): + """ + :type root: TreeNode + :rtype: List[List[int]] + """ + res = [] + self.iter_order(root, 0, res) + return res + + def iter_order(self, root, level, res): + if not root: return + if len(res) < level + 1: + res.append([]) + res[level].append(root.val) + self.iter_order(root.left, level+1, res) + self.iter_order(root.right, level+1, res) +``` +用递归来记录每一层,需要更加学习,不算easy diff --git a/docs/Leetcode_Solutions/Python/103._binary_tree_zigzag_level_order_traversal.md b/docs/Leetcode_Solutions/Python/103._binary_tree_zigzag_level_order_traversal.md new file mode 100644 index 000000000..edc9b3986 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/103._binary_tree_zigzag_level_order_traversal.md @@ -0,0 +1,43 @@ +### 103. Binary Tree Zigzag Level Order Traversal + +题目: + + + + +难度: + +Medium + + + +```python +class Solution(object): + def zigzagLevelOrder(self, root): + """ + :type root: TreeNode + :rtype: List[List[int]] + """ + if not root: + return [] + res, cur_level, level_count = [], [root], 0 + while cur_level: + next_level, tmp_res = [], [] + for node in cur_level: + tmp_res.append(node.val) + if node.left: + next_level.append(node.left) + if node.right: + next_level.append(node.right) + if level_count % 2 == 0: + res.append(tmp_res) + else: + tmp_res.reverse() + res.append(tmp_res) + level_count += 1 + cur_level = next_level + + return res +``` + + diff --git a/docs/Leetcode_Solutions/Python/104._maximum_depth_of_binary_tree.md b/docs/Leetcode_Solutions/Python/104._maximum_depth_of_binary_tree.md new file mode 100644 index 000000000..451160d32 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/104._maximum_depth_of_binary_tree.md @@ -0,0 +1,23 @@ +### 104. Maximum Depth of Binary Tree + +题目: + + + +难度: + +Easy + + +简单题,但是这道题跟[leetcode111](https://github.com/Lisanaaa/thinking_in_lc/blob/master/111._minimum_depth_of_binary_tree.md)不一样,这道题没有特殊情况,所以一行就够了 + + +```python +class Solution(object): + def maxDepth(self, root): + """ + :type root: TreeNode + :rtype: int + """ + return 1 + max(map(self.maxDepth, (root.left, root.right))) if root else 0 +``` diff --git a/docs/Leetcode_Solutions/Python/105._construct_binary_tree_from_preorder_and_inorder_traversal.md b/docs/Leetcode_Solutions/Python/105._construct_binary_tree_from_preorder_and_inorder_traversal.md new file mode 100644 index 000000000..7ed244dd9 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/105._construct_binary_tree_from_preorder_and_inorder_traversal.md @@ -0,0 +1,100 @@ +###105. Construct Binary Tree from Preorder and Inorder Traversal + +题目: + + + +难度 : Medium + + +preorder 是 根 -> 左 -> 右 +inorder 是 左 -> 根 -> 右 + + +首先pre的第一个就是整个树的root, 假设 pre[0] = in[k],那么in的前k-1个就是树的左子树,后面部分就是树的右子树,这样递归来看. + +然后递归来看,对于前k-1个又是同样的道理吧。 + +然后用递归,写了一颗小树测试,感觉上是对的, + + +``` +class TreeNode(object): + def __init__(self, x): + self.val = x + self.left = None + self.right = None + +nodeA = TreeNode('A') +nodeB = TreeNode('B') +nodeC = TreeNode('C') +nodeD = TreeNode('D') +nodeE = TreeNode('E') +nodeF = TreeNode('F') + +nodeA.left = nodeB +nodeA.right = nodeC +nodeB.left = nodeD +nodeB.right = nodeE +nodeC.left = nodeF + + + # A + # / \ + # B C + # / \ / + # D E F + + +def construct(preorder, inorder): + if preorder == inorder == []: + return None + else: + rootVal = preorder[0] + root = TreeNode(rootVal) + k = inorder.index(rootVal) + if len(preorder) == len(inorder) == 1: + return root + else: + root.left = construct(preorder[1:1+k],inorder[:k]) + root.right = construct(preorder[k+1:],inorder[k+1:]) + return root +root = construct(['A','B','D','E','C','F'],['D','B','E','A','F','C']) + +``` + +尝试AC发现,memory limit超,用大一点的数据测试RecursionError: maximum recursion depth exceeded。 + +根据网上的参考改成偏iteration一点的递归, AC通过 + +mark一下,为了避免数组的复杂操作,这里直接用左右界和数组的引用来代表一段前序遍历和中序遍历。直接用递归更改list本身不能AC,但是变成这样就可以AC,因为更改数组会拷贝数组带来很多内存和递归上的麻烦,是这样的么? + +这个技巧还比较常见,就是用原本list的角标,而不去cut list本身 + + +``` +class Solution(object): + def buildTree(self, preorder, inorder): + """ + :type preorder: List[int] + :type inorder: List[int] + :rtype: TreeNode + """ + def buildTree(preorder, inorder, lp, rp, li, ri): + if lp > rp or li > ri: + return None + + root = TreeNode(preorder[lp]) + k = inorder.index(preorder[lp]) + + # left node + left = buildTree(preorder, inorder, lp+1, lp + k - li, li, k - 1) + right = buildTree(preorder, inorder, lp + k - li + 1, rp, k+1, ri) + + root.left = left + root.right = right + + return root + + return buildTree(preorder, inorder, 0 , len(preorder) - 1, 0, len(inorder) -1) +``` diff --git a/docs/Leetcode_Solutions/Python/106._construct_binary_tree_from_inorder_and_postorder_traversal.md b/docs/Leetcode_Solutions/Python/106._construct_binary_tree_from_inorder_and_postorder_traversal.md new file mode 100644 index 000000000..61331c520 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/106._construct_binary_tree_from_inorder_and_postorder_traversal.md @@ -0,0 +1,68 @@ +###106. Construct Binary Tree from Inorder and Postorder Traversal + +题目: + + + +难度 : Medium + + +inorder 是 左 -> 根 -> 右 +postorder 是 左 -> 右 -> 根 + + +跟105基本一样 + +还是先弄了一个递归可用版本 + + +``` +def buildTree(inorder, postorder): + """ + :type preorder: List[int] + :type inorder: List[int] + :rtype: TreeNode + """ + if postorder == inorder == []: + return None + else: + rootVal = postorder[-1] + root = TreeNode(rootVal) + k = inorder.index(rootVal) + root.left = buildTree(inorder[:k],postorder[:k]) + root.right = buildTree(inorder[k+1:],postorder[k:-1]) + return root + +``` +照抄105 + + +``` +class Solution(object): + def buildTree(self, inorder, postorder): + """ + :type inorder: List[int] + :type postorder: List[int] + :rtype: TreeNode + """ + def buildTree(inorder, postorder, li, ri ,lp, rp ): + if lp > rp or li > ri: + return None + + root = TreeNode(postorder[rp]) + k = inorder.index(postorder[rp]) + + # left node + left = buildTree(inorder, postorder, li, k-1, lp, lp + k - li - 1) + right = buildTree(inorder, postorder, k+1, ri, lp+k-li, rp-1) + + root.left = left + root.right = right + + return root + + return buildTree(inorder, postorder, 0, len(inorder) - 1, 0, len(postorder) - 1) + +``` + + diff --git a/docs/Leetcode_Solutions/Python/107._binary_tree_level_order_traversal_ii.md b/docs/Leetcode_Solutions/Python/107._binary_tree_level_order_traversal_ii.md new file mode 100644 index 000000000..a7fd3d732 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/107._binary_tree_level_order_traversal_ii.md @@ -0,0 +1,48 @@ +###107. Binary Tree Level Order Traversal II + +题目: + + + + +难度: + +Easy + + +用102 的算法作弊 + + +``` +# Definition for a binary tree node. +# class TreeNode(object): +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None + +class Solution(object): + def levelOrderBottom(self, root): + """ + :type root: TreeNode + :rtype: List[List[int]] + """ + res = [] + + if root == None: return [] + + curLevel = [root] + while curLevel: + nextLevel = [] + tmpRes = [] + for node in curLevel: + tmpRes.append(node.val) + if node.left: nextLevel.append(node.left) + if node.right: nextLevel.append(node.right) + res.append(tmpRes) + curLevel = nextLevel + res.reverse() + return res +``` + + diff --git a/docs/Leetcode_Solutions/Python/108._convert_sorted_array_to_binary_search_tree.md b/docs/Leetcode_Solutions/Python/108._convert_sorted_array_to_binary_search_tree.md new file mode 100644 index 000000000..12705f918 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/108._convert_sorted_array_to_binary_search_tree.md @@ -0,0 +1,41 @@ +###108. Convert Sorted Array to Binary Search Tree + +题目: + + + +难度: +Medium + + +思路: + +递归 + +- nums为空,return None +- nums 只有一个, return其为根节点 +- nums 大于一个,nums[n/2]为中间元素,根结点,nums[:mid]为左子树, nums[mid+1:]为右子树 + + +``` +class Solution(object): + def sortedArrayToBST(self, nums): + """ + :type nums: List[int] + :rtype: TreeNode + """ + n = len(nums) + + if n == 0 : + return None + if n == 1 : + return TreeNode(nums[0]) + else: + mid = n / 2 + root = TreeNode(nums[mid]) + root.left = self.sortedArrayToBST(nums[:mid]) + root.right = self.sortedArrayToBST(nums[mid+1:]) + return root + + +``` diff --git a/docs/Leetcode_Solutions/Python/109._convert_sorted_list_to_binary_search_tree.md b/docs/Leetcode_Solutions/Python/109._convert_sorted_list_to_binary_search_tree.md new file mode 100644 index 000000000..4ca36dc47 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/109._convert_sorted_list_to_binary_search_tree.md @@ -0,0 +1,47 @@ +###109. Convert Sorted List to Binary Search Tree + + + +题目: + + + +难度: + +Medium + +思路: + +跟解array to binary search tree一样,递归,找到list中间点,把它变成root,左边为左树,右边为右子树 + +值得注意的是需要找到的是list中间的前一个,所以用一个dummy node,然后反复使用linked list找中点的代码 + +``` +class Solution(object): + def sortedListToBST(self, head): + """ + :type head: ListNode + :rtype: TreeNode + """ + + if head == None: + return None + elif head.next == None: + return TreeNode(head.val) + else: + dummy = ListNode(-1) + dummy.next = head + slow, fast = dummy, dummy + while fast.next and fast.next.next: + slow = slow.next + fast = fast.next.next + + # print slow.val + mid = slow.next + slow.next = None + + root = TreeNode(mid.val) + root.left = self.sortedListToBST(head) + root.right = self.sortedListToBST(mid.next) + return root +``` diff --git a/docs/Leetcode_Solutions/Python/110._balanced_binary_tree.md b/docs/Leetcode_Solutions/Python/110._balanced_binary_tree.md new file mode 100644 index 000000000..4b32130f9 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/110._balanced_binary_tree.md @@ -0,0 +1,37 @@ +###110. Balanced Binary Tree + +题目: + + + +难度: +Easy + + +全程递归中 + + + +``` +class Solution(object): + def isBalanced(self, root): + """ + :type root: TreeNode + :rtype: bool + """ + if root == None: + return True + + lh = self.height(root.left) + rh = self.height(root.right) + + if abs(lh-rh) <= 1 and self.isBalanced(root.left) and self.isBalanced(root.right): + return True + return False + + + def height(self, node): + if node == None: + return 0 + return 1 + max(self.height(node.left),self.height(node.right)) +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/111._minimum_depth_of_binary_tree.md b/docs/Leetcode_Solutions/Python/111._minimum_depth_of_binary_tree.md new file mode 100644 index 000000000..d84421b0c --- /dev/null +++ b/docs/Leetcode_Solutions/Python/111._minimum_depth_of_binary_tree.md @@ -0,0 +1,94 @@ +### 111. Minimum Depth of Binary Tree + +题目: + + + +难度: + +Easy + + +思路,看完题目我想当然的认为就是直接递归取最小的值,代码如下: +``` +class Solution(object): + def minDepth(self, root): + """ + :type root: TreeNode + :rtype: int + """ + if not root: + return 0 + return 1 + min(map(self.minDepth, (root.left, root.right))) +``` + + +但是没过,有一种特殊情况就是 + +注意```leaf node```反正就是没有```left```和```right```的 + +比如下图 + + +``` +1 + \ + 2 +``` + +```2```是一个孩子节点 + +这种情况应该输出```2```而不是```1``` + + + +唯一的特殊情况就是上面这种了,因为```root```下只有一个左节点或者是右节点,这样另外一边的空节点并不算是```leaf node``` + +```leaf node: itself is not null but it has both children null``` + +因此要避免这种情况,代码改成下面: + + +```python +# Definition for a binary tree node. +# Definition for a binary tree node. +# class TreeNode(object): +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None + +class Solution(object): + def minDepth(self, root): + """ + :type root: TreeNode + :rtype: int + """ + if not root: + return 0 + depth_under_root = map(self.minDepth, (root.left, root.right)) + return 1 + (min(depth_under_root) or max(depth_under_root)) +``` + + +所以还是要养成多写edge case的好习惯,也许就帮你避免了general写法的特例,代码如下 +```python +class Solution(object): + def minDepth(self, root): + """ + :type root: TreeNode + :rtype: int + """ + if root == None: + return 0 + elif root.left == None and root.right == None: + return 1 + else : + if root.left == None: + return 1 + self.minDepth(root.right) + elif root.right == None: + return 1 + self.minDepth(root.left) + else: + return min(1+ self.minDepth(root.left), 1+ self.minDepth(root.right)) + +``` diff --git a/docs/Leetcode_Solutions/Python/112._path_sum.md b/docs/Leetcode_Solutions/Python/112._path_sum.md new file mode 100644 index 000000000..1f6b07a51 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/112._path_sum.md @@ -0,0 +1,28 @@ +### 112. Path Sum + +题目: + + + +难度: + +Easy + + +递归 + +```python +class Solution(object): + def hasPathSum(self, root, sum): + """ + :type root: TreeNode + :type sum: int + :rtype: bool + """ + if not root: + return False + if root.left or root.right: + return self.hasPathSum(root.left, sum-root.val) or self.hasPathSum(root.right, sum-root.val) + else: + return root.val == sum +``` diff --git a/docs/Leetcode_Solutions/Python/113._path_sum_ii.md b/docs/Leetcode_Solutions/Python/113._path_sum_ii.md new file mode 100644 index 000000000..d1f2ea9c6 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/113._path_sum_ii.md @@ -0,0 +1,40 @@ +### 113. Path Sum II + +题目: + + + + + +tag : DFS + + +难度 : Medium + + +注意宁愿写几次curList + [root.val] 也不要直接传一个list进去,因为list pass by reference的亏已经吃过了 + +```python +class Solution(object): + def pathSum(self, root, sum): + """ + :type root: TreeNode + :type sum: int + :rtype: List[List[int]] + """ + res = [] + self.auxPathSum(root, sum, [], res) + return res + def auxPathSum(self, root, sum, cur_list, cur_lists): + if not root: + return + sum -= root.val + if sum == 0 and not root.left and not root.right: + cur_lists.append(cur_list + [root.val]) + return + if root.left: + self.auxPathSum(root.left, sum, cur_list + [root.val], cur_lists) + if root.right: + self.auxPathSum(root.right, sum, cur_list + [root.val], cur_lists) +``` + diff --git a/docs/Leetcode_Solutions/Python/114._flatten_binary_tree_to_linked_list.md b/docs/Leetcode_Solutions/Python/114._flatten_binary_tree_to_linked_list.md new file mode 100644 index 000000000..81ad647ca --- /dev/null +++ b/docs/Leetcode_Solutions/Python/114._flatten_binary_tree_to_linked_list.md @@ -0,0 +1,71 @@ +### 114. Flatten Binary Tree to Linked List + +题目: + + + +难度: + +Medium + +这道题看了hint,说每个node的右节点都是相应先序遍历中它的下一个节点。 +所以我的思路是先把先序遍历的node顺序搞出来,然后对于这里面的每一个节点,只需要做两个操作: +1. node.left = None +2. node.right = 相应先序遍历中node的下一个节点 + +```python +class Solution(object): + def flatten(self, root): + """ + :type root: TreeNode + :rtype: void Do not return anything, modify root in-place instead. + """ + def preorder(root): + res = [] + if not root: + return res + res.append(root) + if root.left: + res.extend(preorder(root.left)) + if root.right: + res.extend(preorder(root.right)) + return res + if not root: + return + node_order = preorder(root) + for i in range(len(node_order)-1): + node_order[i].left = None + node_order[i].right = node_order[i+1] + node_order[-1].left = None + node_order[-1].right = None +``` +beat 40.67% + +另外一种解法: +1. copy the left and right subtree +2. then cut root’s left subtree +3. do DFS +4. left and right has been flattened and connect them left and right back to the root + +```python +class Solution(object): + def flatten(self, root): + """ + :type root: TreeNode + :rtype: void Do not return anything, modify root in-place instead. + """ + if not root: + return + left_node = root.left + right_node = root.right + root.left = None + self.flatten(left_node) + self.flatten(right_node) + if left_node: + root.right = left_node + while left_node.right: + left_node = left_node.right + left_node.right = right_node +``` +beat 32.18% + diff --git a/docs/Leetcode_Solutions/Python/116._populating_next_right_pointers_in_each_node.md b/docs/Leetcode_Solutions/Python/116._populating_next_right_pointers_in_each_node.md new file mode 100644 index 000000000..ed51a5c1e --- /dev/null +++ b/docs/Leetcode_Solutions/Python/116._populating_next_right_pointers_in_each_node.md @@ -0,0 +1,36 @@ +###116. Populating Next Right Pointers in Each Node + +题目: + + + + +难度: + +Medium + +思路: 跟level print一样,把每个level由左到右记录。 +然后这层level的右指向右,最后一个指向None。 +处理一下边界条件,完工。 + +看题目tag给的DFS,所以是否有哪种push & pop stack的方法可以特别来处理指向呢-》 有待研究 + +``` +class Solution(object): + def connect(self, root): + """ + :type root: TreeLinkNode + :rtype: nothing + """ + if root == None: return root + thislevel = [root] + while thislevel: + nextlevel = list() + for n in thislevel: + if n.left: nextlevel.append(n.left) + if n.right: nextlevel.append(n.right) + for i in range(len(thislevel)-1): + thislevel[i].next = thislevel[i+1] + thislevel[-1].next = None + thislevel = nextlevel +``` diff --git a/docs/Leetcode_Solutions/Python/118._pascal's_triangle.md b/docs/Leetcode_Solutions/Python/118._pascal's_triangle.md new file mode 100644 index 000000000..72e7a44f9 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/118._pascal's_triangle.md @@ -0,0 +1,36 @@ +###118. Pascal's Triangle + +题目: + + + + +难度: + +Easy + + +高中数学知识,把行数理理清楚就ok + + +``` +class Solution(object): + def generate(self, numRows): + """ + :type numRows: int + :rtype: List[List[int]] + """ + res = [[1],[1,1]] + if numRows < 3: + return res[:numRows] + for i in range(3, numRows+1): + tmp = [1] * i + for j in range(1,i-1): + tmp[j] = res[i-2][j-1] + res[i-2][j] + res.append(tmp) + return res + + +``` + + diff --git a/docs/Leetcode_Solutions/Python/119. Pascal's Triangle II.md b/docs/Leetcode_Solutions/Python/119. Pascal's Triangle II.md new file mode 100644 index 000000000..dbf97df9d --- /dev/null +++ b/docs/Leetcode_Solutions/Python/119. Pascal's Triangle II.md @@ -0,0 +1,59 @@ +### 119. Pascal's Triangle II + +题目: + + +难度 : Easy + + + +思路: + +高中数学 + + + +这种算法会超时||| + +``` +class Solution(object): + def getRow(self, rowIndex): + """ + :type rowIndex: int + :rtype: List[int] + """ + def combNum(n,k): + if k == 0 or k == n : + return 1 + return combNum(n-1,k-1) + combNum(n-1,k) + res = [] + for i in range(rowIndex + 1): + res.append(combNum(rowIndex,i)) + + return res +``` + + + +用118改的,AC代码 + + + +``` +class Solution(object): + def getRow(self, rowIndex): + """ + :type rowIndex: int + :rtype: List[int] + """ + res = [[1],[1,1]] + if rowIndex < 2: + return res[rowIndex] + for i in range(3, rowIndex+2): + tmp = [1] * i + for j in range(1,i-1): + tmp[j] = res[i-2][j-1] + res[i-2][j] + res.append(tmp) + return res[-1] +``` + diff --git a/docs/Leetcode_Solutions/Python/120. Triangle.md b/docs/Leetcode_Solutions/Python/120. Triangle.md new file mode 100644 index 000000000..954a28cb8 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/120. Triangle.md @@ -0,0 +1,72 @@ +### 120. Triangle + +题目: + + + +难度: +Medium + +思路: + +先是要注意下这句话:**Each step you may move to adjacent numbers on the row below** + +在考虑adjacent number的定义,并不是角标的adjacent,而是真的形态上的adjacent + +比如 + +``` + -1 -1 + 2 1 最小 1 0 +-2 2 0 -1 2 0 +``` + +最小是-1, 而并不能从第二排的0跳到第三排的第一个造成-2. + + so AC代码 + +感觉关于dp,我可能还需要补一些东西,因为我不能做到O(n) space + +``` +class Solution(object): + def minimumTotal(self, triangle): + """ + :type triangle: List[List[int]] + :rtype: int + """ + # n total rows of triangle + n = len(triangle) + if n == 1: return triangle[0][0] + elif n == 2 : return min(triangle[0][0] + triangle[1][0], triangle[0][0] + triangle[1][1]) + else: + res = [] + for i in range(n): + res.append(triangle[i]) + + res[0] = [triangle[0][0]] + res[1] = [triangle[0][0] + triangle[1][0], triangle[0][0] + triangle[1][1]] + + for i in range(2,n): + for j in range(i+1): + if j == 0: + res[i][j] = res[i-1][j] + triangle[i][j] + elif j == i: + res[i][j] = res[i-1][-1] + triangle[i][j] + else: + res[i][j] = min(res[i-1][j-1],res[i-1][j]) + triangle[i][j] + + return min(res[-1]) +``` + + + + + + + + + + + + + diff --git a/docs/Leetcode_Solutions/Python/121._Best_Time_to_Buy_and_Sell_Stock.md b/docs/Leetcode_Solutions/Python/121._Best_Time_to_Buy_and_Sell_Stock.md new file mode 100644 index 000000000..2edfa898b --- /dev/null +++ b/docs/Leetcode_Solutions/Python/121._Best_Time_to_Buy_and_Sell_Stock.md @@ -0,0 +1,59 @@ +### 121. Best Time to Buy and Sell Stock + +题目: + + + +难度: + +Easy + + +思路 + +All the straight forward solution should work, but if the interviewer twists the question slightly +by giving the difference array of prices, Ex: for ```{1, 7, 4, 11}```, if he gives ```{0, 6, -3, 7}```, +you might end up being confused. + +Here, the logic is to calculate the difference ```(maxCur += prices[i] - prices[i-1])``` +of the original array, and find a contiguous subarray giving maximum profit. +If the difference falls below ```0```, reset it to zero. + +参考[Maximum subarray problem](https://en.wikipedia.org/wiki/Maximum_subarray_problem), +[Kadane's Algorithm](https://discuss.leetcode.com/topic/19853/kadane-s-algorithm-since-no-one-has-mentioned-about-this-so-far-in-case-if-interviewer-twists-the-input) + + +``` +Why maxCur = Math.max(0, maxCur += prices[i] - prices[i-1]); ? + +Well, we can assume opt(i) as the max Profit you will get if you sell the stock at day i; + +We now face two situations: + +We hold a stock at day i, which means opt(i) = opt(i - 1) - prices[i - 1] + prices[i] (max Profit you can get if you sell stock at day(i-1) - money you lose if you buy the stock at day (i-1) + money you gain if you sell the stock at day i. + +We do not hold a stock at day i, which means we cannot sell any stock at day i. In this case, money we can get at day i is 0; + +opt(i) is the best case of 1 and 2. + +So, opt(i) = Max{opt(i - 1) - prices[i - 1] + prices[i], 0} +``` + + +```python +class Solution(object): + def maxProfit(self, prices): + """ + :type prices: List[int] + :rtype: int + """ + if not prices: + return 0 + res, max_cur = 0, 0 + for i in range(1, len(prices)): + max_cur = max(0, max_cur+prices[i]-prices[i-1]) + res = max(res, max_cur) + return res +``` + + diff --git a/docs/Leetcode_Solutions/Python/125._valid_palindrome.md b/docs/Leetcode_Solutions/Python/125._valid_palindrome.md new file mode 100644 index 000000000..d3e09f6c2 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/125._valid_palindrome.md @@ -0,0 +1,46 @@ +### 125. Valid Palindrome + +题目: + + + +难度: + +Easy + + + +就是比较reversed string 和原本的是否相等. + + +```python +class Solution(object): + def isPalindrome(self,s): + """ + :type s: str + :rtype: bool + """ + + new=[] + s = s.lower() + + for i in s: + if '0'<=i<='9' or 'a'<=i<='z': + new.append(i) + + return new == new[::-1] +``` + +或者用正则,详见[re.sub()用法](http://blog.csdn.net/geekleee/article/details/75309433) +瞬间```beats 97.71%``` +```python +class Solution(object): + def isPalindrome(self, s): + """ + :type s: str + :rtype: bool + """ + newString = re.sub("[^0-9a-zA-Z]+", "", s) + return newString.lower() == newString.lower()[::-1] +``` + diff --git a/docs/Leetcode_Solutions/Python/126. Word Ladder II.md b/docs/Leetcode_Solutions/Python/126. Word Ladder II.md new file mode 100644 index 000000000..99e75f495 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/126. Word Ladder II.md @@ -0,0 +1,99 @@ +### 126. Word Ladder II + +题目: + + + +难度: + +Hard + +其实关键在于怎么优化和表示图 + + + +思路来自1p3a: + +这题目实在是太适合python了  如此简洁 + +就是基本的bfs,典型的level order traverse +有两个坑: + +1. 不要判断字典里的某两个word是否只相差一个字母,而是要判断某个word的邻居(和他只相差一个字母的所有word)是否在字典里,这样的改进会使这一步的复杂度下降很多,否则超时妥妥 +2. 每一轮访问过的word一定要从字典中删除掉,否则一定会超时 + +最后见到end word就收 +完成 + + + +拿题目的例子来看: + +```\ + hit + | + hot + / \ + dot lot + | | + dog log + \ / + cog +``` + +routine 字典,然后再根据这个来寻找路径 + +`{'cog': ['log', 'dog'], 'hit': [], 'log': ['lot'], 'dog': ['dot'], 'hot': ['hit'], 'lot': ['hot'], 'dot': ['hot']}` + +```'cog': ['log', 'dog']```这里的意思就是说在走到```'cog'```之前尝试过了```'log'```和```'dog'```,即previous tried node + +而生成字典的过程就是BFS的,此处保证寻找的路径就是最短的。 + +AC代码: + +```python +class Solution(object): + def findLadders(self, beginWord, endWord, wordList): + """ + :type beginWord: str + :type endWord: str + :type wordList: List[str] + :rtype: List[List[str]] + """ + + def backtrack(result, trace, path, word): + if len(trace[word]) == 0: + result.append([word] + path) + else: + for prev in trace[word]: + backtrack(result, trace, [word] + path, prev) + + lookup = set(wordList) | set([beginWord]) + res, cur, routine = [], set([beginWord]), {word: [] for word in lookup} + while cur and endWord not in cur: + next_queue = set() + for word in cur: + lookup.remove(word) + for word in cur: + for i in range(len(word)): + for j in 'abcdefghijklmnopqrstuvwxyz': + candidate = word[:i] + j + word[i + 1:] + if candidate in lookup: + next_queue.add(candidate) + routine[candidate].append(word) + cur = next_queue + + if cur: + backtrack(res, routine, [], endWord) + return res +``` + + + +这样可以beat 69.09% + + + + + + diff --git a/docs/Leetcode_Solutions/Python/127._word_ladder.md b/docs/Leetcode_Solutions/Python/127._word_ladder.md new file mode 100644 index 000000000..42a14a7af --- /dev/null +++ b/docs/Leetcode_Solutions/Python/127._word_ladder.md @@ -0,0 +1,43 @@ +### 127. Word Ladder + +题目: + + + + +难度: + +Medium + +tag可以算BFS,其实就是求shortest path的变体 + +Reference from [kamyu104](https://github.com/kamyu104/LeetCode/blob/71e0ba555ee49befa01fcd9fc78c3528e2ab63a9/Python/word-ladder.py) + +```python +class Solution(object): + def ladderLength(self, beginWord, endWord, wordList): + """ + :type beginWord: str + :type endWord: str + :type wordList: List[str] + :rtype: int + """ + distance, cur, visited, lookup = 0, [beginWord], set([beginWord]), set(wordList) + + while cur: + next_queue = [] + + for word in cur: + if word == endWord: + return distance + 1 + for i in xrange(len(word)): + for j in 'abcdefghijklmnopqrstuvwxyz': + candidate = word[:i] + j + word[i + 1:] + if candidate not in visited and candidate in lookup: + next_queue.append(candidate) + visited.add(candidate) + distance += 1 + cur = next_queue + + return 0 +``` diff --git a/docs/Leetcode_Solutions/Python/128._Longest_Consecutive_Sequence.md b/docs/Leetcode_Solutions/Python/128._Longest_Consecutive_Sequence.md new file mode 100644 index 000000000..53e57505e --- /dev/null +++ b/docs/Leetcode_Solutions/Python/128._Longest_Consecutive_Sequence.md @@ -0,0 +1,70 @@ +### 128. Longest Consecutive Sequence + +题目: + + + +难度: + +Hard + + +### 思路 +首先去重复,时间```O(N)```,然后将所有元素都放到一个字典中,这样判断一个数字的后续在不在这个字典中,如果存在就一直判断下去,每次判断只要```O(1)```。 + +对于每个数,如果他的前续已经判断过了,他就没有必要判断了,继续判断下一个数,即: +``` +if num - 1 in nums: + continue +``` + + +AC代码: + +```python +class Solution(object): + def longestConsecutive(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + nums = set(nums) + tmp = {} + for num in nums: + tmp[num] = 1 + res = 0 + for num in nums: + if num - 1 not in nums: + y = num + 1 + while y in nums: + y += 1 + res = max(res, y - num) + return res +``` + +但其实```set```和字典的```in```判断都是```O(1)``` + +```dict```与```set```实现原理是一样的,都是将实际的值放到```list```中。唯一不同的在于hash函数操作的对象,对于```dict```,```hash```函数操作的是其```key```,而对于```set```是直接操作的它的元素,假设操作内容为```x```,其作为因变量,放入```hash```函数,通过运算后取```list```的余数,转化为一个```list```的下标,此下标位置对于```set```而言用来放其本身,而对于```dict```则是创建了两个```list```,一个```list```该下表放此```key```,另一个```list```中该下标方对应的```value```。参考[python dict与set 的实现](http://www.cnblogs.com/pengsixiong/p/5326893.html) + +  其中,我们把实现set的方式叫做Hash Set,实现dict的方式叫做Hash Map/Table(注:map指的就是通过key来寻找value的过程) + +```set```和```dict```的唯一区别仅在于没有存储对应的```value```,但是,```set```的原理和```dict```一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证```set```内部“不会有重复元素”。 + +因此,代码也可以写成这样 +```python +class Solution(object): + def longestConsecutive(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + nums = set(nums) + res = 0 + for num in nums: + if num - 1 not in nums: + y = num + 1 + while y in nums: + y += 1 + res = max(res, y - num) + return res +``` diff --git a/docs/Leetcode_Solutions/Python/129._sum_root_to_leaf_numbers.md b/docs/Leetcode_Solutions/Python/129._sum_root_to_leaf_numbers.md new file mode 100644 index 000000000..cedbdcd74 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/129._sum_root_to_leaf_numbers.md @@ -0,0 +1,37 @@ +###129. Sum Root to Leaf Numbers + +题目: + + + +难度: + +Medium + +其实递归不难想到,不过我自己做错在细节方面 + +如果只有单支,每朝下走一层,代表的数字都增加10, 10* 原本的 + 新节点的数字,最终也是用这个来解 + +``` +class Solution(object): + def sumNumbers(self, root): + """ + :type root: TreeNode + :rtype: int + """ + return self.calSum(root,0) + + + def calSum(self,root,curSum): + if root == None: + return 0 + else: + curSum = curSum * 10 + root.val + if root.left == None and root.right == None: + return curSum + else: + return self.calSum(root.left, curSum) + self.calSum(root.right, curSum) + + + +``` diff --git a/docs/Leetcode_Solutions/Python/130._surrounded_regions.md b/docs/Leetcode_Solutions/Python/130._surrounded_regions.md new file mode 100644 index 000000000..a0f76e264 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/130._surrounded_regions.md @@ -0,0 +1,147 @@ +###130. Surrounded Regions + + +题目: + + + + +难度: + +Medium + + +思路: + +loop,然后碰到O做DFS/BFS找出O所在区域: + +- 貌似只要O没有碰壁,O就总是被X包围着? +- 所以找出O的范围,然后看它是否碰壁,没有碰壁则mark不需要修改 + +但是这道题折磨我了很久,因为它有毛病。。。。 +它给的input例子是 +["XXX","XOX","XXX"] +也怪我 input写着List[List[str]] + +但实际上的输入是: +[[u'X', u'X', u'X'], [u'X', u'X', u'X'], [u'X', u'X', u'X']] + + +还要mark unicode + +还有就是学会了新的可以函数之下定义函数,这样就不用什么self了,用起来真方便,但是这样的思路做起来会超时。 + + + +``` +class Solution(object): + def solve(self, board): + """ + :type board: List[List[str]] + :rtype: void Do not return anything, modify board in-place instead. + """ + + + def shouldOChange(i, j): + """ + return x,y area and whether they shouldChange + """ + shouldChange = True + Oarea = [] + s = [] + s.append((i,j)) + while s: + (x,y) = s.pop() + if x == 0 or x == row - 1 or y == 0 or y == col -1 : + shouldChange = False + visited[x][y] = 1 + Oarea.append((x,y)) + if legal(x-1,y): + s.append((x-1,y)) + if legal(x+1,y): + s.append((x+1,y)) + if legal(x,y-1): + s.append((x,y-1)) + if legal(x,y-1): + s.append((x,y+1)) + return Oarea,shouldChange + + def legal(x,y): + return x>=0 and x < row and y>=0 and y < col and board[x][y] == 'O' and visited[x][y] == 0 + + + row = len(board) + col = len(board[0]) if row else 0 + + visited = [[0 for i in range(col)] for j in range(row)] + + for i in range(row): + for j in range(col): + if board[i][j] == 'O' and visited[i][j] == 0: + Oarea, shouldChange = shouldOChange(i,j) + print Oarea,shouldChange + if shouldChange: + for (x,y) in Oarea: + board[x][y] = u'X' + + print board +``` + + +另一个思路就是对周围碰壁的O做BFS/DFS,碰壁的和碰壁相连的是不需要修改的。这样就时间复杂度降低很多了。 + +原本是O(n^2)可能做DFS/BFS。现在是O(4n)做DFS/BFS,但是发现依旧超时,最后查看了别人的解法,因为我的解法里面多了一个存储工具,相当于,把需要更换location的位置存储起来,最后做loop的时候去查,然后这样还是很耗时。 + +而一个简便的变法是把这些特别的碰壁的'O' mark出来,这样最后loop的时候不改变这些'O',只改变不碰壁的'O',又可以减少工作量。同时依旧可以使用collection里面的queue + + + +AC代码 + +``` +class Solution(object): + def solve(self, board): + """ + :type board: List[List[str]] + :rtype: void Do not return anything, modify board in-place instead. + """ + def legal(x,y): + return x>=0 and x < row and y>=0 and y < col and board[x][y] == 'O' and visited[x][y] == 0 + + + row = len(board) + col = len(board[0]) if row else 0 + + visited = [[0 for i in range(col)] for j in range(row)] + + notChangeOArea = [] + queue = collections.deque() + + for j in range(col): + if board[0][j] == 'O': queue.append((0,j)) + if board[row-1][j] == 'O': queue.append((row-1,j)) + for i in range(row): + if board[i][0] == 'O': queue.append((i,0)) + if board[i][col-1] == 'O': queue.append((i,col-1)) + + while queue: + (x,y) = queue.popleft() + board[x][y] = '$' + visited[x][y] = 1 + if legal(x-1,y): + queue.append((x-1,y)) + if legal(x+1,y): + queue.append((x+1,y)) + if legal(x,y-1): + queue.append((x,y-1)) + if legal(x,y+1): + queue.append((x,y+1)) + + for i in range(row): + for j in range(col): + if board[i][j] == '$' : board[i][j] = 'O' + elif board[i][j] == 'O' : board[i][j] = 'X' +``` + + +同时发现,用这种方式,无论是否使用collection里面的queue,都能AC \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/131._palindrome_partitioning.md b/docs/Leetcode_Solutions/Python/131._palindrome_partitioning.md new file mode 100644 index 000000000..45d404c89 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/131._palindrome_partitioning.md @@ -0,0 +1,48 @@ +###131. Palindrome Partitioning + +题目: + + + +难度: +Medium + +知道一定是用递归做,但是在怎么拆的部分疑惑了,然后看了hint + +key部分长这样,拆法是类似于combination,然后这个len(s) == 0是确保能被拆为palindrome,因为这样剩下的string才是空的 + + +这个recursion tree是这样的,感觉时间复杂度是O(n!),因为每次树都branch n个分支 + +``` + +class Solution(object): + def partition(self, s): + """ + :type s: str + :rtype: List[List[str]] + """ + self.res = [] + self.dfs(s,[]) + return self.res + + + def dfs(self, s, stringList): + if len(s) == 0: + self.res.append(stringList) + for i in range(1,len(s)+1): + if self.isPalindrome(s[:i]): + self.dfs(s[i:],stringList + [s[:i]]) + + def isPalindrome(self, s): + if len(s) <= 1: + return True + return s[0] == s[-1] and self.isPalindrome(s[1:-1]) + +a = Solution() +print a.partition("aab") + +# [['a', 'a', 'b'], ['aa', 'b']] +``` + +输出是每次必定从单个char的list开始,然后单个char 配 palindrome word,然后palindrome word再来配char... \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/133._clone_graph.md b/docs/Leetcode_Solutions/Python/133._clone_graph.md new file mode 100644 index 000000000..39921e282 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/133._clone_graph.md @@ -0,0 +1,66 @@ +###133. Clone Graph + + +题目: + + + +难度: +Medium + + + +思路: + +DFS或者BFS把graph traverse一遍,边traverse边复制。因为nodes are labeled uniquely,这就是方便的地方,但是注意node可能重复和有self-loop. + +所以先建立新的root node,然后有一个dict把node label和node一一对应。 + +用stack来存储原本的graph root node,对原本的graph做DFS,这个时候,如果这个node的neighbor是已经出现过,那么我们就是去修改原本的existNode,让它指向存在的neighbor,否则创建新的,再把它们联系起来,谷歌了一下,别人写的比我更简单。anyway,先AC。 + + + +`if cur.label in createdNodes:`多余。 + + + + +``` +class Solution(object): + def cloneGraph(self, node): + """ + :type node: UndirectedGraphNode + :rtype: UndirectedGraphNode + """ + if node == None: return None + + root = UndirectedGraphNode(node.label) + # must 1 to 1 + createdNodes = {} + createdNodes[root.label] = root + + stack = [] + stack.append(node) + + while stack: + cur = stack.pop() + if cur.label in createdNodes: + existNode = createdNodes[cur.label] + for neighbor in cur.neighbors: + if neighbor.label in createdNodes: + existNeighbor = createdNodes[neighbor.label] + existNode.neighbors.append(existNeighbor) + else: + newNode = UndirectedGraphNode(neighbor.label) + existNode.neighbors.append(newNode) + createdNodes[neighbor.label] = newNode + stack.append(neighbor) + return root +``` + + + +看了别人的代码,貌似比我又写的简洁。 + + + diff --git a/docs/Leetcode_Solutions/Python/136._single_number.md b/docs/Leetcode_Solutions/Python/136._single_number.md new file mode 100644 index 000000000..18540da0f --- /dev/null +++ b/docs/Leetcode_Solutions/Python/136._single_number.md @@ -0,0 +1,42 @@ +### 136. Single Number + + + +题目: + + + +难度: + +Easy + + +思路: + +位运算,终于要take it了 + +非常常见的一道算法题,将所有数字进行异或操作即可。对于异或操作明确以下三点: + +- 一个整数与自己异或的结果是0 +- 一个整数与0异或的结果是自己 +- 异或操作满足交换律,即a^b=b^a + +Python的位操作: + + +神奇的解法: + + +```python +class Solution(object): + def singleNumber(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + res = nums[0] + for i in nums[1:]: + res ^= i + return res +``` + diff --git a/docs/Leetcode_Solutions/Python/139._word_break.md b/docs/Leetcode_Solutions/Python/139._word_break.md new file mode 100644 index 000000000..815737dec --- /dev/null +++ b/docs/Leetcode_Solutions/Python/139._word_break.md @@ -0,0 +1,59 @@ +### 139. Word Break + +题目: + + + +难度: + +Medium + + + +```ok[i]``` tells whether ```s[:i]``` can be built. + +```python +class Solution(object): + def wordBreak(self, s, wordDict): + """ + :type s: str + :type wordDict: List[str] + :rtype: bool + """ + ok = [True] + for i in range(1, len(s)+1): + ok += [any(ok[j] and s[j:i] in wordDict for j in range(i))] + return ok[-1] +``` + +但是往list里面加数据的方法有快有慢,下面是对比: +``` +>>> from timeit import timeit +>>> timeit('x.append(1)', 'x = []', number=10000000) +1.9880003412529277 +>>> timeit('x += 1,', 'x = []', number=10000000) +1.2676891852971721 +>>> timeit('x += [1]', 'x = []', number=10000000) +3.361207239950204 +``` +因此我们可以将代码直接换成下面的格式 +```python +ok += any(ok[j] and s[j:i] in wordDict for j in range(i)) # 会报错 +``` +但是这样会报错,TypeError: 'bool' object is not iterable,因此bool类型数据不能这样加,别的可以(list类型本身当然要注意哈) + +因此在这个例子中我们这样: +```python +class Solution(object): + def wordBreak(self, s, wordDict): + """ + :type s: str + :type wordDict: List[str] + :rtype: bool + """ + ok = [True] + for i in range(1, len(s)+1): + ok += any(ok[j] and s[j:i] in wordDict for j in range(i)), + return ok[-1] +``` +代码里面的那个逗号构建了一个tuple,也会快一点 diff --git a/docs/Leetcode_Solutions/Python/140._word_break_ii.md b/docs/Leetcode_Solutions/Python/140._word_break_ii.md new file mode 100644 index 000000000..6333bf8fe --- /dev/null +++ b/docs/Leetcode_Solutions/Python/140._word_break_ii.md @@ -0,0 +1,113 @@ + +### 140. Word Break II + +题目: + + + +难度: + +Medium + + + +还是backtracking,会超时 + +``` +class Solution(object): # 此法超时 +    def wordBreak(self, s, wordDict): + """ + :type s: str + :type wordDict: Set[str] + :rtype: bool + """ + self.res = [] + self.wordBreakLst("",s,wordDict) + return self.res + + + def wordBreakLst(self, lst, rest, wordDict): + if rest == '': + self.res.append(lst.rstrip()) + # print lst + for i in range(1+len(rest)): + if rest[:i] in wordDict: + self.wordBreakLst(lst + rest[:i] + " ",rest[i:],wordDict) + +``` + + + + +然后看到有把word break i 结合起来减少时间复杂度的作法。 + + +做法如下,聪明: + +就是对于每一个s,我们来check它是否可以break,如果不可以,就不用做相应的操作了 + + +```python +class Solution(object): + def wordBreak(self, s, wordDict): + """ + :type s: str + :type wordDict: List[str] + :rtype: List[str] + """ + self.res = [] + self.wordBreakLst(s, wordDict, '') + return self.res + + def check(self, s, wordDict): + ok = [True] + for i in range(1, len(s) + 1): + ok += any(ok[j] and s[j:i] in wordDict for j in range(i)), + return ok[-1] + + + def wordBreakLst(self, s, wordDict, stringLst): + if self.check(s, wordDict): + if len(s) == 0 : self.res.append(stringLst[1:]) # 因为最开始也加了一个空格 + for i in range(1,len(s)+1): + if s[:i] in wordDict: + self.wordBreakLst(s[i:], wordDict, stringLst + ' ' + s[:i]) +``` + + +但是其实 + +``` +s = "aaaaaa" +wordDict = ["a","aa","aaa"] +print a.wordBreak(s,wordDict)还是会loop很多次 + +不过像 +s = "aabbb" +wordDict = ["a","abbb"] +就会极其的减少loop次数 +``` + + +看看stefan大神的做法: + +```sentences(i)``` returns a list of all sentences that can be built from the suffix ```s[i:]```. + +```python +class Solution(object): + def wordBreak(self, s, wordDict): + """ + :type s: str + :type wordDict: List[str] + :rtype: List[str] + """ + memo = {len(s): ['']} + def sentences(i): + if i not in memo: + memo[i] = [s[i:j] + (tail and ' ' + tail) + for j in range(i+1, len(s)+1) + if s[i:j] in wordDict + for tail in sentences(j)] + return memo[i] + return sentences(0) +``` diff --git a/docs/Leetcode_Solutions/Python/141._linked_list_cycle.md b/docs/Leetcode_Solutions/Python/141._linked_list_cycle.md new file mode 100644 index 000000000..2d50901e9 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/141._linked_list_cycle.md @@ -0,0 +1,105 @@ +### 141. Linked List Cycle + +题目: + + + + +难度: + +Easy + + +想法一: + +直接超时 + +``` +class Solution(object): + def hasCycle(self, head): + """ + :type head: ListNode + :rtype: bool + """ + if head == None: return False + lst = [] + cur = head + while cur: + if cur in lst: + return True + lst.append(cur) + cur = cur.next + return False +``` + + + +想法二:相当用boolean array记录某个点是否被访问过,时间,空间复杂度都是O(n) + +``` +class Solution(object): + def hasCycle(self, head): + """ + :type head: ListNode + :rtype: bool + """ + if head == None: return False + dictx = {} + cur = head + while cur: + if cur in dictx: + return True + dictx[cur] = 1 + cur = cur.next + return False +``` + +结果这种方法的run time还比较快 + +查了一下,有解答说可以有空间复杂度O(1),时间复杂度O(n)。两个指针,一个快一个慢,快的每次走两步,慢的每次走一步,如果有环,最终会在某处相遇。这也是一个算法。这种快慢指针配合已经不是第一次遇到了,比如找linklist中间的node。 + + + +但是并没有觉得这样的算法是O(n), worst case time complexity is O(N+K), which is O(n). + + +```python +python +class Solution(object): + def hasCycle(self, head): + """ + :type head: ListNode + :rtype: bool + """ + slow = head + fast = head + while fast and fast.next: + slow = slow.next + fast = fast.next.next + if slow == fast: + return True + return False +``` + + +```java +java +public class Solution { + public boolean hasCycle(ListNode head) { + if (head == null){ + return false; + } + ListNode fast = head; + ListNode slow = head; + while (fast != null && slow != null && fast.next != null){ + fast = fast.next.next; + slow = slow.next; + if (slow == fast){ + return true; + } + } + return false; + } +} +``` + diff --git a/docs/Leetcode_Solutions/Python/142_Linked_List_Cycle_II.md b/docs/Leetcode_Solutions/Python/142_Linked_List_Cycle_II.md new file mode 100644 index 000000000..cd8875929 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/142_Linked_List_Cycle_II.md @@ -0,0 +1,56 @@ +### 142. Linked List Cycle II + +题目: + + + + +难度: + +Medium + +思路: +稍微改了一下[141](https://github.com/Lisanaaa/thinking_in_lc/blob/master/141._linked_list_cycle.md),这里稍微注意一下```while-else clause```就行 + +Let’s say, the first node is node ```0```, the cycle starts at node ```L```, and the length of the cycle is ```C```; +Moreover, after ```t``` steps, ```fast``` catches ```slow```. + +Now we know that fast totally traveled ```2t``` nodes, and slow traveled ```t``` nodes + +Then we have: +```2t - t = nC``` (where ```n``` is an positive integer.) +i.e. ```t=nC``` + +Now, think about that, at step ```t```, if we travels ```L``` more steps, where are we? +i.e. if we travel ```L+t = L + nC``` steps in total, where are we? + +Absolutely, at the start of the cycle, because we have covered the first ```L``` nodes once and the entire cycle ```n``` times. + +So, if we travel ```L``` more steps at time ```t```, then we get the start of the cycle. + +However, how can we travel exactly ```L``` step? +The answer is to use an other pointer to travel from node ```0```, and when they meet together, it is exactly ```L``` steps and both of them are at the start of the cycle. + +参考[LostSummer233的解答](https://leetcode.com/problems/linked-list-cycle-ii/discuss/44833) +```python +class Solution(object): + def detectCycle(self, head): + """ + :type head: ListNode + :rtype: bool + """ + slow = fast = head + while fast and fast.next: + slow = slow.next + fast = fast.next.next + if slow == fast: + break + else: + return None + while head != slow: + slow = slow.next + head = head.next + return head +``` + + diff --git a/docs/Leetcode_Solutions/Python/143._reorder_list.md b/docs/Leetcode_Solutions/Python/143._reorder_list.md new file mode 100644 index 000000000..59c9fb9fb --- /dev/null +++ b/docs/Leetcode_Solutions/Python/143._reorder_list.md @@ -0,0 +1,112 @@ +###143. Reorder List + +题目: + + + + +难度: + +Medium + +超时 + + +``` + +class Solution(object): + def reorderList(self, head): + """ + :type head: ListNode + :rtype: void Do not return anything, modify head in-place instead. + """ + head = self.reorder(head) + + + def reorder(self, head): + if head == None or head.next == None or head.next.next == None: + return head + + l0 = head + l1 = head.next + ln_1 = self.oneNodeTail(head) + ln =ln_1.next + + l0.next = ln + ln_1.next = None + ln.next = self.reorder(l1) + return l0 + + + def oneNodeTail(self, head): + if head == None or head.next == None or head.next.next == None: + return head + cur = head + while cur.next: + if cur.next.next: + cur = cur.next + else: + break + return cur + +``` + + +取巧的办法是: + +找到中间节点,断开,把后半截linked list reverse,然后合并 √ + +看了AC指南 + +``` +class Solution(object): + def reorderList(self, head): + """ + :type head: ListNode + :rtype: void Do not return anything, modify head in-place instead. + """ + if head == None or head.next == None or head.next.next == None: + return + + slow = head + fast = head + prev = None + + while fast and fast.next: + prev = slow + slow = slow.next + fast = fast.next.next + + prev.next = None + + + slow = self.reverseList(slow) + + cur = head + while cur.next: + tmp = cur.next + cur.next = slow + slow = slow.next + cur.next.next = tmp + cur = tmp + cur.next = slow + + + + def reverseList(self,head): + """ + :type head: ListNode + :rtype: ListNode + """ + prev = None + cur = head + while(cur): + nxt = cur.next + cur.next = prev + prev = cur + cur = nxt + return prev + + +``` + diff --git a/docs/Leetcode_Solutions/Python/144._binary_tree_preorder_traversal.md b/docs/Leetcode_Solutions/Python/144._binary_tree_preorder_traversal.md new file mode 100644 index 000000000..8f5e21689 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/144._binary_tree_preorder_traversal.md @@ -0,0 +1,81 @@ +### 144. Binary Tree Preorder Traversal + +题目: + + + + +难度: + +Medium + +Recursive,瞬秒 + + +```python +class Solution(object): + def preorderTraversal(self, root): + """ + :type root: TreeNode + :rtype: List[int] + """ + res = [] + if not root: + return res + res.append(root.val) + if root.left: + res.extend(self.preorderTraversal(root.left)) + if root.right: + res.extend(self.preorderTraversal(root.right)) + return res +``` + +```python +class Solution(object): + def preorderTraversal(self, root): + """ + :type root: TreeNode + :rtype: List[int] + """ + if root == None: + return [] + res = [] + self.preorder(root,res) + return res + + + def preorder(self,root,res): + if root == None: + return + res.append(root.val) + self.preorder(root.left,res) + self.preorder(root.right,res) +``` + + +Iterative + + +```python +class Solution(object): + def preorderTraversal(self, root): + """ + :type root: TreeNode + :rtype: List[int] + """ + if root == None: + return [] + res = [] + + stack = [] + stack.append(root) + while stack: + node = stack.pop() + res.append(node.val) + if node.right: + stack.append(node.right) + if node.left: + stack.append(node.left) + return res + +``` diff --git a/docs/Leetcode_Solutions/Python/145._binary_tree_postorder_traversal.md b/docs/Leetcode_Solutions/Python/145._binary_tree_postorder_traversal.md new file mode 100644 index 000000000..788cfc623 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/145._binary_tree_postorder_traversal.md @@ -0,0 +1,67 @@ +###145. Binary Tree Postorder Traversal + +题目: + + + + +难度: + +Hard + +wikipedia 助你幸福 + +递归版本 + +``` +postorder(node) + if (node = null) + return + postorder(node.left) + postorder(node.right) + visit(node) +``` + + +迭代版本 + +``` +iterativePostorder(node) + s ← empty stack + lastNodeVisited ← null + while (not s.isEmpty() or node ≠ null) + if (node ≠ null) + s.push(node) + node ← node.left + else + peekNode ← s.peek() + // if right child exists and traversing node + // from left child, then move right + if (peekNode.right ≠ null and lastNodeVisited ≠ peekNode.right) + node ← peekNode.right + else + visit(peekNode) + lastNodeVisited ← s.pop() +``` + + + +刷进度直接用递归AC + +``` +class Solution(object): + def postorderTraversal(self, root): + """ + :type root: TreeNode + :rtype: List[int] + """ + self.result = [] + self.postOrder(root) + return self.result + + def postOrder(self, root): + if root == None : return + self.postOrder(root.left) + self.postOrder(root.right) + self.result.append(root.val) +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/147._insertion_sort_list.md b/docs/Leetcode_Solutions/Python/147._insertion_sort_list.md new file mode 100644 index 000000000..b385d14f1 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/147._insertion_sort_list.md @@ -0,0 +1,59 @@ +###147. Insertion Sort List + +题目: + + + +难度: +Medium + +insertion sort 也是入门必备,一个元素本身被认为是sort的,一个简单的理解是打牌,然后进入第二个元素的时候,看它是比第一个元素大还是小,做排序,进入下一个元素的时候再看再移。 + +伪码 + +``` +for i ← 1 to length(A)-1 + j ← i + while j > 0 and A[j-1] > A[j] + swap A[j] and A[j-1] + j ← j - 1 + end while +end for +``` + +这个伪码对于list可能适用性没有那么强,则考虑,从第二个node开始,那么从开始开始看,找到这个node应该插入的位置,插入。 + + + +就是这样,就是会超时|||| + +``` +class Solution(object): + def insertionSortList(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + if head == None or head.next == None: + return head + + dummy = ListNode(-1) + dummy.next = head + + prev = head + cur = head.next + + while cur: + p = dummy + while p.next.val <= cur.val and p != prev: + p = p.next + if p != prev: + prev.next = cur.next + cur.next = p.next + p.next = cur + prev = cur + cur = cur.next + + return dummy.next +``` + diff --git a/docs/Leetcode_Solutions/Python/148._sort_list.md b/docs/Leetcode_Solutions/Python/148._sort_list.md new file mode 100644 index 000000000..7bb4e80b0 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/148._sort_list.md @@ -0,0 +1,138 @@ +###148. Sort List + +题目: + + + +难度: +Medium + +MergeSort + +merge sort是必备,divide & conquer的入门之物。 + +merge sort做两件事, sort 和 merge。 + +看一看标准伪码: + +``` +function mergesort(m) + var list left, right, result + if length(m) ≤ 1 + return m + else + var middle = length(m) / 2 + for each x in m up to middle - 1 + add x to left + for each x in m at and after middle + add x to right + left = mergesort(left) + right = mergesort(right) + if last(left) ≤ first(right) + append right to left + return left + result = merge(left, right) + return result + +function merge(left,right) + var list result + while length(left) > 0 and length(right) > 0 + if first(left) ≤ first(right) + append first(left) to result + left = rest(left) + else + append first(right) to result + right = rest(right) + if length(left) > 0 + append rest(left) to result + if length(right) > 0 + append rest(right) to result + return result +``` + +另一处获得伪码 + +``` +MergeSort(arr[], l, r) +If r > l + 1. Find the middle point to divide the array into two halves: + middle m = (l+r)/2 + 2. Call mergeSort for first half: + Call mergeSort(arr, l, m) + 3. Call mergeSort for second half: + Call mergeSort(arr, m+1, r) + 4. Merge the two halves sorted in step 2 and 3: + Call merge(arr, l, m, r) +``` + + +merge sort用在linked list上的好处是不用开辟空间,然后就处理node + +用旧的代码拼装出来的结果 + +然后需要注意的一点是拆分链表,所以有设置left node 的tail为None的操作. + +``` +class Solution(object): + def sortList(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + if head == None or head.next == None: + return head + + mid = self.findMid(head) + # split the + l1 = head + l2 = mid.next + mid.next = None + + l1 = self.sortList(l1) + l2 = self.sortList(l2) + + return self.mergeTwoLists(l1, l2) + + def mergeTwoLists(self, l1, l2): + """ + :type l1: ListNode + :type l2: ListNode + :rtype: ListNode + """ + if l1 == None: + return l2 + if l2 == None: + return l1 + + dummy = ListNode(-1) + cur = dummy + + while l1 and l2: + if l1.val < l2.val: + cur.next = l1 + l1 = l1.next + else: + cur.next = l2 + l2 = l2.next + cur = cur.next + + if l1: + cur.next = l1 + else: + cur.next = l2 + return dummy.next + + def findMid(self,head): + if head == None or head.next == None: + return head + + slow = head + fast = head + + while fast.next and fast.next.next: + slow = slow.next + fast = fast.next.next + + return slow + +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/150._evaluate_reverse_polish_notation.md b/docs/Leetcode_Solutions/Python/150._evaluate_reverse_polish_notation.md new file mode 100644 index 000000000..4e2b48aac --- /dev/null +++ b/docs/Leetcode_Solutions/Python/150._evaluate_reverse_polish_notation.md @@ -0,0 +1,83 @@ +###150. Evaluate Reverse Polish Notation + + + +题目: + + + +难度: +Medium + + + +AC代码 + +``` +class Solution(object): + def evalRPN(self, tokens): + """ + :type tokens: List[str] + :rtype: int + """ + def cal(op, op1, op2): + if op == '*': + return op1 * op2 + elif op == '/': + return op1 / float(op2) + elif op == '+': + return op1 + op2 + else: + return op1 - op2 + + operandStack = [] + + for token in tokens: + if token in '+-*/': + op2 = operandStack.pop() + op1 = operandStack.pop() + res = cal(token, op1, op2) + operandStack.append(int(res)) + else: + operandStack.append(int(token)) + + return operandStack.pop() +``` + + +实际上这里有一个很奇(sha)怪(bi)的地方,看到了么,除法➗处,如果我不这么做,就是错的,这是python 2 和 python 3 的除法不一致导致的,所以最终我这样做了才能得到正确答案。 + +思路: + +已经给了我们wikipedia的链接了 + +- While there are input tokens left + - Read the next token from input. + - If the token is a value + - Push it onto the stack. + -Otherwise, the token is an operator (operator here includes both operators and functions). + - It is already known that the operator takes n arguments. + - If there are fewer than n values on the stack + - (Error) The user has not input sufficient values in the expression. + - Else, Pop the top n values from the stack. + - Evaluate the operator, with the values as arguments. + - Push the returned results, if any, back onto the stack. +- If there is only one value in the stack + - That value is the result of the calculation. +- Otherwise, there are more values in the stack + - (Error) The user input has too many values. + + + +再参考这里 + + + + +1. Create an empty stack called operandStack. +2. Convert the string to a list by using the string method split. +3. Scan the token list from left to right. + - If the token is an operand, convert it from a string to an integer and push the value onto the operandStack. + - If the token is an operator, *, /, +, or -, it will need two operands. Pop the operandStack twice. The first pop is the second operand and the second pop is the first operand. Perform the arithmetic operation. Push the result back on the operandStack. +4. When the input expression has been completely processed, the result is on the stack. Pop the operandStack and return the value. + diff --git a/docs/Leetcode_Solutions/Python/151._reverse_words_in_a_string.md b/docs/Leetcode_Solutions/Python/151._reverse_words_in_a_string.md new file mode 100644 index 000000000..10414801b --- /dev/null +++ b/docs/Leetcode_Solutions/Python/151._reverse_words_in_a_string.md @@ -0,0 +1,37 @@ +### 151. Reverse Words in a String + +题目: + + + +难度: +Medium + +太简单了 + +```python +class Solution(object): + def reverseWords(self, s): + """ + :type s: str + :rtype: str + """ + tmp = s.split() + res = " ".join(tmp[::-1]) + return res + +``` + +```python +class Solution(object): + def reverseWords(self, s): + """ + :type s: str + :rtype: str + """ + tmp = s.split() + tmp.reverse() + res = " ".join(tmp) + return res + +``` diff --git a/docs/Leetcode_Solutions/Python/152._maximum_product_subarray.md b/docs/Leetcode_Solutions/Python/152._maximum_product_subarray.md new file mode 100644 index 000000000..7570876fa --- /dev/null +++ b/docs/Leetcode_Solutions/Python/152._maximum_product_subarray.md @@ -0,0 +1,44 @@ +###152. Maximum Product Subarray + + + +题目: + + + +难度: +Medium + +思路: + +粗一看, 一股浓烈的DP气息飘来,想要套用53题的思路和方程。但是这个跟sum是不一样的,因为乘积可以正负正负的跳,这样的动归方程肯定是不对的 + +dp[i] = max(dp[i-1] * a[i],a[i]) + +举个例子 : [-2,3,-4] + + +用O(N^2)超时,厉害啊! + +想,可不可以记录+的和-的,记录两个dp数组,我哭了,真的是这样做的 + +最大值可能来源于最小值 -> 哲学般的句子 + +``` +class Solution(object): + def maxProduct(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + n = len(nums) + maxdp = [ nums[0] for i in range(n)] + mindp = [ nums[0] for i in range(n)] + + + for i in range(1,n): + maxdp[i] = max(mindp[i-1]*nums[i], maxdp[i-1]*nums[i],nums[i]) + mindp[i] = min(maxdp[i-1]*nums[i], mindp[i-1]*nums[i],nums[i]) + + return max(maxdp) +``` diff --git a/docs/Leetcode_Solutions/Python/153._find_minimum_in_rotated_sorted_array.md b/docs/Leetcode_Solutions/Python/153._find_minimum_in_rotated_sorted_array.md new file mode 100644 index 000000000..b46e1950d --- /dev/null +++ b/docs/Leetcode_Solutions/Python/153._find_minimum_in_rotated_sorted_array.md @@ -0,0 +1,85 @@ +###153. Find Minimum in Rotated Sorted Array + + +题目: + + + +难度: + +Medium + + + +思路一: + +O(N) 就不说了 + +思路二: + +想的是分治,两段分别找出最小值,然后取最小值,但是依旧没有利用题目特性,并且也是O(N). + +> We can do it in O(logn) using Binary Search. If we take a closer look at above examples, we can easily figure out following pattern: The minimum element is the only element whose previous element is greater than it. If there is no such element, then there is no rotation and first element is the minimum element. + + +上面提到了一个特性,就是minimum element唯一一个它之前的element比它大的,如果不存在这个element,那么就没有rotation. + + + +思路其实是判断前半部分或者后半部分是否有序,然后来剔除,这里需要注意有比较多的边界case,因为如果就两个,那么会有特殊case 0 ,1 mid = 0,所以可以看一下,它这个处理,最后一个elif 是来比较mid 和 end + + + + + +``` +class Solution(object): + def findMin(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + def findRotatedMin(nums, start, end): + if end < start: + return nums[0] + if start == end: + return nums[start] + mid = (start + end) / 2 + if mid > start and nums[mid] < nums[mid-1]: + return nums[mid] + elif mid < end and nums[mid+1] < nums[mid]: + return nums[mid+1] + elif nums[mid] < nums[end]: + return findRotatedMin(nums,start, mid -1) + return findRotatedMin(nums, mid+1, end) + + + return findRotatedMin(nums,0,len(nums)-1) + +``` + +非递归 + +``` +class Solution(object): + def findMin(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + l,r = 0, len(nums) - 1 + while l < r: + mid = (l+r) / 2 + if mid > l and nums[mid] < nums[mid-1]: + return nums[mid] + elif mid < r and nums[mid] > nums[mid+1]: + return nums[mid+1] + elif nums[mid] < nums[r]: + r = mid -1 + else: + l = mid +1 + return nums[0] + +``` + + diff --git a/docs/Leetcode_Solutions/Python/155._min_stack.md b/docs/Leetcode_Solutions/Python/155._min_stack.md new file mode 100644 index 000000000..fac02c17e --- /dev/null +++ b/docs/Leetcode_Solutions/Python/155._min_stack.md @@ -0,0 +1,169 @@ +### 155. Min Stack + +题目: + + + +难度: + +Easy + +思路一: + +懒,直接用系统的数据结构 +用lst和系统的heapq,提升一下,用deque和heapq,这样也没太大提升 + + +```python +from heapq import * + +class MinStack(object): + + def __init__(self): + """ + initialize your data structure here. + """ + self.lst = [] + self.h = [] + + + def push(self, x): + """ + :type x: int + :rtype: void + """ + self.lst.append(x) + heappush(self.h,x) + + + def pop(self): + """ + :rtype: void + """ + val = self.lst.pop() + self.h.remove(val) + heapify(self.h) + + def top(self): + """ + :rtype: int + """ + return self.lst[-1] + + + def getMin(self): + """ + :rtype: int + """ + return self.h[0] + +``` + +思路二: + + +参考 + +用两个stack,其中一个始终来记录到当前位置的最小值 + + +``` +When we insert 18, both stacks change to following. +Actual Stack +18 <--- top +Auxiliary Stack +18 <---- top + +When 19 is inserted, both stacks change to following. +Actual Stack +19 <--- top +18 +Auxiliary Stack +18 <---- top +18 + +When 29 is inserted, both stacks change to following. +Actual Stack +29 <--- top +19 +18 +Auxiliary Stack +18 <---- top +18 +18 + +When 15 is inserted, both stacks change to following. +Actual Stack +15 <--- top +29 +19 +18 +Auxiliary Stack +15 <---- top +18 +18 +18 + +When 16 is inserted, both stacks change to following. +Actual Stack +16 <--- top +15 +29 +19 +18 +Auxiliary Stack +15 <---- top +15 +18 +18 +18 +``` + +这样无论是用deque还是本身的lst都有一些提升 + + +```python +from collections import deque +class MinStack(object): + + def __init__(self): + """ + initialize your data structure here. + """ + self.lst = deque() + self.aux = deque() + + + def push(self, x): + """ + :type x: int + :rtype: void + """ + self.lst.append(x) + if not self.aux or self.aux[-1] > x: + self.aux.append(x) + else: + self.aux.append(self.aux[-1]) + + + + def pop(self): + """ + :rtype: void + """ + self.lst.pop() + self.aux.pop() + + def top(self): + """ + :rtype: int + """ + return self.lst[-1] + + + def getMin(self): + """ + :rtype: int + """ + return self.aux[-1] +``` diff --git a/docs/Leetcode_Solutions/Python/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md b/docs/Leetcode_Solutions/Python/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md new file mode 100644 index 000000000..7d65fb605 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md @@ -0,0 +1,32 @@ +### 159. Longest Substring with At Most Two Distinct Characters + +题目: + + + +难度 : Hard + + + +```python +class Solution(object): + def lengthOfLongestSubstringTwoDistinct(self, s): + """ + :type s: str + :rtype: int + """ + maps = {} + begin, end, counter, length = 0, 0, 0, 0 + while end < len(s): + maps[s[end]] = maps.get(s[end], 0) + 1 + if maps[s[end]] == 1: + counter += 1 +            end += 1   # end 永远指向下一个待处理的字符 +            while counter > 2: + maps[s[begin]] -= 1 + if maps[s[begin]] == 0: + counter -= 1 + begin += 1 +            length = max(length, end - begin) # 因此这里是```end - begin```而不是```end - begin + 1``` +        return length +``` diff --git a/docs/Leetcode_Solutions/Python/160._intersection_of_two_linked_lists.md b/docs/Leetcode_Solutions/Python/160._intersection_of_two_linked_lists.md new file mode 100644 index 000000000..b403f01f9 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/160._intersection_of_two_linked_lists.md @@ -0,0 +1,59 @@ +### 160. Intersection of Two Linked Lists + +题目: + + + +难度: + +Easy + + +如果两个linkedlist有intersection的话,可以看到,其实如果一开始我们就走到b2的话,那么我们就可以两个pointer一个一个的对比,到哪一个地址一样,接下来就是intersection部分。 + + + +``` +A: a1 → a2 + ↘ + c1 → c2 → c3 + ↗ +B: b1 → b2 → b3 +``` +比较巧妙的数学解法,看下面的解释和代码 + + + +AC代码如下: + +```python +class Solution(object): + def getIntersectionNode(self, headA, headB): + """ + :type head1, head1: ListNode + :rtype: ListNode + """ + pA, pB = headA, headB + while pA is not pB: + pA = pA.next if pA else headB + pB = pB.next if pB else headA + return pA +``` +Just count the number of moves by each pointer before they meet. One pointer will traverse entire list1 for N moves and then jump to the head of list1 to move (M-K) steps to intersection, where K represents the length of common part. Now the other pointer must also moved the same number of steps since they are both moved at the same time. The second pointer traverses the entire list2 for M steps and jumped to the head of list1 to move (N-K) steps. So the loop finished with M+N-K times. +详见[zzg_zzm的评论](https://leetcode.com/problems/intersection-of-two-linked-lists/discuss/49799) + +This algorithm is sooooo perfect! + +I was wonder if the running time is O(n+m), but later I figured out that the actually running time is just: + +- m+n for non-intersection case + +With intersection: + +- Suppose for LL-A, it’s a+b=n, a is the # of nodes before intersection + +- Suppose for LL-B, it’s c+b=m, c is the # of nodes before intersection + +Thus the actual running time is a+b+c = n+c = m+a. + +Actually, when b=0, this just stands for the case with no intersection with a+b+c=n+m diff --git a/docs/Leetcode_Solutions/Python/162._find_peak_element.md b/docs/Leetcode_Solutions/Python/162._find_peak_element.md new file mode 100644 index 000000000..2aad9b1c8 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/162._find_peak_element.md @@ -0,0 +1,61 @@ +### 162. Find Peak Element + +题目: + + + +难度: +Medium + + +思路: + + +最直观的是O(N)解法 + +```python +class Solution(object): + def findPeakElement(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + for i in range(1, len(nums)): + if nums[i] < nums[i-1]: + return i-1 + return len(nums) - 1 +``` + +O(lgN) 解法 + +这是一个经典题目 + +- a[mid] < a[mid] only look at the left side +- a[mid] < a[mid] only look at the right side +- else peak found + + +证明就是用反证法,或者看peak,因为这里已经限制了num[i] ≠ num[i+1],所以peak element 一定存在。然后a[mid] < a[mid-1],那么说明这里一定是下降的,说明之前一定有一个peak存在,否则我们可以用反证法证明. + +写到这里,我非常相信就是binary search能写对其实不容易。 + + +AC代码 + +```python +class Solution(object): + def findPeakElement(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + l, r = 0, len(nums) - 1 + while l <= r: + if l == r : return l + mid = l + ((r - l) >> 2) + if nums[mid] < nums[mid+1]: + l = mid + 1 + else: + r = mid +``` + diff --git a/docs/Leetcode_Solutions/Python/165._compare_version_numbers.md b/docs/Leetcode_Solutions/Python/165._compare_version_numbers.md new file mode 100644 index 000000000..ab976ce99 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/165._compare_version_numbers.md @@ -0,0 +1,47 @@ +###165. Compare Version Numbers + +题目: + + + +难度: + +Easy + + +其实我并不觉得这个很简单 + +因为可能两个的位数不一样,首端或者尾端需要补0,同时我还考虑过可能有出现多个'.'的状况 + + + +``` +class Solution(object): + def compareVersion(self, version1, version2): + """ + :type version1: str + :type version2: str + :rtype: int + """ + v1 = version1.split('.') + v2 = version2.split('.') + v1 = [int(x) for x in v1] + v2 = [int(x) for x in v2] + + len1 = len(v1) + len2 = len(v2) + lenMax = max(len1, len2) + for x in range(lenMax): + v1Token = 0 + if x < len1: + v1Token = v1[x] + v2Token = 0 + if x < len2: + v2Token = v2[x] + if v1Token > v2Token: + return 1 + elif v1Token < v2Token: + return -1 + return 0 + +``` diff --git a/docs/Leetcode_Solutions/Python/166._Fraction_to_Recurring_Decimal.md b/docs/Leetcode_Solutions/Python/166._Fraction_to_Recurring_Decimal.md new file mode 100644 index 000000000..d4285fe4b --- /dev/null +++ b/docs/Leetcode_Solutions/Python/166._Fraction_to_Recurring_Decimal.md @@ -0,0 +1,42 @@ +### 166. Fraction to Recurring Decimal + +题目: + + + +难度: + +Medium + + + + +```python +class Solution: + # @return a string + def fractionToDecimal(self, n, d): + res = '' + if n == 0: # zero numerator + return str(n) + if (n < 0) ^ (d < 0): # determine the sign + res += '-' + n = abs(n) # remove sign of operands + d = abs(d) + res += str(n / d) # append integral part + if (n % d == 0): # in case no fractional part + return res + res += '.' + r = n % d + m = {} + while r: # simulate the division process + if r in m: # meet a known remainder + res = res[:m[r]] + '(' + res[m[r]:] + ')' # so we reach the end of the repeating part + break + m[r] = len(res) # if the remainder is first seen, remember the current position for it + r *= 10 + res += str(r / d) # append the quotient digit + r %= d + return res +``` + + diff --git a/docs/Leetcode_Solutions/Python/167._two_sum_ii_-_input_array_is_sorted.md b/docs/Leetcode_Solutions/Python/167._two_sum_ii_-_input_array_is_sorted.md new file mode 100644 index 000000000..8fcd51708 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/167._two_sum_ii_-_input_array_is_sorted.md @@ -0,0 +1,35 @@ +### 167. Two Sum II - Input array is sorted + + + +题目: + + + +难度: +Medium + + +思路: + + +双指针 + +```python +class Solution(object): + def twoSum(self, numbers, target): + """ + :type numbers: List[int] + :type target: int + :rtype: List[int] + """ + l, r = 0, len(numbers) - 1 + while l < r: + if numbers[l] + numbers[r] == target: + return [l+1, r+1] + elif numbers[l] + numbers[r] > target: + r -= 1 + else: + l += 1 + +``` diff --git a/docs/Leetcode_Solutions/Python/168._excel_sheet_column_title.md b/docs/Leetcode_Solutions/Python/168._excel_sheet_column_title.md new file mode 100644 index 000000000..547f083ee --- /dev/null +++ b/docs/Leetcode_Solutions/Python/168._excel_sheet_column_title.md @@ -0,0 +1,28 @@ +###168. Excel Sheet Column Title + +题目: + + + + +难度: + +Easy + +依旧26进制的反击,不过这个反击我做的没之前那个好,看了hint + +``` +class Solution(object): + def convertToTitle(self, n): + """ + :type n: int + :rtype: str + """ + ans = '' + while n : + ans = chr(ord('A') + (n - 1) % 26) + ans + n = (n - 1) // 26 + return ans + +``` + diff --git a/docs/Leetcode_Solutions/Python/169._majority_element.md b/docs/Leetcode_Solutions/Python/169._majority_element.md new file mode 100644 index 000000000..6701ba759 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/169._majority_element.md @@ -0,0 +1,74 @@ +###169. Majority Element + + + +题目: + + + +难度: +Easy + +思路: + +其实这个我有点有想到过 + + +给定一个长度为 n的数组,其中有一个数,它出现的次数大于⎣n/2⎦,称为主要元素,找到它. + +这个很像之前做过的一道CLRS的题目,想法可以用divide & conquer. + + +- 如果数组长度 <= 2,那么return第一个即解决问题 +- 如果长度 > 2,那么可以两两配对,对于配对一样的结果,删去 + - 如果最后余一个,这一个留下 + - shuffle之后再尝试两两配对,直到最后结果不再改变 + + 这样肯定是能解决问题的,因为为了满足次数大于⎣n/2⎦这个条件。 + + + + + + +``` + + 1 2 1 2 1 2 1 2 + 2 3 2 3 2 3 2 3 + 2 4 2 2 2 2 3 + 2 4 2 3 3 + 3 2 + 2 2 + 2 2 +``` + +思路容易implement非常难啊. + + + +这个问题有一个很出名的算法 + + +Boyer-Moore众数(majority number) 问题 + +在数组中找到两个不相同的元素并删除它们,不断重复此过程,直到数组中元素都相同,那么剩下的元素就是主要元素。 + + +这个算法的妙处在于不直接删除数组中的元素,而是利用一个计数变量. + +伪码 + + def majorityElement(self, nums): + count,major=0,0 + for n in nums: + if count==0: + major=n + if major==n: + count+=1 + else: + count-=1 + return major + + + + \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/171._excel_sheet_column_number.md b/docs/Leetcode_Solutions/Python/171._excel_sheet_column_number.md new file mode 100644 index 000000000..4521f737c --- /dev/null +++ b/docs/Leetcode_Solutions/Python/171._excel_sheet_column_number.md @@ -0,0 +1,34 @@ +###171. Excel Sheet Column Number + +题目: + + + + +难度: + +Easy + + +26进制的反击 + +``` +class Solution(object): + def titleToNumber(self, s): + """ + :type s: str + :rtype: int + """ + maps = {} + for i in range(65,91): + maps[chr(i)] = i - 64 + + lst = list(s) + lst.reverse() + num = 0 + for idx,item in enumerate(lst): + num += maps[item] * (26 ** idx) + return num + +``` + diff --git a/docs/Leetcode_Solutions/Python/173._binary_search_tree_iterator.md b/docs/Leetcode_Solutions/Python/173._binary_search_tree_iterator.md new file mode 100644 index 000000000..a8b6fd9cc --- /dev/null +++ b/docs/Leetcode_Solutions/Python/173._binary_search_tree_iterator.md @@ -0,0 +1,95 @@ +### 173. Binary Search Tree Iterator + +题目: + + + +难度: +Medium + + +同样没有听题目要求,一开始就取巧,用InOrder,这样得到BSF有序排列,然后使用 + + +```python + +class BSTIterator(object): + def __init__(self, root): + """ + :type root: TreeNode + """ + self.root = root + self.lst = [] + self.inOrder(root) + self.lst.reverse() + + + + def hasNext(self): + """ + :rtype: bool + """ + return self.lst != [] + + + def next(self): + """ + :rtype: int + """ + return self.lst.pop() + + def inOrder(self, root): + if root == None: + return + self.inOrder(root.left) + self.lst.append(root.val) + self.inOrder(root.right) + +``` + +谷歌了一下,得到如何满足题目要求的hint,从root开始,往左走,把左孩子压入stack,直到左边为空。 + +然后开始取node,如果node有右孩子,则同样要把node的右孩子的所有左孩子全部append入stack,画了一个图,可行。 + + + + + +```python + +class BSTIterator(object): + def __init__(self, root): + """ + :type root: TreeNode + """ + self.root = root + self.stack = [] + self.pushAllLeft(root) + + + def hasNext(self): + """ + :rtype: bool + """ + return self.stack != [] + + + def next(self): + """ + :rtype: int + """ + if self.hasNext(): + cur = self.stack.pop() + if cur.right: + self.pushAllLeft(cur.right) + return cur.val + + def pushAllLeft(self, node): + """ + :type node: TreeNode + """ + cur = node + while cur: + self.stack.append(cur) + cur = cur.left +``` diff --git a/docs/Leetcode_Solutions/Python/189._rotate_array.md b/docs/Leetcode_Solutions/Python/189._rotate_array.md new file mode 100644 index 000000000..080a1e581 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/189._rotate_array.md @@ -0,0 +1,23 @@ +###189. Rotate Array + +题目: + + + +难度 : Easy + + +作弊神奇python大法 + +``` +class Solution(object): + def rotate(self, nums, k): + """ + :type nums: List[int] + :type k: int + :rtype: void Do not return anything, modify nums in-place instead. + """ + n = len(nums) + nums[:] = nums[n-k:] + nums[:n-k] + œ +``` diff --git a/docs/Leetcode_Solutions/Python/191._number_of_1_bits.md b/docs/Leetcode_Solutions/Python/191._number_of_1_bits.md new file mode 100644 index 000000000..dcba66c7b --- /dev/null +++ b/docs/Leetcode_Solutions/Python/191._number_of_1_bits.md @@ -0,0 +1,66 @@ +### 191. Number of 1 Bits + +题目: + + + + +难度: + +Easy + + +转成二进制,数1的个数 + +```python +class Solution(object): + def hammingWeight(self, n): + """ + :type n: int + :rtype: int + """ + return bin(n).count('1') +``` + + + +有wikipedia的题目 [Hamming Weight]((https://zh.wikipedia.org/wiki/汉明重量)) + + + +用wikipedia的解法: + +原理是在于每次使用x & x-1 总会把低位的数字给置0 + +比如 3 = 011 2 = 010 3 & 2 = 010 cnt =1 + +​ 2 = 010 1 = 001 2 & 1 = 000 cnt = 2 + +比如 9 = 1001 8 = 1000 9&8 = 1000 cnt =1 + +​ 8 = 1000 7 = 0111 8&7 = 0000 cnt = 2 + +> 减1操作将最右边的符号从0变到1,从1变到0,与操作将会移除最右端的1。如果最初X有N个1,那么经过N次这样的迭代运算,X将减到0。下面的算法就是根据这个原理实现的。 + +所以关键点是每次都会把最右边的1变成0. + + + +AC代码 + + + +```python +class Solution(object): + def hammingWeight(self, n): + """ + :type n: int + :rtype: int + """ + cnt = 0 + while n != 0: + n &= n - 1 + cnt += 1 + return cnt +``` + diff --git a/docs/Leetcode_Solutions/Python/198._house_robber.md b/docs/Leetcode_Solutions/Python/198._house_robber.md new file mode 100644 index 000000000..2b2deedda --- /dev/null +++ b/docs/Leetcode_Solutions/Python/198._house_robber.md @@ -0,0 +1,53 @@ + +### 198. House Robber + + +题目: + + + +难度: + +Easy + + +状态转移方程: + +dp[i] = max(dp[i-1], dp[i-2] + nums[i]) + + +AC 代码 + +```python +class Solution(object): + def rob(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + n = len(nums) + if n == 0 : return 0 + elif n == 1 : return nums[0] + elif n == 2 : return max(nums[0], nums[1]) + else: + dp = [0 for i in range(n)] + dp[0] = nums[0] + dp[1] = max(nums[0],nums[1]) + for i in range(2,n): + dp[i] = max( dp[i-1], dp[i-2] + nums[i]) + return dp[n-1] +``` + +```python +class Solution(object): + def rob(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + last, now = 0, 0 + for i in nums: last, now = now, max(last + i, now) + return now +``` + + diff --git a/docs/Leetcode_Solutions/Python/199._binary_tree_right_side_view.md b/docs/Leetcode_Solutions/Python/199._binary_tree_right_side_view.md new file mode 100644 index 000000000..6f7b3b6d6 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/199._binary_tree_right_side_view.md @@ -0,0 +1,37 @@ +###199. Binary Tree Right Side View + +题目: + + + + +难度: + +Medium + + +还是在玩第102题,level order traversal. + +``` +class Solution(object): + def rightSideView(self, root): + """ + :type root: TreeNode + :rtype: List[int] + """ + if root == None: return [] + + res = [] + curLevel = [root] + while curLevel: + nextLevel = [] + tmpRes = [] + for node in curLevel: + tmpRes.append(node.val) + if node.left: nextLevel.append(node.left) + if node.right: nextLevel.append(node.right) + res.append(tmpRes[-1]) + curLevel = nextLevel + return res +``` + diff --git a/docs/Leetcode_Solutions/Python/200._number_of_islands.md b/docs/Leetcode_Solutions/Python/200._number_of_islands.md new file mode 100644 index 000000000..73c5aecf4 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/200._number_of_islands.md @@ -0,0 +1,130 @@ +### 200. Number of Islands + + +题目: + + + +难度: +Medium + + +思路: + + +一开始: +numberOfIslands = 0 +islandArea = [] + + +然后遇到(x,y) = 1的状况,更新numberOfIslands,并且把(x,y)放入islandArea,然后用BFS或者DFS查找岛屿范围,全部更如islandArea,做loop + +以上就是基本思路 + + +然后超时|||, 小改之后AC + + +``` + +class Solution(object): + def numIslands(self, grid): + """ + :type grid: List[List[str]] + :rtype: int + """ + self.grid = grid[:] + + self.row = len(self.grid) + self.col = len(self.grid[0]) if self.row else 0 + self.visited = [[0 for i in range(self.col)]for j in range(self.row)] + + + self.numberOfIslands = 0 + + for i in range(self.row): + for j in range(self.col): + if self.grid[i][j] == '1' and self.visited[i][j] == 0: + self.findArea(i,j) + self.numberOfIslands += 1 + + return self.numberOfIslands + + def findArea(self, i, j): + s = [] + s.append((i,j)) + while s: + (x,y) = s.pop() + self.visited[x][y] = 1 + if self.legal(x-1,y): + s.append((x-1,y)) + if self.legal(x+1,y): + s.append((x+1,y)) + if self.legal(x,y-1): + s.append((x,y-1)) + if self.legal(x,y+1): + s.append((x,y+1)) + + def legal(self,x,y): + return x>= 0 and x < self.row and y >= 0 and y < self.col and self.grid[x][y] == '1' and self.visited[x][y] == 0 +a = Solution() +print a.numIslands(["11000","11000","00100","00011"]) + +``` + + +看了别人的代码,写的真美 ╮(╯_╰)╭ 啊 + +``` +class Solution(object): + def numIslands(self, grid): + """ + :type grid: List[List[str]] + :rtype: int + """ + def dfs(gird, used, row, col, x, y): + if gird[x][y] == '0' or used[x][y]: + return + used[x][y] = True + + if x!= 0: + dfs(grid, used, row,col, x-1,y) + if x!= row -1 : + dfs(grid, used, row,col, x+1, y) + if y!= 0: + dfs(grid, used, row,col, x, y-1) + if y!= col - 1: + dfs(grid, used, row,col, x, y+1) + + + row = len(grid) + col = len(grid[0]) if row else 0 + + used = [[0 for i in xrange(col)] for i in xrange(row)] + + count = 0 + for i in xrange(row): + for j in xrange(col): + if grid[i][j] == '1' and not used[i][j]: + dfs(grid,used,row,col,i,j) + count += 1 + return count +``` + +厉害的解法:Sink and count the islands. +```python +class Solution(object): + def numIslands(self, grid): + """ + :type grid: List[List[str]] + :rtype: int + """ + def sink(i, j): + if 0 <= i < len(grid) and 0 <= j < len(grid[0]) and grid[i][j] == '1': + grid[i][j] = '0' + map(sink, (i+1, i-1, i, i), (j, j, j+1, j-1)) + return 1 + return 0 + return sum(sink(i, j) for i in range(len(grid)) for j in range(len(grid[0]))) +``` + diff --git a/docs/Leetcode_Solutions/Python/203._remove_linked_list_elements.md b/docs/Leetcode_Solutions/Python/203._remove_linked_list_elements.md new file mode 100644 index 000000000..15aa10efa --- /dev/null +++ b/docs/Leetcode_Solutions/Python/203._remove_linked_list_elements.md @@ -0,0 +1,38 @@ +###203. Remove Linked List Elements + +题目: + + + +难度: + +Easy + + +AC代码如下: + + + +``` +class Solution(object): + def removeElements(self, head, val): + """ + :type head: ListNode + :type val: int + :rtype: ListNode + """ + dummy = ListNode(-1) + dummy.next = head + + cur = dummy + + while cur.next: + if cur.next.val == val: + cur.next = cur.next.next + else: + cur = cur.next + + return dummy.next + + +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/204._count_primes.md b/docs/Leetcode_Solutions/Python/204._count_primes.md new file mode 100644 index 000000000..b69290b70 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/204._count_primes.md @@ -0,0 +1,57 @@ +###204. Count Primes + + +题目: + + + +难度: + +Easy + + + +这个题的hint是已经把算法喂到嘴边了 + + + + +``` +Input: an integer n > 1 + +Let A be an array of Boolean values, indexed by integers 2 to n, +initially all set to true. + +for i = 2, 3, 4, ..., not exceeding √n: + if A[i] is true: + for j = i^2, i^2+i, i^2+2*i, i^2+3i, ..., not exceeding n : + A[j] := false + +Output: all i such that A[i] is true. +``` + + + +python算法 + + +``` +class Solution(object): + def countPrimes(self, n): + """ + :type n: int + :rtype: int + """ + isPrime = [1 for i in range(n)] + + i = 2 + while i * i < n: + if isPrime[i]: + j = i * i + while j < n : + isPrime[j] = 0 + j += i + i += 1 + + return sum(isPrime[2:]) +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/205._isomorphic_strings.md b/docs/Leetcode_Solutions/Python/205._isomorphic_strings.md new file mode 100644 index 000000000..47b0ab772 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/205._isomorphic_strings.md @@ -0,0 +1,39 @@ +###205. Isomorphic Strings + +题目: + + + +难度 : Easy + + +AC之法,用dictionary,因为限制,所以确保s 和 t 是isomorphic 同时 t 和 s 是 + + +``` +class Solution(object): + def isIsomorphic(self, s, t): + """ + :type s: str + :type t: str + :rtype: bool + """ + return self.iso(s,t) and self.iso(t,s) + + def iso(self,s, t): + """ + :type s: str + :type t: str + :rtype: bool + """ + mapx = {} + for i in range(len(s)): + if s[i] not in mapx: + mapx[s[i]] = t[i] + elif s[i] in mapx: + if t[i] != mapx[s[i]]: + return False + return True + + +``` diff --git a/docs/Leetcode_Solutions/Python/206._reverse_linked_list.md b/docs/Leetcode_Solutions/Python/206._reverse_linked_list.md new file mode 100644 index 000000000..97c10db26 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/206._reverse_linked_list.md @@ -0,0 +1,69 @@ +### 206. Reverse Linked List + +题目: + + + +难度: +Easy + +用三个指针,分别指向prev,cur 和 nxt,然后loop一圈还算比较简单. + + + + +```python +class Solution(object): + def reverseList(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + prev = None + cur = head + while(cur): + nxt = cur.next + cur.next = prev + prev = cur + cur = nxt + return prev +``` +其实一个指针就够了 +```python +class Solution(object): + def reverseList(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + if not head: + return head + prev = None + while head.next: + tmp = head.next + head.next = prev + prev = head + head = tmp + head.next = prev + return head +``` + +递归版本,可以再消化一下. + + +```python +class Solution(object): + def reverseList(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + return self.reverseHelper(head, None) + + def reverseHelper(self, head, new_head): + if not head: + return new_head + nxt = head.next + head.next = new_head + return self.reverseHelper(nxt, head) +``` diff --git a/docs/Leetcode_Solutions/Python/207._course_schedule.md b/docs/Leetcode_Solutions/Python/207._course_schedule.md new file mode 100644 index 000000000..6e990f09d --- /dev/null +++ b/docs/Leetcode_Solutions/Python/207._course_schedule.md @@ -0,0 +1,93 @@ +###207. Course Schedule + + + +题目: + + + +难度: +Medium + +思路: + +就是考topological sort,用来判断directed graph是否有cycle + +DFS 和 BFS都可以用来拓扑排序。 + +最简单的想法是每次取出indegree是0的node,然后把它和与之相关的edge都删了。一开始觉得这样的时间复杂度会很高,然后看到了这样写,参照: + + + +很聪明的写法 + +这里做了转成set以及添加removeList这样的操作是因为边list边做iterator这样的操作很危险 + + + + +``` +class Solution(object): + def canFinish(self, numCourses, prerequisites): + """ + :type numCourses: int + :type prerequisites: List[List[int]] + :rtype: bool + """ + degrees = [ 0 for i in range(numCourses)] + childs = [[] for i in range(numCourses)] + for front, tail in prerequisites: + degrees[front] += 1 + childs[tail].append(front) + + courses = set(range(numCourses)) + flag = True + + while flag and len(courses): + flag = False + removeList = [] + for x in courses: + if degrees[x] == 0: + for child in childs[x]: + degrees[child] -= 1 + removeList.append(x) + flag = True + for x in removeList: + courses.remove(x) + return len(courses) == 0 + +``` + +因为CLRS里面明确提到涂色法来处理DFS + +搞了半天,写了一个涂色法,在超时的边缘。之所以超时边缘是因为每次都要去prerequisites里看,没有删减,不高效. + +``` +class Solution(object): + def canFinish(self, numCourses, prerequisites): + """ + :type numCourses: int + :type prerequisites: List[List[int]] + :rtype: bool + """ + def dfs(i, colors, prerequisites): + colors[i] = 'G' + #print i, colors + for front, tail in prerequisites: + if tail == i: + if colors[front] == 'G': + return False + elif colors[front] == 'B': + continue + elif dfs(front, colors, prerequisites) == False: + return False + colors[i] = 'B' + return True + + colors = ['W' for i in range(numCourses)] + for i in range(numCourses): + if colors[i] == 'W': + if dfs(i, colors, prerequisites) == False: + return False + return True +``` diff --git a/docs/Leetcode_Solutions/Python/208._implement_trie_(prefix_tree).md b/docs/Leetcode_Solutions/Python/208._implement_trie_(prefix_tree).md new file mode 100644 index 000000000..8ee06db58 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/208._implement_trie_(prefix_tree).md @@ -0,0 +1,89 @@ +### 208. Implement Trie (Prefix Tree) + +题目: + + + + +难度: + +Medium + +这个Python实现也太精美了吧,谷歌复写之 + +然后还unlock了一个solution,to read + +Trie整个都需要 to read,精美,可爱😊 + + + + +```python +class TrieNode(object): + def __init__(self): + """ + Initialize your data structure here. + """ + self.childs = dict() + self.isWord = False + + + +class Trie(object): + + def __init__(self): + self.root = TrieNode() + + def insert(self, word): + """ + Inserts a word into the trie. + :type word: str + :rtype: void + """ + node = self.root + for letter in word: + child = node.childs.get(letter) + if child is None: + child = TrieNode() + node.childs[letter] = child + node = child + node.isWord = True + + def search(self, word): + """ + Returns if the word is in the trie. + :type word: str + :rtype: bool + """ + node = self.root + for i in word: + child = node.childs.get(i) + if child is None: + return False + node = child + return node.isWord + + + def startsWith(self, prefix): + """ + Returns if there is any word in the trie + that starts with the given prefix. + :type prefix: str + :rtype: bool + """ + node = self.root + for letter in prefix: + child = node.childs.get(letter) + if child is None: + return False + node = child + return True + + +# Your Trie object will be instantiated and called as such: +# trie = Trie() +# trie.insert("somestring") +# trie.search("key") + +``` + diff --git a/docs/Leetcode_Solutions/Python/210._course_schedule_ii.md b/docs/Leetcode_Solutions/Python/210._course_schedule_ii.md new file mode 100644 index 000000000..852b1163e --- /dev/null +++ b/docs/Leetcode_Solutions/Python/210._course_schedule_ii.md @@ -0,0 +1,55 @@ +###210. Course Schedule II + + + +题目: + + + +难度: +Medium + +思路: + +在207的基础上加了order,进击 + + +``` +class Solution(object): + def findOrder(self, numCourses, prerequisites): + """ + :type numCourses: int + :type prerequisites: List[List[int]] + :rtype: List[int] + """ + degrees = [ 0 for i in range(numCourses)] + childs = [[] for i in range(numCourses)] + for front, tail in prerequisites: + degrees[front] += 1 + childs[tail].append(front) + + + courses = set(range(numCourses)) + flag = True + order = [] + + while flag and len(courses): + flag = False + removeList = [] + for x in courses: + if degrees[x] == 0: + print x + for child in childs[x]: + degrees[child] -= 1 + removeList.append(x) + order.append(x) + flag = True + for x in removeList: + courses.remove(x) + + if len(courses) == 0: + return order + else: + return [] + +``` diff --git a/docs/Leetcode_Solutions/Python/211. Add and Search Word - Data structure design.md b/docs/Leetcode_Solutions/Python/211. Add and Search Word - Data structure design.md new file mode 100644 index 000000000..7dd0ea278 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/211. Add and Search Word - Data structure design.md @@ -0,0 +1,77 @@ +### 211. Add and Search Word - Data structure design + +题目: + + + +难度: Medium + +思路: + +trie也是树,那么dfs/bfs同样适用。 + +实际上是照抄208trie的题目再加上dfs + + + +AC代码 + + + +``` +class TrieNode(object): + """docstring for TrieNode""" + def __init__(self): + self.childs = dict() + self.isWord = False + +class WordDictionary(object): + def __init__(self): + """ + initialize your data structure here. + """ + self.root = TrieNode() + + + def addWord(self, word): + """ + Adds a word into the data structure. + :type word: str + :rtype: void + """ + node = self.root + for letter in word: + child = node.childs.get(letter) + if child is None: + child = TrieNode() + node.childs[letter] = child + node = child + node.isWord = True + + + def search(self, word): + """ + Returns if the word is in the data structure. A word could + contain the dot character '.' to represent any one letter. + :type word: str + :rtype: bool + """ + def dfs(root, word): + if len(word) == 0: + return root.isWord + elif word[0] == '.': + for node in root.childs: + if dfs(root.childs[node], word[1:]): + return True + return False + else: + node = root.childs.get(word[0]) + if node is None: + return False + return dfs(node, word[1:]) + + return dfs(self.root, word) +``` + + + diff --git a/docs/Leetcode_Solutions/Python/213._house_robber_ii.md b/docs/Leetcode_Solutions/Python/213._house_robber_ii.md new file mode 100644 index 000000000..9caec3dfd --- /dev/null +++ b/docs/Leetcode_Solutions/Python/213._house_robber_ii.md @@ -0,0 +1,61 @@ +###213. House Robber II + + +题目: + + + +难度: +Medium + +思路: + +跟house robber 1 类似,但是加了一些限制,抢到第 n-1 家最大两种可能,抢第 n-1 家和不抢第 n-1 家。 + + 0, 1, 2, 3, 4, 5, 6 ... n-1 + + +所以状态转移方程写成二维的更好来求,从第i家抢到第j家的状态转移方程 + + + nums[j] ,j = i + dp[i][j] = max(nums[i], nums[i+1]) , j = i +1 + max(dp[i][j-2] + nums[j], dp[i][j-1]), j > i+1 + + + +Show me the code + + +AC代码 + +``` +class Solution(object): + def rob(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + n = len(nums) + if n == 0 : return 0 + if n == 1 : return nums[0] + if n == 2 : return max(nums[0],nums[1]) + + dp = [[0 for i in range(n)] for j in range(n)] + + for i in range(n): + for j in range(i,n): + if j == i: + dp[i][j] = nums[j] + elif j == i + 1: + dp[i][j] = max(nums[i],nums[i+1]) + else: + dp[i][j] = max(dp[i][j-2] + nums[j], dp[i][j-1]) + + # print dp + # rob without n-1, or rob with n-1 + val = max(dp[0][n-2], dp[1][n-3] + nums[n-1]) + + return val + +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/216._combination_sum_iii.md b/docs/Leetcode_Solutions/Python/216._combination_sum_iii.md new file mode 100644 index 000000000..9e1b6371e --- /dev/null +++ b/docs/Leetcode_Solutions/Python/216._combination_sum_iii.md @@ -0,0 +1,40 @@ +###216. Combination Sum III + +题目: + + + + +难度: + +Medium + +继续Combination Sum 系列 + + +``` +class Solution(object): + def combinationSum3(self, k, n): + """ + :type k: int + :type n: int + :rtype: List[List[int]] + """ + candidates = [1,2,3,4,5,6,7,8,9] + self.res = [] + self.combSum(candidates, n, [], k) + return self.res + + + def combSum(self,candidates, target, valueList, k): + if target == 0 and k == 0: + self.res.append(valueList) + length = len(candidates) + if length == 0 or k < 0 : + return + for i in range(length): + if candidates[i] > target: + return + self.combSum(candidates[i+1:], target - candidates[i], valueList + [candidates[i]], k-1) + +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/217._contains_duplicate.md b/docs/Leetcode_Solutions/Python/217._contains_duplicate.md new file mode 100644 index 000000000..f6c2a2aef --- /dev/null +++ b/docs/Leetcode_Solutions/Python/217._contains_duplicate.md @@ -0,0 +1,62 @@ +###217. Contains Duplicate + +题目: + + + +难度: + +Easy + + +我直接sort,然后比较相邻的元素,这样O(n),也是笨办法,居然unlocked a solution,所以来读读解答. + +三个办法: + +- linear search O(n^2) +- sort O(n) +- hashtable + + +我用的sort + +``` +class Solution(object): + def containsDuplicate(self, nums): + """ + :type nums: List[int] + :rtype: bool + """ + nums.sort() + for i in range(len(nums)-1): + if nums[i] == nums[i+1]: + return True + return False +``` + + + + +看给的Java解法 + + +``` +public boolean containsDuplicate(int[] nums) { + Set set = new HashSet<>(nums.length); + for (int x: nums) { + if (set.contains(x)) return true; + set.add(x); + } + return false; +} +``` + +还有一个取巧的Python解法,我也看到了 + +``` +class Solution(object): + def containsDuplicate(self, nums): + if len(nums) > len(set(nums)): + return True + return False +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/218._The _Skyline_Problem .md b/docs/Leetcode_Solutions/Python/218._The _Skyline_Problem .md new file mode 100644 index 000000000..34d9c9176 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/218._The _Skyline_Problem .md @@ -0,0 +1,134 @@ +### 218. The Skyline Problem + +题目: + + + +难度: + +Hard + +思路 + +观察发现,skyline的points的横坐标一定是某个building的左边界或者右边界。 + +开始,假设只有2个建筑物,拿出第一个buiding B1,我们先把它的左上顶点加进我们的output结果skyline中,然后继续拿下一个building B2,我们现在需要将B2的左上顶点对应的x coordinate与B1的右上顶点所对应的x coordinate做比较: + +- 如果前者小且B2的高度大于B1的高度,则我们将B2的左上顶点也加入skyline中去。 +- 如果前者小且B2的高度小于等于B1的高度,则忽略B2的左上顶点 + +接下来考虑更多建筑物的情况,从左到右扫描,当我们遇到第一个楼的左边界时,把它push到一个heap中。如果后面扫描的楼的高度比heap中最高的楼还高,那么它的左上顶点一定会被加入到skyline中。当我们遇到一个building的右边界时,我们需要将其从heap中pop掉,如果heap中max height有变化,则push到结果中。 + +参考[Brian Gordon的blog](https://briangordon.github.io/2014/08/the-skyline-problem.html) + 和 [Stefan大神的题解](https://leetcode.com/problems/the-skyline-problem/discuss/61194) + +#### 程序代码解释 + +- liveBuildings代表(左上顶点已经被加入output中但右上顶点还没有做判断的building)的右上顶点的集合,形式为[(height, x-coordinate)…..] +- skyline是output +- 程序里面的这句代码```while idx < n and buildings[idx][0] == start:```是为了防止有左右坐标完全相同但是height不同的building的存在,it's not useless!!! +- python里面的heapq模块如果有不懂的同学可以看看这个文章:[heapq](http://blog.csdn.net/calling_wisdom/article/details/41676133) + + +```python +class Solution(object): + def getSkyline(self, buildings): + """ + :type buildings: List[List[int]] + :rtype: List[List[int]] + """ + idx, n = 0, len(buildings) + liveBuildings, skyline = [], [] +        while idx < n or len(liveBuildings) > 0: # 只要所有的点没处理完就一直循环 +            if len(liveBuildings) == 0 or (idx < n and buildings[idx][0] <= -liveBuildings[0][1]): + start = buildings[idx][0] + while idx < n and buildings[idx][0] == start: + heapq.heappush(liveBuildings, [-buildings[idx][2], -buildings[idx][1]]) + idx += 1 + else: + start = -liveBuildings[0][1] + while len(liveBuildings) > 0 and -liveBuildings[0][1] <= start: + heapq.heappop(liveBuildings) + height = len(liveBuildings) and -liveBuildings[0][0] + if len(skyline) == 0 or skyline[-1][1] != height: + skyline.append([start, height]) + return skyline +``` +#####另外还有一个超级6的大神的代码,但是今天我要赶报告,就只先贴代码了 + +```python +class Solution(object): + def getSkyline(self, buildings): + """ + :type buildings: List[List[int]] + :rtype: List[List[int]] + """ + events = sorted([(L, -H, R) for L, R, H in buildings] + list(set((R, 0, None) for L, R, H in buildings))) + #events = sorted(event for L, R, H in buildings for event in ((L, -H, R), (R, 0, None))) + res, hp = [[0, 0]], [(0, float("inf"))] + for x, negH, R in events: + while x >= hp[0][1]: + heapq.heappop(hp) + if negH: heapq.heappush(hp, (negH, R)) + if res[-1][1] + hp[0][0]: + res += [x, -hp[0][0]], + return res[1:] +``` + +```Java +public class Solution { + public List getSkyline(int[][] buildings) { + List result = new ArrayList(); + if (buildings == null || buildings.length == 0 || buildings[0].length == 0) { + return result; + } + + List heights = new ArrayList(); + for (int[] building : buildings) { + heights.add(new Height(building[0], -building[2])); + heights.add(new Height(building[1], building[2])); + } + Collections.sort(heights, new Comparator() { + @Override + public int compare(Height h1, Height h2) { + return h1.index != h2.index ? h1.index - h2.index : h1.height - h2.height; + } + }); + + PriorityQueue pq = new PriorityQueue(1000, Collections.reverseOrder()); + pq.offer(0); + int prev = 0; + for (Height h : heights) { + if (h.height < 0) { + pq.offer(-h.height); + } else { + pq.remove(h.height); + } + int cur = pq.peek(); + if (cur != prev) { + result.add(new int[]{h.index, cur}); + prev = cur; + } + } + + return result; + } + + class Height { + int index; + int height; + Height(int index, int height) { + this.index = index; + this.height = height; + } + } +} +``` + + + +Author: Keqi Huang + +If you like it, please spread your support + +![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) diff --git a/docs/Leetcode_Solutions/Python/219._contains_duplicate_ii.md b/docs/Leetcode_Solutions/Python/219._contains_duplicate_ii.md new file mode 100644 index 000000000..8c5868c6f --- /dev/null +++ b/docs/Leetcode_Solutions/Python/219._contains_duplicate_ii.md @@ -0,0 +1,35 @@ +###219. Contains Duplicate II + +题目: + + + +难度: + +Easy + + +经过了Contains Duplicate的考验,用hash table(也叫dictionary)来存,这个元素还没出现过,就放hash table,如果出现了,计算相邻距离,小于等于k则return true,否则更新hash table中元素的位置, + + +我用的sort + +``` +class Solution(object): + def containsNearbyDuplicate(self, nums, k): + """ + :type nums: List[int] + :type k: int + :rtype: bool + """ + if len(nums) < 2 : return False + lookup = {} + for i in range(len(nums)): + if nums[i] not in lookup: + lookup[nums[i]] = i + else: + if i - lookup[nums[i]] <= k : + return True + lookup[nums[i]] = i + return False +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/221._maximal_square.md b/docs/Leetcode_Solutions/Python/221._maximal_square.md new file mode 100644 index 000000000..3dd7b9a8c --- /dev/null +++ b/docs/Leetcode_Solutions/Python/221._maximal_square.md @@ -0,0 +1,78 @@ +###221. Maximal Square + + +题目: + + + +难度: +Medium + +tag: DP + + +递推公式,一开始想的很简单: + +dp[i][j] = dp[i-1][j-1] + 1 #如果dp[i-1][j-1]为1,dp[i-1][j]为1,dp[i][j-1]为1 + +很明显的错误,一旦遇到更大的方块就会有问题 + +然后看了hint,其实递推方程式是很有技巧的,左上角,左边,上面,相邻的三个部分最小的+1,当然,前提也是要这里dp[i][j] 为1,然后我们再会去看其他的部分。 + +看个例子 + +``` +原本的matrix DP + +1 0 1 0 0 1 0 1 0 0 +1 0 1 1 1 → 1 0 1 1 1 +1 1 1 1 1 1 1 1 2 2 +1 0 0 1 0 1 0 0 1 0 + +``` + +是非常make sense的,因为最小的必定包括了周边的1,然后再加1,否则如果是0的话那么就为0. + +而naïve的错误的递推公式是因为一个square考虑的部分是k * k的部分, k * k 部分都必定为1. + +而正确的递推公式 + + + dp[i][j] = min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1]) + 1 + +则完美的考虑了这一情况 + + +``` +class Solution(object): + def maximalSquare(self, matrix): + """ + :type matrix: List[List[str]] + :rtype: int + """ + dp = [] + for i in matrix: + tmp = [] + for j in i: + tmp.append(int(j)) + dp.append(tmp) + + row = len(dp) + col = len(dp[0]) if row else 0 + + + for i in range(1,row): + for j in range(1,col): + if dp[i][j] == 1: + dp[i][j] = min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1]) + 1 + + + maxv = 0 + for i in range(row): + for j in range(col): + if dp[i][j] > maxv: + maxv = dp[i][j] + return maxv * maxv +``` + + diff --git a/docs/Leetcode_Solutions/Python/222._count_complete_tree_nodes.md b/docs/Leetcode_Solutions/Python/222._count_complete_tree_nodes.md new file mode 100644 index 000000000..e1b6bede6 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/222._count_complete_tree_nodes.md @@ -0,0 +1,67 @@ +###222. Count Complete Tree Nodes + +题目: + + + +难度: +Medium + + +思路: + + +思路一: 超时,跟一般的树一样,递归的来数nodes数 + + + +``` +class Solution(object): + def countNodes(self, root): + """ + :type root: TreeNode + :rtype: int + """ + if root == None: + return 0 + if root.left == None and root.right == None: + return 1 + return 1 + self.countNodes(root.left) + self.countNodes(root.right) +``` + + +思路二:既然说了是 complete binary tree,那么必然有特性可用,complete binary tree的特性是除了最后一层,之前的就是perfect tree. + + +所以寻找左子树的最左边的高度和右子树的最右边的node高度,如果相同就是perfect tree,高度2^h - 1, 否则递归的来看左子树和右子树 + + +``` + +class Solution(object): + def countNodes(self, root): + """ + :type root: TreeNode + :rtype: int + """ + if root == None: + return 0 + + p, q = root,root + + leftHeight = 0 + rightHeight = 0 + + while p: + p = p.left + leftHeight += 1 + + while q: + q = q.right + rightHeight += 1 + + if leftHeight == rightHeight: + return (int)(math.pow(2,leftHeight) - 1) + else: + return 1 + self.countNodes(root.left) + self.countNodes(root.right) +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/223._rectangle_area.md b/docs/Leetcode_Solutions/Python/223._rectangle_area.md new file mode 100644 index 000000000..3edba1bc3 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/223._rectangle_area.md @@ -0,0 +1,50 @@ +###223. Rectangle Area + +题目: + + + +难度 : Easy + + +这道题是我瞎了狗眼,🐶,之前看错了,以为要求相交的部分,结果是求cover的部分,所以写的长|||||| + + +``` +class Solution(object): + def computeArea(self, A, B, C, D, E, F, G, H): + """ + :type A: int + :type B: int + :type C: int + :type D: int + :type E: int + :type F: int + :type G: int + :type H: int + :rtype: int + """ + return self.area(C - A, D - B) + self.area(H - F, G - E ) - self.area(self.interSect(A,C,E,G), self.interSect(B,D,F,H)) + + def area(self, w, h): + if w * h < 0: + return - w * h + return w * h + + + def interSect(self, A, C, E, G): + if E > C: + return 0 + elif G < A: + return 0 + elif E >= A and G <= C: + return G - E + elif A >= E and C <= G: + return C - A + elif G <= C and G >= A and E <= A: + return G - A + else: + return C - E + + +``` diff --git a/docs/Leetcode_Solutions/Python/224. Basic Calculator .md b/docs/Leetcode_Solutions/Python/224. Basic Calculator .md new file mode 100644 index 000000000..53683dc7e --- /dev/null +++ b/docs/Leetcode_Solutions/Python/224. Basic Calculator .md @@ -0,0 +1,108 @@ +### 224. Basic Calculator + + + +题目: + + +难度: +Medium + +思路: + +基本跟227一样,只是这里加了括号 + +瞄了一眼,基本上infix(中缀表达式)都是表达成postfix(后缀表达式)再来求值的。 +比如 A + B * C 写成 A B C * + + +| Infix Expression | Prefix Expression | Postfix Expression | +| ---------------- | ----------------- | ------------------ | +| A + B | + A B | A B + | +| A + B * C | + A * B C | A B C * + | + + + +infix 中缀转postfix 后缀还有专门的算法: + + + +1. Create an empty stack called opstack for keeping operators. Create an empty list for output. + +2. Convert the input infix string to a list by using the string method split. + +3. Scan the token list from left to right. + +4. - If the token is an operand, append it to the end of the output list. + - If the token is a left parenthesis, push it on the opstack. + - If the token is a right parenthesis, pop the opstack until the corresponding left parenthesis is removed. Append each operator to the end of the output list. + - If the token is an operator, *, /, +, or -, push it on the opstack. However, first remove any operators already on the opstack that have higher or equal precedence and append them to the output list. + +5. When the input expression has been completely processed, check the opstack. Any operators still on the stack can be removed and appended to the end of the output list. + + + +可以看到中缀转后缀一个重要的点是: 当我们把operator +-*/ 放到opstack上时候,我们需要考虑/看是否有之前的operator有更高或者相等的precedence,这个时候我们需要优先(计算)把它放到output list. + + + +参考 + + + + + +AC代码 + +``` +class Solution(object): + def calculate(self, s): + """ + :type s: str + :rtype: int + """ + def precedence(op): + if op == '*' or op == '/': + return 2 + else: + return 1 + + def cal(op, op1, op2): + if op == '*': + return op1 * op2 + elif op == '/': + return op1 / float(op2) + elif op == '+': + return op1 + op2 + else: + return op1 - op2 + + + opstack = [] + operands = [] + + # remove empty space and put operands and + idx = 0 + for i in range(idx, len(s)): + if s[i] in '+-*/': + operands.append(s[idx:i]) + while len(opstack) > 0 and precedence(s[i]) <= precedence(opstack[-1]) and len(operands) >= 2: + op = opstack.pop() + op2 = int(operands.pop()) + op1 = int(operands.pop()) + res = cal(op, op1, op2) + operands.append(res) + opstack.append(s[i]) + idx = i + 1 + operands.append(s[idx:]) + + while opstack: + op = opstack.pop() + op2 = int(operands.pop()) + op1 = int(operands.pop()) + res = cal(op, op1, op2) + operands.append(res) + + return int(operands[0]) + +``` + diff --git a/docs/Leetcode_Solutions/Python/225._implement_stack_using_queues.md b/docs/Leetcode_Solutions/Python/225._implement_stack_using_queues.md new file mode 100644 index 000000000..10a1ac200 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/225._implement_stack_using_queues.md @@ -0,0 +1,53 @@ +###225. Implement Stack using Queues + +题目: + + + + +难度: + +Easy + + +又到了作弊神预言Python的强项 + + +``` +class Stack(object): + def __init__(self): + """ + initialize your data structure here. + """ + self.lst = [] + + + def push(self, x): + """ + :type x: int + :rtype: nothing + """ + self.lst.append(x) + + + def pop(self): + """ + :rtype: nothing + """ + self.lst.remove(self.lst[-1]) + + + def top(self): + """ + :rtype: int + """ + return self.lst[-1] + + def empty(self): + """ + :rtype: bool + """ + return self.lst == [] + +``` + diff --git a/docs/Leetcode_Solutions/Python/226._invert_binary_tree.md b/docs/Leetcode_Solutions/Python/226._invert_binary_tree.md new file mode 100644 index 000000000..b66918814 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/226._invert_binary_tree.md @@ -0,0 +1,33 @@ +###226. Invert Binary Tree + +题目: + + + +难度: + +Easy + +然后查了一下,有更简单的写法 + + +``` + +class Solution(object): + def invertTree(self, root): + """ + :type root: TreeNode + :rtype: TreeNode + """ + if root == None: return None + elif root.left == None and root.right == None: return root + else: + leftNode = root.left + rightNode = root.right + root.right = leftNode + root.left = rightNode + self.invertTree(root.left) + self.invertTree(root.right) + return root +``` + diff --git a/docs/Leetcode_Solutions/Python/227._basic_calculator_ii.md b/docs/Leetcode_Solutions/Python/227._basic_calculator_ii.md new file mode 100644 index 000000000..ac5ea4eeb --- /dev/null +++ b/docs/Leetcode_Solutions/Python/227._basic_calculator_ii.md @@ -0,0 +1,108 @@ +###227. Basic Calculator II + + + +题目: + + + +难度: +Medium + +思路: + +瞄了一眼,基本上infix(中缀表达式)都是表达成postfix(后缀表达式)再来求值的。 +比如 A + B * C 写成 A B C * + + + +| Infix Expression | Prefix Expression | Postfix Expression | +| ---------------- | ----------------- | ------------------ | +| A + B | + A B | A B + | +| A + B * C | + A * B C | A B C * + | + + +infix 中缀转postfix 后缀还有专门的算法: + + + +1. Create an empty stack called opstack for keeping operators. Create an empty list for output. + +2. Convert the input infix string to a list by using the string method split. + +3. Scan the token list from left to right. + +4. - If the token is an operand, append it to the end of the output list. + - If the token is a left parenthesis, push it on the opstack. + - If the token is a right parenthesis, pop the opstack until the corresponding left parenthesis is removed. Append each operator to the end of the output list. + - If the token is an operator, *, /, +, or -, push it on the opstack. However, first remove any operators already on the opstack that have higher or equal precedence and append them to the output list. + +5. When the input expression has been completely processed, check the opstack. Any operators still on the stack can be removed and appended to the end of the output list. + + + +可以看到中缀转后缀一个重要的点是: 当我们把operator +-*/ 放到opstack上时候,我们需要考虑/看是否有之前的operator有更高或者相等的precedence,这个时候我们需要优先(计算)把它放到output list. + + + + +参考 + + + + + +AC代码 + +``` +class Solution(object): + def calculate(self, s): + """ + :type s: str + :rtype: int + """ + def precedence(op): + if op == '*' or op == '/': + return 2 + else: + return 1 + + def cal(op, op1, op2): + if op == '*': + return op1 * op2 + elif op == '/': + return op1 / float(op2) + elif op == '+': + return op1 + op2 + else: + return op1 - op2 + + + opstack = [] + operands = [] + + # remove empty space and put operands and + idx = 0 + for i in range(idx, len(s)): + if s[i] in '+-*/': + operands.append(s[idx:i]) + while len(opstack) > 0 and precedence(s[i]) <= precedence(opstack[-1]) and len(operands) >= 2: + op = opstack.pop() + op2 = int(operands.pop()) + op1 = int(operands.pop()) + res = cal(op, op1, op2) + operands.append(res) + opstack.append(s[i]) + idx = i + 1 + operands.append(s[idx:]) + + while opstack: + op = opstack.pop() + op2 = int(operands.pop()) + op1 = int(operands.pop()) + res = cal(op, op1, op2) + operands.append(res) + + return int(operands[0]) + +``` + diff --git a/docs/Leetcode_Solutions/Python/228._summary_ranges.md b/docs/Leetcode_Solutions/Python/228._summary_ranges.md new file mode 100644 index 000000000..ce9dce0f9 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/228._summary_ranges.md @@ -0,0 +1,58 @@ +### 228. Summary Ranges + +题目: + + + +难度: + +Medium + + +Just collect the ranges, then format and return them. + +```python +class Solution(object): + def summaryRanges(self, nums): + """ + :type nums: List[int] + :rtype: List[str] + """ + ranges = [] + for i in nums: + if not ranges or i > ranges[-1][-1] + 1: + ranges += [], + ranges[-1][1:] = i, + return ['->'.join(map(str, r)) for r in ranges] +``` +About the commas :-) + +``` +ranges += [], +r[1:] = n, +``` +Why the trailing commas? Because it turns the right hand side into a tuple and I get the same effects as these more common alternatives: +``` +ranges += [[]] +or +ranges.append([]) + +r[1:] = [n] +``` +Without the comma, … + +- ranges += [] wouldn’t add [] itself but only its elements, i.e., nothing. +- r[1:] = n wouldn’t work, because my n is not an iterable. + +Why do it this way instead of the more common alternatives I showed above? Because it’s shorter and faster (according to tests I did a while back). + +写到这里可能又有疑问了🤔️,为什么不可以直接写```ranges[-1][1] = i```呢,当然是会报```IndexError: list assignment index out of range```错误啦,那为什么```ranges[-1][1:] = i,```可以呢? + +简单来说 + +L1=L 与 L1=L[:] +- L1和L 都是对同一个对象的引用(所谓绑定的意思)。 +- L[:] 是生成了一个和L不同的新的对象,L1 变为了L[:] 这个对象的引用。 + + +参考[stefan](https://leetcode.com/problems/summary-ranges/discuss/63193) diff --git a/docs/Leetcode_Solutions/Python/229._majority_element_ii.md b/docs/Leetcode_Solutions/Python/229._majority_element_ii.md new file mode 100644 index 000000000..061c03441 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/229._majority_element_ii.md @@ -0,0 +1,62 @@ +###229. Majority Element II + + + +题目: + + + +难度: +Medium + +思路: + +majority element是两两比较扔掉不同的元素,然后最后会留下一个。 + +这里变成三三比较来扔东西, find all elements that appear more than ⌊ n/3 ⌋ times,所以最多可以有两个majority element ii. + + +最后再加一个比较来确认这些函数是majority element + +``` +class Solution(object): + def majorityElement(self, nums): + """ + :type nums: List[int] + :rtype: List[int] + """ + cnt1 = 0 + cnt2 = 0 + maj1 = 0 + maj2 = 0 + for num in nums: + if maj1 == num: + cnt1 += 1 + elif maj2 == num: + cnt2 += 1 + elif cnt1 == 0: + maj1 = num + cnt1 += 1 + elif cnt2 == 0: + maj2 = num + cnt2 += 1 + else: + cnt1 -= 1 + cnt2 -= 1 + + cnt1 = 0 + cnt2 = 0 + + n = len(nums) + res = [] + for num in nums: + if maj1 == num: + cnt1 += 1 + elif maj2 == num: + cnt2 += 1 + if cnt1 > n/3: + res.append(maj1) + if cnt2 > n/3: + res.append(maj2) + return res +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/230._kth_smallest_element_in_a_bst.md b/docs/Leetcode_Solutions/Python/230._kth_smallest_element_in_a_bst.md new file mode 100644 index 000000000..b51fc7a07 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/230._kth_smallest_element_in_a_bst.md @@ -0,0 +1,48 @@ +### 230. Kth Smallest Element in a BST + +题目: + + + +难度: +Medium + + +跟昨天做的一道题类似,一上来就走取巧之路。 + +InOrder排序,输出,当然也完全可以用昨天的binary tree iterator,入stack,出stack,直到输出第k位 + + +```python +class Solution(object): + def kthSmallest(self, root, k): + """ + :type root: TreeNode + :type k: int + :rtype: int + """ + self.root = root + self.lst = [] + self.inOrder(root) + return self.lst[k-1] + + def inOrder(self, root): + if root == None: + return + self.inOrder(root.left) + self.lst.append(root.val) + self.inOrder(root.right) +``` + + +现在看到kth 就条件反射的想用divide & conquer, 扫root的左子树看nodes量,如果nodes数量是k-1,那么node就刚好是第k个,如果大于k > 左子树数量,扫右子树,同时更新root为root.right。 + +看到的言论: + +> If we can change the BST node structure, We can add a new Integer to mark the number of element in the left sub-tree. + +when the node is not null. + +- if k == node.leftNum + 1, return node +- if k > node.leftNum + 1, make k -= node.leftNum + 1, and then node = node.right +- otherwise, node = node.left diff --git a/docs/Leetcode_Solutions/Python/231. _Power_of_Two.md b/docs/Leetcode_Solutions/Python/231. _Power_of_Two.md new file mode 100644 index 000000000..c90024d2e --- /dev/null +++ b/docs/Leetcode_Solutions/Python/231. _Power_of_Two.md @@ -0,0 +1,89 @@ +### 231. Power of Two + + + +题目: + + + +难度: + +Easy + + + +思路: + + + +power of two 那是这个数字的binary 表示一定只有一个1 + +套用以前的代码[leetcode191](https://github.com/Lisanaaa/thinking_in_lc/blob/master/191._number_of_1_bits.md) + +这样会超时 + +``` +class Solution(object): +    def isPowerOfTwo(self, n): # 此法超时 +        """ + :type n: int + :rtype: bool + """ + cnt = 0 + while n != 0: + n &= n - 1 + cnt += 1 + return cnt == 1 +``` + + + +跟power of three一样递归,可以AC + + + +```python +class Solution(object): + def isPowerOfTwo(self, n): + """ + :type n: int + :rtype: bool + """ + if n <= 0: + return False + if n == 1: + return True + if n % 2 == 0: + return self.isPowerOfTwo(n/2) + return False + +``` + + + + + + + +也是有[算法的wikipedia page](https://en.wikipedia.org/wiki/Power_of_two#Fast_algorithm_to_check_if_a_positive_number_is_a_power_of_two) + +> The [binary representation](https://en.wikipedia.org/wiki/Binary_numeral_system) of integers makes it possible to apply a very fast test to determine whether a given [positive integer](https://en.wikipedia.org/wiki/Positive_integer) *x* is a power of two: +> +> positive *x* is a power of two ⇔ (*x* & (*x* − 1)) is equal to zero. + + + +注意特殊case 0的处理 + +```python +class Solution(object): + def isPowerOfTwo(self, n): + """ + :type n: int + :rtype: bool + """ + return n & (n-1) == 0 if n != 0 else False +``` + + + diff --git a/docs/Leetcode_Solutions/Python/232._implement_queue_using_stacks.md b/docs/Leetcode_Solutions/Python/232._implement_queue_using_stacks.md new file mode 100644 index 000000000..53647fc0e --- /dev/null +++ b/docs/Leetcode_Solutions/Python/232._implement_queue_using_stacks.md @@ -0,0 +1,51 @@ +###232. Implement Queue using Stacks + +题目: + + + +难度: +Easy + +这个题没有乖乖听话,不过因为当年做过用两个stack来模拟queue + +然后不得不说,我Python大法实在太厉害了 + +这功能强大的,我简直要啧啧啧 + +``` +class Queue(object): + def __init__(self): + """ + initialize your data structure here. + """ + self.lst = [] + + + def push(self, x): + """ + :type x: int + :rtype: nothing + """ + self.lst.append(x) + + + def pop(self): + """ + :rtype: nothing + """ + del self.lst[0] + + def peek(self): + """ + :rtype: int + """ + return self.lst[0] + + + def empty(self): + """ + :rtype: bool + """ + return self.lst == [] +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/234._palindrome_linked_list.md b/docs/Leetcode_Solutions/Python/234._palindrome_linked_list.md new file mode 100644 index 000000000..0d92492b0 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/234._palindrome_linked_list.md @@ -0,0 +1,94 @@ +### 234. Palindrome Linked List + +题目: + + + +难度: +Easy + +蠢了一下, + +思路是:“先翻转整个链表(in-place),然后和之前的链表比较”,但是这样原链表都变了,肯定错。 + +如果新建一个链表,然后改造成原来链表的翻转链表,还是可行的,但是空间复杂度就是O(n)了。那还不如直接把List中元素拷贝到数组中直接比较,ac代码如下: + + +```python +class Solution(object): + def isPalindrome(self, head): + """ + :type head: ListNode + :rtype: bool + """ + vals = [] + while head: + vals += head.val, + head = head.next + return vals == vals[::-1] +``` + +这道题并不能算Easy吧: + +思路二: +要想实现O(1)的空间复杂度,可以找到中间的节点,把linked list拆成两个部分,后半部分linkedlist reverse,然后比较两个linked list值是否相同,看例子: + + +``` +1 -> 3 -> 1 拆成 1 和 1 + +1 -> 3 -> 5 ->5 -> 3 -> 1 拆成 1-> 3 -> 5 和 5 -> 3 -> 1 + +``` + +可以使用快慢指针来找到中间的节点。 + + +```python +class Solution(object): + def isPalindrome(self, head): + """ + :type head: ListNode + :rtype: bool + """ + fast = slow = head + # 找到中间节点 + while fast and fast.next: + fast = fast.next.next + slow = slow.next + # 翻转后半部分 + prev = None + while slow: + tmp = slow.next + slow.next = prev + prev = slow + slow = tmp + # 比较前后两部分 + while prev: # while prev and head: + if prev.val != head.val: + return False + prev = prev.next + head = head.next + return True +``` + +给个最终状态的例子: +``` + + fast tmp + None prev slow + ^ ^ ^ + | | | +1 --> 2 --> 3 <-- 2 <-- 1 None + +``` +但是注意最后的while prev不能换成while fast, 因为这是总节点数为奇数的情况,如果是偶数情况就不一样了,如下: +``` +                         tmp +                          slow    + None prev fast + ^ ^ ^ + | | | +1 --> 2 --> 2 <-- 1 None + +``` diff --git a/docs/Leetcode_Solutions/Python/235._lowest_common_ancestor_of_a_binary_search_tree.md b/docs/Leetcode_Solutions/Python/235._lowest_common_ancestor_of_a_binary_search_tree.md new file mode 100644 index 000000000..62c1e09a5 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/235._lowest_common_ancestor_of_a_binary_search_tree.md @@ -0,0 +1,33 @@ +###235. Lowest Common Ancestor of a Binary Search Tree + +题目: + + + +难度 : Easy + +- 两个node,一个大于root,一个小于root,那么必定root两边,共同的ancestor是root,同时再考虑同为空的状况 +- 两个node,都比node小,到左边去寻找,那么先找到那个必定是common ancestor +- 两个node,都比node大,类似.... + + +AC解法 + +``` +class Solution(object): + def lowestCommonAncestor(self, root, p, q): + """ + :type root: TreeNode + :type p: TreeNode + :type q: TreeNode + :rtype: TreeNode + """ + if root == None or root == p or root == q: + return root + elif p.val < root.val < q.val or q.val < root.val < p.val : + return root + elif p.val < root.val and q.val < root.val: + return self.lowestCommonAncestor(root.left,p,q) + else: + return self.lowestCommonAncestor(root.right,p,q) +``` diff --git a/docs/Leetcode_Solutions/Python/236._lowest_common_ancestor_of_a_binary_tree.md b/docs/Leetcode_Solutions/Python/236._lowest_common_ancestor_of_a_binary_tree.md new file mode 100644 index 000000000..271c462ad --- /dev/null +++ b/docs/Leetcode_Solutions/Python/236._lowest_common_ancestor_of_a_binary_tree.md @@ -0,0 +1,104 @@ + +###236. Lowest Common Ancestor of a Binary Tree + + +题目: + + + +难度: + +Medium + + + +思路 + +求root到node的path,然后对比path,最后一个想同的点就是lowest common ancestor + + + +好开心,AC了 + + +但是我根本不能在Runtime Distribution 上找到我,因为太慢了|||| + + + + +``` + +class Solution(object): + def lowestCommonAncestor(self, root, p, q): + """ + :type root: TreeNode + :type p: TreeNode + :type q: TreeNode + :rtype: TreeNode + """ + pathP = self.pathTo(root,p) + pathQ = self.pathTo(root,q) + n = min(len(pathP), len(pathQ)) + + ans = root + for i in range(n): + if pathP[i] == pathQ[i]: + ans = pathP[i] + else: + break + return ans + + + def pathTo(self, root, goal): + # goal node ,path + if root == None: return root + stack = [(root, [root])] + while stack: + node, path = stack.pop() + if node == goal: + return path + if node.left: stack.append((node.left, path + [node.left])) + if node.right: stack.append((node.right, path + [node.right])) + +``` + +递归解法,之所以我没有用递归因为有疑惑, BASE CASE 很容易想到,root 是none,或者p == root 或者q == root,那么LCA就是root,如果两个node一个在左边,一个在右边,那么LCA也是root,但是如果一个是6,另一个是4则有一点疑惑,但其实是没有问题的,因为这个时候给的总是他们的共同root,所以这个递归解法是没错的,总是想到递归是在那个状况下递归 + + +``` + _______3______ + / \ + ___5__ ___1__ + / \ / \ + 6 _2 0 8 + / \ + 7 4 +``` + +AC代码 + + + +``` +class Solution(object): + def lowestCommonAncestor(self, root, p, q): + """ + :type root: TreeNode + :type p: TreeNode + :type q: TreeNode + :rtype: TreeNode + """ + if root == None: + return None + + if p == root or q == root: + return root + + left = self.lowestCommonAncestor(self.left,p,q) + right = self.lowestCommonAncestor(self.right,p,q) + + if left and right: + return root + + return left if left is None else right +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/237._delete_node_in_a_linked_list.md b/docs/Leetcode_Solutions/Python/237._delete_node_in_a_linked_list.md new file mode 100644 index 000000000..d401e090d --- /dev/null +++ b/docs/Leetcode_Solutions/Python/237._delete_node_in_a_linked_list.md @@ -0,0 +1,52 @@ +### 237. Delete Node in a Linked List + +题目: + + + +难度: +Easy + + + +这道题,第一感觉,像删链表一样来删,把所有的node val前移一个,但是有个问题,为什么tail那个node还是存在?哼(ˉ(∞)ˉ)唧.. + +已经被解答: + + + + + +另外一个O(1)的办法更好,把后一个node的val移到待删这个节点,并且把node.next = node.next.next + +题目说了不会删最后一个点,所以node.next.next一定存在,所以直接让node的val等于它next的val,然后让node的next指向它的next的next,举个例子: + 1->2->3->4->5->None,要删除第四个节点,就让4变成5,然后让第四个节点指向第五个节点的next, +这样原来的第四个节点就不存在了,虽然原来的第五个节点仍然存在且指向None,变成了1->2->3->5->None-<5 + + + +```python +O(1)时间 +class Solution(object): + def deleteNode(self, node): + """ + :type node: ListNode + :rtype: void Do not return anything, modify node in-place instead. + """ + node.val = node.next.val + node.next = node.next.next +``` +```python +O(n)时间 +class Solution(object): + def deleteNode(self, node): + """ + :type node: ListNode + :rtype: void Do not return anything, modify node in-place instead. + """ + while node.next: + node.val = node.next.val + prev, node = node, node.next + # clear reference to tail + prev.next = None +``` diff --git a/docs/Leetcode_Solutions/Python/238._product_of_array_except_self.md b/docs/Leetcode_Solutions/Python/238._product_of_array_except_self.md new file mode 100644 index 000000000..00a883f6b --- /dev/null +++ b/docs/Leetcode_Solutions/Python/238._product_of_array_except_self.md @@ -0,0 +1,100 @@ +###238. Product of Array Except Self + +题目: + + + +难度: + +Medium + + +不使用division 并且O(n) + + +想到的算法 O(n^2) + +会超时 + + +``` +class Solution(object): + def productExceptSelf(self,nums): + """ + :type nums: List[int] + :rtype: List[int] + """ + lst = [] + for i in range(len(nums)): + lst.append(self.productWithoutI(nums,i)) + return lst + + + def productWithoutI(self,nums,i): + product = 1 + for j in range(len(nums)): + if j != i: + product *= nums[j] + return product +``` + +如果用除法,也会有问题,如果有0出现也会变繁琐。 + +谷歌一下: + + +解法还是很棒的 + + output[i] = { i 前面的数的乘积} X { i 后面的数的乘积} + + +``` +class Solution(object): + def productExceptSelf(self,nums): + """ + :type nums: List[int] + :rtype: List[int] + """ + if nums == [] : return [] + lft = [1] + rgt = [1] + product = 1 + for i in range(1,len(nums)): + product *= nums[i-1] + lft.append(product) + product = 1 + for i in reversed(range(1,len(nums))): + product *= nums[i] + rgt.append(product) + rgt.reverse() + result = [] + for i in range(len(nums)): + result.append(lft[i]*rgt[i]) + return result + +``` + + +空间O(n),再看到满足要求的“标准解法” + + +``` +class Solution(object): + def productExceptSelf(self,nums): + """ + :type nums: List[int] + :rtype: List[int] + """ + if nums == [] : return [] + size = len(nums) + output = [1] * size + left = 1 + for x in range(size-1): + left *= nums[x] + output[x+1] *= left + right = 1 + for x in range(size - 1, 0, -1): + right *= nums[x] + output[x-1] *= right + return output +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/240._search_a_2d_matrix_ii.md b/docs/Leetcode_Solutions/Python/240._search_a_2d_matrix_ii.md new file mode 100644 index 000000000..545732ebc --- /dev/null +++ b/docs/Leetcode_Solutions/Python/240._search_a_2d_matrix_ii.md @@ -0,0 +1,63 @@ +### 240. Search a 2D Matrix II + + + +题目: + + + +难度: +Medium + +思路: + +每行,每列都是sorted + +但是比较好的策略是从右上角开始搜索,比如这样: + +``` +matrix = [ + [1, 4, 7, 11, 15], + [2, 5, 8, 12, 19], + [3, 6, 9, 16, 22], + [10, 13, 14, 17, 24], + [18, 21, 23, 26, 30] +] + +m, n = 0, col - 1 +更新策略: + matrix[m][n] < target: 那么这一行到从左走到此都会小于target,row+1 ,往下走 + matrix[m][n] > target: 那么这一列往下走都会大于target,col - 1,往左走 + 否则找到 +``` + +时间复杂度O(max(M,N)),因为每次都会往下或者往左走 + + +用的算法是Saddleback + + + +```python +class Solution(object): + def searchMatrix(self, matrix, target): + """ + :type matrix: List[List[int]] + :type target: int + :rtype: bool + """ + if not matrix: + return False + row = len(matrix) + col = len(matrix[0]) if row else 0 + m, n = 0, col - 1 + while m < row and n >= 0: + if matrix[m][n] < target: + m += 1 + elif matrix[m][n] > target: + n -= 1 + else: + return True + return False + +``` diff --git a/docs/Leetcode_Solutions/Python/242._valid_anagram.md b/docs/Leetcode_Solutions/Python/242._valid_anagram.md new file mode 100644 index 000000000..46d8cd269 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/242._valid_anagram.md @@ -0,0 +1,61 @@ +### 242. Valid Anagram + +题目: + + + +难度 : Easy + + +一行瞬秒: + +```python +class Solution(object): + def isAnagram(self, s, t): + """ + :type s: str + :type t: str + :rtype: bool + """ + return collections.Counter(s) == collections.Counter(t) +``` + +```python +class Solution(object): + def isAnagram(self, s, t): + """ + :type s: str + :type t: str + :rtype: bool + """ + return sorted(s) == sorted(t) + +``` + + +用字数统计,因为只可能是26个字母 + + +``` + +class Solution(object): + def isAnagram(self, s, t): + """ + :type s: str + :type t: str + :rtype: bool + """ + if len(s) != len(t): + return False + + charCnt = [0] * 26 + + for i in range(len(s)): + charCnt[ord(s[i]) - 97] += 1 + charCnt[ord(t[i]) - 97] -= 1 + + for cnt in charCnt: + if cnt != 0: + return False + return True +``` diff --git a/docs/Leetcode_Solutions/Python/252. Meeting Rooms.md b/docs/Leetcode_Solutions/Python/252. Meeting Rooms.md new file mode 100644 index 000000000..c84dee953 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/252. Meeting Rooms.md @@ -0,0 +1,47 @@ +### 252. Meeting Rooms + + + +题目: + + + + +难度 : Easy + + + +思路: + +学了一下如何根据attribute 来sort object `intervals.sort(key = lambda interval : interval.start)` + + + +AC 代码 + +``` +# Definition for an interval. +# class Interval(object): +# def __init__(self, s=0, e=0): +# self.start = s +# self.end = e + +class Solution(object): + def canAttendMeetings(self, intervals): + """ + :type intervals: List[Interval] + :rtype: bool + """ + n = len(intervals) + if n < 2 : return True + intervals.sort(key = lambda interval : interval.start) + for i in range(1,n): + if intervals[i].start < intervals[i-1].end: + return False + return True +``` + + + + + diff --git a/docs/Leetcode_Solutions/Python/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md b/docs/Leetcode_Solutions/Python/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md new file mode 100644 index 000000000..dfe1f7039 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md @@ -0,0 +1,72 @@ +### 255. Verify Preorder Sequence in Binary Search Tree + +题目: + + + +难度: + +Medium + + +思路: + +这道题让给了我们一个一维数组,让我们验证其是否为一个二叉搜索树的先序遍历出的顺序,我们都知道二叉搜索树的性质是左<根<右,如果用中序遍历得到的结果就是有序数组,而先序遍历的结果就不是有序数组了,但是难道一点规律都没有了吗,其实规律还是有的,根据二叉搜索树的性质,当前节点的值一定大于其左子树中任何一个节点值,而且其右子树中的任何一个节点值都不能小于当前节点值,那么我们可以用这个性质来验证,举个例子,比如下面这棵二叉搜索树: +``` + 10 + / \ + 5 12 + / \ + 2 6 + + preorder:[10, 5, 2, 6, 12] +``` + +如这个例子,我们先设一个最小值min_num,然后遍历数组,如果当前值小于这个最小值min_num,返回false,对于根节点,我们将其压入栈中,然后往后遍历,如果遇到的数字比栈顶元素小,说明是其左子树的点,继续压入栈中,直到遇到的数字比栈顶元素大,那么就是右边的值了,我们需要找到是哪个节点的右子树,所以我们更新low值并删掉栈顶元素,然后继续和下一个栈顶元素比较,如果还是大于,则继续更新low值和删掉栈顶,直到栈为空或者当前栈顶元素大于当前值停止,压入当前值,这样如果遍历完整个数组之前都没有返回false的话,最后返回true即可 + + +参考[Ethan Li 的技术专栏](https://segmentfault.com/a/1190000003874375) + +O(n) time, O(n) space +```python +class Solution(object): + def verifyPreorder(self, preorder): + """ + :type preorder: List[int] + :rtype: bool + """ + stack = [] + min_num = -1 << 31 # 初始化最小值为最小整数 + for x in preorder: + if x < min_num: # 违反最小值限定则是无效的 + return False + while stack and x > stack[-1]: # 将路径中所有小于当前的数pop出来并更新最小值 + min_num = stack.pop() + stack.append(x) # 将当前值push进去 + return True +``` + +### Follow up: +O(n) time, O(1) space + +we realize that the preorder array can be reused as the stack thus achieve O(1) extra space, since the scanned items of preorder array is always more than or equal to the length of the stack. +```python +class Solution(object): + def verifyPreorder(self, preorder): + """ + :type preorder: List[int] + :rtype: bool + """ + # stack = preorder[:i], reuse preorder as stack + min_num = -1 << 31 + i = 0 + for x in preorder: + if x < min_num: + return False + while i > 0 and x > preorder[i - 1]: + min_num = preorder[i - 1] + i -= 1 + preorder[i] = x + i += 1 + return True +``` diff --git a/docs/Leetcode_Solutions/Python/256. Paint House.md b/docs/Leetcode_Solutions/Python/256. Paint House.md new file mode 100644 index 000000000..21576f90a --- /dev/null +++ b/docs/Leetcode_Solutions/Python/256. Paint House.md @@ -0,0 +1,57 @@ +### 256. Paint House + +题目: + + +难度: +Medium + + + +其实这个题目有实际意义诶,至少我的故乡?在要申请啥东西的时候就把街上的房子全刷了。 + +然后这个是相邻的房子不同色。 + + + +其实我觉得paint fense更难一点 + + + +思路: + +数组 dp\[x][3] 代表第x个房子paint r/g/b的值 + + + +AC代码 + +``` +class Solution(object): + def minCost(self, costs): + """ + :type costs: List[List[int]] + :rtype: int + """ + m = len(costs) + if m == 0 : return 0 + elif m == 1 : return min(costs[0][0], costs[0][1],costs[0][2]) + else: + n = 3 if m else 0 + dp = [[0 for i in range(3)] for j in range(m)] + + dp[0] = costs[0] + + + for i in range(1,m): + dp[i][0] = min(dp[i-1][1],dp[i-1][2]) + costs[i][0] + dp[i][1] = min(dp[i-1][0],dp[i-1][2]) + costs[i][1] + dp[i][2] = min(dp[i-1][0],dp[i-1][1]) + costs[i][2] + return min(dp[m-1][0], dp[m-1][1], dp[m-1][2]) + +``` + + + + + diff --git a/docs/Leetcode_Solutions/Python/257._binary_tree_paths.md b/docs/Leetcode_Solutions/Python/257._binary_tree_paths.md new file mode 100644 index 000000000..c0fdea6ed --- /dev/null +++ b/docs/Leetcode_Solutions/Python/257._binary_tree_paths.md @@ -0,0 +1,45 @@ +###257. Binary Tree Paths + +题目: + + + + +难度: + +Easy + + +Tag : tree, DFS + +类似的题目是Path Sum Ⅱ + + +第一眼看起来不像easy题目,然后堵了一下自己写的Path Sum Ⅱ自己的解答 + +同一种花样 + +``` +class Solution: + # @param {TreeNode} root + # @return {string[]} + def binaryTreePaths(self, root): + if root == None: return [] + result = [] + self.auxTreePaths(root,result,"") + return result + + + def auxTreePaths(self,root,result,curStr): + if root == None: + return + curStr += str(root.val) + if root.left == None and root.right == None: + result.append(curStr) + if root.left: + self.auxTreePaths(root.left,result,curStr + "->") + if root.right: + self.auxTreePaths(root.right,result,curStr + "->") + +``` + diff --git a/docs/Leetcode_Solutions/Python/258_ Add_Digits.md b/docs/Leetcode_Solutions/Python/258_ Add_Digits.md new file mode 100644 index 000000000..2fa72406a --- /dev/null +++ b/docs/Leetcode_Solutions/Python/258_ Add_Digits.md @@ -0,0 +1,34 @@ +### 258. Add Digits + +题目: + + + +难度: + +Easy + + +思路 + +这就简单的一p了。。 + + +```python +class Solution(object): + def addDigits(self, num): + """ + :type num: int + :rtype: int + """ + while num / 10 >= 1: + tmp = 0 + while num / 10 >= 1: + tmp += num % 10 + num /= 10 + tmp += num % 10 + num = tmp + return num +``` + + diff --git a/docs/Leetcode_Solutions/Python/261. Graph Valid Tree.md b/docs/Leetcode_Solutions/Python/261. Graph Valid Tree.md new file mode 100644 index 000000000..1e309007a --- /dev/null +++ b/docs/Leetcode_Solutions/Python/261. Graph Valid Tree.md @@ -0,0 +1,69 @@ +### 261. Graph Valid Tree + + + +题目: + + + + +难度 : Medium + + + +思路: + +graph 为 tree 两个条件: + +- 这个图是connected +- 没有cycle + + + +偷懒AC代码,直接在323题,Number of Connected Components in an Undirected Graph上改的AC代码: + + + +``` +class Solution(object): + def validTree(self, n, edges): + """ + :type n: int + :type edges: List[List[int]] + :rtype: bool + """ + def find(x): + if uf[x] != x: + uf[x] = find(uf[x]) + return uf[x] + + def union(x,y): + xRoot = find(x) + yRoot = find(y) + uf[xRoot] = yRoot + + uf = [i for i in range(n)] + + for node1, node2 in edges: + # cycle exists + if find(node1) == find(node2): + print 'ha ' + return False + else: + union(node1, node2) + + res = set() + for i in range(n): + res.add(find(i)) + + return len(res) == 1 +``` + + + + + + + + + diff --git a/docs/Leetcode_Solutions/Python/263._ugly_number.md b/docs/Leetcode_Solutions/Python/263._ugly_number.md new file mode 100644 index 000000000..730b0bdde --- /dev/null +++ b/docs/Leetcode_Solutions/Python/263._ugly_number.md @@ -0,0 +1,38 @@ +###263. Ugly Number + + + +题目: + + + +难度: +Easy + + +思路: + +因为其prime factors 只包括 2, 3, 5,所以比如如果能被2 整除, n = n / 2, 直到不能被2整除,然后同样对3,5检验,如果最终结果为1,那么就是ugly number,否则不过关 + + +注意一下边界条件,当num为0的时候,return一下False + +``` +class Solution(object): + def isUgly(self, num): + """ + :type num: int + :rtype: bool + """ + if num == 0 : return False + while num % 2 == 0: + num = num / 2 + while num % 3 == 0: + num = num / 3 + while num % 5 == 0: + num = num / 5 + if num == 1: + return True + return False +``` + diff --git a/docs/Leetcode_Solutions/Python/264._ugly_number_ii.md b/docs/Leetcode_Solutions/Python/264._ugly_number_ii.md new file mode 100644 index 000000000..ba1546b9e --- /dev/null +++ b/docs/Leetcode_Solutions/Python/264._ugly_number_ii.md @@ -0,0 +1,140 @@ +###264. Ugly Number II + + + +题目: + + + +难度: +Medium + + +思路: + +暴力算法一定会超时 + + + + +先看一个非常🐂的帖子,当我知道python 除了有list之外还有collections就已经被刷新了一次了,然后数据结构 x 数据结构,就展示了数据结构的魅力 + + + + +看一下deque + rotate: + + +``` +import collections +a = collections.deque() +a.append(2) +a.append(5) +a.append(7) +a.append(9) #a deque([2, 5, 7, 9]) + +import bisect +idx = bisect.bisect_left(a,3) #1 +a.rotate(-idx) #deque([5, 7, 9, 2]) + +a.appendleft(3) #deque([3, 5, 7, 9, 2]) + +a.rotate(idx) # deque([2, 3, 5, 7, 9]) +``` + +这个rotate -是往左边rotate,看官网的介绍. + +>Rotate the deque n steps to the right. If n is negative, rotate to the left. Rotating one step to the right is equivalent to: d.appendleft(d.pop()). + +所以这样造成可以🐂的数据结构 + +用这个微调之后的fasttable来解决问题 + + +``` +import collections +import bisect + +class FastTable: + + def __init__(self): + self.__deque = collections.deque() + + def __len__(self): + return len(self.__deque) + + def head(self): + return self.__deque.popleft() + + def tail(self): + return self.__deque.pop() + + def peek(self): + return self.__deque[-1] + + def insert(self, obj): + if obj in self.__deque: + return + index = bisect.bisect_left(self.__deque, obj) + self.__deque.rotate(-index) + self.__deque.appendleft(obj) + self.__deque.rotate(index) + +class Solution(object): + + def nthUglyNumber(self, n): + """ + :type n: int + :rtype: int + """ + q = FastTable() + q.insert(1) + while n > 0: + x = q.head() + q.insert(2*x) + q.insert(3*x) + q.insert(5*x) + n -= 1 + return x +``` + + +还可以优化: +根据页面hint 来做的 + + +``` +class Solution(object): + def nthUglyNumber(self, n): + """ + :type n: int + :rtype: int + """ + if n == 1: + return 1 + else: + import collections + q2 = collections.deque() + q3 = collections.deque() + q5 = collections.deque() + q2.append(2) + q3.append(3) + q5.append(5) + while n > 1: + x = min(q2[0],q3[0],q5[0]) + if x == q2[0]: + x = q2.popleft() + q2.append(2*x) + q3.append(3*x) + q5.append(5*x) + elif x == q3[0]: + x = q3.popleft() + q3.append(3*x) + q5.append(5*x) + else: + x = q5.popleft() + q5.append(5*x) + n -= 1 + return x +``` + diff --git a/docs/Leetcode_Solutions/Python/265. Paint House II.md b/docs/Leetcode_Solutions/Python/265. Paint House II.md new file mode 100644 index 000000000..c9dfbc20f --- /dev/null +++ b/docs/Leetcode_Solutions/Python/265. Paint House II.md @@ -0,0 +1,60 @@ +### 265. Paint House II + + + +题目: + + +难度: + +Hard + + + +思路: + +感觉不像hard 题,知道为啥hard了,因为can you solve it in O(nk) runtime + +数组 dp\[x][k] 代表第x个房子paint 0..k的值 + + + +用paint house 1 改的AC代码: + +不过这个时间复杂度是O(nkk)吧 + + + +``` +class Solution(object): + def minCostII(self, costs): + """ + :type costs: List[List[int]] + :rtype: int + """ + n = len(costs) + if n == 0 : return 0 + elif n == 1 : return min (costs[0]) + else: + k = len(costs[0]) if n else 0 + dp = [[0 for i in range(k)] for j in range(n)] + + dp[0] = costs[0] + + for i in range(1,n): + for j in range(0,k): + minVal = float('inf') + for m in range(0,k): + if m != j and dp[i-1][m] < minVal: + minVal = dp[i-1][m] + dp[i][j] = minVal + costs[i][j] + + return min(dp[-1]) +``` + + + + + + + diff --git a/docs/Leetcode_Solutions/Python/266. Palindrome Permutation.md b/docs/Leetcode_Solutions/Python/266. Palindrome Permutation.md new file mode 100644 index 000000000..49f78bd04 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/266. Palindrome Permutation.md @@ -0,0 +1,46 @@ +### 266. Palindrome Permutation + + + +题目: + + +难度 : Easy + + + +思路: + +hint 已经提示的很明显。数单字个数来处理 + + + +AC代码 + + + +``` +class Solution(object): + def canPermutePalindrome(self, s): + """ + :type s: str + :rtype: bool + """ + lookup = {} + + for char in s: + lookup[char] = lookup.get(char,0) + 1 + + res = 0 + + for char, cnt in lookup.items(): + if cnt % 2 == 0 : + continue + else: + res += 1 + + return res < 2 +``` + +​ + diff --git a/docs/Leetcode_Solutions/Python/267. Palindrome Permutation II.md b/docs/Leetcode_Solutions/Python/267. Palindrome Permutation II.md new file mode 100644 index 000000000..5243954ee --- /dev/null +++ b/docs/Leetcode_Solutions/Python/267. Palindrome Permutation II.md @@ -0,0 +1,77 @@ +### 267. Palindrome Permutation II + + + + + +题目: + + + + +难度 : Medium + + + +思路: + +首先这个题目有个简单版本,那就是判断是否可以permutate 为 palindrome. 问题的关键是最多只能一个odd character. + + + +写的这么不elegant,我也是服气! + +AC代码: + + + +``` +class Solution(object): + def generatePalindromes(self, s): + """ + :type s: str + :rtype: List[str] + """ + def permuteUnique(firstS): + if len(firstS) == 0 : return [] + if len(firstS) == 1 : return [firstS] + res = [] + for i in range(len(firstS)): + if i > 0 and firstS[i] == firstS[i-1]: continue + for j in permuteUnique(firstS[:i] + firstS[i+1:]): + res.append([firstS[i]] + j) + return res + + lookup = {} + for char in s: + lookup[char] = lookup.get(char, 0) + 1 + + res, firstS, oddChar = 0, [], '' + for char, cnt in lookup.items(): + if cnt % 2 == 0: + for i in range(cnt/2): + firstS.append(char) + continue + else: + for i in range(cnt / 2): + firstS.append(char) + oddChar = char + res += 1 + if res >= 2: + return [] + else: + res = permuteUnique(firstS) + if len(res) == 0 and oddChar: + return [oddChar] + return map(lambda x: ''.join(x) + oddChar + ''.join(x[::-1]),res) + +``` + + + + + + + + + diff --git a/docs/Leetcode_Solutions/Python/268._missing_number.md b/docs/Leetcode_Solutions/Python/268._missing_number.md new file mode 100644 index 000000000..fbd54da5a --- /dev/null +++ b/docs/Leetcode_Solutions/Python/268._missing_number.md @@ -0,0 +1,49 @@ +### 268. Missing Number + +题目: + + + +难度: + +Medium + + + +等差数列前n项和减去数组之和,一行瞬秒 +```(注意题目input从0开始取值)``` + + +```python +class Solution(object): + def missingNumber(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + return len(nums) * (len(nums) + 1) / 2 - sum(nums) +``` + + + +第二种解法是位运算:位运算(异或运算) + + + +```python +class Solution(object): + def missingNumber(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + res = n = len(nums) + for i in range(n): + res ^= i + res ^= nums[i] + return res +``` + + + + diff --git a/docs/Leetcode_Solutions/Python/270. Closest Binary Search Tree Value.md b/docs/Leetcode_Solutions/Python/270. Closest Binary Search Tree Value.md new file mode 100644 index 000000000..b2aafe48a --- /dev/null +++ b/docs/Leetcode_Solutions/Python/270. Closest Binary Search Tree Value.md @@ -0,0 +1,66 @@ +### 270. Closest Binary Search Tree Val + +题目: + + + + + +难度 : Easy + +最简单的算法是inorder一遍,得到有序的lst,然后O(N) 寻找最靠近的,但是明显不是很高效。 + +AC代码 + +``` +class Solution(object): + def closestValue(self, root, target): + """ + :type root: TreeNode + :type target: float + :rtype: int + """ + lst = [] + + def inorder(root): + if root: + inorder(root.left) + lst.append(root.val) + inorder(root.right) + + inorder(root) + + close = lst[0] + diff = abs(target - lst[0]) + + for i in lst: + if abs(target - i) < diff: + close = i + diff = abs(target - i ) + + return close +``` + + + +AC代码,跟binary search tree 寻值一样, loop 一遍树来寻找 + + + +``` + +class Solution(object): + def closestValue(self, root, target): + """ + :type root: TreeNode + :type target: float + :rtype: int + """ + close = root.val + + while root: + close = root.val if abs(target - root.val) < abs(target - close) else close + root = root.right if root.val < target else root.left + return close +``` + diff --git a/docs/Leetcode_Solutions/Python/276. Paint Fence.md b/docs/Leetcode_Solutions/Python/276. Paint Fence.md new file mode 100644 index 000000000..3b7373ed9 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/276. Paint Fence.md @@ -0,0 +1,65 @@ +### 276. Paint Fence + +题目: + + +难度: +Easy + +思路: + +先解释一下题目意思: fence 栅栏, post 柱子 , no more than two adjacent fence posts have the same color.(一开始看漏,没有看到more than,以为相邻就不能同色)。 + +本来想画格子找规律,结果走偏了,所以老老实实写递推关系式,貌似是这样的 + +- n = 0 : 全为0 +- n = 1 : 有 k种方式 +- n = 2 :有 k * k 种 +- 否则,第n个有两种可能, 跟 n-1 颜色不一样, 跟 n-1 颜色一样, fn = (k-1)fn-1 + (k-1) fn-2 + + + +画一下表:对一下递推关系式,正确✅ + + + +``` + n + 0 1 2 3 4 + 0 0 0 0 0 0 +t 1 0 1 1 0 0 + 2 0 2 4 6 10 + 3 0 3 9 24 . + 4 0 4 16 60 . +``` + + + +AC 代码 + +``` +class Solution(object): + def numWays(self, n, k): + """ + :type n: int + :type k: int + :rtype: int + """ + if n == 0: + return 0 + else: + if k == 0: return 0 + elif n == 1: return k + elif n == 2 : return k * k + else: + dp = [0 for i in range(n+1)] + dp[0] = 0 + dp[1] = k + dp[2] = k * k + + for i in range(3,n+1): + dp[i] = (k-1) * dp [i-1] + (k-1) * dp [i-2] + return dp[-1] + +``` + diff --git a/docs/Leetcode_Solutions/Python/277. Find the Celebrity.md b/docs/Leetcode_Solutions/Python/277. Find the Celebrity.md new file mode 100644 index 000000000..e6bc0312a --- /dev/null +++ b/docs/Leetcode_Solutions/Python/277. Find the Celebrity.md @@ -0,0 +1,65 @@ +### 277. Find the Celebrity + + + +题目: + + + + +难度 : Medium + + + +思路: + +算法考试考过 + +celebrity 是 每个人都知道他,而他不认识任何别的人。 + + + +如果用图来看,那就每个别的人都有箭头指向c,而c没有任何出去的箭头。 + +O(N^2)的代码还是还是很容易想到的 + +但是我们可以有提升,那么就是可以check `knows(a,b)`,如果 a knows b,那么可以排除a是celebrity,否则可以排除b是celebrity. + +最后还要确认一遍是否这个是真的celebrity + + + +AC代码 + +``` +# The knows API is already defined for you. +# @param a, person a +# @param b, person b +# @return a boolean, whether a knows b +# def knows(a, b): + +class Solution(object): + def findCelebrity(self, n): + """ + :type n: int + :rtype: int + """ + if n == 0: + return -1 + c = 0 + for i in xrange(1,n): + if not knows(i, c): + c = i + for i in range(n): + if c != i: + if not knows(i,c) or knows(c,i): + return -1 + return c + + +``` + + + + + diff --git a/docs/Leetcode_Solutions/Python/278._First_Bad _Version.md b/docs/Leetcode_Solutions/Python/278._First_Bad _Version.md new file mode 100644 index 000000000..7c6d94240 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/278._First_Bad _Version.md @@ -0,0 +1,40 @@ +### 278. First Bad Version + + + + + +题目: + + + + +难度 : Easy + + + +思路: + +根据 search for a range 改的 + + + +```python +class Solution(object): + def firstBadVersion(self, n): + """ + :type n: int + :rtype: int + """ + l, r = 0, n - 1 + while l <= r: + mid = l + ((r - l) >> 2) + if not isBadVersion(mid): + l = mid + 1 + else: + r = mid - 1 + return l +``` + + + diff --git a/docs/Leetcode_Solutions/Python/279._perfect_squares.md b/docs/Leetcode_Solutions/Python/279._perfect_squares.md new file mode 100644 index 000000000..f4d8bd50f --- /dev/null +++ b/docs/Leetcode_Solutions/Python/279._perfect_squares.md @@ -0,0 +1,116 @@ + +### 279. Perfect Squares + + +题目: + + + +难度: + +Medium + +### 思路一: +DP, 状态转移方程: + +```dp[i] = min(dp[i], dp[i - j * j] + 1)``` + + + + +```python +class Solution(object): + def numSquares(self, n): + """ + :type n: int + :rtype: int + """ + dp = [0] * (n+1) + for i in range(n+1): + dp[i] = i + j = 1 + while j * j <= i: + dp[i] = min(dp[i], dp[i-j*j] + 1) + j += 1 + return dp[-1] +``` +但是这个方法贼慢,beats 12%, 有时候提交甚至会超时,有时候又不会。。。。因此想别的办法 + +### 思路二: + +Static DP, beats 90.39% + +```python +class Solution(object): + dp = [0] + def numSquares(self, n): + """ + :type n: int + :rtype: int + """ + while len(self.dp) <= n: + m = len(self.dp) + inf = float('inf') + i = 1 + while i * i <= m: + inf = min(inf, self.dp[m-i*i] + 1) + i += 1 + self.dp.append(inf) + return self.dp[n] +``` + +进一步简化可以写成: +```python +class Solution(object): + dp = [0] + def numSquares(self, n): + """ + :type n: int + :rtype: int + """ + while len(self.dp) <= n: + self.dp += min(self.dp[-j*j] + 1 for j in range(1, int(len(self.dp)**0.5+1))), + return self.dp[n] +``` +这里有个问题现在还没搞明白,以后再好好想一下,写成```return self.dp[-1]```提交就失败, +``` +Submission Result: Wrong Answer +Input: 1024 +Output: 4 +Expected: 1 +``` + +### 思路三: + +还是慢,有个数学方法, runtime beats 98.48% +```python +import math +class Solution(object): + def numSquares(self, n): + """ + :type n: int + :rtype: int + """ + def isSquare(num): + tmp = int(math.sqrt(num)) + return tmp * tmp == num + while n & 3 == 0: # n % 4 == 0 + n >>= 2 + if n & 7 == 7: # n % 8 == 7 + return 4 + if isSquare(n): + return 1 + sqrt_n = int(math.sqrt(n)) + for i in range(1, sqrt_n + 1): + if isSquare(n-i*i): + return 2 + return 3 +``` +in order to understand, I suggest u read: + +here is the [Lagrange's Four Square theorem](https://en.wikipedia.org/wiki/Lagrange%27s_four-square_theorem +) - Limit the result to <= 4: + +And this [article](http://www.alpertron.com.ar/4SQUARES.HTM), in which you can also find the way to present a number as a sum of four squares: + + diff --git a/docs/Leetcode_Solutions/Python/280._Wiggle_Sort.md b/docs/Leetcode_Solutions/Python/280._Wiggle_Sort.md new file mode 100644 index 000000000..3188ca405 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/280._Wiggle_Sort.md @@ -0,0 +1,78 @@ +### 280. Wiggle Sort + + + + + +题目: + + + + +难度 : Medium + + + +思路: + + + +想的是比如bubble sort或者任何简单的比较sort,只是放数字的时候是按这样的大小顺序放: + +1, n, 2, n-1,3, n-2…. + +或者每个pass其实做两个sort,找出最大的和最小的。然后分别放在头尾。 + + + +这样的写法TLE: + +``` +class Solution(object): +    def wiggleSort(self, nums): # 此法超时 +        """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + n = len(nums) + for i in range(n): + # small bubble sort + if i % 2 == 0: + for j in range(n-1, i-1, -1): + if nums[j] > nums[j-1]: + nums[j], nums[j-1] = nums[j-1],nums[j] + else: + for j in range(n-1, i-1, -1): + if nums[j] < nums[j-1]: + nums[j], nums[j-1] = nums[j-1],nums[j] +``` + + + + + +但是貌似想复杂了,其实对于这个简单化,要求只有一个: + +1. 如果i是奇数,nums[i] >= nums[i - 1] +2. 如果i是偶数,nums[i] <= nums[i - 1] + +所以我们只要遍历一遍数组,把不符合的情况交换一下就行了。具体来说,如果nums[i] > nums[i - 1], 则交换以后肯定有nums[i] <= nums[i - 1]。 + + + +AC 代码 + +```python +class Solution(object): + def wiggleSort(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + for i in xrange(1, len(nums)): + if ((i % 2) and nums[i] < nums[i-1]) or ((not i % 2) and nums[i] > nums[i-1]): + nums[i], nums[i-1] = nums[i-1], nums[i] +``` + + + diff --git a/docs/Leetcode_Solutions/Python/283._move_zeroes.md b/docs/Leetcode_Solutions/Python/283._move_zeroes.md new file mode 100644 index 000000000..a5e887c05 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/283._move_zeroes.md @@ -0,0 +1,128 @@ +### 283. Move Zeroes + + +题目: + + + +难度: +Easy + + +思路: + +### 思路一:暴力 + +```python +class Solution(object): + def moveZeroes(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + i = 0 + while 0 in nums: + nums.remove(0) + i += 1 + nums.extend([0]*i) +``` + +### 思路二: + +一旦遇到不是0的就把它往前移动,移动非0完成,剩下的全部填0,看例子 + + + +``` +0 1 0 3 12 + +``` + +也算双指针吧, +首先cur = 0, idx = 0,为0,不变,然后idx = 1,不为0,前移,数组变成 + +``` +1 1 0 3 12 +``` + +继续idx 这个时候是2,不变,继续处理,碰到3可以变成 + +``` +1 3 0 3 12 +``` +这样知道变换完成,简直逆天啊,因为cur 总是小于idx,所以总可以保持这样的稳定性 + + +```python +class Solution(object): + def moveZeroes(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + cur,idx = 0,0 + while idx < len(nums): + # cur is not 0 + if nums[idx] != 0 : + nums[cur] = nums[idx] + cur += 1 + idx += 1 + + while cur < len(nums): + nums[cur] = 0 + cur += 1 + +``` + + +### 思路三: + +传统的双指针,参考这里 + + + +```此法最快,beats 90.50%``` + +```python +class Solution(object): + def moveZeroes(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ +        p0, p1 = 0, 0 # P1指向非0,p0指向0 +        while p0 < len(nums) and p1 < len(nums): + if nums[p0] != 0: + p0 += 1 + p1 = p0 + continue + if nums[p1] == 0: + p1 += 1 + continue + nums[p0],nums[p1] = nums[p1],nums[p0] + p0 += 1 + p1 += 1 +``` + +相反,我觉得这样双指针反而没有上面的代码容易理解 + +### 思路四: + +一个比较巧妙的方法: +```python +class Solution(object): + def moveZeroes(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + nums.sort(key= lambda x: 1 if x == 0 else 0) +``` +原理就是原先为0的数优先级在此次sort中更高了,所以全部升序排列排到后面去了 + +但是这个解法被人说是没有满足题目```no extra space```的条件,详见[Sayo](https://leetcode.com/problems/move-zeroes/discuss/72074/) +``` +timsort can require a temp array containing as many as N//2 pointers, which means as many as 2*N extra bytes on 32-bit boxes. +``` + + diff --git a/docs/Leetcode_Solutions/Python/285._inorder_successor_in_bst.md b/docs/Leetcode_Solutions/Python/285._inorder_successor_in_bst.md new file mode 100644 index 000000000..a5a489be9 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/285._inorder_successor_in_bst.md @@ -0,0 +1,81 @@ +###285. Inorder Successor in BST + + +题目: + + + +难度: +Medium + +思路: + + +BST的特性,对于一个node,它的所有左侧node都比它小,它的所有右侧node都比它大。最小的元素在最左边,最大的元素在最右边。 + +一个node x它的successor y 是满足y > x的最小值。两种情况,如果node x有right child,那么这个right child 中的最小值就是它的successor,否则就要往上走,如果走上去的parent使得这个node是其左边的孩子的话,那么successor我们也找到了。 + + +因为状况可能是这样的: + +``` + 3 + / + 1 + / \ + 0 2 +``` + +如果是寻找0的successor,那么我们往上一走,发现0的祖先是1,并且0是1的左孩子,找到,否则如果寻找2的successor,那么我们要往上走到3的部分,2是3的左subtree,这样才能解决问题。 + +伪码 + +``` +function Succ(x) + if Right(x) ̸= NIL then + return Min(Right(x)) + else + p ← Parent(x) + while p ̸= NIL and x = Right(p) do + x←p + p ← Parent(p) + return p +``` + +这里伪码有点不适用是因为我们并没有这个parent指针,当然我们还是有trick方式的,就是我们从root开始走,直到找到这个node p,同时我们记录一路上看到的比p.val大的值,这样最后一个就是它的successor.其中最低的那一个就是他的successor. + +AC代码如下: + + +``` +class Solution(object): + def inorderSuccessor(self, root, p): + """ + :type root: TreeNode + :type p: TreeNode + :rtype: TreeNode + """ + def minNode(root): + while root.left!= None: + root = root.left + return root + + + def searchP(p, root): + if root == None or root.val == p.val: + return None + else: + succ = None + while root != None and p.val != root.val: + if p.val < root.val: + succ = root + root = root.left + else: + root = root.right + return succ + + if p.right: + return minNode(p.right) + else: + return searchP(p, root) +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/286. Walls and Gates.md b/docs/Leetcode_Solutions/Python/286. Walls and Gates.md new file mode 100644 index 000000000..8a23c2681 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/286. Walls and Gates.md @@ -0,0 +1,90 @@ +### 286. Walls and Gates + + + +题目: +https://leetcode.com/problems/walls-and-gates/ + + + +难度 : Medium + + + +思路: + +乍一看feel like all pairs shortest path. + +naive的想法是针对所有为0的点做all pairs shortest path,然后最终得到的就是把INF替换保留最小的。时间复杂度是0的个数* BFS + + + +naive的想法AC + +``` +class Solution(object): + def wallsAndGates(self, rooms): + """ + :type rooms: List[List[int]] + :rtype: void Do not return anything, modify rooms in-place instead. + """ + def legal(x,y): + return x >= 0 and x < row and y >= 0 and y < col and rooms[x][y] != -1 + + def bfs(rooms, i, j): + queue = [] + queue.append((i,j)) + + while queue: + (x,y) = queue.pop() + + if legal(x-1,y) and rooms[x-1][y] > rooms[x][y] + 1: + rooms[x-1][y] = rooms[x][y] + 1 + queue.append((x-1,y)) + if legal(x+1,y) and rooms[x+1][y] > rooms[x][y] + 1 : + rooms[x+1][y] = rooms[x][y] + 1 + queue.append((x+1,y)) + if legal(x,y-1) and rooms[x][y-1] > rooms[x][y] + 1: + rooms[x][y-1] = rooms[x][y] + 1 + queue.append((x,y-1)) + if legal(x,y+1) and rooms[x][y+1] > rooms[x][y] + 1 : + rooms[x][y+1] = rooms[x][y] + 1 + queue.append((x,y+1)) + + + row = len(rooms) + col = len(rooms[0]) if row else 0 + + for i in range(row): + for j in range(col): + if rooms[i][j] == 0: + bfs(rooms,i,j) +``` + + + +复习一下BFS的伪码 + +from wikipedia, 一开始有点小迷茫,那就是为什么没有keep一个visited的数据结构,但是随即反应过来,其实`n.distance == INFINITY` 已经是check它是否被visited 过了,我以上的代码并没有做这个操作,但是因为是格子状以及我仅在检查是否更小,所以也能AC. + +``` +Breadth-First-Search(Graph, root): + + for each node n in Graph: + n.distance = INFINITY + n.parent = NIL + + create empty queue Q + + root.distance = 0 + Q.enqueue(root) + + while Q is not empty: + current = Q.dequeue() + for each node n that is adjacent to current: + if n.distance == INFINITY: + n.distance = current.distance + 1 + n.parent = current + Q.enqueue(n) +``` + diff --git a/docs/Leetcode_Solutions/Python/289._game_of_life.md b/docs/Leetcode_Solutions/Python/289._game_of_life.md new file mode 100644 index 000000000..097ffc3ed --- /dev/null +++ b/docs/Leetcode_Solutions/Python/289._game_of_life.md @@ -0,0 +1,111 @@ +### 289. Game of Life + +题目: + + + +难度 : Medium + + +直接一上来就没有考虑solve it in-place,考虑的是便利,简直是born for 便利 + +首先我把board拓宽了,宽,高各增加了两排。 + +因为这样求neighbor方便,针对原来的borad,现在新的big 对于 1 -> n-1 的部分 + +全都有八个neighbor,用了一个2d array来记录nbrs,再根据当下的nbr来判断更新,因为不能一边在board上loop一边更新. + +AC的效率还ok: + +```python +class Solution(object): + def gameOfLife(self, board): + """ + :type board: List[List[int]] + :rtype: void Do not return anything, modify board in-place instead. + """ + def liveNeighbors(i,j): + return big[i-1][j-1] + big[i-1][j] + big[i-1][j+1] + big[i][j-1] + big[i][j+1] + big[i+1][j-1] + big[i+1][j] + big[i+1][j+1] + + if board == [[]] : return + row = len(board) + col = len(board[0]) + + nbrs = [[0 for j in range(col)] for i in range(row)] + big = [[ 0 for j in range(col+2) ] for i in range(row+2)] + for i in range(1,row+1): + for j in range(1,col+1): + big[i][j] = board[i-1][j-1] + + for i in range(1,row+1): + for j in range(1,col+1): + nbrs[i-1][j-1] = liveNeighbors(i,j) + + for i in range(row): + for j in range(col): + if board[i][j] == 1: + if nbrs[i][j] < 2: + board[i][j] = 0 + elif nbrs[i][j] == 2 or nbrs[i][j] == 3: + board[i][j] = 1 + else: + board[i][j] = 0 + else: + if nbrs[i][j] == 3: + board[i][j] = 1 + +``` + +谷歌了一下,大家都用到了temp 2d array嘛,哼(ˉ(∞)ˉ)唧。好吧,空间复杂度比我小。 + + + +很多的解法都是一样开了一个二维数组,即使没有像我一样扩展board.因为问题在于不能一边更新board 一边来做。 + +看了一下这边的思路: + + + + + + + +不开数组 + +我们可以使用状态机转换 o(╯□╰)o 感觉不知道在听什么 还是很迷茫的感觉, in-place AC代码 + +```python +class Solution(object): + def gameOfLife(self, board): + """ + :type board: List[List[int]] + :rtype: void Do not return anything, modify board in-place instead. + """ + row = len(board) + col = len(board[0]) if row else 0 + + dx = [-1,-1,-1,0,1,1,1,0] + dy = [-1,0,1,1,1,0,-1,-1] + + for i in range(row): + for j in range(col): + cnt = 0 + for k in range(8): + x, y = i + dx[k], j + dy[k] + if x >=0 and x < row and y >=0 and y < col and (board[x][y] == 1 or board[x][y] == 2): + cnt += 1 + + if board[i][j] and (cnt < 2 or cnt > 3): + board[i][j] = 2 + elif board[i][j] == 0 and cnt == 3: + board[i][j] = 3 + + for i in range(row): + for j in range(col): + board[i][j] %= 2 + + +``` + + + diff --git a/docs/Leetcode_Solutions/Python/290._word_pattern.md b/docs/Leetcode_Solutions/Python/290._word_pattern.md new file mode 100644 index 000000000..e6122ec87 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/290._word_pattern.md @@ -0,0 +1,42 @@ +###290. Word Pattern + +题目: + + + +难度 : Easy + +4.pattern = "abba", str = "dog dog dog dog" should return false. + +因为这个的限制,所以中间加了一个loop用来查询是否这个a对应的已经出现过了。 + +不过其实也可以用两个dictionary来处理,可以O(n^3) -> O(n^2) + + +``` +class Solution(object): + def wordPattern(self, pattern, str): + """ + :type pattern: str + :type str: str + :rtype: bool + """ + strList = str.split(' ') + if len(pattern) != len(strList): + return False + lookup = {} + for i in range(len(strList)): + if pattern[i] not in lookup: + for key in lookup: + if lookup[key] == strList[i]: + return False + lookup[pattern[i]] = strList[i] + elif lookup[pattern[i]] != strList[i]: + return False + + return True + +``` + + +另外看到一段非常简短代码,使用了map函数,有待学习 diff --git a/docs/Leetcode_Solutions/Python/292._nim_game.md b/docs/Leetcode_Solutions/Python/292._nim_game.md new file mode 100644 index 000000000..9f78914f5 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/292._nim_game.md @@ -0,0 +1,55 @@ +### 292. Nim Game + +题目: + + + + +难度: + +Easy + + +对于总是优先开始的那方 + + +- 有一到三块,总是赢 +- 有四块,总是输 +- 有五块,总是赢 + +所以如果自己想赢,总是要迫使对方拿之后,给自己遗留5块,或者三块以及以下。 + +- 如果是六块: + - 拿一块,对方五块,对方赢 + - 拿两块,对方余下四块,我方赢 + - 拿三块,余三块,对方赢 + +- 七块: + - 拿三块,余四块,迫使对方输,总是赢 + +本打算用递归来看,因为对方也可以重复使用这个函数,但是会超时,所以就看了一下hint + + +- n <= 3 能赢 √ +- n == 4 总输 +- n = 5,6,7 总赢 +- n == 8, 先手如何选,总可以转成5,6,7 对方总会赢 + + +所以 n % 4 == 0 时候,先手必输 + +简直是啊,有些游戏就是这样来必赢的啊,没想到你是这样的题目 + + + +``` +class Solution(object): + def canWinNim(self, n): + """ + :type n: int + :rtype: bool + """ + return n % 4 != 0 +``` + + diff --git a/docs/Leetcode_Solutions/Python/296. Best Meeting Point.md b/docs/Leetcode_Solutions/Python/296. Best Meeting Point.md new file mode 100644 index 000000000..5f141f6a4 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/296. Best Meeting Point.md @@ -0,0 +1,67 @@ +### 296. Best Meeting Point + +题目: + + + + +难度 : Hard + + + +思路: + +提示是先从一维开始,其实一开始是略迷茫的,因为如果两个点,那么只要在这两个之间,一定就是最小值,线段长度。 + +不过倘若点增加到三个,那么就是第三个点处。 + + + +然后发现了一个很棒的stackoverflow page + + + + + +因为一开始理解错误二维数组的输入,以为是给的locs这样的数组,所以直接这样写了,然后发现给的是格子,所以但是还是偷懒这样写了。 + + + +AC 代码 + +``` +class Solution(object): + def minTotalDistance(self, grid): + """ + :type grid: List[List[int]] + :rtype: int + """ + res = 0 + locs = [] + + m = len(grid) + n = len(grid[0]) if m else 0 + + for i in range(m): + for j in range(n): + if grid[i][j] == 1: + locs.append([i,j]) + + + locs.sort(key = lambda point: point[0]) + x = locs[len(locs)/2][0] + for point in locs: + res += abs(point[0] - x) + + locs.sort(key = lambda point: point[1]) + y = locs[len(locs)/2][1] + for point in locs: + res += abs(point[1] - y) + + return res +``` + + + + + diff --git a/docs/Leetcode_Solutions/Python/298. Binary Tree Longest Consecutive Sequence.md b/docs/Leetcode_Solutions/Python/298. Binary Tree Longest Consecutive Sequence.md new file mode 100644 index 000000000..4c6bc841b --- /dev/null +++ b/docs/Leetcode_Solutions/Python/298. Binary Tree Longest Consecutive Sequence.md @@ -0,0 +1,123 @@ +### 298. Binary Tree Longest Consecutive Sequence + + + + + +题目: +https://leetcode.com/problems/binary-tree-longest-consecutive-sequence/ + + + +难度 : Medium + + + +思路: + + + +TLE代码,每个node求,然后求最大值 + +``` +# Definition for a binary tree node. +# class TreeNode(object): +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None + +class Solution(object): + def longestConsecutive(self, root): + """ + :type root: TreeNode + :rtype: int + """ + def consecutive(root): + if root == None: + return 0 + else: + left, right = 0,0 + if root.left: + if root.left.val == root.val + 1: + left = 1 + consecutive(root.left) + if root.right: + if root.right.val == root.val + 1: + right = 1 + consecutive(root.right) + return max(left, right, 1) + + def dfs(root): + s = [] + s.append(root) + while s: + root = s.pop() + res.append(consecutive(root)) + if root.left: + s.append(root.left) + if root.right: + s.append(root.right) + if not root: + return 0 + + res = [] + dfs(root) + return max(res) + +``` + + + + + +其实第二次递归,也就是dfs其实是有点多余的?因为可以边走边保存最大值? + +因为可以 + +> - recursion,在参数中包含当前的连续seq长度 +> - 如果left, right child的value是连续的,那么就将长度+1传入下一个call + + + + + +AC代码 + +``` +# Definition for a binary tree node. +# class TreeNode(object): +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None + +class Solution(object): + def longestConsecutive(self, root): + """ + :type root: TreeNode + :rtype: int + """ + def dfs(root, curLen): + self.result = max(curLen, self.result) + if root.left: + if root.left.val == root.val + 1: + dfs(root.left, curLen + 1) + else: + dfs(root.left, 1) + if root.right: + if root.right.val == root.val + 1: + dfs(root.right, curLen + 1) + else: + dfs(root.right,1) + + if not root: return 0 + + self.result = 0 + dfs(root, 1) + return self.result + +``` + + + +这里值得注意的是这里的self.result其实相当于dfs的全局变量,也是利用了这个才做到边递归边记录边重置。 + diff --git a/docs/Leetcode_Solutions/Python/299._bulls_and_cows.md b/docs/Leetcode_Solutions/Python/299._bulls_and_cows.md new file mode 100644 index 000000000..8b6cbe468 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/299._bulls_and_cows.md @@ -0,0 +1,119 @@ +###299. Bulls and Cows + +题目: + + + + +难度: + +Easy + + +我花了很久时间来AC,因为想了边界条件 + + +``` +class Solution(object): + def getHint(self, secret, guess): + """ + :type secret: str + :type guess: str + :rtype: str + """ + maps = {} + for i in range(len(secret)): + if secret[i] not in maps: + maps[secret[i]] = [i] + else: + maps[secret[i]].append(i) + mapg = {} + for i in range(len(guess)): + if guess[i] not in mapg: + mapg[guess[i]] = [i] + else: + mapg[guess[i]].append(i) + + print maps, mapg + + a,b = 0,0 + for key in maps.keys(): + if key in mapg.keys(): + common = list(set(mapg[key]) & set(maps[key])) + #check for bull + a += len(common) + mapg[key] = [item for item in mapg[key] if item not in common] + maps[key] = [item for item in maps[key] if item not in common] + b += min(len(maps[key]), len(mapg[key])) + return str(a) + 'A' + str(b) + 'B' +``` + + + + + + + +两种解法都....... + +都这么短。。。。。 +我Python还是用的不行啊 + + +``` +class Solution(object): + def getHint(self, secret, guess): + """ + :type secret: str + :type guess: str + :rtype: str + """ + bull = sum(map(operator.eq, secret, guess)) + sa = collections.Counter(secret) + sb = collections.Counter(guess) + cow = sum((sa & sb).values()) - bull + return str(bull) + 'A' + str(cow) + 'B' +``` + + +bull = secret与guess下标与数值均相同的数字个数 + +cow = secret与guess中出现数字的公共部分 - bull + + + + +来分析一下这个解法 + +``` +def getHint(self, secret, guess): + bulls = sum(map(operator.eq, secret, guess)) + both = sum(min(secret.count(x), guess.count(x)) for x in '0123456789') + return '%dA%dB' % (bulls, both - bulls) +``` + +首先map的用法是,对于iterable中的每个元素应用function方法,将结果作为list返回 + +``` +>>> def add100(x): +... return x+100 +... +>>> hh = [11,22,33] +>>> map(add100,hh) +[111, 122, 133] +``` + + + + +用'1123','0111' 来测试: + + +``` +map(operator.eq, secret, guess) +[False, True, False, False] +``` +就是将equal函数并行应用在两个string上,然后后面的解法也是粗暴简约和厉害 + + +参考 diff --git a/docs/Leetcode_Solutions/Python/300._longest_increasing_subsequence.md b/docs/Leetcode_Solutions/Python/300._longest_increasing_subsequence.md new file mode 100644 index 000000000..bd1752b9e --- /dev/null +++ b/docs/Leetcode_Solutions/Python/300._longest_increasing_subsequence.md @@ -0,0 +1,42 @@ +###300. Longest Increasing Subsequence + +题目: + + + +难度: +Medium + + +思路: + +典型DP + +递推关系式: + +对于以num[i]结束的longest increasing subsequence的长度 + +dp[i] = dp[j] + 1 if num[i] > num[j] else 1 + +最后loop一圈,求出最长的 + +AC 代码 + +``` +class Solution(object): + def lengthOfLIS(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + if not nums: return 0 + n = len(nums) + dp = [1 for i in range(n)] + for i in range(1,n): + for j in range(i): + if nums[i] > nums[j] : + dp[i] = max(dp[i],dp[j] + 1) + + return max(dp) +``` + diff --git a/docs/Leetcode_Solutions/Python/303._range_sum_query_-_immutable.md b/docs/Leetcode_Solutions/Python/303._range_sum_query_-_immutable.md new file mode 100644 index 000000000..32c459aee --- /dev/null +++ b/docs/Leetcode_Solutions/Python/303._range_sum_query_-_immutable.md @@ -0,0 +1,47 @@ +###303. Range Sum Query - Immutable + +题目: + + + +tag : DP +难度 : Easy + + + +``` +sum(i, j) = nums[i] j = i +sum(i,j) = sum[i,j-1] + nums[j] j > i + +``` + +Python代码 + +``` + +class NumArray(object): + def __init__(self, nums): + """ + initialize your data structure here. + :type nums: List[int] + """ + self.sums = nums + for i in range(1, len(self.sums)): + self.sums[i] = self.sums[i-1] + self.sums[i] + + + + + def sumRange(self, i, j): + """ + sum of elements nums[i..j], inclusive. + :type i: int + :type j: int + :rtype: int + """ + if i == 0 : + return self.sums[j] + else : + return self.sums[j] - self.sums[i-1] + +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/316._Remove_Duplicate_Letters.md b/docs/Leetcode_Solutions/Python/316._Remove_Duplicate_Letters.md new file mode 100644 index 000000000..cce1a8b43 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/316._Remove_Duplicate_Letters.md @@ -0,0 +1,108 @@ +### 316. Remove Duplicate Letters + +题目: + + + +难度: + +Hard + + +思路 + +这道题让我们移除重复字母,使得每个字符只能出现一次,而且结果要按最优的字母顺序排列,前提是不能打乱其原本的相对位置。 +- 先用remaining统计所有出现字母出现过的次数; +- res就是输出结果的字母顺序(list),最后用join连接起来作为返回值(str); +- 在stack(set)中的元素意味着其已经出现在最终结果中; + +对s中每个字母c,首先看它在stack中有没有出现过: +1. 如果没有那么只要res最后一个字母的ASCII值大于c,且其剩余次数大于0,就将其在res和stack中删去,不停做此操作 +2. 如果有了那么说明已经出现在最终结果中,只需要将其统计次数减去1以防后面挪动位置要做判断 + +做完这些后必须要把c加入到stack和res中去,代表c已经加入到最终结果中的目前应该处于的位置 + +参考[python的colloections之defaultdict模块](https://docs.python.org/2/library/collections.html) + +```python +class Solution(object): + def removeDuplicateLetters(self, s): + """ + :type s: str + :rtype: str + """ + remaining = collections.defaultdict(int) + for c in s: + remaining[c] += 1 + res, stack = [], set() + for c in s: + if c not in stack: + while res and res[-1] > c and remaining[res[-1]] > 0: + stack.remove(res.pop()) + res.append(c) + stack.add(c) + remaining[c] -= 1 + return ''.join(res) +``` +还有别的一些优美的解法,参考[stefan的回答](https://leetcode.com/problems/remove-duplicate-letters/discuss/76787) + + + +```python +递归贪心版本 +class Solution(object): + def removeDuplicateLetters(self, s): + """ + :type s: str + :rtype: str + """ + for c in sorted(set(s)): + suffix = s[s.index(c):] + if set(suffix) == set(s): + return c + self.removeDuplicateLetters(suffix.replace(c, '')) + return '' +``` +```python +class Solution(object): + def removeDuplicateLetters(self, s): + """ + :type s: str + :rtype: str + """ + result = '' + while s: + i = min(map(s.rindex, set(s))) + c = min(s[:i+1]) + result += c + s = s[s.index(c):].replace(c, '') + return result +``` + +```python +class Solution(object): + def removeDuplicateLetters(self, s): + """ + :type s: str + :rtype: str + """ + rindex = {c: i for i, c in enumerate(s)} + result = '' + for i, c in enumerate(s): + if c not in result: + while c < result[-1:] and i < rindex[result[-1]]: + result = result[:-1] + result += c + return result +``` + + + + + + + + + + + + diff --git a/docs/Leetcode_Solutions/Python/319._Bulb_Switcher.md b/docs/Leetcode_Solutions/Python/319._Bulb_Switcher.md new file mode 100644 index 000000000..840cce518 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/319._Bulb_Switcher.md @@ -0,0 +1,69 @@ +### 319. Bulb Switcher + +题目: + + + +难度: + +Medium + + +思路 + +bulb代表第一轮结束后的所有灯亮灭的情况,从第二轮开始 +- 如果是最后一轮,则bulb的最后一个灯要switch +- 对于其他轮,相应的第i-1+C(i)个灯要siwitch,且C为常数,i-1+C(i)必须<=n-1 + +但是发现这样提交会超时 +Last executed input: +999999 + + +``` +class Solution(object): + def bulbSwitch(self, n): + """ + :type n: int + :rtype: int + """ + bulb = [1] * n + for i in range(2,n+1): + for x in range(i-1, n, i): + bulb[x] = 1 if bulb[x] == 0 else 0 + return bulb.count(1) +``` + +原来,这是一道智商碾压题: + +> A bulb ends up on iff it is switched an odd number of times. +Bulb i is switched in round d iff d divides i. +So bulb i ends up on iff it has an odd number of >divisors. +Divisors come in pairs, like i=12 has divisors 1 and 12, 2 and 6, and 3 and 4. +Except if i is a >square, like 36 has divisors 1 and 36, 2 and 18, 3 and 12, 4 and 9, +and double divisor 6. So bulb >i ends up on iff and only if i is a square. So just count the square numbers. + +大概解释一下,当一个灯泡被执行偶数次switch操作时它是灭着的,当被执行奇数次switch操作时它是亮着的,那么这题就是要找出哪些编号的灯泡会被执行奇数次操作。 + +现在假如我们执行第i次操作,即从编号i开始对编号每次+i进行switch操作,对于这些灯来说, +如果其编号j(j=1,2,3,⋯,n)能够整除i,则编号j的灯需要执行switch操作。 +具备这样性质的i是成对出现的,比如: +- 12 = 1 * 12, +- 12 = 2 * 6 +- 12 = 3 * 4 + +所以编号为12的灯,在第1次,第12次;第2次,第6次;第3次,第4次一定会被执行Switch操作,这样的话,编号为12的灯执行偶数次switch,肯定为灭。 +这样推出,完全平方数一定是亮着的,因为它有两个相同的因子,总因子数为奇数,如36 = 6 * 6,所以本题的关键在于找完全平方数的个数。 + +```python +class Solution(object): + def bulbSwitch(self, n): + """ + type n: int + rtype: int + """ + # The number of full squares. + return int(math.sqrt(n)) +``` + + diff --git a/docs/Leetcode_Solutions/Python/322. Coin Change.md b/docs/Leetcode_Solutions/Python/322. Coin Change.md new file mode 100644 index 000000000..1246fa161 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/322. Coin Change.md @@ -0,0 +1,52 @@ +### 322. Coin Change + + + +题目: + + +难度: + +Medium + +DP入门 + +递推方程式: dp[i] = min(dp[i-vj]+1), vj 是硬币的面额 + +伪码: + +``` +Set Min[i] equal to Infinity for all of i +Min[0]=0 + +For i = 1 to S + For j = 0 to N - 1 + If (Vj<=i AND Min[i-Vj]+1 + + + +难度 : Medium + + + +思路: + + + +最容易想到的是针对每个节点做dfs?然后发现其已经被mark了就不管了,最后数dfs的次数? + +这样尝试,到n =2000 的时候 TLE + +``` +class Solution(object): + def countComponents(self, n, edges): + """ + :type n: int + :type edges: List[List[int]] + :rtype: int + """ + def dfs(node): + if visited[node] == 1: + return + else: + visited[node] = 1 + for node1, node2 in edges: + if node1 == node: + dfs(node2) + elif node2 == node: + dfs(node1) + + res = 0 + visited = [ 0 for i in range(n)] + for i in range(n): + if visited[i] == 0: + dfs(i) + res += 1 + return res +``` + + + +tag是union find,不用是否浪费? + +所谓的union find,应当不是每个做dfs,而是每个来看一下是否属于同一个set,一次dfs,然后loop 做union find + +[Disjoint-set_data_structure](https://en.wikipedia.org/wiki/Disjoint-set_data_structure) + + + +这里有一个很棒的[实现](http://python-algorithms.readthedocs.io/en/stable/_modules/python_algorithms/basic/union_find.html) + + + +AC代码 + +这里就偷懒了,利用岛是0-n,然后也只做了path compression,没更多的优化 + + + +``` +class Solution(object): + def countComponents(self, n, edges): + """ + :type n: int + :type edges: List[List[int]] + :rtype: int + """ + def find(x): + if uf[x] != x: + uf[x] = find(uf[x]) + return uf[x] + + def union(x,y): + xRoot = find(x) + yRoot = find(y) + uf[xRoot] = yRoot + + uf = [i for i in range(n)] + + for node1, node2 in edges: + union(node1, node2) + + res = set() + for i in range(n): + res.add(find(i)) + + return len(res) +``` + + + diff --git a/docs/Leetcode_Solutions/Python/324._Wiggle_Sort_II.md b/docs/Leetcode_Solutions/Python/324._Wiggle_Sort_II.md new file mode 100644 index 000000000..5ebc2594b --- /dev/null +++ b/docs/Leetcode_Solutions/Python/324._Wiggle_Sort_II.md @@ -0,0 +1,42 @@ +### 324. Wiggle Sort II + + + +题目: + + + +难度: +Medium + +思路: + +首先这道题和[Wiggle Sort](https://github.com/Lisanaaa/thinking_in_lc/blob/master/280._Wiggle_Sort.md)要求不一样,不能有等于, +所以如果碰到一串```‘1,1,1,1,1,1’```,当调换顺序时候还是不会满足。 + +因此我们用新方法,首先将原数组排序,然后大的那一半数字降序插在奇数```index```上,小的那一半数字降序插在偶数```index```上 + + +```python +class Solution(object): + def wiggleSort(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + nums.sort() + half = len(nums[::2]) + nums[::2], nums[1::2] = nums[:half][::-1], nums[half:][::-1] +``` + + +### Follow up +O(n) time, O(1) space + +思路: +首先想到的是将我们上面的排序方法用堆排序实现即可,建堆O(n),调整堆O(lgN) + + +```python + +``` diff --git a/docs/Leetcode_Solutions/Python/326._power_of_three.md b/docs/Leetcode_Solutions/Python/326._power_of_three.md new file mode 100644 index 000000000..9cd035d9c --- /dev/null +++ b/docs/Leetcode_Solutions/Python/326._power_of_three.md @@ -0,0 +1,48 @@ +### 326. Power of Three + +题目: + + + + + +难度 : Easy + + +直接就上的递归 + +```python +class Solution(object): + def isPowerOfThree(self,n): + """ + :type n: int + :rtype: bool + """ + if n <= 0: + return False + if n == 1: + return True + if n % 3 == 0: + return self.isPowerOfThree(n/3) + return False + +``` + +有一个follow up,可否不用 loop/recusion + +看到了取巧的办法,因为是Given an integer,是有范围的(<2147483648),存在能输入的最大的3的幂次,即 3^19=1162261467。 + +只用检查是否能被这个数整除 + + +```python +class Solution(object): + def isPowerOfThree(self, n): + """ + :type n: int + :rtype: bool + """ + return n > 0 and pow(3, 19) % n == 0 + +``` + diff --git a/docs/Leetcode_Solutions/Python/328._odd_even_linked_list.md b/docs/Leetcode_Solutions/Python/328._odd_even_linked_list.md new file mode 100644 index 000000000..b628ab241 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/328._odd_even_linked_list.md @@ -0,0 +1,112 @@ +###328. Odd Even Linked List + +题目: + + + +难度: + +Medium + + +想法:因为相对顺序保持不变,所以可以拆list,然后再组合在一起?这样是满足题目要求的,因为linked list不像array,我们操作的时候只是用指向,没有分配新的空间。 + +``` + +class Solution(object): + def oddEvenList(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + if head == None or head.next == None or head.next.next == None: + return head + + oddDummy = ListNode(-1) + oddDummy.next = head + + evenDummy = ListNode(-1) + evenDummy.next = head.next + + oddCur = oddDummy.next + evenCur = evenDummy.next + + cur = head.next.next + while cur: + oddCur.next = cur + oddCur = oddCur.next + evenCur.next = cur.next + evenCur = evenCur.next + if cur.next: + cur = cur.next.next + else: + cur = cur.next + oddCur.next = evenDummy.next + # print oddDummy.next.val + return oddDummy.next + +``` + + + + +看别人的优雅代码 + +``` +class Solution(object): + def oddEvenList(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + if head == None: + return head + + # odd used to keep track of the tail of odd nodes + odd = oddHead = head + # record how many swaps happend + even = evenHead = head.next + while even and even.next: + odd.next = even.next + odd = odd.next + even.next = odd.next + even = even.next + odd.next = evenHead + return head +``` + +intuitive and concise + + +``` +1 → 2 → 3 → 4 → 5 → NULL + +一开始 + + 1 → 2 → 3 → 4 → 5 → NULL +odd even even.next + + +1 → 3 → 4 → 5 → NULL + odd ↑ + 2 - + + +1 → 3 → 4 → 5 → NULL + odd + 2 - even + + +再loop一次: + + | ----------- + | --------- ↓ ↓ +1 → 3 4 5 → NULL + odd ↑ + 2 - ↑ even + + +最后一步,再将两个odd的最后一个和evenHead连接起来,完工 +``` + + diff --git a/docs/Leetcode_Solutions/Python/334._increasing_triplet_subsequence.md b/docs/Leetcode_Solutions/Python/334._increasing_triplet_subsequence.md new file mode 100644 index 000000000..e5e4c645a --- /dev/null +++ b/docs/Leetcode_Solutions/Python/334._increasing_triplet_subsequence.md @@ -0,0 +1,71 @@ +###334. Increasing Triplet Subsequence + +题目: + + + +难度: +Medium + + +思路: + +用longest increasing subsequence来求,超时 + +``` +class Solution(object): + def increasingTriplet(self, nums): + """ + :type nums: List[int] + :rtype: bool + """ + if not nums: return False + n = len(nums) + dp = [1 for i in range(n)] + for i in range(1,n): + for j in range(i): + if nums[i] > nums[j] : + dp[i] = max(dp[i],dp[j] + 1) + if dp[i] >= 3: + return True + + return False +``` + +于是转而用Third Maximum Number的方法,维护一个当前最小和当前第二小,当碰到当前比较大,返回True,否则一圈走下来依旧不能满足,返回false. + +想一下,如果不是求三个增长,如果是求两个的话,那么一定想到的是保存当前最小值,那么一旦后方遇到一个比较大的,就这样处理掉了。 + +所以对于任何一个num来说,有三种可能: + +- 小于当前的最小值,那么更新当前最小值 +- 小于当前第二小值,更新当前第二小值 +- 如果以上两种都不是,那么是大于当前第二小值和最小值,于是这样就true + +所以是求四个增长也是类似的么 + +AC代码 + +``` +class Solution(object): + def increasingTriplet(self, nums): + """ + :type nums: List[int] + :rtype: bool + """ + # m - min, sm - second min + m, sm = float('inf'), float('inf') + + for num in nums: + print m, sm + if m >= num: + m = num + elif sm >= num: + sm = num + else: + return True + return False +``` + + + diff --git a/docs/Leetcode_Solutions/Python/337._house_robber_iii.md b/docs/Leetcode_Solutions/Python/337._house_robber_iii.md new file mode 100644 index 000000000..a081ba016 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/337._house_robber_iii.md @@ -0,0 +1,47 @@ +###337. House Robber III + + +题目: + + + +难度: +Medium + +思路: + +参考 + + +这个解法好像有点厉害 + +从root开始抢起来,最大能抢到的两个可能: 抢root和不抢root + +- rob_root = max(rob_L + rob_R , no_rob_L + no_nob_R + root.val) +- no_rob_root = rob_L + rob_R + + +这个递归写起来就很厉害了 + + +``` +class Solution(object): + def rob(self, root): + """ + :type root: TreeNode + :rtype: int + """ + def dfs(root): + if not root: return 0, 0 + rob_L, no_rob_L = dfs(root.left) + rob_R, no_rob_R = dfs(root.right) + return max(no_rob_R + no_rob_L + root.val , rob_L + rob_R), rob_L + rob_R + + return dfs(root)[0] + +``` + +对于每个node,我们return的是从这个node能抢到的最大值,以及不抢它能获得的最大值,这个递归简直我服 + + + diff --git a/docs/Leetcode_Solutions/Python/338. Counting Bits.md b/docs/Leetcode_Solutions/Python/338. Counting Bits.md new file mode 100644 index 000000000..e74a13253 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/338. Counting Bits.md @@ -0,0 +1,46 @@ +### 338. Counting Bits + +题目: + + + +难度: +Medium + + + +**O(n\*sizeof(integer))** 算法,其实就是把count of 1 bit拿来用: + +``` +class Solution(object): + def countBits(self, num): + """ + :type num: int + :rtype: List[int] + """ + def hammingWeight(n): + cnt = 0 + while n != 0: + n &= n -1 + cnt += 1 + return cnt + + res = [] + for i in range(num+1): + res.append(hammingWeight(i)) + return res + +``` + + + +DP算法 - to be done + + + + + + + + + diff --git a/docs/Leetcode_Solutions/Python/339. Nested List Weight Sum.md b/docs/Leetcode_Solutions/Python/339. Nested List Weight Sum.md new file mode 100644 index 000000000..a39800a58 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/339. Nested List Weight Sum.md @@ -0,0 +1,58 @@ +### 339. Nested List Weight Sum + + + +题目: + + +难度: +Easy + +思路: + +一开始没认真读题,直接上手开写: + +``` +class Solution(object): + def depthSum(self, nestedList): + """ + :type nestedList: List[NestedInteger] + :rtype: int + """ + def dfs(nestedList): + for item in nestedList: + if item.isInteger(): + self.res += item.getInteger() + else: + dfs(item.getList()) + self.res = 0 + dfs(nestedList) + return self.res +``` + + + +然后注意到要weight by its depth. + + + +AC + +``` +class Solution(object): + def depthSum(self, nestedList): + """ + :type nestedList: List[NestedInteger] + :rtype: int + """ + def dfs(nestedList,depth): + for item in nestedList: + if item.isInteger(): + self.res += item.getInteger() * depth + else: + dfs(item.getList(), depth+1) + self.res = 0 + dfs(nestedList,1) + return self.res +``` + diff --git a/docs/Leetcode_Solutions/Python/341._Flatten_Nested_List_Iterator.md b/docs/Leetcode_Solutions/Python/341._Flatten_Nested_List_Iterator.md new file mode 100644 index 000000000..2acc186f5 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/341._Flatten_Nested_List_Iterator.md @@ -0,0 +1,47 @@ +### 341. Flatten Nested List Iterator + + + +题目: + + + + +难度: +Medium + + + +```python +class NestedIterator(object): + + def __init__(self, nestedList): + """ + Initialize your data structure here. + :type nestedList: List[NestedInteger] + """ + def dfs(nestedList): + for item in nestedList: + if item.isInteger(): + self.stack.append(item.getInteger()) + else: + dfs(item.getList()) + self.stack = [] + dfs(nestedList) + + + def next(self): + """ + :rtype: int + """ + if self.hasNext(): + return self.stack.pop(0) + + + def hasNext(self): + """ + :rtype: bool + """ + return self.stack != [] +``` + diff --git a/docs/Leetcode_Solutions/Python/342._Power_of_Four.md b/docs/Leetcode_Solutions/Python/342._Power_of_Four.md new file mode 100644 index 000000000..c895a7c24 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/342._Power_of_Four.md @@ -0,0 +1,32 @@ +### 342. Power of Four + + + +题目: + + + + +难度 : Easy + +继续照抄power of three + +```python +class Solution(object): + def isPowerOfFour(self, num): + """ + :type num: int + :rtype: bool + """ + if num <= 0 : + return False + if num == 1: + return True + if num % 4 == 0: + return self.isPowerOfFour(num/4) + return False + +``` + + + diff --git a/docs/Leetcode_Solutions/Python/344._reverse_string.md b/docs/Leetcode_Solutions/Python/344._reverse_string.md new file mode 100644 index 000000000..0e4c0f4fb --- /dev/null +++ b/docs/Leetcode_Solutions/Python/344._reverse_string.md @@ -0,0 +1,47 @@ +### 344. Reverse String + + + +题目: + + + +难度: +Easy + +思路: + +不要脸的python AC code: + + +```python +class Solution(object): + def reverseString(self, s): + """ + :type s: str + :rtype: str + """ + return s[::-1] +``` + +因为python不支持item assignment + +所以如果非要用two pointer来做的话,那么会是这样 + +```python +class Solution(object): + def reverseString(self, s): + """ + :type s: str + :rtype: str + """ + lst = list(s) + n = len(lst) + start, end = 0, n - 1 + + while start < end: + lst[end], lst[start] = lst[start],lst[end] + start += 1 + end -= 1 + return ''.join(lst) +``` diff --git a/docs/Leetcode_Solutions/Python/345._Reverse_Vowels_of_a_String.md b/docs/Leetcode_Solutions/Python/345._Reverse_Vowels_of_a_String.md new file mode 100644 index 000000000..380c1b513 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/345._Reverse_Vowels_of_a_String.md @@ -0,0 +1,61 @@ +### 345. Reverse Vowels of a String + + +题目: + + + +难度: + +Easy + + + +思路 + +字符串不可变,所以用list代替,最后join + + + +```python +class Solution(object): + def reverseVowels(self, s): + """ + :type s: str + :rtype: str + """ + vowels = 'aeiou' + string = list(s) + i, j = 0, len(s) -1 + while i <= j: + if string[i].lower() not in vowels: + i += 1 + elif string[j].lower() not in vowels: + j -= 1 + else: + string[i], string[j] = string[j], string[i] + i += 1 + j -= 1 + return ''.join(string) +``` + +正则版本 + +```python +class Solution(object): + def reverseVowels(self, s): + """ + :type s: str + :rtype: str + """ + vowels = re.findall('(?i)[aeiou]', s) + return re.sub('(?i)[aeiou]', lambda m: vowels.pop(), s) +``` + + + + + + + + diff --git a/docs/Leetcode_Solutions/Python/349._intersection_of_two_arrays.md b/docs/Leetcode_Solutions/Python/349._intersection_of_two_arrays.md new file mode 100644 index 000000000..2f79b8dd9 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/349._intersection_of_two_arrays.md @@ -0,0 +1,25 @@ +### 349. Intersection of Two Arrays + +题目: + + + +难度: + +Easy + + + +Python一句话作弊 + +```python +class Solution(object): + def intersection(self, nums1, nums2): + """ + :type nums1: List[int] + :type nums2: List[int] + :rtype: List[int] + """ + return list(set(nums1).intersection(nums2)) +``` + diff --git a/docs/Leetcode_Solutions/Python/350._intersection_of_two_arrays_ii.md b/docs/Leetcode_Solutions/Python/350._intersection_of_two_arrays_ii.md new file mode 100644 index 000000000..d2a444772 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/350._intersection_of_two_arrays_ii.md @@ -0,0 +1,65 @@ +### 350. Intersection of Two Arrays II + +题目: + + + + +难度: + +Easy + + +sort之后用了双指针来走和看 + + +```python +class Solution(object): + def intersect(self, nums1, nums2): + """ + :type nums1: List[int] + :type nums2: List[int] + :rtype: List[int] + """ + nums1.sort() + nums2.sort() + + l1 = len(nums1) + l2 = len(nums2) + + p1 = 0 + p2 = 0 + + res = [] + + while p1 < l1 and p2 < l2: + if nums1[p1] < nums2[p2]: + p1 += 1 + elif nums1[p1] > nums2[p2]: + p2 += 1 + else: + res.append(nums1[p1]) + p1 += 1 + p2 += 1 + return res +``` + +两行版本 +```python +class Solution(object): + def intersect(self, nums1, nums2): + """ + :type nums1: List[int] + :type nums2: List[int] + :rtype: List[int] + """ + a, b = map(collections.Counter, (nums1, nums2)) + return list((a & b).elements()) +``` + + + + + + + diff --git a/docs/Leetcode_Solutions/Python/353. Design Snake Game.md b/docs/Leetcode_Solutions/Python/353. Design Snake Game.md new file mode 100644 index 000000000..b9b95757c --- /dev/null +++ b/docs/Leetcode_Solutions/Python/353. Design Snake Game.md @@ -0,0 +1,89 @@ +### 353. Design Snake Game + + + +题目: + + + +难度: Medium + +思路: + +纯正单纯方式 + +在TLE边缘AC + +AC代码 + + + +``` +class SnakeGame(object): + + def __init__(self, width,height,food): + """ + Initialize your data structure here. + @param width - screen width + @param height - screen height + @param food - A list of food positions + E.g food = [[1,1], [1,0]] means the first food is positioned at [1,1], the second is at [1,0]. + :type width: int + :type height: int + :type food: List[List[int]] + """ + self.width = width + self.height = height + self.food = food + self.snake = [[0,0]] + self.score = 0 + + + def move(self, direction): + """ + Moves the snake. + @param direction - 'U' = Up, 'L' = Left, 'R' = Right, 'D' = Down + @return The game's score after the move. Return -1 if game over. + Game over when snake crosses the screen boundary or bites its body. + :type direction: str + :rtype: int + """ + + nextx, nexty = self.snake[0] + + if direction == 'U': + nextx -= 1 + if direction == 'L': + nexty -=1 + if direction == 'R': + nexty +=1 + if direction == 'D': + nextx +=1 + + # nextx, nexty has food + if self.food and [nextx,nexty] == self.food[0]: + self.snake.insert(0,[nextx,nexty]) + self.food = self.food[1:] + self.score += 1 + # netx, nety outside boundary + else: + self.snake = self.snake[:-1] + self.snake.insert(0,[nextx,nexty]) + if nextx < 0 or nextx > self.height - 1 or nexty < 0 or nexty > self.width - 1: + return -1 + noDupes = [] + + for snakePt in self.snake: + # print snakePt, + if snakePt not in noDupes: + noDupes.append(snakePt) + # print 'snake', self.snake + # print 'noDpues', noDupes + if len(noDupes) < len(self.snake): + return -1 + return self.score + +``` + + + diff --git a/docs/Leetcode_Solutions/Python/364. Nested List Weight Sum II.md b/docs/Leetcode_Solutions/Python/364. Nested List Weight Sum II.md new file mode 100644 index 000000000..d72cb1643 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/364. Nested List Weight Sum II.md @@ -0,0 +1,47 @@ +### 364. Nested List Weight Sum II + + + +题目: + + +难度: +Medium + +思路: + + + +跟 Nested List Weight Sum I 的区别是这个是从不是数depth,是数层的高度: + + + +比较naive的AC代码: + +``` +class Solution(object): + def depthSumInverse(self, nestedList): + """ + :type nestedList: List[NestedInteger] + :rtype: int + """ + def level(nestedList,height): + self.level = max(height, self.level) + for item in nestedList: + if not item.isInteger(): + level(item.getList(), height + 1) + + def dfs(nestedList, height): + for item in nestedList: + if item.isInteger(): + self.res += item.getInteger() * height + else: + dfs(item.getList(),height - 1) + + self.level = 1 + self.res = 0 + level(nestedList,1) + dfs(nestedList, self.level) + return self.res +``` + diff --git a/docs/Leetcode_Solutions/Python/366. Find Leaves of Binary Tree.md b/docs/Leetcode_Solutions/Python/366. Find Leaves of Binary Tree.md new file mode 100644 index 000000000..e82d592cc --- /dev/null +++ b/docs/Leetcode_Solutions/Python/366. Find Leaves of Binary Tree.md @@ -0,0 +1,52 @@ +### 366. Find Leaves of Binary Tree + + + +题目: + + + + + +难度 :Medium + + + +按照它的要求,老老实实写了两个递归 findleaf 和 deleteleaf, 再组合起来 + + + +AC代码 + +```python +class Solution(object): + def findLeaves(self, root): + """ + :type root: TreeNode + :rtype: List[List[int]] + """ + def findLeaf(root): + if not root: + return [] + elif not root.left and not root.right: + return [root.val] + else: + return findLeaf(root.left) + findLeaf(root.right) + def removeLeaf(root): + if not root: + return None + elif not root.left and not root.right: + return None + else: + if root.left: + root.left = removeLeaf(root.left) + if root.right: + root.right = removeLeaf(root.right) + return root + res = [] + while root: + res.append(findLeaf(root)) + root = removeLeaf(root) + return res +``` + diff --git a/docs/Leetcode_Solutions/Python/367._valid_perfect_square.md b/docs/Leetcode_Solutions/Python/367._valid_perfect_square.md new file mode 100644 index 000000000..7bb7285d4 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/367._valid_perfect_square.md @@ -0,0 +1,42 @@ +###367. Valid Perfect Square + +题目: + + + + +难度: + +Medium + + +直接用循环做也可以AC + + +``` +class Solution(object): + def isPerfectSquare(self, num): + """ + :type num: int + :rtype: bool + """ + if num == 1 or num == 4 : return True + for i in xrange(num//2): + if i*i == num: + return True + elif i*i > num: + return False + return False + +``` + +然后发现有传说中的牛顿法 + +有待阅读,然后还有二分法 + +``` + r = x + while r*r > x: + r = (r + x/r) / 2 + return r*r == x +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/369.Plus One Linked List.md b/docs/Leetcode_Solutions/Python/369.Plus One Linked List.md new file mode 100644 index 000000000..92c64e78e --- /dev/null +++ b/docs/Leetcode_Solutions/Python/369.Plus One Linked List.md @@ -0,0 +1,46 @@ +### 369.Plus One Linked List + +题目: + + +难度 : Medium + + + +类似题目: plus one,plus one 用递归和循环写了,对于linked list,因为most significant digit在首位,递归写起来不方便,用循环尝试,然后代码并没有实质上的区别。 + + + +``` +class Solution(object): + def plusOne(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + lst = [] + cur = head + + while cur: + lst.append(cur) + cur = cur.next + + carry = 1 + for i in range(len(lst)-1,-1,-1): + lst[i].val += carry + if lst[i].val < 10: + carry = 0 + break + else: + lst[i].val -= 10 + + if carry == 1: + node = ListNode(1) + node.next = head + return node + else: + return head +``` + + + diff --git a/docs/Leetcode_Solutions/Python/371._sum_of_two_integers.md b/docs/Leetcode_Solutions/Python/371._sum_of_two_integers.md new file mode 100644 index 000000000..675aa9724 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/371._sum_of_two_integers.md @@ -0,0 +1,95 @@ +###371. Sum of Two Integers + +题目: + + + +难度: + +Easy + + +思路 + + +谷歌答案 + + +位运算 + +``` +XOR +x y output +0 0 0 +1 0 1 +0 1 1 +1 1 0 + + +AND +x y output +0 0 0 +1 0 1 +0 1 1 +1 1 1 + +``` + +如果对x和y来做加法(x和y都是一位的),那么末位会是x xor y,进位会是x and y + + + + + +python没有左移,用c++来看 + +``` +class Solution { +public: + int getSum(int a, int b) { + while (b != 0 ){ + int c = a & b; + a = a ^ b; + b = c << 1; + } + return a; + } +}; +``` + +实际上看到答案还是没有那么明白的,还是动手算算 + + + +``` +a = 6 (0110) +b = 15 (1111) + + +1st +--------- +carry = a & b = 0110 +a = a ^ b = 1001 +b = 1100 + + +2nd +--------- +carry = a & b = 1000 +a = a ^ b = 0101 +b = 10000 + + +3rd +---------- + +carry = a & b = 0 +a = a ^ b = 10101 +b = 0 + +这个时候a 的值是2^4 + 2^2 + 2^0 = 16+4+1 = 21 +``` + +虽然convence了我自己,但是表示依旧迷茫ing + +也知道位运算需要待补啊 \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/374._Guess_Number_Higher_or_Lower.md b/docs/Leetcode_Solutions/Python/374._Guess_Number_Higher_or_Lower.md new file mode 100644 index 000000000..d7d3072f2 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/374._Guess_Number_Higher_or_Lower.md @@ -0,0 +1,34 @@ +### 374. Guess Number Higher or Lower + +题目: + + + +难度: + +Easy + + +思路 + +二分 + +```python +class Solution(object): + def guessNumber(self, n): + """ + :type n: int + :rtype: int + """ + l, r = 1, n + while l <= r: + mid = l + ((r - l) >> 2) + if guess(mid) == 1: + l = mid + 1 + elif guess(mid) == -1: + r = mid - 1 + else: + return mid +``` + + diff --git a/docs/Leetcode_Solutions/Python/377._combination_sum_iv.md b/docs/Leetcode_Solutions/Python/377._combination_sum_iv.md new file mode 100644 index 000000000..88548d175 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/377._combination_sum_iv.md @@ -0,0 +1,77 @@ +###377. Combination Sum IV + +题目: + + + + +难度: + +Medium + + +直接用combination sum的思路: 超时 + +``` +class Solution(object): + def combinationSum4(self, candidates, target): + """ + :type candidates: List[int] + :type target: int + :rtype: List[List[int]] + """ + def combSum(candidates, target, start, valueList): + length = len(candidates) + if target == 0 : + res.append(valueList) + for i in range(start, length): + if target < candidates[i]: + return + combSum(candidates, target - candidates[i], 0, valueList + [candidates[i]]) + + candidates = list(set(candidates)) + candidates.sort() + res = [] + combSum(candidates, target, 0, []) + return len(res) +``` + + + + + +说起来标签是dp,也知道是dp啊,状态转移方程: + + + +参考: + + + +> +> +> 我们需要一个一维数组dp,其中dp[i]表示目标数为i的解的个数,然后我们从1遍历到target,对于每一个数i,遍历nums数组,如果i>=x, dp[i] += dp[i - x]。这个也很好理解,比如说对于[1,2,3] 4,这个例子,当我们在计算dp[3]的时候,3可以拆分为1+x,而x即为dp[2],3也可以拆分为2+x,此时x为dp[1],3同样可以拆为3+x,此时x为dp[0],我们把所有的情况加起来就是组成3的所有情况了 + + + +AC代码 + +``` +class Solution(object): + def combinationSum4(self, candidates, target): + """ + :type candidates: List[int] + :type target: int + :rtype: List[List[int]] + """ + dp = [0 for i in range(target+1)] + + dp[0] = 1 + + for i in range(target+1): + for candidate in candidates: + if i >= candidate: + dp[i] += dp[i - candidate] + return dp[-1] +``` + diff --git a/docs/Leetcode_Solutions/Python/378._kth_smallest_element_in_a_sorted_matrix.md b/docs/Leetcode_Solutions/Python/378._kth_smallest_element_in_a_sorted_matrix.md new file mode 100644 index 000000000..34c267b41 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/378._kth_smallest_element_in_a_sorted_matrix.md @@ -0,0 +1,107 @@ +### 378. Kth Smallest Element in a Sorted Matrix + + + +题目: + + + +难度: +Medium + + + +### 思路一:暴力法 + +```python +class Solution(object): + def kthSmallest(self, matrix, k): + """ + :type matrix: List[List[int]] + :type k: int + :rtype: int + """ + tmp = [] + for row in matrix: + for column in row: + tmp.append(column) + tmp.sort() + return tmp[k-1] if tmp and len(tmp)>0 else None +``` +### 思路二: +两个tag : binary search, heap + +######先来heap + +1. 利用heap,先对第一行所有元素加入heap,每个元素下面同一列的元素必然比他们大 +2. 重复K-1次下面的过程 + - 取现在的root + - 将root下面的元素加入heap + +可以手写一个例子来看 + +参考: + + +```python +class Solution(object): + def kthSmallest(self, matrix, k): + """ + :type matrix: List[List[int]] + :type k: int + :rtype: int + """ + if not matrix: + return 0 + + heap = [] + row = len(matrix) + col = len(matrix[0]) + + for i in range(col): + # heap store its value and location + heapq.heappush(heap, (matrix[0][i], 0, i)) + + print heap + + for j in range(k-1): + cur = heappop(heap) + x = cur[1] + y = cur[2] + if x+1 < row: + heapq.heappush(heap, (matrix[x+1][y],x+1,y)) + + return heap[0][0] +``` + +### 思路三: heapq一行 + +```python +class Solution(object): + def kthSmallest(self, matrix, k): + """ + :type matrix: List[List[int]] + :type k: int + :rtype: int + """ + return list(heapq.merge(*matrix))[k-1] +``` + +### 思路四; binary search +```python +class Solution(object): + def kthSmallest(self, matrix, k): + """ + :type matrix: List[List[int]] + :type k: int + :rtype: int + """ + l, r = matrix[0][0], matrix[-1][-1] + while l <= r: + mid = l + ((r - l) >> 2) + if sum(bisect.bisect_right(row, mid) for row in matrix) < k: + l = mid + 1 + else: + r = mid - 1 + return l +``` diff --git a/docs/Leetcode_Solutions/Python/380. Insert Delete GetRandom O(1).md b/docs/Leetcode_Solutions/Python/380. Insert Delete GetRandom O(1).md new file mode 100644 index 000000000..401f3ee7f --- /dev/null +++ b/docs/Leetcode_Solutions/Python/380. Insert Delete GetRandom O(1).md @@ -0,0 +1,159 @@ +### 380. Insert Delete GetRandom O(1) + + + +题目: + + + + +难度 : Hard + + + +我的naive TLE代码,关键还是在想这个getRandom,这就不是O(1)的: + + + +``` +class RandomizedSet(object): + + def __init__(self): + """ + Initialize your data structure here. + """ + self.container = {} + + + def insert(self, val): + """ + Inserts a value to the set. Returns true if the set did not already contain the specified element. + :type val: int + :rtype: bool + """ + # 1 stands for present + if val in self.container and self.container[val] == 1: + return False + else: + self.container[val] = 1 + return True + + + def remove(self, val): + """ + Removes a value from the set. Returns true if the set contained the specified element. + :type val: int + :rtype: bool + """ + if self.container.get(val,0) == 1: + self.container[val] = 0 + return True + else: + return False + + + + def getRandom(self): + """ + Get a random element from the set. + :rtype: int + """ + import random + keys = self.container.keys() + rd = random.randint(0, len(keys) - 1) + if self.container[keys[rd]] == 1: + return keys[rd] + elif self.container.get(keys[rd],0) == 0: + return self.getRandom() +``` + + + +也是有[stackoverflow问题界面的题目](http://stackoverflow.com/questions/5682218/data-structure-insert-remove-contains-get-random-element-all-at-o1#comment18171331_5684892): + +> Consider a data structure composed of a hashtable H and an array A. The hashtable keys are the elements in the data structure, and the values are their positions in the array. +> +> 1.insert(value): append the value to array and let i be its index in A. Set H[value]=i. +> +> 2.remove(value): We are going to replace the cell that contains value in A with the last element in A. let d be the last element in the array A at index m. let i be H[value], the index in the array of the value to be removed. Set A[i]=d, H[d]=i, decrease the size of the array by one, and remove value from H. +> +> 3.contains(value): return H.contains(value) +> +> 4.getRandomElement(): let r=random(current size of A). return A[r]. +> +> +> +> since the array needs to auto-increase in size, it's going to be amortize O(1) to add an element, but I guess that's OK. + + + + + +按照以答案AC代码 + +``` +class RandomizedSet(object): + + def __init__(self): + """ + Initialize your data structure here. + """ + self.hashtable = {} + self.array = [] + self.arraySize = 0 + + def insert(self, val): + """ + Inserts a value to the set. Returns true if the set did not already contain the specified element. + :type val: int + :rtype: bool + """ + # already in the set + if val in self.hashtable: + return False + else: + self.hashtable[val] = self.arraySize + self.array.append(val) + self.arraySize += 1 + return True + + + def remove(self, val): + """ + Removes a value from the set. Returns true if the set contained the specified element. + :type val: int + :rtype: bool + """ + if val not in self.hashtable: + return False + else: + removeIdx = self.hashtable[val] + if self.arraySize == 1: + self.__init__() + else: + self.array[removeIdx] = self.array[-1] + self.hashtable[self.array[-1]] = removeIdx + self.arraySize -= 1 + del self.hashtable[val] + del self.array[-1] + return True + + + + def getRandom(self): + """ + Get a random element from the set. + :rtype: int + """ + import random + rd = random.randint(0, self.arraySize-1) + return self.array[rd] +``` + + + + + +最后getRandom也可以写成: + +`return random.choice(self.array)` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/381. Insert Delete GetRandom O(1) - Duplicates allowed.md b/docs/Leetcode_Solutions/Python/381. Insert Delete GetRandom O(1) - Duplicates allowed.md new file mode 100644 index 000000000..9adb6cd32 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/381. Insert Delete GetRandom O(1) - Duplicates allowed.md @@ -0,0 +1,83 @@ +### 381. Insert Delete GetRandom O(1) - Duplicates allowed + + + +题目: + + + + +难度 : Hard + + + +一开始的想法是在380上面做简单的修改,比如用一个list来存每个数对应的location,但是这样remove会退化为O(N),然后看到: + +- 用 set 这个数据结构就可以贴近O(1) +- 学了一个新的东西`defaultdict`, 相当于 D.get('key',defaultvalue) + + + +这个defaultdict的好处就是添加的时候默认的值就是set,但是并不默认这个就存在 + + + +AC代码 + +``` +class RandomizedCollection(object): + + def __init__(self): + """ + Initialize your data structure here. + """ + import collections + self.hashtable = collections.defaultdict(set) + self.array = [] + + def insert(self, val): + """ + Inserts a value to the collection. Returns true if the collection did not already contain the specified element. + :type val: int + :rtype: bool + """ + valin = val not in self.hashtable + self.hashtable[val].add(len(self.array)) + self.array.append(val) + return valin + + def remove(self, val): + """ + Removes a value from the collection. Returns true if the collection contained the specified element. + :type val: int + :rtype: bool + """ + if val not in self.hashtable: + return False + else: + if self.array[-1] == val: + removeIdx = len(self.array) - 1 + self.hashtable[val].remove(removeIdx) + else: + # set pop remove arbitrary element + removeIdx = self.hashtable[val].pop() + self.array[removeIdx] = self.array[-1] + self.hashtable[self.array[-1]].remove(len(self.array) - 1) + self.hashtable[self.array[-1]].add(removeIdx) + if len(self.hashtable[val]) == 0: + del self.hashtable[val] + del self.array[-1] + return True + + + def getRandom(self): + """ + Get a random element from the collection. + :rtype: int + """ + import random + return random.choice(self.array) + +``` + +` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/382._linked_list_random_node.md b/docs/Leetcode_Solutions/Python/382._linked_list_random_node.md new file mode 100644 index 000000000..775a0b32d --- /dev/null +++ b/docs/Leetcode_Solutions/Python/382._linked_list_random_node.md @@ -0,0 +1,79 @@ + +###382. Linked List Random Node + + +题目: + + + +难度: + +Medium + + + +tag:reservoir sampling 水塘抽样 + + +思路: + +n选k + + +这样来看,有k个元素,那么这个时候全部选中,当第k+1个元素进来的时候,生成一个随机数r,如果 r <= k,那么用它来替换第r个元素 + +那么r被替换掉的概率是 1 / k + 1, 不被替换掉的概率是 k / k + 1 (不生成r) + +k+2来继续: 被替换掉的概率 1 / k + 2, 不被替换掉的概率 (k + 1) / (k+2) + +所以最终被选中的(不被替换掉的概率是) k / n + +随机 √ + + +针对这道题目来看 + +- 一开始选head为choice +- 出现第二个,生成[1,2]之间的随机数,如果r = 2,则用新的来替换choice +- 出现第三个,生成[1,2,3]之间的随机数,如果r = 3,则替换 + +再写简单一点就是 + + +每次以 1/i 来决定是否用新的元素来替换选中元素,那么就是 i - 1 / i 不替换,它之前被选中的概率就是 1 / i-1 ,所以最终被选中的概率是 1/i + +这个对于linked list更优之处在于它不用reverse + +时间复杂度 O(N), 空间复杂度O(K) + + +然后AC + + +``` +class Solution(object): + + def __init__(self, head): + """ + @param head The linked list's head. + Note that the head is guaranteed to be not null, so it contains at least one node. + :type head: ListNode + """ + self.head = head + + def getRandom(self): + """ + Returns a random node's value. + :rtype: int + """ + choice = self.head + cur = self.head + i = 1 + while cur.next: + cur = cur.next + i += 1 + rd = random.randint(1,i) + if rd == i: + choice = cur + return choice.val +``` diff --git a/docs/Leetcode_Solutions/Python/383._ransom_note.md b/docs/Leetcode_Solutions/Python/383._ransom_note.md new file mode 100644 index 000000000..6a6ee16e7 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/383._ransom_note.md @@ -0,0 +1,53 @@ +### 383. Ransom Note + +题目: + + + +难度 : Easy + + + +略微想了一下,用了一个dictionary来存magazine里面的单字出现的个数,然后来对应check是否可以用来组成ransomNote + + +```python +class Solution(object): + def canConstruct(self, ransomNote, magazine): + """ + :type ransomNote: str + :type magazine: str + :rtype: bool + """ + maps = {} + for i in magazine: + if i in maps: + maps[i] += 1 + else: + maps[i] = 1 + for i in ransomNote: + if i not in maps: + return False + else: + maps[i] -= 1 + if maps[i] < 0: + return False + return True +``` +解法2: + +```python +class Solution(object): + def canConstruct(self, ransomNote, magazine): + """ + :type ransomNote: str + :type magazine: str + :rtype: bool + """ + magCounter = collections.Counter(magazine) + ranCounter = collections.Counter(ransomNote) + for k in ranCounter: + if ranCounter.get(k) > magCounter.get(k): + return False + return True +``` diff --git a/docs/Leetcode_Solutions/Python/384. Shuffle an Array.md b/docs/Leetcode_Solutions/Python/384. Shuffle an Array.md new file mode 100644 index 000000000..bd3d126a9 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/384. Shuffle an Array.md @@ -0,0 +1,105 @@ +### 384. Shuffle an Array + + + +题目: + + + + +难度 : Medium + + + +思路: + + + +这就是洗牌算法吧,洗牌算法几种常见的: + + + +http://www.matrix67.com/blog/archives/879 + + + +也是有wikipedia page的: + +最简单的算法是很容易想到的, O(N^2) + +然后就是modern 算法: + + + +``` +-- To shuffle an array a of n elements (indices 0..n-1): +for i from n−1 downto 1 do + j ← random integer such that 0 ≤ j ≤ i + exchange a[j] and a[i] +``` + + + +这个感觉还是比较容易证明的,一开始生成的数字 1/n 概率 + +没选中,下一个 n-1 /n * 1/ n-1 = 1/n, 所以每个位置都是等概率的? + + + +这个有很妙的点: + +比如五个人顺序抽签,只要不uncover 结果,那么就是等概率的。 + + + +但是第一个人抽奖之后uncover结果,比如他没有抽中 → 那么概率就会变。 + + + + + + + +AC代码: + +``` +class Solution(object): + + def __init__(self, nums): + """ + + :type nums: List[int] + :type size: int + """ + self.lst = nums + + + def reset(self): + """ + Resets the array to its original configuration and return it. + :rtype: List[int] + """ + return self.lst + + + def shuffle(self): + """ + Returns a random shuffling of the array. + :rtype: List[int] + """ + import random + res = self.lst[:] + n = len(res) + for i in range(n-1,0,-1): + j = random.randint(0,i) + res[i], res[j] = res[j], res[i] + return res + +``` + + + + + + + diff --git a/docs/Leetcode_Solutions/Python/387._first_unique_character_in_a_string.md b/docs/Leetcode_Solutions/Python/387._first_unique_character_in_a_string.md new file mode 100644 index 000000000..dfbb89ae1 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/387._first_unique_character_in_a_string.md @@ -0,0 +1,58 @@ +### 387. First Unique Character in a String + +题目: + + + +难度: +Easy + + + +思路一: + +Python作弊法 + +用Python的Counter模块 + +可以参考 + + + + +```python +class Solution(object): + def firstUniqChar(self, s): + """ + :type s: str + :rtype: int + """ + d = collections.Counter(s) + for x,c in enumerate(s): + if d[c] == 1: + return x + return -1 +``` + + +思路二: + +利用问题的特性,因为只有可能是小写字母,所以可以用一个长度为26的array, 先数一遍char的数量,然后enumerate从左往右又来 + +```python +class Solution(object): + def firstUniqChar(self, s): + """ + :type s: str + :rtype: int + """ + cnt = [0 for i in range(26)] + for char in s: + cnt[ord(char) - ord('a')] += 1 + + for idx, char in enumerate(s): + if cnt[ord(char) - ord('a')] == 1: + return idx + return -1 + +``` diff --git a/docs/Leetcode_Solutions/Python/388._Longest_Absolute_File_Path.md b/docs/Leetcode_Solutions/Python/388._Longest_Absolute_File_Path.md new file mode 100644 index 000000000..7d92da63a --- /dev/null +++ b/docs/Leetcode_Solutions/Python/388._Longest_Absolute_File_Path.md @@ -0,0 +1,93 @@ +### 388. Longest Absolute File Path + + +题目: + + + +难度: + +Medium + + + +思路 + +我们首先观察到每个```文件夹```或者是```文件```前面都会有一个```'\n'```, 还有对应其层数个数的```'\t'```. +- 所以首先根据```'\n'```分行,然后算出该```文件/文件夹```的层数```depth``` +- 如果是```文件```,我们需要更新```maxlen``` +- 如果是```文件夹```,我们需要更新该```depth```下的```pathlen``` + +### 程序变量解释 + +- ```maxlen``` 代表目前最大子串的长度 +- ```pathlen``` 每一个```depth```下对应的```path```长度 + +#### 特别需要注意的是,```'\t'```的长度是1 +有的人仍然会有疑问,每次碰到文件夹都直接更新```pathlen```会不会导致本来长的反而变得短了,但是我们可以看到字符串的排版格式,每层```path```都是严格有自己的分级的, +因此不会出现这样的问题。 +例如: +- The string ```"dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext"``` represents: +``` +dir + subdir1 + file1.ext + subsubdir1 + subdir2 + subsubdir2 + file2.ext +``` +其最大长度是```32```, ```"dir/subdir2/subsubdir2/file2.ext"``` + +- 如果变成```"dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir20\n\t\tsubsubdir2\n\t\t\tfile2.ext"```, + +``` +dir + subdir1 + file1.ext + subsubdir1 + subdir20 + subsubdir2 + file2.ext +``` + +最大长度就是```33```, +```"dir/subdir2/subsubdir20/file2.ext"``` + + +- 如果变成 +```"dir\n\tsubdir1000000000000\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext"``` + +``` +dir + subdir10000000000000 + file1.ext + subsubdir1 + subdir20 + subsubdir2 + file2.ext +``` + +最大长度就是```34```,```"dir/subdir10000000000000/file1.ext"``` + + +```python +class Solution(object): + def lengthLongestPath(self, input): + """ + :type input: str + :rtype: int + """ + maxlen = 0 + pathlen = {0 : 0} + for line in input.splitlines(): + name = line.lstrip('\t') + depth = len(line) - len(name) # 前面有几个'\t', depth就是几 + if '.' in name: + maxlen = max(maxlen, pathlen[depth] + len(name)) + else: +                pathlen[depth+1] = pathlen[depth] + len(name) + 1   #加1是为了加上一个path分隔符'/'的长度 + return maxlen +``` + + diff --git a/docs/Leetcode_Solutions/Python/389._find_the_difference.md b/docs/Leetcode_Solutions/Python/389._find_the_difference.md new file mode 100644 index 000000000..a26bc73ae --- /dev/null +++ b/docs/Leetcode_Solutions/Python/389._find_the_difference.md @@ -0,0 +1,47 @@ + +###389. Find the Difference + + +题目: + + + +难度: + +Easy + + +思路 + +用两个hashmap分别来记录 s 和 t 中char的数量,一旦t[key] > s[key], output + +注意这个好的写法 + + +mapt[char] = mapt.get(char,0) + 1 + +如果mapt[char]不存在,会默认给1 + + + +``` +class Solution(object): + def findTheDifference(self, s, t): + """ + :type s: str + :type t: str + :rtype: str + """ + maps = {} + mapt = {} + for char in s: + maps[char] = maps.get(char,0) + 1 + for char in t: + mapt[char] = mapt.get(char,0) + 1 + + for key in mapt: + if mapt[key] - maps.get(key,0) > 0: + return key +``` + + diff --git a/docs/Leetcode_Solutions/Python/392._is_subsequence.md b/docs/Leetcode_Solutions/Python/392._is_subsequence.md new file mode 100644 index 000000000..b7727173b --- /dev/null +++ b/docs/Leetcode_Solutions/Python/392._is_subsequence.md @@ -0,0 +1,69 @@ + +###392. Is Subsequence + + +题目: + + + +难度: + +Medium + + +思路 + + +follow up question很有意思 + + +最naive的思路表现形式如下: + +超时 + +``` +class Solution(object): + def isSubsequence(self, s, t): + """ + :type s: str + :type t: str + :rtype: bool + """ + if s == "": return True + for i in xrange(len(t)): + if t[i] == s[0]: + return self.isSubsequence(s[1:],t[i+1:]) + + return False +``` + +因为直接操作string的昂贵以及递归的昂贵 + +同样的思路 + + +``` +class Solution(object): + def isSubsequence(self, s, t): + """ + :type s: str + :type t: str + :rtype: bool + """ + if s == "" : return True + + ps, pt = 0, 0 + lens, lent = len(s), len(t) + while ps < lens and pt < lent: + if s[ps] == t[pt]: + ps += 1 + pt += 1 + else: + pt += 1 + + return ps >= lens +``` + +AC + + diff --git a/docs/Leetcode_Solutions/Python/394._decode_string.md b/docs/Leetcode_Solutions/Python/394._decode_string.md new file mode 100644 index 000000000..a9eabe7f1 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/394._decode_string.md @@ -0,0 +1,70 @@ +###394. Decode String + + +题目: + + + + +难度: + +Medium + + +思路: + +感觉像用栈做运算。 + +s = "3[a2[c]]" + +⬇️ + +s = 3 *( a + 2 * ( c ) ) + + +遇到非右括号全部入栈,碰到右括号出栈直到左括号,这个就算运算符2 → op2 +然后检查,直到stack空掉或者碰到下一个非数字,这个就算运算符1 → op1 + +算出op1 和 op2 之后把这个res继续入栈。然后接着处理 + + +代码不是很优美 + + + + +``` +class Solution(object): + def decodeString(self, s): + """ + :type s: str + :rtype: str + """ + + s = list(s) + stack = [] + + while s: + char = s.pop(0) + if char != ']': + stack.append(char) + else: + op1, op2 = '','' + popChar = stack.pop() + while popChar != '[': + op2 = popChar + op2 + popChar = stack.pop() + + while stack and stack[-1] in ['0','1','2','3','4','5','6','7','8','9']: + popChar = stack.pop() + op1 = popChar + op1 + + res = int(op1) * op2 + + for char in res: + stack.append(char) + + return ''.join(stack) +``` + + diff --git a/docs/Leetcode_Solutions/Python/400. Nth Digit.md b/docs/Leetcode_Solutions/Python/400. Nth Digit.md new file mode 100644 index 000000000..6cc93ab3e --- /dev/null +++ b/docs/Leetcode_Solutions/Python/400. Nth Digit.md @@ -0,0 +1,46 @@ +### 400. Nth Digit + + + +题目: + + +难度: + +Easy + +思路: + +这道简单题我服, tag是math,找规律 + +``` +1- 9 : 9 → 只占1位 9 +10 - 99: 90 → 两位 90 * 2 +100 - 999: 900 → 三位 900 * 3 +1000 - 9999: 9000 → 四位 9000 * 4 +``` + + + +AC代码来之不易,是参考别人的,这里的`for i in range(9)`, 其实无论`range`多少都可以吧 + + + +``` +class Solution(object): + def findNthDigit(self, n): + """ + :type n: int + :rtype: int + """ + for i in range(9): + d = 9 * 10 ** i + if n <= d * (i+1): break + n -= d *(i+1) + n -= 1 + + return int(str(10**i + n / (i+1))[n % (i+1)]) +``` + + + diff --git a/docs/Leetcode_Solutions/Python/401._binary_watch.md b/docs/Leetcode_Solutions/Python/401._binary_watch.md new file mode 100644 index 000000000..00f217e7f --- /dev/null +++ b/docs/Leetcode_Solutions/Python/401._binary_watch.md @@ -0,0 +1,60 @@ +###401. Binary Watch + + + +题目: + + + +难度: +Easy + + +思路: + + +一看到位操作,我的内心是拒绝的。 + +我也有想这样的想法,因为其实可以的组合并没有那么多,干脆枚举算了,然而也没有动手来写,直到被发了题解的截屏。 + + +``` +class Solution(object): + def readBinaryWatch(self, num): + """ + :type num: int + :rtype: List[str] + """ + hour = { 0 : ['0'], + 1:['1','2','4','8'], + 2:['3','5','6','9','10'], + 3:['7','11'] + } + + minute = { 0:['00'], + 1: ['01','02','04','08','16','32'], + 2: ['03','05','06','09','10','12','17','18','20','24','33','34','36','40','48'], + 3: ['07','11','13','14','19','21','22','25','26','28','35','37','38','41','42','44','49','50','52','56'], + 4: ['15','23','27','29','30','39','43','45','46','51','53','54','57','58'], + 5: ['31','47','55','59'] + } + + res = [] + + #num = num for hour + num for minute + i = 0 + + while i <= 3 and i <= num: + if num - i <= 5: + for str1 in hour[i]: + for str2 in minute[num-i]: + res.append(str1 + ':' + str2) + i += 1 + return res +``` + + +关于循环那处,因为hour的led最多只有4个,所以这样写循环 + + + diff --git a/docs/Leetcode_Solutions/Python/404._sum_of_left_leaves.md b/docs/Leetcode_Solutions/Python/404._sum_of_left_leaves.md new file mode 100644 index 000000000..b6cda537c --- /dev/null +++ b/docs/Leetcode_Solutions/Python/404._sum_of_left_leaves.md @@ -0,0 +1,45 @@ +###404. Sum of Left Leaves + + + +题目: + + + +难度: +Easy + + +思路: + + +典型递归,检查root的左孩子是不是node,是的话加上它的值,不是的话递归去求它的孩子们的,对于右边,递归的求sum of left leaves + + + +``` +class Solution(object): + def sumOfLeftLeaves(self, root): + """ + :type root: TreeNode + :rtype: int + """ + def isLeaf(node): + if node == None: + return False + if node.left == None and node.right == None: + return True + return False + + res = 0 + + if root: + if isLeaf(root.left): + res += root.left.val + else: + res += self.sumOfLeftLeaves(root.left) + if root.right: + res += self.sumOfLeftLeaves(root.right) + + return res +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/405. Convert a Number to Hexadecimal.md b/docs/Leetcode_Solutions/Python/405. Convert a Number to Hexadecimal.md new file mode 100644 index 000000000..5bcb3ec36 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/405. Convert a Number to Hexadecimal.md @@ -0,0 +1,114 @@ +### 405. Convert a Number to Hexadecimal + +题目: + + + +难度: + +Easy + + + +wikipedia两个page: + + + +[十六进制](https://zh.wikipedia.org/wiki/十六进制#.E5.8D.81.E9.80.B2.E5.88.B6.E8.BD.89.E5.8D.81.E5.85.AD.E9.80.B2.E5.88.B6) + +例子: + +4877÷16=304....13(D) + +304÷16=19....0 + +19÷16=1....3 + +1÷16=0....1 + +這樣就計到4877(10)=130D(16) + + + +[补码](https://zh.wikipedia.org/wiki/二補數) + +> 一個數字的二補數就是將該數字作[位元](https://zh.wikipedia.org/wiki/%E4%BD%8D%E5%85%83)[反相](https://zh.wikipedia.org/w/index.php?title=%E5%8F%8D%E7%9B%B8&action=edit&redlink=1)運算(即[一補數](https://zh.wikipedia.org/wiki/%E4%B8%80%E8%A3%9C%E6%95%B8)或[反码](https://zh.wikipedia.org/wiki/%E5%8F%8D%E7%A0%81)),再將結果加1。在二補數系統中,一個負數就是用其對應正數的二補數來表示 + + + +看给的这个-1的例子 + + + +0000 0000 0000 0000 0000 0000 0000 0001 + +1111 1111 1111 1111 1111 1111 1111 1110 +1 + +1111 1111 1111 1111 1111 1111 1111 1111 + +f f f f f f f f + + + + + +也可以参考这里: + +[基础03:原码、反码、补码](https://higoge.github.io/2015/07/02/basic03/) + + + +这里我一开始迷茫和晕了一下,但是随后反应过来,这些数字在电脑里使用二进制存的,而负数也是用二进制的补码存的。所以其实AC代码应当很简单。 + +参考: + + + + + +AC代码: + +``` +class Solution(object): + def toHex(self, num): + """ + :type num: int + :rtype: str + """ + if not num : + return "0" + + result = [] + hexStr ="0123456789abcdef" + while num and len(result) != 8: + h = num & 15 + result.append(hexStr[h]) + num >>= 4 + + return ''.join(result[::-1]) +``` + + + +每次看后四位的结果,把它存起来,比如还是是看4877 + +它在计算机内部的表示是: + +``` +0b1001100001101 +num & 15 1101 & 15 = 13(d) +num >>=4 0b100110000 +num & 15 0000 & 15 = 0 +num >>=4 0b10011 +num & 15 10011 & 15 = 9 +num >>=4 0001 +num & 15 0001 & 15 = 1 + +``` + + + + + + + diff --git a/docs/Leetcode_Solutions/Python/406._Queue_Reconstruction_by_Height.md b/docs/Leetcode_Solutions/Python/406._Queue_Reconstruction_by_Height.md new file mode 100644 index 000000000..87e551963 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/406._Queue_Reconstruction_by_Height.md @@ -0,0 +1,43 @@ +### 406. Queue Reconstruction by Height + +题目: + + + +难度: + +Medium + + +思路: +People are only counting (in their k-value) taller or equal-height others standing in front of them. +So a smallest person is completely irrelevant for all taller ones. And of all smallest people, +the one standing most in the back is even completely irrelevant for everybody else. Nobody is counting that person. +So we can first arrange everybody else, ignoring that one person. And then just insert that person appropriately. +Now note that while this person is irrelevant for everybody else, everybody else is relevant for this person - +this person counts exactly everybody in front of them. So their count-value tells you exactly the index they must be standing. + +So you can first solve the sub-problem with all but that one person and then just insert that person appropriately. +And you can solve that sub-problem the same way, first solving the sub-sub-problem with all +but the last-smallest person of the subproblem. And so on. The base case is when you have the sub-…-sub-problem of zero people. +You’re then inserting the people in the reverse order, i.e., that overall last-smallest person in the very end +and thus the first-tallest person in the very beginning. That’s what the above solution does, +Sorting the people from the first-tallest to the last-smallest, and inserting them one by one as appropriate. + +参考[stefan](https://leetcode.com/problems/queue-reconstruction-by-height/discuss/89359) + +```python +class Solution(object): + def reconstructQueue(self, people): + """ + :type people: List[List[int]] + :rtype: List[List[int]] + """ + people.sort(key=lambda (h, k): (-h, k)) + queue = [] + for p in people: + queue.insert(p[1], p) + return queue +``` + + diff --git a/docs/Leetcode_Solutions/Python/412._fizz_buzz.md b/docs/Leetcode_Solutions/Python/412._fizz_buzz.md new file mode 100644 index 000000000..76551be9f --- /dev/null +++ b/docs/Leetcode_Solutions/Python/412._fizz_buzz.md @@ -0,0 +1,68 @@ +### 412. Fizz Buzz + +题目: + + + +难度: +Easy + +一行 +```python +class Solution(object): + def fizzBuzz(self, n): + """ + :type n: int + :rtype: List[str] + """ + return [(not i%3)*"Fizz" + (not i%5)*"Buzz" or str(i) for i in range(1, n+1)] + +``` +```python +class Solution(object): + def fizzBuzz(self, n): + """ + :type n: int + :rtype: List[str] + """ + return [str(i) if (i%3!=0 and i%5!=0) else (('Fizz'*(i%3==0)) + ('Buzz'*(i%5==0))) for i in range(1,n+1)] + +``` + + +就是easy,不过可以参见这里,有一些讨论 + + + +我觉得这里一个用yield的想法还蛮不错 +``` +# the fizbuz logic, returns an iterator object that +# calculates one value at a time, not all ot them at once +def fiz(numbers): + for i in numbers: + if i % 15 == 0: + yield 'fizbuz' + elif i % 5 == 0: + yield 'buz' + elif i % 3 == 0: + yield 'fiz' + else: + yield str(i) + +# xrange evaluates lazily, good for big numbers +# matches well with the lazy-eval generator function +numbers = xrange(1,2**20) + +# this gets one number, turns that one number into fuz, repeat +print ' '.join(fiz(numbers)) + +# returns: 1 2 fiz 4 buz fiz [...] fiz 1048573 1048574 fizbuz +``` +- clearly separates fizbuz logic from concatenation +- is as plain and readeable as possible +- generator iterator does not keep all the array in memory +- so that you can do it on arbitrary numbers (see Euler problem #10) + +What I do not like in this solution is the three ifs, whereas the problem can be solved with two. + +Answer: because yield is efficient when you do not want to keep big arrays in memory just to iterate through them. But this question is not about big arrays. diff --git a/docs/Leetcode_Solutions/Python/413. Arithmetic Slices.md b/docs/Leetcode_Solutions/Python/413. Arithmetic Slices.md new file mode 100644 index 000000000..6aff8c826 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/413. Arithmetic Slices.md @@ -0,0 +1,84 @@ +### 413. Arithmetic Slices + + + +题目: + + + + +难度 : Medium + + + +思路: + +tag 是DP + +数从 i 到 j 之间的这个arithmetic 数 + +我的方法时间复杂度比较高O(N^2),从 i 开始数它的arithmetic slice,每个i数一遍,到 j + +AC代码 + +``` +class Solution(object): + def numberOfArithmeticSlices(self, A): + """ + :type A: List[int] + :rtype: int + """ + n = len(A) + if n < 3: + return 0 + else: + res = 0 + for i in range(n-2): + for j in range(i+2,n): + if A[j] - A[j-1] == A[i+1] - A[i]: + res += 1 + else: + break + return res +``` + + + +应该可以优化到O(N) + +不需要每个每个开始数,可以边数边移动 + +可以参考 + + + +O(N) 代码 + +``` +class Solution(object): + def numberOfArithmeticSlices(self, A): + """ + :type A: List[int] + :rtype: int + """ + n = len(A) + if n < 3: + return 0 + else: + res, cnt = 0, 2 + for i in range(2, n): + if A[i] - A[i-1] == A[i-1] - A[i-2]: + print i, i-1, i-2 + cnt += 1 + else: + if cnt > 2: + res += (cnt-1) * (cnt-2) / 2 + cnt = 2 + if cnt > 2: res += (cnt-1) * (cnt-2) / 2 + return res + + +``` + + + diff --git a/docs/Leetcode_Solutions/Python/414._third_maximum_number.md b/docs/Leetcode_Solutions/Python/414._third_maximum_number.md new file mode 100644 index 000000000..fc3652b98 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/414._third_maximum_number.md @@ -0,0 +1,46 @@ +###414. Third Maximum Number + +题目: + + + +难度: + +Easy + + +思路: + +用三个变量来记录,max, secondmax, thirdmax, + +- 遇到比max还大的就更新,当前max降级为secondmax,当前secondmax降级为thirdmax +- 遇到比max小但是比secondmax大的也这样做降级处理 +- 更thirdmax + + +AC代码 + + +``` +class Solution(object): + def thirdMax(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + m, sm, tm = float('-inf'), float('-inf'), float('-inf') + + for num in nums: + if num > m: + tm = sm + sm = m + m = num + elif num < m and num > sm: + tm = sm + sm = num + elif num < m and num < sm and num > tm: + tm = num + + return tm if tm != float('-inf') else m +``` + diff --git a/docs/Leetcode_Solutions/Python/415._add_strings.md b/docs/Leetcode_Solutions/Python/415._add_strings.md new file mode 100644 index 000000000..bfa319cdf --- /dev/null +++ b/docs/Leetcode_Solutions/Python/415._add_strings.md @@ -0,0 +1,61 @@ +###415. Add Strings + +题目: + + + +难度: +Easy + + +照抄2. Add Two Numbers的代码,超时 + +``` +class Solution(object): + def addStrings(self, num1, num2): + """ + :type num1: str + :type num2: str + :rtype: str + """ + if num1 == '' or num1 == '0': + return num2 + if num2 == '' or num2 == '0': + return num1 + if int(num1[-1]) + int(num2[-1]) < 10: + num3 = str(int(num1[-1]) + int(num2[-1]) ) + return self.addStrings(num1[:-1] , num2[:-1]) + num3 + else: + num3 = str(int(num1[-1]) + int(num2[-1]) - 10) + return self.addStrings(self.addStrings(num1[:-1] , num2[:-1]),'1') + num3 +``` + + + +换成迭代,并非递归再来尝试,看了别人的代码,真是精巧啊 + + +``` +class Solution(object): + def addStrings(self, num1, num2): + """ + :type num1: str + :type num2: str + :rtype: str + """ + result = [] + carry = 0 + idx1, idx2 = len(num1), len(num2) + while idx1 or idx2 or carry: + digit = carry + if idx1: + idx1 -= 1 + digit += int(num1[idx1]) + if idx2: + idx2 -= 1 + digit += int(num2[idx2]) + carry = digit > 9 + result.append(str(digit % 10)) + print result + return ''.join(result[::-1]) # 这里是reverse一下 +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/416. Partition Equal Subset Sum.md b/docs/Leetcode_Solutions/Python/416. Partition Equal Subset Sum.md new file mode 100644 index 000000000..1dee2d982 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/416. Partition Equal Subset Sum.md @@ -0,0 +1,87 @@ +### 416. Partition Equal Subset Sum + + + +题目: + + +难度: + +Medium + +记得算法考试考过证明这个问题是NP的,当时用的是subset sum是NP,然后来证明这个?如果我们能找到一个subset的sum是整个array sum的一半,那么问题解决。subset sum我们又可以继续转化,转成背包问题。 + +值得注意的是,这是subset sum,并不是subarray sum(这个明显要简单一些,因为subarray是连着的). + +subset sum也是有自己的[wikipedia page](https://en.wikipedia.org/wiki/Subset_sum_problem). + + + +当然,这也是一个subset problem,我们当然也可以用subset,加入和不加入,但是worst case O(2^n). + + + +对于subset sum的递推方程式: + +subset(arr,n,s) = subset(arr,n-1,s) or subset(arr, n-1, s- arrp[n-1]) + + + +画表可以开始,第一列全为1,是因为不选全部可以为0 + + + +``` + 0 1 2 3 4 5 6 8 9 10 11 +0 1 0 0 0 0 0 0 0 0 0 0 +1 1 1 0 0 0 0 0 0 0 0 0 +5 1 1 0 0 0 1 1 0 0 0 0 +5 1 1 0 0 0 1 1 0 0 0 1 +``` + + + +所以伪多项式算法写出来 + +AC代码 + + + +``` +class Solution(object): + def canPartition(self, nums): + """ + :type nums: List[int] + :rtype: bool + """ + def subset(nums, s): + dp = [[0 for i in range(s+1) ] for j in range(len(nums)+1)] + + dp[0][0] = 1 + # init the first col + for i in range(len(nums)+1 + dp[i][0] = 1 + + for i in range(1,len(nums)+1): + for j in range(1,s+1): + if dp[i-1][j] == 1: + dp[i][j] = 1 + elif j >= nums[i-1] and dp[i-1][j-nums[i-1]] ==1: + dp[i][j] = 1 + return dp[-1][-1] == 1 + + + + total = sum(nums) + if total % 2 == 1: + return False + else: + half = total / 2 + return subset(nums,half) == 1 + +``` + + + +当然可以小调整,比如一旦发现,提前return等等,但是时间上依旧是后20%,不知道时间上快很多的人是如何做到的||| + diff --git a/docs/Leetcode_Solutions/Python/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md b/docs/Leetcode_Solutions/Python/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md new file mode 100644 index 000000000..b0697b2a6 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md @@ -0,0 +1,74 @@ +### 421. Maximum XOR of Two Numbers in an Array + +题目: + + + +难度: + +Medium + +题目要求O(N)时间 + +看了半天的解法居然超时, +```python +class Solution(object): # 此法超时 +    def findMaximumXOR(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + '''The maxResult is a record of the largest XOR we got so far. if it's 11100 at i = 2, it means + before we reach the last two bits, 11100 is the biggest XOR we have, and we're going to explore + whether we can get another two '1's and put them into maxResult''' + max_res, mask = 0, 0 + + '''This is a greedy part, since we're looking for the largest XOR, we start + from the very begining, aka, the 31st postition of bits.''' + for i in range(32)[::-1]: + + '''The mask will grow like 100..000 , 110..000, 111..000, then 1111...111 + for each iteration, we only care about the left parts''' + mask |= (1 << i) + tmp = [] + for num in nums: + '''we only care about the left parts, for example, if i = 2, then we have + {1100, 1000, 0100, 0000} from {1110, 1011, 0111, 0010}''' + tmp.append(num & mask) + + '''if i = 1 and before this iteration, the maxResult we have now is 1100, + my wish is the maxResult will grow to 1110, so I will try to find a candidate + which can give me the greedyTry;''' + greedy_try = max_res | (1 << i) + + for i in tmp: + '''This is the most tricky part, coming from a fact that if a ^ b = c, then a ^ c = b; + now we have the 'c', which is greedyTry, and we have the 'a', which is leftPartOfNum + If we hope the formula a ^ b = c to be valid, then we need the b, + and to get b, we need a ^ c, if a ^ c exisited in our set, then we're good to go''' + if i ^ greedy_try in tmp: + max_res = greedy_try + '''If unfortunately, we didn't get the greedyTry, we still have our max, + So after this iteration, the max will stay at 1100.''' + return max_res +``` + + +只好想别的办法 + + +参考[stefan](https://leetcode.com/problems/maximum-xor-of-two-numbers-in-an-array/discuss/91050?page=3) +```python +class Solution(object): + def findMaximumXOR(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + answer = 0 + for i in range(32)[::-1]: + answer <<= 1 + prefixes = {num >> i for num in nums} + answer += any(answer^1 ^ p in prefixes for p in prefixes) + return answer +``` diff --git a/docs/Leetcode_Solutions/Python/422. Valid Word Square.md b/docs/Leetcode_Solutions/Python/422. Valid Word Square.md new file mode 100644 index 000000000..17cb1144d --- /dev/null +++ b/docs/Leetcode_Solutions/Python/422. Valid Word Square.md @@ -0,0 +1,48 @@ +### 422. Valid Word Square + + + + + +题目: + + + + +难度 : Easy + + + +思路: + +就是对比一个矩阵内 xy == yx? + +try /except 真是好用 + +AC代码 + + + +``` +class Solution(object): + def validWordSquare(self, words): + """ + :type words: List[str] + :rtype: bool + """ + n = len(words) + for i in xrange(n): + m = len(words[i]) + for j in xrange(m): + try: + if words[i][j] != words[j][i]: + return False + except: + return False + return True +``` + + + + + diff --git a/docs/Leetcode_Solutions/Python/434._number_of_segments_in_a_string.md b/docs/Leetcode_Solutions/Python/434._number_of_segments_in_a_string.md new file mode 100644 index 000000000..424472a5a --- /dev/null +++ b/docs/Leetcode_Solutions/Python/434._number_of_segments_in_a_string.md @@ -0,0 +1,27 @@ +### 434. Number of Segments in a String + +题目: + + + +难度: + +Easy + + +作弊神器Python + + +```python +class Solution(object): + def countSegments(self, s): + """ + :type s: str + :rtype: int + """ + return len(s.split()) +``` + +不过对于比如C++这种语言来说,应该是O(N),扫一圈应该也能得到正确答案 + +总之拿Python做string的题目就是作弊啊 diff --git a/docs/Leetcode_Solutions/Python/437._path_sum_iii.md b/docs/Leetcode_Solutions/Python/437._path_sum_iii.md new file mode 100644 index 000000000..ac5c314a6 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/437._path_sum_iii.md @@ -0,0 +1,39 @@ +### 437. Path Sum III + + + +题目: + + + +难度: +Easy + +思路: + + + + +```python +class Solution(object): + def pathSum(self, root, sum): + """ + :type root: TreeNode + :type sum: int + :rtype: int + """ + if not root: + return 0 + res = self.auxPathSum(root, sum) + res += self.pathSum(root.left, sum) + res += self.pathSum(root.right, sum) + return res + def auxPathSum(self, root, sum): + if not root: + return 0 + if sum == root.val: +            # 因为可能有负值, 所以sum为0也会有解, 必须加上 +            return 1 + self.auxPathSum(root.left, 0) + self.auxPathSum(root.right, 0) + else: + return self.auxPathSum(root.left, sum - root.val) + self.auxPathSum(root.right, sum - root.val) +``` diff --git a/docs/Leetcode_Solutions/Python/438._Find_All_Anagrams_in_a_String.md b/docs/Leetcode_Solutions/Python/438._Find_All_Anagrams_in_a_String.md new file mode 100644 index 000000000..2b8519852 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/438._Find_All_Anagrams_in_a_String.md @@ -0,0 +1,92 @@ +### 438. Find All Anagrams in a String + + +题目: + + + +难度: + +Easy + + + +思路 + +刚开始打算直接遍历整个s,时间复杂度为O(m*n),m和n分别为字符串p和s的长度,但是超时了 + + + +``` + +class Solution(object): # 此法超时 +    def findAnagrams(self, s, p): + """ + :type s: str + :type p: str + :rtype: List[int] + """ + l, res = len(p), [] + for i in range(len(s)): + if collections.Counter(s[i:i+l]) == collections.Counter(p): + res.append(i) + return res +``` + +于是用双指针,left和right都从0开始往后遍历 +``` +class Solution(object): + def findAnagrams(self, s, p): + """ + :type s: str + :type p: str + :rtype: List[int] + """ + res, cnts = [], [0] * 26 + for c in p: + cnts[ord(c) - ord('a')] += 1 + left, right = 0, 0 + while right < len(s): + cnts[ord(s[right]) - ord('a')] -= 1 + while left <= right and cnts[ord(s[right]) - ord('a')] < 0: + cnts[ord(s[left]) - ord('a')] += 1 + left += 1 + if right - left + 1 == len(p): + res.append(left) + right += 1 + return res +``` +模板大法好 +```python +class Solution(object): + def findAnagrams(self, s, p): + """ + :type s: str + :type p: str + :rtype: List[int] + """ + res = [] + if len(p) > len(s): + return res + maps = collections.Counter(p) + counter = len(maps.keys()) + begin, end, head, length = 0, 0, 0, sys.maxint + while end < len(s): + if s[end] in maps: + maps[s[end]] -= 1 + if maps[s[end]] == 0: + counter -= 1 + end += 1 + while counter == 0: + if s[begin] in maps: + maps[s[begin]] += 1 + if maps[s[begin]] > 0: + counter += 1 + if end - begin == len(p): + res.append(begin) + begin += 1 + return res +``` + + + diff --git a/docs/Leetcode_Solutions/Python/439. Ternary Expression Parser.md b/docs/Leetcode_Solutions/Python/439. Ternary Expression Parser.md new file mode 100644 index 000000000..065f56cd7 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/439. Ternary Expression Parser.md @@ -0,0 +1,58 @@ +### 439. Ternary Expression Parser + + + + + +题目: + + + + +难度: +Medium + +思路: + +其实这个和算术运算蛮像,但是不同于运算,有operator precedence差别,这个是三目运算,并且需要检查是否符合运算规则。 + + + +运用stack 然后每次查看是否形成运算式再来做处理 + +AC代码: + +``` +class Solution(object): + def parseTernary(self, expression): + """ + :type expression: str + :rtype: str + """ + n = len(expression) + + stack = [] + + for i in range(n-1, -1, -1): + char = expression[i] + stack.append(char) + + if len(stack) >= 5: + op0 = stack.pop() + op1 = stack.pop() + op2 = stack.pop() + op3 = stack.pop() + op4 = stack.pop() + + if op1 == '?' and op3 == ':': + res = op2 if op0 == 'T' else op4 + stack.append(res) + else: + stack.append(op4) + stack.append(op3) + stack.append(op2) + stack.append(op1) + stack.append(op0) + return stack[0] +``` + diff --git a/docs/Leetcode_Solutions/Python/441._arranging_coins.md b/docs/Leetcode_Solutions/Python/441._arranging_coins.md new file mode 100644 index 000000000..5ef0dae95 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/441._arranging_coins.md @@ -0,0 +1,29 @@ +###441. Arranging Coins + +题目: + + + +难度: +Easy + + +可以直接O(1),公式: + +i(i+1)/2 = n + +解i + +i = ( sqrt(8*n+1) -1 )/ 2 + + +``` +import math +class Solution(object): + def arrangeCoins(self, n): + """ + :type n: int + :rtype: int + """ + return int((math.sqrt( 8 * n + 1) - 1 )/ 2 ) +``` \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/448._Find_All_Numbers_Disappeared_in_an_Array.md b/docs/Leetcode_Solutions/Python/448._Find_All_Numbers_Disappeared_in_an_Array.md new file mode 100644 index 000000000..b03105e6b --- /dev/null +++ b/docs/Leetcode_Solutions/Python/448._Find_All_Numbers_Disappeared_in_an_Array.md @@ -0,0 +1,25 @@ +### 448. Find All Numbers Disappeared in an Array + +题目: + + + +难度: + +Easy + + + + + +```python +class Solution(object): + def findDisappearedNumbers(self, nums): + """ + :type nums: List[int] + :rtype: List[int] + """ + return list(set(range(1, len(nums)+1)) - set(nums)) +``` + + diff --git a/docs/Leetcode_Solutions/Python/450. Delete Node in a BST.md b/docs/Leetcode_Solutions/Python/450. Delete Node in a BST.md new file mode 100644 index 000000000..3f622c90a --- /dev/null +++ b/docs/Leetcode_Solutions/Python/450. Delete Node in a BST.md @@ -0,0 +1,62 @@ +### 450. Delete Node in a BST + + + +题目: + + +难度 : Medium + + + +思路: + +从二叉搜索树中删除节点x的方法如下: + +• 如果x没有子节点,或者只有一个孩子,直接将x“切下”; + +• 否则,x有两个孩子,我们用其右子树中的最小值替换掉x,然后将右子树中的这一最小值递归的“切掉”。 +​ + + + +AC代码 + + + +```python +class Solution(object): + def deleteNode(self, root, key): + """ + :type root: TreeNode + :type key: int + :rtype: TreeNode + """ + def findmin(root): + while root.left: + root = root.left + return root + + + if not root : return None + elif key < root.val: root.left = self.deleteNode(root.left, key) + elif key > root.val : root.right = self.deleteNode(root.right, key) + else: + if root.left and root.right: + tmp = findmin(root.right) + root.val = tmp.val + root.right = self.deleteNode(root.right, tmp.val) + else: + if not root.left: + root = root.right + elif not root.right: + root = root.left + return root +``` + +​ + + + +其实这个代码还是需要花点时间来理解,需要画个图,理解这个root是每个stack return回去然后被接在原来的树上的,if 这个node并不是在node左右。 + diff --git a/docs/Leetcode_Solutions/Python/453._Minimum_Moves_to_Equal_Array_Elements.md b/docs/Leetcode_Solutions/Python/453._Minimum_Moves_to_Equal_Array_Elements.md new file mode 100644 index 000000000..2e9668086 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/453._Minimum_Moves_to_Equal_Array_Elements.md @@ -0,0 +1,72 @@ +### 453. Minimum Moves to Equal Array Elements + + + + + +题目: + + + + +难度 : Easy + + + +思路: + +naive TLE 代码: + +每次都是给并不是最大的元素加1直到全部相等。 + +``` +class Solution(object): + def minMoves(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + res = 0 + while(not all(x == nums[0] for x in nums)): + nums.sort() + for i in range(len(nums) - 1): + nums[i] += 1 + res += 1 + + return res +``` + + + +给的测试例子是 `[1,2147483647]`能不TLE么?tag 是Math,所以要用观察到的结果来做吧? + +所以就是每个和最小值来比,看到底要增加多少,这是观察,但不是证明 + + + + + +AC代码 + +```python +class Solution(object): + def minMoves(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + res = 0 + minVal = min(nums) + for num in nums: + res += num -minVal + return res +``` + + + +类证明: + + + +> 其实给n-1个数字加1,效果等同于给那个未被选中的数字减1,比如数组[1,2,3], 给除去最大值的其他数字加1,变为[2,3,3],我们全体减1,并不影响数字间相对差异,变为[1,2,2],这个结果其实就是原始数组的最大值3自减1,那么问题也可能转化为,将所有数字都减小到最小值,这样难度就大大降低了,我们只要先找到最小值,然后累加每个数跟最小值之间的差值即可 + diff --git a/docs/Leetcode_Solutions/Python/459._Repeated_Substring_Pattern.md b/docs/Leetcode_Solutions/Python/459._Repeated_Substring_Pattern.md new file mode 100644 index 000000000..f32b6eb4b --- /dev/null +++ b/docs/Leetcode_Solutions/Python/459._Repeated_Substring_Pattern.md @@ -0,0 +1,31 @@ +### 459. Repeated Substring Pattern + + +题目: + + + +难度: + +Easy + + +思路 + +- 如果存在这样的子串,那么子串的第一个字符和最后一个字符肯定跟父字符串```s```的相同。 +- 因此构建一个新字符串```s*2```(两个父字符串相加),去掉首尾字符 +- 如果此时能在其中找到```s```,说明存在这样的子串 + + + + +```python +class Solution(object): + def repeatedSubstringPattern(self, s): + """ + :type s: str + :rtype: bool + """ + return (s*2)[1:-1].find(s) != -1 +``` + diff --git a/docs/Leetcode_Solutions/Python/461._Hamming Distance.md b/docs/Leetcode_Solutions/Python/461._Hamming Distance.md new file mode 100644 index 000000000..4a8d63d81 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/461._Hamming Distance.md @@ -0,0 +1,66 @@ +### 461. Hamming Distance + + + +题目: + For binary strings *a* and *b* the Hamming distance is equal to the number of ones ([Hamming weight](https://en.wikipedia.org/wiki/Hamming_weight)) in *a* [XOR](https://en.wikipedia.org/wiki/Exclusive_or) *b*. +> +> + + + +一行无敌 +```python +class Solution(object): + def hammingDistance(self, x, y): + """ + :type x: int + :type y: int + :rtype: int + """ + return bin(x^y).count('1') +``` +AC代码 + +```python +class Solution(object): + def hammingDistance(self, x, y): + """ + :type x: int + :type y: int + :rtype: int + """ + dist = 0 + val = x ^ y + + while val: + dist += 1 + val &= val - 1 + + return dist +``` + + + + + diff --git a/docs/Leetcode_Solutions/Python/463._Island_Perimeter.md b/docs/Leetcode_Solutions/Python/463._Island_Perimeter.md new file mode 100644 index 000000000..bedc5f8a1 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/463._Island_Perimeter.md @@ -0,0 +1,38 @@ +### 463. Island Perimeter + + + +题目: + + + +难度: +Easy + +思路: + + + + +```python +class Solution(object): + def islandPerimeter(self, grid): + """ + :type grid: List[List[int]] + :rtype: int + """ + # 每一个陆地单元格的周长为4,当两单元格上下或者左右相邻时,令周长减2 + h = len(grid) + w = len(grid[0]) if h else 0 + ans = 0 + for x in range(h): + for y in range(w): + if grid[x][y] == 1: + ans += 4 + # 因为x+1还在后面,所以不需要考虑,即只需要考虑左边和上边,因为循环已经出现过该点了 + if x > 0 and grid[x - 1][y]: + ans -= 2 + if y > 0 and grid[x][y - 1]: + ans -= 2 + return ans +``` diff --git a/docs/Leetcode_Solutions/Python/467._Unique_Substrings_in_Wraparound_String.md b/docs/Leetcode_Solutions/Python/467._Unique_Substrings_in_Wraparound_String.md new file mode 100644 index 000000000..85c7a9d97 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/467._Unique_Substrings_in_Wraparound_String.md @@ -0,0 +1,42 @@ +### 467. Unique Substrings in Wraparound String + +题目: + + + +难度: + +Medium + + +思路: + +有个无限长的字符串s,是由无数个「abcdefghijklmnopqrstuvwxyz」组成的。现在给你一个字符串p,求多少个p的非空子串在s中出现了? +   + +先考虑s的特性,满足条件(在s中)的p的子串只可能是abcd……z的连续序列(z后面是a), 我们只需要处理p中连续的部分就可以了。但是 举个例子,h-k的序列出现了,a-z的序列也出现了,那么只需要计算a-z的子串个数就可以了,因为h-k已经包含在a-z里了。考虑所有包含的情况,似乎就变得复杂了,a-z还可能被包含在x-za-z中,甚至更长的序列中。 + +  但是如果考虑以某个字母结尾的子串个数,那么p中以该字母结尾的连续序列长度,就是满足条件的子串个数。如果以字母x结尾的连续序列有多个, 我们只需要最长的一个即可,因为其他短的序列都已经被长的包含进去了,例如'bcd'和'abcd',有了'abcd'就知道以d结尾的子串有4个,分别是‘d’,'cd','bcd','abcd',‘bcd’已经被包含进去了。最后求和,问题就解决了。 这样思考就非常简单了,代码也可以很容易写出来。 + + + +```python +class Solution(object): + def findSubstringInWraproundString(self, p): + """ + :type p: str + :rtype: int + """ +        letters = [0] * 26         #开始默认每个都是0 +        length = 0 + for i in range(len(p)): + curr = ord(p[i]) - ord('a') +            if i > 0 and ord(p[i-1]) != (curr-1)%26 + ord('a'):   #一旦开始不相等了就要将length重置为0 +                length = 0 +            length += 1     #否则就说明继续与前面一个字符是连续的,length要加1才行 +            if length > letters[curr]:     #length一直加,如果到i这个字符length比它的目前的最大连续子串长度还要长,那么肯定要更新letters +                letters[curr] = length + return sum(letters) +``` + + diff --git a/docs/Leetcode_Solutions/Python/469. Convex Polygon.md b/docs/Leetcode_Solutions/Python/469. Convex Polygon.md new file mode 100644 index 000000000..2afb7d070 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/469. Convex Polygon.md @@ -0,0 +1,88 @@ +### 469. Convex Polygon + + + +题目: + You can make things a lot easier than the Gift-Wrapping Algorithm... that's a good answer when you have a set of points w/o any particular boundary and need to find the convex hull. +> +> A polygon is a set of points in a list where the consecutive points form the boundary. It is much easier to figure out whether a polygon is convex or not (and you don't have to calculate any angles, either): +> +> +> +> For each consecutive pair of edges of the polygon (each triplet of points), compute the z-component of the cross product of the vectors defined by the edges pointing towards the points in increasing order. Take the cross product of these vectors: +> +> The polygon is convex if the z-components of the cross products are either all positive or all negative. Otherwise the polygon is nonconvex. +> +> given p[k], p[k+1], p[k+2] each with coordinates x, y: +> +>  dx1 = x[k+1]-x[k] +> +>  dy1 = y[k+1]-y[k] +> +>  dx2 = x[k+2]-x[k+1] +> +>  dy2 = y[k+2]-y[k+1] +> +>  zcrossproduct = dx1 * dy2 - dy1 * dx2 +> +> If there are N points, make sure you calculate N cross products, e.g. be sure to use the triplets (p[N-2],p[N-1],p[0]) and (p[N-1],p[0],p[1]). + + + +所以根据这个答案AC代码 + +``` +class Solution(object): + def isConvex(self, points): + """ + :type points: List[List[int]] + :rtype: bool + """ + n = len(points) + zcrossproduct = None + + for i in range(-2, n-2): + x = [ points[i][0], points[i+1][0], points[i+2][0] ] + y = [ points[i][1], points[i+1][1], points[i+2][1] ] + + dx1 = x[1] - x[0] + dy1 = y[1] - y[0] + + dx2 = x[2] - x[1] + dy2 = y[2] - y[1] + + if not zcrossproduct: + zcrossproduct = dx1 * dy2 - dy1 * dx2 + elif ( dx1 * dy2 - dy1 * dx2 ) * zcrossproduct < 0: + return False + return True +``` + diff --git a/docs/Leetcode_Solutions/Python/476._Number_Complement.md b/docs/Leetcode_Solutions/Python/476._Number_Complement.md new file mode 100644 index 000000000..91b253972 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/476._Number_Complement.md @@ -0,0 +1,28 @@ +### 476. Number Complement + + + +题目: + + + +难度: +Easy + + + + + +```python +class Solution(object): + def findComplement(self, num): + """ + :type num: int + :rtype: int + """ + i = 1 << (len(bin(num)) -2) # 因为bin函数转化成的格式是‘0bXXXX’,头两个‘0b’要减掉去 + return (i - 1) ^ num + # return (i - 1) - num # 这样也可以 +``` + + diff --git a/docs/Leetcode_Solutions/Python/477._Total_Hamming_Distance.md b/docs/Leetcode_Solutions/Python/477._Total_Hamming_Distance.md new file mode 100644 index 000000000..cf5bc54a7 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/477._Total_Hamming_Distance.md @@ -0,0 +1,82 @@ +### 477. Total Hamming Distance + + + +题目: + + + +难度: +Medium + +思路: + + +第一想法就是暴力,直接超时 + +``` +class Solution(object): # 此法超时 + def totalHammingDistance(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + res = 0 + for i in range(len(nums)): + for j in range(i+1, len(nums)): + res += bin(nums[i]^nums[j]).count('1') + return res +``` + + +前面的解法是```O(n^2)```所以超时,所以我们想想有没有```O(n)```的解法 +对于所有的数字,我们先从右数第一位开始算,如果一共有```n```个数字,其中```k```个数字的右数第一位是```‘1’```,其他```n-k```个数字的右数第一位是```‘0’```, +所以这一位对最终```res```的贡献就是```k*(n-k)```,这样我们的时间复杂度就是```O(32n)```,也就是```O(N)```了 + +``` +for each “column” or bit position, once you count the number of set bits you can figure out the number of pairs +that will contribute to the count using combination logic. + +Consider you have 10 numbers and only one of them is a 1 the rest are zeros. How many (1, 0) pairs can you make? +Clearly you can make 9, pair the 1 with each of the other 9 zeros. If you have 2 ones, +you can pair each of those with the other 8 zeros giving 2*8 = 16. +Keep going and you see that you can pair each 1 with each zero so the number of pairs is just the number of 1’s times the number of 0’s. + +This would be an O(32 * n) solution which is an O(n) solution, no space used. +``` + +AC代码 + +```python +class Solution(object): + def totalHammingDistance(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + # iterate thru "column" or bit position + # Note: you could stop at 10^9 as stated in the problem if you want to optimize + res = 0 + for i in range(32): + mask = 1 << i + count_ones, count_zeros = 0, 0 + for num in nums: + if num & mask != 0: + count_ones += 1 + else: + count_zeros += 1 + res += count_ones * count_zeros + return res +``` + +上面的代码简化一下就是[stefan大神(老流氓罒ω罒)](https://leetcode.com/problems/total-hamming-distance/discuss/96229)的无敌一行了 + +```python +class Solution(object): # 此法超时 + def totalHammingDistance(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + return sum(b.count('0') * b.count('1') for b in zip(*map('{:032b}'.format, nums))) +``` diff --git a/docs/Leetcode_Solutions/Python/485._Max_Consecutive_Ones.md b/docs/Leetcode_Solutions/Python/485._Max_Consecutive_Ones.md new file mode 100644 index 000000000..422a70c92 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/485._Max_Consecutive_Ones.md @@ -0,0 +1,40 @@ +### 485. Max Consecutive Ones + + + +题目: + + + +难度: +Easy + +思路: + + +一行无敌 +```python +class Solution(object): + def findMaxConsecutiveOnes(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + return len(max(''.join(map(str, nums)).split('0'))) +``` + +```python +class Solution(object): + def findMaxConsecutiveOnes(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + res, count = [], 0 + for x in nums: + count = 0 if x == 0 else count + 1 + res.append(count) + return max(res) +``` + + diff --git a/docs/Leetcode_Solutions/Python/587._Erect_the_Fence .md b/docs/Leetcode_Solutions/Python/587._Erect_the_Fence .md new file mode 100644 index 000000000..f61d75b3c --- /dev/null +++ b/docs/Leetcode_Solutions/Python/587._Erect_the_Fence .md @@ -0,0 +1,133 @@ + + +### 587. Erect the Fence + + +题目: + + + +难度: + +Hard + + + +思路 + +题目要求用一个围栏把所有的点(🌲)围起来,然后求处于围栏上点(🌲)的集合。 + +我们可以发现,从最左边的那个点一直往右走,只要一直都是走的逆时针方向,那么我们一定可以找到这条围栏。那么接下来就考虑最简单的情况, + +- 只有两个点```p```和```q```,我们从```p```走到```q```,当```p```到原点这条直线的斜率小于```q```到原点这条直线的斜率时,```p->q```就是沿逆时针方向走的; +- 接下来考虑3个点:```p,q,r```,以```p```为参照点(即前面的原点),那么从```q```走到```r```的时候,只要```q```到```q```这条直线的斜率小于```r```到```p```这条直线的斜率,```q->r```就是沿逆时针方向走的。 + +因此,我们只要构建一个```orientation```函数,就可以判断出目前我们的围栏是不是沿着逆时针在走下去了。 + +我们用一个```stack```来存放目前认为在围栏上的点的集合,然后把所有的点按照指定规则排好序:```先按照点的x坐标升序排列,如果x相等则按照点的y坐标升序排列```。这样我们依次取点,只要```stack```里面的点大于等于```2```个我们就要无限进行判断是否走的是逆时针,如果不是就把```stack```里面最后那个点```pop```出去(可能一直```pop```到只剩一个点),否则就把目前的这个点加入到```stack```中去,因为目前它还是在逆时针方向上的。 + +从左往右走完一遍```points```之后,我们围栏的下部分```lower hull```就构建好了,此时我们还要构建围栏的```upper hull```,因此我们将```points```逆序一下,从右往左再来一次遍历,仍然看是否走的是逆时针。但是这次遍历我们需要进行一个判断,就是之前放进```stack```的点,此时我们还是会经过它,如果它已经在```stack```里面了,我们就不需要再加进去了,同时这样也避免了我们把最左边的点重复加进去。 + + + +```python +python +# import functools +class Solution: + def outerTrees(self, points): + """ + :type points: List[Point] + :rtype: List[Point] + """ + def orientation(p, q, r): + return (q.y - p.y)*(r.x - p.x) - (r.y - p.y)*(q.x - p.x) + # def myComparator(p,q): + # return p.x - q.x if p.x != q.x else p.y - q.y + stack= [] + # points.sort(key = functools.cmp_to_key(myComparator)) + points.sort(key = lambda p: (p.x, p.y)) + for i in range(len(points)): + while (len(stack) >= 2 and orientation(stack[-2],stack[-1],points[i]) > 0): + stack.pop() + stack.append(points[i]) + points.reverse(); + for i in range(len(points)): + while (len(stack) >= 2 and orientation(stack[-2],stack[-1],points[i]) > 0): + stack.pop() + if points[i] not in stack: + stack.append(points[i]) + return stack +``` +简化python版本 +```python +class Solution(object): + def outerTrees(self, points): + """ + :type points: List[Point] + :rtype: List[Point] + """ + def orientation(p, q, r): + return (q.y - p.y) * (r.x - q.x) - \ + (q.x - p.x) * (r.y - q.y) + + hull = [] + points.sort(key=lambda p: (p.x, p.y)) + + for i in itertools.chain(xrange(len(points)), \ + reversed(xrange(len(points)))): + while len(hull) >= 2 and \ + orientation(hull[-2], hull[-1], points[i]) > 0: + hull.pop() + hull.append(points[i]) + + return list(set(hull)) +``` + +下面是小傅大神的代码,本来想叫‘’傅神‘’的,结果这名字🤦‍♂️(手动捂脸)[小傅每日一题587](https://www.bilibili.com/video/av15446980/) + +另外其中的```stack.pop()```这行代码注释掉也是可以的 + +```java +java +class Solution { + public List outerTrees(Point[] points) { + List res = new ArrayList(); + Arrays.sort(points, new Comparator(){ + @Override + public int compare(Point p, Point q){ + return p.x == q.x ? p.y - q.y : p.x - q.x; + } + }); + Stack stack = new Stack<>(); + for (int i = 0; i < points.length; i++){ + while(stack.size() >= 2 && orientation(stack.get(stack.size() - 2), stack.peek(), points[i]) > 0){ + stack.pop(); + } + stack.push(points[i]); + } + //stack.pop(); + for (int i = points.length - 1; i >= 0; i--){ + while(stack.size() >= 2 && orientation(stack.get(stack.size() - 2), stack.peek(), points[i]) > 0){ + stack.pop(); + } + stack.push(points[i]); + } + res.addAll(new HashSet<>(stack)); + return res; + } + + public int orientation(Point p, Point q, Point r){ + return (q.y - p.y)*(r.x - p.x) - (r.y - p.y)*(q.x - p.x); + } +} +``` + + + + + +Author: Keqi Huang + +If you like it, please spread your support + +![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) diff --git a/docs/Leetcode_Solutions/Python/599._Minimum_Index_Sum_of_Two_Lists.md b/docs/Leetcode_Solutions/Python/599._Minimum_Index_Sum_of_Two_Lists.md new file mode 100644 index 000000000..1682fab62 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/599._Minimum_Index_Sum_of_Two_Lists.md @@ -0,0 +1,58 @@ +### 599. Minimum Index Sum of Two Lists + + +题目: + + + +难度: + +Easy + + + +思路 + +两个list,我们首先要取得它们相同的部分,并且之后我们还要知道哪个相同的字符串在两个list中的index之和是最小的。 +- 所以我们首先遍历list1,只要目前这个字符串在list2中,我们就以[字符串,index之和]的形式将其存放到ress中,同时维护一个index保持为最小index之和的值 +- 对于ress,我们遍历,只要某一项的index之和等于最小index之和我们就将他的字符串以i[0]的形式append到res中去, +- return res + +### 程序变量解释 + +- ress format: [[string1, sumOfIndex1], [string2, sumOfIndex2]... ] +- index 最小sunOfIndex值 +- res 最终结果,foramt: [string1, string2,. ...] + + + + +```python +python +class Solution: + def findRestaurant(self, list1, list2): + """ + :type list1: List[str] + :type list2: List[str] + :rtype: List[str] + """ + ress = [] + index = 2000 + for i in list1: + if i in list2: + ress.append([i, list1.index(i)+list2.index(i)]) + index = min(index, list1.index(i)+list2.index(i)) + res = [] + for i in ress: + if i[1] == index: + res.append(i[0]) + return res +``` + + + +Author: Keqi Huang + +If you like it, please spread your support + +![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) diff --git a/docs/Leetcode_Solutions/Python/647._Palindromic_Substrings.md b/docs/Leetcode_Solutions/Python/647._Palindromic_Substrings.md new file mode 100644 index 000000000..8ee312ad5 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/647._Palindromic_Substrings.md @@ -0,0 +1,89 @@ +### 647. Palindromic Substrings + +题目: + + + +难度: + +Medium + + +思路 + +这道题要求给定一个字符串中的所有回文子串的个数,所以我想到了Manacher算法, +[Manacher算法](https://www.felix021.com/blog/read.php?2040) + +Manacher算法增加两个辅助变量id和mx,其中id表示最大回文子串中心的位置,mx则为id+P[id],也就是最大回文子串的边界。得到一个很重要的结论: + +- 如果mx > i,那么P[i] >= Min(P[2 * id - i], mx - i) . 为什么这样说呢,下面解释 + +下面,令j = 2*id - i,也就是说j是i关于id的对称点。 + +- 当 mx - i > P[j] 的时候,以S[j]为中心的回文子串包含在以S[id]为中心的回文子串中,由于i和j对称,以S[i]为中心的回文子串必然包含在以S[id]为中心的回文子串中,所以必有P[i] = P[j]; +![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher1.png) + +- 当 P[j] >= mx - i 的时候,以S[j]为中心的回文子串不一定完全包含于以S[id]为中心的回文子串中,但是基于对称性可知,下图中两个绿框所包围的部分是相同的,也就是说以S[i]为中心的回文子串,其向右至少会扩张到mx的位置,也就是说 P[i] >= mx - i。至于mx之后的部分是否对称,再具体匹配。 +![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher2.png) +所以P[i] >= Min(P[2 * id - i], mx - i),因为以j为中心的绘回文子串的左边界可能会比mx关于id的对称点要大,此时只能证明P[i]=P[2 * id - i] +- 此外,对于 mx <= i 的情况,因为无法对 P[i]做更多的假设,只能让P[i] = 1,然后再去匹配。 +此题还可以借鉴我leetcode第5题的解析, +[thining-in-lc-5](https://github.com/Lisanaaa/thinking_in_lc/blob/master/005._longest_palindromic_substring.md) + +这道题的基本思想是将以每一个字符为中心的回文子串个数相加,还是用一个小例子来解释 +![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher3.jpg) +其实,以‘#’为中心的回文子串就代表这个子串的长度是偶数,类似于'abba'这种 +但是其实这个字符本身也是一个回文子串,所以叠加的形式是count += (P[i]+1)/2,为什么呢,以下是解释: +- 对于每一个以字符‘#’为中心的回文子串,其P值绝对是偶数,所以```(P[i]+1)/2 = P[i]/2```,并不影响 +- 对于每一个以非字符‘#’为中心的回文子串,其P值绝对是奇数,这就保证了单个字母的回文子串(```例如'a'也算一个回文子串```)也被加起来了,因为```(P[i]+1)/2 = P[i]/2+1``` + + +```python +class Solution(object): + def countSubstrings(self, s): + """ + :type s: str + :rtype: str + """ + def preProcess(s): + if not s: + return ['^', '$'] + T = ['^'] + for c in s: + T += ['#', c] + T += ['#', '$'] + return T + T = preProcess(s) + P = [0] * len(T) + id, mx, count = 0, 0, 0 + for i in range(1,len(T) - 1): + j = 2*id - i + if mx > i: + P[i] = min(mx - i, P[j]) + else: + P[i] = 0 + while T[i+P[i]+1] == T[i-P[i]-1]: + P[i] += 1 + if (i + P[i]) > mx: + id, mx = i, i + P[i] + for i in range(len(P)): + count += (P[i]+1)/2 + return count +``` +python无敌啊!!!有没有天理啊,手动滑稽😏😏😏😏!一行解法: +```python +class Solution(object): + def countSubstrings(self, s): + """ + :type s: str + :rtype: int + """ + return sum(len(os.path.commonprefix((s[:i][::-1], s[i:]))) + + len(os.path.commonprefix((s[:i][::-1], s[i + 1:]))) + 1 + for i in range(len(s))) +``` +解释下为啥要加两次,因为回文串有以下两种形式: +- ‘abcba’ +- 'abba' + +那为啥要加那个1呢,上面解释过了,单个字符也算是一个回文子串呀,嘻嘻😁 diff --git a/docs/Leetcode_Solutions/Python/657._Judge_Route_Circle.md b/docs/Leetcode_Solutions/Python/657._Judge_Route_Circle.md new file mode 100644 index 000000000..12827f576 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/657._Judge_Route_Circle.md @@ -0,0 +1,23 @@ +### 657. Judge Route Circle +题目: + + + +难度: + +Easy + + + + +```python +class Solution(object): + def judgeCircle(self, moves): + """ + :type moves: str + :rtype: bool + """ + return moves.count('D') == moves.count('U') and moves.count('R') == moves.count('L') +``` + + diff --git a/docs/Leetcode_Solutions/Python/665._Non-decreasing_Array.md b/docs/Leetcode_Solutions/Python/665._Non-decreasing_Array.md new file mode 100644 index 000000000..cf05d3c9e --- /dev/null +++ b/docs/Leetcode_Solutions/Python/665._Non-decreasing_Array.md @@ -0,0 +1,48 @@ +### 665. Non-decreasing Array + +题目: + + + +难度: + +Easy + + +思路 + +从index=1的元素依次检查,只要不符合规则则让count+1,如果count>1则肯定不符合返回False +但是我们在发现nums[i]小于nums[i-1]的时候,我们就必须要对原数组作出改变了,来让它的后面index部分尽可能满足条件 +下面就是两种情况: +- 2,4,2,6 + +如果是这种情况,当index=2时,不满足条件,但是i=0的元素是小于i=2处元素的,我们需要改变的是i-1处的元素,也就是将4改变成i=2处元素即2,最终变成2,2,2,6 + +- 3,4,2,6 + +这种情况如果我们将4变成2那么仍然是不满足条件的,此时我们需要将2变成4,即将i处元素变为i-1处元素 + +在每一次不符合条件的时候我们都检查一下count,如果count大于1的话我们就返回False,否则最终就返回True + +```python +class Solution(object): + def checkPossibility(self, nums): + """ + :type nums: List[int] + :rtype: bool + """ + count = 0 + for i in range(1,len(nums)): + if nums[i] < nums[i-1]: + count += 1 + if count > 1: + return False + if i - 2 < 0 or nums[i-2] <= nums[i]: + nums[i-1] = nums[i] + else: + nums[i] = nums[i-1] + return True +``` + + + diff --git a/docs/Leetcode_Solutions/Python/672._Bulb_Switcher_II.md b/docs/Leetcode_Solutions/Python/672._Bulb_Switcher_II.md new file mode 100644 index 000000000..2441178f4 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/672._Bulb_Switcher_II.md @@ -0,0 +1,74 @@ +### 672. Bulb Switcher II + +题目: + + + +难度: + +Medium + + +思路 + +这道题又是一个数学题。找规律呀找规律。 +我们只需要考虑当 n<=2 and m < 3 的特殊情形。因为当 n >2 and m >=3, 结果肯定是 8. +The four buttons: + +- Flip all the lights. +- Flip lights with even numbers. +- Flip lights with odd numbers. +- Flip lights with (3k + 1) numbers, k = 0, 1, 2, ... + +如果我们使用了 button 1 和 2, 其效果等同于使用 button 3 。 +类似的.. + +- 1 + 2 --> 3 +- 1 + 3 --> 2 +- 2 + 3 --> 1 + +所以,只有 8 种情形。 + +***灯全亮, 操作1, 操作2, 操作3, 操作4, 操作1+4, 操作2+4, 操作3+4*** + +并且当 n>2 and m>=3 时,我们就能够获得所有的情形。 + +| m\n | 0 | 1 | 2 | 3 | 4 | + --- |----|--- |----|---|---| +| 0 | 1 | 1 | 1 | 1 | 1 | +| 1 | 1 | 2 | 3 | 4 | 4 | +| 2 | 1 | 2 | 4 | 7 | 7 | +| 3 | 1 | 2 | 3 | 8 | 8 | + +```python +class Solution(object): + def flipLights(self, n, m): + """ + :type n: int + :type m: int + :rtype: int + """ + if m * n == 0: return 1 + if n == 1: return 2 + if n == 2: return 4 - (m % 2) + if m == 1: return 4 + if m == 2: return 7 + return 8 +``` + +还有两位大佬的两行解法: +```python +class Solution(object): + def flipLights(self, n, m): + m, n = min(3, m), min(3, n) + return 1 if n * m == 0 else self.flipLights(n - 1, m) + self.flipLights( n - 1, m - 1) +``` +```python +class Solution(object): + def flipLights(self, n, m): + n = min(n, 3) + return min(1< + + +难度: + +Medium + + + +思路 + +题目说输入一个时间,format是HH:MM, 然后输出接下来最近的一个时间,且这个时间的数字必须要在输入的时间中可以找到,所以我们用```h```, ```m``` +分别代表输入时间的小时数和分钟数,然后可以计算出输入时间的总分钟数```curr```,在未来的一天之内,我们一分钟一分钟往下面试,第一个满足的就直接 +作为结果就行了. + + + + +```python +class Solution(object): + def nextClosestTime(self, time): + """ + :type time: str + :rtype: str + """ + h, m = time.split(":") +        curr = int(h) * 60 + int(m) # 这里要注意h可能会是0开头的,如输入的时间为01:22,所以需要int(h)和int(m) +        result = None + for i in xrange(curr+1, curr+1441): + t = i % 1440 + h, m = t // 60, t % 60 + result = "%02d:%02d" % (h, m) + if set(result) <= set(time): + break + return result +``` + + + + + + diff --git a/docs/Leetcode_Solutions/Python/682._Baseball_Game.md b/docs/Leetcode_Solutions/Python/682._Baseball_Game.md new file mode 100644 index 000000000..e775cbf8c --- /dev/null +++ b/docs/Leetcode_Solutions/Python/682._Baseball_Game.md @@ -0,0 +1,37 @@ +### 682. Baseball Game + +题目: + + + +难度: + +Easy + + +思路 + +points用来存放每一次的分数,最后求和。 + + +```python +class Solution(object): + def calPoints(self, ops): + """ + :type ops: List[str] + :rtype: int + """ + points = [] + for i in ops: + if i == 'C': + points.pop() + elif i == 'D': + points.append(2 * points[-1]) + elif i == '+': + points.append(points[-1] + points[-2]) + else: + points.append(int(i)) + return sum(points) +``` + + diff --git a/docs/Leetcode_Solutions/Python/687._Longest_Univalue_Path.md b/docs/Leetcode_Solutions/Python/687._Longest_Univalue_Path.md new file mode 100644 index 000000000..0b7a2eef5 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/687._Longest_Univalue_Path.md @@ -0,0 +1,58 @@ +### 687. Longest Univalue Path + + +题目: + + + +难度: + +Easy + + + +思路 + +这道题也只能算个```easy```题目,根据传进来的```root```,我们只要从它的左右节点不停的递归下去,只要其```value```值与```root```一样, +该方向上的```length```就加```1```,最后我们将左右方向上的```length```相加, 递归取最大值 +##### 很重要的一点就是,Note: The length of path between two nodes is represented by the number of edges between them. +- 因此是```self.res = max(self.res, left_arrow + right_arrow)```, ```return max(left_arrow, right_arrow)``` +- 而不是```self.res = max(self.res, left_arrow + right_arrow + 1)```, ```return max(left_arrow + 1, right_arrow + 1)``` + + + + + +```python +# Definition for a binary tree node. +# class TreeNode(object): +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None + +class Solution(object): + def longestUnivaluePath(self, root): + """ + :type root: TreeNode + :rtype: int + """ + self.res = 0 + def dir_length(node): + if not node: + return 0 + left_len = dir_length(node.left) # 左节点的length + right_len = dir_length(node.right) # 右节点的length + left_dir, right_dir = 0, 0 + if node.left and node.left.val == node.val: + left_dir = left_len + 1 # 当前节点的左节点方向的length + if node.right and node.right.val == node.val: + right_dir = right_len + 1 # 当前节点的右边节点方向的length + self.res = max(self.res, left_dir + right_dir) + return max(left_dir, right_dir) + dir_length(root) + return self.res +``` + + + diff --git a/docs/Leetcode_Solutions/Python/740._delete_and_earn.md b/docs/Leetcode_Solutions/Python/740._delete_and_earn.md new file mode 100644 index 000000000..3810c4b09 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/740._delete_and_earn.md @@ -0,0 +1,29 @@ +### 740. Delete and Earn + +题目: + + + +难度: + +Medium + + + + +```python +class Solution(object): + def deleteAndEarn(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + dp = [0] * 10001 + for num in nums: + dp[num] += num + for i in range(2, 10001): + dp[i] = max(dp[i]+dp[i-2], dp[i-1]) + return dp[-1] +``` + + diff --git a/docs/Leetcode_Solutions/Python/760._Find_Anagram_Mappings.md b/docs/Leetcode_Solutions/Python/760._Find_Anagram_Mappings.md new file mode 100644 index 000000000..fe69ce141 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/760._Find_Anagram_Mappings.md @@ -0,0 +1,31 @@ +### 760. Find Anagram Mappings + +题目: + + + +难度: + +Easy + + + + + +```python +class Solution(object): + def anagramMappings(self, A, B): + """ + :type A: List[int] + :type B: List[int] + :rtype: List[int] + """ + if not A: + return [] + res = [] + for i in A: + res.append(B.index(i)) + return res +``` + + diff --git a/docs/Leetcode_Solutions/Python/README.md b/docs/Leetcode_Solutions/Python/README.md new file mode 100644 index 000000000..c477b8c84 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/README.md @@ -0,0 +1 @@ +# Leetcode solutions and summarizations! diff --git "a/docs/Leetcode_Solutions/Python/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" "b/docs/Leetcode_Solutions/Python/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" new file mode 100644 index 000000000..bd65c3c65 --- /dev/null +++ "b/docs/Leetcode_Solutions/Python/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" @@ -0,0 +1,91 @@ +### Binary Search 不易写 + + + +坊间一直有binary search不容易写对的传言,一写还真是||| + +值得注意的是这里的u位置上的元素搜索是不包括的 + +先献上递归版本伪码: + +``` +function Binary_Search(x, A, l, u) + if u < l then + No found error + else + m ← l + [ ( u - l ) / 2 ] //避免溢出 + if A[m] = x then + return m + if x < A[m] then + return Binary-Search(x, A, l, m - 1) + else + return Binary-Search(x, A, m + 1, u) +``` + + + +迭代版本伪码: + + + +``` +function Binary_Search(x, A, l, u) + while l < u do + m ← l + [ ( u - l ) / 2 ] + if A[m] = x then + return m + if x < A[m] then + u ← m - 1 + else + l ← m + 1 + return NIL + +``` + + + + + +或者这样,正确代码 + +```python +def binarySearch(nums, target): + l, r = 0, len(nums) -1 + while l <= r: + mid = l + ((r-l) >> 2) + if nums[mid] > target: + r = mid - 1 + elif nums[mid] < target: + l = mid + 1 + else: + return mid + return -1 +``` + + + + + +这样就不对 + +``` +def binarySearch(nums, target): + l, r = 0, len(nums) + while l < r: + mid = (l+r) / 2 + if nums[mid] == target: + return mid + elif nums[mid] > target: + r = mid - 1 + else: + l = mid + 1 + return -1 + +print binarySearch([1,2,3,4,5,6],1) +// → -1 +``` + + + +之所以binary Search很容易不对,是因为边界状况,所以觉得一上来应当检查边界状况 + diff --git a/docs/Leetcode_Solutions/Python/Summarization/Data Structure and Algorthim Review.md b/docs/Leetcode_Solutions/Python/Summarization/Data Structure and Algorthim Review.md new file mode 100644 index 000000000..61c9c7d68 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/Summarization/Data Structure and Algorthim Review.md @@ -0,0 +1,101 @@ + + +### Data Structure and Algorthim Review + + + +- [x] Binary Search Tree + + - [x] 插入 + + • 如果树为空,创建一个叶子节点,令该节点的key = k; + • 如果k小于根节点的key,将它插入到左子树中; + • 如果k大于根节点的key,将它插入到右子树中。 + + - [x] 遍历 + + • 前序: 根,左,右 + + • 中序:左,根,右 **有序** + + • 后序:左,右,根 + + - [x] 搜索 + + - look up : 是否存在 + + ​• 如果树为空,搜索失败; + ​• 如果根节点的key等于待搜索的值,搜索成功,返回根节点作为结果; + ​• 如果待搜索的值小于根节点的key,继续在左子树中递归搜索; + ​• 否则,待搜索的值大于根节点的key,继续在右子树中递归搜索。 + + - 最大元素和最小元素 + + ​ • 最右和最左 + + - 前驱(Successor)和后继(predecessor) + + ​ 给定元素x,它的后继元素y是满足y > x的最小值 + + ​ • 如果x所在的节点有一个非空的右子树,则右子树中的最小值就是答案 + + ​ • 否则我们需要向上回溯,找到最近的一个祖先,使得该祖先的左侧孩子,也为x的祖 先。 + ​ + + - [x] 删除 + + • 如果x没有子节点,或者只有一个孩子,直接将x“切下”; + + • 否则,x有两个孩子,我们用其右子树中的最小值替换掉x,然后将右子树中的这一最小值“切掉”。 + + + + + + +- [x] 递归 + - [x] 入门 + + - 回文 + - 阶乘 factorial, 慕指数 + - 分形 + - Tower of Hanoi + + - [x] 排列 Permutation + + - [x] 子集 Subsets + + - [ ] backtracking + + +- [x] dynamic programming + + - coin change + + - longest common subsequence + + - edit distance + + ​ + + + + +-[ ] majority element + + + +- [ ] 随机 + - 水塘抽样 + - 洗牌 + + +-[ ] 荷兰旗问题 + + +-[ ] quick select + + +-[ ] median of two sorted array +-[ ] regular expression + diff --git a/docs/Leetcode_Solutions/Python/Summarization/Dynamic Programming.md b/docs/Leetcode_Solutions/Python/Summarization/Dynamic Programming.md new file mode 100644 index 000000000..102d032c3 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/Summarization/Dynamic Programming.md @@ -0,0 +1,48 @@ +### Dynamic Programming + + + +- Fibonacci Numbers +- Shortest Path (no cycles) + + + + + + + +- subproblems + +- guessing + +- relate subproblems + +- recurse & memoize (bulid DP table) + +- solve original problem + + ​ + + + + + + +​ +​ +​ + +感觉DP有几类: + +- 容易写出递推公式的 + +- 画表更容易理解的 + + ​ + +* DP ≈ “controlled brute force” + +* DP ≈ recursion + re-use + + ​ + diff --git "a/docs/Leetcode_Solutions/Python/Summarization/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" "b/docs/Leetcode_Solutions/Python/Summarization/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..110950bf9b2bd29f84cf9ecb7494b50cc39a4531 GIT binary patch literal 117543 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 ZIXEJ|$lM;b2)}r^xG@> 24) & 0xFF); + result[1] = (byte) ((i >> 16) & 0xFF); + result[2] = (byte) ((i >> 8) & 0xFF); + result[3] = (byte) (i & 0xFF); + return result; +} + +//byte数组转换为int类型 +public static int byteArrayToInt(byte[] bytes) { + int value = 0; + // 由高位到低位 + for (int i = 0; i < 4; i++) { + int shift = (4 - 1 - i) * 8; + value += (bytes[i] & 0x000000FF) << shift;// 往高位游 + } + return value; +} +``` + +还有一种为: + +``` +//int类型转换为byte[]数组 +public static byte[] intToByteArray(int x) { + byte[] bb = new byte[4]; + bb[3] = (byte) (x >> 24); + bb[2] = (byte) (x >> 16); + bb[1] = (byte) (x >> 8); + bb[0] = (byte) (x >> 0); + return bb; +} + +//byte数组转换为int类型 +public static int byteArrayToInt(byte[] bb) { + return (int) ((((bb[3] & 0xff) << 24) | ((bb[2] & 0xff) << 16) | ((bb[1] & 0xff) << 8) | ((bb[0] & 0xff) << 0))); +} +``` + +## int转long + +int类型转换为long类型的情况并不是大多,这里主要接收几种转换方法: + +``` +public class IntToLong { + public static void main(String[] args) { + int number = 123111; + long num1 = (long) number;//强制 + long num2 = Long.parseLong(new Integer(number).toString());//先转String再进行转换 + long num3 = Long.valueOf(number); + } +} +``` + +## int转Interger + +int类型转换为Interger类型的情况,我是基本上每怎么遇到过,在这里也上网查询一些资料找到了两种方法。 + +``` +public class IntToInterge { + public static void main(String[] args) { + int number = 123456; + Integer num1 = Integer.valueOf(number); + Integer num2 = new Integer(number); + } +} +``` + +------ + +# byte数组的转换 + +关于byte数组的转换,上面有几个都是它们只见相互转换的,所以这里就不再介绍那么多,只介绍一个byte数组转换String类型的方法,其他的类型可以通过String类型再进行转换。 + +byte数组转String类型的方法经常用的可能就是下面这种方法。 + +``` +public class ByteToString { + public static void main(String[] args) { + byte[] number = "121121".getBytes(); + String num1 = new String(number); + } +} +``` + +------ + +最后简单补充以下Java基本数据类型的一些知识: + +| 类型 | 字节数 | 类名称 | 范围 | +| ------ | ---- | -------- | ---------------------------------------- | +| int | 4字节 | Interger | -2147483648 ~ 2147483647 | +| short | 2字节 | Short | -32768 ~ 32767 | +| long | 8字节 | Long | -9223372036854775808 ~ 9223372036854775807 | +| byte | 1字节 | Byte | -128 ~ 127 | +| float | 4字节 | Float | | +| double | 8字节 | Double | | \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Python/Summarization/LinkedList\346\212\200\345\267\247.md" "b/docs/Leetcode_Solutions/Python/Summarization/LinkedList\346\212\200\345\267\247.md" new file mode 100644 index 000000000..677a083a2 --- /dev/null +++ "b/docs/Leetcode_Solutions/Python/Summarization/LinkedList\346\212\200\345\267\247.md" @@ -0,0 +1,118 @@ +# LinkedList + +结点定义如下: + + class ListNode(object): + def __init__(self, x): + self.val = x + self.next = None + + +可以使用的技巧包括: + + +## Dummy head + +有的时候因为边界条件,需要判定是否是list的head,因为处理起来会有些不同,而创造一个dummy head则可以极大的解决一些问题。 + +``` + dummy = ListNode(-1) + dummy.next = head +``` + +## 双指针 + +- 19. Remove Nth Node From End of List + +两个指针p,q, q先走n步,然后p和q一起走,直到q走到结点,删除p.next解决。 + +理解: 先走了n步,q始终在p前方n个,这样q走到末尾,p的下一个则是距离尾端n个的,画个图还是容易理解。 + + +- 160. Intersection of Two Linked Lists + +如果两个linkedlist有intersection的话,可以看到,其实如果一开始我们就走到b2的话,那么我们就可以两个pointer一个一个的对比,到哪一个地址一样,接下来就是intersection部分。 + +就一开始把长的那条list走掉多余部分。 +还有这里保证了是无环的状况 + + + +``` +A: a1 → a2 + ↘ + c1 → c2 → c3 + ↗ +B: b1 → b2 → b3 +``` + + +## 快慢指针 + +- 141. Linked List Cycle + +用两个指针,一个每次走两步,一个每次走一步,如果慢的最终和快的相遇,那么说明有环,否则没有环,直观的理解是如果两个跑的速度不一的人进操场跑步,那么最终慢的会追上快的. + + + +## Reverse Linked List + +- 206. Reverse Linked List + +loop版本用prev, cur ,nxt 三个指针过一遍,recursion版本如下,可以再消化消化 + +``` +class Solution(object): + def reverseList(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + return self.doReverse(head, None) + + + def doReverse(self, head, newHead): + if head == None: + return newHead + nxt = head.next + head.next = newHead + return self.doReverse(nxt, head) +``` + + +## 寻找LinkedList中间项 + +依旧使用双指针,快慢指针:快指针每次走两步,慢指针每次走一步,快指针如果到头了,那么慢指针也会在中间了,这个中间可以考量,如果是奇数的话必然是中间。 + +如果是偶数则是偏前面的中间一项 + +``` +1 -> 2 -> 3 -> 4: 2 +1 -> 2 -> 3 -> 4 -> 5 -> 6 : 3 +1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 : 4 + +``` + +算法: + +``` + +def findMid(head): + if head == None or head.next == None: + return head + + slow = head + fast = head + + while fast.next and fast.next.next: + slow = slow.next + fast = fast.next.next + + return slow +``` + + + + + + diff --git a/docs/Leetcode_Solutions/Python/Summarization/Maximal Square.pdf b/docs/Leetcode_Solutions/Python/Summarization/Maximal Square.pdf new file mode 100644 index 0000000000000000000000000000000000000000..235cd3b86547102c2de81ebaedb59cd4f3f40b63 GIT binary patch literal 185749 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

    y&B`PeXKeQE9zPYAF!+)Lg=x*9vJS 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 literal 0 HcmV?d00001 diff --git "a/docs/Leetcode_Solutions/Python/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" "b/docs/Leetcode_Solutions/Python/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" new file mode 100644 index 000000000..bdd0b3ab5 --- /dev/null +++ "b/docs/Leetcode_Solutions/Python/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" @@ -0,0 +1,96 @@ +# python有无数奇技淫巧和许多人不知道的秘密,这里用简洁的语言一条条表述出来,不断更新, 大家一起贡献! + +# 1. python 排序 +# 用lst.sort() 而不是nlst = sorted(lst), 区别在于lst.sort()是 in-place sort,改变lst, sorted会创建新list,成本比较高。 + +# 2. xrange和range的区别 +# range会产生list存在memory中,xrange更像是生成器,generate on demand所以有的时候xrange会更快 + +# 3. python处理矩阵 +row = len(matrix) +col = len(matrix[0]) if row else 0 +# 这样写通用的原因是, 当matrix = [], row = 0, col = 0 + +# 4. python列表生成式 +lst = [0 for i in range(3)] # lst = [0,0,0] +lst = [[0 for i in range(3)] for j in range(2)] # lst =  [[0, 0, 0], [0, 0, 0]] +# 下面这种写法危险: +# lst1 = [ 0, 0, 0 ] +# lst2  = [lst1] * 2  # lst2 = [ [0,0,0] , [0,0,0] ] +# lst2[0][0] = 1  # lst2 = [ [1,0,0], [1,0,0]] +# 因为lst1是object,改一个相当于全改, 这样写会踩坑 + +# 5. D.get(key, default) +# 如果这个key 没有在dict里面,给它一个默认值: +D = {} +if 1 in D: + val = D[1] +else : + val = 0 +# 等同于这样写: +val = D.get(1, 0) + +# 6. 字典赋值 +if key in D: + D[key].append(1) +else : + D[key] = [] + +# 7. 字符串反转 +# python字符串没有reverse函数,只能str[::-1] +string[::-1] +# python的list可以直接reverse(),因此也可以借用这个特性 +"".join([string].reverse()) + +# 8. 快速统计 +import collections +lst = [1, 1, 1, 2, 3, 4, 5, 5] +collections.Counter(lst) # Counter({1: 3, 5: 2, 2: 1, 3: 1, 4: 1}) + +# 9. python自带小顶堆heapq +# Python有built-in heap, 默认min heap. +heapq.heappush(heap, item) # 把item添加到heap中(heap是一个列表) + +heapq.heappop(heap) # 把堆顶元素弹出,返回的就是堆顶 + +heapq.heappushpop(heap, item) # 先把item加入到堆中,然后再pop,比heappush()再heappop()要快得多 + +heapq.heapreplace(heap, item) # 先pop,然后再把item加入到堆中,比heappop()再heappush()要快得多 + +heapq.heapify(x) # 将列表x进行堆调整,默认的是小顶堆 + +heapq.merge(*iterables) # 将多个列表合并,并进行堆调整,返回的是合并后的列表的迭代器 + +heapq.nlargest(n, iterable, key=None) # 返回最大的n个元素(Top-K问题) + +heapq.nsmallest(n, iterable, key=None) # 返回最小的n个元素(Top-K问题) + +# 如何来用它实现max heap呢,看到过一个有意思的方法是把key取负,比如把100变成-100,5变成-5 + +import heapq +mylist = [1, 2, 3, 4, 5, 10, 9, 8, 7, 6] +largest = heapq.nlargest(3, mylist) # [10, 9, 8] +smallest = heapq.nsmallest(3, mylist) # [1, 2, 3] + +# 10. 双端队列deque [http://stackoverflow.com/questions/4098179/anyone-know-this-python-data-structure] +# 可以很简单的.popleft(), .popright(), .appendleft(), .appendright(),最关键的是时间是O(1), 而用list来模拟队列是O(n)的时间复杂度 +# 还有很好用的rotate函数, +# 一个简单的跑马灯程序 +import sys +import time +from collections import deque + +fancy_loading = deque('>--------------------') + +while True: + print('\r%s' % ''.join(fancy_loading)) + fancy_loading.rotate(1) + sys.stdout.flush() + time.sleep(0.08) + +# 11. 用yield 不用return,可以返回一个generator + +# 12. 符号~的巧妙应用 +for i in range(n): + # 这里的```[~i]``` 意思就是 ```[n-1-i]``` + a[~i] = 1 diff --git a/docs/Leetcode_Solutions/Python/Summarization/Range Sum Query 2D - Immutable.pdf b/docs/Leetcode_Solutions/Python/Summarization/Range Sum Query 2D - Immutable.pdf new file mode 100644 index 0000000000000000000000000000000000000000..09410e209c3adc3ad41ebbdfdf0de177bb229e9e GIT binary patch literal 167781 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/Leetcode_Solutions/Python/Summarization/Recusrion & BackTracking.md b/docs/Leetcode_Solutions/Python/Summarization/Recusrion & BackTracking.md new file mode 100644 index 000000000..16e0f9279 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/Summarization/Recusrion & BackTracking.md @@ -0,0 +1,237 @@ +#Recusrion & BackTracking + +##Recusrion + +### DrawFractal + +``` +void DrawFractal(double x, double y, double w, double h) +{ + DrawTriangel(x, y, w, h); + if(w < .2 || h < .2) return ; + double halfH = h/2; + double halfw = w/2; + DrawFractal(x, y, halfW, halfH); + DrawFractal(x + halfW/2, y + halfH, halfW, halfH); + DrawFractal(x + halfW, y, halfW, halfH); +} +``` + + +Sierpinski triangle更伪码的写法: + +``` +void DrawFractal (x, y, w, h){ + if (too small) return ; + DrawTriangle(x, y, w, h); + DrawFractal(.left); + DrawFractal(.top); + DrawFractal(.right); +} +``` + +实际上老师故意调了里面几句代码的顺序,让来看到虽然结果相同,但是画的过程是不一样的。 + +然后老师还在黑板上画了过程树,分枝是怎样的,实际上当学到DFS的preOrder, inOrder 和 postOrder的时候会更印象深刻。 + +一个分支走完之后再回去走另一些。 + + +### DrawMondrian + + + +``` +void DrawMondrian(double x, double y, double w, double h){ + + if(w < 1 || h < 1) return ;// base case + + FillRectangle(x,y,w,h,RandomColor()); // fill background + + switch(RandomInteger(0, 2)){ + case 0: // do nothing + break; + case 1: // bisect vertically + double midX = RandomReal(0,w); + DrawBlackLine( x + midX, y, h); + DrawMondrian(x, y, midX, h); + DrawMondrian(x + midx, y, w- midX, h); + break; + case 2: // bisect horizontally + double midY = RandomReal(0,h); + DrawBlackLine( x, y+ midY, h); + DrawMondrian(x, y, w, midY); + DrawMondrian(x, y+midY,w, midY); + break; + } +} +``` + + +### The tower of Hanoi + + +``` +void MoveTower(int n, char src, char dst, char tmp){ + if (n > 0){ + MoveTower(n - 1, src, tmp, dst ); + MoveSingleDisk(src, dst); + MoveTower(n -1, tmp, dst, src); + } +} + +``` + + +### Permutation + +老师说permutation 和 subset 是 mother problems of all recursion. + + +given a string, print out its all permutations + +思路如下: + +- 使用了的string sofar,以及还未使用的string rest +- 一开始rest就是给的string本身,然后sofar是空 +- 每次挑一个rest里面的char,然后递归的再把rest剩下的拿来permutation,这样每次都会有一个char从rest shuffle到sofar +- n 次之后 rest为空,制造了一个permutation + + +``` +void RecPermute(string sofar, string rest){ + if(rest = ""){ + cout << soFar << endl; + } else { + for(int i = 0 ; i < rest.length(); i++){ + string next = soFar + rest[i]; + string remaining = rest.substr(0,i) + rest.substr(i+1); + RecPermute(next, remaining); + } + } +} + + +// "wrapper" function +void ListPermutations(string s) +{ + RecPermute("",s); +} +``` + + +老师的黑板图真的是击中要害。 + +因为老师强调的是,也要用mind来trace它是如何操作的。 + + + +### Subsets + + +``` +void RecSubsets(string soFar, string rest) +{ + if(rest = "") + cout << soFar << endl; + else { + // add to subset, remove from rest, recur + RecSubsets(soFar + rest[0],rest.substr(1)); + //don't add to substr, remove from rest, recur + RecSubsets(soFar, rest.substr(1)); + } +} + + +void ListSubsets(string str) +{ + RecSubsets("",str); +} + +``` + +代码非常容易理解 + + +比较一下:两个都是有关选择,permutation是每次选哪一个char,而subsets是选择这个char 是否in. + +两个recursion tree都是有branching 和 depth的, depth都是n,每次选一个,知道n个选完. + +branching是how many recusive calls 每次made,subset每次都是两个,in/out,而permutation则是n,n-1.......grows very quickly. + +因为permutation是n!,subsets是2^n,跟树对应。这些都是比较intractable的问题,并不是因为recursion,而是问题本身的复杂度。 + + +这两个问题都是exhaustive的,然而,我们会更多碰到一些问题,有着 + +similar exhaustive structure,但是遇到'satisfactory' outcome就会stop的 -> 也就是backtracking了. + +##BackTracking + + + +### pseudocode + +把问题转成decision problem,然后开始make choice. + +``` +bool Solve(configuration conf) +{ + if (no more choices) // BASE CASE + return (conf is goal state); + + for (all available choices){ + try one choice c; + // sove from here, it works out. you're done. + if (Solve(conf with choice c made)) return true; + unmake choice c; + } + return false; //tried all choices, no soln found +} +``` + + +###IsAnagram + + +``` +bool IsAnagram(string soFar, string rest, Lexicon & lex) +{ + if(rest == ""){ + if(lex.contains(soFar)){ + cout << soFar << endl; + return true; + } + } else { + for(int i = 0; i < rest.length() ; i++ ){ + string next = soFar + rest[i]; + string remaining = rest.substr(0,i) + rest.substr(i+1); + if(IsAnagram(next, remaining, lex)) return true; + } + } + return false; +} +``` + + +### 8 Queens + + +``` + +bool Solve(Grid &board, int col) +{ + if(col > = board.numCols()) return true; + + for(int rowToTry = 0; rowToTry < board.numRows(); rowToTry++){ + if (IsSafe(board,rowToTry, col)){ + PlaceQueen(board,rowToTry,col); + if (Solve(board,col+1)) return true; + RemoveQueen(board,rowToTry, col); + } + } + return false; +} + +``` + diff --git "a/docs/Leetcode_Solutions/Python/Summarization/backtracking\346\200\235\350\267\257.md" "b/docs/Leetcode_Solutions/Python/Summarization/backtracking\346\200\235\350\267\257.md" new file mode 100644 index 000000000..dbb7e8cf1 --- /dev/null +++ "b/docs/Leetcode_Solutions/Python/Summarization/backtracking\346\200\235\350\267\257.md" @@ -0,0 +1,295 @@ +## backtracking 全集 + +### 回溯是啥 +用爬山来比喻回溯,好比从山脚下找一条爬上山顶的路,起初有好几条道可走,当选择一条道走到某处时,又有几条岔道可供选择,只能选择其中一条道往前走,若能这样子顺利爬上山顶则罢了,否则走到一条绝路上时,只好返回到最近的一个路口,重新选择另一条没走过的道往前走。如果该路口的所有路都走不通,只得从该路口继续回返。照此规则走下去,要么找到一条到达山顶的路,要么最终试过所有可能的道,无法到达山顶。 +回溯是一种穷举,但与brute force有一些区别,回溯带了两点脑子的,并不多,brute force一点也没带。 +第一点脑子是回溯知道回头;相反如果是brute force,发现走不通立刻跳下山摔死,换第二条命从头换一条路走。 +第二点脑子是回溯知道剪枝;如果有一条岔路上放了一坨屎,那这条路我们不走,就可以少走很多不必要走的路。 + +还有一些爱混淆的概念:递归,回溯,DFS。 +回溯是一种找路方法,搜索的时候走不通就回头换路接着走,直到走通了或者发现此山根本不通。 +DFS是一种开路策略,就是一条道先走到头,再往回走一步换一条路走到头,这也是回溯用到的策略。在树和图上回溯时人们叫它DFS。 +递归是一种行为,回溯和递归如出一辙,都是一言不合就回到来时的路,所以一般回溯用递归实现;当然也可以不用,用栈。 +以下以回溯统称,因为这个词听上去很文雅。 + +### 识别回溯 +判断回溯很简单,拿到一个问题,你感觉如果不穷举一下就没法知道答案,那就可以开始回溯了。 +一般回溯的问题有三种: + +1. Find a path to success 有没有解 +2. Find all paths to success 求所有解 + - 2.1 求所有解的个数, + - 2.2 求所有解的具体信息 +3. Find the best path to success 求最优解 + +理解回溯:给一堆选择, 必须从里面选一个. 选完之后我又有了新的一组选择. ```This procedure is repeated over and over until you reach a final state. If you made a good sequence of choices, your final state is a goal state; if you didn't, it isn't.``` + +回溯可以抽象为一棵树,我们的目标可以是找这个树有没有good leaf,也可以是问有多少个good leaf,也可以是找这些good leaf都在哪,也可以问哪个good leaf最好,分别对应上面所说回溯的问题分类。 +good leaf都在leaf上。good leaf是我们的goal state,leaf node是final state,是解空间的边界。 + +对于第一类问题(问有没有解),基本都是长着个样子的,理解了它,其他类别迎刃而解: +```java +boolean solve(Node n) { + if n is a leaf node { + if the leaf is a goal node, return true + else return false + } else { + for each child c of n { + if solve(c) succeeds, return true + } + return false + } +} +``` +请读以下这段话以加深理解: +```Notice that the algorithm is expressed as a boolean function. This is essential to understanding the algorithm. If solve(n) is true, that means node n is part of a solution--that is, node n is one of the nodes on a path from the root to some goal node. We say that n is solvable. If solve(n) is false, then there is no path that includes n to any goal node.``` + +还不懂的话请通读全文吧:[Backtracking - David Matuszek](https://www.cis.upenn.edu/~matuszek/cit594-2012/Pages/backtracking.html) + +关于回溯的三种问题,模板略有不同, +第一种,返回值是true/false。 +第二种,求个数,设全局counter,返回值是void;求所有解信息,设result,返回值void。 +第三种,设个全局变量best,返回值是void。 + +第一种: +```java +boolean solve(Node n) { + if n is a leaf node { + if the leaf is a goal node, return true + else return false + } else { + for each child c of n { + if solve(c) succeeds, return true + } + return false + } +} +``` +第二种: +```java +void solve(Node n) { + if n is a leaf node { + if the leaf is a goal node, count++, return; + else return + } else { + for each child c of n { + solve(c) + } + } +} +``` +第三种: +```java +void solve(Node n) { + if n is a leaf node { + if the leaf is a goal node, update best result, return; + else return + } else { + for each child c of n { + solve(c) + } + } +} +``` +题目 + +八皇后 N-Queens + +问题 + +1. 给个n,问有没有解; +2. 给个n,有几种解;(Leetcode N-Queens II) +3. 给个n,给出所有解;(Leetcode N-Queens I) + +解答 + +1.有没有解 + +怎么做:一行一行的放queen,每行尝试n个可能,有一个可达,返回true;都不可达,返回false. + +边界条件leaf:放完第n行 或者 该放第n+1行(出界,返回) + +目标条件goal:n行放满且isValid,即目标一定在leaf上 + +helper函数: +boolean solve(int i, int[][] matrix) +在进来的一瞬间,满足property:第i行还没有被放置,前i-1行放置完毕且valid +solve要在给定的matrix上试图给第i行每个位置放queen。 +```java +public static boolean solve1(int i, List matrix, int n) { + if (i == n) { + if (isValid(matrix)) + return true; + return false; + } else { + for (int j = 0; j < n; j++) { + matrix.add(j); + if (isValid(matrix)) { //剪枝 + if (solve1(i + 1, matrix, n)) + return true; + } + matrix.remove(matrix.size() - 1); + } + return false; + } +} +``` +2.求解的个数 + +怎么做:一行一行的放queen,每行尝试n个可能。这回因为要找所有,返回值就没有了意义,用void即可。在搜索时,如果有一个可达,仍要继续尝试;每个子选项都试完了,返回. + +边界条件leaf:放完第n行 或者 该放第n+1行(出界,返回) + +目标条件goal:n行放满且isValid,即目标一定在leaf上 + +helper函数: +void solve(int i, int[][] matrix) +在进来的一瞬间,满足property:第i行还没有被放置,前i-1行放置完毕且valid +solve要在给定的matrix上试图给第i行每个位置放queen。 +这里为了记录解的个数,设置一个全局变量(static)int是比较efficient的做法。 +```java +public static void solve2(int i, List matrix, int n) { + if (i == n) { + if (isValid(matrix)) + count++; + return; + } else { + for (int j = 0; j < n; j++) { + matrix.add(j); + if (isValid(matrix)) { //剪枝 + solve2(i + 1, matrix, n); + } + matrix.remove(matrix.size() - 1); + } + } +} +``` +3.求所有解的具体信息 + +怎么做:一行一行的放queen,每行尝试n个可能。返回值同样用void即可。在搜索时,如果有一个可达,仍要继续尝试;每个子选项都试完了,返回. + +边界条件leaf:放完第n行 或者 该放第n+1行(出界,返回) + +目标条件goal:n行放满且isValid,即目标一定在leaf上 + +helper函数: +void solve(int i, int[][] matrix) +在进来的一瞬间,满足property:第i行还没有被放置,前i-1行放置完毕且valid +solve要在给定的matrix上试图给第i行每个位置放queen。 +这里为了记录解的具体情况,设置一个全局变量(static)集合是比较efficient的做法。 +当然也可以把结果集合作为参数传来传去。 +```java +public static void solve3(int i, List matrix, int n) { + if (i == n) { + if (isValid(matrix)) + result.add(new ArrayList(matrix)); + return; + } else { + for (int j = 0; j < n; j++) { + matrix.add(j); + if (isValid(matrix)) { //剪枝 + solve3(i + 1, matrix, n); + } + matrix.remove(matrix.size() - 1); + } + } +} +``` +优化 + +上面的例子用了省空间的方法。 +由于每行只能放一个,一共n行的话,用一个大小为n的数组,数组的第i个元素表示第i行放在了第几列上。 + +Utility(给一个list判断他的最后一行是否和前面冲突): +```java +public static boolean isValid(List list){ + int row = list.size() - 1; + int col = list.get(row); + for (int i = 0; i <= row - 1; i++) { + int row1 = i; + int col1 = list.get(i); + if (col == col1) + return false; + if (row1 - row == col1 - col) + return false; + if (row1 - row == col - col1) + return false; + } + return true; + +} +``` + +参考[Backtracking回溯法(又称DFS,递归)全解](https://segmentfault.com/a/1190000006121957) +以及 [Python Patterns - Implementing Graphs](https://www.python.org/doc/essays/graphs/) + + + +## 以Generate Parentheses为例,backtrack的题到底该怎么去思考? + + +所谓Backtracking都是这样的思路:在当前局面下,你有若干种选择。那么尝试每一种选择。如果已经发现某种选择肯定不行(因为违反了某些限定条件),就返回;如果某种选择试到最后发现是正确解,就将其加入解集 + +所以你思考递归题时,只要明确三点就行:选择 (Options),限制 (Restraints),结束条件 (Termination)。即“ORT原则”(这个是我自己编的) + + + + +对于这道题,在任何时刻,你都有两种选择: +1. 加左括号。 +2. 加右括号。 + +同时有以下限制: +1. 如果左括号已经用完了,则不能再加左括号了。 +2. 如果已经出现的右括号和左括号一样多,则不能再加右括号了。因为那样的话新加入的右括号一定无法匹配。 + +结束条件是: +左右括号都已经用完。 + +结束后的正确性: +左右括号用完以后,一定是正确解。因为1. 左右括号一样多,2. 每个右括号都一定有与之配对的左括号。因此一旦结束就可以加入解集(有时也可能出现结束以后不一定是正确解的情况,这时要多一步判断)。 + +递归函数传入参数: +限制和结束条件中有“用完”和“一样多”字样,因此你需要知道左右括号的数目。 +当然你还需要知道当前局面sublist和解集res。 + +因此,把上面的思路拼起来就是代码: + + if (左右括号都已用完) { + 加入解集,返回 + } + //否则开始试各种选择 + if (还有左括号可以用) { + 加一个左括号,继续递归 + } + if (右括号小于左括号) { + 加一个右括号,继续递归 + } + + + +你帖的那段代码逻辑中加了一条限制:“3. 是否还有右括号剩余。如有才加右括号”。这是合理的。不过对于这道题,如果满足限制1、2时,3一定自动满足,所以可以不判断3。 + +这题其实是最好的backtracking初学练习之一,因为ORT三者都非常简单明显。你不妨按上述思路再梳理一遍,还有问题的话再说。 + + + +以上文字来自 1point3arces的牛人解答 + + + +Backtracking 伪码 + + +``` +Pick a starting point. +while(Problem is not solved) + For each path from the starting point. + check if selected path is safe, if yes select it + and make recursive call to rest of the problem + If recursive calls returns true, then return true. + else undo the current move and return false. + End For + If none of the move works out, return false, NO SOLUTON. + +``` diff --git "a/docs/Leetcode_Solutions/Python/Summarization/delete_node_in_a_linked_list\351\227\256\351\242\230.md" "b/docs/Leetcode_Solutions/Python/Summarization/delete_node_in_a_linked_list\351\227\256\351\242\230.md" new file mode 100644 index 000000000..e148bb218 --- /dev/null +++ "b/docs/Leetcode_Solutions/Python/Summarization/delete_node_in_a_linked_list\351\227\256\351\242\230.md" @@ -0,0 +1,69 @@ +##Delete Node in a Linked List问题 + + +This is a LeetCode question, I knew its solution, but wondering about why my code not work. + + +>Write a function to delete a node (except the tail) in a singly linked list, given only access to that node. + +>Supposed the linked list is 1 -> 2 -> 3 -> 4 and you are given the third node with value 3, the linked list should become 1 -> 2 -> 4 after calling your function + + +At first glance, my intution is delete like an array: + +shift all the node values one front, then delete the tail, here's my implementation and test case: + + + + class ListNode(object): + def __init__(self, x): + self.val = x + self.next = None + + node1 = ListNode(1) + node2 = ListNode(2) + node3 = ListNode(3) + node4 = ListNode(4) + node5 = ListNode(5) + + node1.next = node2 + node2.next = node3 + node3.next = node4 + node4.next = node5 + + + + def deleteNode(node): + """ + :type node: ListNode + :rtype: void Do not return anything, modify node in-place instead. + """ + while node.next: + node.val = node.next.val + node = node.next + node = None + + + deleteNode(node4) + +But After deletion, it has two 5 value nodes, the tail was still kept, can anyone please explain to me what's wrong here? + + deleteNode(node4) + + node1.val + Out[162]: 1 + + node1.next.val + Out[163]: 2 + + node1.next.next.val + Out[164]: 3 + + node1.next.next.next.val + Out[165]: 5 + + node1.next.next.next.next.val + Out[166]: 5 + + +Really appreciate any help. \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Python/Summarization/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" "b/docs/Leetcode_Solutions/Python/Summarization/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" new file mode 100644 index 000000000..864326ec7 --- /dev/null +++ "b/docs/Leetcode_Solutions/Python/Summarization/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" @@ -0,0 +1,14 @@ +# Local Search, 一些新的思路 + +当一个问题我们只关心解法,而不是其达到解的顺序,那么考虑使用local search,比如八皇后问题,我们只关心哪个皇后放哪,根本不关心加入皇后的顺序。 + +local search还能用来解一类问题,求最优。 + + + +> A complete local search algorithm always finds a goal if one exists; an optimal algorithm always finds a global minimum/maximum. + + +一个解八皇后的新思路是我们根本就random来放皇后,然后如果state 合法,就get解答一枚,否则可以Move only to neighboring states,当然,选之剑attack数量最少的state. + +这种方法叫 hill - climbing,很多问题,可能被卡,然后random restart \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Python/Summarization/python\347\232\204\345\220\204\347\247\215pass.md" "b/docs/Leetcode_Solutions/Python/Summarization/python\347\232\204\345\220\204\347\247\215pass.md" new file mode 100644 index 000000000..c1ac085a8 --- /dev/null +++ "b/docs/Leetcode_Solutions/Python/Summarization/python\347\232\204\345\220\204\347\247\215pass.md" @@ -0,0 +1,123 @@ +#Python的各种Pass + +感觉最近对于pass by reference 和 pass by value又有了一点/一些认识 + + +1. python不允许程序员选择采用传值还是传引用。Python参数传递采用的肯定是“传对象引用”的方式。实际上,这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值——相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象——相当于通过“传值'来传递对象。 +2. 当人们复制列表或字典时,就复制了对象列表的引用同,如果改变引用的值,则修改了原始的参数。 +3. 为了简化内存管理,Python通过引用计数机制实现自动垃圾回收功能,Python中的每个对象都有一个引用计数,用来计数该对象在不同场所分别被引用了多少次。每当引用一次Python对象,相应的引用计数就增1,每当消毁一次Python对象,则相应的引用就减1,只有当引用计数为零时,才真正从内存中删除Python对象。 + + +##### Linked List的例子 + + + +``` +class ListNode(object): + def __init__(self, x): + self.val = x + self.next = None + +node1 = ListNode(1) +node2 = ListNode(2) +node3 = ListNode(3) +node4 = ListNode(4) +node5 = ListNode(5) + +node1.next = node2 +node2.next = node3 +node3.next = node4 +node4.next = node5 + +``` + + + +来改变head + +``` +def testWithPointers1(head): + head.next = None +``` + + + +运行 testWithPointers1(node1) + +然后node1.next 为None了 + +// 可以理解,因为传进去的是head这个可变对象。 + + + +``` +def testWithPointers2(head): + cur = head + cur.next = None +``` + + + +运行 testWithPointers2(node1) +// node1.next 同样为None了 + +Python的object,list都是pass by reference,所以是改变的 + +看另外一个例子: + +``` +def printLinkedList(head): + while head: + print(head) + head = head.next +``` + + +输出 + +``` + printLinkedList(head) + +<__main__.ListNode object at 0x1044c0e10> + +1 + +<__main__.ListNode object at 0x1044c0fd0> + +2 + +<__main__.ListNode object at 0x1044c0c88> + +3 + +<__main__.ListNode object at 0x1044c0be0> + +4 + +<__main__.ListNode object at 0x1044c0780> + +5 + +head + +Out[39]: <__main__.ListNode at 0x1044c0e10> + +``` + +其实这里的head为什么没有改变有点疑惑 + + + +##### String看一下 + + + a = "abc" + + def changeA(s): + s = "" + changeA(a) + + +a 并不会改变,依旧为'abc' + + \ No newline at end of file diff --git a/docs/Leetcode_Solutions/Python/Summarization/slide_windows_template.md b/docs/Leetcode_Solutions/Python/Summarization/slide_windows_template.md new file mode 100644 index 000000000..919d1c0f9 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/Summarization/slide_windows_template.md @@ -0,0 +1,185 @@ +能用此模板解决的题目目前有如下: +[leetcode 003](https://github.com/Lisanaaa/thinking_in_lc/blob/master/003._longest_substring_without_repeating_characters.md), +[leetcode 030](https://github.com/Lisanaaa/thinking_in_lc/edit/master/30._Substring_with_Concatenation_of_All_Words.md), +[leetcode 076](https://github.com/Lisanaaa/thinking_in_lc/blob/master/076._Minimum_Window_Substring.md), +[leetcode 159](https://github.com/Lisanaaa/thinking_in_lc/blob/master/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md), +[leetcode 438](https://github.com/Lisanaaa/thinking_in_lc/blob/master/438._Find_All_Anagrams_in_a_String.md) + + + +带注释python版本 +```python +class Solution(object): + def slideWindowTemplateByLisanaaa(self, s, t): + """ + :type s: str + :type t: str + :rtype: 具体题目具体分析 + """ + # init a collection or int value to save the result according the question. + res = [] + if len(t) > len(s): + return res + + # create a hashmap to save the Characters of the target substring. + # (K, V) = (Character, Frequence of the Characters) + maps = collections.Counter(t) + + # maintain a counter to check whether match the target string. + # must be the map size, NOT the string size because the char may be duplicate. + counter = len(maps.keys()) + + # Two Pointers: begin - left pointer of the window; end - right pointer of the window + begin, end = 0, 0 + + # the length of the substring which match the target string. + length = sys.maxint + + # loop at the begining of the source string + while end < len(s): + if s[end] in maps: + maps[s[end]] -= 1 # plus or minus one + if maps[s[end]] == 0: + counter -= 1 # modify the counter according the requirement(different condition). + end += 1 + + # increase begin pointer to make it invalid/valid again + while counter == 0: # counter condition. different question may have different condition + if s[begin] in maps: + maps[s[begin]] += 1 # plus or minus one + if maps[s[begin]] > 0: + counter += 1 # modify the counter according the requirement(different condition). + begin += 1 + + ''' + type your code here according to the question + 1. save / update(min/max) the result if find a target + 2. result: collections or int value + ''' + return res +``` + +无注释python版本: +```python +class Solution(object): + def slideWindowTemplateByLisanaaa(self, s, t): + res = [] + if len(t) > len(s): + return res + maps = collections.Counter(t) + counter = len(maps.keys()) + begin, end = 0, 0 + length = sys.maxint + while end < len(s): + if s[end] in maps: + maps[s[end]] -= 1 + if maps[s[end]] == 0: + counter -= 1 + end += 1 + while counter == 0: + if s[begin] in maps: + maps[s[begin]] += 1 + if maps[s[begin]] > 0: + counter += 1 + begin += 1 + + ''' + 1. save / update(min/max) the result if find a target + 2. result: collections or int value + ''' + return res +``` +带注释java版本 +```java +public class Solution { + public List slidingWindowTemplateByHarryChaoyangHe(String s, String t) { + //init a collection or int value to save the result according the question. + List result = new LinkedList<>(); + if(t.length()> s.length()) return result; + + //create a hashmap to save the Characters of the target substring. + //(K, V) = (Character, Frequence of the Characters) + Map map = new HashMap<>(); + for(char c : t.toCharArray()){ + map.put(c, map.getOrDefault(c, 0) + 1); + } + //maintain a counter to check whether match the target string. + int counter = map.size();//must be the map size, NOT the string size because the char may be duplicate. + + //Two Pointers: begin - left pointer of the window; end - right pointer of the window + int begin = 0, end = 0; + + //the length of the substring which match the target string. + int len = Integer.MAX_VALUE; + + //loop at the begining of the source string + while(end < s.length()){ + + char c = s.charAt(end);//get a character + + if( map.containsKey(c) ){ + map.put(c, map.get(c)-1);// plus or minus one + if(map.get(c) == 0) counter--;//modify the counter according the requirement(different condition). + } + end++; + + //increase begin pointer to make it invalid/valid again + while(counter == 0 /* counter condition. different question may have different condition */){ + + char tempc = s.charAt(begin);//***be careful here: choose the char at begin pointer, NOT the end pointer + if(map.containsKey(tempc)){ + map.put(tempc, map.get(tempc) + 1);//plus or minus one + if(map.get(tempc) > 0) counter++;//modify the counter according the requirement(different condition). + } + + /* save / update(min/max) the result if find a target*/ + // result collections or result int value + + begin++; + } + } + return result; + } +} +``` + +无注释java版本: +```java +public class Solution { + public List slidingWindowTemplateByHarryChaoyangHe(String s, String t) { + List result = new LinkedList<>(); + if(t.length()> s.length()) return result; + Map map = new HashMap<>(); + for(char c : t.toCharArray()){ + map.put(c, map.getOrDefault(c, 0) + 1); + } + int counter = map.size(); + int begin = 0, end = 0; + int len = Integer.MAX_VALUE; + while(end < s.length()){ + char c = s.charAt(end); + if( map.containsKey(c) ){ + map.put(c, map.get(c)-1); + if(map.get(c) == 0) counter--; + } + end++; + while(counter == 0){ + char tempc = s.charAt(begin); + if(map.containsKey(tempc)){ + map.put(tempc, map.get(tempc) + 1); + if(map.get(tempc) > 0) counter++; + } + + /* + save / update(min/max) the result if find a target + result collections or result int value + */ + + begin++; + } + } + return result; + } +} +``` + diff --git "a/docs/Leetcode_Solutions/Python/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" "b/docs/Leetcode_Solutions/Python/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" new file mode 100644 index 000000000..656ec8a1f --- /dev/null +++ "b/docs/Leetcode_Solutions/Python/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" @@ -0,0 +1,156 @@ +# Tree Search, Graph Search, DFS, BFS + + +其实原本是根本不知道还有tree search的,只知道graph search,原来graph search就是一般我看到的dfs,bfs,有一个结构来记录visited node,这样在寻找邻居的时候,防止已经visit的node再被visit. + + +## Tree Search + +general tree search pseudocode + + +``` +function TREE_SEARCH(problem, strategy) returns a solution, or failure + initialize the search tree using the initial state of problem + loop do + if there are no candidates for expansion then return failure + choose a leaf node for expansion according to strategy + if the node contains a goal state then return the corresponding solution + else expand the node and add the resulting nodes to the search tree + end +``` + + +## DFS/BFS + +可以让stack/queue记录更多一些的东西,因为反正stack/queue更像通用结构 + +``` + A + / \ + C B + \ / \ + \ D E + \ / + F + + +graph = {'A': set(['B', 'C']), + 'B': set(['A', 'D', 'E']), + 'C': set(['A', 'F']), + 'D': set(['B']), + 'E': set(['B', 'F']), + 'F': set(['C', 'E'])} +``` +### DFS +The implementation below uses the stack data-structure to build-up and return a set of vertices that are accessible within the subjects connected component. Using Python’s overloading of the subtraction operator to remove items from a set, we are able to add only the unvisited adjacent vertices. +```python +def dfs(graph, start): # iterative + visited, stack = [], [start] + while stack: + vertex = stack.pop() + if vertex not in visited: + visited.append(vertex) + stack.extend(graph[vertex] - set(visited)) + return visited +print(dfs(graph, 'A')) # ['A', 'C', 'F', 'E', 'B', 'D'] 这只是其中一种答案 +``` +The second implementation provides the same functionality as the first, however, this time we are using the more succinct recursive form. Due to a common Python gotcha with default parameter values being created only once, we are required to create a new visited set on each user invocation. Another Python language detail is that function variables are passed by reference, resulting in the visited mutable set not having to reassigned upon each recursive call. +```python +def dfs(graph, start, visited=None): # recursive + if visited is None: + visited = [] + print('visiting', start) + visited.append(start) + for next in graph[start]: + if next not in visited: + dfs(graph, next, visited) + return visited +print(dfs(graph, 'A')) # ['A', 'C', 'F', 'E', 'B', 'D'] 这只是其中一种答案 +``` +We are able to tweak both of the previous implementations to return all possible paths between a start and goal vertex. The implementation below uses the stack data-structure again to iteratively solve the problem, yielding each possible path when we locate the goal. Using a generator allows the user to only compute the desired amount of alternative paths. +```python +def dfs_paths(graph, start, goal): # iterative + stack = [(start, [start])] + while stack: + (vertex, path) = stack.pop() + for next in graph[vertex] - set(path): + if next == goal: + yield path + [next] + else: + stack.append((next, path + [next])) +print(list(dfs_paths(graph, 'A', 'F'))) # [['A', 'C', 'F'], ['A', 'B', 'E', 'F']] +``` +The implementation below uses the recursive approach calling the ‘yield from’ PEP380 addition to return the invoked located paths. Unfortunately the version of Pygments installed on the server at this time does not include the updated keyword combination. +```python +def dfs_paths(graph, start, goal, path=None): # recursive + if path is None: + path = [start] + if start == goal: + yield path + for next in graph[start] - set(path): + yield from dfs_paths(graph, next, goal, path + [next]) +print(list(dfs_paths(graph, 'C', 'F'))) # [['C', 'A', 'B', 'E', 'F'], ['C', 'F']] +``` + +### BFS + +Similar to the iterative DFS implementation the only alteration required is to remove the next item from the beginning of the list structure instead of the stacks last. +```python +def bfs(graph, start): # iterative + visited, queue = [], [start] + while queue: + vertex = queue.pop(0) + if vertex not in visited: + visited.append(vertex) + queue.extend(graph[vertex] - set(visited)) + return visited +print(bfs(graph, 'A')) # ['A', 'C', 'B', 'F', 'D', 'E'] +``` +This implementation can again be altered slightly to instead return all possible paths between two vertices, the first of which being one of the shortest such path. +```python +def bfs_paths(graph, start, goal): + queue = [(start, [start])] + while queue: + (vertex, path) = queue.pop(0) + for next in graph[vertex] - set(path): + if next == goal: + yield path + [next] + else: + queue.append((next, path + [next])) +print(list(bfs_paths(graph, 'A', 'F'))) # [['A', 'C', 'F'], ['A', 'B', 'E', 'F']] +``` +Knowing that the shortest path will be returned first from the BFS path generator method we can create a useful method which simply returns the shortest path found or ‘None’ if no path exists. As we are using a generator this in theory should provide similar performance results as just breaking out and returning the first matching path in the BFS implementation. +```python +def bfs_paths(graph, start, goal): + queue = [(start, [start])] + while queue: + (vertex, path) = queue.pop(0) + for next in graph[vertex] - set(path): + if next == goal: + yield path + [next] + else: + queue.append((next, path + [next])) +def shortest_path(graph, start, goal): + try: + return next(bfs_paths(graph, start, goal)) + except StopIteration: + return None +print(shortest_path(graph, 'A', 'F')) # ['A', 'C', 'F'] +``` + +#### Improvement/Follow up + +1. 一旦BFS/DFS与更具体的,更有特性的data structure结合起来,比如binary search tree,那么BFS/DFS会针对这个tree traversal显得更有特性。 +2. it's worth mentioning that there is an optimized queue object in the collections module called [deque](https://docs.python.org/2/library/collections.html#collections.deque)) for which removing items from the beginning ( or popleft ) takes constant time as opposed to O(n) time for lists. + + + +### Resources + +1. [Depth-and Breadth-First Search](https://jeremykun.com/2013/01/22/depth-and-breadth-first-search/) +2. [Edd Mann](http://eddmann.com/posts/depth-first-search-and-breadth-first-search-in-python/) +3. [graph - Depth-first search in Python](https://codereview.stackexchange.com/questions/78577/depth-first-search-in-python) + + + diff --git "a/docs/Leetcode_Solutions/Python/Summarization/\344\275\215\350\277\220\347\256\227.md" "b/docs/Leetcode_Solutions/Python/Summarization/\344\275\215\350\277\220\347\256\227.md" new file mode 100644 index 000000000..aeaa44c4d --- /dev/null +++ "b/docs/Leetcode_Solutions/Python/Summarization/\344\275\215\350\277\220\347\256\227.md" @@ -0,0 +1,38 @@ +### 位运算 + +位运算包括: 加 减 乘 取反 and 异或 + +- 0110 + 0110 = 0110 * 2 ,也就是0110左移1位 + +- 0011 * 0100 0100 = 4, 一个数乘以 2^n 即是将这个数左移n + +- a ^(~a) = 0 + +- x & (~0 << n ) 这样来看,0取反全部为1,然后将其右移n位,后面的全是0,x & (~0 <>:右移 + + ​ + +Bit Facts and Tricks + +``` +x ^ 0s = x x & 0s = 0 x | 0s = x +x ^ 1s = ~x x & 1s = x x | 1s = 1s +x ^ x = 0 x & x = x x | x = x +``` + diff --git "a/docs/Leetcode_Solutions/Python/Summarization/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" "b/docs/Leetcode_Solutions/Python/Summarization/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" new file mode 100644 index 000000000..767617664 --- /dev/null +++ "b/docs/Leetcode_Solutions/Python/Summarization/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" @@ -0,0 +1,194 @@ +### 全排列算法 + + +#### 46. Permutations + + +Given a collection of distinct numbers, return all possible permutations. + +For example, +[1,2,3] have the following permutations: + + [ + [1,2,3], + [1,3,2], + [2,1,3], + [2,3,1], + [3,1,2], + [3,2,1] + ] + + +#####从空开始加 + +先跳离开这道题,来看类似的'ABC',我们要求它的全排列 + + +``` +def recPermute(sofar, rest): + if rest == '': + print sofar + else: + for i in range(len(rest)): + nxt = sofar + rest[i] + remaining = rest[:i] + rest[i+1:] + recPermute(nxt, remaining) + +// "wrapper" function +def listPermute(s): + recPermute('',s) +``` + +会正确输出`ABC ACB BAC BCA CAB CBA`,题目依靠的是每次我们从余下的字母中选一个,如果画图则会是这样: + + +``` + A B C + B C A C A B + C B C A B A +``` + +时间复杂度应该是O(n!) + +- n choose 1 +- n-1 choose 1 +- ... + + + +#####另一种市面上常见思路是交换: + +思路是这样的,同样看上面的图: + +- n个元素的全排列 = (n-1)个元素的全排列 + 另一个元素作为前缀 +- 如果只有一个元素,那么这个元素本身就是它的全排列 +- 不断将每个元素放作第一个元素,然后将这个元素作为前缀,并将其余元素继续全排列,等到出口,出口出去后还需要还原数组 + + +这个用数组来测试更容易写代码和直观: + + +``` +def recPermute(nums,begin): + n = len(nums) + if begin == n: + print nums, + + for i in range(begin,n): + nums[begin], nums[i] = nums[i],nums[begin] + recPermute(nums,begin+1) + nums[begin],nums[i] = nums[i],nums[begin] + +recPermute(['A','B','C'],0) + +``` + +这样的写法更容易理解: + + +```python +class Solution: + # @param num, a list of integer + # @return a list of lists of integers + def permute(self, num): + if len(num) == 0: return [] + if len(num) == 1: return [num] + res = [] + for i in range(len(num)): + x = num[i] + xs = num[:i] + num[i+1:] + for j in self.permute(xs): + res.append([x] + j) + return res +``` + +每次用一个没有用过的头元素,然后加上全排列产生的结果. + +如果分析复杂度,应该也是O(n!) + + +#### 47. Permutations II + + +最简单的想法: + +- 排序 +- 如果碰到重复的就继续处理下一个 + +``` +class Solution(object): + def permuteUnique(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + if len(nums) == 0: return [] + if len(nums) == 1: return [nums] + res = [] + nums.sort() + for i in range(len(nums)): + if i > 0 and nums[i] == nums[i-1]: continue + for j in self.permuteUnique(nums[:i] + nums[i+1:]): + res.append([nums[i]] + j) + return res + +``` + + + + +#### 31. Next Permutation + +实际上这个题目也就是Generation in lexicographic order, + +wikipedia 和 [这里](https://www.nayuki.io/page/next-lexicographical-permutation-algorithm) 有很好,很精妙的算法,也有点two pointer的意思 + + +``` +1. Find the highest index i such that s[i] < s[i+1]. If no such index exists, the permutation is the last permutation. +2. Find the highest index j > i such that s[j] > s[i]. Such a j must exist, since i+1 is such an index. +3. Swap s[i] with s[j]. +4. Reverse the order of all of the elements after index i till the last element. +``` + + +看例子: + +125430 + + +- 从末尾开始,找到decreasing subsequence,5430,因为来调5330无论怎么调,都不可能有比它更小的,数也被自然的分成两部分(1,2) 和 (5,4,3,0) +- 下一步是找这个sequence里面第一个比前面部分,比2大的,3,也很容易理解,因为下一个必定是(1,3)打头 +- 交换 3和2 ,变成 (1,3,5,4,2,0),再把后面的部分reverse,得到后面部分可得到的最小的 + +这个时候,得到下一个sequence 130245 + + + +``` +class Solution(object): + def nextPermutation(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + m, n = 0, 0 + for i in range(len(nums) - 2, 0 , -1): + if nums[i] < nums[i+1]: + m = i + break + + for i in range(len(nums) - 1, 0 , -1): + if nums[i] > nums[m]: + n = i + break + + if m < n : + nums[m], nums[n] = nums[n], nums[m] + nums[m+1:] = nums[len(nums):m:-1] + else: + nums = nums.reverse() +``` + + +所以可以用这个next permutation来解46/47也可以,然后我兴奋了一下,这个算法很快的!然后我又冷静了,因为permutation的个数是O(n!)个啊|||,所以也不可能有啥大的提升吧 diff --git "a/docs/Leetcode_Solutions/Python/Summarization/\345\205\253\346\216\222\345\272\217.md" "b/docs/Leetcode_Solutions/Python/Summarization/\345\205\253\346\216\222\345\272\217.md" new file mode 100644 index 000000000..83b327202 --- /dev/null +++ "b/docs/Leetcode_Solutions/Python/Summarization/\345\205\253\346\216\222\345\272\217.md" @@ -0,0 +1,386 @@ +## 前言 +八大排序,三大查找是《数据结构》当中非常基础的知识点,在这里为了复习顺带总结了一下常见的八种排序算法。 +常见的八大排序算法,他们之间关系如下: + +![](/images/SortingAlgorithm/八大排序算法总结.png) + +他们的性能比较: + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +### 直接插入排序 (Insertion sort) + +![](/images/SortingAlgorithm/直接插入排序.gif) + +直接插入排序的核心思想就是:将数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已排序的元素小,则交换,直到全部元素都比较过。 +因此,从上面的描述中我们可以发现,直接插入排序可以用两个循环完成: + +1. 第一层循环:遍历待比较的所有数组元素 +2. 第二层循环:将本轮选择的元素(selected)与已经排好序的元素(ordered)相比较。 + - 如果```selected > ordered```,那么将二者交换 + +```python +#直接插入排序 +def insert_sort(L): + #遍历数组中的所有元素,其中0号索引元素默认已排序,因此从1开始 + for x in range(1,len(L)): + #将该元素与已排序好的前序数组依次比较,如果该元素小,则交换 + #range(x-1,-1,-1):从x-1倒序循环到0 + for i in range(x-1,-1,-1): + #判断:如果符合条件则交换 + if L[i] > L[i+1]: + L[i], L[i+1] = L[i+1], L[i] +``` +### 希尔排序 (Shell sort) + +![](/images/SortingAlgorithm/希尔排序.png) + +希尔排序的算法思想:将待排序数组按照步长gap进行分组,然后将每组的元素利用直接插入排序的方法进行排序;每次将gap折半减小,循环上述操作;当gap=1时,利用直接插入,完成排序。 +同样的:从上面的描述中我们可以发现:希尔排序的总体实现应该由三个循环完成: + +1. 第一层循环:将gap依次折半,对序列进行分组,直到gap=1 +2. 第二、三层循环:也即直接插入排序所需要的两次循环。具体描述见上。 + +```python +#希尔排序 +def insert_shell(L): + #初始化gap值,此处利用序列长度的一半为其赋值 + gap = int(len(L)/2) + #第一层循环:依次改变gap值对列表进行分组 + while (gap >= 1): + #下面:利用直接插入排序的思想对分组数据进行排序 + #range(gap,len(L)):从gap开始 + for x in range(gap,len(L)): + #range(x-gap,-1,-gap):从x-gap开始与选定元素开始倒序比较,每个比较元素之间间隔gap + for i in range(x-gap,-1,-gap): + #如果该组当中两个元素满足交换条件,则进行交换 + if L[i] > L[i+gap]: + L[i], L[i+gap] = L[i+gap], L[i] + #while循环条件折半 + gap = int((gap/2)) +``` + +### 简单选择排序 (Selection sort) + +![](/images/SortingAlgorithm/简单选择排序.gif) + +简单选择排序的基本思想:比较+交换。 + +1. 从待排序序列中,找到关键字最小的元素; +2. 如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换; +3. 从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。 +因此我们可以发现,简单选择排序也是通过两层循环实现。 + - 第一层循环:依次遍历序列当中的每一个元素 + - 第二层循环:将遍历得到的当前元素依次与余下的元素进行比较,符合最小元素的条件,则交换。 + +```python +# 简单选择排序 +def select_sort(L): +#依次遍历序列中的每一个元素 + for x in range(0,len(L)): +#将当前位置的元素定义此轮循环当中的最小值 + minimum = L[x] +#将该元素与剩下的元素依次比较寻找最小元素 + for i in range(x+1,len(L)): + if L[i] < minimum: + L[i], minimum = minimum, L[i] +#将比较后得到的真正的最小值赋值给当前位置 + L[x] = minimum +``` + +### 堆排序 (Heap sort) + +#### 堆的概念 + +堆:本质是一种数组对象。特别重要的一点性质:任意的叶子节点小于(或大于)它所有的父节点。对此,又分为大顶堆和小顶堆,大顶堆要求节点的元素都要大于其孩子,小顶堆要求节点元素都小于其左右孩子,两者对左右孩子的大小关系不做任何要求。 +利用堆排序,就是基于大顶堆或者小顶堆的一种排序方法。下面,我们通过大顶堆来实现。 + +基本思想: +堆排序可以按照以下步骤来完成: + +1. 首先将序列构建称为大顶堆; + +(这样满足了大顶堆那条性质:位于根节点的元素一定是当前序列的最大值) + +![](/images/SortingAlgorithm/构建大顶堆.png) + +2. 取出当前大顶堆的根节点,将其与序列末尾元素进行交换; + +(此时:序列末尾的元素为已排序的最大值;由于交换了元素,当前位于根节点的堆并不一定满足大顶堆的性质) + +3. 对交换后的n-1个序列元素进行调整,使其满足大顶堆的性质; + +![](/images/SortingAlgorithm/调整大顶堆.png) + +4. 重复2.3步骤,直至堆中只有1个元素为止 + +```python +#-------------------------堆排序-------------------------------- +#**********获取左右叶子节点********** +def LEFT(i): + return 2*i + 1 +def RIGHT(i): + return 2*i + 2 +#********** 调整大顶堆 ********** +#L:待调整序列 length: 序列长度 i:需要调整的结点 +def adjust_max_heap(L, length, i): +#定义一个int值保存当前序列最大值的下标 + largest = i +#获得序列左右叶子节点的下标 + left, right = LEFT(i), RIGHT(i) +#当左叶子节点的下标小于序列长度 并且 左叶子节点的值大于父节点时,将左叶子节点的下标赋值给largest + if (left < length) and (L[left] > L[i]): + largest = left +#当右叶子节点的下标小于序列长度 并且 右叶子节点的值大于父节点时,将右叶子节点的下标值赋值给largest + if (right < length) and (L[right] > L[largest]): + largest = right +#如果largest不等于i 说明当前的父节点不是最大值,需要交换值 + if (largest != i): + L[i], L[largest] = L[largest], L[i] + # 执行递归操作:两个任务:1 寻找最大值的下标;2.最大值与父节点交换 + adjust_max_heap(L, length, largest) +#********** 建立大顶堆 ********** +def build_max_heap(L): + length = len(L) + for x in range(int((length-1)/2), -1, -1): + adjust_max_heap(L, length, x) +#********** 堆排序 ********** +def heap_sort(L): +#先建立大顶堆,保证最大值位于根节点;并且父节点的值大于叶子结点 + build_max_heap(L) +#i:当前堆中序列的长度.初始化为序列的长度 + i = len(L) +#执行循环:1. 每次取出堆顶元素置于序列的最后(len-1,len-2,len-3...) +# 2. 调整堆,使其继续满足大顶堆的性质,注意实时修改堆中序列的长度 + while (i > 0): + L[i-1], L[0] = L[0], L[i-1] +#堆中序列长度减1 + i -= 1 +#调整大顶堆 + adjust_max_heap(L, i, 0) +``` +### 冒泡排序 (Bubble sort) + +![](/images/SortingAlgorithm/冒泡排序.gif) + +冒泡排序思路比较简单: + +1. 将序列当中的左右元素,依次比较,保证右边的元素始终大于左边的元素; +( 第一轮结束后,序列最后一个元素一定是当前序列的最大值;) +2. 对序列当中剩下的n-1个元素再次执行步骤1。 +3. 对于长度为n的序列,一共需要执行n-1轮比较 +(利用while循环可以减少执行次数) + +```python +#冒泡排序 +def bubble_sort(L): + length = len(L) +#序列长度为length,需要执行length-1轮交换 + for x in range(1, length): +#对于每一轮交换,都将序列当中的左右元素进行比较 +#每轮交换当中,由于序列最后的元素一定是最大的,因此每轮循环到序列未排序的位置即可 + for i in range(0, length-x): + if L[i] > L[i+1]: + L[i], L[i+1] = L[i+1], L[i] +``` + +### 快速排序 (Quick sort) + +![](/images/SortingAlgorithm/快速排序.gif) + +快速排序的基本思想:挖坑填数+分治法 + +1. 从序列当中选择一个基准数(pivot) +在这里我们选择序列当中第一个数作为基准数 +2. 将序列当中的所有数依次遍历,比基准数大的位于其右侧,比基准数小的位于其左侧 +3. 重复步骤1.2,直到所有子集当中只有一个元素为止。 + +用伪代码描述如下: +- i =L; j = R; 将基准数挖出形成第一个坑a[i]。 +- j--由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中。 +- i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中。 +- 再重复执行2,3二步,直到i==j,将基准数填入a[i]中 + +```python +#快速排序 +#L:待排序的序列;start排序的开始index,end序列末尾的index +#对于长度为length的序列:start = 0;end = length-1 +def quick_sort(L, start, end): + if start < end: + i, j, pivot = start, end, L[start] + while i < j: +#从右开始向左寻找第一个小于pivot的值 + while (i < j) and (L[j] >= pivot): + j -= 1 +#将小于pivot的值移到左边 + if (i < j): + L[i] = L[j] + i += 1 +#从左开始向右寻找第一个大于pivot的值 + while (i < j) and (L[i] <= pivot): + i += 1 +#将大于pivot的值移到右边 + if (i < j): + L[j] = L[i] + j -= 1 +#循环结束后,说明 i=j,此时左边的值全都小于pivot,右边的值全都大于pivot +#pivot的位置移动正确,那么此时只需对左右两侧的序列调用此函数进一步排序即可 +#递归调用函数:依次对左侧序列:从0 ~ i-1//右侧序列:从i+1 ~ end + L[i] = pivot +#左侧序列继续排序 + quick_sort(L, start, i-1) +#右侧序列继续排序 + quick_sort(L, i+1, end) +``` + +### 归并排序 (Merge sort) + +![](/images/SortingAlgorithm/归并排序.gif) + +1. 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个典型的应用。它的基本操作是:将已有的子序列合并,达到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。 +2. 归并排序其实要做两件事: + - 分解----将序列每次折半拆分 + - 合并----将划分后的序列段两两排序合并 +因此,归并排序实际上就是两个操作,拆分+合并 +3. 如何合并? + - L[first...mid]为第一段,L[mid+1...last]为第二段,并且两端已经有序,现在我们要将两端合成达到L[first...last]并且也有序。 + - 首先依次从第一段与第二段中取出元素比较,将较小的元素赋值给temp[] + - 重复执行上一步,当某一段赋值结束,则将另一段剩下的元素赋值给temp[] + - 此时将temp[]中的元素复制给L[],则得到的L[first...last]有序 +4. 如何分解? + - 在这里,我们采用递归的方法,首先将待排序列分成A,B两组; + - 然后重复对A、B序列分组; + - 直到分组后组内只有一个元素,此时我们认为组内所有元素有序,则分组结束。 + +```python +# 归并排序 +#这是合并的函数 +# 将序列L[first...mid]与序列L[mid+1...last]进行合并 +def mergearray(L, first, mid, last, temp): +#对i,j,k分别进行赋值 + i, j, k = first, mid+1, 0 +#当左右两边都有数时进行比较,取较小的数 + while (i <= mid) and (j <= last): + if L[i] <= L[j]: + temp[k] = L[i] + i += 1 + k += 1 + else: + temp[k] = L[j] + j += 1 + k += 1 +#如果左边序列还有数 + while (i <= mid): + temp[k] = L[i] + i += 1 + k += 1 +#如果右边序列还有数 + while (j <= last): + temp[k] = L[j] + j += 1 + k += 1 +#将temp当中该段有序元素赋值给L待排序列使之部分有序 + for x in range(0, k): + L[first+x] = temp[x] +# 这是分组的函数 +def merge_sort(L, first, last, temp): + if first < last: + mid = int(((first + last) / 2)) +#使左边序列有序 + merge_sort(L, first, mid, temp) +#使右边序列有序 + merge_sort(L, mid+1, last, temp) +#将两个有序序列合并 + mergearray(L, first, mid, last, temp) +# 归并排序的函数 +def merge_sort_array(L): +#声明一个长度为len(L)的空列表 + temp = len(L)*[None] +#调用归并排序 + merge_sort(L, 0, len(L)-1, temp) +``` + +### 基数排序 (Radix sort) + +![](/images/SortingAlgorithm/基数排序.gif) + +1. 基数排序:通过序列中各个元素的值,对排序的N个元素进行若干趟的“分配”与“收集”来实现排序。 + - 分配:我们将L[i]中的元素取出,首先确定其个位上的数字,根据该数字分配到与之序号相同的桶中 + - 收集:当序列中所有的元素都分配到对应的桶中,再按照顺序依次将桶中的元素收集形成新的一个待排序列L[ ] + - 对新形成的序列L[]重复执行分配和收集元素中的十位、百位...直到分配完该序列中的最高位,则排序结束 +2. 根据上述“基数排序”的展示,我们可以清楚的看到整个实现的过程 + +```python +#************************基数排序**************************** +#确定排序的次数 +#排序的顺序跟序列中最大数的位数相关 +def radix_sort_nums(L): + maxNum = L[0] +#寻找序列中的最大数 + for x in L: + if maxNum < x: + maxNum = x +#确定序列中的最大元素的位数 + times = 0 + while (maxNum > 0): + maxNum = int((maxNum/10)) + times += 1 + return times +#找到num从低到高第pos位的数据 +def get_num_pos(num, pos): + return (int((num/(10**(pos-1))))) % 10 +#基数排序 +def radix_sort(L): + count = 10 * [None] #存放各个桶的数据统计个数 + bucket = len(L) * [None] #暂时存放排序结果 +#从低位到高位依次执行循环 + for pos in range(1, radix_sort_nums(L)+1): + #置空各个桶的数据统计 + for x in range(0, 10): + count[x] = 0 + #统计当前该位(个位,十位,百位....)的元素数目 + for x in range(0, len(L)): + #统计各个桶将要装进去的元素个数 + j = get_num_pos(int(L[x]), pos) + count[j] += 1 + #count[i]表示第i个桶的右边界索引 + for x in range(1,10): + count[x] += count[x-1] + #将数据依次装入桶中 + for x in range(len(L)-1, -1, -1): + #求出元素第K位的数字 + j = get_num_pos(L[x], pos) + #放入对应的桶中,count[j]-1是第j个桶的右边界索引 + bucket[count[j]-1] = L[x] + #对应桶的装入数据索引-1 + count[j] -= 1 + # 将已分配好的桶中数据再倒出来,此时已是对应当前位数有序的表 + for x in range(0, len(L)): + L[x] = bucket[x] +``` + +## 运行时间实测 + +10w数据 +``` +直接插入排序:1233.581131 +希尔排序:1409.8012320000003 +简单选择排序:466.66974500000015 +堆排序:1.2036720000000969 +冒泡排序:751.274449 +#**************************************************** +快速排序:1.0000003385357559e-06 +#快速排序有误:实际上并未执行 +#RecursionError: maximum recursion depth exceeded in comparison +#**************************************************** +归并排序:0.8262230000000272 +基数排序:1.1162899999999354 +``` +从运行结果上来看,堆排序、归并排序、基数排序真的快。 +对于快速排序迭代深度超过的问题,可以将考虑将快排通过非递归的方式进行实现。 + +## Resources + +1. [算法导论》笔记汇总](http://mindlee.com/2011/08/21/study-notes-directory/) +2. [八大排序算法的 Python 实现](http://python.jobbole.com/82270/) +3. [数据结构常见的八大排序算法(详细整理)](https://www.jianshu.com/p/7d037c332a9d) diff --git "a/docs/Leetcode_Solutions/Python/Summarization/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" "b/docs/Leetcode_Solutions/Python/Summarization/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" new file mode 100644 index 000000000..0d4afa96a --- /dev/null +++ "b/docs/Leetcode_Solutions/Python/Summarization/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" @@ -0,0 +1,114 @@ +###子集合问题 + +####78. Subsets + +子集合是全排列的好朋友,也是combination组合的好朋友,排列·组合·子集,他们三个都是好朋友. + + +#####从空开始加 + +同样先来看'ABC' + +``` +def recsubsets(sofar, rest): + if rest == '': + print sofar, + else: + recsubsets(sofar, rest[1:]) + recsubsets(sofar + rest[0], rest[1:]) + +def listsubsets(s): + recsubsets('',s) + + +listsubsets('ABC') +``` + +##### 市面流行思路 + +市面上流行的思路: + +- [[],[1]] 是 [1] 的子集合 +- [[],[1],[2],[1,2]] 是 [1,2] 的子集合,实际上就是1的子集合们加了一个2 + + +所以用python写起来也很简单/精美 + +``` +def subsets(nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + results = [[]] + for num in nums: + results.extend([result + [num] for result in results]) + return results +``` +我在这里犯过错,所以这一句 + +`results.extend([result + [num] for result in results])` 实际上等于: + + +``` +tmp = [] +for result in results: + tmp.append(result + [num]) +results.extend(tmp) +``` + + + + + +#### 90. Subsets II + + +要去重了,比如如果有 [1,2,2],那么解答为: + + + [ + [2], + [1], + [1,2,2], + [2,2], + [1,2], + [] + ] + + +现在来观察规律,与之前有不同之处是我们需要一个位置来mark,因为不再需要往之前出现过的地方再加了,看这个: + + +``` +[[],[1]] 是 [1] 的子集合 +[[],[1],[2],[1,2]] 是 [1,2] 的子集合,实际上就是1的子集合们加了一个2 +新来的2不能再从头开始加了,它需要从[ .., [2],[1,2] ]加 才是合理的 +``` + +所以看到非常精妙的代码 + + +``` +def subsets(nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + nums.sort() + result = [[]] + temp_size = 0 + + for i in range(len(nums)): + start = temp_size if i >= 1 and nums[i] == nums[i-1] else 0 + temp_size = len(result) + #print start,temp_size,result + for j in range(start, temp_size): + result.append(result[j] + [nums[i]]) + print result + +subsets([1,2,2]) +``` + +这里这个start是来记录了之前一次数组的长度,temp_size记住目前数组的长度,然后用这个来达到去重的目的,非常聪明 + diff --git "a/docs/Leetcode_Solutions/Python/Summarization/\346\200\273\347\273\223.md" "b/docs/Leetcode_Solutions/Python/Summarization/\346\200\273\347\273\223.md" new file mode 100644 index 000000000..99fcba752 --- /dev/null +++ "b/docs/Leetcode_Solutions/Python/Summarization/\346\200\273\347\273\223.md" @@ -0,0 +1,120 @@ +# 1 +```solution```下自定义函数```func(self, fargs, *args, **kwargs)```, 调用时使用```self.func()```的格式 + +# 2 +```not fargs``` 和 ```fargs == None```不一样,前者```fargs```可能为[], '', 0, etc + +# 3 +递归问题 +Any problem can be solved using dp. Solving using a greedy strategy is harder though, since you need to prove that greedy will work for that problem. There are some tell-tale signs of a problem where greedy may be applicable, but isn’t immediately apparent. Example: + +- Choice of an element depends only on its immediate neighbours (wiggle sort). +- Answer is monotonically non-decreasing or non-increasing (sorting). This is also applicable for LIS for example. +- Anything that requires lexicographically largest or smallest of something. +- Anything where processing the input in sorted order will help. +- Anything where processing the input in forward or reverse (as given) will help. +- Anything which requires you to track the minimum or maximum of something (think of sliding window problems). + +There’s matroid theory which deal with greedy algorithms, but I don’t really understand it. If someone does, I’ll be super grateful to them to explain it to me in simple language! + +In general, try to see if for a problem, the solution doesn’t depend on a lot of history about the solution itself, but the next part of the solution is somewhat independent from the rest of the solution. These are all indicative of the fact that a greedy strategy could be applicable. + +# 4 +[Counter.elements()](https://docs.python.org/2/library/collections.html) + +# 5 +测试案例写法 + +```python +import unittest +class Solution(object): + def isMatch(self, s, p): + """ + :type s: str + :type p: str + :rtype: bool + """ + m, n = len(s), len(p) + dp = [ [0 for i in range(n+1)] for j in range(m+1)] + + dp[0][0] = 1 + + # init the first line + for i in range(2,n+1): + if p[i-1] == '*': + dp[0][i] = dp[0][i-2] + + for i in range(1,m+1): + for j in range(1,n+1): + if p[j-1] == '*': + if p[j-2] != s[i-1] and p[j-2] != '.': + dp[i][j] = dp[i][j-2] + elif p[j-2] == s[i-1] or p[j-2] == '.': + dp[i][j] = dp[i-1][j] or dp[i][j-2] + + elif s[i-1] == p[j-1] or p[j-1] == '.': + dp[i][j] = dp[i-1][j-1] + + return dp[m][n] == 1 + + +class TestSolution(unittest.TestCase): + def test_none_0(self): + s = "" + p = "" + self.assertTrue(Solution().isMatch(s, p)) + + def test_none_1(self): + s = "" + p = "a" + self.assertFalse(Solution().isMatch(s, p)) + + def test_no_symbol_equal(self): + s = "abcd" + p = "abcd" + self.assertTrue(Solution().isMatch(s, p)) + + def test_no_symbol_not_equal_0(self): + s = "abcd" + p = "efgh" + self.assertFalse(Solution().isMatch(s, p)) + + def test_no_symbol_not_equal_1(self): + s = "ab" + p = "abb" + self.assertFalse(Solution().isMatch(s, p)) + + def test_symbol_0(self): + s = "" + p = "a*" + self.assertTrue(Solution().isMatch(s, p)) + + def test_symbol_1(self): + s = "a" + p = "ab*" + self.assertTrue(Solution().isMatch(s, p)) + + def test_symbol_2(self): + # E.g. + # s a b b + # p 1 0 0 0 + # a 0 1 0 0 + # b 0 0 1 0 + # * 0 1 1 1 + s = "abb" + p = "ab*" + self.assertTrue(Solution().isMatch(s, p)) + + +if __name__ == "__main__": + unittest.main() + + + +输出: +........ + +Ran 8 tests in 0.001s + +OK +``` diff --git "a/docs/Leetcode_Solutions/Python/Summarization/\347\273\204\345\220\210\351\227\256\351\242\230.md" "b/docs/Leetcode_Solutions/Python/Summarization/\347\273\204\345\220\210\351\227\256\351\242\230.md" new file mode 100644 index 000000000..33f295e82 --- /dev/null +++ "b/docs/Leetcode_Solutions/Python/Summarization/\347\273\204\345\220\210\351\227\256\351\242\230.md" @@ -0,0 +1,84 @@ +### 组合问题 + + +#### 77.Combinations + + +##### 会超时的recursion + + + +``` +class Solution(object): + def combine(self, n, k): + """ + :type n: int + :type k: int + :rtype: List[List[int]] + """ + ans = [] + self.dfs(n, k, 1, [], ans) + return ans + + def dfs(self, n, k ,start, lst, ans): + if k == 0 : + ans.append(lst) + return + for i in range(start, n+1): + self.dfs(n, k - 1, i + 1,lst +[i], ans) +``` + +理解方式 + +``` + + 1 2 3 + 12 13 14 23 24 34 +``` + +可以参照这里 + + + + + +##### 市面上流行解法 + +递归的思想: n选k + +- 如果 k==n ,则全选。 +- n > k 又可以分成两类: + - 选了n, 则在余下的n-1中选k-1 + - 没有选n, 则在余下的n-1中选k + +注意一下会有两个base case,因为k在不断减小和n在不断减小,所以写起来可以这样: + + +``` +def combine(n,k): + if k == 1: + return [[i+1] for i in range(n)] + if n == k: + return [range(1, k+1)] + # choose n , not choose n + return [r + [n] for r in combine(n-1,k-1)] + combine(n-1,k) + + +print combine(20,16) +``` + + +#### 39. Combination Sum + + +使用正常递归思路 + + +#### 40. Combination Sum II + +重复做跳过处理 + +#### 216. Combination Sum III + + +#### 377. Combination Sum IV diff --git "a/docs/Leetcode_Solutions/Python/Summarization/\351\200\222\345\275\222_recursion.md" "b/docs/Leetcode_Solutions/Python/Summarization/\351\200\222\345\275\222_recursion.md" new file mode 100644 index 000000000..413872965 --- /dev/null +++ "b/docs/Leetcode_Solutions/Python/Summarization/\351\200\222\345\275\222_recursion.md" @@ -0,0 +1,39 @@ +#递归 Recursion + +### 递归 + +递归绝对是一个非常重要的概念。比如安利? 不断的delegate,本来想要完成1000个人的销售,找10个人,每人完成100人的,这10个人每人再去找10个人,每人完成10人的销售,这样就完成了1000人的销售(不懂安利是否这样,拿来举例)。 + + +递归之所以重要,这里面存在的概念太多了,首先上面这个例子里面就有divide and conquer的意思,把task divide小,然后来解决它。 + + +同样有趣的例子 → 吃完一个bowl of chips: + +- for loop,知道多少薯片,然后从0开始吃到最后 +- while, while 碗里还有薯片,就吃 +- 递归,吃一片,然后继续吃剩下的 N - 1 片,直到碗里的薯片数量只剩下0片了 + + +典型的例子: + +- pow(x,n) +- isPalindrome +- TowerofHanoi +- binarySearch + + + +### 链表, 树, 图 + +链表(linked list) 是数据结构的基础,而链表本身就是具有递归特性的,看C++中对于linked list node的定义, next指向本身这样的结构,就是再这个node定义还未完成之时,我们已经指向自己。 + + +``` +struct node{ + int data; + node* next; +}; +``` + +binary tree定义就是靠递归来实现的。 From eadb8093f2c4fd9353eb49d0d19dc5400cec0601 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 26 Apr 2018 02:54:25 -0500 Subject: [PATCH 0511/2496] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index cb209f235..3813dccd2 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ 8. [HiredInTech](https://www.hiredintech.com/) System Design 的总结特别适合入门 9. [mitcc的Github](https://github.com/mitcc/AlgoSolutions) 10. [小土刀的面试刷题笔记](http://wdxtub.com/interview/14520594642530.html) +11. [nonstriater/Learn-Algorithms](https://github.com/nonstriater/Learn-Algorithms) ### Please note, this repository is inspired from [KrisYu](https://github.com/KrisYu/LeetCode-CLRS-Python). However, it has been modified, added and improved to reflect our knowledge, wisdom and effort. From 098de5afb4f3e0cda71e8ca97f5ce0cf931c74ac Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Mon, 14 May 2018 11:00:34 -0500 Subject: [PATCH 0512/2496] remove unnecessary version --- docs/Algorithm_Templates/C++/Cipher/README.md | 0 .../C++/Compression/README.md | 1 - .../C++/Conversion/README.md | 0 .../C++/Data_Structure/Graph/README.md | 15 - .../C++/Data_Structure/HashMap/README.md | 15 - .../C++/Data_Structure/HashTable/README.md | 15 - .../C++/Data_Structure/Heqp/README.md | 15 - .../C++/Data_Structure/LinkedList/README.md | 15 - .../C++/Data_Structure/Matrix/README.md | 15 - .../C++/Data_Structure/Queue/README.md | 15 - .../C++/Data_Structure/README.md | 1 - .../C++/Data_Structure/Stack/README.md | 15 - .../C++/Data_Structure/Tree/README.md | 15 - .../C++/Dynamic_Programming/README.md | 0 docs/Algorithm_Templates/C++/Hash/README.md | 0 .../C++/Others/NextNodeInOrderTree.md | 45 -- .../C++/Others/TopKWords.java | 86 ---- docs/Algorithm_Templates/C++/Others/words.txt | 11 - docs/Algorithm_Templates/C++/README.md | 16 - docs/Algorithm_Templates/C++/Search/README.md | 0 .../C++/Sort/BubbleSort.py | 19 - .../C++/Sort/InsertSort.py | 24 -- .../Algorithm_Templates/C++/Sort/MergeSort.py | 35 -- .../Algorithm_Templates/C++/Sort/QuickSort.py | 35 -- docs/Algorithm_Templates/C++/Sort/README.md | 16 - .../Algorithm_Templates/C++/Sort/RadixSort.py | 46 --- .../C++/Sort/SelectionSort.py | 28 -- .../Algorithm_Templates/C++/Sort/ShellSort.py | 25 -- .../C++/Traversals/README.md | 0 .../Algorithm_Templates/Java/Cipher/README.md | 0 .../Java/Compression/README.md | 1 - .../Java/Conversion/README.md | 0 .../Java/Data_Structure/Graph/README.md | 15 - .../Java/Data_Structure/HashMap/README.md | 15 - .../Java/Data_Structure/HashTable/README.md | 15 - .../Java/Data_Structure/Heqp/README.md | 15 - .../Java/Data_Structure/LinkedList/README.md | 15 - .../Java/Data_Structure/Matrix/README.md | 15 - .../Java/Data_Structure/Queue/README.md | 15 - .../Java/Data_Structure/README.md | 1 - .../Java/Data_Structure/Stack/README.md | 15 - .../Java/Data_Structure/Tree/README.md | 15 - .../Java/Dynamic_Programming/README.md | 0 docs/Algorithm_Templates/Java/Hash/README.md | 0 .../Java/Others/NextNodeInOrderTree.md | 45 -- .../Java/Others/TopKWords.java | 86 ---- .../Algorithm_Templates/Java/Others/words.txt | 11 - docs/Algorithm_Templates/Java/README.md | 16 - .../Algorithm_Templates/Java/Search/README.md | 0 .../Java/Sort/BubbleSort.py | 19 - .../Java/Sort/InsertSort.py | 24 -- .../Java/Sort/MergeSort.py | 35 -- .../Java/Sort/QuickSort.py | 35 -- docs/Algorithm_Templates/Java/Sort/README.md | 16 - .../Java/Sort/RadixSort.py | 46 --- .../Java/Sort/SelectionSort.py | 28 -- .../Java/Sort/ShellSort.py | 25 -- .../Java/Traversals/README.md | 0 ...wo_sum \344\270\212\345\215\2102.49.12.md" | 43 -- ...umbers \344\270\212\345\215\2102.49.12.md" | 37 -- ...acters \344\270\212\345\215\2102.49.12.md" | 84 ---- ...arrays \344\270\212\345\215\2102.49.12.md" | 260 ------------ ...string \344\270\212\345\215\2102.49.12.md" | 241 ----------- ...ersion \344\270\212\345\215\2102.49.12.md" | 67 --- ...nteger \344\270\212\345\215\2102.49.12.md" | 65 --- ...(atoi) \344\270\212\345\215\2102.49.12.md" | 53 --- ...Number \344\270\212\345\215\2102.49.12.md" | 31 -- ...tching \344\270\212\345\215\2102.49.12.md" | 229 ----------- ..._water \344\270\212\345\215\2102.49.12.md" | 112 ----- ..._Roman \344\270\212\345\215\2102.49.12.md" | 71 ---- ...nteger \344\270\212\345\215\2102.49.12.md" | 82 ---- ...prefix \344\270\212\345\215\2102.49.13.md" | 77 ---- ...._3sum \344\270\212\345\215\2102.49.13.md" | 106 ----- ...losest \344\270\212\345\215\2102.49.13.md" | 51 --- ...number \344\270\212\345\215\2102.49.13.md" | 51 --- ...._4sum \344\270\212\345\215\2102.49.13.md" | 136 ------ ...f_list \344\270\212\345\215\2102.49.13.md" | 42 -- ...theses \344\270\212\345\215\2102.49.13.md" | 52 --- ..._lists \344\270\212\345\215\2102.49.13.md" | 48 --- ...theses \344\270\212\345\215\2102.49.13.md" | 88 ---- ..._lists \344\270\212\345\215\2102.49.13.md" | 46 --- ..._pairs \344\270\212\345\215\2102.49.13.md" | 35 -- ..._Array \344\270\212\345\215\2102.49.13.md" | 73 ---- ...lement \344\270\212\345\215\2102.49.13.md" | 25 -- ...rstr() \344\270\212\345\215\2102.49.13.md" | 47 --- ..._Words \344\270\212\345\215\2102.49.13.md" | 54 --- ...tation \344\270\212\345\215\2102.49.13.md" | 103 ----- ..._array \344\270\212\345\215\2102.49.13.md" | 53 --- ... Range \344\270\212\345\215\2102.49.13.md" | 77 ---- ...sition \344\270\212\345\215\2102.49.13.md" | 48 --- ...nd_Say \344\270\212\345\215\2102.49.13.md" | 98 ----- ...on_sum \344\270\212\345\215\2102.49.13.md" | 64 --- ...sum_ii \344\270\212\345\215\2102.49.13.md" | 39 -- ..._water \344\270\212\345\215\2102.49.13.md" | 39 -- ...trings \344\270\212\345\215\2102.49.13.md" | 81 ---- ...tching \344\270\212\345\215\2102.49.13.md" | 44 -- ...ame_II \344\270\212\345\215\2102.49.13.md" | 43 -- ...ations \344\270\212\345\215\2102.49.13.md" | 138 ------- ...ons_ii \344\270\212\345\215\2102.49.13.md" | 42 -- ..._image \344\270\212\345\215\2102.49.13.md" | 105 ----- ...python \344\270\212\345\215\2102.49.13.md" | 28 -- ...(x,_n) \344\270\212\345\215\2102.49.13.md" | 48 --- ...queens \344\270\212\345\215\2102.49.13.md" | 38 -- ...ens_ii \344\270\212\345\215\2102.49.13.md" | 46 --- ...barray \344\270\212\345\215\2102.49.13.md" | 146 ------- ...matrix \344\270\212\345\215\2102.49.13.md" | 139 ------- ...p_game \344\270\212\345\215\2102.49.13.md" | 39 -- ...ervals \344\270\212\345\215\2102.49.13.md" | 31 -- ...t_word \344\270\212\345\215\2102.49.13.md" | 45 -- ...rix_ii \344\270\212\345\215\2102.49.13.md" | 67 --- ...quence \344\270\212\345\215\2102.49.13.md" | 93 ----- ...e_list \344\270\212\345\215\2102.49.13.md" | 58 --- ...th_sum \344\270\212\345\215\2102.49.13.md" | 58 --- ...ths_ii \344\270\212\345\215\2102.49.13.md" | 84 ---- ...us_one \344\270\212\345\215\2102.49.13.md" | 60 --- ...binary \344\270\212\345\215\2102.49.13.md" | 31 -- ...qrt(x) \344\270\212\345\215\2102.49.13.md" | 101 ----- ...Stairs \344\270\212\345\215\2102.49.13.md" | 99 ----- ...stance \344\270\212\345\215\2102.49.13.md" | 116 ------ ...Zeroes \344\270\212\345\215\2102.49.13.md" | 55 --- ...matrix \344\270\212\345\215\2102.49.13.md" | 81 ---- ...colors \344\270\212\345\215\2102.49.13.md" | 54 --- ...string \344\270\212\345\215\2102.49.13.md" | 44 -- ...ations \344\270\212\345\215\2102.49.13.md" | 123 ------ ...bsets \344\270\212\345\215\2102.49.13.md" | 47 --- ...search \344\270\212\345\215\2102.49.13.md" | 63 --- ...ist_ii \344\270\212\345\215\2102.49.13.md" | 49 --- ...d_list \344\270\212\345\215\2102.49.13.md" | 28 -- ...n_list \344\270\212\345\215\2102.49.13.md" | 56 --- ..._array \344\270\212\345\215\2102.49.13.md" | 46 --- ...y_code \344\270\212\345\215\2102.49.13.md" | 101 ----- ...ets_ii \344\270\212\345\215\2102.49.13.md" | 80 ---- ...e_ways \344\270\212\345\215\2102.49.13.md" | 71 ---- ...ist_ii \344\270\212\345\215\2102.49.13.md" | 66 --- ...resses \344\270\212\345\215\2102.49.13.md" | 66 --- ...versal \344\270\212\345\215\2102.49.13.md" | 92 ----- ..._trees \344\270\212\345\215\2102.49.13.md" | 43 -- ...h_tree \344\270\212\345\215\2102.49.13.md" | 74 ---- ...e_tree \344\270\212\345\215\2102.49.13.md" | 49 --- ...c_tree \344\270\212\345\215\2102.49.13.md" | 45 -- ...versal \344\270\212\345\215\2102.49.13.md" | 62 --- ...versal \344\270\212\345\215\2102.49.13.md" | 43 -- ...y_tree \344\270\212\345\215\2102.49.13.md" | 23 -- ...versal \344\270\212\345\215\2102.49.13.md" | 100 ----- ...versal \344\270\212\345\215\2102.49.13.md" | 68 --- ...sal_ii \344\270\212\345\215\2102.49.13.md" | 48 --- ...h_tree \344\270\212\345\215\2102.49.13.md" | 41 -- ...h_tree \344\270\212\345\215\2102.49.13.md" | 47 --- ...y_tree \344\270\212\345\215\2102.49.13.md" | 37 -- ...y_tree \344\270\212\345\215\2102.49.13.md" | 94 ----- ...th_sum \344\270\212\345\215\2102.49.13.md" | 28 -- ...sum_ii \344\270\212\345\215\2102.49.13.md" | 40 -- ...d_list \344\270\212\345\215\2102.49.13.md" | 71 ---- ...h_node \344\270\212\345\215\2102.49.13.md" | 36 -- ...iangle \344\270\212\345\215\2102.49.13.md" | 36 -- ...gle II \344\270\212\345\215\2102.49.13.md" | 59 --- ...iangle \344\270\212\345\215\2102.49.13.md" | 72 ---- ..._Stock \344\270\212\345\215\2102.49.13.md" | 59 --- ...ndrome \344\270\212\345\215\2102.49.13.md" | 46 --- ...der II \344\270\212\345\215\2102.49.13.md" | 99 ----- ...ladder \344\270\212\345\215\2102.49.13.md" | 43 -- ...quence \344\270\212\345\215\2102.49.13.md" | 70 ---- ...umbers \344\270\212\345\215\2102.49.13.md" | 37 -- ...egions \344\270\212\345\215\2102.49.13.md" | 147 ------- ...ioning \344\270\212\345\215\2102.49.13.md" | 48 --- ..._graph \344\270\212\345\215\2102.49.13.md" | 66 --- ...number \344\270\212\345\215\2102.49.13.md" | 42 -- ..._break \344\270\212\345\215\2102.49.13.md" | 59 --- ...eak_ii \344\270\212\345\215\2102.49.13.md" | 113 ----- ..._cycle \344\270\212\345\215\2102.49.13.md" | 105 ----- ...cle_II \344\270\212\345\215\2102.49.13.md" | 56 --- ...r_list \344\270\212\345\215\2102.49.13.md" | 112 ----- ...versal \344\270\212\345\215\2102.49.13.md" | 81 ---- ...versal \344\270\212\345\215\2102.49.13.md" | 67 --- ...t_list \344\270\212\345\215\2102.49.13.md" | 59 --- ...t_list \344\270\212\345\215\2102.49.13.md" | 138 ------- ...tation \344\270\212\345\215\2102.49.13.md" | 83 ---- ...string \344\270\212\345\215\2102.49.13.md" | 37 -- ...barray \344\270\212\345\215\2102.49.13.md" | 44 -- ..._array \344\270\212\345\215\2102.49.13.md" | 85 ---- ..._stack \344\270\212\345\215\2102.49.13.md" | 169 -------- ...acters \344\270\212\345\215\2102.49.13.md" | 32 -- ..._lists \344\270\212\345\215\2102.49.13.md" | 59 --- ...lement \344\270\212\345\215\2102.49.13.md" | 61 --- ...umbers \344\270\212\345\215\2102.49.13.md" | 47 --- ...ecimal \344\270\212\345\215\2102.49.13.md" | 42 -- ...sorted \344\270\212\345\215\2102.49.13.md" | 35 -- ..._title \344\270\212\345\215\2102.49.13.md" | 28 -- ...lement \344\270\212\345\215\2102.49.13.md" | 74 ---- ...number \344\270\212\345\215\2102.49.13.md" | 34 -- ...erator \344\270\212\345\215\2102.49.13.md" | 95 ----- ..._array \344\270\212\345\215\2102.49.13.md" | 23 -- ...1_bits \344\270\212\345\215\2102.49.13.md" | 66 --- ...robber \344\270\212\345\215\2102.49.13.md" | 53 --- ...e_view \344\270\212\345\215\2102.49.13.md" | 37 -- ...slands \344\270\212\345\215\2102.49.13.md" | 130 ------ ...ements \344\270\212\345\215\2102.49.13.md" | 38 -- ...primes \344\270\212\345\215\2102.49.13.md" | 57 --- ...trings \344\270\212\345\215\2102.49.13.md" | 39 -- ...d_list \344\270\212\345\215\2102.49.13.md" | 69 ---- ...hedule \344\270\212\345\215\2102.49.13.md" | 93 ----- ..._tree) \344\270\212\345\215\2102.49.13.md" | 89 ---- ...ule_ii \344\270\212\345\215\2102.49.13.md" | 55 --- ...design \344\270\212\345\215\2102.49.13.md" | 77 ---- ...ber_ii \344\270\212\345\215\2102.49.13.md" | 61 --- ...um_iii \344\270\212\345\215\2102.49.13.md" | 40 -- ...licate \344\270\212\345\215\2102.49.13.md" | 62 --- ...oblem \344\270\212\345\215\2102.49.13.md" | 134 ------ ...ate_ii \344\270\212\345\215\2102.49.13.md" | 35 -- ...square \344\270\212\345\215\2102.49.13.md" | 78 ---- ..._nodes \344\270\212\345\215\2102.49.13.md" | 67 --- ...e_area \344\270\212\345\215\2102.49.13.md" | 50 --- ...lator \344\270\212\345\215\2102.49.13.md" | 108 ----- ...queues \344\270\212\345\215\2102.49.13.md" | 53 --- ...y_tree \344\270\212\345\215\2102.49.13.md" | 33 -- ...tor_ii \344\270\212\345\215\2102.49.13.md" | 108 ----- ...ranges \344\270\212\345\215\2102.49.13.md" | 58 --- ...ent_ii \344\270\212\345\215\2102.49.13.md" | 62 --- ..._a_bst \344\270\212\345\215\2102.49.13.md" | 48 --- ...of_Two \344\270\212\345\215\2102.49.13.md" | 89 ---- ...stacks \344\270\212\345\215\2102.49.13.md" | 51 --- ...d_list \344\270\212\345\215\2102.49.13.md" | 94 ----- ...h_tree \344\270\212\345\215\2102.49.13.md" | 33 -- ...y_tree \344\270\212\345\215\2102.49.13.md" | 104 ----- ...d_list \344\270\212\345\215\2102.49.13.md" | 52 --- ...t_self \344\270\212\345\215\2102.49.13.md" | 100 ----- ...rix_ii \344\270\212\345\215\2102.49.13.md" | 63 --- ...nagram \344\270\212\345\215\2102.49.13.md" | 61 --- ... Rooms \344\270\212\345\215\2102.49.13.md" | 47 --- ...h_Tree \344\270\212\345\215\2102.49.13.md" | 72 ---- ... House \344\270\212\345\215\2102.49.13.md" | 57 --- ..._paths \344\270\212\345\215\2102.49.13.md" | 45 -- ...Digits \344\270\212\345\215\2102.49.13.md" | 34 -- ...d Tree \344\270\212\345\215\2102.49.13.md" | 69 ---- ...number \344\270\212\345\215\2102.49.13.md" | 38 -- ...ber_ii \344\270\212\345\215\2102.49.13.md" | 140 ------- ...use II \344\270\212\345\215\2102.49.13.md" | 60 --- ...tation \344\270\212\345\215\2102.49.13.md" | 46 --- ...ion II \344\270\212\345\215\2102.49.13.md" | 77 ---- ...number \344\270\212\345\215\2102.49.13.md" | 49 --- ... Value \344\270\212\345\215\2102.49.13.md" | 66 --- ... Fence \344\270\212\345\215\2102.49.13.md" | 65 --- ...ebrity \344\270\212\345\215\2102.49.13.md" | 65 --- ...ersion \344\270\212\345\215\2102.49.13.md" | 40 -- ...quares \344\270\212\345\215\2102.49.13.md" | 116 ------ ...e_Sort \344\270\212\345\215\2102.49.13.md" | 78 ---- ...zeroes \344\270\212\345\215\2102.49.13.md" | 128 ------ ...in_bst \344\270\212\345\215\2102.49.13.md" | 81 ---- ... Gates \344\270\212\345\215\2102.49.13.md" | 90 ---- ...f_life \344\270\212\345\215\2102.49.13.md" | 111 ----- ...attern \344\270\212\345\215\2102.49.13.md" | 42 -- ...m_game \344\270\212\345\215\2102.49.13.md" | 55 --- ... Point \344\270\212\345\215\2102.49.13.md" | 67 --- ...quence \344\270\212\345\215\2102.49.13.md" | 123 ------ ...d_cows \344\270\212\345\215\2102.49.13.md" | 119 ------ ...quence \344\270\212\345\215\2102.49.13.md" | 42 -- ...utable \344\270\212\345\215\2102.49.13.md" | 47 --- ...etters \344\270\212\345\215\2102.49.13.md" | 108 ----- ...itcher \344\270\212\345\215\2102.49.13.md" | 69 ---- ...Change \344\270\212\345\215\2102.49.13.md" | 52 --- ... Graph \344\270\212\345\215\2102.49.13.md" | 103 ----- ...ort_II \344\270\212\345\215\2102.49.13.md" | 42 -- ..._three \344\270\212\345\215\2102.49.13.md" | 48 --- ...d_list \344\270\212\345\215\2102.49.13.md" | 112 ----- ...quence \344\270\212\345\215\2102.49.13.md" | 71 ---- ...er_iii \344\270\212\345\215\2102.49.13.md" | 47 --- ...g Bits \344\270\212\345\215\2102.49.13.md" | 46 --- ...ht Sum \344\270\212\345\215\2102.49.13.md" | 58 --- ...erator \344\270\212\345\215\2102.49.13.md" | 47 --- ...f_Four \344\270\212\345\215\2102.49.13.md" | 32 -- ...string \344\270\212\345\215\2102.49.13.md" | 47 --- ...String \344\270\212\345\215\2102.49.13.md" | 61 --- ...arrays \344\270\212\345\215\2102.49.13.md" | 25 -- ...ays_ii \344\270\212\345\215\2102.49.13.md" | 65 --- ...e Game \344\270\212\345\215\2102.49.13.md" | 89 ---- ...Sum II \344\270\212\345\215\2102.49.13.md" | 47 --- ...y Tree \344\270\212\345\215\2102.49.13.md" | 52 --- ...square \344\270\212\345\215\2102.49.13.md" | 42 -- ...d List \344\270\212\345\215\2102.49.13.md" | 46 --- ...tegers \344\270\212\345\215\2102.49.13.md" | 95 ----- ..._Lower \344\270\212\345\215\2102.49.13.md" | 34 -- ...sum_iv \344\270\212\345\215\2102.49.13.md" | 77 ---- ...matrix \344\270\212\345\215\2102.49.13.md" | 107 ----- ...m O(1) \344\270\212\345\215\2102.49.13.md" | 159 -------- ...llowed \344\270\212\345\215\2102.49.13.md" | 83 ---- ...m_node \344\270\212\345\215\2102.49.13.md" | 79 ---- ...m_note \344\270\212\345\215\2102.49.13.md" | 53 --- ... Array \344\270\212\345\215\2102.49.13.md" | 105 ----- ...string \344\270\212\345\215\2102.49.13.md" | 58 --- ...e_Path \344\270\212\345\215\2102.49.13.md" | 93 ----- ...erence \344\270\212\345\215\2102.49.13.md" | 47 --- ...quence \344\270\212\345\215\2102.49.13.md" | 69 ---- ...string \344\270\212\345\215\2102.49.13.md" | 70 ---- ... Digit \344\270\212\345\215\2102.49.13.md" | 46 --- ..._watch \344\270\212\345\215\2102.49.13.md" | 60 --- ...leaves \344\270\212\345\215\2102.49.13.md" | 45 -- ...ecimal \344\270\212\345\215\2102.49.13.md" | 114 ------ ...Height \344\270\212\345\215\2102.49.13.md" | 43 -- ...z_buzz \344\270\212\345\215\2102.49.13.md" | 68 --- ...Slices \344\270\212\345\215\2102.49.13.md" | 84 ---- ...number \344\270\212\345\215\2102.49.13.md" | 46 --- ...trings \344\270\212\345\215\2102.49.13.md" | 61 --- ...et Sum \344\270\212\345\215\2102.49.13.md" | 87 ---- ..._Array \344\270\212\345\215\2102.49.13.md" | 74 ---- ...Square \344\270\212\345\215\2102.49.13.md" | 48 --- ...string \344\270\212\345\215\2102.49.13.md" | 27 -- ...um_iii \344\270\212\345\215\2102.49.13.md" | 39 -- ...String \344\270\212\345\215\2102.49.13.md" | 92 ----- ...Parser \344\270\212\345\215\2102.49.13.md" | 58 --- ..._coins \344\270\212\345\215\2102.49.13.md" | 29 -- ..._Array \344\270\212\345\215\2102.49.13.md" | 25 -- ... a BST \344\270\212\345\215\2102.49.13.md" | 62 --- ...ements \344\270\212\345\215\2102.49.13.md" | 72 ---- ...attern \344\270\212\345\215\2102.49.13.md" | 31 -- ...stance \344\270\212\345\215\2102.49.13.md" | 66 --- ...imeter \344\270\212\345\215\2102.49.13.md" | 38 -- ...String \344\270\212\345\215\2102.49.13.md" | 42 -- ...olygon \344\270\212\345\215\2102.49.13.md" | 88 ---- ...lement \344\270\212\345\215\2102.49.13.md" | 28 -- ...stance \344\270\212\345\215\2102.49.13.md" | 82 ---- ...e_Ones \344\270\212\345\215\2102.49.13.md" | 40 -- ...Fence \344\270\212\345\215\2102.49.13.md" | 133 ------ ..._Lists \344\270\212\345\215\2102.49.13.md" | 58 --- ...trings \344\270\212\345\215\2102.49.13.md" | 89 ---- ...Circle \344\270\212\345\215\2102.49.13.md" | 23 -- ..._Array \344\270\212\345\215\2102.49.13.md" | 48 --- ...her_II \344\270\212\345\215\2102.49.13.md" | 74 ---- ...t_Time \344\270\212\345\215\2102.49.13.md" | 46 --- ...l_Game \344\270\212\345\215\2102.49.13.md" | 37 -- ...e_Path \344\270\212\345\215\2102.49.13.md" | 58 --- ...d_earn \344\270\212\345\215\2102.49.13.md" | 29 -- ...ppings \344\270\212\345\215\2102.49.13.md" | 31 -- ...README \344\270\212\345\215\2102.49.13.md" | 1 - ...h \344\270\215\346\230\223\345\206\231.md" | 91 ----- .../Data Structure and Algorthim Review.md" | 101 ----- .../Dynamic Programming.md" | 48 --- ...hing Algorithms \342\200\223 topcoder.pdf" | Bin 117543 -> 0 bytes ...13\347\232\204\350\275\254\346\215\242.md" | 239 ----------- .../LinkedList\346\212\200\345\267\247.md" | 118 ------ .../Maximal Square.pdf" | Bin 185749 -> 0 bytes ...00\345\267\247\347\254\224\350\256\260.py" | 96 ----- .../Range Sum Query 2D - Immutable.pdf" | Bin 167781 -> 0 bytes .../Recusrion & BackTracking.md" | 237 ----------- .../backtracking\346\200\235\350\267\257.md" | 295 ------------- ..._a_linked_list\351\227\256\351\242\230.md" | 69 ---- ...60\347\232\204\346\200\235\350\267\257.md" | 14 - ...47\232\204\345\220\204\347\247\215pass.md" | 123 ------ .../slide_windows_template.md" | 185 --------- ...\214_graph_search\357\274\214_dfs,_bfs.md" | 156 ------- .../\344\275\215\350\277\220\347\256\227.md" | 38 -- ...22\345\210\227\347\256\227\346\263\225.md" | 194 --------- .../\345\205\253\346\216\222\345\272\217.md" | 386 ------------------ ...06\345\220\210\351\227\256\351\242\230.md" | 114 ------ .../\346\200\273\347\273\223.md" | 120 ------ ...04\345\220\210\351\227\256\351\242\230.md" | 84 ---- .../\351\200\222\345\275\222_recursion.md" | 39 -- ...wo_sum \344\270\212\345\215\2102.49.12.md" | 43 -- ...umbers \344\270\212\345\215\2102.49.12.md" | 37 -- ...acters \344\270\212\345\215\2102.49.12.md" | 84 ---- ...arrays \344\270\212\345\215\2102.49.12.md" | 260 ------------ ...string \344\270\212\345\215\2102.49.12.md" | 241 ----------- ...ersion \344\270\212\345\215\2102.49.12.md" | 67 --- ...nteger \344\270\212\345\215\2102.49.12.md" | 65 --- ...(atoi) \344\270\212\345\215\2102.49.12.md" | 53 --- ...Number \344\270\212\345\215\2102.49.12.md" | 31 -- ...tching \344\270\212\345\215\2102.49.12.md" | 229 ----------- ..._water \344\270\212\345\215\2102.49.12.md" | 112 ----- ..._Roman \344\270\212\345\215\2102.49.12.md" | 71 ---- ...nteger \344\270\212\345\215\2102.49.12.md" | 82 ---- ...prefix \344\270\212\345\215\2102.49.13.md" | 77 ---- ...._3sum \344\270\212\345\215\2102.49.13.md" | 106 ----- ...losest \344\270\212\345\215\2102.49.13.md" | 51 --- ...number \344\270\212\345\215\2102.49.13.md" | 51 --- ...._4sum \344\270\212\345\215\2102.49.13.md" | 136 ------ ...f_list \344\270\212\345\215\2102.49.13.md" | 42 -- ...theses \344\270\212\345\215\2102.49.13.md" | 52 --- ..._lists \344\270\212\345\215\2102.49.13.md" | 48 --- ...theses \344\270\212\345\215\2102.49.13.md" | 88 ---- ..._lists \344\270\212\345\215\2102.49.13.md" | 46 --- ..._pairs \344\270\212\345\215\2102.49.13.md" | 35 -- ..._Array \344\270\212\345\215\2102.49.13.md" | 73 ---- ...lement \344\270\212\345\215\2102.49.13.md" | 25 -- ...rstr() \344\270\212\345\215\2102.49.13.md" | 47 --- ..._Words \344\270\212\345\215\2102.49.13.md" | 54 --- ...tation \344\270\212\345\215\2102.49.13.md" | 103 ----- ..._array \344\270\212\345\215\2102.49.13.md" | 53 --- ... Range \344\270\212\345\215\2102.49.13.md" | 77 ---- ...sition \344\270\212\345\215\2102.49.13.md" | 48 --- ...nd_Say \344\270\212\345\215\2102.49.13.md" | 98 ----- ...on_sum \344\270\212\345\215\2102.49.13.md" | 64 --- ...sum_ii \344\270\212\345\215\2102.49.13.md" | 39 -- ..._water \344\270\212\345\215\2102.49.13.md" | 39 -- ...trings \344\270\212\345\215\2102.49.13.md" | 81 ---- ...tching \344\270\212\345\215\2102.49.13.md" | 44 -- ...ame_II \344\270\212\345\215\2102.49.13.md" | 43 -- ...ations \344\270\212\345\215\2102.49.13.md" | 138 ------- ...ons_ii \344\270\212\345\215\2102.49.13.md" | 42 -- ..._image \344\270\212\345\215\2102.49.13.md" | 105 ----- ...python \344\270\212\345\215\2102.49.13.md" | 28 -- ...(x,_n) \344\270\212\345\215\2102.49.13.md" | 48 --- ...queens \344\270\212\345\215\2102.49.13.md" | 38 -- ...ens_ii \344\270\212\345\215\2102.49.13.md" | 46 --- ...barray \344\270\212\345\215\2102.49.13.md" | 146 ------- ...matrix \344\270\212\345\215\2102.49.13.md" | 139 ------- ...p_game \344\270\212\345\215\2102.49.13.md" | 39 -- ...ervals \344\270\212\345\215\2102.49.13.md" | 31 -- ...t_word \344\270\212\345\215\2102.49.13.md" | 45 -- ...rix_ii \344\270\212\345\215\2102.49.13.md" | 67 --- ...quence \344\270\212\345\215\2102.49.13.md" | 93 ----- ...e_list \344\270\212\345\215\2102.49.13.md" | 58 --- ...th_sum \344\270\212\345\215\2102.49.13.md" | 58 --- ...ths_ii \344\270\212\345\215\2102.49.13.md" | 84 ---- ...us_one \344\270\212\345\215\2102.49.13.md" | 60 --- ...binary \344\270\212\345\215\2102.49.13.md" | 31 -- ...qrt(x) \344\270\212\345\215\2102.49.13.md" | 101 ----- ...Stairs \344\270\212\345\215\2102.49.13.md" | 99 ----- ...stance \344\270\212\345\215\2102.49.13.md" | 116 ------ ...Zeroes \344\270\212\345\215\2102.49.13.md" | 55 --- ...matrix \344\270\212\345\215\2102.49.13.md" | 81 ---- ...colors \344\270\212\345\215\2102.49.13.md" | 54 --- ...string \344\270\212\345\215\2102.49.13.md" | 44 -- ...ations \344\270\212\345\215\2102.49.13.md" | 123 ------ ...bsets \344\270\212\345\215\2102.49.13.md" | 47 --- ...search \344\270\212\345\215\2102.49.13.md" | 63 --- ...ist_ii \344\270\212\345\215\2102.49.13.md" | 49 --- ...d_list \344\270\212\345\215\2102.49.13.md" | 28 -- ...n_list \344\270\212\345\215\2102.49.13.md" | 56 --- ..._array \344\270\212\345\215\2102.49.13.md" | 46 --- ...y_code \344\270\212\345\215\2102.49.13.md" | 101 ----- ...ets_ii \344\270\212\345\215\2102.49.13.md" | 80 ---- ...e_ways \344\270\212\345\215\2102.49.13.md" | 71 ---- ...ist_ii \344\270\212\345\215\2102.49.13.md" | 66 --- ...resses \344\270\212\345\215\2102.49.13.md" | 66 --- ...versal \344\270\212\345\215\2102.49.13.md" | 92 ----- ..._trees \344\270\212\345\215\2102.49.13.md" | 43 -- ...h_tree \344\270\212\345\215\2102.49.13.md" | 74 ---- ...e_tree \344\270\212\345\215\2102.49.13.md" | 49 --- ...c_tree \344\270\212\345\215\2102.49.13.md" | 45 -- ...versal \344\270\212\345\215\2102.49.13.md" | 62 --- ...versal \344\270\212\345\215\2102.49.13.md" | 43 -- ...y_tree \344\270\212\345\215\2102.49.13.md" | 23 -- ...versal \344\270\212\345\215\2102.49.13.md" | 100 ----- ...versal \344\270\212\345\215\2102.49.13.md" | 68 --- ...sal_ii \344\270\212\345\215\2102.49.13.md" | 48 --- ...h_tree \344\270\212\345\215\2102.49.13.md" | 41 -- ...h_tree \344\270\212\345\215\2102.49.13.md" | 47 --- ...y_tree \344\270\212\345\215\2102.49.13.md" | 37 -- ...y_tree \344\270\212\345\215\2102.49.13.md" | 94 ----- ...th_sum \344\270\212\345\215\2102.49.13.md" | 28 -- ...sum_ii \344\270\212\345\215\2102.49.13.md" | 40 -- ...d_list \344\270\212\345\215\2102.49.13.md" | 71 ---- ...h_node \344\270\212\345\215\2102.49.13.md" | 36 -- ...iangle \344\270\212\345\215\2102.49.13.md" | 36 -- ...gle II \344\270\212\345\215\2102.49.13.md" | 59 --- ...iangle \344\270\212\345\215\2102.49.13.md" | 72 ---- ..._Stock \344\270\212\345\215\2102.49.13.md" | 59 --- ...ndrome \344\270\212\345\215\2102.49.13.md" | 46 --- ...der II \344\270\212\345\215\2102.49.13.md" | 99 ----- ...ladder \344\270\212\345\215\2102.49.13.md" | 43 -- ...quence \344\270\212\345\215\2102.49.13.md" | 70 ---- ...umbers \344\270\212\345\215\2102.49.13.md" | 37 -- ...egions \344\270\212\345\215\2102.49.13.md" | 147 ------- ...ioning \344\270\212\345\215\2102.49.13.md" | 48 --- ..._graph \344\270\212\345\215\2102.49.13.md" | 66 --- ...number \344\270\212\345\215\2102.49.13.md" | 42 -- ..._break \344\270\212\345\215\2102.49.13.md" | 59 --- ...eak_ii \344\270\212\345\215\2102.49.13.md" | 113 ----- ..._cycle \344\270\212\345\215\2102.49.13.md" | 105 ----- ...cle_II \344\270\212\345\215\2102.49.13.md" | 56 --- ...r_list \344\270\212\345\215\2102.49.13.md" | 112 ----- ...versal \344\270\212\345\215\2102.49.13.md" | 81 ---- ...versal \344\270\212\345\215\2102.49.13.md" | 67 --- ...t_list \344\270\212\345\215\2102.49.13.md" | 59 --- ...t_list \344\270\212\345\215\2102.49.13.md" | 138 ------- ...tation \344\270\212\345\215\2102.49.13.md" | 83 ---- ...string \344\270\212\345\215\2102.49.13.md" | 37 -- ...barray \344\270\212\345\215\2102.49.13.md" | 44 -- ..._array \344\270\212\345\215\2102.49.13.md" | 85 ---- ..._stack \344\270\212\345\215\2102.49.13.md" | 169 -------- ...acters \344\270\212\345\215\2102.49.13.md" | 32 -- ..._lists \344\270\212\345\215\2102.49.13.md" | 59 --- ...lement \344\270\212\345\215\2102.49.13.md" | 61 --- ...umbers \344\270\212\345\215\2102.49.13.md" | 47 --- ...ecimal \344\270\212\345\215\2102.49.13.md" | 42 -- ...sorted \344\270\212\345\215\2102.49.13.md" | 35 -- ..._title \344\270\212\345\215\2102.49.13.md" | 28 -- ...lement \344\270\212\345\215\2102.49.13.md" | 74 ---- ...number \344\270\212\345\215\2102.49.13.md" | 34 -- ...erator \344\270\212\345\215\2102.49.13.md" | 95 ----- ..._array \344\270\212\345\215\2102.49.13.md" | 23 -- ...1_bits \344\270\212\345\215\2102.49.13.md" | 66 --- ...robber \344\270\212\345\215\2102.49.13.md" | 53 --- ...e_view \344\270\212\345\215\2102.49.13.md" | 37 -- ...slands \344\270\212\345\215\2102.49.13.md" | 130 ------ ...ements \344\270\212\345\215\2102.49.13.md" | 38 -- ...primes \344\270\212\345\215\2102.49.13.md" | 57 --- ...trings \344\270\212\345\215\2102.49.13.md" | 39 -- ...d_list \344\270\212\345\215\2102.49.13.md" | 69 ---- ...hedule \344\270\212\345\215\2102.49.13.md" | 93 ----- ..._tree) \344\270\212\345\215\2102.49.13.md" | 89 ---- ...ule_ii \344\270\212\345\215\2102.49.13.md" | 55 --- ...design \344\270\212\345\215\2102.49.13.md" | 77 ---- ...ber_ii \344\270\212\345\215\2102.49.13.md" | 61 --- ...um_iii \344\270\212\345\215\2102.49.13.md" | 40 -- ...licate \344\270\212\345\215\2102.49.13.md" | 62 --- ...oblem \344\270\212\345\215\2102.49.13.md" | 134 ------ ...ate_ii \344\270\212\345\215\2102.49.13.md" | 35 -- ...square \344\270\212\345\215\2102.49.13.md" | 78 ---- ..._nodes \344\270\212\345\215\2102.49.13.md" | 67 --- ...e_area \344\270\212\345\215\2102.49.13.md" | 50 --- ...lator \344\270\212\345\215\2102.49.13.md" | 108 ----- ...queues \344\270\212\345\215\2102.49.13.md" | 53 --- ...y_tree \344\270\212\345\215\2102.49.13.md" | 33 -- ...tor_ii \344\270\212\345\215\2102.49.13.md" | 108 ----- ...ranges \344\270\212\345\215\2102.49.13.md" | 58 --- ...ent_ii \344\270\212\345\215\2102.49.13.md" | 62 --- ..._a_bst \344\270\212\345\215\2102.49.13.md" | 48 --- ...of_Two \344\270\212\345\215\2102.49.13.md" | 89 ---- ...stacks \344\270\212\345\215\2102.49.13.md" | 51 --- ...d_list \344\270\212\345\215\2102.49.13.md" | 94 ----- ...h_tree \344\270\212\345\215\2102.49.13.md" | 33 -- ...y_tree \344\270\212\345\215\2102.49.13.md" | 104 ----- ...d_list \344\270\212\345\215\2102.49.13.md" | 52 --- ...t_self \344\270\212\345\215\2102.49.13.md" | 100 ----- ...rix_ii \344\270\212\345\215\2102.49.13.md" | 63 --- ...nagram \344\270\212\345\215\2102.49.13.md" | 61 --- ... Rooms \344\270\212\345\215\2102.49.13.md" | 47 --- ...h_Tree \344\270\212\345\215\2102.49.13.md" | 72 ---- ... House \344\270\212\345\215\2102.49.13.md" | 57 --- ..._paths \344\270\212\345\215\2102.49.13.md" | 45 -- ...Digits \344\270\212\345\215\2102.49.13.md" | 34 -- ...d Tree \344\270\212\345\215\2102.49.13.md" | 69 ---- ...number \344\270\212\345\215\2102.49.13.md" | 38 -- ...ber_ii \344\270\212\345\215\2102.49.13.md" | 140 ------- ...use II \344\270\212\345\215\2102.49.13.md" | 60 --- ...tation \344\270\212\345\215\2102.49.13.md" | 46 --- ...ion II \344\270\212\345\215\2102.49.13.md" | 77 ---- ...number \344\270\212\345\215\2102.49.13.md" | 49 --- ... Value \344\270\212\345\215\2102.49.13.md" | 66 --- ... Fence \344\270\212\345\215\2102.49.13.md" | 65 --- ...ebrity \344\270\212\345\215\2102.49.13.md" | 65 --- ...ersion \344\270\212\345\215\2102.49.13.md" | 40 -- ...quares \344\270\212\345\215\2102.49.13.md" | 116 ------ ...e_Sort \344\270\212\345\215\2102.49.13.md" | 78 ---- ...zeroes \344\270\212\345\215\2102.49.13.md" | 128 ------ ...in_bst \344\270\212\345\215\2102.49.13.md" | 81 ---- ... Gates \344\270\212\345\215\2102.49.13.md" | 90 ---- ...f_life \344\270\212\345\215\2102.49.13.md" | 111 ----- ...attern \344\270\212\345\215\2102.49.13.md" | 42 -- ...m_game \344\270\212\345\215\2102.49.13.md" | 55 --- ... Point \344\270\212\345\215\2102.49.13.md" | 67 --- ...quence \344\270\212\345\215\2102.49.13.md" | 123 ------ ...d_cows \344\270\212\345\215\2102.49.13.md" | 119 ------ ...quence \344\270\212\345\215\2102.49.13.md" | 42 -- ...utable \344\270\212\345\215\2102.49.13.md" | 47 --- ...etters \344\270\212\345\215\2102.49.13.md" | 108 ----- ...itcher \344\270\212\345\215\2102.49.13.md" | 69 ---- ...Change \344\270\212\345\215\2102.49.13.md" | 52 --- ... Graph \344\270\212\345\215\2102.49.13.md" | 103 ----- ...ort_II \344\270\212\345\215\2102.49.13.md" | 42 -- ..._three \344\270\212\345\215\2102.49.13.md" | 48 --- ...d_list \344\270\212\345\215\2102.49.13.md" | 112 ----- ...quence \344\270\212\345\215\2102.49.13.md" | 71 ---- ...er_iii \344\270\212\345\215\2102.49.13.md" | 47 --- ...g Bits \344\270\212\345\215\2102.49.13.md" | 46 --- ...ht Sum \344\270\212\345\215\2102.49.13.md" | 58 --- ...erator \344\270\212\345\215\2102.49.13.md" | 47 --- ...f_Four \344\270\212\345\215\2102.49.13.md" | 32 -- ...string \344\270\212\345\215\2102.49.13.md" | 47 --- ...String \344\270\212\345\215\2102.49.13.md" | 61 --- ...arrays \344\270\212\345\215\2102.49.13.md" | 25 -- ...ays_ii \344\270\212\345\215\2102.49.13.md" | 65 --- ...e Game \344\270\212\345\215\2102.49.13.md" | 89 ---- ...Sum II \344\270\212\345\215\2102.49.13.md" | 47 --- ...y Tree \344\270\212\345\215\2102.49.13.md" | 52 --- ...square \344\270\212\345\215\2102.49.13.md" | 42 -- ...d List \344\270\212\345\215\2102.49.13.md" | 46 --- ...tegers \344\270\212\345\215\2102.49.13.md" | 95 ----- ..._Lower \344\270\212\345\215\2102.49.13.md" | 34 -- ...sum_iv \344\270\212\345\215\2102.49.13.md" | 77 ---- ...matrix \344\270\212\345\215\2102.49.13.md" | 107 ----- ...m O(1) \344\270\212\345\215\2102.49.13.md" | 159 -------- ...llowed \344\270\212\345\215\2102.49.13.md" | 83 ---- ...m_node \344\270\212\345\215\2102.49.13.md" | 79 ---- ...m_note \344\270\212\345\215\2102.49.13.md" | 53 --- ... Array \344\270\212\345\215\2102.49.13.md" | 105 ----- ...string \344\270\212\345\215\2102.49.13.md" | 58 --- ...e_Path \344\270\212\345\215\2102.49.13.md" | 93 ----- ...erence \344\270\212\345\215\2102.49.13.md" | 47 --- ...quence \344\270\212\345\215\2102.49.13.md" | 69 ---- ...string \344\270\212\345\215\2102.49.13.md" | 70 ---- ... Digit \344\270\212\345\215\2102.49.13.md" | 46 --- ..._watch \344\270\212\345\215\2102.49.13.md" | 60 --- ...leaves \344\270\212\345\215\2102.49.13.md" | 45 -- ...ecimal \344\270\212\345\215\2102.49.13.md" | 114 ------ ...Height \344\270\212\345\215\2102.49.13.md" | 43 -- ...z_buzz \344\270\212\345\215\2102.49.13.md" | 68 --- ...Slices \344\270\212\345\215\2102.49.13.md" | 84 ---- ...number \344\270\212\345\215\2102.49.13.md" | 46 --- ...trings \344\270\212\345\215\2102.49.13.md" | 61 --- ...et Sum \344\270\212\345\215\2102.49.13.md" | 87 ---- ..._Array \344\270\212\345\215\2102.49.13.md" | 74 ---- ...Square \344\270\212\345\215\2102.49.13.md" | 48 --- ...string \344\270\212\345\215\2102.49.13.md" | 27 -- ...um_iii \344\270\212\345\215\2102.49.13.md" | 39 -- ...String \344\270\212\345\215\2102.49.13.md" | 92 ----- ...Parser \344\270\212\345\215\2102.49.13.md" | 58 --- ..._coins \344\270\212\345\215\2102.49.13.md" | 29 -- ..._Array \344\270\212\345\215\2102.49.13.md" | 25 -- ... a BST \344\270\212\345\215\2102.49.13.md" | 62 --- ...ements \344\270\212\345\215\2102.49.13.md" | 72 ---- ...attern \344\270\212\345\215\2102.49.13.md" | 31 -- ...stance \344\270\212\345\215\2102.49.13.md" | 66 --- ...imeter \344\270\212\345\215\2102.49.13.md" | 38 -- ...String \344\270\212\345\215\2102.49.13.md" | 42 -- ...olygon \344\270\212\345\215\2102.49.13.md" | 88 ---- ...lement \344\270\212\345\215\2102.49.13.md" | 28 -- ...stance \344\270\212\345\215\2102.49.13.md" | 82 ---- ...e_Ones \344\270\212\345\215\2102.49.13.md" | 40 -- ...Fence \344\270\212\345\215\2102.49.13.md" | 133 ------ ..._Lists \344\270\212\345\215\2102.49.13.md" | 58 --- ...trings \344\270\212\345\215\2102.49.13.md" | 89 ---- ...Circle \344\270\212\345\215\2102.49.13.md" | 23 -- ..._Array \344\270\212\345\215\2102.49.13.md" | 48 --- ...her_II \344\270\212\345\215\2102.49.13.md" | 74 ---- ...t_Time \344\270\212\345\215\2102.49.13.md" | 46 --- ...l_Game \344\270\212\345\215\2102.49.13.md" | 37 -- ...e_Path \344\270\212\345\215\2102.49.13.md" | 58 --- ...d_earn \344\270\212\345\215\2102.49.13.md" | 29 -- ...ppings \344\270\212\345\215\2102.49.13.md" | 31 -- ...README \344\270\212\345\215\2102.49.13.md" | 1 - ...h \344\270\215\346\230\223\345\206\231.md" | 91 ----- .../Data Structure and Algorthim Review.md" | 101 ----- .../Dynamic Programming.md" | 48 --- ...hing Algorithms \342\200\223 topcoder.pdf" | Bin 117543 -> 0 bytes ...13\347\232\204\350\275\254\346\215\242.md" | 239 ----------- .../LinkedList\346\212\200\345\267\247.md" | 118 ------ .../Maximal Square.pdf" | Bin 185749 -> 0 bytes ...00\345\267\247\347\254\224\350\256\260.py" | 96 ----- .../Range Sum Query 2D - Immutable.pdf" | Bin 167781 -> 0 bytes .../Recusrion & BackTracking.md" | 237 ----------- .../backtracking\346\200\235\350\267\257.md" | 295 ------------- ..._a_linked_list\351\227\256\351\242\230.md" | 69 ---- ...60\347\232\204\346\200\235\350\267\257.md" | 14 - ...47\232\204\345\220\204\347\247\215pass.md" | 123 ------ .../slide_windows_template.md" | 185 --------- ...\214_graph_search\357\274\214_dfs,_bfs.md" | 156 ------- .../\344\275\215\350\277\220\347\256\227.md" | 38 -- ...22\345\210\227\347\256\227\346\263\225.md" | 194 --------- .../\345\205\253\346\216\222\345\272\217.md" | 386 ------------------ ...06\345\220\210\351\227\256\351\242\230.md" | 114 ------ .../\346\200\273\347\273\223.md" | 120 ------ ...04\345\220\210\351\227\256\351\242\230.md" | 84 ---- .../\351\200\222\345\275\222_recursion.md" | 39 -- 654 files changed, 43372 deletions(-) delete mode 100644 docs/Algorithm_Templates/C++/Cipher/README.md delete mode 100644 docs/Algorithm_Templates/C++/Compression/README.md delete mode 100644 docs/Algorithm_Templates/C++/Conversion/README.md delete mode 100644 docs/Algorithm_Templates/C++/Data_Structure/Graph/README.md delete mode 100644 docs/Algorithm_Templates/C++/Data_Structure/HashMap/README.md delete mode 100644 docs/Algorithm_Templates/C++/Data_Structure/HashTable/README.md delete mode 100644 docs/Algorithm_Templates/C++/Data_Structure/Heqp/README.md delete mode 100644 docs/Algorithm_Templates/C++/Data_Structure/LinkedList/README.md delete mode 100644 docs/Algorithm_Templates/C++/Data_Structure/Matrix/README.md delete mode 100644 docs/Algorithm_Templates/C++/Data_Structure/Queue/README.md delete mode 100644 docs/Algorithm_Templates/C++/Data_Structure/README.md delete mode 100644 docs/Algorithm_Templates/C++/Data_Structure/Stack/README.md delete mode 100644 docs/Algorithm_Templates/C++/Data_Structure/Tree/README.md delete mode 100644 docs/Algorithm_Templates/C++/Dynamic_Programming/README.md delete mode 100644 docs/Algorithm_Templates/C++/Hash/README.md delete mode 100644 docs/Algorithm_Templates/C++/Others/NextNodeInOrderTree.md delete mode 100644 docs/Algorithm_Templates/C++/Others/TopKWords.java delete mode 100644 docs/Algorithm_Templates/C++/Others/words.txt delete mode 100644 docs/Algorithm_Templates/C++/README.md delete mode 100644 docs/Algorithm_Templates/C++/Search/README.md delete mode 100644 docs/Algorithm_Templates/C++/Sort/BubbleSort.py delete mode 100644 docs/Algorithm_Templates/C++/Sort/InsertSort.py delete mode 100644 docs/Algorithm_Templates/C++/Sort/MergeSort.py delete mode 100644 docs/Algorithm_Templates/C++/Sort/QuickSort.py delete mode 100644 docs/Algorithm_Templates/C++/Sort/README.md delete mode 100644 docs/Algorithm_Templates/C++/Sort/RadixSort.py delete mode 100644 docs/Algorithm_Templates/C++/Sort/SelectionSort.py delete mode 100644 docs/Algorithm_Templates/C++/Sort/ShellSort.py delete mode 100644 docs/Algorithm_Templates/C++/Traversals/README.md delete mode 100644 docs/Algorithm_Templates/Java/Cipher/README.md delete mode 100644 docs/Algorithm_Templates/Java/Compression/README.md delete mode 100644 docs/Algorithm_Templates/Java/Conversion/README.md delete mode 100644 docs/Algorithm_Templates/Java/Data_Structure/Graph/README.md delete mode 100644 docs/Algorithm_Templates/Java/Data_Structure/HashMap/README.md delete mode 100644 docs/Algorithm_Templates/Java/Data_Structure/HashTable/README.md delete mode 100644 docs/Algorithm_Templates/Java/Data_Structure/Heqp/README.md delete mode 100644 docs/Algorithm_Templates/Java/Data_Structure/LinkedList/README.md delete mode 100644 docs/Algorithm_Templates/Java/Data_Structure/Matrix/README.md delete mode 100644 docs/Algorithm_Templates/Java/Data_Structure/Queue/README.md delete mode 100644 docs/Algorithm_Templates/Java/Data_Structure/README.md delete mode 100644 docs/Algorithm_Templates/Java/Data_Structure/Stack/README.md delete mode 100644 docs/Algorithm_Templates/Java/Data_Structure/Tree/README.md delete mode 100644 docs/Algorithm_Templates/Java/Dynamic_Programming/README.md delete mode 100644 docs/Algorithm_Templates/Java/Hash/README.md delete mode 100644 docs/Algorithm_Templates/Java/Others/NextNodeInOrderTree.md delete mode 100644 docs/Algorithm_Templates/Java/Others/TopKWords.java delete mode 100644 docs/Algorithm_Templates/Java/Others/words.txt delete mode 100644 docs/Algorithm_Templates/Java/README.md delete mode 100644 docs/Algorithm_Templates/Java/Search/README.md delete mode 100644 docs/Algorithm_Templates/Java/Sort/BubbleSort.py delete mode 100644 docs/Algorithm_Templates/Java/Sort/InsertSort.py delete mode 100644 docs/Algorithm_Templates/Java/Sort/MergeSort.py delete mode 100644 docs/Algorithm_Templates/Java/Sort/QuickSort.py delete mode 100644 docs/Algorithm_Templates/Java/Sort/README.md delete mode 100644 docs/Algorithm_Templates/Java/Sort/RadixSort.py delete mode 100644 docs/Algorithm_Templates/Java/Sort/SelectionSort.py delete mode 100644 docs/Algorithm_Templates/Java/Sort/ShellSort.py delete mode 100644 docs/Algorithm_Templates/Java/Traversals/README.md delete mode 100644 "docs/Leetcode_Solutions/C++/001._two_sum \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/C++/002._add_two_numbers \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/C++/003._longest_substring_without_repeating_characters \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/C++/004._median_of_two_sorted_arrays \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/C++/005._longest_palindromic_substring \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/C++/006._ZigZag_Conversion \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/C++/007._Reverse_Integer \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/C++/008._string_to_integer_(atoi) \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/C++/009._Palindrome_Number \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/C++/010._regular_expression_matching \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/C++/011._container_with_most_water \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/C++/012._Integer_to_Roman \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/C++/013._Roman_to_Integer \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/C++/014._longest_common_prefix \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/015._3sum \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/016._3sum_closest \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/017._letter_combinations_of_a_phone_number \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/018._4sum \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/019._remove_nth_node_from_end_of_list \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/020._valid_parentheses \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/021._merge_two_sorted_lists \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/022._generate_parentheses \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/023._merge_k_sorted_lists \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/024._swap_nodes_in_pairs \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/026._Remove_Duplicates_from_Sorted_Array \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/027._Remove_Element \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/028._implement_strstr() \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/030._Substring_with_Concatenation_of_All_Words \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/031._next_permutation \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/033._search_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/034._Search for a Range \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/035._search_insert_position \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/038._Count_and_Say \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/039._combination_sum \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/040._combination_sum_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/042._trapping_rain_water \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/043._multiply_strings \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/044._wildcard_matching \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/045._Jump_Game_II \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/046._permutations \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/047._permutations_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/048._rotate_image \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/049._group_anagrams_python \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/050._pow(x,_n) \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/051._n-queens \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/052._n-queens_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/053._maximum_subarray \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/054._spiral_matrix \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/055._jump_game \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/056._Merge_Intervals \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/058._length_of_last_word \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/059._spiral_matrix_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/060._permutation_sequence \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/061._rotate_list \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/064._minimum_path_sum \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/065.unique_paths_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/066._plus_one \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/067._add_binary \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/069._sqrt(x) \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/070. Climbing Stairs \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/072._edit_distance \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/073. Set Matrix Zeroes \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/074._search_a_2d_matrix \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/075._sort_colors \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/076._Minimum_Window_Substring \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/077._combinations \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/078.Subsets \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/079._word_search \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/082._remove_duplicates_from_sorted_list_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/083._remove_duplicates_from_sorted_list \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/086._partition_list \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/088._merge_sorted_array \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/089._gray_code \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/090._subsets_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/091._decode_ways \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/092._reverse_linked_list_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/093._restore_ip_addresses \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/094._binary_tree_inorder_traversal \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/096._unique_binary_search_trees \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/098._validate_binary_search_tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/100._same_tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/101._symmetric_tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/102._binary_tree_level_order_traversal \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/103._binary_tree_zigzag_level_order_traversal \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/104._maximum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/105._construct_binary_tree_from_preorder_and_inorder_traversal \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/106._construct_binary_tree_from_inorder_and_postorder_traversal \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/107._binary_tree_level_order_traversal_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/108._convert_sorted_array_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/109._convert_sorted_list_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/110._balanced_binary_tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/111._minimum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/112._path_sum \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/113._path_sum_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/114._flatten_binary_tree_to_linked_list \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/116._populating_next_right_pointers_in_each_node \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/118._pascal's_triangle \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/119. Pascal's Triangle II \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/120. Triangle \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/121._Best_Time_to_Buy_and_Sell_Stock \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/125._valid_palindrome \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/126. Word Ladder II \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/127._word_ladder \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/128._Longest_Consecutive_Sequence \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/129._sum_root_to_leaf_numbers \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/130._surrounded_regions \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/131._palindrome_partitioning \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/133._clone_graph \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/136._single_number \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/139._word_break \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/140._word_break_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/141._linked_list_cycle \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/142_Linked_List_Cycle_II \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/143._reorder_list \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/144._binary_tree_preorder_traversal \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/145._binary_tree_postorder_traversal \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/147._insertion_sort_list \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/148._sort_list \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/150._evaluate_reverse_polish_notation \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/151._reverse_words_in_a_string \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/152._maximum_product_subarray \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/153._find_minimum_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/155._min_stack \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/159._Longest_Substring_with_At_Most_Two_Distinct_Characters \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/160._intersection_of_two_linked_lists \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/162._find_peak_element \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/165._compare_version_numbers \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/166._Fraction_to_Recurring_Decimal \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/167._two_sum_ii_-_input_array_is_sorted \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/168._excel_sheet_column_title \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/169._majority_element \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/171._excel_sheet_column_number \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/173._binary_search_tree_iterator \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/189._rotate_array \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/191._number_of_1_bits \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/198._house_robber \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/199._binary_tree_right_side_view \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/200._number_of_islands \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/203._remove_linked_list_elements \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/204._count_primes \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/205._isomorphic_strings \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/206._reverse_linked_list \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/207._course_schedule \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/208._implement_trie_(prefix_tree) \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/210._course_schedule_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/211. Add and Search Word - Data structure design \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/213._house_robber_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/216._combination_sum_iii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/217._contains_duplicate \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/218._The _Skyline_Problem \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/219._contains_duplicate_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/221._maximal_square \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/222._count_complete_tree_nodes \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/223._rectangle_area \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/224. Basic Calculator \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/225._implement_stack_using_queues \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/226._invert_binary_tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/227._basic_calculator_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/228._summary_ranges \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/229._majority_element_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/230._kth_smallest_element_in_a_bst \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/231. _Power_of_Two \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/232._implement_queue_using_stacks \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/234._palindrome_linked_list \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/235._lowest_common_ancestor_of_a_binary_search_tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/236._lowest_common_ancestor_of_a_binary_tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/237._delete_node_in_a_linked_list \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/238._product_of_array_except_self \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/240._search_a_2d_matrix_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/242._valid_anagram \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/252. Meeting Rooms \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/255._Verify_Preorder_Sequence_in_Binary_Search_Tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/256. Paint House \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/257._binary_tree_paths \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/258_ Add_Digits \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/261. Graph Valid Tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/263._ugly_number \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/264._ugly_number_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/265. Paint House II \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/266. Palindrome Permutation \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/267. Palindrome Permutation II \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/268._missing_number \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/270. Closest Binary Search Tree Value \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/276. Paint Fence \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/277. Find the Celebrity \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/278._First_Bad _Version \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/279._perfect_squares \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/280._Wiggle_Sort \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/283._move_zeroes \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/285._inorder_successor_in_bst \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/286. Walls and Gates \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/289._game_of_life \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/290._word_pattern \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/292._nim_game \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/296. Best Meeting Point \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/298. Binary Tree Longest Consecutive Sequence \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/299._bulls_and_cows \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/300._longest_increasing_subsequence \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/303._range_sum_query_-_immutable \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/316._Remove_Duplicate_Letters \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/319._Bulb_Switcher \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/322. Coin Change \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/323. Number of Connected Components in an Undirected Graph \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/324._Wiggle_Sort_II \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/326._power_of_three \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/328._odd_even_linked_list \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/334._increasing_triplet_subsequence \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/337._house_robber_iii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/338. Counting Bits \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/339. Nested List Weight Sum \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/341._Flatten_Nested_List_Iterator \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/342._Power_of_Four \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/344._reverse_string \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/345._Reverse_Vowels_of_a_String \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/349._intersection_of_two_arrays \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/350._intersection_of_two_arrays_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/353. Design Snake Game \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/364. Nested List Weight Sum II \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/366. Find Leaves of Binary Tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/367._valid_perfect_square \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/369.Plus One Linked List \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/371._sum_of_two_integers \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/374._Guess_Number_Higher_or_Lower \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/377._combination_sum_iv \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/378._kth_smallest_element_in_a_sorted_matrix \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/380. Insert Delete GetRandom O(1) \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/381. Insert Delete GetRandom O(1) - Duplicates allowed \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/382._linked_list_random_node \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/383._ransom_note \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/384. Shuffle an Array \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/387._first_unique_character_in_a_string \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/388._Longest_Absolute_File_Path \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/389._find_the_difference \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/392._is_subsequence \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/394._decode_string \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/400. Nth Digit \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/401._binary_watch \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/404._sum_of_left_leaves \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/405. Convert a Number to Hexadecimal \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/406._Queue_Reconstruction_by_Height \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/412._fizz_buzz \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/413. Arithmetic Slices \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/414._third_maximum_number \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/415._add_strings \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/416. Partition Equal Subset Sum \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/421._Maximum_XOR_of_Two_Numbers_in_an_Array \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/422. Valid Word Square \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/434._number_of_segments_in_a_string \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/437._path_sum_iii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/438._Find_All_Anagrams_in_a_String \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/439. Ternary Expression Parser \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/441._arranging_coins \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/448._Find_All_Numbers_Disappeared_in_an_Array \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/450. Delete Node in a BST \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/453._Minimum_Moves_to_Equal_Array_Elements \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/459._Repeated_Substring_Pattern \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/461._Hamming Distance \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/463._Island_Perimeter \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/467._Unique_Substrings_in_Wraparound_String \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/469. Convex Polygon \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/476._Number_Complement \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/477._Total_Hamming_Distance \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/485._Max_Consecutive_Ones \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/587._Erect_the_Fence \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/599._Minimum_Index_Sum_of_Two_Lists \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/647._Palindromic_Substrings \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/657._Judge_Route_Circle \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/665._Non-decreasing_Array \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/672._Bulb_Switcher_II \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/681._Next_Closest_Time \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/682._Baseball_Game \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/687._Longest_Univalue_Path \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/740._delete_and_earn \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/760._Find_Anagram_Mappings \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/README \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Binary Search \344\270\215\346\230\223\345\206\231.md" delete mode 100644 "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Data Structure and Algorthim Review.md" delete mode 100644 "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Dynamic Programming.md" delete mode 100644 "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" delete mode 100644 "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" delete mode 100644 "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/LinkedList\346\212\200\345\267\247.md" delete mode 100644 "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Maximal Square.pdf" delete mode 100644 "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" delete mode 100644 "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Range Sum Query 2D - Immutable.pdf" delete mode 100644 "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Recusrion & BackTracking.md" delete mode 100644 "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/backtracking\346\200\235\350\267\257.md" delete mode 100644 "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/delete_node_in_a_linked_list\351\227\256\351\242\230.md" delete mode 100644 "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" delete mode 100644 "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/python\347\232\204\345\220\204\347\247\215pass.md" delete mode 100644 "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/slide_windows_template.md" delete mode 100644 "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" delete mode 100644 "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\344\275\215\350\277\220\347\256\227.md" delete mode 100644 "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" delete mode 100644 "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\345\205\253\346\216\222\345\272\217.md" delete mode 100644 "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" delete mode 100644 "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\346\200\273\347\273\223.md" delete mode 100644 "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\347\273\204\345\220\210\351\227\256\351\242\230.md" delete mode 100644 "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\351\200\222\345\275\222_recursion.md" delete mode 100644 "docs/Leetcode_Solutions/Java/001._two_sum \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/Java/002._add_two_numbers \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/Java/003._longest_substring_without_repeating_characters \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/Java/004._median_of_two_sorted_arrays \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/Java/005._longest_palindromic_substring \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/Java/006._ZigZag_Conversion \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/Java/007._Reverse_Integer \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/Java/008._string_to_integer_(atoi) \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/Java/009._Palindrome_Number \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/Java/010._regular_expression_matching \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/Java/011._container_with_most_water \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/Java/012._Integer_to_Roman \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/Java/013._Roman_to_Integer \344\270\212\345\215\2102.49.12.md" delete mode 100644 "docs/Leetcode_Solutions/Java/014._longest_common_prefix \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/015._3sum \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/016._3sum_closest \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/017._letter_combinations_of_a_phone_number \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/018._4sum \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/019._remove_nth_node_from_end_of_list \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/020._valid_parentheses \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/021._merge_two_sorted_lists \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/022._generate_parentheses \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/023._merge_k_sorted_lists \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/024._swap_nodes_in_pairs \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/026._Remove_Duplicates_from_Sorted_Array \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/027._Remove_Element \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/028._implement_strstr() \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/030._Substring_with_Concatenation_of_All_Words \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/031._next_permutation \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/033._search_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/034._Search for a Range \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/035._search_insert_position \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/038._Count_and_Say \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/039._combination_sum \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/040._combination_sum_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/042._trapping_rain_water \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/043._multiply_strings \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/044._wildcard_matching \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/045._Jump_Game_II \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/046._permutations \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/047._permutations_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/048._rotate_image \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/049._group_anagrams_python \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/050._pow(x,_n) \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/051._n-queens \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/052._n-queens_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/053._maximum_subarray \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/054._spiral_matrix \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/055._jump_game \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/056._Merge_Intervals \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/058._length_of_last_word \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/059._spiral_matrix_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/060._permutation_sequence \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/061._rotate_list \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/064._minimum_path_sum \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/065.unique_paths_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/066._plus_one \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/067._add_binary \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/069._sqrt(x) \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/070. Climbing Stairs \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/072._edit_distance \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/073. Set Matrix Zeroes \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/074._search_a_2d_matrix \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/075._sort_colors \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/076._Minimum_Window_Substring \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/077._combinations \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/078.Subsets \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/079._word_search \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/082._remove_duplicates_from_sorted_list_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/083._remove_duplicates_from_sorted_list \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/086._partition_list \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/088._merge_sorted_array \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/089._gray_code \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/090._subsets_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/091._decode_ways \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/092._reverse_linked_list_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/093._restore_ip_addresses \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/094._binary_tree_inorder_traversal \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/096._unique_binary_search_trees \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/098._validate_binary_search_tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/100._same_tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/101._symmetric_tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/102._binary_tree_level_order_traversal \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/103._binary_tree_zigzag_level_order_traversal \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/104._maximum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/105._construct_binary_tree_from_preorder_and_inorder_traversal \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/106._construct_binary_tree_from_inorder_and_postorder_traversal \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/107._binary_tree_level_order_traversal_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/108._convert_sorted_array_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/109._convert_sorted_list_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/110._balanced_binary_tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/111._minimum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/112._path_sum \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/113._path_sum_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/114._flatten_binary_tree_to_linked_list \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/116._populating_next_right_pointers_in_each_node \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/118._pascal's_triangle \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/119. Pascal's Triangle II \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/120. Triangle \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/121._Best_Time_to_Buy_and_Sell_Stock \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/125._valid_palindrome \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/126. Word Ladder II \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/127._word_ladder \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/128._Longest_Consecutive_Sequence \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/129._sum_root_to_leaf_numbers \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/130._surrounded_regions \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/131._palindrome_partitioning \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/133._clone_graph \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/136._single_number \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/139._word_break \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/140._word_break_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/141._linked_list_cycle \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/142_Linked_List_Cycle_II \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/143._reorder_list \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/144._binary_tree_preorder_traversal \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/145._binary_tree_postorder_traversal \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/147._insertion_sort_list \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/148._sort_list \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/150._evaluate_reverse_polish_notation \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/151._reverse_words_in_a_string \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/152._maximum_product_subarray \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/153._find_minimum_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/155._min_stack \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/159._Longest_Substring_with_At_Most_Two_Distinct_Characters \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/160._intersection_of_two_linked_lists \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/162._find_peak_element \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/165._compare_version_numbers \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/166._Fraction_to_Recurring_Decimal \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/167._two_sum_ii_-_input_array_is_sorted \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/168._excel_sheet_column_title \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/169._majority_element \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/171._excel_sheet_column_number \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/173._binary_search_tree_iterator \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/189._rotate_array \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/191._number_of_1_bits \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/198._house_robber \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/199._binary_tree_right_side_view \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/200._number_of_islands \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/203._remove_linked_list_elements \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/204._count_primes \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/205._isomorphic_strings \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/206._reverse_linked_list \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/207._course_schedule \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/208._implement_trie_(prefix_tree) \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/210._course_schedule_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/211. Add and Search Word - Data structure design \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/213._house_robber_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/216._combination_sum_iii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/217._contains_duplicate \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/218._The _Skyline_Problem \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/219._contains_duplicate_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/221._maximal_square \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/222._count_complete_tree_nodes \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/223._rectangle_area \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/224. Basic Calculator \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/225._implement_stack_using_queues \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/226._invert_binary_tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/227._basic_calculator_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/228._summary_ranges \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/229._majority_element_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/230._kth_smallest_element_in_a_bst \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/231. _Power_of_Two \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/232._implement_queue_using_stacks \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/234._palindrome_linked_list \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/235._lowest_common_ancestor_of_a_binary_search_tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/236._lowest_common_ancestor_of_a_binary_tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/237._delete_node_in_a_linked_list \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/238._product_of_array_except_self \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/240._search_a_2d_matrix_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/242._valid_anagram \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/252. Meeting Rooms \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/255._Verify_Preorder_Sequence_in_Binary_Search_Tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/256. Paint House \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/257._binary_tree_paths \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/258_ Add_Digits \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/261. Graph Valid Tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/263._ugly_number \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/264._ugly_number_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/265. Paint House II \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/266. Palindrome Permutation \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/267. Palindrome Permutation II \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/268._missing_number \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/270. Closest Binary Search Tree Value \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/276. Paint Fence \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/277. Find the Celebrity \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/278._First_Bad _Version \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/279._perfect_squares \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/280._Wiggle_Sort \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/283._move_zeroes \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/285._inorder_successor_in_bst \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/286. Walls and Gates \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/289._game_of_life \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/290._word_pattern \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/292._nim_game \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/296. Best Meeting Point \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/298. Binary Tree Longest Consecutive Sequence \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/299._bulls_and_cows \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/300._longest_increasing_subsequence \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/303._range_sum_query_-_immutable \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/316._Remove_Duplicate_Letters \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/319._Bulb_Switcher \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/322. Coin Change \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/323. Number of Connected Components in an Undirected Graph \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/324._Wiggle_Sort_II \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/326._power_of_three \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/328._odd_even_linked_list \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/334._increasing_triplet_subsequence \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/337._house_robber_iii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/338. Counting Bits \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/339. Nested List Weight Sum \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/341._Flatten_Nested_List_Iterator \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/342._Power_of_Four \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/344._reverse_string \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/345._Reverse_Vowels_of_a_String \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/349._intersection_of_two_arrays \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/350._intersection_of_two_arrays_ii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/353. Design Snake Game \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/364. Nested List Weight Sum II \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/366. Find Leaves of Binary Tree \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/367._valid_perfect_square \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/369.Plus One Linked List \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/371._sum_of_two_integers \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/374._Guess_Number_Higher_or_Lower \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/377._combination_sum_iv \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/378._kth_smallest_element_in_a_sorted_matrix \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/380. Insert Delete GetRandom O(1) \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/381. Insert Delete GetRandom O(1) - Duplicates allowed \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/382._linked_list_random_node \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/383._ransom_note \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/384. Shuffle an Array \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/387._first_unique_character_in_a_string \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/388._Longest_Absolute_File_Path \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/389._find_the_difference \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/392._is_subsequence \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/394._decode_string \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/400. Nth Digit \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/401._binary_watch \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/404._sum_of_left_leaves \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/405. Convert a Number to Hexadecimal \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/406._Queue_Reconstruction_by_Height \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/412._fizz_buzz \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/413. Arithmetic Slices \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/414._third_maximum_number \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/415._add_strings \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/416. Partition Equal Subset Sum \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/421._Maximum_XOR_of_Two_Numbers_in_an_Array \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/422. Valid Word Square \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/434._number_of_segments_in_a_string \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/437._path_sum_iii \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/438._Find_All_Anagrams_in_a_String \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/439. Ternary Expression Parser \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/441._arranging_coins \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/448._Find_All_Numbers_Disappeared_in_an_Array \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/450. Delete Node in a BST \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/453._Minimum_Moves_to_Equal_Array_Elements \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/459._Repeated_Substring_Pattern \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/461._Hamming Distance \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/463._Island_Perimeter \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/467._Unique_Substrings_in_Wraparound_String \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/469. Convex Polygon \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/476._Number_Complement \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/477._Total_Hamming_Distance \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/485._Max_Consecutive_Ones \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/587._Erect_the_Fence \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/599._Minimum_Index_Sum_of_Two_Lists \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/647._Palindromic_Substrings \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/657._Judge_Route_Circle \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/665._Non-decreasing_Array \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/672._Bulb_Switcher_II \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/681._Next_Closest_Time \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/682._Baseball_Game \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/687._Longest_Univalue_Path \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/740._delete_and_earn \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/760._Find_Anagram_Mappings \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/README \344\270\212\345\215\2102.49.13.md" delete mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Binary Search \344\270\215\346\230\223\345\206\231.md" delete mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Data Structure and Algorthim Review.md" delete mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Dynamic Programming.md" delete mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" delete mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" delete mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/LinkedList\346\212\200\345\267\247.md" delete mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Maximal Square.pdf" delete mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" delete mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Range Sum Query 2D - Immutable.pdf" delete mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Recusrion & BackTracking.md" delete mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/backtracking\346\200\235\350\267\257.md" delete mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/delete_node_in_a_linked_list\351\227\256\351\242\230.md" delete mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" delete mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/python\347\232\204\345\220\204\347\247\215pass.md" delete mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/slide_windows_template.md" delete mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" delete mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\344\275\215\350\277\220\347\256\227.md" delete mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" delete mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\345\205\253\346\216\222\345\272\217.md" delete mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" delete mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\346\200\273\347\273\223.md" delete mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\347\273\204\345\220\210\351\227\256\351\242\230.md" delete mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\351\200\222\345\275\222_recursion.md" diff --git a/docs/Algorithm_Templates/C++/Cipher/README.md b/docs/Algorithm_Templates/C++/Cipher/README.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/Algorithm_Templates/C++/Compression/README.md b/docs/Algorithm_Templates/C++/Compression/README.md deleted file mode 100644 index 8b1378917..000000000 --- a/docs/Algorithm_Templates/C++/Compression/README.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/Algorithm_Templates/C++/Conversion/README.md b/docs/Algorithm_Templates/C++/Conversion/README.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/Algorithm_Templates/C++/Data_Structure/Graph/README.md b/docs/Algorithm_Templates/C++/Data_Structure/Graph/README.md deleted file mode 100644 index fe9c7bbf3..000000000 --- a/docs/Algorithm_Templates/C++/Data_Structure/Graph/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Some algorithm templates for better understanding! - -## 八大排序算法 - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/C++/Data_Structure/HashMap/README.md b/docs/Algorithm_Templates/C++/Data_Structure/HashMap/README.md deleted file mode 100644 index fe9c7bbf3..000000000 --- a/docs/Algorithm_Templates/C++/Data_Structure/HashMap/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Some algorithm templates for better understanding! - -## 八大排序算法 - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/C++/Data_Structure/HashTable/README.md b/docs/Algorithm_Templates/C++/Data_Structure/HashTable/README.md deleted file mode 100644 index fe9c7bbf3..000000000 --- a/docs/Algorithm_Templates/C++/Data_Structure/HashTable/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Some algorithm templates for better understanding! - -## 八大排序算法 - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/C++/Data_Structure/Heqp/README.md b/docs/Algorithm_Templates/C++/Data_Structure/Heqp/README.md deleted file mode 100644 index fe9c7bbf3..000000000 --- a/docs/Algorithm_Templates/C++/Data_Structure/Heqp/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Some algorithm templates for better understanding! - -## 八大排序算法 - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/C++/Data_Structure/LinkedList/README.md b/docs/Algorithm_Templates/C++/Data_Structure/LinkedList/README.md deleted file mode 100644 index fe9c7bbf3..000000000 --- a/docs/Algorithm_Templates/C++/Data_Structure/LinkedList/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Some algorithm templates for better understanding! - -## 八大排序算法 - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/C++/Data_Structure/Matrix/README.md b/docs/Algorithm_Templates/C++/Data_Structure/Matrix/README.md deleted file mode 100644 index fe9c7bbf3..000000000 --- a/docs/Algorithm_Templates/C++/Data_Structure/Matrix/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Some algorithm templates for better understanding! - -## 八大排序算法 - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/C++/Data_Structure/Queue/README.md b/docs/Algorithm_Templates/C++/Data_Structure/Queue/README.md deleted file mode 100644 index fe9c7bbf3..000000000 --- a/docs/Algorithm_Templates/C++/Data_Structure/Queue/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Some algorithm templates for better understanding! - -## 八大排序算法 - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/C++/Data_Structure/README.md b/docs/Algorithm_Templates/C++/Data_Structure/README.md deleted file mode 100644 index 8b1378917..000000000 --- a/docs/Algorithm_Templates/C++/Data_Structure/README.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/Algorithm_Templates/C++/Data_Structure/Stack/README.md b/docs/Algorithm_Templates/C++/Data_Structure/Stack/README.md deleted file mode 100644 index fe9c7bbf3..000000000 --- a/docs/Algorithm_Templates/C++/Data_Structure/Stack/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Some algorithm templates for better understanding! - -## 八大排序算法 - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/C++/Data_Structure/Tree/README.md b/docs/Algorithm_Templates/C++/Data_Structure/Tree/README.md deleted file mode 100644 index fe9c7bbf3..000000000 --- a/docs/Algorithm_Templates/C++/Data_Structure/Tree/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Some algorithm templates for better understanding! - -## 八大排序算法 - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/C++/Dynamic_Programming/README.md b/docs/Algorithm_Templates/C++/Dynamic_Programming/README.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/Algorithm_Templates/C++/Hash/README.md b/docs/Algorithm_Templates/C++/Hash/README.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/Algorithm_Templates/C++/Others/NextNodeInOrderTree.md b/docs/Algorithm_Templates/C++/Others/NextNodeInOrderTree.md deleted file mode 100644 index 28a102486..000000000 --- a/docs/Algorithm_Templates/C++/Others/NextNodeInOrderTree.md +++ /dev/null @@ -1,45 +0,0 @@ -``` python - 8 - / - 5 - / \ - 3 6 - / \ \ - 1 4 7 - - -class Node { - Node parent, lc, rc; - int val; -} -``` - -1. 首先判断其自有无右孩子,若有,则取其右子树的最左节点; 若无,则开始2 - - -2. 它是其父亲节点的左孩子,则其父亲节点 - - -2. 它是其父亲节点的右孩子,则从其父亲开始往上追溯到第一个向右的节点,如果没有这个节点或者说没有父亲节点,则无下一个节点,若有则取之 - - -```python -def nextNode(node): - def leftest(node): - while node.lc: - node = node.lc - return node - if node.rc: - return leftest(node.rc) - if not node.parent: - return None - if node == node.parent.lc: - return node.parent - elif node == node.parent.rc: - while node.parent.parent: - if node.parent != node.parent.parent.lc: - node = node.parent - else: - return node.parent.parent - return None -``` diff --git a/docs/Algorithm_Templates/C++/Others/TopKWords.java b/docs/Algorithm_Templates/C++/Others/TopKWords.java deleted file mode 100644 index c9f138000..000000000 --- a/docs/Algorithm_Templates/C++/Others/TopKWords.java +++ /dev/null @@ -1,86 +0,0 @@ -import java.io.*; -import java.util.*; - -/* display the most frequent K words in the file and the times it appear - in the file – shown in order (ignore case and periods) */ - -public class TopKWords { - static class CountWords { - private String fileName; - - public CountWords(String fileName) { - this.fileName = fileName; - } - - public Map getDictionary() { - Map dictionary = new HashMap<>(); - FileInputStream fis = null; - - try { - - fis = new FileInputStream(fileName); // open the file - int in = 0; - String s = ""; // init a empty word - in = fis.read(); // read one character - - while (-1 != in) { - if (Character.isLetter((char)in)) { - s += (char)in; //if get a letter, append to s - } else { - // this branch means an entire word has just been read - if (s.length() > 0) { - // see whether word exists or not - if (dictionary.containsKey(s)) { - // if exist, count++ - dictionary.put(s, dictionary.get(s) + 1); - } else { - // if not exist, initiate count of this word with 1 - dictionary.put(s, 1); - } - } - s = ""; // reInit a empty word - } - in = fis.read(); - } - return dictionary; - } catch (IOException e) { - e.printStackTrace(); - } finally { - try { - // you always have to close the I/O streams - fis.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - return null; - } - } - public static void main(String[] args) { - // you can replace the filePath with yours, e.g. - // CountWords cw = new CountWords("/Users/lisanaaa/Desktop/words.txt"); - CountWords cw = new CountWords("/words.txt"); - Map dictionary = cw.getDictionary(); // get the words dictionary: {word: frequency} - - // we change the map to list for convenient sort - List> list = new ArrayList<>(dictionary.entrySet()); - - // sort by lambda valueComparator - list.sort(Comparator.comparing( - m -> m.getValue()) - ); - - Scanner input = new Scanner(System.in); - int k = input.nextInt(); - while (k > list.size()) { - System.out.println("Retype a number, your number is too large"); - input = new Scanner(System.in); - k = input.nextInt(); - } - for (int i = 0; i < k; i++) { - System.out.println(list.get(list.size() - i - 1)); - } - } -} - - diff --git a/docs/Algorithm_Templates/C++/Others/words.txt b/docs/Algorithm_Templates/C++/Others/words.txt deleted file mode 100644 index b3c4b5679..000000000 --- a/docs/Algorithm_Templates/C++/Others/words.txt +++ /dev/null @@ -1,11 +0,0 @@ - - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam non pharetra purus. Quisque non tristique risus. Nulla ultricies eget nunc a volutpat. Aliquam semper, eros sit amet semper pellentesque, elit magna auctor ligula, sit amet vulputate nunc arcu sit amet ipsum. Aenean efficitur, felis ut tincidunt semper, sem sapien facilisis felis, et elementum ipsum risus sit amet metus. Pellentesque et orci at odio hendrerit lobortis vitae non felis. Phasellus nunc eros, ultricies sed dolor vel, ultricies mattis neque. Mauris placerat fringilla libero id efficitur. Donec nec imperdiet augue. Sed sit amet risus in turpis scelerisque rutrum. Ut sed pretium dolor. Donec metus nisl, blandit quis augue et, interdum suscipit metus. Morbi rutrum eros vel lacus aliquet, et maximus erat dapibus. Vivamus est justo, sagittis a augue id, vulputate vehicula nunc. Praesent mattis eros sapien, ac sagittis urna accumsan sit amet. Proin non dui tincidunt, tristique nisi in, vestibulum lorem. - -Quisque fermentum justo lacus, sit amet tempus lectus congue eu. Nulla sed quam nec nulla consequat tincidunt. Sed sed nunc diam. Integer ex ante, accumsan id fermentum a, interdum eu sapien. Aliquam justo dui, luctus vel ligula in, lacinia ornare turpis. Praesent leo purus, fringilla ut lobortis et, porta ac urna. Mauris id velit porta, iaculis felis non, sagittis nunc. Quisque non condimentum nisl, vitae venenatis urna. Nam commodo euismod felis, ac efficitur turpis scelerisque nec. Phasellus sagittis nec lacus eu bibendum. Suspendisse finibus vestibulum quam, quis volutpat ante. Duis nibh ligula, dapibus at est sed, tincidunt convallis augue. Pellentesque non consequat mi. Curabitur consequat imperdiet efficitur. - -Mauris ipsum arcu, fermentum in urna ultricies, venenatis vehicula nisl. Donec viverra non tellus sit amet porta. Phasellus ornare magna eget condimentum mollis. In hac habitasse platea dictumst. Proin in nibh venenatis, fermentum neque nec, commodo urna. In eget condimentum risus, ac interdum dolor. Sed ut neque sapien. Proin nulla diam, lobortis sed ultrices eget, blandit ut libero. - -Fusce at varius dui. Quisque viverra vulputate consectetur. Quisque sagittis id ante a vestibulum. Phasellus vel lobortis lectus. Duis vestibulum, quam vel congue elementum, lacus nibh efficitur odio, consectetur dapibus ipsum velit at diam. Duis eu nunc id diam tempor vestibulum sed luctus arcu. Nunc eu luctus ex. Morbi et commodo eros, non suscipit enim. Ut fringilla odio nec tincidunt scelerisque. Nam quis elit cursus, ullamcorper lorem id, convallis dui. Mauris elementum tortor odio, nec imperdiet nisl bibendum eget. Suspendisse potenti. - -Cras ut efficitur enim. Sed consequat non ante id euismod. Ut at magna viverra, aliquam purus a, lobortis mi. Donec hendrerit odio eu nunc imperdiet, quis pharetra sapien volutpat. Morbi leo libero, egestas vitae tortor eget, dictum volutpat augue. Donec arcu lacus, tristique eu posuere ac, pharetra vel ante. Nunc efficitur arcu elit, quis semper risus vestibulum eu. diff --git a/docs/Algorithm_Templates/C++/README.md b/docs/Algorithm_Templates/C++/README.md deleted file mode 100644 index 8e0b4dd33..000000000 --- a/docs/Algorithm_Templates/C++/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Some algorithm templates for better understanding! - -## 八大排序算法 - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | [RadixSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/RadixSort.py) | - diff --git a/docs/Algorithm_Templates/C++/Search/README.md b/docs/Algorithm_Templates/C++/Search/README.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/Algorithm_Templates/C++/Sort/BubbleSort.py b/docs/Algorithm_Templates/C++/Sort/BubbleSort.py deleted file mode 100644 index 6e2f23940..000000000 --- a/docs/Algorithm_Templates/C++/Sort/BubbleSort.py +++ /dev/null @@ -1,19 +0,0 @@ -# coding:utf-8 - - -# 冒泡排序 -def bubble_sort(l): - length = len(l) - # 外层循环 length遍,内层循环少一遍 - while length: - for j in range(length - 1): - # 找出最大值,然后交换位置到最后 - if l[j] > l[length - 1]: - l[j], l[length - 1] = l[length - 1], l[j] - length -= 1 - - -if __name__ == "__main__": - l = [5, 1, 9, 3, 2, 7] - bubble_sort(l) - print l diff --git a/docs/Algorithm_Templates/C++/Sort/InsertSort.py b/docs/Algorithm_Templates/C++/Sort/InsertSort.py deleted file mode 100644 index 09b935114..000000000 --- a/docs/Algorithm_Templates/C++/Sort/InsertSort.py +++ /dev/null @@ -1,24 +0,0 @@ -# coding:utf8 -""" -插入排序和冒泡排序的区别在于: - -插入排序的前提是:左边是有序的数列 -而冒泡排序:相邻的值进行交换,一共进行n次交换 -""" - - -def insert_sort(l): - # 循环 除第一个数字组成的有序数组 以外的数字 - for i in range(1, len(l)): - # 每一个数字,依次和有序数组进行比较 - print l[:i] - for j in range(len(l[:i])): - if l[i] < l[j]: - l[i], l[j] = l[j], l[i] - - -if __name__ == "__main__": - l = [5, 1, 9, 3, 2, 7] - print l - insert_sort(l) - print("result: " + str(l)) diff --git a/docs/Algorithm_Templates/C++/Sort/MergeSort.py b/docs/Algorithm_Templates/C++/Sort/MergeSort.py deleted file mode 100644 index 1ad19e86d..000000000 --- a/docs/Algorithm_Templates/C++/Sort/MergeSort.py +++ /dev/null @@ -1,35 +0,0 @@ -# coding: utf-8 - - -def MergeSort(lists): - if len(lists) <= 1: - return lists - num = int(len(lists) / 2) - # 从中间,进行数据的拆分, 递归的返回数据进行迭代排序 - left = MergeSort(lists[:num]) - right = MergeSort(lists[num:]) - print left - print "*" * 20 - print right - print "_" * 20 - return Merge(left, right) - - -def Merge(left, right): - r, l = 0, 0 - result = [] - while l < len(left) and r < len(right): - if left[l] < right[r]: - result.append(left[l]) - l += 1 - else: - result.append(right[r]) - r += 1 - result += right[r:] - result += left[l:] - print 'result:', result - return result - - -if __name__ == "__main__": - print MergeSort([1, 2, 3, 4, 5, 6, 7, 90, 21, 23, 45]) diff --git a/docs/Algorithm_Templates/C++/Sort/QuickSort.py b/docs/Algorithm_Templates/C++/Sort/QuickSort.py deleted file mode 100644 index acf81118a..000000000 --- a/docs/Algorithm_Templates/C++/Sort/QuickSort.py +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/python -# coding:utf8 - - -def quick_sort(l, start, end): - i = start - j = end - # 结束排序 - if i >= j: - return - # 保存首个数值 - key = l[i] - # 一次排序,i和j的值不断的靠拢,然后最终停止,结束一次排序 - while i < j: - # 和最右边的比较,如果>=key,然后j-1,慢慢的和前一个值比较;如果值key,那么就交换位置 - while i < j and key >= l[i]: - print key, l[i], '*' * 30 - i += 1 - l[j] = l[i] - l[i] = key - # 左边排序 - quick_sort(l, start, j-1) - # 右边排序 - quick_sort(l, i+1, end) - - -if __name__ == "__main__": - l = [5, 1, 9, 3, 2, 7] - quick_sort(l, 0, len(l) - 1) - print l diff --git a/docs/Algorithm_Templates/C++/Sort/README.md b/docs/Algorithm_Templates/C++/Sort/README.md deleted file mode 100644 index 8e0b4dd33..000000000 --- a/docs/Algorithm_Templates/C++/Sort/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Some algorithm templates for better understanding! - -## 八大排序算法 - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | [RadixSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/RadixSort.py) | - diff --git a/docs/Algorithm_Templates/C++/Sort/RadixSort.py b/docs/Algorithm_Templates/C++/Sort/RadixSort.py deleted file mode 100644 index e5fc2aba3..000000000 --- a/docs/Algorithm_Templates/C++/Sort/RadixSort.py +++ /dev/null @@ -1,46 +0,0 @@ -#************************基数排序**************************** -#确定排序的次数 -#排序的顺序跟序列中最大数的位数相关 -def radix_sort_nums(L): - maxNum = L[0] -#寻找序列中的最大数 - for x in L: - if maxNum < x: - maxNum = x -#确定序列中的最大元素的位数 - times = 0 - while (maxNum > 0): - maxNum = int((maxNum/10)) - times += 1 - return times -#找到num从低到高第pos位的数据 -def get_num_pos(num, pos): - return (int((num/(10**(pos-1))))) % 10 -#基数排序 -def radix_sort(L): - count = 10 * [None] #存放各个桶的数据统计个数 - bucket = len(L) * [None] #暂时存放排序结果 -#从低位到高位依次执行循环 - for pos in range(1, radix_sort_nums(L)+1): - #置空各个桶的数据统计 - for x in range(0, 10): - count[x] = 0 - #统计当前该位(个位,十位,百位....)的元素数目 - for x in range(0, len(L)): - #统计各个桶将要装进去的元素个数 - j = get_num_pos(int(L[x]), pos) - count[j] += 1 - #count[i]表示第i个桶的右边界索引 - for x in range(1,10): - count[x] += count[x-1] - #将数据依次装入桶中 - for x in range(len(L)-1, -1, -1): - #求出元素第K位的数字 - j = get_num_pos(L[x], pos) - #放入对应的桶中,count[j]-1是第j个桶的右边界索引 - bucket[count[j]-1] = L[x] - #对应桶的装入数据索引-1 - count[j] -= 1 - # 将已分配好的桶中数据再倒出来,此时已是对应当前位数有序的表 - for x in range(0, len(L)): - L[x] = bucket[x] diff --git a/docs/Algorithm_Templates/C++/Sort/SelectionSort.py b/docs/Algorithm_Templates/C++/Sort/SelectionSort.py deleted file mode 100644 index 98ef64f72..000000000 --- a/docs/Algorithm_Templates/C++/Sort/SelectionSort.py +++ /dev/null @@ -1,28 +0,0 @@ -# coding:utf8 -""" -选择排序和冒泡排序的区别在于: - -选择排序的前提是:找到最大值的位置,最后才进行1次交换 -而冒泡排序:相邻的值进行交换,一共进行n次交换 -""" - - -def selection_sort(l): - length = len(l) - 1 - - while length: - index = length - # 第一个数字,和后面每一个数字进行对比,找出最大值,放到最后!! - for j in range(length): - if l[j] > l[index]: - index = j - l[length], l[index] = l[index], l[length] - print len(l) - length, l - length -= 1 - - -if __name__ == "__main__": - l = [5, 1, 9, 3, 2, 7] - print l - selection_sort(l) - print("result: " + str(l)) \ No newline at end of file diff --git a/docs/Algorithm_Templates/C++/Sort/ShellSort.py b/docs/Algorithm_Templates/C++/Sort/ShellSort.py deleted file mode 100644 index 9f591a84b..000000000 --- a/docs/Algorithm_Templates/C++/Sort/ShellSort.py +++ /dev/null @@ -1,25 +0,0 @@ -# coding: utf8 - -def insert_sort(l, start, increment): - for i in range(start+increment, len(l), increment): - for j in range(start, len(l[:i]), increment): - if l[i] < l[j]: - l[i], l[j] = l[j], l[i] - print increment, '--',l - return l - -def shell_sort(l, increment): - # 依次进行分层 - while increment: - # 每一层,都进行n次插入排序 - for i in range(0, increment): - insert_sort(l, i, increment) - increment -= 1 - return l - -if __name__ == "__main__": - l = [5, 2, 9, 8, 1, 10, 3, 4, 7] - increment = len(l)/3+1 if len(l)%3 else len(l)/3 - print "开始", l - l = shell_sort(l, increment) - print "结束", l \ No newline at end of file diff --git a/docs/Algorithm_Templates/C++/Traversals/README.md b/docs/Algorithm_Templates/C++/Traversals/README.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/Algorithm_Templates/Java/Cipher/README.md b/docs/Algorithm_Templates/Java/Cipher/README.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/Algorithm_Templates/Java/Compression/README.md b/docs/Algorithm_Templates/Java/Compression/README.md deleted file mode 100644 index 8b1378917..000000000 --- a/docs/Algorithm_Templates/Java/Compression/README.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/Algorithm_Templates/Java/Conversion/README.md b/docs/Algorithm_Templates/Java/Conversion/README.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/Algorithm_Templates/Java/Data_Structure/Graph/README.md b/docs/Algorithm_Templates/Java/Data_Structure/Graph/README.md deleted file mode 100644 index fe9c7bbf3..000000000 --- a/docs/Algorithm_Templates/Java/Data_Structure/Graph/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Some algorithm templates for better understanding! - -## 八大排序算法 - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Java/Data_Structure/HashMap/README.md b/docs/Algorithm_Templates/Java/Data_Structure/HashMap/README.md deleted file mode 100644 index fe9c7bbf3..000000000 --- a/docs/Algorithm_Templates/Java/Data_Structure/HashMap/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Some algorithm templates for better understanding! - -## 八大排序算法 - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Java/Data_Structure/HashTable/README.md b/docs/Algorithm_Templates/Java/Data_Structure/HashTable/README.md deleted file mode 100644 index fe9c7bbf3..000000000 --- a/docs/Algorithm_Templates/Java/Data_Structure/HashTable/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Some algorithm templates for better understanding! - -## 八大排序算法 - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Java/Data_Structure/Heqp/README.md b/docs/Algorithm_Templates/Java/Data_Structure/Heqp/README.md deleted file mode 100644 index fe9c7bbf3..000000000 --- a/docs/Algorithm_Templates/Java/Data_Structure/Heqp/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Some algorithm templates for better understanding! - -## 八大排序算法 - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Java/Data_Structure/LinkedList/README.md b/docs/Algorithm_Templates/Java/Data_Structure/LinkedList/README.md deleted file mode 100644 index fe9c7bbf3..000000000 --- a/docs/Algorithm_Templates/Java/Data_Structure/LinkedList/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Some algorithm templates for better understanding! - -## 八大排序算法 - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Java/Data_Structure/Matrix/README.md b/docs/Algorithm_Templates/Java/Data_Structure/Matrix/README.md deleted file mode 100644 index fe9c7bbf3..000000000 --- a/docs/Algorithm_Templates/Java/Data_Structure/Matrix/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Some algorithm templates for better understanding! - -## 八大排序算法 - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Java/Data_Structure/Queue/README.md b/docs/Algorithm_Templates/Java/Data_Structure/Queue/README.md deleted file mode 100644 index fe9c7bbf3..000000000 --- a/docs/Algorithm_Templates/Java/Data_Structure/Queue/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Some algorithm templates for better understanding! - -## 八大排序算法 - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Java/Data_Structure/README.md b/docs/Algorithm_Templates/Java/Data_Structure/README.md deleted file mode 100644 index 8b1378917..000000000 --- a/docs/Algorithm_Templates/Java/Data_Structure/README.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/Algorithm_Templates/Java/Data_Structure/Stack/README.md b/docs/Algorithm_Templates/Java/Data_Structure/Stack/README.md deleted file mode 100644 index fe9c7bbf3..000000000 --- a/docs/Algorithm_Templates/Java/Data_Structure/Stack/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Some algorithm templates for better understanding! - -## 八大排序算法 - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Java/Data_Structure/Tree/README.md b/docs/Algorithm_Templates/Java/Data_Structure/Tree/README.md deleted file mode 100644 index fe9c7bbf3..000000000 --- a/docs/Algorithm_Templates/Java/Data_Structure/Tree/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Some algorithm templates for better understanding! - -## 八大排序算法 - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Java/Dynamic_Programming/README.md b/docs/Algorithm_Templates/Java/Dynamic_Programming/README.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/Algorithm_Templates/Java/Hash/README.md b/docs/Algorithm_Templates/Java/Hash/README.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/Algorithm_Templates/Java/Others/NextNodeInOrderTree.md b/docs/Algorithm_Templates/Java/Others/NextNodeInOrderTree.md deleted file mode 100644 index 28a102486..000000000 --- a/docs/Algorithm_Templates/Java/Others/NextNodeInOrderTree.md +++ /dev/null @@ -1,45 +0,0 @@ -``` python - 8 - / - 5 - / \ - 3 6 - / \ \ - 1 4 7 - - -class Node { - Node parent, lc, rc; - int val; -} -``` - -1. 首先判断其自有无右孩子,若有,则取其右子树的最左节点; 若无,则开始2 - - -2. 它是其父亲节点的左孩子,则其父亲节点 - - -2. 它是其父亲节点的右孩子,则从其父亲开始往上追溯到第一个向右的节点,如果没有这个节点或者说没有父亲节点,则无下一个节点,若有则取之 - - -```python -def nextNode(node): - def leftest(node): - while node.lc: - node = node.lc - return node - if node.rc: - return leftest(node.rc) - if not node.parent: - return None - if node == node.parent.lc: - return node.parent - elif node == node.parent.rc: - while node.parent.parent: - if node.parent != node.parent.parent.lc: - node = node.parent - else: - return node.parent.parent - return None -``` diff --git a/docs/Algorithm_Templates/Java/Others/TopKWords.java b/docs/Algorithm_Templates/Java/Others/TopKWords.java deleted file mode 100644 index c9f138000..000000000 --- a/docs/Algorithm_Templates/Java/Others/TopKWords.java +++ /dev/null @@ -1,86 +0,0 @@ -import java.io.*; -import java.util.*; - -/* display the most frequent K words in the file and the times it appear - in the file – shown in order (ignore case and periods) */ - -public class TopKWords { - static class CountWords { - private String fileName; - - public CountWords(String fileName) { - this.fileName = fileName; - } - - public Map getDictionary() { - Map dictionary = new HashMap<>(); - FileInputStream fis = null; - - try { - - fis = new FileInputStream(fileName); // open the file - int in = 0; - String s = ""; // init a empty word - in = fis.read(); // read one character - - while (-1 != in) { - if (Character.isLetter((char)in)) { - s += (char)in; //if get a letter, append to s - } else { - // this branch means an entire word has just been read - if (s.length() > 0) { - // see whether word exists or not - if (dictionary.containsKey(s)) { - // if exist, count++ - dictionary.put(s, dictionary.get(s) + 1); - } else { - // if not exist, initiate count of this word with 1 - dictionary.put(s, 1); - } - } - s = ""; // reInit a empty word - } - in = fis.read(); - } - return dictionary; - } catch (IOException e) { - e.printStackTrace(); - } finally { - try { - // you always have to close the I/O streams - fis.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - return null; - } - } - public static void main(String[] args) { - // you can replace the filePath with yours, e.g. - // CountWords cw = new CountWords("/Users/lisanaaa/Desktop/words.txt"); - CountWords cw = new CountWords("/words.txt"); - Map dictionary = cw.getDictionary(); // get the words dictionary: {word: frequency} - - // we change the map to list for convenient sort - List> list = new ArrayList<>(dictionary.entrySet()); - - // sort by lambda valueComparator - list.sort(Comparator.comparing( - m -> m.getValue()) - ); - - Scanner input = new Scanner(System.in); - int k = input.nextInt(); - while (k > list.size()) { - System.out.println("Retype a number, your number is too large"); - input = new Scanner(System.in); - k = input.nextInt(); - } - for (int i = 0; i < k; i++) { - System.out.println(list.get(list.size() - i - 1)); - } - } -} - - diff --git a/docs/Algorithm_Templates/Java/Others/words.txt b/docs/Algorithm_Templates/Java/Others/words.txt deleted file mode 100644 index b3c4b5679..000000000 --- a/docs/Algorithm_Templates/Java/Others/words.txt +++ /dev/null @@ -1,11 +0,0 @@ - - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam non pharetra purus. Quisque non tristique risus. Nulla ultricies eget nunc a volutpat. Aliquam semper, eros sit amet semper pellentesque, elit magna auctor ligula, sit amet vulputate nunc arcu sit amet ipsum. Aenean efficitur, felis ut tincidunt semper, sem sapien facilisis felis, et elementum ipsum risus sit amet metus. Pellentesque et orci at odio hendrerit lobortis vitae non felis. Phasellus nunc eros, ultricies sed dolor vel, ultricies mattis neque. Mauris placerat fringilla libero id efficitur. Donec nec imperdiet augue. Sed sit amet risus in turpis scelerisque rutrum. Ut sed pretium dolor. Donec metus nisl, blandit quis augue et, interdum suscipit metus. Morbi rutrum eros vel lacus aliquet, et maximus erat dapibus. Vivamus est justo, sagittis a augue id, vulputate vehicula nunc. Praesent mattis eros sapien, ac sagittis urna accumsan sit amet. Proin non dui tincidunt, tristique nisi in, vestibulum lorem. - -Quisque fermentum justo lacus, sit amet tempus lectus congue eu. Nulla sed quam nec nulla consequat tincidunt. Sed sed nunc diam. Integer ex ante, accumsan id fermentum a, interdum eu sapien. Aliquam justo dui, luctus vel ligula in, lacinia ornare turpis. Praesent leo purus, fringilla ut lobortis et, porta ac urna. Mauris id velit porta, iaculis felis non, sagittis nunc. Quisque non condimentum nisl, vitae venenatis urna. Nam commodo euismod felis, ac efficitur turpis scelerisque nec. Phasellus sagittis nec lacus eu bibendum. Suspendisse finibus vestibulum quam, quis volutpat ante. Duis nibh ligula, dapibus at est sed, tincidunt convallis augue. Pellentesque non consequat mi. Curabitur consequat imperdiet efficitur. - -Mauris ipsum arcu, fermentum in urna ultricies, venenatis vehicula nisl. Donec viverra non tellus sit amet porta. Phasellus ornare magna eget condimentum mollis. In hac habitasse platea dictumst. Proin in nibh venenatis, fermentum neque nec, commodo urna. In eget condimentum risus, ac interdum dolor. Sed ut neque sapien. Proin nulla diam, lobortis sed ultrices eget, blandit ut libero. - -Fusce at varius dui. Quisque viverra vulputate consectetur. Quisque sagittis id ante a vestibulum. Phasellus vel lobortis lectus. Duis vestibulum, quam vel congue elementum, lacus nibh efficitur odio, consectetur dapibus ipsum velit at diam. Duis eu nunc id diam tempor vestibulum sed luctus arcu. Nunc eu luctus ex. Morbi et commodo eros, non suscipit enim. Ut fringilla odio nec tincidunt scelerisque. Nam quis elit cursus, ullamcorper lorem id, convallis dui. Mauris elementum tortor odio, nec imperdiet nisl bibendum eget. Suspendisse potenti. - -Cras ut efficitur enim. Sed consequat non ante id euismod. Ut at magna viverra, aliquam purus a, lobortis mi. Donec hendrerit odio eu nunc imperdiet, quis pharetra sapien volutpat. Morbi leo libero, egestas vitae tortor eget, dictum volutpat augue. Donec arcu lacus, tristique eu posuere ac, pharetra vel ante. Nunc efficitur arcu elit, quis semper risus vestibulum eu. diff --git a/docs/Algorithm_Templates/Java/README.md b/docs/Algorithm_Templates/Java/README.md deleted file mode 100644 index 8e0b4dd33..000000000 --- a/docs/Algorithm_Templates/Java/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Some algorithm templates for better understanding! - -## 八大排序算法 - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | [RadixSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/RadixSort.py) | - diff --git a/docs/Algorithm_Templates/Java/Search/README.md b/docs/Algorithm_Templates/Java/Search/README.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/docs/Algorithm_Templates/Java/Sort/BubbleSort.py b/docs/Algorithm_Templates/Java/Sort/BubbleSort.py deleted file mode 100644 index 6e2f23940..000000000 --- a/docs/Algorithm_Templates/Java/Sort/BubbleSort.py +++ /dev/null @@ -1,19 +0,0 @@ -# coding:utf-8 - - -# 冒泡排序 -def bubble_sort(l): - length = len(l) - # 外层循环 length遍,内层循环少一遍 - while length: - for j in range(length - 1): - # 找出最大值,然后交换位置到最后 - if l[j] > l[length - 1]: - l[j], l[length - 1] = l[length - 1], l[j] - length -= 1 - - -if __name__ == "__main__": - l = [5, 1, 9, 3, 2, 7] - bubble_sort(l) - print l diff --git a/docs/Algorithm_Templates/Java/Sort/InsertSort.py b/docs/Algorithm_Templates/Java/Sort/InsertSort.py deleted file mode 100644 index 09b935114..000000000 --- a/docs/Algorithm_Templates/Java/Sort/InsertSort.py +++ /dev/null @@ -1,24 +0,0 @@ -# coding:utf8 -""" -插入排序和冒泡排序的区别在于: - -插入排序的前提是:左边是有序的数列 -而冒泡排序:相邻的值进行交换,一共进行n次交换 -""" - - -def insert_sort(l): - # 循环 除第一个数字组成的有序数组 以外的数字 - for i in range(1, len(l)): - # 每一个数字,依次和有序数组进行比较 - print l[:i] - for j in range(len(l[:i])): - if l[i] < l[j]: - l[i], l[j] = l[j], l[i] - - -if __name__ == "__main__": - l = [5, 1, 9, 3, 2, 7] - print l - insert_sort(l) - print("result: " + str(l)) diff --git a/docs/Algorithm_Templates/Java/Sort/MergeSort.py b/docs/Algorithm_Templates/Java/Sort/MergeSort.py deleted file mode 100644 index 1ad19e86d..000000000 --- a/docs/Algorithm_Templates/Java/Sort/MergeSort.py +++ /dev/null @@ -1,35 +0,0 @@ -# coding: utf-8 - - -def MergeSort(lists): - if len(lists) <= 1: - return lists - num = int(len(lists) / 2) - # 从中间,进行数据的拆分, 递归的返回数据进行迭代排序 - left = MergeSort(lists[:num]) - right = MergeSort(lists[num:]) - print left - print "*" * 20 - print right - print "_" * 20 - return Merge(left, right) - - -def Merge(left, right): - r, l = 0, 0 - result = [] - while l < len(left) and r < len(right): - if left[l] < right[r]: - result.append(left[l]) - l += 1 - else: - result.append(right[r]) - r += 1 - result += right[r:] - result += left[l:] - print 'result:', result - return result - - -if __name__ == "__main__": - print MergeSort([1, 2, 3, 4, 5, 6, 7, 90, 21, 23, 45]) diff --git a/docs/Algorithm_Templates/Java/Sort/QuickSort.py b/docs/Algorithm_Templates/Java/Sort/QuickSort.py deleted file mode 100644 index acf81118a..000000000 --- a/docs/Algorithm_Templates/Java/Sort/QuickSort.py +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/python -# coding:utf8 - - -def quick_sort(l, start, end): - i = start - j = end - # 结束排序 - if i >= j: - return - # 保存首个数值 - key = l[i] - # 一次排序,i和j的值不断的靠拢,然后最终停止,结束一次排序 - while i < j: - # 和最右边的比较,如果>=key,然后j-1,慢慢的和前一个值比较;如果值key,那么就交换位置 - while i < j and key >= l[i]: - print key, l[i], '*' * 30 - i += 1 - l[j] = l[i] - l[i] = key - # 左边排序 - quick_sort(l, start, j-1) - # 右边排序 - quick_sort(l, i+1, end) - - -if __name__ == "__main__": - l = [5, 1, 9, 3, 2, 7] - quick_sort(l, 0, len(l) - 1) - print l diff --git a/docs/Algorithm_Templates/Java/Sort/README.md b/docs/Algorithm_Templates/Java/Sort/README.md deleted file mode 100644 index 8e0b4dd33..000000000 --- a/docs/Algorithm_Templates/Java/Sort/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Some algorithm templates for better understanding! - -## 八大排序算法 - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | [RadixSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/RadixSort.py) | - diff --git a/docs/Algorithm_Templates/Java/Sort/RadixSort.py b/docs/Algorithm_Templates/Java/Sort/RadixSort.py deleted file mode 100644 index e5fc2aba3..000000000 --- a/docs/Algorithm_Templates/Java/Sort/RadixSort.py +++ /dev/null @@ -1,46 +0,0 @@ -#************************基数排序**************************** -#确定排序的次数 -#排序的顺序跟序列中最大数的位数相关 -def radix_sort_nums(L): - maxNum = L[0] -#寻找序列中的最大数 - for x in L: - if maxNum < x: - maxNum = x -#确定序列中的最大元素的位数 - times = 0 - while (maxNum > 0): - maxNum = int((maxNum/10)) - times += 1 - return times -#找到num从低到高第pos位的数据 -def get_num_pos(num, pos): - return (int((num/(10**(pos-1))))) % 10 -#基数排序 -def radix_sort(L): - count = 10 * [None] #存放各个桶的数据统计个数 - bucket = len(L) * [None] #暂时存放排序结果 -#从低位到高位依次执行循环 - for pos in range(1, radix_sort_nums(L)+1): - #置空各个桶的数据统计 - for x in range(0, 10): - count[x] = 0 - #统计当前该位(个位,十位,百位....)的元素数目 - for x in range(0, len(L)): - #统计各个桶将要装进去的元素个数 - j = get_num_pos(int(L[x]), pos) - count[j] += 1 - #count[i]表示第i个桶的右边界索引 - for x in range(1,10): - count[x] += count[x-1] - #将数据依次装入桶中 - for x in range(len(L)-1, -1, -1): - #求出元素第K位的数字 - j = get_num_pos(L[x], pos) - #放入对应的桶中,count[j]-1是第j个桶的右边界索引 - bucket[count[j]-1] = L[x] - #对应桶的装入数据索引-1 - count[j] -= 1 - # 将已分配好的桶中数据再倒出来,此时已是对应当前位数有序的表 - for x in range(0, len(L)): - L[x] = bucket[x] diff --git a/docs/Algorithm_Templates/Java/Sort/SelectionSort.py b/docs/Algorithm_Templates/Java/Sort/SelectionSort.py deleted file mode 100644 index 98ef64f72..000000000 --- a/docs/Algorithm_Templates/Java/Sort/SelectionSort.py +++ /dev/null @@ -1,28 +0,0 @@ -# coding:utf8 -""" -选择排序和冒泡排序的区别在于: - -选择排序的前提是:找到最大值的位置,最后才进行1次交换 -而冒泡排序:相邻的值进行交换,一共进行n次交换 -""" - - -def selection_sort(l): - length = len(l) - 1 - - while length: - index = length - # 第一个数字,和后面每一个数字进行对比,找出最大值,放到最后!! - for j in range(length): - if l[j] > l[index]: - index = j - l[length], l[index] = l[index], l[length] - print len(l) - length, l - length -= 1 - - -if __name__ == "__main__": - l = [5, 1, 9, 3, 2, 7] - print l - selection_sort(l) - print("result: " + str(l)) \ No newline at end of file diff --git a/docs/Algorithm_Templates/Java/Sort/ShellSort.py b/docs/Algorithm_Templates/Java/Sort/ShellSort.py deleted file mode 100644 index 9f591a84b..000000000 --- a/docs/Algorithm_Templates/Java/Sort/ShellSort.py +++ /dev/null @@ -1,25 +0,0 @@ -# coding: utf8 - -def insert_sort(l, start, increment): - for i in range(start+increment, len(l), increment): - for j in range(start, len(l[:i]), increment): - if l[i] < l[j]: - l[i], l[j] = l[j], l[i] - print increment, '--',l - return l - -def shell_sort(l, increment): - # 依次进行分层 - while increment: - # 每一层,都进行n次插入排序 - for i in range(0, increment): - insert_sort(l, i, increment) - increment -= 1 - return l - -if __name__ == "__main__": - l = [5, 2, 9, 8, 1, 10, 3, 4, 7] - increment = len(l)/3+1 if len(l)%3 else len(l)/3 - print "开始", l - l = shell_sort(l, increment) - print "结束", l \ No newline at end of file diff --git a/docs/Algorithm_Templates/Java/Traversals/README.md b/docs/Algorithm_Templates/Java/Traversals/README.md deleted file mode 100644 index e69de29bb..000000000 diff --git "a/docs/Leetcode_Solutions/C++/001._two_sum \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/C++/001._two_sum \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index 120db871d..000000000 --- "a/docs/Leetcode_Solutions/C++/001._two_sum \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,43 +0,0 @@ -### 1. Two Sum - -题目: - - - -难度: - -Easy - - -思路 - -可以用O(n^2) loop - -但是也可以牺牲空间换取时间,异常聪明的AC解法 - -``` - 2 7 11 15 - 不存在 存在之中 -lookup {2:0} [0,1] -``` - -一但字典内有了这个 `target - 当前数字`,找到它的index和当前index一起返回。 - - -```python -class Solution(object): - def twoSum(self, nums, target): - """ - :type nums: List[int] - :type target: int - :rtype: List[int] - """ - lookup = {} - for i, num in enumerate(nums): - if target - num in lookup: - return [lookup[target - num],i] - lookup[num] = i - return [] -``` - - diff --git "a/docs/Leetcode_Solutions/C++/002._add_two_numbers \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/C++/002._add_two_numbers \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index 7ead7c7c4..000000000 --- "a/docs/Leetcode_Solutions/C++/002._add_two_numbers \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,37 +0,0 @@ -### 2. Add Two Numbers - -题目: - - - -难度 : Medium - - -跟plus One, add Binary 玩的同一种花样 - - -```python -class Solution(object): - def addTwoNumbers(self, l1, l2): - """ - :type l1: ListNode - :type l2: ListNode - :rtype: ListNode - """ - #easiest case - if l1 == None: - return l2 - if l2 == None: - return l1 - - if l1.val + l2.val < 10: - l3 = ListNode(l1.val + l2.val) - l3.next = self.addTwoNumbers(l1.next, l2.next) - - elif l1.val + l2.val >= 10: - l3 = ListNode(l1.val + l2.val - 10) - tmp = ListNode(1) - tmp.next = None - l3.next = self.addTwoNumbers(l1.next, self.addTwoNumbers(l2.next ,tmp)) - return l3 -``` diff --git "a/docs/Leetcode_Solutions/C++/003._longest_substring_without_repeating_characters \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/C++/003._longest_substring_without_repeating_characters \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index 8b8ef18eb..000000000 --- "a/docs/Leetcode_Solutions/C++/003._longest_substring_without_repeating_characters \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,84 +0,0 @@ -### 3. Longest Substring Without Repeating Characters - - -题目: - - - -难度: - -Medium - - - -思路 - -粗一看是dp,细一看是greedy - -我们先从第一个字符开始,只要碰到已经出现过的字符我们就必须从之前出现该字符的index开始重新往后看。 - -例如‘xyzxlkjh’,当看到第二个‘x’时我们就应该从y开始重新往后看了。 - -那么怎么判断字符已经出现过了呢?我们使用一个hashmap,将每一个已经阅读过的字符作为键,而它的值就是它在原字符串中的index,如果我们现在的字符不在hashmap里面我们就把它加进hashmap中去,因此,只要目前的这个字符在该hashmap中的值大于等于了这一轮字符串的首字符,就说明它已经出现过了,我们就将首字符的index加1,即从后一位又重新开始读,然后比较目前的子串长度与之前的最大长度,取大者。 - -### 程序变量解释 - -- l(字母L) 代表目前最大子串的长度 -- start 是这一轮未重复子串首字母的index -- maps 放置每一个字符的index,如果maps.get(s[i], -1)大于等于start的话,就说明字符重复了,此时就要重置 l(字母L) 和start的值了, - - - -```python -class Solution(object): - def lengthOfLongestSubstring(self, s): - """ - :type s: str - :rtype: int - - """ - l, start, n = 0, 0, len(s) - maps = {} - for i in range(n): - start = max(start, maps.get(s[i], -1)+1) - l = max(l, i - start+1) - maps[s[i]] = i - return l -``` - -```python -class Solution(object): - def lengthOfLongestSubstring(self, s): - """ - :type s: str - :rtype: int - """ - maps = {} - begin, end, counter, d = 0, 0, 0, 0 - while end < len(s): - if s[end] in maps: - maps[s[end]] += 1 - else: - maps[s[end]] = 1 - if maps[s[end]] > 1: - counter += 1 - end += 1 - while counter > 0: - if maps[s[begin]] > 1: - counter -= 1 - maps[s[begin]] -= 1 - begin += 1 - d = max(d, end - begin) - return d -``` - - - - - - -Author: Keqi Huang - -If you like it, please spread your support - -![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) diff --git "a/docs/Leetcode_Solutions/C++/004._median_of_two_sorted_arrays \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/C++/004._median_of_two_sorted_arrays \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index 8ad14bbb6..000000000 --- "a/docs/Leetcode_Solutions/C++/004._median_of_two_sorted_arrays \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,260 +0,0 @@ -### 4. Median of Two Sorted Arrays - -题目: - - - -难度: - -Hard - - -一看到的时候,觉得跟CLRS书上的一道习题类似 -求X[1....n] Y[1....n] 的 median - -习题 9.3-8 - - -Let X[1..n] and Y [1..n] be two arrays, each containing n numbers already in sorted order. Give an O(lg n)-time algorithn to find the median of all 2n elements in arrays X and Y . - - -> The median can be obtained recursively as follows. Pick the median of the sorted array A. This is just O(1) time as median is the n/2th element in the sorted array. Now compare the median of A, call is a∗ with median of B, b∗. We have two cases. - -- a∗ < b∗ : In this case, the elements in B[n/2 ···n] are also greater than a . So the median cannot lie in either A[1 · · · n/2 ] or B[n/2 · · · n]. So we can just throw these away and recursively - -- a∗ > b∗ : In this case, we can still throw away B[1··· n/2] and also A[ n/ · · · n] and solve a smaller subproblem recursively. - - -In either case, our subproblem size reduces by a factor of half and we spend only constant time to compare the medians of A and B. So the recurrence relation would be T (n) = T (n/2) + O(1) which has a solution T (n) = O(log n). - - -divide and conquer - -- 如果X[n/2] == Y[n/2],则找到,return -- 如果X[n/2] < Y[n/2],找X[n/2+1….n]和Y[1,2…n/2]之间 -- 否则找X[1..n/2]和Y[n/2…n] - - - - -但是实际上不同,这里需要考虑的问题更多: - -- 两个数组长度不一样 -- 并不是只找一个median,如果median有两个,需要算平均 - -思路 - -把它转化成经典的findKth问题 - -参考: - - -首先转成求A和B数组中第k小的数的问题, 然后用k/2在A和B中分别找。 - - -比如k = 6, 分别看A和B中的第3个数, 已知 A1 < A2 < A3 < A4 < A5... 和 B1 < B2 < B3 < B4 < B5..., 如果A3 <= B3, 那么第6小的数肯定不会是A1, A2, A3, 因为最多有两个数小于A1, 三个数小于A2, 四个数小于A3。 关键点是从 k/2 开始来找。 - - - -B3至少大于5个数, 所以第6小的数有可能是B1 (A1 < A2 < A3 < A4 < A5 < B1), 有可能是B2 (A1 < A2 < A3 < B1 < A4 < B2), 有可能是B3 (A1 < A2 < A3 < B1 < B2 < B3)。那就可以排除掉A1, A2, A3, 转成求A4, A5, ... B1, B2, B3, ...这些数中第3小的数的问题, k就被减半了。每次都假设A的元素个数少, pa = min(k/2, lenA)的结果可能导致k == 1或A空, 这两种情况都是终止条件。 - - -发问,为什么要从k/2开始寻找,依旧k = 6, 我可以比较A1 和 B5的关系么,可以这样做,但是明显的问题出现在如果A1 > B5,那么这个第6小的数应该存在于B6和A1中。 - -如果A1 < B5,这个时间可能性就很多了,比如A1 < A2 < A3 < A4 < B1 < B2,各种可能,无法排除元素,所以还是要从k/2开始寻找。 - -这个跟习题算法的区别是每次扔的东西明显少一些,但是k也在不断变小。下面的代码的时间复杂度是O(lg(m+n)) - - -```python -class Solution(object): - def findMedianSortedArrays(self, nums1, nums2): - """ - :type nums1: List[int] - :type nums2: List[int] - :rtype: float - """ - n = len(nums1) + len(nums2) - if n % 2 == 1: - return self.findKth(nums1, nums2, n / 2 + 1) - else: - smaller = self.findKth(nums1, nums2, n / 2) - bigger = self.findKth(nums1, nums2, n / 2 + 1) - return (smaller + bigger) / 2.0 - - - def findKth(self, A, B, k): - if len(A) == 0: - return B[k-1] - if len(B) == 0: - return A[k-1] - if k == 1 : - return min(A[0],B[0]) - - - a = A[ k / 2 - 1 ] if len(A) >= k / 2 else None - b = B[ k / 2 - 1 ] if len(B) >= k / 2 else None - - if b is None or (a is not None and a < b): - return self.findKth(A[k/2:], B, k - k/2) -   return self.findKth(A, B[k/2:],k - k/2) #这里要注意:因为 k/2 不一定 等于 (k - k/2), - - -``` -```python -#python3里面要用向下取整函数才可以AC,否则报错,TypeError: list indices must be integers or slices, not float - -from math import floor -class Solution: - def findMedianSortedArrays(self, nums1, nums2): - """ - :type nums1: List[int] - :type nums2: List[int] - :rtype: float - """ - n = len(nums1) + len(nums2) - if n % 2 == 1: - return self.findKth(nums1, nums2, floor(n/2)+1) - else: - smaller = self.findKth(nums1, nums2, floor(n/2)) - bigger = self.findKth(nums1, nums2, floor(n/2)+1) - return (smaller + bigger) / 2.0 - def findKth(self, A, B, k): - - if len(A) == 0: - return B[k-1] - if len(B) == 0: - return A[k-1] - if k == 1: - return min(A[0], B[0]) - a = A[floor(k/2)-1] if len(A) >= k/2 else None - b = B[floor(k/2)-1] if len(B) >= k/2 else None - if b is None or (a is not None and a < b): - return self.findKth(A[floor(k/2):], B, k - floor(k/2)) - else: - return self.findKth(A, B[floor(k/2):], k - floor(k/2)) -``` - -这个findKth的算法单独抽出来也是题目。 -### 寻找最小的k个数 - -题目描述 - -输入n个整数,输出其中最小的k个。 -分析与解法 - -## 解法一 - -要求一个序列中最小的k个数,按照惯有的思维方式,则是先对这个序列从小到大排序,然后输出前面的最小的k个数。 -至于选取什么的排序方法,我想你可能会第一时间想到快速排序(我们知道,快速排序平均所费时间为n*logn),然后再遍历序列中前k个元素输出即可。因此,总的时间复杂度:```O(n * log n)+O(k)=O(n * log n)```。 -## 解法二 - -咱们再进一步想想,题目没有要求最小的```k```个数有序,也没要求最后```n-k```个数有序。既然如此,就没有必要对所有元素进行排序。这时,咱们想到了用选择或交换排序,即: -1. 遍历```n```个数,把最先遍历到的k个数存入到大小为```k```的数组中,假设它们即是最小的```k```个数; -2. 对这```k```个数,利用选择或交换排序找到这k个元素中的最大值```kmax```(找最大值需要遍历这```k```个数,时间复杂度为```O(k))```; -3. 继续遍历剩余```n-k```个数。假设每一次遍历到的新的元素的值为```x```,把```x```与```kmax```比较:如果```x``` < ```kmax``` ,用```x```替换```kmax```,并回到第二步重新找出k个元素的数组中最大元素kmax‘;如果```x >= kmax```,则继续遍历不更新数组。 -每次遍历,更新或不更新数组的所用的时间为```O(k)```或```O(0)```。故整趟下来,时间复杂度为```n*O(k)=O(n*k)```。 -## 解法三 - -更好的办法是维护容量为k的最大堆,原理跟解法二的方法相似: -1. 用容量为```k```的最大堆存储最先遍历到的```k```个数,同样假设它们即是最小的```k```个数; -2. 堆中元素是有序的,令```k1 pivot ){ } - if( i < j ) - swap( &a[ i ], &a[ j ] ); - else - break; - } - //重置枢纽元 - swap( &a[ i ], &a[ right - 1 ] ); - - if( k <= i ) - QuickSelect( a, k, left, i - 1 ); - else if( k > i + 1 ) - QuickSelect( a, k, i + 1, right ); - } - else - InsertSort( a + left, right - left + 1 ); -} -``` -这个快速选择SELECT算法,类似快速排序的划分方法。N个数存储在数组S中,再从数组中选取“中位数的中位数”作为枢纽元X,把数组划分为Sa和Sb俩部分,Sa<=X<=Sb,如果要查找的k个元素小于Sa的元素个数,则返回Sa中较小的k个元素,否则返回Sa中所有元素+Sb中小的k-|Sa|个元素,这种解法在平均情况下能做到O(n)的复杂度。 -更进一步,《算法导论》第9章第9.3节介绍了一个最坏情况下亦为O(n)时间的SELECT算法,有兴趣的读者可以参看。 - -给定两个已经排序好的数组,求第k大的,算法有O(m+n).类似merge sort的原理。否则利用的就是之上提到的,利用已经有序的原理,然后每次丢。 - -之所以这里还有一个丢弃条件是b is None 丢A的一部分,是因为B的数组长度是有限的,这个时候很明显丢A的k/2是不影响的,因为无论B[-1]是如何大或者小,因为整个B的长度没有达到k/2小,所以丢掉的这部分最大的A[k/2-1]也不可能是第k个,因为即使整个B都比A[k/2-1]小,拼起来也不能使A[k/2-1]第k大,所以可以放心丢弃。 - - -这里是两个sorted list/array findKth,想到了类似的题目,如果给一个n个linked list,findKth,能想到的办法也只能是用heap吧,类似merge k sorted lists. - - -再写一个O(m+n)类似merge sort的也可以AC的代码 - -```python -class Solution(object): - def findMedianSortedArrays(self, nums1, nums2): - """ - :type nums1: List[int] - :type nums2: List[int] - :rtype: float - """ - def findKth(A, pa, B, pb, k): - res = 0 - m = 0 - while pa < len(A) and pb < len(B) and m < k: - if A[pa] < B[pb]: - res = A[pa] - m += 1 - pa += 1 - else: - res = B[pb] - m += 1 - pb += 1 - - while pa < len(A) and m < k: - res = A[pa] - pa += 1 - m += 1 - - - while pb < len(B) and m < k: - res = B[pb] - pb += 1 - m += 1 - return res - - n = len(nums1) + len(nums2) - if n % 2 == 1: - return findKth(nums1,0, nums2,0, n / 2 + 1) - else: - smaller = findKth(nums1,0, nums2,0, n / 2) - bigger = findKth(nums1,0, nums2,0, n / 2 + 1) - return (smaller + bigger) / 2.0 - -``` diff --git "a/docs/Leetcode_Solutions/C++/005._longest_palindromic_substring \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/C++/005._longest_palindromic_substring \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index 14fd335f3..000000000 --- "a/docs/Leetcode_Solutions/C++/005._longest_palindromic_substring \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,241 +0,0 @@ -### 5. Longest Palindromic Substring - -题目: - -https://leetcode.com/problems/longest-palindromic-substring/ - -难度: - -Medium - - - -思路0: - -暴力解法绝对不行 - -思路1: - -所以一个好的想法是 s 和 reverse(s) 共有的最长的 substring就是longest palindromic substring -> 问题转成求Longest common substring problem - -参见wikipedia - -,典型动归 - -LCSuff(S1...p, T1...q) = LCS(S1...p1, T1...q-1) if S[p] = T[q] else 0 - - - -伪码也有了,代码也有: - -https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Longest_common_substring#Python_2 - -这样也超时? -```python - class Solution(object): - def longestPalindrome(self, s): - """ - :type s: str - :rtype: str - """ - def lcs(s1, s2): - m = [[0] * (1 + len(s2)) for i in xrange(1 + len(s1))] - longest, x_longest = 0, 0 - for x in xrange(1, 1 + len(s1)): - for y in xrange(1, 1 + len(s2)): - if s1[x - 1] == s2[y - 1]: - m[x][y] = m[x - 1][y - 1] + 1 - if m[x][y] > longest: - longest = m[x][y] - x_longest = x - else: - m[x][y] = 0 - return s1[x_longest - longest: x_longest] - - return lcs(s, s[::-1]) -``` -因为以为这样s[::-1]已经很快了. - -这个方法是buggy的,看字符串abcxgcba,它reverse之后是abcgxcba,它们有公共字符串,但是这里面没有回文,修复方式是: - -we check if the substring’s indices are the same as the reversed substring’s original indices. If it is, then we attempt to update the longest palindrome found so far; if not, we skip this and find the next candidate. - -我觉得的修复方式这样么: - - 原本 翻转 - ABXYBA ABYXBA - - 求出来的substring indices是 0:2 但是这个s1[0:2] 和 s2[0:2]一样,所以不行 - 同理common substring indices还是s[4:6] 和s2[4:6]一样,不行 - - 而比如ABAD和 DABA - - substring indice 一个是0:3, 一个是1:4,这样就没问题 - - - - -思路2: - - - -依次把每一个字符当做回文字符串的中间字符,找到以该字符为中间字符的回文串的最大长度。分别对奇偶的情况进行讨论,接下来的关键就是对边界的把握,确保下标不要越界。当子串已经包含首字符或最后一个字符且此时还是回文串的时候,下标分别会向两边多移一位,需要补回来。 - -参考https://shenjie1993.gitbooks.io/leetcode-python/content/005%20Longest%20Palindromic%20Substring.html -```python - class Solution(object): - def longestPalindrome(self, s): - """ - :type s: str - :rtype: str - """ - n = len(s) - - # empty or one char - if n < 2: - return s - - # left index of the target substring - l = 0 - # right index of the target substring - r = 0 - # length of the longest palindromic substring for now - m = 0 - # length of the current substring - c = 0 - - # Whether the substring contains the first character or last character and is palindromic - b = True - for i in range(n): - # Odd situation - for j in range(min(n-i,i+1)): - if s[i-j] != s [i+j]: - b = False - break - else: - c = 2 * j + 1 - - if c > m : - l = i - j + 1 - b - r = i + j + b - m = c - b = True - - # Even situation - for j in range(min(n - i - 1, i + 1)): - if (s[i - j] != s[i + j + 1]): - b = False - break - else: - c = 2 * j + 2 - if (c > m): - l = i - j + 1 - b - r = i + j + 1 + b - m = c - b = True - return s[l:r] -``` -以上是参考版本,自己写的版本: -```python - class Solution(object): - def longestPalindrome(self, s): - """ - :type s: str - :rtype: str - """ - n = len(s) - - m,l,r = 0,0,0 - - for i in range(n): - # odd case - for j in range(min(i+1,n-i)): - if s[i-j] != s[i+j]: - break - if 2*j + 1 > m : - m = 2 * j + 1 - l = i-j - r = i+j - - - if i+1 < n and s[i] == s[i+1]: - for j in range(min(i+1,n-i-1)): - if s[i-j] != s[i+j+1]: - break - if 2 * j + 2 > m : - m = 2*j +2 - l = i-j - r = i+j+1 - - - return s[l:r+1] -``` - - -思路3: - -[Manacher算法](https://www.felix021.com/blog/read.php?2040) - -Manacher算法增加两个辅助变量id和mx,其中id表示最大回文子串中心的位置,mx则为id+P[id],也就是最大回文子串的边界。得到一个很重要的结论: - -- 如果mx > i,那么P[i] >= Min(P[2 * id - i], mx - i) . 为什么这样说呢,下面解释 - -下面,令j = 2*id - i,也就是说j是i关于id的对称点。 - -- 当 mx - i > P[j] 的时候,以S[j]为中心的回文子串包含在以S[id]为中心的回文子串中,由于i和j对称,以S[i]为中心的回文子串必然包含在以S[id]为中心的回文子串中,所以必有P[i] = P[j]; -![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher1.png) - -- 当 P[j] >= mx - i 的时候,以S[j]为中心的回文子串不一定完全包含于以S[id]为中心的回文子串中,但是基于对称性可知,下图中两个绿框所包围的部分是相同的,也就是说以S[i]为中心的回文子串,其向右至少会扩张到mx的位置,也就是说 P[i] >= mx - i。至于mx之后的部分是否对称,再具体匹配。 -![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher2.png) -所以P[i] >= Min(P[2 * id - i], mx - i),因为以j为中心的绘回文子串的左边界可能会比mx关于id的对称点要大,此时只能证明P[i]=P[2 * id - i] -- 此外,对于 mx <= i 的情况,因为无法对 P[i]做更多的假设,只能让P[i] = 1,然后再去匹配。 - -在下面的程序中我的P数组保存的是,以当前字符为回文子串中心时,该回文子串的长度(不包含当前字符自身) - - -简单地用一个小例子来解释:原字符串为'qacbcaw',一眼就可以看出来最大回文子串是'acbca', -下面是我做的图,累shi了! - -![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher3.jpg) - - - -所以最终代码中的max_i就是字符'b'所对应的index8,start的值就是(max_i - P[max_i] - 1) / 2 = 1,最终输出结果为s[1:6],即‘acbca’ - -```python -class Solution(object): - def longestPalindrome(self, s): - """ - :type s: str - :rtype: str - """ - def preProcess(s): - if not s: - return ['^', '&'] - T = ['^'] - for i in s: - T += ['#', i] - T += ['#', '$'] - return T - T = preProcess(s) - P = [0] * len(T) - id, mx = 0, 0 - for i in range(1, len(T)-1): - j = 2 * id - i - if mx > i: - P[i] = min(P[j], mx-i) - else: - P[i]= 0 - while T[i+P[i]+1] == T[i-P[i]-1]: - P[i] += 1 - if i + P[i] > mx: - id, mx = i, i + P[i] - max_i = P.index(max(P)) #保存的是当前最大回文子串中心位置的index - start = (max_i - P[max_i] - 1) / 2 - res = s[start:start+P[max_i]] - return res -``` -run code的时候结果会跟expected不一样,但是该input确实2个结果都可以,所以放心地submit吧 -还可以转到[647题](https://github.com/Lisanaaa/thinking_in_lc/blob/master/647._Palindromic_Substrings.md)去看一看,也可以用这个算法解 - - diff --git "a/docs/Leetcode_Solutions/C++/006._ZigZag_Conversion \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/C++/006._ZigZag_Conversion \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index cc7bcbe33..000000000 --- "a/docs/Leetcode_Solutions/C++/006._ZigZag_Conversion \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,67 +0,0 @@ -### 6. ZigZag Conversion - -题目: - - - -难度: - -Medium - - -思路 - -参考大神[pharrellyhy](https://leetcode.com/problems/zigzag-conversion/discuss/3404/Python-O(n)-Solution-in-96ms-(99.43)?page=2)的思路, -纵向思维考虑,```index```从```0```开始,我们要一直***自增***直到```numRows-1```,此后又一直***自减***到```0```,重复执行。 -给个例子容易懂一些:```s = “abcdefghijklmn”```, ```numRows = 4``` -``` -a g m -b f h l n -c e i k -d j -``` -看明白了吗,下来上去,下来上去,zigzag - - -```python -class Solution(object): - def convert(self, s, numRows): - """ - :type s: str - :type numRows: int - :rtype: str - """ - if numRows == 1 or numRows >= len(s): - return s - - L = [''] * numRows - index, step = 0, 1 - - for x in s: - L[index] += x - if index == 0: - step = 1 - elif index == numRows -1: - step = -1 - index += step - - return ''.join(L) -``` -假设用我上面给的例子,并且在```L[index] += x```这一行后面打印出index, step, L的值, 输出结果如下: -``` -(0, 1, ['a', '', '', '']) -(1, 1, ['a', 'b', '', '']) -(2, 1, ['a', 'b', 'c', '']) -(3, 1, ['a', 'b', 'c', 'd']) -(2, -1, ['a', 'b', 'ce', 'd']) -(1, -1, ['a', 'bf', 'ce', 'd']) -(0, -1, ['ag', 'bf', 'ce', 'd']) -(1, 1, ['ag', 'bfh', 'ce', 'd']) -(2, 1, ['ag', 'bfh', 'cei', 'd']) -(3, 1, ['ag', 'bfh', 'cei', 'dj']) -(2, -1, ['ag', 'bfh', 'ceik', 'dj']) -(1, -1, ['ag', 'bfhl', 'ceik', 'dj']) -(0, -1, ['agm', 'bfhl', 'ceik', 'dj']) -(1, 1, ['agm', 'bfhln', 'ceik', 'dj']) -``` - diff --git "a/docs/Leetcode_Solutions/C++/007._Reverse_Integer \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/C++/007._Reverse_Integer \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index f4120c1ea..000000000 --- "a/docs/Leetcode_Solutions/C++/007._Reverse_Integer \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,65 +0,0 @@ -### 7. Reverse Integer - -题目: - - - -难度: - -Easy - - -思路 - -翻转数字问题需要注意的就是溢出问题,为什么会存在溢出问题呢,我们知道int型的数值范围是 -2147483648~2147483647(负的2的31次方~2的31次方-1), 那么如果我们要翻转 1000000009 这个在范围内的数得到 9000000001,而翻转后的数就超过了范围。 - -#### 解法1: -如果输入的是负数,就递归调用原函数,参数变成-x即可 - - -```python -class Solution(object): - def reverse(self, x): - """ - :type x: int - :rtype: int - """ - if x < 0: - return -self.reverse(-x) - res = 0 - while x: - res = res * 10 + x % 10 - x /= 10 - return res if res <= 0x7fffffff else 0 -``` -#### 解法2: -按照参数正负号先将其转成字符串,然后再反转,根据是否溢出决定输出0还是反转结果 -```python -class Solution(object): - def reverse(self, x): - """ - :type x: int - :rtype: int - """ -        x = -int(str(x)[::-1][:-1]) if x < 0 else int(str(x)[::-1]) # [:-1]相当于把负号去掉 -        x = 0 if abs(x) > 0x7FFFFFFF else x - return x -``` -#### 解法3(StefanPochmann大神): -看这个解法前先看[backticks](https://docs.python.org/2.7/reference/expressions.html#string-conversions) - - -cmp函数在python3.x中用不了了,import operator用gt或者lt吧,或者回归if/else condition爸爸的怀抱吧! -```python -class Solution(object): - def reverse(self, x): - """ - :type x: int - :rtype: int - """ - s = cmp(x, 0) - r = int(`s * x`[::-1]) - return s * r * (r < 2 ** 31) -``` - - diff --git "a/docs/Leetcode_Solutions/C++/008._string_to_integer_(atoi) \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/C++/008._string_to_integer_(atoi) \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index 4ff1cddcf..000000000 --- "a/docs/Leetcode_Solutions/C++/008._string_to_integer_(atoi) \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,53 +0,0 @@ -### 8. String to Integer (atoi) - -题目: - - - -难度: -Medium - - -需要考虑比较多的边界条件&特殊情况 -1. 首先输入可能会有空格,所以先去掉空格 -2. 去掉空格后要考虑空字符串情况 -3. 字符串首位可能会有正负号,要考虑 -4. 开始转换成数字,题目说只要遇到非数字就可以break了 -5. 结果太大或者太小超过```int```限制就要返回特定数字 ```2147483647``` 或者 ```-2147483648``` -6. 根据之前的正负号结果返回对应数值 - - -```python -class Solution(object): - def myAtoi(self, str): - """ - :type str: str - :rtype: int - """ - str = str.strip() - strNum = 0 - if len(str) == 0: - return strNum - - positive = True - if str[0] == '+' or str[0] == '-': - if str[0] == '-': - positive = False - str = str[1:] - - for char in str: - if char >='0' and char <='9': - strNum = strNum * 10 + ord(char) - ord('0') - if char < '0' or char > '9': - break - - if strNum > 2147483647: - if positive == False: - return -2147483648 - else: - return 2147483647 - if not positive: - strNum = 0 - strNum - return strNum - -``` diff --git "a/docs/Leetcode_Solutions/C++/009._Palindrome_Number \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/C++/009._Palindrome_Number \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index 8e14084f7..000000000 --- "a/docs/Leetcode_Solutions/C++/009._Palindrome_Number \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,31 +0,0 @@ -### 9. Palindrome Number - -题目: - - -难度: -Medium - - -- 首先负数肯定不是palindrome -- 其次如果一个数字是一个正数,并且能被我0整除那它肯定也不是palindrome - -这样降低了复杂度 - -```python -class Solution(object): - def isPalindrome(self, x): - """ - :type x: int - :rtype: bool - """ - if x < 0 or (x != 0 and x % 10 == 0): - return False - rev, y = 0, x - while x > 0: - rev = rev * 10 + x % 10 - x /= 10 - return y == rev - -``` - diff --git "a/docs/Leetcode_Solutions/C++/010._regular_expression_matching \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/C++/010._regular_expression_matching \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index f3d51b109..000000000 --- "a/docs/Leetcode_Solutions/C++/010._regular_expression_matching \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,229 +0,0 @@ -### 010. Regular Expression Matching - -题目: - - - -难度: - -Hard - - - - -先尝试暴力解法,难点就在 * 身上, * 不会单独出现,它一定是和前面一个字母或"."配成一对。看成一对后"X*",它的性质就是:要不匹配0个,要不匹配连续的“X”.所以尝试暴力解法的时候一个trick是从后往前匹配. - - - -暴力解法居然也能AC? - -是这样来分情况看得: - -- 如果s[i] = p[j] 或者 p[j]= . : 往前匹配一位 -- 如果p[j] = ' * ', 检查一下,如果这个时候p[j-1] = . 或者p[j-1] = s[i] ,那么就往前匹配,如果这样能匹配过,就return True, 否者我们忽略 ' X* ',这里注意里面的递推关系 -- 再处理一下边界状况: - - s已经匹配完了, 如果此时p还有,那么如果剩下的是 X* 这种可以过,所以检查 - - p匹配完毕,如果s还有那么报错 - -```python -class Solution(object): - def isMatch(self, s, p): - """ - :type s: str - :type p: str - :rtype: bool - """ - def helper(s, i, p, j): - if j == -1: - return i == -1 - if i == -1: - if p[j] != '*': - return False - return helper(s, i, p, j-2) - if p[j] == '*': - if p[j-1] == '.' or p[j-1] == s[i]: - if helper(s, i-1, p, j): - return True - return helper(s, i, p, j-2) - if p[j] == '.' or p[j] == s[i]: - return helper(s, i-1, p, j-1) - return False - - return helper(s, len(s)-1, p, len(p)-1) -``` - - - ----------- - -dp优化,感觉和edit distance很像。 DP优化待代码化,感觉学DP的一个重点除了递归学好以外,另一点是一定要会画表格。 - - -画一个表格来看一下状况 - -``` - c * a * b - 0 1 2 3 4 5 - 0 1 0 1 0 1 0 -a 1 0 0 0 1 1 0 -a 2 0 0 0 0 1 0 -b 3 0 0 0 0 0 1 - -``` - -这里有几个取巧/容易出问题的敌方,这里画的表用的是1-based string。一上来,做的事包括: - -- 初始化,空字符匹配:dp[0][0] =1 -- 第一行,c* 可以匹配空字符,c* a* 可以匹配空字符,p[j-1] != s[i],匹配空字符 -- 然后进入第二行再来看,实际上我们可以看到,如果没有碰到 * 匹配还是很朴素的,但是碰到 * : - - 1这个匹配可以从左侧传来,dp[i][j] = dp[i][j-1],that is 匹配 1个 - - 1 也可以有上方传来,这种情况是p[j-1] = s[i],匹配多个 dp[i][j] = dp[i-1][j] - - 1 这个匹配也可以从间隔一个的左侧传来,that is也可以有个性的匹配0个,如同匹配空字符一样dp[i][j] = dp[i][j-2],但是注意匹配0个实际上有两种状况,如果p[j-1]!=s[i],强制匹配0个,即使p[j-1] == s[i],我们也可以傲娇的用它来匹配0个。 - -再代码化一点: - -- s[i] == p[j] 或者 p[j] == '.' : dp[i][j] = dp[i-1][j-1] -- p[j] == '*': 然后分几种情况 - - p[j-1] != s[i] : dp[i][j] = dp[i][j-2] 匹配0个的状况 - - p[j-1] == s[i] or p[i-1] == '.': - - dp[i][j] = dp[i-1][j] 匹配多个s[i] - - dp[i][j] = dp[i][j-2] 匹配0个 - -AC代码,注意一下,因为上表为了表达方便,用的是1-based string系统,实际写代码的时候我们心里还是清楚这个string还是从0开始的,不过也可以尝试往前面添东西来方便。 - - -AC代码 - -```python -class Solution(object): - def isMatch(self, s, p): - """ - :type s: str - :type p: str - :rtype: bool - """ - m, n = len(s), len(p) - dp = [ [0 for i in range(n+1)] for j in range(m+1)] - - dp[0][0] = 1 - - # init the first line - for i in range(2,n+1): - if p[i-1] == '*': - dp[0][i] = dp[0][i-2] - - for i in range(1,m+1): - for j in range(1,n+1): - if p[j-1] == '*': - if p[j-2] != s[i-1] and p[j-2] != '.': - dp[i][j] = dp[i][j-2] - elif p[j-2] == s[i-1] or p[j-2] == '.': - dp[i][j] = dp[i-1][j] or dp[i][j-2] - - elif s[i-1] == p[j-1] or p[j-1] == '.': - dp[i][j] = dp[i-1][j-1] - - return dp[m][n] == 1 -``` - -写个测试案例 -```python -import unittest -class Solution(object): - def isMatch(self, s, p): - """ - :type s: str - :type p: str - :rtype: bool - """ - m, n = len(s), len(p) - dp = [ [0 for i in range(n+1)] for j in range(m+1)] - - dp[0][0] = 1 - - # init the first line - for i in range(2,n+1): - if p[i-1] == '*': - dp[0][i] = dp[0][i-2] - - for i in range(1,m+1): - for j in range(1,n+1): - if p[j-1] == '*': - if p[j-2] != s[i-1] and p[j-2] != '.': - dp[i][j] = dp[i][j-2] - elif p[j-2] == s[i-1] or p[j-2] == '.': - dp[i][j] = dp[i-1][j] or dp[i][j-2] - - elif s[i-1] == p[j-1] or p[j-1] == '.': - dp[i][j] = dp[i-1][j-1] - - return dp[m][n] == 1 - - -class TestSolution(unittest.TestCase): - def test_none_0(self): - s = "" - p = "" - self.assertTrue(Solution().isMatch(s, p)) - - def test_none_1(self): - s = "" - p = "a" - self.assertFalse(Solution().isMatch(s, p)) - - def test_no_symbol_equal(self): - s = "abcd" - p = "abcd" - self.assertTrue(Solution().isMatch(s, p)) - - def test_no_symbol_not_equal_0(self): - s = "abcd" - p = "efgh" - self.assertFalse(Solution().isMatch(s, p)) - - def test_no_symbol_not_equal_1(self): - s = "ab" - p = "abb" - self.assertFalse(Solution().isMatch(s, p)) - - def test_symbol_0(self): - s = "" - p = "a*" - self.assertTrue(Solution().isMatch(s, p)) - - def test_symbol_1(self): - s = "a" - p = "ab*" - self.assertTrue(Solution().isMatch(s, p)) - - def test_symbol_2(self): - # E.g. - # s a b b - # p 1 0 0 0 - # a 0 1 0 0 - # b 0 0 1 0 - # * 0 1 1 1 - s = "abb" - p = "ab*" - self.assertTrue(Solution().isMatch(s, p)) - - -if __name__ == "__main__": - unittest.main() - - - -输出: -........ - -Ran 8 tests in 0.001s - -OK -``` - -参考: - - -[动态规划](https://hk029.gitbooks.io/leetbook/content/动态规划/010.%20Regular%20Expression%20Matching/010.%20Regular%20Expression%20Matching.html) - - diff --git "a/docs/Leetcode_Solutions/C++/011._container_with_most_water \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/C++/011._container_with_most_water \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index 4fac0f11c..000000000 --- "a/docs/Leetcode_Solutions/C++/011._container_with_most_water \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,112 +0,0 @@ -### 11. Container With Most Water - - - -题目: - - - -难度: -Medium - -思路: - - -首先理解花了我一点时间,因为一开始写出来,给了一个例子: - -``` - -height = [3,2,1,3] -解是 9 - - -| | -| | | -| | | | -1 2 3 4 - - 一开始我的理解走偏的地方是这个9是如何得到的,因为根据最短板原理,明显不可能得到9啊,后来发现是·Find two lines, which together with x-axis forms a container, such that the container contains the most water. -``` - -所以代码写起来就简单了,AC无能,超时,时间复杂度O(N^2) - - -``` -class Solution(object): # 此法超时 - def maxArea(self, height): - """ - :type height: List[int] - :rtype: int - """ - n = len(height) - most_water = 0 - for i in range(n-1): - for j in range(i, n): - water = (j-i) * min(height[i], height[j]) - most_water = max(water, most_water) - return most_water - -``` - -题目给的tag是 two pointer,所以上边的策略肯定可以改进,改进的地方就不能是这个一次走一边,而可能是两边都要走。 - - - -参考 - - -思路: - -由于ai和aj (i=i, j'<=j) >= S(i,j)```,由于```j'-i' <= j-i```,必然要有```min(ai',aj')>=min(ai,aj)```才行。同样可以采用头尾双指针向中间移动: - -当```a(left) < a(right)```时,对任何```j S(left, j a(right)时,需要左移right`。 - -`而当a(left) = a(right)时,需要同时移动left和right。` - -思路整理: -left = 0, right = n-1 -1. a[left] < a[right], left++ -2. a[left] > a[right], right-- -3. a[left] = a[right], left++, right-- -终止条件:left >= right - -这个证明大快人心 - - -这样写也能过: - - -```python -class Solution(object): - def maxArea(self, height): - """ - :type height: List[int] - :rtype: int - """ - n = len(height) - left, right = 0, n-1 - most_water = 0 - while left <= right: - water = (right - left) * min(height[left], height[right]) - most_water = max(water, most_water) - if height[left] < height[right]: - left += 1 - elif height[left] > height[right]: - right -= 1 - else: - left += 1 - right -= 1 - return most_water - -``` diff --git "a/docs/Leetcode_Solutions/C++/012._Integer_to_Roman \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/C++/012._Integer_to_Roman \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index 6177e3322..000000000 --- "a/docs/Leetcode_Solutions/C++/012._Integer_to_Roman \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,71 +0,0 @@ -### 12. Integer to Roman - - -题目: - - - -难度: -Medium - -思路: - -首先我学习了一下罗马字母是如何表示的。然后感慨,这个阿拉伯数字是多么好的发明 - - - -上图 - - - -基于的是这些个Symbol: - -``` -1 5 10 50 100 500 1000 -I V X L C D M -``` - - - -罗马数字表示法见[Leetcode 013](https://github.com/Lisanaaa/thinking_in_lc/blob/master/013._Roman_to_Integer.md) - -这里有一个很棒的[算法](https://gist.github.com/imilu/00f32c61e50b7ca296f91e9d96d8e976) - -AC代码 - -```python -class Solution(object): - def intToRoman(self, num): - """ - :type num: int - :rtype: str - """ - lookup = { - 'M': 1000, - 'CM': 900, - 'D': 500, - 'CD': 400, - 'C': 100, - 'XC': 90, - 'L': 50, - 'XL': 40, - 'X': 10, - 'IX': 9, - 'V': 5, - 'IV': 4, - 'I': 1 - } - romanStr = '' - - for symbol, val in sorted(lookup.items(), key = lambda t: t[1], reverse = True): - while num >= val: - romanStr += symbol - num -= val - return romanStr -``` - - - - - -因为dict本身是无序的,这里做了一个排序的操作,否则可能会出现IIII这种状况。 diff --git "a/docs/Leetcode_Solutions/C++/013._Roman_to_Integer \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/C++/013._Roman_to_Integer \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index 4f1184b8a..000000000 --- "a/docs/Leetcode_Solutions/C++/013._Roman_to_Integer \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,82 +0,0 @@ -### 13.Roman to Integer - - - -题目: - - -难度: -Easy - -思路: - - -``` -罗马数字是最古老的数字表示方式,比阿拉伯数组早2000多年,起源于罗马 - -罗马数字有如下符号: - -基本字符 I V X L C D M -对应阿拉伯数字 1 5 10 50 100 500 1000 - -计数规则: -- 相同的数字连写,所表示的数等于这些数字相加得到的数,例如:III = 3 -- 小的数字在大的数字右边,所表示的数等于这些数字相加得到的数,例如:VIII = 8 -- 小的数字,限于(I、X和C)在大的数字左边,所表示的数等于大数减去小数所得的数,例如:IV = 4,这条规则好像这题不管 -- 正常使用时,连续的数字重复不得超过三次 -- 在一个数的上面画横线,表示这个数扩大1000倍(本题只考虑3999以内的数,所以用不到这条规则) -- 从前向后遍历罗马数字,如果某个数比前一个数小,则加上该数。反之,减去前一个数的两倍然后加上该数 -``` - - - -integer to Roman 是 Medium,这个roman to integer是easy - - -- 从前往后扫描,用一个临时变量记录分段数字。 -- 如果当前比前一个大,说明这一段的值应当是这个值减去上一个值。比如IV = 5-1 =4; 否则,将当前值加入到结果中,然后开始下一段记录,比如VI = 5 + 1, II = 1 +1 - - -所以这也就是罗马数字的基础,感觉?这样才不会读串? - - - -AC代码 - -```python -class Solution(object): - def romanToInt(self, s): - """ - :type s: str - :rtype: int - """ - lookup = { - 'M': 1000, - 'D': 500, - 'C': 100, - 'L': 50, - 'X': 10, - 'V': 5, - 'I': 1 - } - res = 0 - for i in range(len(s)): - if i > 0 and lookup[s[i]] > lookup[s[i-1]]: - res = res + lookup[s[i]] - 2 * lookup[s[i-1]] - else: - res += lookup[s[i]] - return res -``` -或者甚至可以建立一个新函数用于取对应数值: -``` - def table(x): - return { - 'I':1, - 'V':5, - 'X':10, - 'L':50, - 'C':100, - 'D':500, - 'M':1000 - }.get(x) -``` diff --git "a/docs/Leetcode_Solutions/C++/014._longest_common_prefix \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/014._longest_common_prefix \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a64997ef1..000000000 --- "a/docs/Leetcode_Solutions/C++/014._longest_common_prefix \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,77 +0,0 @@ -### 14. Longest Common Prefix - - -题目: - - - -难度: - -Easy - - -思路: - -#### 解法1: -以一个小例子来解释,strs=['laa', 'lab', 'lac'], 如果存在LCP的话它肯定就在第一个字符串strs[0]中,并且LCP的长度肯定不会大于strs[0]的长度 -- 依次假设LCP长度为0到len(strs[0]),在每一轮循环中: -   -- 1. 只要strs中存在比当前长度i更短的string,立刻返回上一轮LCP,即strs[0][:i] - 2. 只要strs中存在当前index字符与LCP该index不相同的字符串,立刻返回上一轮LCP,即strs[0][:i] -- 如果一直没返回,说明strs[0]本身就是LCP,返回它 - - -``` -class Solution(object): - def longestCommonPrefix(self, strs): - """ - :type strs: List[str] - :rtype: str - """ - if not strs: - return "" - for i in range(len(strs[0])): - for str in strs: - if len(str) <= i or strs[0][i] != str[i]: - return strs[0][:i] - return strs[0] - -``` - -#### 解法2: -- dp[i]代表前i+1个字符串的最大前缀串, -- 如果第i+2个字符串不以dp[i]为前缀,就去掉dp[i]的最后一个字符再试一次 -- 都去完了那么dp[i+1]肯定就是空串了,也就等于这时候的dp[i],因为dp[i]的每个字符已经被去完了 -```python -class Solution(object): - def longestCommonPrefix(self, strs): - """ - :type strs: List[str] - :rtype: str - """ - if not strs: - return '' - dp = [strs[0]]*len(strs) - for i in range(1,len(strs)): - while not strs[i].startswith(dp[i-1]): - dp[i-1] = dp[i-1][:-1] - dp[i] = dp[i-1] - return dp[-1] -``` - - - - - - - -python无敌啊!!!有没有天理啊,手动滑稽😏😏😏😏!一行解法: -```python -class Solution(object): - def longestCommonPrefix(self, strs): - """ - :type strs: List[str] - :rtype: str - """ - return os.path.commonprefix(strs) -``` diff --git "a/docs/Leetcode_Solutions/C++/015._3sum \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/015._3sum \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 9f962f9e2..000000000 --- "a/docs/Leetcode_Solutions/C++/015._3sum \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,106 +0,0 @@ -### 15. 3Sum - -题目: - - - -难度: - -Medium - - -第一想法,先把nums排序,用三个loop,无法AC - -``` -class Solution(object): - def threeSum(self, nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - n = len(nums) - res = [] - nums.sort() - for i in range(n): - for j in range(i,n): - for k in range(j,n): - if nums[i] + nums[j] + nums[k] == 0 and j != i and k != j and k != i: - curRes = [nums[i],nums[j],nums[k]] - if curRes not in res: - res.append(curRes) - - return res -``` - - -然后查了一下2sum,用2sum的花样,因为要排除重复以及输出是按照从小到大的输出:但是还是超时 - - -``` -class Solution(object): # 此法也超时 -    def threeSum(self, nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - def twoSum(nums, target): - """ - :type nums: List[int] - :type target: int - :rtype: List[int] - """ - lookup = {} - for num in nums: - if target - num in lookup: - if (-target ,target - num, num) not in res: - res.append((-target ,target - num, num)) - lookup[num] = target - num - - n = len(nums) - nums.sort() - res = [] - for i in range(n): - twoSum(nums[i+1:], 0-nums[i]) - return [list(i) for i in res] -``` - - -谷歌看别人的代码,思路非常清晰的,运行起来比直接调用 Two Sum快. - -清晰的思路: - -- 排序 -- 固定左边,如果左边重复,继续 -- 左右弄边界,去重,针对不同的左右边界情况处理 - - -```python -class Solution(object): - def threeSum(self, nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - n, res = len(nums), [] - nums.sort() - for i in range(n): - if i > 0 and nums[i] == nums[i-1]: # 因为i=0这个元素会直接往下执行 - continue - l, r = i+1, n-1 - while l < r: - tmp = nums[i] + nums[l] + nums[r] - if tmp == 0: - res.append([nums[i], nums[l], nums[r]]) - l += 1 - r -= 1 - while l < r and nums[l] == nums[l-1]: - l += 1 - while l < r and nums[r] == nums[r+1]: - r -= 1 - elif tmp > 0: - r -= 1 - else: - l += 1 - return res -``` - diff --git "a/docs/Leetcode_Solutions/C++/016._3sum_closest \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/016._3sum_closest \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 96b012ad2..000000000 --- "a/docs/Leetcode_Solutions/C++/016._3sum_closest \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,51 +0,0 @@ -### 16. 3Sum Closest - -题目: - - - -难度: - -Medium - - -思路: -跟3 Sum一样,固定一个元素 - -用两个指针来循环 - - -```python -class Solution(object): - def threeSumClosest(self, nums, target): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - n, res, diff = len(nums), None, float('inf') - nums.sort() - for i in range(n): - if i > 0 and nums[i] == nums[i-1]: - continue - l, r = i+1, n-1 - while l < r: - tmp = nums[i] + nums[l] + nums[r] - if tmp == target: - return target - elif tmp > target: - r -= 1 - if abs(tmp-target) < diff: - diff = abs(tmp-target) - res = tmp - while l < r and nums[r] == nums[r+1]: - r -= 1 - else: - l += 1 - if abs(tmp-target) < diff: - diff = abs(tmp-target) - res = tmp - while l < r and nums[l] == nums[l-1]: - l += 1 - return res - -``` diff --git "a/docs/Leetcode_Solutions/C++/017._letter_combinations_of_a_phone_number \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/017._letter_combinations_of_a_phone_number \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e951ad85d..000000000 --- "a/docs/Leetcode_Solutions/C++/017._letter_combinations_of_a_phone_number \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,51 +0,0 @@ -### 17. Letter Combinations of a Phone Number - -题目: - - - - -难度: - -Medium - - -思路: - - - hash table一个,用来对应digit -> letter - - s用来记录结果,每次从digits里面去一个,然后寻找其可能的char,加到s中,digits长度减小 - - digits长度为0时候,把它加入结果 - - - -```python -class Solution(object): - def letterCombinations(self, digits): - """ - :type digits: str - :rtype: List[str] - """ - if digits == '': - return [] - self.res = [] - self.singleResult('', digits) - return self.res - - def singleResult(self, s, digits): - if len(digits) == 0: - self.res.append(s) - else: - mapx = {'2':['a','b','c'], - '3':['d','e','f'], - '4':['g','h','i'], - '5':['j','k','l'], - '6':['m','n','o'], - '7':['p','q','r','s'], - '8':['t','u','v'], - '9':['w','x','y','z']} - cur_digit = digits[0] - for c in mapx[cur_digit]: - self.singleResult(s+c, digits[1:]) -``` - - diff --git "a/docs/Leetcode_Solutions/C++/018._4sum \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/018._4sum \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index ba6862056..000000000 --- "a/docs/Leetcode_Solutions/C++/018._4sum \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,136 +0,0 @@ -### 18. 4Sum - -题目: - - - -难度: - -Medium - - -思路: - -用3sum改 - -固定两个数,活动别的 - - -```python -class Solution(object): - def fourSum(self, nums, target): - """ - :type nums: List[int] - :type target: int - :rtype: List[List[int]] - """ - n = len(nums) - nums.sort() - res = [] - for i in range(n): - for j in range(i+1,n): - l, r = j+1, n-1 - while l < r: - temp = nums[i] + nums[j] + nums[l] + nums[r] - if temp == target: - if [nums[i],nums[j],nums[l],nums[r]] not in ans: - ans.append([nums[i],nums[j],nums[l],nums[r]]) - l += 1 - r -= 1 - elif temp > target: - r -= 1 - else: - l+=1 - return ans -``` - -可以通过加判断条件,前后数字相等可以直接跳过,使得算法更快 - - -```python -class Solution(object): - def fourSum(self, nums, target): - """ - :type nums: List[int] - :type target: int - :rtype: List[List[int]] - """ - n, res = len(nums), [] - nums.sort() - for i in range(n): - if i > 0 and nums[i] == nums[i-1]: # 因为i=0这个元素会直接往下执行 - continue - for j in range(i+1, n): - if j > i+1 and nums[j] == nums[j-1]: # 因为j=i+1这个元素会直接往下执行 - continue - l, r = j+1, n-1 - while l < r: - tmp = nums[i] + nums[j] + nums[l] + nums[r] - if tmp == target: - res.append([nums[i], nums[j], nums[l], nums[r]]) - l += 1 - r -= 1 - while l < r and nums[l] == nums[l-1]: - l += 1 - while l < r and nums[r] == nums[r+1]: - r -= 1 - elif tmp > target: - r -= 1 - else: - l += 1 - return res - -``` - -还可以再用一些判断来加速,比如枚举第一个数的时候 - -- nums[i] + nums[i + 1] + nums[i + 2] + nums[i + 3] > target: break -这是当前能凑齐的最小的4个数,比target后面都不用做了 -- nums[i] + nums[n – 3] + nums[n – 2] + nums[n – 1] < target: continue -这是当前凑齐的最大的4个数,比target小,说明第一个数不够大 - -参考 - - - - -```python -class Solution(object): - def fourSum(self, nums, target): - """ - :type nums: List[int] - :type target: int - :rtype: List[List[int]] - """ - n, res = len(nums), [] - nums.sort() - for i in range(n): - if i > 0 and nums[i] == nums[i-1]: # 因为i=0这个元素会直接往下执行 - continue - if i+3 <= n-1: - if nums[i] + nums[i+1] + nums[i+2] + nums[i+3] > target: - break - if i < n-3: - if nums[i] + nums[n-3] + nums[n-2] + nums[n-1] < target: - continue - for j in range(i+1, n): - if j > i+1 and nums[j] == nums[j-1]: # 因为j=i+1这个元素会直接往下执行 - continue - l, r = j+1, n-1 - while l < r: - tmp = nums[i] + nums[j] + nums[l] + nums[r] - if tmp == target: - res.append([nums[i], nums[j], nums[l], nums[r]]) - l += 1 - r -= 1 - while l < r and nums[l] == nums[l-1]: - l += 1 - while l < r and nums[r] == nums[r+1]: - r -= 1 - elif tmp > target: - r -= 1 - else: - l += 1 - return res - -``` diff --git "a/docs/Leetcode_Solutions/C++/019._remove_nth_node_from_end_of_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/019._remove_nth_node_from_end_of_list \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 5bdefb7a0..000000000 --- "a/docs/Leetcode_Solutions/C++/019._remove_nth_node_from_end_of_list \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,42 +0,0 @@ -### 19. Remove Nth Node From End of List - -题目: - - - - -难度: Medium - - -AC击败了95.80%的Python用户,技巧 dummy head 和双指针。 - -切记最后要返回```dummy.next```而不是```head```,因为有这样一种情况,删掉节点后```linked list```空了,那返回```head```的话结果显然不同。如: -输入链表为```[1]```, ```n = 1```, 应该返回```None```而不是```[1]``` - -```python -class Solution(object): - def removeNthFromEnd(self, head, n): - """ - :type head: ListNode - :type n: int - :rtype: ListNode - """ - dummy = ListNode(-1) - dummy.next = head - p, q = dummy, dummy - - for i in range(n): - q = q.next - - while q.next: - p = p.next - q = q.next - - p.next = p.next.next - return dummy.next - -``` - - - - diff --git "a/docs/Leetcode_Solutions/C++/020._valid_parentheses \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/020._valid_parentheses \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 3b008ac91..000000000 --- "a/docs/Leetcode_Solutions/C++/020._valid_parentheses \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,52 +0,0 @@ -### 20. Valid Parentheses - -题目: - - - - -难度: - -Easy - - -### 思路: - -因为一共只有三种状况"(" -> ")", "[" -> "]", "{" -> "}". - -一遇到左括号就入栈,右括号出栈,这样来寻找对应 - -需要检查几件事: - -- 出现右括号时stack里还有没有东西 -- 出stack时是否对应 -- 最终stack是否为空 - - - -```python -class Solution(object): - def isValid(self, s): - """ - :type s: str - :rtype: bool - """ - leftP = '([{' - rightP = ')]}' - stack = [] - for char in s: - if char in leftP: - stack.append(char) - if char in rightP: - if not stack: - return False - tmp = stack.pop() - if char == ')' and tmp != '(': - return False - if char == ']' and tmp != '[': - return False - if char == '}' and tmp != '{': - return False - return stack == [] -``` - diff --git "a/docs/Leetcode_Solutions/C++/021._merge_two_sorted_lists \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/021._merge_two_sorted_lists \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 40517726c..000000000 --- "a/docs/Leetcode_Solutions/C++/021._merge_two_sorted_lists \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,48 +0,0 @@ -### 21. Merge Two Sorted Lists - -题目: - - - - -难度: Easy - - -同样适用dummy head - -```python -class Solution(object): - def mergeTwoLists(self, l1, l2): - """ - :type l1: ListNode - :type l2: ListNode - :rtype: ListNode - """ - if l1 == None: - return l2 - if l2 == None: - return l1 - - dummy = ListNode(-1) - cur = dummy - - while l1 and l2: - if l1.val < l2.val: - cur.next = l1 - l1 = l1.next - else: - cur.next = l2 - l2 = l2.next - cur = cur.next - - if l1: - cur.next = l1 - else: - cur.next = l2 - return dummy.next - -``` - - - - diff --git "a/docs/Leetcode_Solutions/C++/022._generate_parentheses \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/022._generate_parentheses \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index ae14c9089..000000000 --- "a/docs/Leetcode_Solutions/C++/022._generate_parentheses \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,88 +0,0 @@ -### 22. Generate Parentheses - -题目: - - - -难度: - -Medium - - - - - -```python -class Solution(object): - def generateParenthesis(self,n): - """ - :type n: int - :rtype: List[str] - """ - self.res = [] - self.singleStr('', 0, 0, n) - return self.res - - def singleStr(self, s, left, right, n): - if left == n and right == n: - self.res.append(s) - if left < n: - self.singleStr(s + '(',left + 1, right,n) - if right < left: - self.singleStr(s + ')',left, right + 1, n) - -``` - - -非常牛逼的讲解,需要这样的人来给我们讲算法 - -####以Generate Parentheses为例,backtrack的题到底该怎么去思考? - - -所谓Backtracking都是这样的思路:在当前局面下,你有若干种选择。那么尝试每一种选择。如果已经发现某种选择肯定不行(因为违反了某些限定条件),就返回;如果某种选择试到最后发现是正确解,就将其加入解集 - -所以你思考递归题时,只要明确三点就行:选择 (Options),限制 (Restraints),结束条件 (Termination)。即“ORT原则”(这个是我自己编的) - - - - -对于这道题,在任何时刻,你都有两种选择: -1. 加左括号。 -2. 加右括号。 - -同时有以下限制: -1. 如果左括号已经用完了,则不能再加左括号了。 -2. 如果已经出现的右括号和左括号一样多,则不能再加右括号了。因为那样的话新加入的右括号一定无法匹配。 - -结束条件是: -左右括号都已经用完。 - -结束后的正确性: -左右括号用完以后,一定是正确解。因为1. 左右括号一样多,2. 每个右括号都一定有与之配对的左括号。因此一旦结束就可以加入解集(有时也可能出现结束以后不一定是正确解的情况,这时要多一步判断)。 - -递归函数传入参数: -限制和结束条件中有“用完”和“一样多”字样,因此你需要知道左右括号的数目。 -当然你还需要知道当前局面sublist和解集res。 - -因此,把上面的思路拼起来就是代码: - - if (左右括号都已用完) { - 加入解集,返回 - } - //否则开始试各种选择 - if (还有左括号可以用) { - 加一个左括号,继续递归 - } - if (右括号小于左括号) { - 加一个右括号,继续递归 - } - - - -你帖的那段代码逻辑中加了一条限制:“3. 是否还有右括号剩余。如有才加右括号”。这是合理的。不过对于这道题,如果满足限制1、2时,3一定自动满足,所以可以不判断3。 - -这题其实是最好的backtracking初学练习之一,因为ORT三者都非常简单明显。你不妨按上述思路再梳理一遍,还有问题的话再说。 - - - -以上文字来自 1point3arces的牛人解答 diff --git "a/docs/Leetcode_Solutions/C++/023._merge_k_sorted_lists \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/023._merge_k_sorted_lists \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 9cd97355c..000000000 --- "a/docs/Leetcode_Solutions/C++/023._merge_k_sorted_lists \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,46 +0,0 @@ -### 23. Merge k Sorted Lists - - - -题目: - - - -难度: -Hard - -思路: - -看到思路有heap,similar question有ugly number|| -> 这个是用heapq来解决的 - -那么就用heap吧? heapsort - -最简单的做法是只要每个list里面还有node,就把他们扔到minheap里面去,然后再把minheap pop,一个一个node连起来,听起来时间复杂度和空间复杂度都蛮高的。 -直接merge必然是不好的,因为没有利用有序这个点,应该做的是每次取来一个,然后再把应该的下一个放入 - -写到这里瞬间明白和ugly number ii像的点了,甚至感觉跟find in sorted matrix ii也像 - -```python -class Solution(object): - def mergeKLists(self, lists): - """ - :type lists: List[ListNode] - :rtype: ListNode - """ - import heapq - h = [] - for lst_head in lists: - if lst_head: - heapq.heappush(h, (lst_head.val, lst_head)) - cur = ListNode(-1) - dummy = cur - while h: - smallest_node = heapq.heappop(h)[1] - cur.next = smallest_node - cur = cur.next - if smallest_node.next: - heapq.heappush(h, (smallest_node.next.val, smallest_node.next)) - return dummy.next -``` - -当然还像merge two sorted list diff --git "a/docs/Leetcode_Solutions/C++/024._swap_nodes_in_pairs \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/024._swap_nodes_in_pairs \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 907744af1..000000000 --- "a/docs/Leetcode_Solutions/C++/024._swap_nodes_in_pairs \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,35 +0,0 @@ -###24. Swap Nodes in Pairs - -题目: - - - -难度 : Easy - -看了hint,用loop做,每个node关系要弄清楚 - - -``` - -class Solution(object): - def swapPairs(self, head): - """ - :type head: ListNode - :rtype: ListNode - """ - if head == None or head.next == None: - return head - - dummy = ListNode(-1) - dummy.next = head - - cur = dummy - - while cur.next and cur.next.next: - next_one, next_two, next_three = cur.next, cur.next.next, cur.next.next.next - cur.next = next_two - next_two.next = next_one - next_one.next = next_three - cur = next_one - return dummy.next -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/026._Remove_Duplicates_from_Sorted_Array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/026._Remove_Duplicates_from_Sorted_Array \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 23b43561c..000000000 --- "a/docs/Leetcode_Solutions/C++/026._Remove_Duplicates_from_Sorted_Array \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,73 +0,0 @@ -### 26. Remove Duplicates from Sorted Array - - - -题目: - - - -难度: -Easy - -思路: -因为题目说了是```sorted array```,所以只需要不停判断当前位置值和下一位置是否相等,若相等则```pop掉当前值```,否则```move```到下一位置做重复判断 - - -```python -class Solution(object): - def removeDuplicates(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - i = 0 - while i < (len(nums) - 1): - if nums[i] == nums[i+1]: - nums.remove(nums[i]) - else: - i += 1 - return len(nums) -``` - - -这里代码用```while loop```而不用```for loop```是因为```pop```操作之后```nums```的长度会变化 - -如:```for i in range(len(nums)-1)```实际上固定了```range```里面的值了,不会二次判断 - -``` -n = 10 -for i in range(n): - n = n - 1 # 尽管n在变化 - print(i) - -上面这段代码的输出结果为: - -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -``` - - - - - - - - - - - - - - - - - - diff --git "a/docs/Leetcode_Solutions/C++/027._Remove_Element \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/027._Remove_Element \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 3603a5b3d..000000000 --- "a/docs/Leetcode_Solutions/C++/027._Remove_Element \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,25 +0,0 @@ -### 27. Remove Element - - - -题目: - - - -难度: -Easy - -瞬秒 - -```python -class Solution(object): - def removeElement(self, nums, val): - """ - :type nums: List[int] - :type val: int - :rtype: int - """ - while val in nums: - nums.remove(val) - return len(nums) -``` diff --git "a/docs/Leetcode_Solutions/C++/028._implement_strstr() \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/028._implement_strstr() \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index cecd6a5e5..000000000 --- "a/docs/Leetcode_Solutions/C++/028._implement_strstr() \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,47 +0,0 @@ -### 28. Implement strStr() - -题目: - - - - -难度: - -Easy - - -一行解法如何? -```python -class Solution(object): - def strStr(self, haystack, needle): - """ - :type haystack: str - :type needle: str - :rtype: int - """ - return haystack.find(needle) -``` - - -这个题目其实可以引来一大类,那就是关于string的算法,但是此处先用暴力算法来AC,然后再来细读/品味别的string相关算法吧。 - -虽然是暴力算法,但是也不容易写对啊 -```python -class Solution(object): - def strStr(self, haystack, needle): - """ - :type haystack: str - :type needle: str - :rtype: int - """ - if not needle: - return 0 - for i in xrange(len(haystack) - len(needle) + 1): - if haystack[i] == needle[0]: - j = 1 - while j < len(needle) and haystack[i+j] == needle[j]: - j += 1 - if j == len(needle): - return i - return -1 -``` diff --git "a/docs/Leetcode_Solutions/C++/030._Substring_with_Concatenation_of_All_Words \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/030._Substring_with_Concatenation_of_All_Words \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 0dd9eea26..000000000 --- "a/docs/Leetcode_Solutions/C++/030._Substring_with_Concatenation_of_All_Words \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,54 +0,0 @@ -### 30. Substring with Concatenation of All Words - -题目: - - - -难度 : Hard - - - -```python -class Solution(object): - def findSubstring(self, s, words): - """ - :type s: str - :type words: List[str] - :rtype: List[int] - """ - res = [] - if len(words) == 0 or len(s) < len(words) * len(words[0]): - return res - n, m, wl = len(s), len(words), len(words[0]) - maps, cur_map = {}, {} - maps = collections.Counter(words) - for i in range(wl): - count, start, r = 0, i, i - while r + wl <= n: - string = s[r:r+wl] - if string in maps: - cur_map[string] = cur_map.get(string, 0) + 1 - if cur_map[string] <= maps[string]: - count += 1 - while cur_map[string] > maps[string]: - tmp = s[start:start+wl] - cur_map[tmp] -= 1 - start += wl - if cur_map[tmp] < maps[tmp]: - count -= 1 - if count == m: - res.append(start) - tmp = s[start:start+wl] - cur_map[tmp] -= 1 - start += wl - count -= 1 - else: - cur_map = {} - count = 0 - start = r + wl - r += wl - cur_map = {} - return res - - -``` diff --git "a/docs/Leetcode_Solutions/C++/031._next_permutation \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/031._next_permutation \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 69d810cb1..000000000 --- "a/docs/Leetcode_Solutions/C++/031._next_permutation \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,103 +0,0 @@ - -### 31. Next Permutation - - -题目: - - - -难度: - -Medium - -参照wikipedia: - - - -首先,关于什么是全排列不做解释。如果一个排列为A,下一个排列为A_NEXT,那么A_NEXT一定与A有尽可能长的公共前缀。 - -看具体例子,一个排列为124653,如何找到它的下一个排列,因为下一个排列一定与124653有尽可能长的前缀,所以,脑洞大开一下,从后面往前看这个序列,如果后面的若干个数字有下一个排列,问题就得到了解决。 - -第一步:找最后面1个数字的下一个全排列。 - -124653,显然最后1个数字3不具有下一个全排列。 - -第二步:找最后面2个数字的下一个全排列。 - -124653,显然最后2个数字53不具有下一个全排列。 - -第三步:找最后面3个数字的下一个全排列。 - -124653,显然最后3个数字653不具有下一个全排列。 - - -------插曲:到这里相信大家已经看出来,如果一个序列是递减的,那么它不具有下一个排列。 - - -第四步:找最后面4个数字的下一个全排列。 - -124653,我们发现显然最后4个数字4653具有下一个全排列。因为它不是递减的,例如6453,5643这些排列都在4653的后面。 - - -我们总结上面的操作,并总结出重复上面操作的两种终止情况: - -1:从后向前比较相邻的两个元素,直到前一个元素小于后一个元素,停止 - -2:如果已经没有了前一个元素,则说明这个排列是递减的,所以这个排列是没有下一个排列的。 - - -124653这个排列终止情况是上面介绍的第一种,从后向前比较相邻的2个元素,遇到4<6的情况停止。 - -并且我们可以知道: - -1:124653和它的下一个排列的公共前缀为12(因为4653存在下一个排列,所以前面的数字12保持不变) - -2:4后面的元素是递减的(上面介绍的终止条件是前一个元素小于后一个元素,这里是4<6) - - -现在,我们开始考虑如何找到4653的下个排列,首先明确4后面的几个数字中至少有一个大于4. - -4肯定要和653这3个数字中大于4的数字中(6,5)的某一个进行交换。这里就是4要和6,5中的某一个交换,很明显要和5交换,如果找到这样的元素呢,因为我们知道4后面的元素是递减的,所以在653中从后面往前查找,找到第一个大于4的数字,这就是需要和4进行交换的数字。这里我们找到了5,交换之后得到的临时序列为5643.,交换后得到的643也是一个递减序列。 - - -所以得到的4653的下一个临时序列为5643,但是既然前面数字变大了(4653--->5643),后面的自然要变为升序才行,变换5643得到5346. - -所以124653的下一个序列为125346. - -看一个permutation,比如 - -125430 - - -- 从末尾开始,找到decreasing subsequence,5430,因为来调5330无论怎么调,都不可能有比它更小的,数也被自然的分成两部分(1,2) 和 (5,4,3,0) -- 下一步是找这个sequence里面第一个比前面部分,比2大的,3,也很容易理解,因为下一个必定是(1,3)打头 -- 交换 3和2 ,变成 (1,3,5,4,2,0),再把后面的部分reverse,得到后面部分可得到的最小的 - -这个时候,得到下一个sequence 130245 - -AC 代码 - -```python -class Solution(object): - def nextPermutation(self, nums): - """ - :type nums: List[int] - :rtype: void Do not return anything, modify nums in-place instead. - """ - if len(nums) <= 1: - return - idx = 0 - for i in range(len(nums)-1, 0, -1): - if nums[i] > nums[i-1]: # find first number which is smaller than it's after number - idx = i - break - if idx != 0: # if the number exist,which means that the nums not like{5,4,3,2,1} - for i in range(len(nums)-1, idx-1, -1): - if nums[i] > nums[idx-1]: - nums[i], nums[idx-1] = nums[idx-1], nums[i] - break - - nums[idx:] = nums[idx:][::-1] -``` - - diff --git "a/docs/Leetcode_Solutions/C++/033._search_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/033._search_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index c2e6eb74c..000000000 --- "a/docs/Leetcode_Solutions/C++/033._search_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,53 +0,0 @@ -### 33. Search in Rotated Sorted Array - -题目: - - - -难度: -Medium - - -思路: - - - -下面是rotated-array图解, - -![rotated-array图解](https://github.com/Lisanaaa/myTODOs/blob/master/rotated-array12:09:2017.jpg) - - -所以直接用二分,O(lg(n)) -- 如果是mid,return mid -- 如果mid在绿色线上,就对绿色线进行二分 -- 如果mid在红色线上,就对红色线进行二分 -- 都没找到,return -1 - - -```python -class Solution(object): - def search(self, nums, target): - """ - :type nums: List[int] - :type target: int - :rtype: int - """ - l, r = 0, len(nums) - 1 - while l <= r: - mid = l + ((r - l) >> 2) - if nums[mid] == target: - return mid - if nums[mid] < nums[r]: - if nums[mid] < target <= nums[r]: - l = mid + 1 - else: - r = mid - 1 - else: - if nums[l] <= target < nums[mid]: - r = mid - 1 - else: - l = mid + 1 - return -1 -``` - - diff --git "a/docs/Leetcode_Solutions/C++/034._Search for a Range \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/034._Search for a Range \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e5a7048b1..000000000 --- "a/docs/Leetcode_Solutions/C++/034._Search for a Range \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,77 +0,0 @@ -### 34. Search for a Range - - - -题目: - - https://leetcode.com/problems/search-for-a-range/ - - - -难度 : Medium - - - -思路: - -二分法,先找```target```出现的左边界,判断是否有```target```后再判断右边界 - -- 找左边界:二分,找到一个```index``` - - 该```index```对应的值为```target``` - - 并且它左边```index-1```对应的值不是```target```(如果```index```为```0```则不需要判断此条件) - - 如果存在```index```就将其```append```到```res```中 -- 判断此时```res```是否为空,如果为空,说明压根不存在```target```,返回```[-1, -1]``` -- 找右边界:二分,找到一个```index```(但是此时用于二分循环的```l```可以保持不变,```r```重置为```len(nums)-1```,这样程序可以更快一些) - - 该```index```对应的值为```target``` - - 并且它右边```index+1```对应的值不是```target```(如果```index```为```len(nums)-1```则不需要判断此条件) - - 如果存在```index```就将其```append```到```res```中 - - - -AC 代码 - - - - -```python -class Solution(object): - def searchRange(self, nums, target): - """ - :type nums: List[int] - :type target: int - :rtype: List[int] - """ - if not nums : return [-1, -1] - - res = [] - l, r = 0, len(nums)-1 - # search for left bound - while l <= r: - mid = l + ((r - l) >> 2) - if nums[mid] == target and (mid == 0 or nums[mid-1] != target): - res.append(mid) - break - if nums[mid] < target: - l = mid + 1 - else: - r = mid - 1 - if not res: - return [-1, -1] - # search for right bound - r = len(nums)-1 - while l <= r: - mid = l + ((r - l) >> 2) - if nums[mid] == target and (mid == len(nums)-1 or nums[mid+1] != target): - res.append(mid) - break - if nums[mid] > target: - r = mid - 1 - else: - l = mid + 1 - return res -``` - - - - - diff --git "a/docs/Leetcode_Solutions/C++/035._search_insert_position \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/035._search_insert_position \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 1b14c88ce..000000000 --- "a/docs/Leetcode_Solutions/C++/035._search_insert_position \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,48 +0,0 @@ -### 35. Search Insert Position - -题目: - - - -难度: - -Medium - -找到第一个比```target```大的值的```index```,如果没找到则返回```len(nums)```,但是代码中直接返回```i```值就行了 - -### 思路一:暴力 - -```python -class Solution(object): - def searchInsert(self, nums, target): - """ - :type nums: List[int] - :type target: int - :rtype: int - """ - i = 0 - while nums[i] < target: - i += 1 - if i == len(nums): - return i - return i -``` -### 思路二:二分 - -```python -class Solution(object): - def searchInsert(self, nums, target): - """ - :type nums: List[int] - :type target: int - :rtype: int - """ - left, right = 0, len(nums) - 1 - while left <= right: - mid = left + ((right - left) >> 2) - if nums[mid] < target: - left = mid + 1 - else: - right = mid - 1 - return left -``` diff --git "a/docs/Leetcode_Solutions/C++/038._Count_and_Say \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/038._Count_and_Say \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index c735ca188..000000000 --- "a/docs/Leetcode_Solutions/C++/038._Count_and_Say \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,98 +0,0 @@ -### 38. Count and Say - -题目: - - - -难度: - -Easy - - -思路 - - -1. i代表字符下标,从0开始取值,也就是从第一个字符开始,因为要让i取到最后一个字符,并且后面还要进行i+1的操作,所以将原字符串随意加上一个‘*’字符防止溢出 -2. count代表此时已经连续相同的字符个数 -3. res代表最终输出的字符串 - -- 只要i下标对应的字符等于下一个字符,则sum和i都加1,无限循环 -- 如果i下标对应的字符不等于下一个字符了,则res应该加上str(sum)和i下标对应的那个字符,并且i加1,sum复原回0 - -``` -Examples of nth sequence - - 1. 1 - 2. 11 - 3. 21 - 4. 1211 - 5. 111221 - 6. 312211 - 7. 13112221 - 8. 1113213211 - 9. 31131211131221 - 10. 13211311123113112211 - -``` -```python -解法1 -class Solution(object): - def countAndSay(self, n): - """ - :type n: int - :rtype: str - """ - if n == 1: - return '1' - s = self.countAndSay(n-1) + '*' - res, count = '', 1 - for i in range(len(s)-1): - if s[i] == s[i+1]: - count += 1 - else: - res += str(count) + str(s[i]) - count = 1 - return res -``` -```python -解法2 -class Solution(object): - def countAndSay(self, n): - """ - :type n: int - :rtype: str - """ - res = '1' - for i in range(n-1): - res = ''.join([str(len(list(group))) + digit for digit, group in itertools.groupby(res)]) - return res -``` -详见[python进阶-ITERTOOLS模块小结](http://www.wklken.me/posts/2013/08/20/python-extra-itertools.html#itertoolsgroupbyiterable-key) - -```java -解法3 -class Solution { - public String countAndSay(int n) { - if(n == 1){ - return "1"; - } - //递归调用,然后对字符串处理 - String str = countAndSay(n-1) + "*";//为了str末尾的标记,方便循环读数 - char[] c = str.toCharArray(); - int count = 1; - String s = ""; - for(int i = 0; i < c.length - 1;i++){ - if(c[i] == c[i+1]){ - count++;//计数增加 - }else{ - s = s + count + c[i];//上面的*标记这里方便统一处理 - count = 1;//初始化 - } - } - return s; - - } -} -``` - - diff --git "a/docs/Leetcode_Solutions/C++/039._combination_sum \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/039._combination_sum \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b5579c25d..000000000 --- "a/docs/Leetcode_Solutions/C++/039._combination_sum \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,64 +0,0 @@ -### 39. Combination Sum - -题目: - - - - -难度: - -Medium - - -最初的思路: - - -``` -res = [] -def combSum(candidates, target, valueList): - if target == 0: - res.append(valueList) - for candidate in candidates: - if candidate > target: - return - combSum(candidates, target - candidate, valueList + [candidate] ) - -``` - - -问题在于,有重复: - -``` -combSum([2,3,6,7],7,[]) - -res -Out[9]: [[2, 2, 3], [2, 3, 2], [3, 2, 2], [7]] -``` - -然后看了hint,除[2, 2, 3] 和 [2, 3, 2]这种重复的方式是, 把candidates先sort,然后用index的方式来处理。 - - -所以最终的除重大法如下,根据hint做出: - -```python -class Solution(object): - def combinationSum(self, candidates, target): - """ - :type candidates: List[int] - :type target: int - :rtype: List[List[int]] - """ - def dfs(remain, combo, index): - if remain == 0: - res.append(combo) - return - for i in range(index, len(candidates)): - if candidates[i] > remain: - break - dfs(remain - candidates[i], combo + [candidates[i]], i) - candidates = list(set(candidates)) - candidates.sort() - res = [] - dfs(target, [], 0) - return res -``` diff --git "a/docs/Leetcode_Solutions/C++/040._combination_sum_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/040._combination_sum_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 7abb448f3..000000000 --- "a/docs/Leetcode_Solutions/C++/040._combination_sum_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,39 +0,0 @@ -### 40. Combination Sum II - -题目: - - - - -难度: - -Medium - - -Combination Sum 已经AC,做了minor change. -- 现在不需要```set```化```candidates```了 -- 但是递归的时候```index```要从```i+1```开始了 -- 要判断```combo not in res```才```append```到```res```中去 - -```python -class Solution(object): - def combinationSum2(self, candidates, target): - """ - :type candidates: List[int] - :type target: int - :rtype: List[List[int]] - """ - def dfs(remain, combo, index): - if remain == 0 and combo not in res: - res.append(combo) - return - for i in range(index, len(candidates)): - if candidates[i] > remain: - break - dfs(remain - candidates[i], combo + [candidates[i]], i+1) - candidates.sort() - res = [] - dfs(target, [], 0) - return res - -``` diff --git "a/docs/Leetcode_Solutions/C++/042._trapping_rain_water \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/042._trapping_rain_water \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 17e03b9ea..000000000 --- "a/docs/Leetcode_Solutions/C++/042._trapping_rain_water \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,39 +0,0 @@ -### 42. Trapping Rain Water - - - -题目: - - - -难度: -Hard - -思路: - -题目有几个特性可用,bar width = 1,然后第一个和最后一个是不能trap water,其次中间的部分能trap多少水是看`左右高度差较低的那个 - 本身的高度` - -The basic idea is that we set two pointers ```l``` and ```r``` to the left and right end of ```height```. Then we get the minimum height (```min_height```) of these pointers (similar to Container with Most Water due to the Leaking Bucket Effect) since the level of the water cannot be higher than it. Then we move the two pointers towards the center. If the coming level is less than ```min_height```, then it will hold some water. Fill the water until we meet some “barrier” (with height larger than ```min_height```) and update ```l``` and ```r``` to repeat this process in a new interval. - -AC代码: - - -```python -class Solution(object): - def trap(self, height): - """ - :type height: List[int] - :rtype: int - """ - l, r, water, min_height = 0, len(height) - 1, 0, 0 - while l < r: - min_height = min(height[l], height[r]) - while l < r and height[l] <= min_height: - water += min_height - height[l] - l += 1 - while l < r and height[r] <= min_height: - water += min_height - height[r] - r -= 1 - return water - -``` diff --git "a/docs/Leetcode_Solutions/C++/043._multiply_strings \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/043._multiply_strings \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 461c8ee91..000000000 --- "a/docs/Leetcode_Solutions/C++/043._multiply_strings \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,81 +0,0 @@ -###43. Multiply Strings - -题目: - - - -难度: - -Medium - - -思路: - -虽然写了一堆similar problems,拿到的时候也算有思路,但是还是觉得很难写 - -参考了别人的思路: - -1. m位的数字乘以n位的数字的结果最大为m+n位: -999*99 < 1000*100 = 100000,最多为3+2 = 5位数。 -2. 先将字符串逆序便于从最低位开始计算。 - - -觉得这样写才是最容易理解的,看一个具体的🌰: - -``` -123 * 456 - - 123 - * 456 - - -先把每一位拿来相乘:得到 - 1 2 3 - 4 5 6 - - 6 12 18 - 5 10 15 - 4 8 12 - -这样在全部加起来和做进位处理 - 5 6 0 8 8 - - -``` - - - - -``` -class Solution(object): - def multiply(self, num1, num2): - """ - :type num1: str - :type num2: str - :rtype: str - """ - if num1 == '0' or num2 == '0' : return '0' - len1,len2 = len(num1),len(num2) - - num1 = num1[::-1] - num2 = num2[::-1] - # 99 * 99 < 10000, maxmize 4 digit - arr = [0 for i in range(len1 + len2)] - - for i in xrange(len1): - for j in xrange(len2): - arr[i+j] += (ord(num1[i]) - ord('0')) * (ord(num2[j]) - ord('0')) - - - res = [0 for i in range(len1 + len2)] - - for i in range(len(arr)): - res[i] = arr[i] % 10 - if i < len(arr) - 1: - arr[i+1] += arr[i]/10 - - i = len(arr)-1 - if res[i] == 0: - i -= 1 - return ''.join(str(j) for j in res[:i+1][::-1]) -``` diff --git "a/docs/Leetcode_Solutions/C++/044._wildcard_matching \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/044._wildcard_matching \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e7d2755a0..000000000 --- "a/docs/Leetcode_Solutions/C++/044._wildcard_matching \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,44 +0,0 @@ -###44. Wildcard Matching - -题目: - - - -难度: - -Hard - - - -做完Regular Expression Matching来做的这道题,按照DP思路run一下是超时,感觉是开心的,至少暂时没有报错了,有待优化,应该在dp的同时在贪心一下么。 - - - -超时代码 -``` -class Solution(object): - def isMatch(self, s, p): - """ - :type s: str - :type p: str - :rtype: bool - """ - m, n = len(s), len(p) - dp = [ [0 for i in xrange(n+1)] for j in xrange(m+1)] - - dp[0][0] = 1 - - # init the first line - for i in xrange(1,n+1): - if p[i-1] == '*': - dp[0][i] = dp[0][i-1] - - for i in xrange(1,m+1): - for j in xrange(1,n+1): - if p[j-1] == s[i-1] or p[j-1] == '?': - dp[i][j] = dp[i-1][j-1] - elif p[j-1] == '*': - dp[i][j] = dp[i][j-1] or dp[i-1][j] - - return dp[m][n] == 1 -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/045._Jump_Game_II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/045._Jump_Game_II \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index ae8caf9a1..000000000 --- "a/docs/Leetcode_Solutions/C++/045._Jump_Game_II \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,43 +0,0 @@ -### 45. Jump Game II - -题目: - - - -难度: - -Easy - - -思路 - -greedy solution, the current jump is ```[i, cur_end]```, and the ```cur_farthest``` is the farthest point -that all of point in ```[i, cur_end]``` can reach, whenever ```cur_farthest``` is larger than the last point' index, -return current ```jump+1```; whenever ```i``` reaches ```cur_end```, update ```cur_end``` to ```current cur_farthest```. -- Time: O(log(n)) -- Space: O(1) - -```python -class Solution(object): - def jump(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - # Note You can assume that you can always reach the last index. - cur_end, cur_farthest, step, n = 0, 0, 0, len(nums) - for i in range(n-1): - cur_farthest = max(cur_farthest, i + nums[i]) - if cur_farthest >= n - 1: - step += 1 - break - if i == cur_end: - cur_end = cur_farthest - step += 1 - return step - - - -``` - - diff --git "a/docs/Leetcode_Solutions/C++/046._permutations \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/046._permutations \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a79e7c67c..000000000 --- "a/docs/Leetcode_Solutions/C++/046._permutations \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,138 +0,0 @@ -###46. Permutations - -题目: - - - -难度: - -Medium - - -复习了一下,自己写的容易理解版本: - -每次调一个放入现有 - -``` -class Solution(object): - def permute(self, nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - self.result = [] - self.recPermute([],nums) - return self.result - - def recPermute(self, sofar, rest): - if rest == []: - self.result.append(sofar) - else: - for i in range(len(rest)): - next = sofar + [rest[i]] - remaining = rest[:i] + rest[i+1:] - self.recPermute(next, remaining) -``` - -交换 - - - -``` -class Solution(object): - def permute(self, nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - result = [] - self.helper(nums,0,result) - return result - - def helper(self,nums,begin,result): - n = len(nums) - if begin == n: - tmp = nums[:] - result.append(tmp) - return - - for i in range(begin,n): - nums[begin], nums[i] = nums[i],nums[begin] - self.helper(nums,begin+1,result) - nums[begin],nums[i] = nums[i],nums[begin] - -``` - - - - - - -好像还有一个巧妙的版本 - - -``` -class Solution: - # @param num, a list of integer - # @return a list of lists of integers - def permute(self, num): - if len(num) == 0: return [] - if len(num) == 1: return [num] - res = [] - for i in range(len(num)): - for j in self.permute(num[:i] + num[i+1:]): - res.append([num[i]] + j) - return res -``` - - -更容易理解的写法: - - -``` -class Solution: - # @param num, a list of integer - # @return a list of lists of integers - def permute(self, num): - if len(num) == 0: return [] - if len(num) == 1: return [num] - res = [] - for i in range(len(num)): - x = num[i] - xs = num[:i] + num[i+1:] - for j in self.permute(xs): - res.append([x] + j) - return res - -``` - -就是一定要有递归的信念❤️ - - - -还有介绍的基本无memory使用的算法: - - -``` -class Solution: - # @param num, a list of integer - # @return a list of lists of integers - def permute(self, num): - if len(num) == 0: yield [] - if len(num) == 1: yield [num] - res = [] - for i in range(len(num)): - x = num[i] - xs = num[:i] + num[i+1:] - for j in self.permute(xs): - res.append([x] + j) - yield res - -``` - -但是这个yield只是生产generator,要看结果还是要用for in的。 - - - - - diff --git "a/docs/Leetcode_Solutions/C++/047._permutations_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/047._permutations_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 68a3ead84..000000000 --- "a/docs/Leetcode_Solutions/C++/047._permutations_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,42 +0,0 @@ -###47. Permutations II - -题目: - - - -难度: - -Medium - - -虽然想到了,但是没有靠自己的力量implement出来,还是比较容易了理解的,因为如果有重复的,那么处理只用处理第一个,就只用把第一个提出来,剩下的管它怎么permute。 - -第二次碰到这个元素就不要再用它了,因为可能出现的组合已经有了。 - - -看代码: -base case 处理掉 -sort一下,设置一个prevNum变量 - -如果碰到过了,就continue,去继续执行下一个 - - -``` -class Solution(object): - def permuteUnique(self, nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - if len(nums) == 0: return [] - if len(nums) == 1: return [nums] - res = [] - nums.sort() - for i in range(len(nums)): - if i > 0 and nums[i] == nums[i-1]: continue - for j in self.permuteUnique(nums[:i] + nums[i+1:]): - res.append([nums[i]] + j) - return res -``` - - diff --git "a/docs/Leetcode_Solutions/C++/048._rotate_image \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/048._rotate_image \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 5c727dd7c..000000000 --- "a/docs/Leetcode_Solutions/C++/048._rotate_image \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,105 +0,0 @@ -### 48. Rotate Image - - -题目: - - - -难度: - -Medium - - - - -思路一: - - -先将矩阵上下翻转,然后将矩阵中心对称翻转,即可实现顺时针90度旋转。 - - -- 上下翻转规律 [i][:] --> [n-1-i][:] -- 对角线变换的规律是 [i][j] --> [j][i] - - -例如: -``` -1 1 1 3 3 3 3 2 1 -2 2 2 -> 2 2 2 -> 3 2 1 -3 3 3 1 1 1 3 2 1 -``` - - -```python -class Solution(object): - def rotate(self, matrix): - """ - :type matrix: List[List[int]] - :rtype: void Do not return anything, modify matrix in-place instead. - """ - n = len(matrix) - # 上下翻转 - for i in range(n/2): - matrix[i], matrix[n-1-i] = matrix[n-1-i], matrix[i] - # 主对角线翻转 - for i in range(n): - for j in range(i+1,n): - matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j] -``` - - -思路二: - -参考这里 - - - -找规律,一次完成四个数的该有的变换 - -``` - -1 2 3 4 5 - -6 7 8 9 10 - -11 12 13 14 15 - -16 17 18 19 20 - -21 22 23 24 25 - -``` - -在思路一的解法下观察得出,每个元素的变换是 [x][y] -> [n-1-x][y] -> [y][n-1-x] -> [n-1-y][x] - - -```python -class Solution(object): - def rotate(self, matrix): - """ - :type matrix: List[List[int]] - :rtype: void Do not return anything, modify matrix in-place instead. - """ - n = len(matrix) - for i in range(n/2): - for j in range(n-n/2): - matrix[i][j], matrix[~j][i], matrix[~i][~j], matrix[j][~i] = \ - matrix[~j][i], matrix[~i][~j], matrix[j][~i], matrix[i][j] -``` -这里的```[~i]``` 意思就是 ```[n-1-i]``` - -思路三: - -直接用zip函数,一行, 😂 - -```python -class Solution: - def rotate(self, A): - A[:] = zip(*A[::-1]) - # A[:] = map(list, zip(*A[::-1])) -``` - - - - - diff --git "a/docs/Leetcode_Solutions/C++/049._group_anagrams_python \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/049._group_anagrams_python \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 1371afdb4..000000000 --- "a/docs/Leetcode_Solutions/C++/049._group_anagrams_python \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,28 +0,0 @@ -### 49. Group Anagrams python - -题目: - - - -难度 : Medium - -python大法好 - - -```python -class Solution(object): - def groupAnagrams(self, strs): - """ - :type strs: List[str] - :rtype: List[List[str]] - """ - mapx = {} - for i in strs: - x = ''.join(sorted(list(i))) - if x in mapx: - mapx[x].append(i) - else: - mapx[x] = [i] - return mapx.values() - -``` diff --git "a/docs/Leetcode_Solutions/C++/050._pow(x,_n) \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/050._pow(x,_n) \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 697863e2f..000000000 --- "a/docs/Leetcode_Solutions/C++/050._pow(x,_n) \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,48 +0,0 @@ -### 50. Pow(x, n) - -题目: - - - -难度: - -Medium - - -Recursive - -```python -class Solution(object): - def myPow(self, x, n): - """ - :type x: float - :type n: int - :rtype: float - """ - if n == 0: - return 1 - if n < 0: - return 1 / self.myPow(x, -n) - if n % 2 == 0: - return self.myPow(x*x, n/2) - else: - return x * self.myPow(x*x, n/2) - -``` -iterative - - -```python -class Solution: - def myPow(self, x, n): - if n < 0: - x = 1 / x - n = -n - pow = 1 - while n: - if n & 1: - pow *= x - x *= x - n >>= 1 - return pow -``` diff --git "a/docs/Leetcode_Solutions/C++/051._n-queens \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/051._n-queens \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 3e7c197c3..000000000 --- "a/docs/Leetcode_Solutions/C++/051._n-queens \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,38 +0,0 @@ -### 51. N-Queens - -题目: - - - -难度: -Hard - -八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当n = 1或n ≥ 4时问题有解[1]。 - -对于任意(x,y),如果要让新的点和它不能处于同一条横行、纵行或斜线上,则新点(p,q)必须要满足p+q != x+y 和p-q!= x-y, 前者针对左下右上斜线,后者针对左上右下斜线,两者同时都保证了不在同一条横行和纵行上。 - -代码中变量的含义: -- col_per_row: 每一行皇后的column位置组成的列表 -- cur_row:目前正在判断的row的index -- xy_diff:所有x-y组成的列表 -- xy_sum:所有x+y组成的列表 - -```python -class Solution(object): - def solveNQueens(self, n): - """ - :type n: int - :rtype: List[List[str]] - """ - def dfs(col_per_row, xy_diff, xy_sum): - cur_row = len(col_per_row) - if cur_row == n: - ress.append(col_per_row) - for col in range(n): - if col not in col_per_row and cur_row-col not in xy_diff and cur_row+col not in xy_sum: - dfs(col_per_row+[col], xy_diff+[cur_row-col], xy_sum+[cur_row+col]) - ress = [] - dfs([], [], []) - return [['.'*i + 'Q' + '.'*(n-i-1) for i in res] for res in ress] - -``` diff --git "a/docs/Leetcode_Solutions/C++/052._n-queens_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/052._n-queens_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 1d65adc16..000000000 --- "a/docs/Leetcode_Solutions/C++/052._n-queens_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,46 +0,0 @@ -### 52. N-Queens II - -题目: - - - -难度: -Hard - -思路参见recursion & backtracking - -n queens还是属于比较难的,需要花时间吃透的问题 - -八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当n = 1或n ≥ 4时问题有解[1]。 - -对于任意(x,y),如果要让新的点和它不能处于同一条横行、纵行或斜线上,则新点(p,q)必须要满足p+q != x+y 和p-q!= x-y, 前者针对左下右上斜线,后者针对左上右下斜线,两者同时都保证了不在同一条横行和纵行上。 - -代码中变量的含义: -- col_per_row: 每一行皇后的column位置组成的列表 -- cur_row:目前正在判断的row的index -- xy_diff:所有x-y组成的列表 -- xy_sum:所有x+y组成的列表 - -```python -class Solution(object): - def totalNQueens(self, n): - """ - :type n: int - :rtype: int - """ - def dfs(col_per_row, xy_diff, xy_sum): - cur_row = len(col_per_row) - if cur_row == n: - ress.append(col_per_row) - for col in range(n): - if col not in col_per_row and cur_row-col not in xy_diff and cur_row+col not in xy_sum: - dfs(col_per_row+[col], xy_diff+[cur_row-col], xy_sum+[cur_row+col]) - ress = [] - dfs([], [], []) - return len(ress) - -``` - - - - diff --git "a/docs/Leetcode_Solutions/C++/053._maximum_subarray \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/053._maximum_subarray \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e71c549d1..000000000 --- "a/docs/Leetcode_Solutions/C++/053._maximum_subarray \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,146 +0,0 @@ -### 53. Maximum Subarray - -题目: - - - -难度: -Medium - - -思路一: - -O(N^2) - -从i开始,计算i到n,存比较大的sum,会超时 - -``` -class Solution(object): - def maxSubArray(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - n = len(nums) - m = float('-inf') - for i in range(n): - s = 0 - for j in range(i,n): - s = s + nums[j] - m = max(m,s) - return m -``` - -思路二: - -动归 - -ms(i) = max(ms[i-1]+ a[i],a[i]) - -到i处的最大值两个可能,一个是加上a[i],另一个从a[i]起头,重新开始。可以AC - -```python -class Solution(object): - def maxSubArray(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - n = len(nums) - maxSum = [nums[0] for i in range(n)] - for i in range(1,n): - maxSum[i] = max(maxSum[i-1] + nums[i], nums[i]) - return max(maxSum) -``` - - -思路三: - - -Kadane’s Algorithm wikipedia可以查到,然后一般的是负的可以还回0,这里需要稍作修改,参考 - - - - -``` -start: - max_so_far = a[0] - max_ending_here = a[0] - -loop i= 1 to n - (i) max_end_here = Max(arrA[i], max_end_here+a[i]); - (ii) max_so_far = Max(max_so_far,max_end_here); - -return max_so_far - -``` - -AC代码: - -```python -class Solution(object): - def maxSubArray(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - n = len(nums) - maxSum , maxEnd = nums[0], nums[0] - - for i in range(1,n): - maxEnd = max(nums[i],maxEnd + nums[i]) - maxSum = max(maxEnd,maxSum) - return maxSum -``` - - -思路四: - - - -参见clrs 第71页,用divide and conquer,有伪码 - - -最大的subarray sum有三个可能,左半段或者右半段,或者跨越左右半段, - -速度比较慢,AC代码,复杂度O(NlogN) - -``` -class Solution(object): - def maxSubArray(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - def find_max_crossing_subarray(nums, low, mid, high): - left_sum = float('-inf') - sum = 0 - for i in xrange(mid,low-1,-1): - sum = sum + nums[i] - if sum > left_sum: - left_sum = sum - - right_sum = float('-inf') - sum = 0 - for j in range(mid+1,high+1): - sum = sum + nums[j] - if sum > right_sum: - right_sum = sum - - return left_sum + right_sum - - def find_max_subarray(nums,low,high): - if low == high: - return nums[low] - else: - mid = (low + high) / 2 - left_sum = find_max_subarray(nums, low, mid) - right_sum = find_max_subarray(nums,mid+1,high) - cross_sum = find_max_crossing_subarray(nums,low,mid,high) - # print left_sum, right_sum, cross_sum - # print mid, low, high - return max(left_sum, right_sum, cross_sum) - - return find_max_subarray(nums, 0, len(nums)-1) - -``` diff --git "a/docs/Leetcode_Solutions/C++/054._spiral_matrix \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/054._spiral_matrix \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index ca2219ec1..000000000 --- "a/docs/Leetcode_Solutions/C++/054._spiral_matrix \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,139 +0,0 @@ -### 54. Spiral Matrix - -题目: - - - -难度: -Medium - - -参考别人的代码,一开始觉得很有递归性,根据奇偶不同来写,递归太难写。 - -然后想到了loop,再想,可能有更优trick,事实证明并没有。 - -用四个变量来控制边界,然后因为方向总是:→↓←↑ 左右下上 - - - - -```python -class Solution(object): - def spiralOrder(self, matrix): - """ - :type matrix: List[List[int]] - :rtype: List[int] - """ - if matrix == [] : return [] - res = [] - maxUp = maxLeft = 0 - maxDown = len(matrix) - 1 - maxRight = len(matrix[0]) - 1 - direction = 0 # 0 go right, 1 go down, 2 go left, 3 up - while True: - if direction == 0: #go right - for i in range(maxLeft, maxRight+1): - res.append(matrix[maxUp][i]) - maxUp += 1 - elif direction == 1: # go down - for i in range(maxUp, maxDown+1): - res.append(matrix[i][maxRight]) - maxRight -= 1 - elif direction == 2: # go left - for i in reversed(range(maxLeft, maxRight+1)): - res.append(matrix[maxDown][i]) - maxDown -= 1 - else: #go up - for i in reversed(range(maxUp, maxDown+1)): - res.append(matrix[i][maxLeft]) - maxLeft +=1 - if maxUp > maxDown or maxLeft > maxRight: - return res - direction = (direction + 1 ) % 4 -``` - -以上的写法非常精妙,看看我自己用同样的思路写的|||| - -```python -class Solution(object): - def spiralOrder(self, matrix): - """ - :type matrix: List[List[int]] - :rtype: List[int] - """ - if len(matrix) == 0 : return [] - - left = 0 - up = 0 - down = len(matrix) - 1 - right = len(matrix[0]) -1 - - # 0 -> right, 1 -> down, 2-> left, 3 -> up - direction = 0 - - # start location - x, y = 0,0 - res = [] - - while True: - if left > right or up > down: - return res - - if direction == 0 : - while y <= right: - res.append(matrix[up][y]) - y += 1 - up += 1 - x = up - direction = 1 - continue - - if direction == 1: - while x <= down: - res.append(matrix[x][right]) - x += 1 - right -= 1 - y = right - direction = 2 - continue - - if direction == 2: - while y >= left: - res.append(matrix[down][y]) - y -= 1 - down -= 1 - x = down - direction = 3 - continue - - if direction == 3: - while x >= up: - res.append(matrix[x][left]) - x -= 1 - left += 1 - y = left - direction = 0 - continue - -``` - -明显别人的代码写的更精妙,因为这里两个boundary都很明确,所以用for in range就能很好的解决问题了. - - - - - ------------ - -最后放一个无敌一行,怕你看完不想看上面的代码了 -```python -class Solution(object): - def spiralOrder(self, matrix): - """ - :type matrix: List[List[int]] - :rtype: List[int] - """ - return matrix and list(matrix.pop(0)) + self.spiralOrder(zip(*matrix)[::-1]) -``` - -oh, my god! diff --git "a/docs/Leetcode_Solutions/C++/055._jump_game \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/055._jump_game \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 1de4f1d02..000000000 --- "a/docs/Leetcode_Solutions/C++/055._jump_game \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,39 +0,0 @@ -### 55. Jump Game - -题目: - - - -难度: - -Medium - - -问题出现在一旦有0,而且这个0是不可跨过的那么无解,无法达到 - - -看了hint,根本不用这个数组,直接用一个数来记录可达最远距离,非常巧妙 - - -```python -class Solution(object): - def canJump(self, nums): - """ - :type nums: List[int] - :rtype: bool - """ - if not nums: - return True - if len(nums) == 1: - return True - n = len(nums) - idx, reach = 0, 0 - while idx < n-1 and idx <= reach: # idx <= reach是为了处理nums[idx] == 0的情况,若idx>reach说明已经失败了 - reach = max(reach, idx+nums[idx]) - idx += 1 - return reach >= n-1 -``` - -idx记录当前loop位置,reach记录当前可到位置 - -注意这里的while循环的条件是 `idx < n-1 and idx <= reach`,之所以加上 `idx <= reach` 是因为如果```idx > reach```说明```idx```层不可达,其实也可以直接terminate. diff --git "a/docs/Leetcode_Solutions/C++/056._Merge_Intervals \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/056._Merge_Intervals \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 1f5ab7aa6..000000000 --- "a/docs/Leetcode_Solutions/C++/056._Merge_Intervals \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,31 +0,0 @@ -### 56. Merge Intervals - -题目: - - - -难度: - -Medium - - -Just go through the intervals sorted by start coordinate and -either combine the current interval with the previous one if they overlap, or add it to the output by itself if they don’t. - -```python -class Solution(object): - def merge(self, intervals): - """ - :type intervals: List[Interval] - :rtype: List[Interval] - """ - res = [] - for i in sorted(intervals, key = lambda i: i.start): - if res and i.start <= res[-1].end: - res[-1].end = max(i.end, res[-1].end) - else: - res.append(i) - return res -``` - - diff --git "a/docs/Leetcode_Solutions/C++/058._length_of_last_word \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/058._length_of_last_word \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b9ec0160c..000000000 --- "a/docs/Leetcode_Solutions/C++/058._length_of_last_word \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,45 +0,0 @@ -### 58. Length of Last Word - -题目: - - - -难度 : Easy - -我的解法: - -```python -class Solution(object): - def lengthOfLastWord(self, s): - """ - :type s: str - :rtype: int - """ - s = s[::-1].strip() - return s.find(' ') if s.find(' ') != -1 else len(s) -``` -作弊式做法 - -```python -class Solution(object): - def lengthOfLastWord(self, s): - """ - :type s: str - :rtype: int - """ - lst = s.split() - if len(lst) >= 1: - return len(lst[-1]) - return 0 -``` -split()方法最低可以分0组,split(' ')最低可以分1组 -```python -一行解法: -class Solution(object): - def lengthOfLastWord(self, s): - """ - :type s: str - :rtype: int - """ - return len(s.strip().split(" ")[-1]) -``` diff --git "a/docs/Leetcode_Solutions/C++/059._spiral_matrix_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/059._spiral_matrix_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 42ae52662..000000000 --- "a/docs/Leetcode_Solutions/C++/059._spiral_matrix_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,67 +0,0 @@ -### 59. Spiral Matrix II - -题目: - - - -难度: -Medium - -和Spiral Matrix的思路基本一致 - -也许还有待挖掘trick - - -```python -class Solution(object): - def generateMatrix(self,n): - """ - :type n: int - :rtype: List[List[int]] - """ - curNum = 0 - matrix = [[0 for i in range(n)] for j in range(n)] - maxUp = maxLeft = 0 - maxDown = maxRight = n - 1 - direction = 0 - while True: - if direction == 0: #go right - for i in range(maxLeft, maxRight+1): - curNum += 1 - matrix[maxUp][i] = curNum - maxUp += 1 - elif direction == 1: # go down - for i in range(maxUp, maxDown+1): - curNum += 1 - matrix[i][maxRight] = curNum - maxRight -= 1 - elif direction == 2: # go left - for i in reversed(range(maxLeft, maxRight+1)): - curNum += 1 - matrix[maxDown][i] = curNum - maxDown -= 1 - else: #go up - for i in reversed(range(maxUp, maxDown+1)): - curNum += 1 - matrix[i][maxLeft] = curNum - maxLeft +=1 - if curNum >= n*n: - return matrix - direction = (direction + 1 ) % 4 -``` - -Same idea with [spiral matrix I](https://github.com/Lisanaaa/thinking_in_lc/blob/master/054._spiral_matrix.md) -```python -class Solution(object): - def generateMatrix(self, n): - """ - :type n: int - :rtype: List[List[int]] - """ - res = [] - l = n * n + 1 - while l > 1: - l, r = l - len(res), l - res = [range(l, r)] + zip(*res[::-1]) - return res -``` diff --git "a/docs/Leetcode_Solutions/C++/060._permutation_sequence \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/060._permutation_sequence \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 81935e253..000000000 --- "a/docs/Leetcode_Solutions/C++/060._permutation_sequence \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,93 +0,0 @@ -###60. Permutation Sequence - -题目: - - - -难度: - -Medium - - - -偷懒,用46的方法,会超时 - -``` - -class Solution(object): - def getPermutation(self, n, k): - """ - :type n: int - :type k: int - :rtype: str - """ - self.result = [] - s = "" - for i in range(1, n+1): - s += str(i) - self.recPermute("",s,k) - return self.result[-1] - - - def recPermute(self, sofar, rest, k): - if rest == "": - if len(self.result) == k: - return - self.result.append(sofar) - else: - for i in xrange(len(rest)): - nnext = sofar + rest[i] - remaining = rest[:i] + rest[i+1:] - self.recPermute(nnext, remaining, k) -``` - - -然后其实有规律的,比如 - -``` -1 "123" -2 "132" -3 "213" -4 "231" -5 "312" -6 "321" -``` - -是第n个数 + 余下的n-1个数的permutation - - -k = 1 就是所有的顺序排列 -k = n! 是所有的逆序排列 - -对于余下的也是递归,比如 - - -k < (n-1)! 1 + (n-1)个数的全排列的第k个 -k < 2*(n-1)! 2 + (n-1)个数的顺序全排列的第k个 - - -发现思路对了,但是implement还有点困难. - -看了一个最为精妙的解法 - -``` -class Solution(object): - def getPermutation(self, n, k): - """ - :type n: int - :type k: int - :rtype: str - """ - seq, k, fact = '', k-1, math.factorial(n-1) - perm = [i for i in range(1, n+1)] - for i in reversed(xrange(n)): - curr = perm[k/fact] - seq += str(curr) - perm.remove(curr) - if i > 0: - k %= fact - fact /= i - return seq -``` - - diff --git "a/docs/Leetcode_Solutions/C++/061._rotate_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/061._rotate_list \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a26319d15..000000000 --- "a/docs/Leetcode_Solutions/C++/061._rotate_list \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,58 +0,0 @@ - -###61. Rotate List - - -题目: - - - -难度: - -Medium - -- k可能比list的size大,需要做一个取余准备 -- 计算list size的同时把tail也记录下来,方便之后把tail的next指向原本的head -- 利用之前的到末端的kth node - - -AC 代码 - -``` -class Solution(object): - def rotateRight(self, head, k): - if head == None or k == 0 : - return head - - cur = head - size = 1 - while cur.next: - size += 1 - cur = cur.next - - tail = cur - - k = k % size - - p = self.findKth(head,k) - - tail.next = head - head = p.next - p.next = None - return head - - def findKth(self,head, k): - dummy = ListNode(-1) - dummy.next = head - p = dummy - q = dummy - - for i in range(k): - q = q.next - - while q.next: - p = p.next - q = q.next - return p -``` - - diff --git "a/docs/Leetcode_Solutions/C++/064._minimum_path_sum \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/064._minimum_path_sum \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 591c171b5..000000000 --- "a/docs/Leetcode_Solutions/C++/064._minimum_path_sum \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,58 +0,0 @@ - -###64. Minimum Path Sum - -题目: - - - -难度: - -Medium - - - -非常明显的DP - -状态转移方程 - -dp[i][j] = gird[i][j] + min(dp[i-1][j], dp[i][j-1]) - - -然后注意一下边界的处理,一开始dp[0][0] = grid[0][0] - -第一行和第一列,之后开始全用状态转移方程 - - -``` -class Solution(object): - def minPathSum(self, grid): - """ - :type grid: List[List[int]] - :rtype: int - """ - m = len(grid) - n = len(grid[0]) if m else 0 - - dp = [[0 for i in range(n)] for i in range(m)] - - dp[0][0] = grid[0][0] - - # first row - for i in range(1,n): - dp[0][i] = grid[0][i] + dp[0][i-1] - - # first col - for i in range(1,m): - dp[i][0] = grid[i][0] + dp[i-1][0] - - - for i in range(1,m): - for j in range(1,n): - dp[i][j] = grid[i][j] + min(dp[i-1][j], dp[i][j-1]) - - - return dp[m-1][n-1] - - - -``` diff --git "a/docs/Leetcode_Solutions/C++/065.unique_paths_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/065.unique_paths_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 16e8e940c..000000000 --- "a/docs/Leetcode_Solutions/C++/065.unique_paths_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,84 +0,0 @@ - ###65.Unique Paths II - -题目: - - - - -tag : DP - -难度 : Medium - - - - - -``` -BASE CASE( i = 0 , j = 0): -//第一排和第一列,如果没有obstacle, 则走法为1, 一旦有了obstacle,则之后的格子走法都为0 - -非BASE CASE : -//一旦有obstacle,则dp为0 -dp(i, j) = dp(i,j-1) + dp(i-1,j) - -``` - -Python代码 - -``` -class Solution(object): - def uniquePathsWithObstacles(self, obstacleGrid): - """ - :type obstacleGrid: List[List[int]] - :rtype: int - """ - row = len(obstacleGrid) - col = len(obstacleGrid[0]) - dp = [[0 for i in range(col)] for j in range(row)] - - dp[0][0] = int(obstacleGrid[0][0] == 0) - - #first row - for j in range(1,col): - if obstacleGrid[0][j] == 1: - dp[0][j] = 0 - else: - dp[0][j] = dp[0][j-1] - #first col - for i in range(1,row): - if obstacleGrid[i][0] == 1: - dp[i][0] = 0 - else: - dp[i][0] = dp[i-1][0] - - for i in range(1,row): - for j in range(1,col): - if obstacleGrid[i][j] == 1: - dp[i][j] = 0 - else: - dp[i][j] = dp[i-1][j] + dp[i][j-1] - return dp[row-1][col-1] - -``` - -犯了一个错,简直觉得不可思议。一开始初始化dp用的代码是 - -``` -dp = [[0] * col] * row -``` - -问题在此: - - -``` ->>> x = [[]] * 3 ->>> x[1].append(0) ->>> x -[[0], [0], [0]] -``` - -这样初始化是做了三个一样的object. - -The problem is that they're all the same exact list in memory. When you use the [x]*n syntax, what you get is a list of n many x objects, but they're all references to the same object. They're not distinct instances, rather, just n references to the same instance. - -参见stackoverflow : diff --git "a/docs/Leetcode_Solutions/C++/066._plus_one \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/066._plus_one \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 8897d3919..000000000 --- "a/docs/Leetcode_Solutions/C++/066._plus_one \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,60 +0,0 @@ -### 66. Plus One - -题目: - - - -难度 : Easy - - - - -这里是用的递归,很容易理解,如果空列表直接加1,最后一位小于9,那么直接就最后一位加1,否则添加一个0,然后再把余下的递归加1 - - -```python - -class Solution(object): - def plusOne(self, digits): - """ - :type digits: List[int] - :rtype: List[int] - """ - if digits == []: - return [1] - if digits[-1] < 9: - return digits[:-1] + [digits[-1] + 1] - else: - return self.plusOne(digits[:-1]) + [0] -``` - - -其实可以考虑循环,效率更高,参考[此处](https://shenjie1993.gitbooks.io/leetcode-python/content/066%20Plus%20One.html) - - - -> 从低位到高位,如果后一位有进位的话,那么该位要加上一,否则退出循环。如果最高位也进位,那么在列表前要插入一个一。 - - - -``` -class Solution(object): - def plusOne(self, digits): - """ - :type digits: List[int] - :rtype: List[int] - """ - carry = 1 - - for i in range(len(digits)-1,-1,-1): - digits[i] += carry - if digits[i] < 10: - carry = 0 - break - else: - digits[i] -= 10 - if carry == 1: - digits.insert(0,1) - return digits -``` - diff --git "a/docs/Leetcode_Solutions/C++/067._add_binary \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/067._add_binary \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 875dc9e63..000000000 --- "a/docs/Leetcode_Solutions/C++/067._add_binary \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,31 +0,0 @@ -###67. Add Binary - -题目: - - - -难度 : Easy - - -几种case: - -- a or b 为空,最简单 -- 唯一的问题是如果有进位的处理,进位的处理就是先让其中的一个数和```‘1’```做```addBinary```处理 ,然后再用```addBinary``` - -```python -class Solution(object): - def addBinary(self, a, b): - """ - :type a: str - :type b: str - :rtype: str - """ - if (a == '' or b == ''): - return a + b - elif a[-1] == '0' and b[-1] == '0': - return self.addBinary(a[:-1], b[:-1]) + '0' - elif a[-1] == '1' and b[-1] == '1': - return self.addBinary(a[:-1], self.addBinary(b[:-1],'1')) + '0' - else: - return self.addBinary(a[:-1], b[:-1]) + '1' -``` diff --git "a/docs/Leetcode_Solutions/C++/069._sqrt(x) \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/069._sqrt(x) \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 70c28f6e2..000000000 --- "a/docs/Leetcode_Solutions/C++/069._sqrt(x) \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,101 +0,0 @@ -### 69. Sqrt(x) - - -题目: - - - -难度: - -Medium - - -思路: - -一看,觉得很容易,一写,超时: - -``` -class Solution(object): - def mySqrt(self, x): - """ - :type x: int - :rtype: int - """ - i = 0 - while i * i <= x : - if i * i == x: - return i - elif i * i < x and (i+1) * (i+1) > x: - return i - i += 1 -``` - -看一眼tag, binary search,难道从x/2之类的开始搜起来?话说还想到求sqrt有个🐂的牛顿法? - -莫名其妙过了的代码: - -```python -class Solution(object): - def mySqrt(self, x): - """ - :type x: int - :rtype: int - """ - if x == 1 : return 1 - if x == 0 : return 0 - l, r = 0, x - 1 - while l <= r: - mid = l + ((r - l) >> 2) - if mid * mid <= x and (mid+1)*(mid+1) > x: - return mid - elif mid * mid > x: - r = mid - 1 - else: - l = mid + 1 -``` - -或者 -```python -class Solution(object): - def mySqrt(self, x): - """ - :type x: int - :rtype: int - """ - if x == 1: - return 1 - if x == 0: - return 0 - l, r = 0, x-1 - while l <= r: - mid = l + ((r - l) >> 2) - if (mid * mid - x == 0): - return mid - elif (mid * mid - x > 0): - r = mid - 1 - else: - l = mid + 1 - return r -``` - - - -牛顿法 - -参见wikipedia,to be done:自己推导一遍 - - - -```python -class Solution(object): - def mySqrt(self, x): - """ - :type x: int - :rtype: int - """ - res = 1.0 - while abs(res * res - x) > 0.1: - res = (res + x / res) / 2 - return int(res) - -``` diff --git "a/docs/Leetcode_Solutions/C++/070. Climbing Stairs \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/070. Climbing Stairs \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 890b2f338..000000000 --- "a/docs/Leetcode_Solutions/C++/070. Climbing Stairs \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,99 +0,0 @@ -### 70. Climbing Stairs - - -题目: - - - -难度: -Easy - -思路: - -Fibonacci 的DP版本 - -对于DP的不同理解造成不同的写法 -Memoization will usually add on your time-complexity to your space-complexity (e.g. with tabulation you have more liberty to throw away calculations, like using tabulation with Fib lets you use O(1) space, but memoization with Fib uses O(N) stack space). -详看 - -[Dynamic programming and memoization: bottom-up vs top-down approaches](https://awjin.me/algos-js/dp/tab-memo.html) - -[Tabulation vs Memoizatation](http://www.geeksforgeeks.org/tabulation-vs-memoizatation/) -- top-down(memorize) - -``` -def memorize_fib(n): # n为第几个Fibonacci数 - memo = {1:1, 2:1} - if n in memo: - return memo[n] - else: - memo[n] = memorize_fib(n-1) + memorize_fib(n-2) - return memo[n] - -print(memorize_fib(4)) -``` -输出```3``` - - -- bottom up(tabulation) - -``` -def tabulation_fib(n): # n为第几个Fibonacci数 - fib = [1, 1, 2] - if n < 4: - return fib[n-1] - for k in range(3, n+1): - fib[2] = fib[0] + fib[1] - fib[0], fib[1] = fib[1], fib[2] - return fib[2] - -print(tabulation_fib(4)) -``` -输出```3``` - -这里memo用dict,用array也一样。当然用bottom up还有一点,可以只存每次最后两个数,可以save space.,这样就只用到constant space. - -AC 代码(这里采用bottom up思想) - -```python -class Solution(object): - def climbStairs(self, n): - """ - :type n: int - :rtype: int - """ - fib = [1, 2, 3] - if n < 4: - return fib[n-1] - for k in range(3, n+1): -            fib[2] = fib[0] + fib[1]             # 永远只存3个元素,save space -            fib[0], fib[1] = fib[1], fib[2] - return fib[2] -``` -- Complexity Analysis - - - Time complexity : O(n) - - - Space complexity : O(1). Constant space is used. -另外还有一个公式法: - -![](https://github.com/Lisanaaa/myTODOs/blob/master/41512784914_.pic.jpg) - -由于这里面相当于```standard Fibonacci```函数向前进了一步,排列为1,2,3,5而非原本的1,1,2,3,所以代码中使用```n+1``` -```python -class Solution(object): - def climbStairs(self, n): - """ - :type n: int - :rtype: int - """ - import math - sqrt5 = math.sqrt(5) - fibn = pow((1 + sqrt5) / 2, n+1) - pow((1 - sqrt5) / 2, n+1) - return int(float(fibn/sqrt5)) -``` -- Complexity Analysis - - - Time complexity : O(lg(n)). pow method takes log(n) time. - - - Space complexity : O(1). Constant space is used. diff --git "a/docs/Leetcode_Solutions/C++/072._edit_distance \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/072._edit_distance \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index c2720f92b..000000000 --- "a/docs/Leetcode_Solutions/C++/072._edit_distance \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,116 +0,0 @@ -###72. Edit Distance - -题目: - - - -难度: - -Hard - -可以做的操作: - -- insert -- delete -- replace - -动归典型,原来也是有wikipedia page的算法 - - - - - - -看wikipedia 这解释 - -``` - / max(i,j) if min(i,j) = 0 - - / dp[i-1][j] + 1 word1[i]不在word2[0...j]中,所以删除 - dp[i][j] - min -- dp[i][j-1] + 1 insertion - \ dp[i-1][j-1] + 1/0 word[i]与word[j]是否相等 -``` - -上面的就不用解释了,min分别对应:删除、插入、以及替代(1/0取决 word1[i] == word2[j] ),反正也是tabular类型,画表来解决问题。 - - -用wikipedia上的伪码改造 - -``` -function LevenshteinDistance(char s[1..m], char t[1..n]): - // for all i and j, d[i,j] will hold the Levenshtein distance between - // the first i characters of s and the first j characters of t - // note that d has (m+1)*(n+1) values - declare int d[0..m, 0..n] - - set each element in d to zero - - // source prefixes can be transformed into empty string by - // dropping all characters - for i from 1 to m: - d[i, 0] := i - - // target prefixes can be reached from empty source prefix - // by inserting every character - for j from 1 to n: - d[0, j] := j - - for j from 1 to n: - for i from 1 to m: - if s[i] = t[j]: - substitutionCost := 0 - else: - substitutionCost := 1 - d[i, j] := minimum(d[i-1, j] + 1, // deletion - d[i, j-1] + 1, // insertion - d[i-1, j-1] + substitutionCost) // substitution - - return d[m, n] -``` - -对应的例子表格图 - -``` - k i t t e n - 0 1 2 3 4 5 6 -s 1 1 2 3 4 5 6 -i 2 2 1 2 3 4 5 -t 3 3 2 1 2 3 4 -t 4 4 3 2 1 2 3 -i 5 5 4 3 2 2 3 -n 6 6 5 4 3 3 2 -g 7 7 6 5 4 4 3 -``` - - -AC代码 - -``` -class Solution(object): - def minDistance(self, word1, word2): - """ - :type word1: str - :type word2: str - :rtype: int - """ - m,n = len(word1), len(word2) - dp = [[0 for i in range(m+1)] for j in range(n+1)] - - for i in range(1,m+1): - dp[0][i] = i - - for j in range(1,n+1): - dp[j][0] = j - - for j in range(1,n+1): - for i in range(1,m+1): - cost = 0 if word1[i-1] == word2[j-1] else 1 - dp[j][i] = min(dp[j-1][i] + 1, dp[j][i-1] + 1, dp[j-1][i-1] + cost) - - return dp[n][m] -``` - - -貌似还有提升版本,但是比较明显即使有伪码,一开始也出错于下标. - -升级版 to be learned. \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/073. Set Matrix Zeroes \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/073. Set Matrix Zeroes \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 0b30f99ed..000000000 --- "a/docs/Leetcode_Solutions/C++/073. Set Matrix Zeroes \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,55 +0,0 @@ -### 73. Set Matrix Zeroes - - - -题目: - - - - -难度 : Medium - - - -思路: - -Naive AC代码,一看类似那个 game of life,不用extra space,不用O(mn),应该就是用状态转移机了(?),所以还是先naive AC把: - -``` -class Solution(object): - def setZeroes(self, matrix): - """ - :type matrix: List[List[int]] - :rtype: void Do not return anything, modify matrix in-place instead. - """ - def setZero(i,j): - for m in range(col): - matrix[i][m] = 0 - for n in range(row): - matrix[n][j] = 0 - - - row = len(matrix) - col = len(matrix[0]) if row else 0 - - newM = [] - for i in range(row): - newM.append(matrix[i][:]) - - - for i in range(row): - for j in range(col): - if newM[i][j] == 0: - setZero(i,j) -``` - - - -`正确思路`: - -一边遍历,一边将相应的行和列置为0是行不通的,会影响后面元素的遍历判断,所以要记录下哪些行和哪些列是要置为0的。为了节约空间,在原矩阵中借两条边,如果该行或者列要置为0,则把左边或者上边的相应位置置为0。如果左边和上边本来就有0,那么需要额外标记一下,最后把左边或者右边也全部置为0. - - - - - diff --git "a/docs/Leetcode_Solutions/C++/074._search_a_2d_matrix \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/074._search_a_2d_matrix \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 026a5d34d..000000000 --- "a/docs/Leetcode_Solutions/C++/074._search_a_2d_matrix \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,81 +0,0 @@ -### 74. Search a 2D Matrix - -题目: - - - -难度: -Medium - - -思路: -想过将```2D matrix```看成一个大```sorted list```,代码如下: -```python -class Solution(object): - def searchMatrix(self, matrix, target): - """ - :type matrix: List[List[int]] - :type target: int - :rtype: bool - """ - row = len(matrix) - col = len(matrix[0]) if row else 0 - l, r = 0, row * col - 1 - while l <= r: - mid = l + ((r - l) >> 2) - if target > matrix[mid/col][mid%col]: - l = mid + 1 - elif target < matrix[mid/col][mid%col]: - r = mid - 1 - else: - return True - return False -``` - - -但是后面觉得不行, -原因如下: -1. m * n may overflow for large m and n; -2. it will use multiple expensive operations such as / and % - - - - - - -因此二分Search,``` binary search by row first, then binary search by column.``` - - -```python -class Solution(object): - def searchMatrix(self, matrix, target): - """ - :type matrix: List[List[int]] - :type target: int - :rtype: bool - """ - if not matrix or not matrix[0]: - return False - row = len(matrix) - col = len(matrix[0]) if row else 0 - l, r = 0, row - 1 - while l <= r: - mid_row = l + ((r - l) >> 2) - if matrix[mid_row][0] <= target <= matrix[mid_row][-1]: - m, n = 0, col - 1 - while m <= n: - mid_col = m + ((n - m) >> 2) - if matrix[mid_row][mid_col] > target: - n = mid_col - 1 - elif matrix[mid_row][mid_col] < target: - m = mid_col + 1 - else: - return True - return False - elif target < matrix[mid_row][0]: - r = mid_row - 1 - else: - l = mid_row + 1 - return False - -``` diff --git "a/docs/Leetcode_Solutions/C++/075._sort_colors \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/075._sort_colors \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e70f4e6ad..000000000 --- "a/docs/Leetcode_Solutions/C++/075._sort_colors \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,54 +0,0 @@ -###75. Sort Colors - -题目: - - - -难度: - -Medium - - -思路: - -这个问题是 Dutch National Flag Problem, 荷兰旗问题 - - - -思路其实是类似partition的,比x小的放左边,比x大的放右边。 - -这里是用三个指针,begin, cur, end,cur需要遍历整个数组 - -- cur 指向0,交换begin与cur, begin++,cur++ -- cur 指向1,不做任何交换,cur++ -- cur 指向2,交换end与cur,end-- - -之所以cur指向2,交换之后不前进是因为我们不知道end此时指向的元素是几,如果交换过来的是0或者1,那么明显我们需要做进一步的处理,所以最终判断条件是end =< cur应该就结束了 - -这样的three-way-partition也只是3-way好用吧?如果有4个数,那么这样则是无效的,或者如果是4-way,那么可以转换成3-way+2-way - - -``` -class Solution(object): - def sortColors(self, nums): - """ - :type nums: List[int] - :rtype: void Do not return anything, modify nums in-place instead. - """ - begin,cur,end = 0,0,len(nums) - 1 - - while cur <= end: - if nums[cur] == 0: - nums[begin],nums[cur] = nums[cur],nums[begin] - cur += 1 - begin += 1 - - elif nums[cur] == 1: - cur += 1 - - else: # nums[cur] == 2 - nums[cur],nums[end] = nums[end],nums[cur] - end -=1 - -``` - diff --git "a/docs/Leetcode_Solutions/C++/076._Minimum_Window_Substring \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/076._Minimum_Window_Substring \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 1407d82d3..000000000 --- "a/docs/Leetcode_Solutions/C++/076._Minimum_Window_Substring \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,44 +0,0 @@ -### 76. Minimum Window Substring -题目: - - - -难度 : Hard - - -模板大法 - - -```python -class Solution(object): - def minWindow(self, s, t): - """ - :type s: str - :type t: str - :rtype: str - """ - if len(t) > len(s): - return '' - maps = collections.Counter(t) - counter = len(maps.keys()) - begin, end, head, length = 0, 0, 0, float('inf') - while end < len(s): - if s[end] in maps: - maps[s[end]] -= 1 - if maps[s[end]] == 0: - counter -= 1 - end += 1 - while counter == 0: - if s[begin] in maps: - maps[s[begin]] += 1 - if maps[s[begin]] > 0: - counter += 1 - if end - begin < length: - length = end - begin - head = begin - begin += 1 - if length == float('inf'): - return '' - return s[head:head+length] -``` - diff --git "a/docs/Leetcode_Solutions/C++/077._combinations \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/077._combinations \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 1672b9dff..000000000 --- "a/docs/Leetcode_Solutions/C++/077._combinations \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,123 +0,0 @@ -###77. Combinations - - -题目: - - - -难度 : Medium - - -思路一: -python作弊法 - -``` -import itertools -p = [4, 8, 15, 16, 23, 42] -c = itertools.combinations(p, 4) -for i in c: - print i - -结果: - -(4, 8, 15, 16) -(4, 8, 15, 23) -(4, 8, 15, 42) -(4, 8, 16, 23) -(4, 8, 16, 42) -(4, 8, 23, 42) -(4, 15, 16, 23) -(4, 15, 16, 42) -(4, 15, 23, 42) -(4, 16, 23, 42) -(8, 15, 16, 23) -(8, 15, 16, 42) -(8, 15, 23, 42) -(8, 16, 23, 42) -(15, 16, 23, 42) -``` - -作弊AC代码: - -``` -class Solution(object): - def combine(self, n, k): - """ - :type n: int - :type k: int - :rtype: List[List[int]] - """ - import itertools - return [list(i) for i in itertools.combinations(range(1,n+1), k)] -``` - - -思路二: - -标准的recursion - -但是会超时 - - -``` -class Solution(object): - def combine(self, n, k): - """ - :type n: int - :type k: int - :rtype: List[List[int]] - """ - ans = [] - self.dfs(n, k, 1, [], ans) - return ans - - def dfs(self, n, k ,start, lst, ans): - if k == 0 : - ans.append(lst) - return - for i in range(start, n+1): - self.dfs(n, k - 1, i + 1,lst +[i], ans) -``` - -理解方式 - -``` - - 1 2 3 - 12 13 14 23 24 34 -``` - -可以参照这里 - - - - - -解法三: - - -采用递归的方式,在n个数中选k个,如果n大于k,那么可以分类讨论,如果选了n,那么就是在1到(n-1)中选(k-1)个,否则就是在1到(n-1)中选k个。递归终止的条件是k为1,这时候1到n都符合要求。 - -注意一开始这里的else part花了我一点时间来理解,因为n必定大于k,所以这样递归当 n == k的时候选法就是code原作者的写法,也就是直接[range(1,k+1)] - -参考这里: - - -``` -class Solution(object): - def combine(self, n, k): - """ - :type n: int - :type k: int - :rtype: List[List[int]] - """ - if k == 1: - return [[i + 1] for i in range(n)] - result = [] - if n > k: - result = [r + [n] for r in self.combine(n - 1, k - 1)] + self.combine(n - 1, k) - else: #n == k - # result = [r + [n] for r in self.combine(n - 1, k - 1)] - result = [range(1,k+1)] - return result -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/078.Subsets \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/078.Subsets \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e5b100563..000000000 --- "a/docs/Leetcode_Solutions/C++/078.Subsets \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,47 +0,0 @@ -### 78. Subsets - -题目: - - - -难度 : Medium - - -Python代码 - -```python -class Solution(object): - def subsets(self, nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - results = [[]] - for num in nums: - results.extend([result + [num] for result in results]) - return results - -``` - - -BackTrack 标准解法版 - - -```python -class Solution: - - def search(self, nums, S, index): - if index == len(nums): - self.results.append(S) - return - - self.search(nums, S + [nums[index]], index + 1) - self.search(nums, S, index + 1) - - def subsets(self, nums): - self.results = [] - self.search(nums, [], 0) - return self.results -``` - -对每个元素,有两种可能,加入S和不加入S,写起来思路还是很清爽的 diff --git "a/docs/Leetcode_Solutions/C++/079._word_search \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/079._word_search \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e097a4259..000000000 --- "a/docs/Leetcode_Solutions/C++/079._word_search \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,63 +0,0 @@ -###79. Word Search - - - -题目: - - - -难度: -Medium - - -思路: - -其实这个题和number of islands类似,是backtracking基本功的考查,但是基本功非常有待提高||| - -比较核心的是dfs函数,然后这个函数有取巧的写法:如果outside of boundary就return False - -loop, 如果碰到跟word开头的字母一样,把这个扔进去loop,可以考查这个char在这个board的上下左右是否可以选择,补课使用则重置used, 然后return - -也还是之前摘录的,backtrack写法关键: 选择 (Options),限制 (Restraints),结束条件 (Termination)。 - - - - -``` -class Solution(object): - def exist(self, board, word): - """ - :type board: List[List[str]] - :type word: str - :rtype: bool - """ - - def dfs(board, used, row, col, x, y, word, idx): - if idx == len(word) : - return True - - if x < 0 or x > row -1 or y < 0 or y > col -1 : - return False - - if board[x][y] == word[idx] and not used[x][y]: - used[x][y] = 1 - left = dfs(board,used,row,col,x-1,y,word,idx+1) - right = dfs(board,used,row,col,x+1,y,word,idx+1) - up = dfs(board,used,row,col,x,y-1,word,idx+1) - down = dfs(board,used,row,col,x,y+1,word,idx+1) - - used[x][y] = left or right or up or down - return left or right or up or down - return False - - - row = len(board) - col = len(board[0]) if row else 0 - used = [ [0 for i in range(col)] for j in range(row)] - - for i in range(row): - for j in range(col): - if dfs(board,used,row,col,i,j,word,0): - return True - return False -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/082._remove_duplicates_from_sorted_list_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/082._remove_duplicates_from_sorted_list_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 277b3870c..000000000 --- "a/docs/Leetcode_Solutions/C++/082._remove_duplicates_from_sorted_list_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,49 +0,0 @@ -###82. Remove Duplicates from Sorted List II - - -题目: - - - - -难度: - -Medium - - -木有space 和 time的限制,第一想法,用dictionary存一下每个nodes的个数,这样只要看到它是大于1的,就删删删。 - -虽然是笨办法。但是也可以AC - -``` -class Solution(object): - def deleteDuplicates(self, head): - """ - :type head: ListNode - :rtype: ListNode - """ - dummy = ListNode(-1) - dummy.next = head - - cur = dummy.next - nodeNumber = {} - while cur: - if cur.val in nodeNumber: - nodeNumber[cur.val] += 1 - else: - nodeNumber[cur.val] = 1 - cur = cur.next - - cur = dummy - while cur.next: - if nodeNumber[cur.next.val] > 1: - cur.next = cur.next.next - else: - cur = cur.next - return dummy.next -``` - - -谷歌一下,更省时间的方法是用一个prev 和 cur 指针,然后用一个bool来记录是否duplicate,这样loop一次即可解决问题。 - -to be 写出来 \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/083._remove_duplicates_from_sorted_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/083._remove_duplicates_from_sorted_list \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a9081a689..000000000 --- "a/docs/Leetcode_Solutions/C++/083._remove_duplicates_from_sorted_list \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,28 +0,0 @@ -### 83. Remove Duplicates from Sorted List - -题目: - - - -难度: - -Easy - - -dummy 大法 - -```python -class Solution(object): - def deleteDuplicates(self, head): - """ - :type head: ListNode - :rtype: ListNode - """ - dummy = head - while head: - while head.next and head.next.val == head.val: - head.next = head.next.next # skip duplicated node - head = head.next # not duplicate of current node, move to next node - return dummy - -``` diff --git "a/docs/Leetcode_Solutions/C++/086._partition_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/086._partition_list \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index c1fd2dca0..000000000 --- "a/docs/Leetcode_Solutions/C++/086._partition_list \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,56 +0,0 @@ -###86. Partition List - - -题目: - - - -难度 : Medium - - -思路一: - - -最简单的思路就是两个dummy head,然后一个指向 小于的node,一个指向大于的node - - -思路二: - -不走寻常路了,使用两个指针,一个指向小于的尾巴,一个一直往后走,指向大于,然后交换node - -完成比完美更重要啊,其实可以先试试用简单方法,因为我用我的不走寻常路画了比较久的图,写起来也稍显没那么美观,还在交换node的部分卡了一会 - - - -``` -class Solution(object): - def partition(self, head, x): - """ - :type head: ListNode - :type x: int - :rtype: ListNode - """ - dummy = ListNode(-1) - dummy.next = head - - p1 = p2 = dummy - - while p1.next and p1.next.val < x: - p1 = p1.next - - p2 = p1.next - - while p2: - while p2.next and p2.next.val >= x: - p2 = p2.next - - if p2.next == None: - break - node = p2.next - p2.next = node.next - node.next = p1.next - p1.next = node - p1 = p1.next - - return dummy.next -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/088._merge_sorted_array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/088._merge_sorted_array \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 029b3c330..000000000 --- "a/docs/Leetcode_Solutions/C++/088._merge_sorted_array \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,46 +0,0 @@ -### 88. Merge Sorted Array - - -题目: - - - -难度 : Easy - -### 思路: - -给的数组可能是这样的 - -- nums1 : [0] -- m : 0 -- nums2 : [1] -- n : 1 - - -所以要判断m和n是不是仍然大于0 - - -AC代码 - - -```python -class Solution: - def merge(self, nums1, m, nums2, n): - """ - :type nums1: List[int] - :type m: int - :type nums2: List[int] - :type n: int - :rtype: void Do not return anything, modify nums1 in-place instead. - """ - while m > 0 and n > 0: - if nums1[m-1] > nums2[n-1]: - nums1[m+n-1] = nums1[m-1] - m -= 1 - else: - nums1[m+n-1] = nums2[n-1] - n -= 1 - if n > 0: - nums1[:n] = nums2[:n] - -``` diff --git "a/docs/Leetcode_Solutions/C++/089._gray_code \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/089._gray_code \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index c0a9f193c..000000000 --- "a/docs/Leetcode_Solutions/C++/089._gray_code \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,101 +0,0 @@ -###89. Gray Code - - - -题目: - - - -难度: -Medium - -思路: - -首先不是从任何一个数开始都是有效的,所以naive的想法是从任何一个开始,然后如果能到2^n位,那么说明是有效的,问题解决. - -A gray code sequence must begin with 0. ->简化了一点 - -先写了一段代码: - -``` -def nextCode(curCode, res, n): - if curCode not in res: - res.append(curCode) - else: - return - if len(res) == pow(2,n): - return res - for i in range(n): - nCode = curCode[:] - nCode[i] = 1 if curCode[i] == 0 else 0 - nextCode(nCode,res,n) - -res = [] -nextCode([0,0,0],res,3) -print res -#[[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0], [0, 1, 1], [1, 1, 1], [1, 0, 1], [0, 0, 1]] -``` -实际上问题是这段代码的时间复杂度感觉很高,但是试试 - - -不失所望,到11就超时 - -``` - -class Solution(object): - def grayCode(self, n): - """ - :type n: int - :rtype: List[int] - """ - def nextCode(curCode, res, n): - if curCode not in res: - res.append(curCode) - else: - return - if len(res) == pow(2,n): - return res - for i in xrange(n): - nCode = curCode[:] - nCode[i] = 1 if curCode[i] == 0 else 0 - nextCode(nCode, res, n) - - def listoVal(curCode,n): - val = 0 - for i in range(n-1,-1,-1): - val += pow(2,i) * curCode[i] - return val - - - res = [] - nextCode([0]*n, res, n) - # print res - - val = [] - for i in res: - val.append(listoVal(i,n)) - return val -``` - -然后居然有这个东西: -Gray code,要用位运算!瞑目 - - - - -服气,这个待研究 -``` -class Solution(object): - def grayCode(self, n): - """ - :type n: int - :rtype: List[int] - """ - result = [(i>>1)^i for i in range(pow(2,n))] - return results -``` - - - - - diff --git "a/docs/Leetcode_Solutions/C++/090._subsets_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/090._subsets_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 99661e3da..000000000 --- "a/docs/Leetcode_Solutions/C++/090._subsets_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,80 +0,0 @@ -### 90. Subsets II - -题目: - - - -难度 : Medium - - -思路: - - -参考别人的 - -现在来观察规律,与之前有不同之处是我们需要一个位置来mark,因为不再需要往之前出现过的地方再加了,看这个: - - -``` -[[],[1]] 是 [1] 的子集合 -[[],[1],[2],[1,2]] 是 [1,2] 的子集合,实际上就是1的子集合们加了一个2 -新来的2不能再从头开始加了,它需要从[ .., [2],[1,2] ]加 才是合理的 - -****当出现多个重复数字时,应该从 已经拥有了新数字所出现全部次数的list开始加才是合理的**** -[[],[1]] 是 [1] 的子集合 -[[],[1],[2],[1,2]] 是 [1,2] 的子集合,实际上就是1的子集合们加了一个2 -[ - [2], - [1], - [1,2,2], - [2,2], - [1,2], - [] -] 是 [1,2,2] 的子集和,实际上也就是[1,2]的子集合加了一个2 -新来的2不能再从头开始加了,它需要从[ .., [2,2],[1,2,2] ]加 才是合理的 -例如: -``` - - -这里这个start是来记录了之前一次数组的长度,temp_size记住目前数组的长度,然后用这个来达到去重的目的,非常聪明 - -自己的解法 -```python -class Solution(object): - def subsetsWithDup(self, nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - nums.sort() - results = [[]] - for i in range(len(nums)): - if any(nums[i] in result for result in results): - results.extend([result + [nums[i]] for result in results if result.count(nums[i]) == i - nums.index(nums[i])]) - else: - results.extend([result + [nums[i]] for result in results]) - return results - -``` - - -别人的,但是一个意思 -```python -class Solution(object): - def subsetsWithDup(self, nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - nums.sort() - result = [[]] - temp_size = 0 - for i in range(len(nums)): - start = temp_size if i >= 1 and nums[i] == nums[i-1] else 0 - temp_size = len(result) - for j in range(start, temp_size): - result.append(result[j] + [nums[i]]) - return result - -``` - diff --git "a/docs/Leetcode_Solutions/C++/091._decode_ways \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/091._decode_ways \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 3abd24a85..000000000 --- "a/docs/Leetcode_Solutions/C++/091._decode_ways \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,71 +0,0 @@ -###91. Decode Ways - -题目: - - - - -tag : DP - -难度 : Medium - - - - - -``` -BASE CASE(len(s) = 1 和 len(s) = 2 ): -直接check - -非BASE CASE : -先令 dp[i] = 0 -如果s[i]是可以map的话 -> dp[i] += dp[i-1] 原本的s[0..i]decode方式加上s[i] -如果s[i-1,i]可以map的话 -> dp[i] += dp[i-2] 原本的s[0...i-1]decode方式加上s[i-1,i] -``` - - -Python代码(可美化) - -``` -class Solution(object): - def numDecodings(self, s): - """ - :type s: str - :rtype: int - """ - keys = ['1', '2', '3', '4', '5', '6', '7', '8', '9' ,'10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26'] - values = ['A', 'B','C', 'D', 'E', 'F', 'G','H', 'I', 'J', 'K', 'L', 'M' , 'N', 'O', 'P','Q', 'S', 'R', 'T', 'U','V', 'W', 'X','Y','Z'] - numbersToLetters = dict(zip(keys, values)) - - ways = {} - n = len(s) - for i in range(n): - ways[i] = 0 - if n == 0: - return 0 - elif n == 1 : - ways[0] = int(s in numbersToLetters) - elif n == 2: - if (s[0] in numbersToLetters) and (s[1] in numbersToLetters): - ways[1] += 1 - if (s in numbersToLetters): - ways[1] += 1 - else: - #s[0] - ways[0] = int(s[0] in numbersToLetters) - #s[01] - if (s[0] in numbersToLetters) and (s[1] in numbersToLetters): - ways[1] += 1 - if (s[:2] in numbersToLetters): - ways[1] += 1 - for i in range(2,n): - if s[i] in numbersToLetters: - ways[i] += ways[i-1] - if (s[i-1:i+1] in numbersToLetters): - ways[i] += ways[i-2] - - #print(ways[n-1]) - return ways[n-1] - -``` - diff --git "a/docs/Leetcode_Solutions/C++/092._reverse_linked_list_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/092._reverse_linked_list_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index f2b29da12..000000000 --- "a/docs/Leetcode_Solutions/C++/092._reverse_linked_list_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,66 +0,0 @@ -###92. Reverse Linked List II - -题目: - - - -难度: -Medium - - -跟 reverse linked list一样 - -思路: 找到 第 m 个node,然后开始reverse到第n个node,然后再把它们和原本的list连接起来 - -AC 代码 - -``` -class Solution(object): - def reverseBetween(self, head, m, n): - """ - :type head: ListNode - :type m: int - :type n: int - :rtype: ListNode - """ - # m == n, not reverse - if m == n : return head - - dummy = ListNode(-1) - dummy.next = head - - mbefore = dummy - cnt = 1 - - while mbefore and cnt < m: - mbefore = mbefore.next - cnt += 1 - - prev = None - cur = mbefore.next - tail1 = mbefore.next - - - while cnt <= n : - nxt = cur.next - cur.next = prev - prev = cur - cur = nxt - cnt += 1 - - - - mbefore.next = prev - tail1.next = cur - - return dummy.next -``` - -看了一下别人的代码,又比我写的好嘛,因为是保证m和n有效,用的是for循环先找到 m node: - - - for _ in range(m-1): - .... - - for _ in range(n-m): - reverse 操作 \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/093._restore_ip_addresses \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/093._restore_ip_addresses \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 55e31916b..000000000 --- "a/docs/Leetcode_Solutions/C++/093._restore_ip_addresses \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,66 +0,0 @@ -###93. Restore IP Addresses - -题目: - - - - -难度: - -Medium - - -基本思路已达到,等待AC之路 - -结果AC之路还是比较漫长的,因为不允许前缀为0困扰了一下 - -``` -class Solution(object): - def restoreIpAddresses(self, s): - """ - :type s: str - :rtype: List[str] - """ - self.res = [] - self.singgleAddresses([],s,4) - for i in range(len(self.res)): - self.res[i] = '.'.join(str(j) for j in self.res[i]) - return self.res - - - - def singgleAddresses(self, curRes, s, k): - """ - :type s: str - :rtype: List[str] - """ - if len(s) == 0 and k == 0: - if curRes not in self.res: - self.res.append(curRes) - if len(s) == 0 or k < 0: - return - else: - if self.between0And255(s[:1]): - self.singgleAddresses(curRes + [int(s[:1])], s[1:], k-1) - if self.between0And255(s[:2]): - self.singgleAddresses(curRes + [int(s[:2])], s[2:], k-1) - if self.between0And255(s[:3]): - self.singgleAddresses(curRes + [int(s[:3])], s[3:], k-1) - - def between0And255(self,s): - #前缀不允许为0 - if int(s) == 0 : - if len(s) == 1 : - return True - else: - return False - - if int(s) > 0 and s[0] == '0': - return False - if int(s) > 0 and int(s) <= 255: - return True - return False - -``` - - diff --git "a/docs/Leetcode_Solutions/C++/094._binary_tree_inorder_traversal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/094._binary_tree_inorder_traversal \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index dc288f127..000000000 --- "a/docs/Leetcode_Solutions/C++/094._binary_tree_inorder_traversal \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,92 +0,0 @@ -### 94. Binary Tree Inorder Traversal - -题目: - - - -难度: - -Medium - - -递归版本1⃣️:自己瞬秒的 - - - - -```python -class Solution(object): - def inorderTraversal(self, root): - """ - :type root: TreeNode - :rtype: List[int] - """ - res = [] - if not root: - return res - if root.left: - res.extend(self.inorderTraversal(root.left)) - res.append(root.val) - if root.right: - res.extend(self.inorderTraversal(root.right)) - return res -``` - -递归版本2⃣️: -```python -class Solution(object): - def inorderTraversal(self, root): - """ - :type root: TreeNode - :rtype: List[int] - """ - self.lst = [] - self.DFS(root) - return self.lst - - - def DFS(self,root): - if root == None: - return - if root.left: - self.DFS(root.left) - self.lst.append(root.val) - if root.right: - self.DFS(root.right) - -``` - -非递归用stack,我听谁讲过 😓 - -// to be done - - -via wikipedia - - -递归: - -``` -inorder(node) - if (node = null) - return - inorder(node.left) - visit(node) - inorder(node.right) -``` - - -非递归,跟之前那个iterator有得一拼,其实好几个题都是在玩这个花样? - -``` -iterativeInorder(node) - s ← empty stack - while (not s.isEmpty() or node ≠ null) - if (node ≠ null) - s.push(node) - node ← node.left - else - node ← s.pop() - visit(node) - node ← node.right -``` diff --git "a/docs/Leetcode_Solutions/C++/096._unique_binary_search_trees \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/096._unique_binary_search_trees \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 2e29cf929..000000000 --- "a/docs/Leetcode_Solutions/C++/096._unique_binary_search_trees \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,43 +0,0 @@ -###96. Unique Binary Search Trees - - - -题目: - - - -难度: -Medium - -思路: - - -参照此处hint: - - - - -首先明确n个不等的数它们能构成的二叉搜索树的种类都是相等的. - -毫无头绪,对于1...n的bst,可以这样看,k可以作为root,那么1..k-1必定在左边,k+1...n必定在右边,而1...k-1课产生的bst树是dp[k-1],右边产生的数是dp[n-k],所以能生成的树的数量是 dp[k-1]* dp[n-k] - -dp[n] = sum(dp[k-1]*dp[n-k]),从0到k - - -``` -class Solution(object): - def numTrees(self, n): - """ - :type n: int - :rtype: int - """ - dp = [ 1 for i in range(n+1)] - - for i in range(2,n+1): - s = 0 - for k in range(i): - s += dp[k]*dp[i-k-1] - dp[i] = s - - return dp[-1] -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/098._validate_binary_search_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/098._validate_binary_search_tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index c4b5dcfbf..000000000 --- "a/docs/Leetcode_Solutions/C++/098._validate_binary_search_tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,74 +0,0 @@ -###98. Validate Binary Search Tree - -题目: - - - - -难度: - -Easy - - -以前做过这道题,valid binary tree,需要check两件事: - - -``` - 10 - / \ - 7 20 - / \ - 5 40 -``` - - -- node.left.val < node.val - - right subtree of left child, value < node.val -- node.right.val > node.val - - left subtree of the right child, value > node.val - - -wikipedia上有伪码: - -``` -truct TreeNode { - int key; - int value; - struct TreeNode *left; - struct TreeNode *right; -}; - -bool isBST(struct TreeNode *node, int minKey, int maxKey) { - if(node == NULL) return true; - if(node->key < minKey || node->key > maxKey) return false; - - return isBST(node->left, minKey, node->key) && isBST(node->right, node->key, maxKey); -} - - -if(isBST(root, INT_MIN, INT_MAX)) { - puts("This is a BST."); -} else { - puts("This is NOT a BST!"); -} -``` - -实际上就是每次往下看,node都确保被夹在一个范围。 - -翻译了一下伪码,AC - - -``` -class Solution(object): - def isValidBST(self, root): - """ - :type root: TreeNode - :rtype: bool - """ - return self.isBST(root, float('-inf'),float('inf')) - - def isBST(self, root, minKey, maxKey): - if root == None: return True - if root.val <= minKey or root.val >= maxKey : return False - return self.isBST(root.left,minKey,root.val) and self.isBST(root.right, root.val, maxKey) -``` diff --git "a/docs/Leetcode_Solutions/C++/100._same_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/100._same_tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index f12c86c3a..000000000 --- "a/docs/Leetcode_Solutions/C++/100._same_tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,49 +0,0 @@ -### 100. Same Tree - -题目: - - - - -难度: - -Easy - - -太简单了,递归一行! - - -```python -# Definition for a binary tree node. -# class TreeNode(object): -# def __init__(self, x): -# self.val = x -# self.left = None -# self.right = None - -class Solution(object): - def isSameTree(self, p, q): - """ - :type p: TreeNode - :type q: TreeNode - :rtype: bool - """ - return p.val == q.val and all(map(self.isSameTree, (p.left, p.right), (q.left, q.right))) if p and q else p is q -``` - -```python -class Solution(object): - def isSameTree(self, p, q): - """ - :type p: TreeNode - :type q: TreeNode - :rtype: bool - """ - if (not p and q) or (p and not q): - return False - if not p and not q: - return True - if p.val == q.val: - return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right) - return False -``` diff --git "a/docs/Leetcode_Solutions/C++/101._symmetric_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/101._symmetric_tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index cb6f5219b..000000000 --- "a/docs/Leetcode_Solutions/C++/101._symmetric_tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,45 +0,0 @@ -### 101. Symmetric Tree - -题目: - - - - -难度: - -Easy - - -两棵树symmetric, 有几种可能: - -- 均为none ,symmetric -- 左孩子,右孩子都不存在,并且值相等, symmetric -- 右子树 和 另一棵树的左子树相等,左子树 和另一颗树的右子树相等 🌲 - - -```python -class Solution(object): - def isSymmetric(self, root): - """ - :type root: TreeNode - :rtype: bool - """ - if not root: - return True - return self.symmetric(root.left, root.right) - - def symmetric(self, l1, l2): - if not l1 or not l2: - if not l1 and not l2: - return True - else: - return False - if l1.val == l2.val: - return self.symmetric(l1.left, l2.right) and self.symmetric(l1.right, l2.left) - else: - return False -``` - - - - diff --git "a/docs/Leetcode_Solutions/C++/102._binary_tree_level_order_traversal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/102._binary_tree_level_order_traversal \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 7d4ac4efb..000000000 --- "a/docs/Leetcode_Solutions/C++/102._binary_tree_level_order_traversal \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,62 +0,0 @@ -### 102. Binary Tree Level Order Traversal - -题目: - - - - -难度: - -Medium - -第一种做法:利用curLevel和nextLevel来记录,然后按层append. - - -```python -class Solution(object): - def levelOrder(self, root): - """ - :type root: TreeNode - :rtype: List[List[int]] - """ - if not root: - return [] - res, cur_level = [], [root] - while cur_level: - next_level, tmp_res = [], [] - for node in cur_level: - tmp_res.append(node.val) - if node.left: - next_level.append(node.left) - if node.right: - next_level.append(node.right) - res.append(tmp_res) - cur_level = next_level - return res -``` - - -第二种做法:递归 - - - -```python -class Solution(object): - def levelOrder(self, root): - """ - :type root: TreeNode - :rtype: List[List[int]] - """ - res = [] - self.iter_order(root, 0, res) - return res - - def iter_order(self, root, level, res): - if not root: return - if len(res) < level + 1: - res.append([]) - res[level].append(root.val) - self.iter_order(root.left, level+1, res) - self.iter_order(root.right, level+1, res) -``` -用递归来记录每一层,需要更加学习,不算easy diff --git "a/docs/Leetcode_Solutions/C++/103._binary_tree_zigzag_level_order_traversal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/103._binary_tree_zigzag_level_order_traversal \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index edc9b3986..000000000 --- "a/docs/Leetcode_Solutions/C++/103._binary_tree_zigzag_level_order_traversal \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,43 +0,0 @@ -### 103. Binary Tree Zigzag Level Order Traversal - -题目: - - - - -难度: - -Medium - - - -```python -class Solution(object): - def zigzagLevelOrder(self, root): - """ - :type root: TreeNode - :rtype: List[List[int]] - """ - if not root: - return [] - res, cur_level, level_count = [], [root], 0 - while cur_level: - next_level, tmp_res = [], [] - for node in cur_level: - tmp_res.append(node.val) - if node.left: - next_level.append(node.left) - if node.right: - next_level.append(node.right) - if level_count % 2 == 0: - res.append(tmp_res) - else: - tmp_res.reverse() - res.append(tmp_res) - level_count += 1 - cur_level = next_level - - return res -``` - - diff --git "a/docs/Leetcode_Solutions/C++/104._maximum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/104._maximum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 451160d32..000000000 --- "a/docs/Leetcode_Solutions/C++/104._maximum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,23 +0,0 @@ -### 104. Maximum Depth of Binary Tree - -题目: - - - -难度: - -Easy - - -简单题,但是这道题跟[leetcode111](https://github.com/Lisanaaa/thinking_in_lc/blob/master/111._minimum_depth_of_binary_tree.md)不一样,这道题没有特殊情况,所以一行就够了 - - -```python -class Solution(object): - def maxDepth(self, root): - """ - :type root: TreeNode - :rtype: int - """ - return 1 + max(map(self.maxDepth, (root.left, root.right))) if root else 0 -``` diff --git "a/docs/Leetcode_Solutions/C++/105._construct_binary_tree_from_preorder_and_inorder_traversal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/105._construct_binary_tree_from_preorder_and_inorder_traversal \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 7ed244dd9..000000000 --- "a/docs/Leetcode_Solutions/C++/105._construct_binary_tree_from_preorder_and_inorder_traversal \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,100 +0,0 @@ -###105. Construct Binary Tree from Preorder and Inorder Traversal - -题目: - - - -难度 : Medium - - -preorder 是 根 -> 左 -> 右 -inorder 是 左 -> 根 -> 右 - - -首先pre的第一个就是整个树的root, 假设 pre[0] = in[k],那么in的前k-1个就是树的左子树,后面部分就是树的右子树,这样递归来看. - -然后递归来看,对于前k-1个又是同样的道理吧。 - -然后用递归,写了一颗小树测试,感觉上是对的, - - -``` -class TreeNode(object): - def __init__(self, x): - self.val = x - self.left = None - self.right = None - -nodeA = TreeNode('A') -nodeB = TreeNode('B') -nodeC = TreeNode('C') -nodeD = TreeNode('D') -nodeE = TreeNode('E') -nodeF = TreeNode('F') - -nodeA.left = nodeB -nodeA.right = nodeC -nodeB.left = nodeD -nodeB.right = nodeE -nodeC.left = nodeF - - - # A - # / \ - # B C - # / \ / - # D E F - - -def construct(preorder, inorder): - if preorder == inorder == []: - return None - else: - rootVal = preorder[0] - root = TreeNode(rootVal) - k = inorder.index(rootVal) - if len(preorder) == len(inorder) == 1: - return root - else: - root.left = construct(preorder[1:1+k],inorder[:k]) - root.right = construct(preorder[k+1:],inorder[k+1:]) - return root -root = construct(['A','B','D','E','C','F'],['D','B','E','A','F','C']) - -``` - -尝试AC发现,memory limit超,用大一点的数据测试RecursionError: maximum recursion depth exceeded。 - -根据网上的参考改成偏iteration一点的递归, AC通过 - -mark一下,为了避免数组的复杂操作,这里直接用左右界和数组的引用来代表一段前序遍历和中序遍历。直接用递归更改list本身不能AC,但是变成这样就可以AC,因为更改数组会拷贝数组带来很多内存和递归上的麻烦,是这样的么? - -这个技巧还比较常见,就是用原本list的角标,而不去cut list本身 - - -``` -class Solution(object): - def buildTree(self, preorder, inorder): - """ - :type preorder: List[int] - :type inorder: List[int] - :rtype: TreeNode - """ - def buildTree(preorder, inorder, lp, rp, li, ri): - if lp > rp or li > ri: - return None - - root = TreeNode(preorder[lp]) - k = inorder.index(preorder[lp]) - - # left node - left = buildTree(preorder, inorder, lp+1, lp + k - li, li, k - 1) - right = buildTree(preorder, inorder, lp + k - li + 1, rp, k+1, ri) - - root.left = left - root.right = right - - return root - - return buildTree(preorder, inorder, 0 , len(preorder) - 1, 0, len(inorder) -1) -``` diff --git "a/docs/Leetcode_Solutions/C++/106._construct_binary_tree_from_inorder_and_postorder_traversal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/106._construct_binary_tree_from_inorder_and_postorder_traversal \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 61331c520..000000000 --- "a/docs/Leetcode_Solutions/C++/106._construct_binary_tree_from_inorder_and_postorder_traversal \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,68 +0,0 @@ -###106. Construct Binary Tree from Inorder and Postorder Traversal - -题目: - - - -难度 : Medium - - -inorder 是 左 -> 根 -> 右 -postorder 是 左 -> 右 -> 根 - - -跟105基本一样 - -还是先弄了一个递归可用版本 - - -``` -def buildTree(inorder, postorder): - """ - :type preorder: List[int] - :type inorder: List[int] - :rtype: TreeNode - """ - if postorder == inorder == []: - return None - else: - rootVal = postorder[-1] - root = TreeNode(rootVal) - k = inorder.index(rootVal) - root.left = buildTree(inorder[:k],postorder[:k]) - root.right = buildTree(inorder[k+1:],postorder[k:-1]) - return root - -``` -照抄105 - - -``` -class Solution(object): - def buildTree(self, inorder, postorder): - """ - :type inorder: List[int] - :type postorder: List[int] - :rtype: TreeNode - """ - def buildTree(inorder, postorder, li, ri ,lp, rp ): - if lp > rp or li > ri: - return None - - root = TreeNode(postorder[rp]) - k = inorder.index(postorder[rp]) - - # left node - left = buildTree(inorder, postorder, li, k-1, lp, lp + k - li - 1) - right = buildTree(inorder, postorder, k+1, ri, lp+k-li, rp-1) - - root.left = left - root.right = right - - return root - - return buildTree(inorder, postorder, 0, len(inorder) - 1, 0, len(postorder) - 1) - -``` - - diff --git "a/docs/Leetcode_Solutions/C++/107._binary_tree_level_order_traversal_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/107._binary_tree_level_order_traversal_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a7fd3d732..000000000 --- "a/docs/Leetcode_Solutions/C++/107._binary_tree_level_order_traversal_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,48 +0,0 @@ -###107. Binary Tree Level Order Traversal II - -题目: - - - - -难度: - -Easy - - -用102 的算法作弊 - - -``` -# Definition for a binary tree node. -# class TreeNode(object): -# def __init__(self, x): -# self.val = x -# self.left = None -# self.right = None - -class Solution(object): - def levelOrderBottom(self, root): - """ - :type root: TreeNode - :rtype: List[List[int]] - """ - res = [] - - if root == None: return [] - - curLevel = [root] - while curLevel: - nextLevel = [] - tmpRes = [] - for node in curLevel: - tmpRes.append(node.val) - if node.left: nextLevel.append(node.left) - if node.right: nextLevel.append(node.right) - res.append(tmpRes) - curLevel = nextLevel - res.reverse() - return res -``` - - diff --git "a/docs/Leetcode_Solutions/C++/108._convert_sorted_array_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/108._convert_sorted_array_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 12705f918..000000000 --- "a/docs/Leetcode_Solutions/C++/108._convert_sorted_array_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,41 +0,0 @@ -###108. Convert Sorted Array to Binary Search Tree - -题目: - - - -难度: -Medium - - -思路: - -递归 - -- nums为空,return None -- nums 只有一个, return其为根节点 -- nums 大于一个,nums[n/2]为中间元素,根结点,nums[:mid]为左子树, nums[mid+1:]为右子树 - - -``` -class Solution(object): - def sortedArrayToBST(self, nums): - """ - :type nums: List[int] - :rtype: TreeNode - """ - n = len(nums) - - if n == 0 : - return None - if n == 1 : - return TreeNode(nums[0]) - else: - mid = n / 2 - root = TreeNode(nums[mid]) - root.left = self.sortedArrayToBST(nums[:mid]) - root.right = self.sortedArrayToBST(nums[mid+1:]) - return root - - -``` diff --git "a/docs/Leetcode_Solutions/C++/109._convert_sorted_list_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/109._convert_sorted_list_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 4ca36dc47..000000000 --- "a/docs/Leetcode_Solutions/C++/109._convert_sorted_list_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,47 +0,0 @@ -###109. Convert Sorted List to Binary Search Tree - - - -题目: - - - -难度: - -Medium - -思路: - -跟解array to binary search tree一样,递归,找到list中间点,把它变成root,左边为左树,右边为右子树 - -值得注意的是需要找到的是list中间的前一个,所以用一个dummy node,然后反复使用linked list找中点的代码 - -``` -class Solution(object): - def sortedListToBST(self, head): - """ - :type head: ListNode - :rtype: TreeNode - """ - - if head == None: - return None - elif head.next == None: - return TreeNode(head.val) - else: - dummy = ListNode(-1) - dummy.next = head - slow, fast = dummy, dummy - while fast.next and fast.next.next: - slow = slow.next - fast = fast.next.next - - # print slow.val - mid = slow.next - slow.next = None - - root = TreeNode(mid.val) - root.left = self.sortedListToBST(head) - root.right = self.sortedListToBST(mid.next) - return root -``` diff --git "a/docs/Leetcode_Solutions/C++/110._balanced_binary_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/110._balanced_binary_tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 4b32130f9..000000000 --- "a/docs/Leetcode_Solutions/C++/110._balanced_binary_tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,37 +0,0 @@ -###110. Balanced Binary Tree - -题目: - - - -难度: -Easy - - -全程递归中 - - - -``` -class Solution(object): - def isBalanced(self, root): - """ - :type root: TreeNode - :rtype: bool - """ - if root == None: - return True - - lh = self.height(root.left) - rh = self.height(root.right) - - if abs(lh-rh) <= 1 and self.isBalanced(root.left) and self.isBalanced(root.right): - return True - return False - - - def height(self, node): - if node == None: - return 0 - return 1 + max(self.height(node.left),self.height(node.right)) -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/111._minimum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/111._minimum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index d84421b0c..000000000 --- "a/docs/Leetcode_Solutions/C++/111._minimum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,94 +0,0 @@ -### 111. Minimum Depth of Binary Tree - -题目: - - - -难度: - -Easy - - -思路,看完题目我想当然的认为就是直接递归取最小的值,代码如下: -``` -class Solution(object): - def minDepth(self, root): - """ - :type root: TreeNode - :rtype: int - """ - if not root: - return 0 - return 1 + min(map(self.minDepth, (root.left, root.right))) -``` - - -但是没过,有一种特殊情况就是 - -注意```leaf node```反正就是没有```left```和```right```的 - -比如下图 - - -``` -1 - \ - 2 -``` - -```2```是一个孩子节点 - -这种情况应该输出```2```而不是```1``` - - - -唯一的特殊情况就是上面这种了,因为```root```下只有一个左节点或者是右节点,这样另外一边的空节点并不算是```leaf node``` - -```leaf node: itself is not null but it has both children null``` - -因此要避免这种情况,代码改成下面: - - -```python -# Definition for a binary tree node. -# Definition for a binary tree node. -# class TreeNode(object): -# def __init__(self, x): -# self.val = x -# self.left = None -# self.right = None - -class Solution(object): - def minDepth(self, root): - """ - :type root: TreeNode - :rtype: int - """ - if not root: - return 0 - depth_under_root = map(self.minDepth, (root.left, root.right)) - return 1 + (min(depth_under_root) or max(depth_under_root)) -``` - - -所以还是要养成多写edge case的好习惯,也许就帮你避免了general写法的特例,代码如下 -```python -class Solution(object): - def minDepth(self, root): - """ - :type root: TreeNode - :rtype: int - """ - if root == None: - return 0 - elif root.left == None and root.right == None: - return 1 - else : - if root.left == None: - return 1 + self.minDepth(root.right) - elif root.right == None: - return 1 + self.minDepth(root.left) - else: - return min(1+ self.minDepth(root.left), 1+ self.minDepth(root.right)) - -``` diff --git "a/docs/Leetcode_Solutions/C++/112._path_sum \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/112._path_sum \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 1f6b07a51..000000000 --- "a/docs/Leetcode_Solutions/C++/112._path_sum \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,28 +0,0 @@ -### 112. Path Sum - -题目: - - - -难度: - -Easy - - -递归 - -```python -class Solution(object): - def hasPathSum(self, root, sum): - """ - :type root: TreeNode - :type sum: int - :rtype: bool - """ - if not root: - return False - if root.left or root.right: - return self.hasPathSum(root.left, sum-root.val) or self.hasPathSum(root.right, sum-root.val) - else: - return root.val == sum -``` diff --git "a/docs/Leetcode_Solutions/C++/113._path_sum_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/113._path_sum_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index d1f2ea9c6..000000000 --- "a/docs/Leetcode_Solutions/C++/113._path_sum_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,40 +0,0 @@ -### 113. Path Sum II - -题目: - - - - - -tag : DFS - - -难度 : Medium - - -注意宁愿写几次curList + [root.val] 也不要直接传一个list进去,因为list pass by reference的亏已经吃过了 - -```python -class Solution(object): - def pathSum(self, root, sum): - """ - :type root: TreeNode - :type sum: int - :rtype: List[List[int]] - """ - res = [] - self.auxPathSum(root, sum, [], res) - return res - def auxPathSum(self, root, sum, cur_list, cur_lists): - if not root: - return - sum -= root.val - if sum == 0 and not root.left and not root.right: - cur_lists.append(cur_list + [root.val]) - return - if root.left: - self.auxPathSum(root.left, sum, cur_list + [root.val], cur_lists) - if root.right: - self.auxPathSum(root.right, sum, cur_list + [root.val], cur_lists) -``` - diff --git "a/docs/Leetcode_Solutions/C++/114._flatten_binary_tree_to_linked_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/114._flatten_binary_tree_to_linked_list \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 81ad647ca..000000000 --- "a/docs/Leetcode_Solutions/C++/114._flatten_binary_tree_to_linked_list \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,71 +0,0 @@ -### 114. Flatten Binary Tree to Linked List - -题目: - - - -难度: - -Medium - -这道题看了hint,说每个node的右节点都是相应先序遍历中它的下一个节点。 -所以我的思路是先把先序遍历的node顺序搞出来,然后对于这里面的每一个节点,只需要做两个操作: -1. node.left = None -2. node.right = 相应先序遍历中node的下一个节点 - -```python -class Solution(object): - def flatten(self, root): - """ - :type root: TreeNode - :rtype: void Do not return anything, modify root in-place instead. - """ - def preorder(root): - res = [] - if not root: - return res - res.append(root) - if root.left: - res.extend(preorder(root.left)) - if root.right: - res.extend(preorder(root.right)) - return res - if not root: - return - node_order = preorder(root) - for i in range(len(node_order)-1): - node_order[i].left = None - node_order[i].right = node_order[i+1] - node_order[-1].left = None - node_order[-1].right = None -``` -beat 40.67% - -另外一种解法: -1. copy the left and right subtree -2. then cut root’s left subtree -3. do DFS -4. left and right has been flattened and connect them left and right back to the root - -```python -class Solution(object): - def flatten(self, root): - """ - :type root: TreeNode - :rtype: void Do not return anything, modify root in-place instead. - """ - if not root: - return - left_node = root.left - right_node = root.right - root.left = None - self.flatten(left_node) - self.flatten(right_node) - if left_node: - root.right = left_node - while left_node.right: - left_node = left_node.right - left_node.right = right_node -``` -beat 32.18% - diff --git "a/docs/Leetcode_Solutions/C++/116._populating_next_right_pointers_in_each_node \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/116._populating_next_right_pointers_in_each_node \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index ed51a5c1e..000000000 --- "a/docs/Leetcode_Solutions/C++/116._populating_next_right_pointers_in_each_node \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,36 +0,0 @@ -###116. Populating Next Right Pointers in Each Node - -题目: - - - - -难度: - -Medium - -思路: 跟level print一样,把每个level由左到右记录。 -然后这层level的右指向右,最后一个指向None。 -处理一下边界条件,完工。 - -看题目tag给的DFS,所以是否有哪种push & pop stack的方法可以特别来处理指向呢-》 有待研究 - -``` -class Solution(object): - def connect(self, root): - """ - :type root: TreeLinkNode - :rtype: nothing - """ - if root == None: return root - thislevel = [root] - while thislevel: - nextlevel = list() - for n in thislevel: - if n.left: nextlevel.append(n.left) - if n.right: nextlevel.append(n.right) - for i in range(len(thislevel)-1): - thislevel[i].next = thislevel[i+1] - thislevel[-1].next = None - thislevel = nextlevel -``` diff --git "a/docs/Leetcode_Solutions/C++/118._pascal's_triangle \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/118._pascal's_triangle \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 72e7a44f9..000000000 --- "a/docs/Leetcode_Solutions/C++/118._pascal's_triangle \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,36 +0,0 @@ -###118. Pascal's Triangle - -题目: - - - - -难度: - -Easy - - -高中数学知识,把行数理理清楚就ok - - -``` -class Solution(object): - def generate(self, numRows): - """ - :type numRows: int - :rtype: List[List[int]] - """ - res = [[1],[1,1]] - if numRows < 3: - return res[:numRows] - for i in range(3, numRows+1): - tmp = [1] * i - for j in range(1,i-1): - tmp[j] = res[i-2][j-1] + res[i-2][j] - res.append(tmp) - return res - - -``` - - diff --git "a/docs/Leetcode_Solutions/C++/119. Pascal's Triangle II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/119. Pascal's Triangle II \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index dbf97df9d..000000000 --- "a/docs/Leetcode_Solutions/C++/119. Pascal's Triangle II \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,59 +0,0 @@ -### 119. Pascal's Triangle II - -题目: - - -难度 : Easy - - - -思路: - -高中数学 - - - -这种算法会超时||| - -``` -class Solution(object): - def getRow(self, rowIndex): - """ - :type rowIndex: int - :rtype: List[int] - """ - def combNum(n,k): - if k == 0 or k == n : - return 1 - return combNum(n-1,k-1) + combNum(n-1,k) - res = [] - for i in range(rowIndex + 1): - res.append(combNum(rowIndex,i)) - - return res -``` - - - -用118改的,AC代码 - - - -``` -class Solution(object): - def getRow(self, rowIndex): - """ - :type rowIndex: int - :rtype: List[int] - """ - res = [[1],[1,1]] - if rowIndex < 2: - return res[rowIndex] - for i in range(3, rowIndex+2): - tmp = [1] * i - for j in range(1,i-1): - tmp[j] = res[i-2][j-1] + res[i-2][j] - res.append(tmp) - return res[-1] -``` - diff --git "a/docs/Leetcode_Solutions/C++/120. Triangle \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/120. Triangle \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 954a28cb8..000000000 --- "a/docs/Leetcode_Solutions/C++/120. Triangle \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,72 +0,0 @@ -### 120. Triangle - -题目: - - - -难度: -Medium - -思路: - -先是要注意下这句话:**Each step you may move to adjacent numbers on the row below** - -在考虑adjacent number的定义,并不是角标的adjacent,而是真的形态上的adjacent - -比如 - -``` - -1 -1 - 2 1 最小 1 0 --2 2 0 -1 2 0 -``` - -最小是-1, 而并不能从第二排的0跳到第三排的第一个造成-2. - - so AC代码 - -感觉关于dp,我可能还需要补一些东西,因为我不能做到O(n) space - -``` -class Solution(object): - def minimumTotal(self, triangle): - """ - :type triangle: List[List[int]] - :rtype: int - """ - # n total rows of triangle - n = len(triangle) - if n == 1: return triangle[0][0] - elif n == 2 : return min(triangle[0][0] + triangle[1][0], triangle[0][0] + triangle[1][1]) - else: - res = [] - for i in range(n): - res.append(triangle[i]) - - res[0] = [triangle[0][0]] - res[1] = [triangle[0][0] + triangle[1][0], triangle[0][0] + triangle[1][1]] - - for i in range(2,n): - for j in range(i+1): - if j == 0: - res[i][j] = res[i-1][j] + triangle[i][j] - elif j == i: - res[i][j] = res[i-1][-1] + triangle[i][j] - else: - res[i][j] = min(res[i-1][j-1],res[i-1][j]) + triangle[i][j] - - return min(res[-1]) -``` - - - - - - - - - - - - - diff --git "a/docs/Leetcode_Solutions/C++/121._Best_Time_to_Buy_and_Sell_Stock \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/121._Best_Time_to_Buy_and_Sell_Stock \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 2edfa898b..000000000 --- "a/docs/Leetcode_Solutions/C++/121._Best_Time_to_Buy_and_Sell_Stock \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,59 +0,0 @@ -### 121. Best Time to Buy and Sell Stock - -题目: - - - -难度: - -Easy - - -思路 - -All the straight forward solution should work, but if the interviewer twists the question slightly -by giving the difference array of prices, Ex: for ```{1, 7, 4, 11}```, if he gives ```{0, 6, -3, 7}```, -you might end up being confused. - -Here, the logic is to calculate the difference ```(maxCur += prices[i] - prices[i-1])``` -of the original array, and find a contiguous subarray giving maximum profit. -If the difference falls below ```0```, reset it to zero. - -参考[Maximum subarray problem](https://en.wikipedia.org/wiki/Maximum_subarray_problem), -[Kadane's Algorithm](https://discuss.leetcode.com/topic/19853/kadane-s-algorithm-since-no-one-has-mentioned-about-this-so-far-in-case-if-interviewer-twists-the-input) - - -``` -Why maxCur = Math.max(0, maxCur += prices[i] - prices[i-1]); ? - -Well, we can assume opt(i) as the max Profit you will get if you sell the stock at day i; - -We now face two situations: - -We hold a stock at day i, which means opt(i) = opt(i - 1) - prices[i - 1] + prices[i] (max Profit you can get if you sell stock at day(i-1) - money you lose if you buy the stock at day (i-1) + money you gain if you sell the stock at day i. - -We do not hold a stock at day i, which means we cannot sell any stock at day i. In this case, money we can get at day i is 0; - -opt(i) is the best case of 1 and 2. - -So, opt(i) = Max{opt(i - 1) - prices[i - 1] + prices[i], 0} -``` - - -```python -class Solution(object): - def maxProfit(self, prices): - """ - :type prices: List[int] - :rtype: int - """ - if not prices: - return 0 - res, max_cur = 0, 0 - for i in range(1, len(prices)): - max_cur = max(0, max_cur+prices[i]-prices[i-1]) - res = max(res, max_cur) - return res -``` - - diff --git "a/docs/Leetcode_Solutions/C++/125._valid_palindrome \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/125._valid_palindrome \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index d3e09f6c2..000000000 --- "a/docs/Leetcode_Solutions/C++/125._valid_palindrome \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,46 +0,0 @@ -### 125. Valid Palindrome - -题目: - - - -难度: - -Easy - - - -就是比较reversed string 和原本的是否相等. - - -```python -class Solution(object): - def isPalindrome(self,s): - """ - :type s: str - :rtype: bool - """ - - new=[] - s = s.lower() - - for i in s: - if '0'<=i<='9' or 'a'<=i<='z': - new.append(i) - - return new == new[::-1] -``` - -或者用正则,详见[re.sub()用法](http://blog.csdn.net/geekleee/article/details/75309433) -瞬间```beats 97.71%``` -```python -class Solution(object): - def isPalindrome(self, s): - """ - :type s: str - :rtype: bool - """ - newString = re.sub("[^0-9a-zA-Z]+", "", s) - return newString.lower() == newString.lower()[::-1] -``` - diff --git "a/docs/Leetcode_Solutions/C++/126. Word Ladder II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/126. Word Ladder II \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 99e75f495..000000000 --- "a/docs/Leetcode_Solutions/C++/126. Word Ladder II \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,99 +0,0 @@ -### 126. Word Ladder II - -题目: - - - -难度: - -Hard - -其实关键在于怎么优化和表示图 - - - -思路来自1p3a: - -这题目实在是太适合python了  如此简洁 - -就是基本的bfs,典型的level order traverse -有两个坑: - -1. 不要判断字典里的某两个word是否只相差一个字母,而是要判断某个word的邻居(和他只相差一个字母的所有word)是否在字典里,这样的改进会使这一步的复杂度下降很多,否则超时妥妥 -2. 每一轮访问过的word一定要从字典中删除掉,否则一定会超时 - -最后见到end word就收 -完成 - - - -拿题目的例子来看: - -```\ - hit - | - hot - / \ - dot lot - | | - dog log - \ / - cog -``` - -routine 字典,然后再根据这个来寻找路径 - -`{'cog': ['log', 'dog'], 'hit': [], 'log': ['lot'], 'dog': ['dot'], 'hot': ['hit'], 'lot': ['hot'], 'dot': ['hot']}` - -```'cog': ['log', 'dog']```这里的意思就是说在走到```'cog'```之前尝试过了```'log'```和```'dog'```,即previous tried node - -而生成字典的过程就是BFS的,此处保证寻找的路径就是最短的。 - -AC代码: - -```python -class Solution(object): - def findLadders(self, beginWord, endWord, wordList): - """ - :type beginWord: str - :type endWord: str - :type wordList: List[str] - :rtype: List[List[str]] - """ - - def backtrack(result, trace, path, word): - if len(trace[word]) == 0: - result.append([word] + path) - else: - for prev in trace[word]: - backtrack(result, trace, [word] + path, prev) - - lookup = set(wordList) | set([beginWord]) - res, cur, routine = [], set([beginWord]), {word: [] for word in lookup} - while cur and endWord not in cur: - next_queue = set() - for word in cur: - lookup.remove(word) - for word in cur: - for i in range(len(word)): - for j in 'abcdefghijklmnopqrstuvwxyz': - candidate = word[:i] + j + word[i + 1:] - if candidate in lookup: - next_queue.add(candidate) - routine[candidate].append(word) - cur = next_queue - - if cur: - backtrack(res, routine, [], endWord) - return res -``` - - - -这样可以beat 69.09% - - - - - - diff --git "a/docs/Leetcode_Solutions/C++/127._word_ladder \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/127._word_ladder \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 42a14a7af..000000000 --- "a/docs/Leetcode_Solutions/C++/127._word_ladder \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,43 +0,0 @@ -### 127. Word Ladder - -题目: - - - - -难度: - -Medium - -tag可以算BFS,其实就是求shortest path的变体 - -Reference from [kamyu104](https://github.com/kamyu104/LeetCode/blob/71e0ba555ee49befa01fcd9fc78c3528e2ab63a9/Python/word-ladder.py) - -```python -class Solution(object): - def ladderLength(self, beginWord, endWord, wordList): - """ - :type beginWord: str - :type endWord: str - :type wordList: List[str] - :rtype: int - """ - distance, cur, visited, lookup = 0, [beginWord], set([beginWord]), set(wordList) - - while cur: - next_queue = [] - - for word in cur: - if word == endWord: - return distance + 1 - for i in xrange(len(word)): - for j in 'abcdefghijklmnopqrstuvwxyz': - candidate = word[:i] + j + word[i + 1:] - if candidate not in visited and candidate in lookup: - next_queue.append(candidate) - visited.add(candidate) - distance += 1 - cur = next_queue - - return 0 -``` diff --git "a/docs/Leetcode_Solutions/C++/128._Longest_Consecutive_Sequence \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/128._Longest_Consecutive_Sequence \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 53e57505e..000000000 --- "a/docs/Leetcode_Solutions/C++/128._Longest_Consecutive_Sequence \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,70 +0,0 @@ -### 128. Longest Consecutive Sequence - -题目: - - - -难度: - -Hard - - -### 思路 -首先去重复,时间```O(N)```,然后将所有元素都放到一个字典中,这样判断一个数字的后续在不在这个字典中,如果存在就一直判断下去,每次判断只要```O(1)```。 - -对于每个数,如果他的前续已经判断过了,他就没有必要判断了,继续判断下一个数,即: -``` -if num - 1 in nums: - continue -``` - - -AC代码: - -```python -class Solution(object): - def longestConsecutive(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - nums = set(nums) - tmp = {} - for num in nums: - tmp[num] = 1 - res = 0 - for num in nums: - if num - 1 not in nums: - y = num + 1 - while y in nums: - y += 1 - res = max(res, y - num) - return res -``` - -但其实```set```和字典的```in```判断都是```O(1)``` - -```dict```与```set```实现原理是一样的,都是将实际的值放到```list```中。唯一不同的在于hash函数操作的对象,对于```dict```,```hash```函数操作的是其```key```,而对于```set```是直接操作的它的元素,假设操作内容为```x```,其作为因变量,放入```hash```函数,通过运算后取```list```的余数,转化为一个```list```的下标,此下标位置对于```set```而言用来放其本身,而对于```dict```则是创建了两个```list```,一个```list```该下表放此```key```,另一个```list```中该下标方对应的```value```。参考[python dict与set 的实现](http://www.cnblogs.com/pengsixiong/p/5326893.html) - -  其中,我们把实现set的方式叫做Hash Set,实现dict的方式叫做Hash Map/Table(注:map指的就是通过key来寻找value的过程) - -```set```和```dict```的唯一区别仅在于没有存储对应的```value```,但是,```set```的原理和```dict```一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证```set```内部“不会有重复元素”。 - -因此,代码也可以写成这样 -```python -class Solution(object): - def longestConsecutive(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - nums = set(nums) - res = 0 - for num in nums: - if num - 1 not in nums: - y = num + 1 - while y in nums: - y += 1 - res = max(res, y - num) - return res -``` diff --git "a/docs/Leetcode_Solutions/C++/129._sum_root_to_leaf_numbers \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/129._sum_root_to_leaf_numbers \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index cedbdcd74..000000000 --- "a/docs/Leetcode_Solutions/C++/129._sum_root_to_leaf_numbers \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,37 +0,0 @@ -###129. Sum Root to Leaf Numbers - -题目: - - - -难度: - -Medium - -其实递归不难想到,不过我自己做错在细节方面 - -如果只有单支,每朝下走一层,代表的数字都增加10, 10* 原本的 + 新节点的数字,最终也是用这个来解 - -``` -class Solution(object): - def sumNumbers(self, root): - """ - :type root: TreeNode - :rtype: int - """ - return self.calSum(root,0) - - - def calSum(self,root,curSum): - if root == None: - return 0 - else: - curSum = curSum * 10 + root.val - if root.left == None and root.right == None: - return curSum - else: - return self.calSum(root.left, curSum) + self.calSum(root.right, curSum) - - - -``` diff --git "a/docs/Leetcode_Solutions/C++/130._surrounded_regions \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/130._surrounded_regions \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a0f76e264..000000000 --- "a/docs/Leetcode_Solutions/C++/130._surrounded_regions \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,147 +0,0 @@ -###130. Surrounded Regions - - -题目: - - - - -难度: - -Medium - - -思路: - -loop,然后碰到O做DFS/BFS找出O所在区域: - -- 貌似只要O没有碰壁,O就总是被X包围着? -- 所以找出O的范围,然后看它是否碰壁,没有碰壁则mark不需要修改 - -但是这道题折磨我了很久,因为它有毛病。。。。 -它给的input例子是 -["XXX","XOX","XXX"] -也怪我 input写着List[List[str]] - -但实际上的输入是: -[[u'X', u'X', u'X'], [u'X', u'X', u'X'], [u'X', u'X', u'X']] - - -还要mark unicode - -还有就是学会了新的可以函数之下定义函数,这样就不用什么self了,用起来真方便,但是这样的思路做起来会超时。 - - - -``` -class Solution(object): - def solve(self, board): - """ - :type board: List[List[str]] - :rtype: void Do not return anything, modify board in-place instead. - """ - - - def shouldOChange(i, j): - """ - return x,y area and whether they shouldChange - """ - shouldChange = True - Oarea = [] - s = [] - s.append((i,j)) - while s: - (x,y) = s.pop() - if x == 0 or x == row - 1 or y == 0 or y == col -1 : - shouldChange = False - visited[x][y] = 1 - Oarea.append((x,y)) - if legal(x-1,y): - s.append((x-1,y)) - if legal(x+1,y): - s.append((x+1,y)) - if legal(x,y-1): - s.append((x,y-1)) - if legal(x,y-1): - s.append((x,y+1)) - return Oarea,shouldChange - - def legal(x,y): - return x>=0 and x < row and y>=0 and y < col and board[x][y] == 'O' and visited[x][y] == 0 - - - row = len(board) - col = len(board[0]) if row else 0 - - visited = [[0 for i in range(col)] for j in range(row)] - - for i in range(row): - for j in range(col): - if board[i][j] == 'O' and visited[i][j] == 0: - Oarea, shouldChange = shouldOChange(i,j) - print Oarea,shouldChange - if shouldChange: - for (x,y) in Oarea: - board[x][y] = u'X' - - print board -``` - - -另一个思路就是对周围碰壁的O做BFS/DFS,碰壁的和碰壁相连的是不需要修改的。这样就时间复杂度降低很多了。 - -原本是O(n^2)可能做DFS/BFS。现在是O(4n)做DFS/BFS,但是发现依旧超时,最后查看了别人的解法,因为我的解法里面多了一个存储工具,相当于,把需要更换location的位置存储起来,最后做loop的时候去查,然后这样还是很耗时。 - -而一个简便的变法是把这些特别的碰壁的'O' mark出来,这样最后loop的时候不改变这些'O',只改变不碰壁的'O',又可以减少工作量。同时依旧可以使用collection里面的queue - - - -AC代码 - -``` -class Solution(object): - def solve(self, board): - """ - :type board: List[List[str]] - :rtype: void Do not return anything, modify board in-place instead. - """ - def legal(x,y): - return x>=0 and x < row and y>=0 and y < col and board[x][y] == 'O' and visited[x][y] == 0 - - - row = len(board) - col = len(board[0]) if row else 0 - - visited = [[0 for i in range(col)] for j in range(row)] - - notChangeOArea = [] - queue = collections.deque() - - for j in range(col): - if board[0][j] == 'O': queue.append((0,j)) - if board[row-1][j] == 'O': queue.append((row-1,j)) - for i in range(row): - if board[i][0] == 'O': queue.append((i,0)) - if board[i][col-1] == 'O': queue.append((i,col-1)) - - while queue: - (x,y) = queue.popleft() - board[x][y] = '$' - visited[x][y] = 1 - if legal(x-1,y): - queue.append((x-1,y)) - if legal(x+1,y): - queue.append((x+1,y)) - if legal(x,y-1): - queue.append((x,y-1)) - if legal(x,y+1): - queue.append((x,y+1)) - - for i in range(row): - for j in range(col): - if board[i][j] == '$' : board[i][j] = 'O' - elif board[i][j] == 'O' : board[i][j] = 'X' -``` - - -同时发现,用这种方式,无论是否使用collection里面的queue,都能AC \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/131._palindrome_partitioning \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/131._palindrome_partitioning \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 45d404c89..000000000 --- "a/docs/Leetcode_Solutions/C++/131._palindrome_partitioning \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,48 +0,0 @@ -###131. Palindrome Partitioning - -题目: - - - -难度: -Medium - -知道一定是用递归做,但是在怎么拆的部分疑惑了,然后看了hint - -key部分长这样,拆法是类似于combination,然后这个len(s) == 0是确保能被拆为palindrome,因为这样剩下的string才是空的 - - -这个recursion tree是这样的,感觉时间复杂度是O(n!),因为每次树都branch n个分支 - -``` - -class Solution(object): - def partition(self, s): - """ - :type s: str - :rtype: List[List[str]] - """ - self.res = [] - self.dfs(s,[]) - return self.res - - - def dfs(self, s, stringList): - if len(s) == 0: - self.res.append(stringList) - for i in range(1,len(s)+1): - if self.isPalindrome(s[:i]): - self.dfs(s[i:],stringList + [s[:i]]) - - def isPalindrome(self, s): - if len(s) <= 1: - return True - return s[0] == s[-1] and self.isPalindrome(s[1:-1]) - -a = Solution() -print a.partition("aab") - -# [['a', 'a', 'b'], ['aa', 'b']] -``` - -输出是每次必定从单个char的list开始,然后单个char 配 palindrome word,然后palindrome word再来配char... \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/133._clone_graph \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/133._clone_graph \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 39921e282..000000000 --- "a/docs/Leetcode_Solutions/C++/133._clone_graph \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,66 +0,0 @@ -###133. Clone Graph - - -题目: - - - -难度: -Medium - - - -思路: - -DFS或者BFS把graph traverse一遍,边traverse边复制。因为nodes are labeled uniquely,这就是方便的地方,但是注意node可能重复和有self-loop. - -所以先建立新的root node,然后有一个dict把node label和node一一对应。 - -用stack来存储原本的graph root node,对原本的graph做DFS,这个时候,如果这个node的neighbor是已经出现过,那么我们就是去修改原本的existNode,让它指向存在的neighbor,否则创建新的,再把它们联系起来,谷歌了一下,别人写的比我更简单。anyway,先AC。 - - - -`if cur.label in createdNodes:`多余。 - - - - -``` -class Solution(object): - def cloneGraph(self, node): - """ - :type node: UndirectedGraphNode - :rtype: UndirectedGraphNode - """ - if node == None: return None - - root = UndirectedGraphNode(node.label) - # must 1 to 1 - createdNodes = {} - createdNodes[root.label] = root - - stack = [] - stack.append(node) - - while stack: - cur = stack.pop() - if cur.label in createdNodes: - existNode = createdNodes[cur.label] - for neighbor in cur.neighbors: - if neighbor.label in createdNodes: - existNeighbor = createdNodes[neighbor.label] - existNode.neighbors.append(existNeighbor) - else: - newNode = UndirectedGraphNode(neighbor.label) - existNode.neighbors.append(newNode) - createdNodes[neighbor.label] = newNode - stack.append(neighbor) - return root -``` - - - -看了别人的代码,貌似比我又写的简洁。 - - - diff --git "a/docs/Leetcode_Solutions/C++/136._single_number \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/136._single_number \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 18540da0f..000000000 --- "a/docs/Leetcode_Solutions/C++/136._single_number \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,42 +0,0 @@ -### 136. Single Number - - - -题目: - - - -难度: - -Easy - - -思路: - -位运算,终于要take it了 - -非常常见的一道算法题,将所有数字进行异或操作即可。对于异或操作明确以下三点: - -- 一个整数与自己异或的结果是0 -- 一个整数与0异或的结果是自己 -- 异或操作满足交换律,即a^b=b^a - -Python的位操作: - - -神奇的解法: - - -```python -class Solution(object): - def singleNumber(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - res = nums[0] - for i in nums[1:]: - res ^= i - return res -``` - diff --git "a/docs/Leetcode_Solutions/C++/139._word_break \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/139._word_break \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 815737dec..000000000 --- "a/docs/Leetcode_Solutions/C++/139._word_break \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,59 +0,0 @@ -### 139. Word Break - -题目: - - - -难度: - -Medium - - - -```ok[i]``` tells whether ```s[:i]``` can be built. - -```python -class Solution(object): - def wordBreak(self, s, wordDict): - """ - :type s: str - :type wordDict: List[str] - :rtype: bool - """ - ok = [True] - for i in range(1, len(s)+1): - ok += [any(ok[j] and s[j:i] in wordDict for j in range(i))] - return ok[-1] -``` - -但是往list里面加数据的方法有快有慢,下面是对比: -``` ->>> from timeit import timeit ->>> timeit('x.append(1)', 'x = []', number=10000000) -1.9880003412529277 ->>> timeit('x += 1,', 'x = []', number=10000000) -1.2676891852971721 ->>> timeit('x += [1]', 'x = []', number=10000000) -3.361207239950204 -``` -因此我们可以将代码直接换成下面的格式 -```python -ok += any(ok[j] and s[j:i] in wordDict for j in range(i)) # 会报错 -``` -但是这样会报错,TypeError: 'bool' object is not iterable,因此bool类型数据不能这样加,别的可以(list类型本身当然要注意哈) - -因此在这个例子中我们这样: -```python -class Solution(object): - def wordBreak(self, s, wordDict): - """ - :type s: str - :type wordDict: List[str] - :rtype: bool - """ - ok = [True] - for i in range(1, len(s)+1): - ok += any(ok[j] and s[j:i] in wordDict for j in range(i)), - return ok[-1] -``` -代码里面的那个逗号构建了一个tuple,也会快一点 diff --git "a/docs/Leetcode_Solutions/C++/140._word_break_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/140._word_break_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 6333bf8fe..000000000 --- "a/docs/Leetcode_Solutions/C++/140._word_break_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,113 +0,0 @@ - -### 140. Word Break II - -题目: - - - -难度: - -Medium - - - -还是backtracking,会超时 - -``` -class Solution(object): # 此法超时 -    def wordBreak(self, s, wordDict): - """ - :type s: str - :type wordDict: Set[str] - :rtype: bool - """ - self.res = [] - self.wordBreakLst("",s,wordDict) - return self.res - - - def wordBreakLst(self, lst, rest, wordDict): - if rest == '': - self.res.append(lst.rstrip()) - # print lst - for i in range(1+len(rest)): - if rest[:i] in wordDict: - self.wordBreakLst(lst + rest[:i] + " ",rest[i:],wordDict) - -``` - - - - -然后看到有把word break i 结合起来减少时间复杂度的作法。 - - -做法如下,聪明: - -就是对于每一个s,我们来check它是否可以break,如果不可以,就不用做相应的操作了 - - -```python -class Solution(object): - def wordBreak(self, s, wordDict): - """ - :type s: str - :type wordDict: List[str] - :rtype: List[str] - """ - self.res = [] - self.wordBreakLst(s, wordDict, '') - return self.res - - def check(self, s, wordDict): - ok = [True] - for i in range(1, len(s) + 1): - ok += any(ok[j] and s[j:i] in wordDict for j in range(i)), - return ok[-1] - - - def wordBreakLst(self, s, wordDict, stringLst): - if self.check(s, wordDict): - if len(s) == 0 : self.res.append(stringLst[1:]) # 因为最开始也加了一个空格 - for i in range(1,len(s)+1): - if s[:i] in wordDict: - self.wordBreakLst(s[i:], wordDict, stringLst + ' ' + s[:i]) -``` - - -但是其实 - -``` -s = "aaaaaa" -wordDict = ["a","aa","aaa"] -print a.wordBreak(s,wordDict)还是会loop很多次 - -不过像 -s = "aabbb" -wordDict = ["a","abbb"] -就会极其的减少loop次数 -``` - - -看看stefan大神的做法: - -```sentences(i)``` returns a list of all sentences that can be built from the suffix ```s[i:]```. - -```python -class Solution(object): - def wordBreak(self, s, wordDict): - """ - :type s: str - :type wordDict: List[str] - :rtype: List[str] - """ - memo = {len(s): ['']} - def sentences(i): - if i not in memo: - memo[i] = [s[i:j] + (tail and ' ' + tail) - for j in range(i+1, len(s)+1) - if s[i:j] in wordDict - for tail in sentences(j)] - return memo[i] - return sentences(0) -``` diff --git "a/docs/Leetcode_Solutions/C++/141._linked_list_cycle \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/141._linked_list_cycle \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 2d50901e9..000000000 --- "a/docs/Leetcode_Solutions/C++/141._linked_list_cycle \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,105 +0,0 @@ -### 141. Linked List Cycle - -题目: - - - - -难度: - -Easy - - -想法一: - -直接超时 - -``` -class Solution(object): - def hasCycle(self, head): - """ - :type head: ListNode - :rtype: bool - """ - if head == None: return False - lst = [] - cur = head - while cur: - if cur in lst: - return True - lst.append(cur) - cur = cur.next - return False -``` - - - -想法二:相当用boolean array记录某个点是否被访问过,时间,空间复杂度都是O(n) - -``` -class Solution(object): - def hasCycle(self, head): - """ - :type head: ListNode - :rtype: bool - """ - if head == None: return False - dictx = {} - cur = head - while cur: - if cur in dictx: - return True - dictx[cur] = 1 - cur = cur.next - return False -``` - -结果这种方法的run time还比较快 - -查了一下,有解答说可以有空间复杂度O(1),时间复杂度O(n)。两个指针,一个快一个慢,快的每次走两步,慢的每次走一步,如果有环,最终会在某处相遇。这也是一个算法。这种快慢指针配合已经不是第一次遇到了,比如找linklist中间的node。 - - - -但是并没有觉得这样的算法是O(n), worst case time complexity is O(N+K), which is O(n). - - -```python -python -class Solution(object): - def hasCycle(self, head): - """ - :type head: ListNode - :rtype: bool - """ - slow = head - fast = head - while fast and fast.next: - slow = slow.next - fast = fast.next.next - if slow == fast: - return True - return False -``` - - -```java -java -public class Solution { - public boolean hasCycle(ListNode head) { - if (head == null){ - return false; - } - ListNode fast = head; - ListNode slow = head; - while (fast != null && slow != null && fast.next != null){ - fast = fast.next.next; - slow = slow.next; - if (slow == fast){ - return true; - } - } - return false; - } -} -``` - diff --git "a/docs/Leetcode_Solutions/C++/142_Linked_List_Cycle_II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/142_Linked_List_Cycle_II \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index cd8875929..000000000 --- "a/docs/Leetcode_Solutions/C++/142_Linked_List_Cycle_II \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,56 +0,0 @@ -### 142. Linked List Cycle II - -题目: - - - - -难度: - -Medium - -思路: -稍微改了一下[141](https://github.com/Lisanaaa/thinking_in_lc/blob/master/141._linked_list_cycle.md),这里稍微注意一下```while-else clause```就行 - -Let’s say, the first node is node ```0```, the cycle starts at node ```L```, and the length of the cycle is ```C```; -Moreover, after ```t``` steps, ```fast``` catches ```slow```. - -Now we know that fast totally traveled ```2t``` nodes, and slow traveled ```t``` nodes - -Then we have: -```2t - t = nC``` (where ```n``` is an positive integer.) -i.e. ```t=nC``` - -Now, think about that, at step ```t```, if we travels ```L``` more steps, where are we? -i.e. if we travel ```L+t = L + nC``` steps in total, where are we? - -Absolutely, at the start of the cycle, because we have covered the first ```L``` nodes once and the entire cycle ```n``` times. - -So, if we travel ```L``` more steps at time ```t```, then we get the start of the cycle. - -However, how can we travel exactly ```L``` step? -The answer is to use an other pointer to travel from node ```0```, and when they meet together, it is exactly ```L``` steps and both of them are at the start of the cycle. - -参考[LostSummer233的解答](https://leetcode.com/problems/linked-list-cycle-ii/discuss/44833) -```python -class Solution(object): - def detectCycle(self, head): - """ - :type head: ListNode - :rtype: bool - """ - slow = fast = head - while fast and fast.next: - slow = slow.next - fast = fast.next.next - if slow == fast: - break - else: - return None - while head != slow: - slow = slow.next - head = head.next - return head -``` - - diff --git "a/docs/Leetcode_Solutions/C++/143._reorder_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/143._reorder_list \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 59c9fb9fb..000000000 --- "a/docs/Leetcode_Solutions/C++/143._reorder_list \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,112 +0,0 @@ -###143. Reorder List - -题目: - - - - -难度: - -Medium - -超时 - - -``` - -class Solution(object): - def reorderList(self, head): - """ - :type head: ListNode - :rtype: void Do not return anything, modify head in-place instead. - """ - head = self.reorder(head) - - - def reorder(self, head): - if head == None or head.next == None or head.next.next == None: - return head - - l0 = head - l1 = head.next - ln_1 = self.oneNodeTail(head) - ln =ln_1.next - - l0.next = ln - ln_1.next = None - ln.next = self.reorder(l1) - return l0 - - - def oneNodeTail(self, head): - if head == None or head.next == None or head.next.next == None: - return head - cur = head - while cur.next: - if cur.next.next: - cur = cur.next - else: - break - return cur - -``` - - -取巧的办法是: - -找到中间节点,断开,把后半截linked list reverse,然后合并 √ - -看了AC指南 - -``` -class Solution(object): - def reorderList(self, head): - """ - :type head: ListNode - :rtype: void Do not return anything, modify head in-place instead. - """ - if head == None or head.next == None or head.next.next == None: - return - - slow = head - fast = head - prev = None - - while fast and fast.next: - prev = slow - slow = slow.next - fast = fast.next.next - - prev.next = None - - - slow = self.reverseList(slow) - - cur = head - while cur.next: - tmp = cur.next - cur.next = slow - slow = slow.next - cur.next.next = tmp - cur = tmp - cur.next = slow - - - - def reverseList(self,head): - """ - :type head: ListNode - :rtype: ListNode - """ - prev = None - cur = head - while(cur): - nxt = cur.next - cur.next = prev - prev = cur - cur = nxt - return prev - - -``` - diff --git "a/docs/Leetcode_Solutions/C++/144._binary_tree_preorder_traversal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/144._binary_tree_preorder_traversal \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 8f5e21689..000000000 --- "a/docs/Leetcode_Solutions/C++/144._binary_tree_preorder_traversal \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,81 +0,0 @@ -### 144. Binary Tree Preorder Traversal - -题目: - - - - -难度: - -Medium - -Recursive,瞬秒 - - -```python -class Solution(object): - def preorderTraversal(self, root): - """ - :type root: TreeNode - :rtype: List[int] - """ - res = [] - if not root: - return res - res.append(root.val) - if root.left: - res.extend(self.preorderTraversal(root.left)) - if root.right: - res.extend(self.preorderTraversal(root.right)) - return res -``` - -```python -class Solution(object): - def preorderTraversal(self, root): - """ - :type root: TreeNode - :rtype: List[int] - """ - if root == None: - return [] - res = [] - self.preorder(root,res) - return res - - - def preorder(self,root,res): - if root == None: - return - res.append(root.val) - self.preorder(root.left,res) - self.preorder(root.right,res) -``` - - -Iterative - - -```python -class Solution(object): - def preorderTraversal(self, root): - """ - :type root: TreeNode - :rtype: List[int] - """ - if root == None: - return [] - res = [] - - stack = [] - stack.append(root) - while stack: - node = stack.pop() - res.append(node.val) - if node.right: - stack.append(node.right) - if node.left: - stack.append(node.left) - return res - -``` diff --git "a/docs/Leetcode_Solutions/C++/145._binary_tree_postorder_traversal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/145._binary_tree_postorder_traversal \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 788cfc623..000000000 --- "a/docs/Leetcode_Solutions/C++/145._binary_tree_postorder_traversal \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,67 +0,0 @@ -###145. Binary Tree Postorder Traversal - -题目: - - - - -难度: - -Hard - -wikipedia 助你幸福 - -递归版本 - -``` -postorder(node) - if (node = null) - return - postorder(node.left) - postorder(node.right) - visit(node) -``` - - -迭代版本 - -``` -iterativePostorder(node) - s ← empty stack - lastNodeVisited ← null - while (not s.isEmpty() or node ≠ null) - if (node ≠ null) - s.push(node) - node ← node.left - else - peekNode ← s.peek() - // if right child exists and traversing node - // from left child, then move right - if (peekNode.right ≠ null and lastNodeVisited ≠ peekNode.right) - node ← peekNode.right - else - visit(peekNode) - lastNodeVisited ← s.pop() -``` - - - -刷进度直接用递归AC - -``` -class Solution(object): - def postorderTraversal(self, root): - """ - :type root: TreeNode - :rtype: List[int] - """ - self.result = [] - self.postOrder(root) - return self.result - - def postOrder(self, root): - if root == None : return - self.postOrder(root.left) - self.postOrder(root.right) - self.result.append(root.val) -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/147._insertion_sort_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/147._insertion_sort_list \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b385d14f1..000000000 --- "a/docs/Leetcode_Solutions/C++/147._insertion_sort_list \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,59 +0,0 @@ -###147. Insertion Sort List - -题目: - - - -难度: -Medium - -insertion sort 也是入门必备,一个元素本身被认为是sort的,一个简单的理解是打牌,然后进入第二个元素的时候,看它是比第一个元素大还是小,做排序,进入下一个元素的时候再看再移。 - -伪码 - -``` -for i ← 1 to length(A)-1 - j ← i - while j > 0 and A[j-1] > A[j] - swap A[j] and A[j-1] - j ← j - 1 - end while -end for -``` - -这个伪码对于list可能适用性没有那么强,则考虑,从第二个node开始,那么从开始开始看,找到这个node应该插入的位置,插入。 - - - -就是这样,就是会超时|||| - -``` -class Solution(object): - def insertionSortList(self, head): - """ - :type head: ListNode - :rtype: ListNode - """ - if head == None or head.next == None: - return head - - dummy = ListNode(-1) - dummy.next = head - - prev = head - cur = head.next - - while cur: - p = dummy - while p.next.val <= cur.val and p != prev: - p = p.next - if p != prev: - prev.next = cur.next - cur.next = p.next - p.next = cur - prev = cur - cur = cur.next - - return dummy.next -``` - diff --git "a/docs/Leetcode_Solutions/C++/148._sort_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/148._sort_list \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 7bb4e80b0..000000000 --- "a/docs/Leetcode_Solutions/C++/148._sort_list \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,138 +0,0 @@ -###148. Sort List - -题目: - - - -难度: -Medium - -MergeSort - -merge sort是必备,divide & conquer的入门之物。 - -merge sort做两件事, sort 和 merge。 - -看一看标准伪码: - -``` -function mergesort(m) - var list left, right, result - if length(m) ≤ 1 - return m - else - var middle = length(m) / 2 - for each x in m up to middle - 1 - add x to left - for each x in m at and after middle - add x to right - left = mergesort(left) - right = mergesort(right) - if last(left) ≤ first(right) - append right to left - return left - result = merge(left, right) - return result - -function merge(left,right) - var list result - while length(left) > 0 and length(right) > 0 - if first(left) ≤ first(right) - append first(left) to result - left = rest(left) - else - append first(right) to result - right = rest(right) - if length(left) > 0 - append rest(left) to result - if length(right) > 0 - append rest(right) to result - return result -``` - -另一处获得伪码 - -``` -MergeSort(arr[], l, r) -If r > l - 1. Find the middle point to divide the array into two halves: - middle m = (l+r)/2 - 2. Call mergeSort for first half: - Call mergeSort(arr, l, m) - 3. Call mergeSort for second half: - Call mergeSort(arr, m+1, r) - 4. Merge the two halves sorted in step 2 and 3: - Call merge(arr, l, m, r) -``` - - -merge sort用在linked list上的好处是不用开辟空间,然后就处理node - -用旧的代码拼装出来的结果 - -然后需要注意的一点是拆分链表,所以有设置left node 的tail为None的操作. - -``` -class Solution(object): - def sortList(self, head): - """ - :type head: ListNode - :rtype: ListNode - """ - if head == None or head.next == None: - return head - - mid = self.findMid(head) - # split the - l1 = head - l2 = mid.next - mid.next = None - - l1 = self.sortList(l1) - l2 = self.sortList(l2) - - return self.mergeTwoLists(l1, l2) - - def mergeTwoLists(self, l1, l2): - """ - :type l1: ListNode - :type l2: ListNode - :rtype: ListNode - """ - if l1 == None: - return l2 - if l2 == None: - return l1 - - dummy = ListNode(-1) - cur = dummy - - while l1 and l2: - if l1.val < l2.val: - cur.next = l1 - l1 = l1.next - else: - cur.next = l2 - l2 = l2.next - cur = cur.next - - if l1: - cur.next = l1 - else: - cur.next = l2 - return dummy.next - - def findMid(self,head): - if head == None or head.next == None: - return head - - slow = head - fast = head - - while fast.next and fast.next.next: - slow = slow.next - fast = fast.next.next - - return slow - -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/150._evaluate_reverse_polish_notation \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/150._evaluate_reverse_polish_notation \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 4e2b48aac..000000000 --- "a/docs/Leetcode_Solutions/C++/150._evaluate_reverse_polish_notation \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,83 +0,0 @@ -###150. Evaluate Reverse Polish Notation - - - -题目: - - - -难度: -Medium - - - -AC代码 - -``` -class Solution(object): - def evalRPN(self, tokens): - """ - :type tokens: List[str] - :rtype: int - """ - def cal(op, op1, op2): - if op == '*': - return op1 * op2 - elif op == '/': - return op1 / float(op2) - elif op == '+': - return op1 + op2 - else: - return op1 - op2 - - operandStack = [] - - for token in tokens: - if token in '+-*/': - op2 = operandStack.pop() - op1 = operandStack.pop() - res = cal(token, op1, op2) - operandStack.append(int(res)) - else: - operandStack.append(int(token)) - - return operandStack.pop() -``` - - -实际上这里有一个很奇(sha)怪(bi)的地方,看到了么,除法➗处,如果我不这么做,就是错的,这是python 2 和 python 3 的除法不一致导致的,所以最终我这样做了才能得到正确答案。 - -思路: - -已经给了我们wikipedia的链接了 - -- While there are input tokens left - - Read the next token from input. - - If the token is a value - - Push it onto the stack. - -Otherwise, the token is an operator (operator here includes both operators and functions). - - It is already known that the operator takes n arguments. - - If there are fewer than n values on the stack - - (Error) The user has not input sufficient values in the expression. - - Else, Pop the top n values from the stack. - - Evaluate the operator, with the values as arguments. - - Push the returned results, if any, back onto the stack. -- If there is only one value in the stack - - That value is the result of the calculation. -- Otherwise, there are more values in the stack - - (Error) The user input has too many values. - - - -再参考这里 - - - - -1. Create an empty stack called operandStack. -2. Convert the string to a list by using the string method split. -3. Scan the token list from left to right. - - If the token is an operand, convert it from a string to an integer and push the value onto the operandStack. - - If the token is an operator, *, /, +, or -, it will need two operands. Pop the operandStack twice. The first pop is the second operand and the second pop is the first operand. Perform the arithmetic operation. Push the result back on the operandStack. -4. When the input expression has been completely processed, the result is on the stack. Pop the operandStack and return the value. - diff --git "a/docs/Leetcode_Solutions/C++/151._reverse_words_in_a_string \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/151._reverse_words_in_a_string \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 10414801b..000000000 --- "a/docs/Leetcode_Solutions/C++/151._reverse_words_in_a_string \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,37 +0,0 @@ -### 151. Reverse Words in a String - -题目: - - - -难度: -Medium - -太简单了 - -```python -class Solution(object): - def reverseWords(self, s): - """ - :type s: str - :rtype: str - """ - tmp = s.split() - res = " ".join(tmp[::-1]) - return res - -``` - -```python -class Solution(object): - def reverseWords(self, s): - """ - :type s: str - :rtype: str - """ - tmp = s.split() - tmp.reverse() - res = " ".join(tmp) - return res - -``` diff --git "a/docs/Leetcode_Solutions/C++/152._maximum_product_subarray \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/152._maximum_product_subarray \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 7570876fa..000000000 --- "a/docs/Leetcode_Solutions/C++/152._maximum_product_subarray \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,44 +0,0 @@ -###152. Maximum Product Subarray - - - -题目: - - - -难度: -Medium - -思路: - -粗一看, 一股浓烈的DP气息飘来,想要套用53题的思路和方程。但是这个跟sum是不一样的,因为乘积可以正负正负的跳,这样的动归方程肯定是不对的 - -dp[i] = max(dp[i-1] * a[i],a[i]) - -举个例子 : [-2,3,-4] - - -用O(N^2)超时,厉害啊! - -想,可不可以记录+的和-的,记录两个dp数组,我哭了,真的是这样做的 - -最大值可能来源于最小值 -> 哲学般的句子 - -``` -class Solution(object): - def maxProduct(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - n = len(nums) - maxdp = [ nums[0] for i in range(n)] - mindp = [ nums[0] for i in range(n)] - - - for i in range(1,n): - maxdp[i] = max(mindp[i-1]*nums[i], maxdp[i-1]*nums[i],nums[i]) - mindp[i] = min(maxdp[i-1]*nums[i], mindp[i-1]*nums[i],nums[i]) - - return max(maxdp) -``` diff --git "a/docs/Leetcode_Solutions/C++/153._find_minimum_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/153._find_minimum_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b46e1950d..000000000 --- "a/docs/Leetcode_Solutions/C++/153._find_minimum_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,85 +0,0 @@ -###153. Find Minimum in Rotated Sorted Array - - -题目: - - - -难度: - -Medium - - - -思路一: - -O(N) 就不说了 - -思路二: - -想的是分治,两段分别找出最小值,然后取最小值,但是依旧没有利用题目特性,并且也是O(N). - -> We can do it in O(logn) using Binary Search. If we take a closer look at above examples, we can easily figure out following pattern: The minimum element is the only element whose previous element is greater than it. If there is no such element, then there is no rotation and first element is the minimum element. - - -上面提到了一个特性,就是minimum element唯一一个它之前的element比它大的,如果不存在这个element,那么就没有rotation. - - - -思路其实是判断前半部分或者后半部分是否有序,然后来剔除,这里需要注意有比较多的边界case,因为如果就两个,那么会有特殊case 0 ,1 mid = 0,所以可以看一下,它这个处理,最后一个elif 是来比较mid 和 end - - - - - -``` -class Solution(object): - def findMin(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - def findRotatedMin(nums, start, end): - if end < start: - return nums[0] - if start == end: - return nums[start] - mid = (start + end) / 2 - if mid > start and nums[mid] < nums[mid-1]: - return nums[mid] - elif mid < end and nums[mid+1] < nums[mid]: - return nums[mid+1] - elif nums[mid] < nums[end]: - return findRotatedMin(nums,start, mid -1) - return findRotatedMin(nums, mid+1, end) - - - return findRotatedMin(nums,0,len(nums)-1) - -``` - -非递归 - -``` -class Solution(object): - def findMin(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - l,r = 0, len(nums) - 1 - while l < r: - mid = (l+r) / 2 - if mid > l and nums[mid] < nums[mid-1]: - return nums[mid] - elif mid < r and nums[mid] > nums[mid+1]: - return nums[mid+1] - elif nums[mid] < nums[r]: - r = mid -1 - else: - l = mid +1 - return nums[0] - -``` - - diff --git "a/docs/Leetcode_Solutions/C++/155._min_stack \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/155._min_stack \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index fac02c17e..000000000 --- "a/docs/Leetcode_Solutions/C++/155._min_stack \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,169 +0,0 @@ -### 155. Min Stack - -题目: - - - -难度: - -Easy - -思路一: - -懒,直接用系统的数据结构 -用lst和系统的heapq,提升一下,用deque和heapq,这样也没太大提升 - - -```python -from heapq import * - -class MinStack(object): - - def __init__(self): - """ - initialize your data structure here. - """ - self.lst = [] - self.h = [] - - - def push(self, x): - """ - :type x: int - :rtype: void - """ - self.lst.append(x) - heappush(self.h,x) - - - def pop(self): - """ - :rtype: void - """ - val = self.lst.pop() - self.h.remove(val) - heapify(self.h) - - def top(self): - """ - :rtype: int - """ - return self.lst[-1] - - - def getMin(self): - """ - :rtype: int - """ - return self.h[0] - -``` - -思路二: - - -参考 - -用两个stack,其中一个始终来记录到当前位置的最小值 - - -``` -When we insert 18, both stacks change to following. -Actual Stack -18 <--- top -Auxiliary Stack -18 <---- top - -When 19 is inserted, both stacks change to following. -Actual Stack -19 <--- top -18 -Auxiliary Stack -18 <---- top -18 - -When 29 is inserted, both stacks change to following. -Actual Stack -29 <--- top -19 -18 -Auxiliary Stack -18 <---- top -18 -18 - -When 15 is inserted, both stacks change to following. -Actual Stack -15 <--- top -29 -19 -18 -Auxiliary Stack -15 <---- top -18 -18 -18 - -When 16 is inserted, both stacks change to following. -Actual Stack -16 <--- top -15 -29 -19 -18 -Auxiliary Stack -15 <---- top -15 -18 -18 -18 -``` - -这样无论是用deque还是本身的lst都有一些提升 - - -```python -from collections import deque -class MinStack(object): - - def __init__(self): - """ - initialize your data structure here. - """ - self.lst = deque() - self.aux = deque() - - - def push(self, x): - """ - :type x: int - :rtype: void - """ - self.lst.append(x) - if not self.aux or self.aux[-1] > x: - self.aux.append(x) - else: - self.aux.append(self.aux[-1]) - - - - def pop(self): - """ - :rtype: void - """ - self.lst.pop() - self.aux.pop() - - def top(self): - """ - :rtype: int - """ - return self.lst[-1] - - - def getMin(self): - """ - :rtype: int - """ - return self.aux[-1] -``` diff --git "a/docs/Leetcode_Solutions/C++/159._Longest_Substring_with_At_Most_Two_Distinct_Characters \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/159._Longest_Substring_with_At_Most_Two_Distinct_Characters \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 7d65fb605..000000000 --- "a/docs/Leetcode_Solutions/C++/159._Longest_Substring_with_At_Most_Two_Distinct_Characters \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,32 +0,0 @@ -### 159. Longest Substring with At Most Two Distinct Characters - -题目: - - - -难度 : Hard - - - -```python -class Solution(object): - def lengthOfLongestSubstringTwoDistinct(self, s): - """ - :type s: str - :rtype: int - """ - maps = {} - begin, end, counter, length = 0, 0, 0, 0 - while end < len(s): - maps[s[end]] = maps.get(s[end], 0) + 1 - if maps[s[end]] == 1: - counter += 1 -            end += 1   # end 永远指向下一个待处理的字符 -            while counter > 2: - maps[s[begin]] -= 1 - if maps[s[begin]] == 0: - counter -= 1 - begin += 1 -            length = max(length, end - begin) # 因此这里是```end - begin```而不是```end - begin + 1``` -        return length -``` diff --git "a/docs/Leetcode_Solutions/C++/160._intersection_of_two_linked_lists \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/160._intersection_of_two_linked_lists \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b403f01f9..000000000 --- "a/docs/Leetcode_Solutions/C++/160._intersection_of_two_linked_lists \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,59 +0,0 @@ -### 160. Intersection of Two Linked Lists - -题目: - - - -难度: - -Easy - - -如果两个linkedlist有intersection的话,可以看到,其实如果一开始我们就走到b2的话,那么我们就可以两个pointer一个一个的对比,到哪一个地址一样,接下来就是intersection部分。 - - - -``` -A: a1 → a2 - ↘ - c1 → c2 → c3 - ↗ -B: b1 → b2 → b3 -``` -比较巧妙的数学解法,看下面的解释和代码 - - - -AC代码如下: - -```python -class Solution(object): - def getIntersectionNode(self, headA, headB): - """ - :type head1, head1: ListNode - :rtype: ListNode - """ - pA, pB = headA, headB - while pA is not pB: - pA = pA.next if pA else headB - pB = pB.next if pB else headA - return pA -``` -Just count the number of moves by each pointer before they meet. One pointer will traverse entire list1 for N moves and then jump to the head of list1 to move (M-K) steps to intersection, where K represents the length of common part. Now the other pointer must also moved the same number of steps since they are both moved at the same time. The second pointer traverses the entire list2 for M steps and jumped to the head of list1 to move (N-K) steps. So the loop finished with M+N-K times. -详见[zzg_zzm的评论](https://leetcode.com/problems/intersection-of-two-linked-lists/discuss/49799) - -This algorithm is sooooo perfect! - -I was wonder if the running time is O(n+m), but later I figured out that the actually running time is just: - -- m+n for non-intersection case - -With intersection: - -- Suppose for LL-A, it’s a+b=n, a is the # of nodes before intersection - -- Suppose for LL-B, it’s c+b=m, c is the # of nodes before intersection - -Thus the actual running time is a+b+c = n+c = m+a. - -Actually, when b=0, this just stands for the case with no intersection with a+b+c=n+m diff --git "a/docs/Leetcode_Solutions/C++/162._find_peak_element \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/162._find_peak_element \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 2aad9b1c8..000000000 --- "a/docs/Leetcode_Solutions/C++/162._find_peak_element \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,61 +0,0 @@ -### 162. Find Peak Element - -题目: - - - -难度: -Medium - - -思路: - - -最直观的是O(N)解法 - -```python -class Solution(object): - def findPeakElement(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - for i in range(1, len(nums)): - if nums[i] < nums[i-1]: - return i-1 - return len(nums) - 1 -``` - -O(lgN) 解法 - -这是一个经典题目 - -- a[mid] < a[mid] only look at the left side -- a[mid] < a[mid] only look at the right side -- else peak found - - -证明就是用反证法,或者看peak,因为这里已经限制了num[i] ≠ num[i+1],所以peak element 一定存在。然后a[mid] < a[mid-1],那么说明这里一定是下降的,说明之前一定有一个peak存在,否则我们可以用反证法证明. - -写到这里,我非常相信就是binary search能写对其实不容易。 - - -AC代码 - -```python -class Solution(object): - def findPeakElement(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - l, r = 0, len(nums) - 1 - while l <= r: - if l == r : return l - mid = l + ((r - l) >> 2) - if nums[mid] < nums[mid+1]: - l = mid + 1 - else: - r = mid -``` - diff --git "a/docs/Leetcode_Solutions/C++/165._compare_version_numbers \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/165._compare_version_numbers \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index ab976ce99..000000000 --- "a/docs/Leetcode_Solutions/C++/165._compare_version_numbers \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,47 +0,0 @@ -###165. Compare Version Numbers - -题目: - - - -难度: - -Easy - - -其实我并不觉得这个很简单 - -因为可能两个的位数不一样,首端或者尾端需要补0,同时我还考虑过可能有出现多个'.'的状况 - - - -``` -class Solution(object): - def compareVersion(self, version1, version2): - """ - :type version1: str - :type version2: str - :rtype: int - """ - v1 = version1.split('.') - v2 = version2.split('.') - v1 = [int(x) for x in v1] - v2 = [int(x) for x in v2] - - len1 = len(v1) - len2 = len(v2) - lenMax = max(len1, len2) - for x in range(lenMax): - v1Token = 0 - if x < len1: - v1Token = v1[x] - v2Token = 0 - if x < len2: - v2Token = v2[x] - if v1Token > v2Token: - return 1 - elif v1Token < v2Token: - return -1 - return 0 - -``` diff --git "a/docs/Leetcode_Solutions/C++/166._Fraction_to_Recurring_Decimal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/166._Fraction_to_Recurring_Decimal \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index d4285fe4b..000000000 --- "a/docs/Leetcode_Solutions/C++/166._Fraction_to_Recurring_Decimal \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,42 +0,0 @@ -### 166. Fraction to Recurring Decimal - -题目: - - - -难度: - -Medium - - - - -```python -class Solution: - # @return a string - def fractionToDecimal(self, n, d): - res = '' - if n == 0: # zero numerator - return str(n) - if (n < 0) ^ (d < 0): # determine the sign - res += '-' - n = abs(n) # remove sign of operands - d = abs(d) - res += str(n / d) # append integral part - if (n % d == 0): # in case no fractional part - return res - res += '.' - r = n % d - m = {} - while r: # simulate the division process - if r in m: # meet a known remainder - res = res[:m[r]] + '(' + res[m[r]:] + ')' # so we reach the end of the repeating part - break - m[r] = len(res) # if the remainder is first seen, remember the current position for it - r *= 10 - res += str(r / d) # append the quotient digit - r %= d - return res -``` - - diff --git "a/docs/Leetcode_Solutions/C++/167._two_sum_ii_-_input_array_is_sorted \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/167._two_sum_ii_-_input_array_is_sorted \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 8fcd51708..000000000 --- "a/docs/Leetcode_Solutions/C++/167._two_sum_ii_-_input_array_is_sorted \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,35 +0,0 @@ -### 167. Two Sum II - Input array is sorted - - - -题目: - - - -难度: -Medium - - -思路: - - -双指针 - -```python -class Solution(object): - def twoSum(self, numbers, target): - """ - :type numbers: List[int] - :type target: int - :rtype: List[int] - """ - l, r = 0, len(numbers) - 1 - while l < r: - if numbers[l] + numbers[r] == target: - return [l+1, r+1] - elif numbers[l] + numbers[r] > target: - r -= 1 - else: - l += 1 - -``` diff --git "a/docs/Leetcode_Solutions/C++/168._excel_sheet_column_title \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/168._excel_sheet_column_title \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 547f083ee..000000000 --- "a/docs/Leetcode_Solutions/C++/168._excel_sheet_column_title \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,28 +0,0 @@ -###168. Excel Sheet Column Title - -题目: - - - - -难度: - -Easy - -依旧26进制的反击,不过这个反击我做的没之前那个好,看了hint - -``` -class Solution(object): - def convertToTitle(self, n): - """ - :type n: int - :rtype: str - """ - ans = '' - while n : - ans = chr(ord('A') + (n - 1) % 26) + ans - n = (n - 1) // 26 - return ans - -``` - diff --git "a/docs/Leetcode_Solutions/C++/169._majority_element \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/169._majority_element \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 6701ba759..000000000 --- "a/docs/Leetcode_Solutions/C++/169._majority_element \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,74 +0,0 @@ -###169. Majority Element - - - -题目: - - - -难度: -Easy - -思路: - -其实这个我有点有想到过 - - -给定一个长度为 n的数组,其中有一个数,它出现的次数大于⎣n/2⎦,称为主要元素,找到它. - -这个很像之前做过的一道CLRS的题目,想法可以用divide & conquer. - - -- 如果数组长度 <= 2,那么return第一个即解决问题 -- 如果长度 > 2,那么可以两两配对,对于配对一样的结果,删去 - - 如果最后余一个,这一个留下 - - shuffle之后再尝试两两配对,直到最后结果不再改变 - - 这样肯定是能解决问题的,因为为了满足次数大于⎣n/2⎦这个条件。 - - - - - - -``` - - 1 2 1 2 1 2 1 2 - 2 3 2 3 2 3 2 3 - 2 4 2 2 2 2 3 - 2 4 2 3 3 - 3 2 - 2 2 - 2 2 -``` - -思路容易implement非常难啊. - - - -这个问题有一个很出名的算法 - - -Boyer-Moore众数(majority number) 问题 - -在数组中找到两个不相同的元素并删除它们,不断重复此过程,直到数组中元素都相同,那么剩下的元素就是主要元素。 - - -这个算法的妙处在于不直接删除数组中的元素,而是利用一个计数变量. - -伪码 - - def majorityElement(self, nums): - count,major=0,0 - for n in nums: - if count==0: - major=n - if major==n: - count+=1 - else: - count-=1 - return major - - - - \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/171._excel_sheet_column_number \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/171._excel_sheet_column_number \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 4521f737c..000000000 --- "a/docs/Leetcode_Solutions/C++/171._excel_sheet_column_number \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,34 +0,0 @@ -###171. Excel Sheet Column Number - -题目: - - - - -难度: - -Easy - - -26进制的反击 - -``` -class Solution(object): - def titleToNumber(self, s): - """ - :type s: str - :rtype: int - """ - maps = {} - for i in range(65,91): - maps[chr(i)] = i - 64 - - lst = list(s) - lst.reverse() - num = 0 - for idx,item in enumerate(lst): - num += maps[item] * (26 ** idx) - return num - -``` - diff --git "a/docs/Leetcode_Solutions/C++/173._binary_search_tree_iterator \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/173._binary_search_tree_iterator \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a8b6fd9cc..000000000 --- "a/docs/Leetcode_Solutions/C++/173._binary_search_tree_iterator \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,95 +0,0 @@ -### 173. Binary Search Tree Iterator - -题目: - - - -难度: -Medium - - -同样没有听题目要求,一开始就取巧,用InOrder,这样得到BSF有序排列,然后使用 - - -```python - -class BSTIterator(object): - def __init__(self, root): - """ - :type root: TreeNode - """ - self.root = root - self.lst = [] - self.inOrder(root) - self.lst.reverse() - - - - def hasNext(self): - """ - :rtype: bool - """ - return self.lst != [] - - - def next(self): - """ - :rtype: int - """ - return self.lst.pop() - - def inOrder(self, root): - if root == None: - return - self.inOrder(root.left) - self.lst.append(root.val) - self.inOrder(root.right) - -``` - -谷歌了一下,得到如何满足题目要求的hint,从root开始,往左走,把左孩子压入stack,直到左边为空。 - -然后开始取node,如果node有右孩子,则同样要把node的右孩子的所有左孩子全部append入stack,画了一个图,可行。 - - - - - -```python - -class BSTIterator(object): - def __init__(self, root): - """ - :type root: TreeNode - """ - self.root = root - self.stack = [] - self.pushAllLeft(root) - - - def hasNext(self): - """ - :rtype: bool - """ - return self.stack != [] - - - def next(self): - """ - :rtype: int - """ - if self.hasNext(): - cur = self.stack.pop() - if cur.right: - self.pushAllLeft(cur.right) - return cur.val - - def pushAllLeft(self, node): - """ - :type node: TreeNode - """ - cur = node - while cur: - self.stack.append(cur) - cur = cur.left -``` diff --git "a/docs/Leetcode_Solutions/C++/189._rotate_array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/189._rotate_array \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 080a1e581..000000000 --- "a/docs/Leetcode_Solutions/C++/189._rotate_array \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,23 +0,0 @@ -###189. Rotate Array - -题目: - - - -难度 : Easy - - -作弊神奇python大法 - -``` -class Solution(object): - def rotate(self, nums, k): - """ - :type nums: List[int] - :type k: int - :rtype: void Do not return anything, modify nums in-place instead. - """ - n = len(nums) - nums[:] = nums[n-k:] + nums[:n-k] - œ -``` diff --git "a/docs/Leetcode_Solutions/C++/191._number_of_1_bits \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/191._number_of_1_bits \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index dcba66c7b..000000000 --- "a/docs/Leetcode_Solutions/C++/191._number_of_1_bits \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,66 +0,0 @@ -### 191. Number of 1 Bits - -题目: - - - - -难度: - -Easy - - -转成二进制,数1的个数 - -```python -class Solution(object): - def hammingWeight(self, n): - """ - :type n: int - :rtype: int - """ - return bin(n).count('1') -``` - - - -有wikipedia的题目 [Hamming Weight]((https://zh.wikipedia.org/wiki/汉明重量)) - - - -用wikipedia的解法: - -原理是在于每次使用x & x-1 总会把低位的数字给置0 - -比如 3 = 011 2 = 010 3 & 2 = 010 cnt =1 - -​ 2 = 010 1 = 001 2 & 1 = 000 cnt = 2 - -比如 9 = 1001 8 = 1000 9&8 = 1000 cnt =1 - -​ 8 = 1000 7 = 0111 8&7 = 0000 cnt = 2 - -> 减1操作将最右边的符号从0变到1,从1变到0,与操作将会移除最右端的1。如果最初X有N个1,那么经过N次这样的迭代运算,X将减到0。下面的算法就是根据这个原理实现的。 - -所以关键点是每次都会把最右边的1变成0. - - - -AC代码 - - - -```python -class Solution(object): - def hammingWeight(self, n): - """ - :type n: int - :rtype: int - """ - cnt = 0 - while n != 0: - n &= n - 1 - cnt += 1 - return cnt -``` - diff --git "a/docs/Leetcode_Solutions/C++/198._house_robber \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/198._house_robber \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 2b2deedda..000000000 --- "a/docs/Leetcode_Solutions/C++/198._house_robber \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,53 +0,0 @@ - -### 198. House Robber - - -题目: - - - -难度: - -Easy - - -状态转移方程: - -dp[i] = max(dp[i-1], dp[i-2] + nums[i]) - - -AC 代码 - -```python -class Solution(object): - def rob(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - n = len(nums) - if n == 0 : return 0 - elif n == 1 : return nums[0] - elif n == 2 : return max(nums[0], nums[1]) - else: - dp = [0 for i in range(n)] - dp[0] = nums[0] - dp[1] = max(nums[0],nums[1]) - for i in range(2,n): - dp[i] = max( dp[i-1], dp[i-2] + nums[i]) - return dp[n-1] -``` - -```python -class Solution(object): - def rob(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - last, now = 0, 0 - for i in nums: last, now = now, max(last + i, now) - return now -``` - - diff --git "a/docs/Leetcode_Solutions/C++/199._binary_tree_right_side_view \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/199._binary_tree_right_side_view \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 6f7b3b6d6..000000000 --- "a/docs/Leetcode_Solutions/C++/199._binary_tree_right_side_view \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,37 +0,0 @@ -###199. Binary Tree Right Side View - -题目: - - - - -难度: - -Medium - - -还是在玩第102题,level order traversal. - -``` -class Solution(object): - def rightSideView(self, root): - """ - :type root: TreeNode - :rtype: List[int] - """ - if root == None: return [] - - res = [] - curLevel = [root] - while curLevel: - nextLevel = [] - tmpRes = [] - for node in curLevel: - tmpRes.append(node.val) - if node.left: nextLevel.append(node.left) - if node.right: nextLevel.append(node.right) - res.append(tmpRes[-1]) - curLevel = nextLevel - return res -``` - diff --git "a/docs/Leetcode_Solutions/C++/200._number_of_islands \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/200._number_of_islands \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 73c5aecf4..000000000 --- "a/docs/Leetcode_Solutions/C++/200._number_of_islands \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,130 +0,0 @@ -### 200. Number of Islands - - -题目: - - - -难度: -Medium - - -思路: - - -一开始: -numberOfIslands = 0 -islandArea = [] - - -然后遇到(x,y) = 1的状况,更新numberOfIslands,并且把(x,y)放入islandArea,然后用BFS或者DFS查找岛屿范围,全部更如islandArea,做loop - -以上就是基本思路 - - -然后超时|||, 小改之后AC - - -``` - -class Solution(object): - def numIslands(self, grid): - """ - :type grid: List[List[str]] - :rtype: int - """ - self.grid = grid[:] - - self.row = len(self.grid) - self.col = len(self.grid[0]) if self.row else 0 - self.visited = [[0 for i in range(self.col)]for j in range(self.row)] - - - self.numberOfIslands = 0 - - for i in range(self.row): - for j in range(self.col): - if self.grid[i][j] == '1' and self.visited[i][j] == 0: - self.findArea(i,j) - self.numberOfIslands += 1 - - return self.numberOfIslands - - def findArea(self, i, j): - s = [] - s.append((i,j)) - while s: - (x,y) = s.pop() - self.visited[x][y] = 1 - if self.legal(x-1,y): - s.append((x-1,y)) - if self.legal(x+1,y): - s.append((x+1,y)) - if self.legal(x,y-1): - s.append((x,y-1)) - if self.legal(x,y+1): - s.append((x,y+1)) - - def legal(self,x,y): - return x>= 0 and x < self.row and y >= 0 and y < self.col and self.grid[x][y] == '1' and self.visited[x][y] == 0 -a = Solution() -print a.numIslands(["11000","11000","00100","00011"]) - -``` - - -看了别人的代码,写的真美 ╮(╯_╰)╭ 啊 - -``` -class Solution(object): - def numIslands(self, grid): - """ - :type grid: List[List[str]] - :rtype: int - """ - def dfs(gird, used, row, col, x, y): - if gird[x][y] == '0' or used[x][y]: - return - used[x][y] = True - - if x!= 0: - dfs(grid, used, row,col, x-1,y) - if x!= row -1 : - dfs(grid, used, row,col, x+1, y) - if y!= 0: - dfs(grid, used, row,col, x, y-1) - if y!= col - 1: - dfs(grid, used, row,col, x, y+1) - - - row = len(grid) - col = len(grid[0]) if row else 0 - - used = [[0 for i in xrange(col)] for i in xrange(row)] - - count = 0 - for i in xrange(row): - for j in xrange(col): - if grid[i][j] == '1' and not used[i][j]: - dfs(grid,used,row,col,i,j) - count += 1 - return count -``` - -厉害的解法:Sink and count the islands. -```python -class Solution(object): - def numIslands(self, grid): - """ - :type grid: List[List[str]] - :rtype: int - """ - def sink(i, j): - if 0 <= i < len(grid) and 0 <= j < len(grid[0]) and grid[i][j] == '1': - grid[i][j] = '0' - map(sink, (i+1, i-1, i, i), (j, j, j+1, j-1)) - return 1 - return 0 - return sum(sink(i, j) for i in range(len(grid)) for j in range(len(grid[0]))) -``` - diff --git "a/docs/Leetcode_Solutions/C++/203._remove_linked_list_elements \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/203._remove_linked_list_elements \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 15aa10efa..000000000 --- "a/docs/Leetcode_Solutions/C++/203._remove_linked_list_elements \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,38 +0,0 @@ -###203. Remove Linked List Elements - -题目: - - - -难度: - -Easy - - -AC代码如下: - - - -``` -class Solution(object): - def removeElements(self, head, val): - """ - :type head: ListNode - :type val: int - :rtype: ListNode - """ - dummy = ListNode(-1) - dummy.next = head - - cur = dummy - - while cur.next: - if cur.next.val == val: - cur.next = cur.next.next - else: - cur = cur.next - - return dummy.next - - -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/204._count_primes \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/204._count_primes \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b69290b70..000000000 --- "a/docs/Leetcode_Solutions/C++/204._count_primes \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,57 +0,0 @@ -###204. Count Primes - - -题目: - - - -难度: - -Easy - - - -这个题的hint是已经把算法喂到嘴边了 - - - - -``` -Input: an integer n > 1 - -Let A be an array of Boolean values, indexed by integers 2 to n, -initially all set to true. - -for i = 2, 3, 4, ..., not exceeding √n: - if A[i] is true: - for j = i^2, i^2+i, i^2+2*i, i^2+3i, ..., not exceeding n : - A[j] := false - -Output: all i such that A[i] is true. -``` - - - -python算法 - - -``` -class Solution(object): - def countPrimes(self, n): - """ - :type n: int - :rtype: int - """ - isPrime = [1 for i in range(n)] - - i = 2 - while i * i < n: - if isPrime[i]: - j = i * i - while j < n : - isPrime[j] = 0 - j += i - i += 1 - - return sum(isPrime[2:]) -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/205._isomorphic_strings \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/205._isomorphic_strings \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 47b0ab772..000000000 --- "a/docs/Leetcode_Solutions/C++/205._isomorphic_strings \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,39 +0,0 @@ -###205. Isomorphic Strings - -题目: - - - -难度 : Easy - - -AC之法,用dictionary,因为限制,所以确保s 和 t 是isomorphic 同时 t 和 s 是 - - -``` -class Solution(object): - def isIsomorphic(self, s, t): - """ - :type s: str - :type t: str - :rtype: bool - """ - return self.iso(s,t) and self.iso(t,s) - - def iso(self,s, t): - """ - :type s: str - :type t: str - :rtype: bool - """ - mapx = {} - for i in range(len(s)): - if s[i] not in mapx: - mapx[s[i]] = t[i] - elif s[i] in mapx: - if t[i] != mapx[s[i]]: - return False - return True - - -``` diff --git "a/docs/Leetcode_Solutions/C++/206._reverse_linked_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/206._reverse_linked_list \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 97c10db26..000000000 --- "a/docs/Leetcode_Solutions/C++/206._reverse_linked_list \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,69 +0,0 @@ -### 206. Reverse Linked List - -题目: - - - -难度: -Easy - -用三个指针,分别指向prev,cur 和 nxt,然后loop一圈还算比较简单. - - - - -```python -class Solution(object): - def reverseList(self, head): - """ - :type head: ListNode - :rtype: ListNode - """ - prev = None - cur = head - while(cur): - nxt = cur.next - cur.next = prev - prev = cur - cur = nxt - return prev -``` -其实一个指针就够了 -```python -class Solution(object): - def reverseList(self, head): - """ - :type head: ListNode - :rtype: ListNode - """ - if not head: - return head - prev = None - while head.next: - tmp = head.next - head.next = prev - prev = head - head = tmp - head.next = prev - return head -``` - -递归版本,可以再消化一下. - - -```python -class Solution(object): - def reverseList(self, head): - """ - :type head: ListNode - :rtype: ListNode - """ - return self.reverseHelper(head, None) - - def reverseHelper(self, head, new_head): - if not head: - return new_head - nxt = head.next - head.next = new_head - return self.reverseHelper(nxt, head) -``` diff --git "a/docs/Leetcode_Solutions/C++/207._course_schedule \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/207._course_schedule \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 6e990f09d..000000000 --- "a/docs/Leetcode_Solutions/C++/207._course_schedule \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,93 +0,0 @@ -###207. Course Schedule - - - -题目: - - - -难度: -Medium - -思路: - -就是考topological sort,用来判断directed graph是否有cycle - -DFS 和 BFS都可以用来拓扑排序。 - -最简单的想法是每次取出indegree是0的node,然后把它和与之相关的edge都删了。一开始觉得这样的时间复杂度会很高,然后看到了这样写,参照: - - - -很聪明的写法 - -这里做了转成set以及添加removeList这样的操作是因为边list边做iterator这样的操作很危险 - - - - -``` -class Solution(object): - def canFinish(self, numCourses, prerequisites): - """ - :type numCourses: int - :type prerequisites: List[List[int]] - :rtype: bool - """ - degrees = [ 0 for i in range(numCourses)] - childs = [[] for i in range(numCourses)] - for front, tail in prerequisites: - degrees[front] += 1 - childs[tail].append(front) - - courses = set(range(numCourses)) - flag = True - - while flag and len(courses): - flag = False - removeList = [] - for x in courses: - if degrees[x] == 0: - for child in childs[x]: - degrees[child] -= 1 - removeList.append(x) - flag = True - for x in removeList: - courses.remove(x) - return len(courses) == 0 - -``` - -因为CLRS里面明确提到涂色法来处理DFS - -搞了半天,写了一个涂色法,在超时的边缘。之所以超时边缘是因为每次都要去prerequisites里看,没有删减,不高效. - -``` -class Solution(object): - def canFinish(self, numCourses, prerequisites): - """ - :type numCourses: int - :type prerequisites: List[List[int]] - :rtype: bool - """ - def dfs(i, colors, prerequisites): - colors[i] = 'G' - #print i, colors - for front, tail in prerequisites: - if tail == i: - if colors[front] == 'G': - return False - elif colors[front] == 'B': - continue - elif dfs(front, colors, prerequisites) == False: - return False - colors[i] = 'B' - return True - - colors = ['W' for i in range(numCourses)] - for i in range(numCourses): - if colors[i] == 'W': - if dfs(i, colors, prerequisites) == False: - return False - return True -``` diff --git "a/docs/Leetcode_Solutions/C++/208._implement_trie_(prefix_tree) \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/208._implement_trie_(prefix_tree) \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 8ee06db58..000000000 --- "a/docs/Leetcode_Solutions/C++/208._implement_trie_(prefix_tree) \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,89 +0,0 @@ -### 208. Implement Trie (Prefix Tree) - -题目: - - - - -难度: - -Medium - -这个Python实现也太精美了吧,谷歌复写之 - -然后还unlock了一个solution,to read - -Trie整个都需要 to read,精美,可爱😊 - - - - -```python -class TrieNode(object): - def __init__(self): - """ - Initialize your data structure here. - """ - self.childs = dict() - self.isWord = False - - - -class Trie(object): - - def __init__(self): - self.root = TrieNode() - - def insert(self, word): - """ - Inserts a word into the trie. - :type word: str - :rtype: void - """ - node = self.root - for letter in word: - child = node.childs.get(letter) - if child is None: - child = TrieNode() - node.childs[letter] = child - node = child - node.isWord = True - - def search(self, word): - """ - Returns if the word is in the trie. - :type word: str - :rtype: bool - """ - node = self.root - for i in word: - child = node.childs.get(i) - if child is None: - return False - node = child - return node.isWord - - - def startsWith(self, prefix): - """ - Returns if there is any word in the trie - that starts with the given prefix. - :type prefix: str - :rtype: bool - """ - node = self.root - for letter in prefix: - child = node.childs.get(letter) - if child is None: - return False - node = child - return True - - -# Your Trie object will be instantiated and called as such: -# trie = Trie() -# trie.insert("somestring") -# trie.search("key") - -``` - diff --git "a/docs/Leetcode_Solutions/C++/210._course_schedule_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/210._course_schedule_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 852b1163e..000000000 --- "a/docs/Leetcode_Solutions/C++/210._course_schedule_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,55 +0,0 @@ -###210. Course Schedule II - - - -题目: - - - -难度: -Medium - -思路: - -在207的基础上加了order,进击 - - -``` -class Solution(object): - def findOrder(self, numCourses, prerequisites): - """ - :type numCourses: int - :type prerequisites: List[List[int]] - :rtype: List[int] - """ - degrees = [ 0 for i in range(numCourses)] - childs = [[] for i in range(numCourses)] - for front, tail in prerequisites: - degrees[front] += 1 - childs[tail].append(front) - - - courses = set(range(numCourses)) - flag = True - order = [] - - while flag and len(courses): - flag = False - removeList = [] - for x in courses: - if degrees[x] == 0: - print x - for child in childs[x]: - degrees[child] -= 1 - removeList.append(x) - order.append(x) - flag = True - for x in removeList: - courses.remove(x) - - if len(courses) == 0: - return order - else: - return [] - -``` diff --git "a/docs/Leetcode_Solutions/C++/211. Add and Search Word - Data structure design \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/211. Add and Search Word - Data structure design \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 7dd0ea278..000000000 --- "a/docs/Leetcode_Solutions/C++/211. Add and Search Word - Data structure design \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,77 +0,0 @@ -### 211. Add and Search Word - Data structure design - -题目: - - - -难度: Medium - -思路: - -trie也是树,那么dfs/bfs同样适用。 - -实际上是照抄208trie的题目再加上dfs - - - -AC代码 - - - -``` -class TrieNode(object): - """docstring for TrieNode""" - def __init__(self): - self.childs = dict() - self.isWord = False - -class WordDictionary(object): - def __init__(self): - """ - initialize your data structure here. - """ - self.root = TrieNode() - - - def addWord(self, word): - """ - Adds a word into the data structure. - :type word: str - :rtype: void - """ - node = self.root - for letter in word: - child = node.childs.get(letter) - if child is None: - child = TrieNode() - node.childs[letter] = child - node = child - node.isWord = True - - - def search(self, word): - """ - Returns if the word is in the data structure. A word could - contain the dot character '.' to represent any one letter. - :type word: str - :rtype: bool - """ - def dfs(root, word): - if len(word) == 0: - return root.isWord - elif word[0] == '.': - for node in root.childs: - if dfs(root.childs[node], word[1:]): - return True - return False - else: - node = root.childs.get(word[0]) - if node is None: - return False - return dfs(node, word[1:]) - - return dfs(self.root, word) -``` - - - diff --git "a/docs/Leetcode_Solutions/C++/213._house_robber_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/213._house_robber_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 9caec3dfd..000000000 --- "a/docs/Leetcode_Solutions/C++/213._house_robber_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,61 +0,0 @@ -###213. House Robber II - - -题目: - - - -难度: -Medium - -思路: - -跟house robber 1 类似,但是加了一些限制,抢到第 n-1 家最大两种可能,抢第 n-1 家和不抢第 n-1 家。 - - 0, 1, 2, 3, 4, 5, 6 ... n-1 - - -所以状态转移方程写成二维的更好来求,从第i家抢到第j家的状态转移方程 - - - nums[j] ,j = i - dp[i][j] = max(nums[i], nums[i+1]) , j = i +1 - max(dp[i][j-2] + nums[j], dp[i][j-1]), j > i+1 - - - -Show me the code - - -AC代码 - -``` -class Solution(object): - def rob(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - n = len(nums) - if n == 0 : return 0 - if n == 1 : return nums[0] - if n == 2 : return max(nums[0],nums[1]) - - dp = [[0 for i in range(n)] for j in range(n)] - - for i in range(n): - for j in range(i,n): - if j == i: - dp[i][j] = nums[j] - elif j == i + 1: - dp[i][j] = max(nums[i],nums[i+1]) - else: - dp[i][j] = max(dp[i][j-2] + nums[j], dp[i][j-1]) - - # print dp - # rob without n-1, or rob with n-1 - val = max(dp[0][n-2], dp[1][n-3] + nums[n-1]) - - return val - -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/216._combination_sum_iii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/216._combination_sum_iii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 9e1b6371e..000000000 --- "a/docs/Leetcode_Solutions/C++/216._combination_sum_iii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,40 +0,0 @@ -###216. Combination Sum III - -题目: - - - - -难度: - -Medium - -继续Combination Sum 系列 - - -``` -class Solution(object): - def combinationSum3(self, k, n): - """ - :type k: int - :type n: int - :rtype: List[List[int]] - """ - candidates = [1,2,3,4,5,6,7,8,9] - self.res = [] - self.combSum(candidates, n, [], k) - return self.res - - - def combSum(self,candidates, target, valueList, k): - if target == 0 and k == 0: - self.res.append(valueList) - length = len(candidates) - if length == 0 or k < 0 : - return - for i in range(length): - if candidates[i] > target: - return - self.combSum(candidates[i+1:], target - candidates[i], valueList + [candidates[i]], k-1) - -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/217._contains_duplicate \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/217._contains_duplicate \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index f6c2a2aef..000000000 --- "a/docs/Leetcode_Solutions/C++/217._contains_duplicate \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,62 +0,0 @@ -###217. Contains Duplicate - -题目: - - - -难度: - -Easy - - -我直接sort,然后比较相邻的元素,这样O(n),也是笨办法,居然unlocked a solution,所以来读读解答. - -三个办法: - -- linear search O(n^2) -- sort O(n) -- hashtable - - -我用的sort - -``` -class Solution(object): - def containsDuplicate(self, nums): - """ - :type nums: List[int] - :rtype: bool - """ - nums.sort() - for i in range(len(nums)-1): - if nums[i] == nums[i+1]: - return True - return False -``` - - - - -看给的Java解法 - - -``` -public boolean containsDuplicate(int[] nums) { - Set set = new HashSet<>(nums.length); - for (int x: nums) { - if (set.contains(x)) return true; - set.add(x); - } - return false; -} -``` - -还有一个取巧的Python解法,我也看到了 - -``` -class Solution(object): - def containsDuplicate(self, nums): - if len(nums) > len(set(nums)): - return True - return False -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/218._The _Skyline_Problem \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/218._The _Skyline_Problem \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 34d9c9176..000000000 --- "a/docs/Leetcode_Solutions/C++/218._The _Skyline_Problem \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,134 +0,0 @@ -### 218. The Skyline Problem - -题目: - - - -难度: - -Hard - -思路 - -观察发现,skyline的points的横坐标一定是某个building的左边界或者右边界。 - -开始,假设只有2个建筑物,拿出第一个buiding B1,我们先把它的左上顶点加进我们的output结果skyline中,然后继续拿下一个building B2,我们现在需要将B2的左上顶点对应的x coordinate与B1的右上顶点所对应的x coordinate做比较: - -- 如果前者小且B2的高度大于B1的高度,则我们将B2的左上顶点也加入skyline中去。 -- 如果前者小且B2的高度小于等于B1的高度,则忽略B2的左上顶点 - -接下来考虑更多建筑物的情况,从左到右扫描,当我们遇到第一个楼的左边界时,把它push到一个heap中。如果后面扫描的楼的高度比heap中最高的楼还高,那么它的左上顶点一定会被加入到skyline中。当我们遇到一个building的右边界时,我们需要将其从heap中pop掉,如果heap中max height有变化,则push到结果中。 - -参考[Brian Gordon的blog](https://briangordon.github.io/2014/08/the-skyline-problem.html) - 和 [Stefan大神的题解](https://leetcode.com/problems/the-skyline-problem/discuss/61194) - -#### 程序代码解释 - -- liveBuildings代表(左上顶点已经被加入output中但右上顶点还没有做判断的building)的右上顶点的集合,形式为[(height, x-coordinate)…..] -- skyline是output -- 程序里面的这句代码```while idx < n and buildings[idx][0] == start:```是为了防止有左右坐标完全相同但是height不同的building的存在,it's not useless!!! -- python里面的heapq模块如果有不懂的同学可以看看这个文章:[heapq](http://blog.csdn.net/calling_wisdom/article/details/41676133) - - -```python -class Solution(object): - def getSkyline(self, buildings): - """ - :type buildings: List[List[int]] - :rtype: List[List[int]] - """ - idx, n = 0, len(buildings) - liveBuildings, skyline = [], [] -        while idx < n or len(liveBuildings) > 0: # 只要所有的点没处理完就一直循环 -            if len(liveBuildings) == 0 or (idx < n and buildings[idx][0] <= -liveBuildings[0][1]): - start = buildings[idx][0] - while idx < n and buildings[idx][0] == start: - heapq.heappush(liveBuildings, [-buildings[idx][2], -buildings[idx][1]]) - idx += 1 - else: - start = -liveBuildings[0][1] - while len(liveBuildings) > 0 and -liveBuildings[0][1] <= start: - heapq.heappop(liveBuildings) - height = len(liveBuildings) and -liveBuildings[0][0] - if len(skyline) == 0 or skyline[-1][1] != height: - skyline.append([start, height]) - return skyline -``` -#####另外还有一个超级6的大神的代码,但是今天我要赶报告,就只先贴代码了 - -```python -class Solution(object): - def getSkyline(self, buildings): - """ - :type buildings: List[List[int]] - :rtype: List[List[int]] - """ - events = sorted([(L, -H, R) for L, R, H in buildings] + list(set((R, 0, None) for L, R, H in buildings))) - #events = sorted(event for L, R, H in buildings for event in ((L, -H, R), (R, 0, None))) - res, hp = [[0, 0]], [(0, float("inf"))] - for x, negH, R in events: - while x >= hp[0][1]: - heapq.heappop(hp) - if negH: heapq.heappush(hp, (negH, R)) - if res[-1][1] + hp[0][0]: - res += [x, -hp[0][0]], - return res[1:] -``` - -```Java -public class Solution { - public List getSkyline(int[][] buildings) { - List result = new ArrayList(); - if (buildings == null || buildings.length == 0 || buildings[0].length == 0) { - return result; - } - - List heights = new ArrayList(); - for (int[] building : buildings) { - heights.add(new Height(building[0], -building[2])); - heights.add(new Height(building[1], building[2])); - } - Collections.sort(heights, new Comparator() { - @Override - public int compare(Height h1, Height h2) { - return h1.index != h2.index ? h1.index - h2.index : h1.height - h2.height; - } - }); - - PriorityQueue pq = new PriorityQueue(1000, Collections.reverseOrder()); - pq.offer(0); - int prev = 0; - for (Height h : heights) { - if (h.height < 0) { - pq.offer(-h.height); - } else { - pq.remove(h.height); - } - int cur = pq.peek(); - if (cur != prev) { - result.add(new int[]{h.index, cur}); - prev = cur; - } - } - - return result; - } - - class Height { - int index; - int height; - Height(int index, int height) { - this.index = index; - this.height = height; - } - } -} -``` - - - -Author: Keqi Huang - -If you like it, please spread your support - -![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) diff --git "a/docs/Leetcode_Solutions/C++/219._contains_duplicate_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/219._contains_duplicate_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 8c5868c6f..000000000 --- "a/docs/Leetcode_Solutions/C++/219._contains_duplicate_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,35 +0,0 @@ -###219. Contains Duplicate II - -题目: - - - -难度: - -Easy - - -经过了Contains Duplicate的考验,用hash table(也叫dictionary)来存,这个元素还没出现过,就放hash table,如果出现了,计算相邻距离,小于等于k则return true,否则更新hash table中元素的位置, - - -我用的sort - -``` -class Solution(object): - def containsNearbyDuplicate(self, nums, k): - """ - :type nums: List[int] - :type k: int - :rtype: bool - """ - if len(nums) < 2 : return False - lookup = {} - for i in range(len(nums)): - if nums[i] not in lookup: - lookup[nums[i]] = i - else: - if i - lookup[nums[i]] <= k : - return True - lookup[nums[i]] = i - return False -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/221._maximal_square \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/221._maximal_square \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 3dd7b9a8c..000000000 --- "a/docs/Leetcode_Solutions/C++/221._maximal_square \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,78 +0,0 @@ -###221. Maximal Square - - -题目: - - - -难度: -Medium - -tag: DP - - -递推公式,一开始想的很简单: - -dp[i][j] = dp[i-1][j-1] + 1 #如果dp[i-1][j-1]为1,dp[i-1][j]为1,dp[i][j-1]为1 - -很明显的错误,一旦遇到更大的方块就会有问题 - -然后看了hint,其实递推方程式是很有技巧的,左上角,左边,上面,相邻的三个部分最小的+1,当然,前提也是要这里dp[i][j] 为1,然后我们再会去看其他的部分。 - -看个例子 - -``` -原本的matrix DP - -1 0 1 0 0 1 0 1 0 0 -1 0 1 1 1 → 1 0 1 1 1 -1 1 1 1 1 1 1 1 2 2 -1 0 0 1 0 1 0 0 1 0 - -``` - -是非常make sense的,因为最小的必定包括了周边的1,然后再加1,否则如果是0的话那么就为0. - -而naïve的错误的递推公式是因为一个square考虑的部分是k * k的部分, k * k 部分都必定为1. - -而正确的递推公式 - - - dp[i][j] = min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1]) + 1 - -则完美的考虑了这一情况 - - -``` -class Solution(object): - def maximalSquare(self, matrix): - """ - :type matrix: List[List[str]] - :rtype: int - """ - dp = [] - for i in matrix: - tmp = [] - for j in i: - tmp.append(int(j)) - dp.append(tmp) - - row = len(dp) - col = len(dp[0]) if row else 0 - - - for i in range(1,row): - for j in range(1,col): - if dp[i][j] == 1: - dp[i][j] = min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1]) + 1 - - - maxv = 0 - for i in range(row): - for j in range(col): - if dp[i][j] > maxv: - maxv = dp[i][j] - return maxv * maxv -``` - - diff --git "a/docs/Leetcode_Solutions/C++/222._count_complete_tree_nodes \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/222._count_complete_tree_nodes \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e1b6bede6..000000000 --- "a/docs/Leetcode_Solutions/C++/222._count_complete_tree_nodes \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,67 +0,0 @@ -###222. Count Complete Tree Nodes - -题目: - - - -难度: -Medium - - -思路: - - -思路一: 超时,跟一般的树一样,递归的来数nodes数 - - - -``` -class Solution(object): - def countNodes(self, root): - """ - :type root: TreeNode - :rtype: int - """ - if root == None: - return 0 - if root.left == None and root.right == None: - return 1 - return 1 + self.countNodes(root.left) + self.countNodes(root.right) -``` - - -思路二:既然说了是 complete binary tree,那么必然有特性可用,complete binary tree的特性是除了最后一层,之前的就是perfect tree. - - -所以寻找左子树的最左边的高度和右子树的最右边的node高度,如果相同就是perfect tree,高度2^h - 1, 否则递归的来看左子树和右子树 - - -``` - -class Solution(object): - def countNodes(self, root): - """ - :type root: TreeNode - :rtype: int - """ - if root == None: - return 0 - - p, q = root,root - - leftHeight = 0 - rightHeight = 0 - - while p: - p = p.left - leftHeight += 1 - - while q: - q = q.right - rightHeight += 1 - - if leftHeight == rightHeight: - return (int)(math.pow(2,leftHeight) - 1) - else: - return 1 + self.countNodes(root.left) + self.countNodes(root.right) -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/223._rectangle_area \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/223._rectangle_area \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 3edba1bc3..000000000 --- "a/docs/Leetcode_Solutions/C++/223._rectangle_area \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,50 +0,0 @@ -###223. Rectangle Area - -题目: - - - -难度 : Easy - - -这道题是我瞎了狗眼,🐶,之前看错了,以为要求相交的部分,结果是求cover的部分,所以写的长|||||| - - -``` -class Solution(object): - def computeArea(self, A, B, C, D, E, F, G, H): - """ - :type A: int - :type B: int - :type C: int - :type D: int - :type E: int - :type F: int - :type G: int - :type H: int - :rtype: int - """ - return self.area(C - A, D - B) + self.area(H - F, G - E ) - self.area(self.interSect(A,C,E,G), self.interSect(B,D,F,H)) - - def area(self, w, h): - if w * h < 0: - return - w * h - return w * h - - - def interSect(self, A, C, E, G): - if E > C: - return 0 - elif G < A: - return 0 - elif E >= A and G <= C: - return G - E - elif A >= E and C <= G: - return C - A - elif G <= C and G >= A and E <= A: - return G - A - else: - return C - E - - -``` diff --git "a/docs/Leetcode_Solutions/C++/224. Basic Calculator \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/224. Basic Calculator \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 53683dc7e..000000000 --- "a/docs/Leetcode_Solutions/C++/224. Basic Calculator \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,108 +0,0 @@ -### 224. Basic Calculator - - - -题目: - - -难度: -Medium - -思路: - -基本跟227一样,只是这里加了括号 - -瞄了一眼,基本上infix(中缀表达式)都是表达成postfix(后缀表达式)再来求值的。 -比如 A + B * C 写成 A B C * + - -| Infix Expression | Prefix Expression | Postfix Expression | -| ---------------- | ----------------- | ------------------ | -| A + B | + A B | A B + | -| A + B * C | + A * B C | A B C * + | - - - -infix 中缀转postfix 后缀还有专门的算法: - - - -1. Create an empty stack called opstack for keeping operators. Create an empty list for output. - -2. Convert the input infix string to a list by using the string method split. - -3. Scan the token list from left to right. - -4. - If the token is an operand, append it to the end of the output list. - - If the token is a left parenthesis, push it on the opstack. - - If the token is a right parenthesis, pop the opstack until the corresponding left parenthesis is removed. Append each operator to the end of the output list. - - If the token is an operator, *, /, +, or -, push it on the opstack. However, first remove any operators already on the opstack that have higher or equal precedence and append them to the output list. - -5. When the input expression has been completely processed, check the opstack. Any operators still on the stack can be removed and appended to the end of the output list. - - - -可以看到中缀转后缀一个重要的点是: 当我们把operator +-*/ 放到opstack上时候,我们需要考虑/看是否有之前的operator有更高或者相等的precedence,这个时候我们需要优先(计算)把它放到output list. - - - -参考 - - - - - -AC代码 - -``` -class Solution(object): - def calculate(self, s): - """ - :type s: str - :rtype: int - """ - def precedence(op): - if op == '*' or op == '/': - return 2 - else: - return 1 - - def cal(op, op1, op2): - if op == '*': - return op1 * op2 - elif op == '/': - return op1 / float(op2) - elif op == '+': - return op1 + op2 - else: - return op1 - op2 - - - opstack = [] - operands = [] - - # remove empty space and put operands and - idx = 0 - for i in range(idx, len(s)): - if s[i] in '+-*/': - operands.append(s[idx:i]) - while len(opstack) > 0 and precedence(s[i]) <= precedence(opstack[-1]) and len(operands) >= 2: - op = opstack.pop() - op2 = int(operands.pop()) - op1 = int(operands.pop()) - res = cal(op, op1, op2) - operands.append(res) - opstack.append(s[i]) - idx = i + 1 - operands.append(s[idx:]) - - while opstack: - op = opstack.pop() - op2 = int(operands.pop()) - op1 = int(operands.pop()) - res = cal(op, op1, op2) - operands.append(res) - - return int(operands[0]) - -``` - diff --git "a/docs/Leetcode_Solutions/C++/225._implement_stack_using_queues \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/225._implement_stack_using_queues \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 10a1ac200..000000000 --- "a/docs/Leetcode_Solutions/C++/225._implement_stack_using_queues \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,53 +0,0 @@ -###225. Implement Stack using Queues - -题目: - - - - -难度: - -Easy - - -又到了作弊神预言Python的强项 - - -``` -class Stack(object): - def __init__(self): - """ - initialize your data structure here. - """ - self.lst = [] - - - def push(self, x): - """ - :type x: int - :rtype: nothing - """ - self.lst.append(x) - - - def pop(self): - """ - :rtype: nothing - """ - self.lst.remove(self.lst[-1]) - - - def top(self): - """ - :rtype: int - """ - return self.lst[-1] - - def empty(self): - """ - :rtype: bool - """ - return self.lst == [] - -``` - diff --git "a/docs/Leetcode_Solutions/C++/226._invert_binary_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/226._invert_binary_tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b66918814..000000000 --- "a/docs/Leetcode_Solutions/C++/226._invert_binary_tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,33 +0,0 @@ -###226. Invert Binary Tree - -题目: - - - -难度: - -Easy - -然后查了一下,有更简单的写法 - - -``` - -class Solution(object): - def invertTree(self, root): - """ - :type root: TreeNode - :rtype: TreeNode - """ - if root == None: return None - elif root.left == None and root.right == None: return root - else: - leftNode = root.left - rightNode = root.right - root.right = leftNode - root.left = rightNode - self.invertTree(root.left) - self.invertTree(root.right) - return root -``` - diff --git "a/docs/Leetcode_Solutions/C++/227._basic_calculator_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/227._basic_calculator_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index ac5ea4eeb..000000000 --- "a/docs/Leetcode_Solutions/C++/227._basic_calculator_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,108 +0,0 @@ -###227. Basic Calculator II - - - -题目: - - - -难度: -Medium - -思路: - -瞄了一眼,基本上infix(中缀表达式)都是表达成postfix(后缀表达式)再来求值的。 -比如 A + B * C 写成 A B C * + - - -| Infix Expression | Prefix Expression | Postfix Expression | -| ---------------- | ----------------- | ------------------ | -| A + B | + A B | A B + | -| A + B * C | + A * B C | A B C * + | - - -infix 中缀转postfix 后缀还有专门的算法: - - - -1. Create an empty stack called opstack for keeping operators. Create an empty list for output. - -2. Convert the input infix string to a list by using the string method split. - -3. Scan the token list from left to right. - -4. - If the token is an operand, append it to the end of the output list. - - If the token is a left parenthesis, push it on the opstack. - - If the token is a right parenthesis, pop the opstack until the corresponding left parenthesis is removed. Append each operator to the end of the output list. - - If the token is an operator, *, /, +, or -, push it on the opstack. However, first remove any operators already on the opstack that have higher or equal precedence and append them to the output list. - -5. When the input expression has been completely processed, check the opstack. Any operators still on the stack can be removed and appended to the end of the output list. - - - -可以看到中缀转后缀一个重要的点是: 当我们把operator +-*/ 放到opstack上时候,我们需要考虑/看是否有之前的operator有更高或者相等的precedence,这个时候我们需要优先(计算)把它放到output list. - - - - -参考 - - - - - -AC代码 - -``` -class Solution(object): - def calculate(self, s): - """ - :type s: str - :rtype: int - """ - def precedence(op): - if op == '*' or op == '/': - return 2 - else: - return 1 - - def cal(op, op1, op2): - if op == '*': - return op1 * op2 - elif op == '/': - return op1 / float(op2) - elif op == '+': - return op1 + op2 - else: - return op1 - op2 - - - opstack = [] - operands = [] - - # remove empty space and put operands and - idx = 0 - for i in range(idx, len(s)): - if s[i] in '+-*/': - operands.append(s[idx:i]) - while len(opstack) > 0 and precedence(s[i]) <= precedence(opstack[-1]) and len(operands) >= 2: - op = opstack.pop() - op2 = int(operands.pop()) - op1 = int(operands.pop()) - res = cal(op, op1, op2) - operands.append(res) - opstack.append(s[i]) - idx = i + 1 - operands.append(s[idx:]) - - while opstack: - op = opstack.pop() - op2 = int(operands.pop()) - op1 = int(operands.pop()) - res = cal(op, op1, op2) - operands.append(res) - - return int(operands[0]) - -``` - diff --git "a/docs/Leetcode_Solutions/C++/228._summary_ranges \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/228._summary_ranges \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index ce9dce0f9..000000000 --- "a/docs/Leetcode_Solutions/C++/228._summary_ranges \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,58 +0,0 @@ -### 228. Summary Ranges - -题目: - - - -难度: - -Medium - - -Just collect the ranges, then format and return them. - -```python -class Solution(object): - def summaryRanges(self, nums): - """ - :type nums: List[int] - :rtype: List[str] - """ - ranges = [] - for i in nums: - if not ranges or i > ranges[-1][-1] + 1: - ranges += [], - ranges[-1][1:] = i, - return ['->'.join(map(str, r)) for r in ranges] -``` -About the commas :-) - -``` -ranges += [], -r[1:] = n, -``` -Why the trailing commas? Because it turns the right hand side into a tuple and I get the same effects as these more common alternatives: -``` -ranges += [[]] -or -ranges.append([]) - -r[1:] = [n] -``` -Without the comma, … - -- ranges += [] wouldn’t add [] itself but only its elements, i.e., nothing. -- r[1:] = n wouldn’t work, because my n is not an iterable. - -Why do it this way instead of the more common alternatives I showed above? Because it’s shorter and faster (according to tests I did a while back). - -写到这里可能又有疑问了🤔️,为什么不可以直接写```ranges[-1][1] = i```呢,当然是会报```IndexError: list assignment index out of range```错误啦,那为什么```ranges[-1][1:] = i,```可以呢? - -简单来说 - -L1=L 与 L1=L[:] -- L1和L 都是对同一个对象的引用(所谓绑定的意思)。 -- L[:] 是生成了一个和L不同的新的对象,L1 变为了L[:] 这个对象的引用。 - - -参考[stefan](https://leetcode.com/problems/summary-ranges/discuss/63193) diff --git "a/docs/Leetcode_Solutions/C++/229._majority_element_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/229._majority_element_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 061c03441..000000000 --- "a/docs/Leetcode_Solutions/C++/229._majority_element_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,62 +0,0 @@ -###229. Majority Element II - - - -题目: - - - -难度: -Medium - -思路: - -majority element是两两比较扔掉不同的元素,然后最后会留下一个。 - -这里变成三三比较来扔东西, find all elements that appear more than ⌊ n/3 ⌋ times,所以最多可以有两个majority element ii. - - -最后再加一个比较来确认这些函数是majority element - -``` -class Solution(object): - def majorityElement(self, nums): - """ - :type nums: List[int] - :rtype: List[int] - """ - cnt1 = 0 - cnt2 = 0 - maj1 = 0 - maj2 = 0 - for num in nums: - if maj1 == num: - cnt1 += 1 - elif maj2 == num: - cnt2 += 1 - elif cnt1 == 0: - maj1 = num - cnt1 += 1 - elif cnt2 == 0: - maj2 = num - cnt2 += 1 - else: - cnt1 -= 1 - cnt2 -= 1 - - cnt1 = 0 - cnt2 = 0 - - n = len(nums) - res = [] - for num in nums: - if maj1 == num: - cnt1 += 1 - elif maj2 == num: - cnt2 += 1 - if cnt1 > n/3: - res.append(maj1) - if cnt2 > n/3: - res.append(maj2) - return res -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/230._kth_smallest_element_in_a_bst \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/230._kth_smallest_element_in_a_bst \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b51fc7a07..000000000 --- "a/docs/Leetcode_Solutions/C++/230._kth_smallest_element_in_a_bst \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,48 +0,0 @@ -### 230. Kth Smallest Element in a BST - -题目: - - - -难度: -Medium - - -跟昨天做的一道题类似,一上来就走取巧之路。 - -InOrder排序,输出,当然也完全可以用昨天的binary tree iterator,入stack,出stack,直到输出第k位 - - -```python -class Solution(object): - def kthSmallest(self, root, k): - """ - :type root: TreeNode - :type k: int - :rtype: int - """ - self.root = root - self.lst = [] - self.inOrder(root) - return self.lst[k-1] - - def inOrder(self, root): - if root == None: - return - self.inOrder(root.left) - self.lst.append(root.val) - self.inOrder(root.right) -``` - - -现在看到kth 就条件反射的想用divide & conquer, 扫root的左子树看nodes量,如果nodes数量是k-1,那么node就刚好是第k个,如果大于k > 左子树数量,扫右子树,同时更新root为root.right。 - -看到的言论: - -> If we can change the BST node structure, We can add a new Integer to mark the number of element in the left sub-tree. - -when the node is not null. - -- if k == node.leftNum + 1, return node -- if k > node.leftNum + 1, make k -= node.leftNum + 1, and then node = node.right -- otherwise, node = node.left diff --git "a/docs/Leetcode_Solutions/C++/231. _Power_of_Two \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/231. _Power_of_Two \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index c90024d2e..000000000 --- "a/docs/Leetcode_Solutions/C++/231. _Power_of_Two \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,89 +0,0 @@ -### 231. Power of Two - - - -题目: - - - -难度: - -Easy - - - -思路: - - - -power of two 那是这个数字的binary 表示一定只有一个1 - -套用以前的代码[leetcode191](https://github.com/Lisanaaa/thinking_in_lc/blob/master/191._number_of_1_bits.md) - -这样会超时 - -``` -class Solution(object): -    def isPowerOfTwo(self, n): # 此法超时 -        """ - :type n: int - :rtype: bool - """ - cnt = 0 - while n != 0: - n &= n - 1 - cnt += 1 - return cnt == 1 -``` - - - -跟power of three一样递归,可以AC - - - -```python -class Solution(object): - def isPowerOfTwo(self, n): - """ - :type n: int - :rtype: bool - """ - if n <= 0: - return False - if n == 1: - return True - if n % 2 == 0: - return self.isPowerOfTwo(n/2) - return False - -``` - - - - - - - -也是有[算法的wikipedia page](https://en.wikipedia.org/wiki/Power_of_two#Fast_algorithm_to_check_if_a_positive_number_is_a_power_of_two) - -> The [binary representation](https://en.wikipedia.org/wiki/Binary_numeral_system) of integers makes it possible to apply a very fast test to determine whether a given [positive integer](https://en.wikipedia.org/wiki/Positive_integer) *x* is a power of two: -> -> positive *x* is a power of two ⇔ (*x* & (*x* − 1)) is equal to zero. - - - -注意特殊case 0的处理 - -```python -class Solution(object): - def isPowerOfTwo(self, n): - """ - :type n: int - :rtype: bool - """ - return n & (n-1) == 0 if n != 0 else False -``` - - - diff --git "a/docs/Leetcode_Solutions/C++/232._implement_queue_using_stacks \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/232._implement_queue_using_stacks \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 53647fc0e..000000000 --- "a/docs/Leetcode_Solutions/C++/232._implement_queue_using_stacks \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,51 +0,0 @@ -###232. Implement Queue using Stacks - -题目: - - - -难度: -Easy - -这个题没有乖乖听话,不过因为当年做过用两个stack来模拟queue - -然后不得不说,我Python大法实在太厉害了 - -这功能强大的,我简直要啧啧啧 - -``` -class Queue(object): - def __init__(self): - """ - initialize your data structure here. - """ - self.lst = [] - - - def push(self, x): - """ - :type x: int - :rtype: nothing - """ - self.lst.append(x) - - - def pop(self): - """ - :rtype: nothing - """ - del self.lst[0] - - def peek(self): - """ - :rtype: int - """ - return self.lst[0] - - - def empty(self): - """ - :rtype: bool - """ - return self.lst == [] -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/234._palindrome_linked_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/234._palindrome_linked_list \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 0d92492b0..000000000 --- "a/docs/Leetcode_Solutions/C++/234._palindrome_linked_list \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,94 +0,0 @@ -### 234. Palindrome Linked List - -题目: - - - -难度: -Easy - -蠢了一下, - -思路是:“先翻转整个链表(in-place),然后和之前的链表比较”,但是这样原链表都变了,肯定错。 - -如果新建一个链表,然后改造成原来链表的翻转链表,还是可行的,但是空间复杂度就是O(n)了。那还不如直接把List中元素拷贝到数组中直接比较,ac代码如下: - - -```python -class Solution(object): - def isPalindrome(self, head): - """ - :type head: ListNode - :rtype: bool - """ - vals = [] - while head: - vals += head.val, - head = head.next - return vals == vals[::-1] -``` - -这道题并不能算Easy吧: - -思路二: -要想实现O(1)的空间复杂度,可以找到中间的节点,把linked list拆成两个部分,后半部分linkedlist reverse,然后比较两个linked list值是否相同,看例子: - - -``` -1 -> 3 -> 1 拆成 1 和 1 - -1 -> 3 -> 5 ->5 -> 3 -> 1 拆成 1-> 3 -> 5 和 5 -> 3 -> 1 - -``` - -可以使用快慢指针来找到中间的节点。 - - -```python -class Solution(object): - def isPalindrome(self, head): - """ - :type head: ListNode - :rtype: bool - """ - fast = slow = head - # 找到中间节点 - while fast and fast.next: - fast = fast.next.next - slow = slow.next - # 翻转后半部分 - prev = None - while slow: - tmp = slow.next - slow.next = prev - prev = slow - slow = tmp - # 比较前后两部分 - while prev: # while prev and head: - if prev.val != head.val: - return False - prev = prev.next - head = head.next - return True -``` - -给个最终状态的例子: -``` - - fast tmp - None prev slow - ^ ^ ^ - | | | -1 --> 2 --> 3 <-- 2 <-- 1 None - -``` -但是注意最后的while prev不能换成while fast, 因为这是总节点数为奇数的情况,如果是偶数情况就不一样了,如下: -``` -                         tmp -                          slow    - None prev fast - ^ ^ ^ - | | | -1 --> 2 --> 2 <-- 1 None - -``` diff --git "a/docs/Leetcode_Solutions/C++/235._lowest_common_ancestor_of_a_binary_search_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/235._lowest_common_ancestor_of_a_binary_search_tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 62c1e09a5..000000000 --- "a/docs/Leetcode_Solutions/C++/235._lowest_common_ancestor_of_a_binary_search_tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,33 +0,0 @@ -###235. Lowest Common Ancestor of a Binary Search Tree - -题目: - - - -难度 : Easy - -- 两个node,一个大于root,一个小于root,那么必定root两边,共同的ancestor是root,同时再考虑同为空的状况 -- 两个node,都比node小,到左边去寻找,那么先找到那个必定是common ancestor -- 两个node,都比node大,类似.... - - -AC解法 - -``` -class Solution(object): - def lowestCommonAncestor(self, root, p, q): - """ - :type root: TreeNode - :type p: TreeNode - :type q: TreeNode - :rtype: TreeNode - """ - if root == None or root == p or root == q: - return root - elif p.val < root.val < q.val or q.val < root.val < p.val : - return root - elif p.val < root.val and q.val < root.val: - return self.lowestCommonAncestor(root.left,p,q) - else: - return self.lowestCommonAncestor(root.right,p,q) -``` diff --git "a/docs/Leetcode_Solutions/C++/236._lowest_common_ancestor_of_a_binary_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/236._lowest_common_ancestor_of_a_binary_tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 271c462ad..000000000 --- "a/docs/Leetcode_Solutions/C++/236._lowest_common_ancestor_of_a_binary_tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,104 +0,0 @@ - -###236. Lowest Common Ancestor of a Binary Tree - - -题目: - - - -难度: - -Medium - - - -思路 - -求root到node的path,然后对比path,最后一个想同的点就是lowest common ancestor - - - -好开心,AC了 - - -但是我根本不能在Runtime Distribution 上找到我,因为太慢了|||| - - - - -``` - -class Solution(object): - def lowestCommonAncestor(self, root, p, q): - """ - :type root: TreeNode - :type p: TreeNode - :type q: TreeNode - :rtype: TreeNode - """ - pathP = self.pathTo(root,p) - pathQ = self.pathTo(root,q) - n = min(len(pathP), len(pathQ)) - - ans = root - for i in range(n): - if pathP[i] == pathQ[i]: - ans = pathP[i] - else: - break - return ans - - - def pathTo(self, root, goal): - # goal node ,path - if root == None: return root - stack = [(root, [root])] - while stack: - node, path = stack.pop() - if node == goal: - return path - if node.left: stack.append((node.left, path + [node.left])) - if node.right: stack.append((node.right, path + [node.right])) - -``` - -递归解法,之所以我没有用递归因为有疑惑, BASE CASE 很容易想到,root 是none,或者p == root 或者q == root,那么LCA就是root,如果两个node一个在左边,一个在右边,那么LCA也是root,但是如果一个是6,另一个是4则有一点疑惑,但其实是没有问题的,因为这个时候给的总是他们的共同root,所以这个递归解法是没错的,总是想到递归是在那个状况下递归 - - -``` - _______3______ - / \ - ___5__ ___1__ - / \ / \ - 6 _2 0 8 - / \ - 7 4 -``` - -AC代码 - - - -``` -class Solution(object): - def lowestCommonAncestor(self, root, p, q): - """ - :type root: TreeNode - :type p: TreeNode - :type q: TreeNode - :rtype: TreeNode - """ - if root == None: - return None - - if p == root or q == root: - return root - - left = self.lowestCommonAncestor(self.left,p,q) - right = self.lowestCommonAncestor(self.right,p,q) - - if left and right: - return root - - return left if left is None else right -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/237._delete_node_in_a_linked_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/237._delete_node_in_a_linked_list \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index d401e090d..000000000 --- "a/docs/Leetcode_Solutions/C++/237._delete_node_in_a_linked_list \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,52 +0,0 @@ -### 237. Delete Node in a Linked List - -题目: - - - -难度: -Easy - - - -这道题,第一感觉,像删链表一样来删,把所有的node val前移一个,但是有个问题,为什么tail那个node还是存在?哼(ˉ(∞)ˉ)唧.. - -已经被解答: - - - - - -另外一个O(1)的办法更好,把后一个node的val移到待删这个节点,并且把node.next = node.next.next - -题目说了不会删最后一个点,所以node.next.next一定存在,所以直接让node的val等于它next的val,然后让node的next指向它的next的next,举个例子: - 1->2->3->4->5->None,要删除第四个节点,就让4变成5,然后让第四个节点指向第五个节点的next, -这样原来的第四个节点就不存在了,虽然原来的第五个节点仍然存在且指向None,变成了1->2->3->5->None-<5 - - - -```python -O(1)时间 -class Solution(object): - def deleteNode(self, node): - """ - :type node: ListNode - :rtype: void Do not return anything, modify node in-place instead. - """ - node.val = node.next.val - node.next = node.next.next -``` -```python -O(n)时间 -class Solution(object): - def deleteNode(self, node): - """ - :type node: ListNode - :rtype: void Do not return anything, modify node in-place instead. - """ - while node.next: - node.val = node.next.val - prev, node = node, node.next - # clear reference to tail - prev.next = None -``` diff --git "a/docs/Leetcode_Solutions/C++/238._product_of_array_except_self \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/238._product_of_array_except_self \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 00a883f6b..000000000 --- "a/docs/Leetcode_Solutions/C++/238._product_of_array_except_self \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,100 +0,0 @@ -###238. Product of Array Except Self - -题目: - - - -难度: - -Medium - - -不使用division 并且O(n) - - -想到的算法 O(n^2) - -会超时 - - -``` -class Solution(object): - def productExceptSelf(self,nums): - """ - :type nums: List[int] - :rtype: List[int] - """ - lst = [] - for i in range(len(nums)): - lst.append(self.productWithoutI(nums,i)) - return lst - - - def productWithoutI(self,nums,i): - product = 1 - for j in range(len(nums)): - if j != i: - product *= nums[j] - return product -``` - -如果用除法,也会有问题,如果有0出现也会变繁琐。 - -谷歌一下: - - -解法还是很棒的 - - output[i] = { i 前面的数的乘积} X { i 后面的数的乘积} - - -``` -class Solution(object): - def productExceptSelf(self,nums): - """ - :type nums: List[int] - :rtype: List[int] - """ - if nums == [] : return [] - lft = [1] - rgt = [1] - product = 1 - for i in range(1,len(nums)): - product *= nums[i-1] - lft.append(product) - product = 1 - for i in reversed(range(1,len(nums))): - product *= nums[i] - rgt.append(product) - rgt.reverse() - result = [] - for i in range(len(nums)): - result.append(lft[i]*rgt[i]) - return result - -``` - - -空间O(n),再看到满足要求的“标准解法” - - -``` -class Solution(object): - def productExceptSelf(self,nums): - """ - :type nums: List[int] - :rtype: List[int] - """ - if nums == [] : return [] - size = len(nums) - output = [1] * size - left = 1 - for x in range(size-1): - left *= nums[x] - output[x+1] *= left - right = 1 - for x in range(size - 1, 0, -1): - right *= nums[x] - output[x-1] *= right - return output -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/240._search_a_2d_matrix_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/240._search_a_2d_matrix_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 545732ebc..000000000 --- "a/docs/Leetcode_Solutions/C++/240._search_a_2d_matrix_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,63 +0,0 @@ -### 240. Search a 2D Matrix II - - - -题目: - - - -难度: -Medium - -思路: - -每行,每列都是sorted - -但是比较好的策略是从右上角开始搜索,比如这样: - -``` -matrix = [ - [1, 4, 7, 11, 15], - [2, 5, 8, 12, 19], - [3, 6, 9, 16, 22], - [10, 13, 14, 17, 24], - [18, 21, 23, 26, 30] -] - -m, n = 0, col - 1 -更新策略: - matrix[m][n] < target: 那么这一行到从左走到此都会小于target,row+1 ,往下走 - matrix[m][n] > target: 那么这一列往下走都会大于target,col - 1,往左走 - 否则找到 -``` - -时间复杂度O(max(M,N)),因为每次都会往下或者往左走 - - -用的算法是Saddleback - - - -```python -class Solution(object): - def searchMatrix(self, matrix, target): - """ - :type matrix: List[List[int]] - :type target: int - :rtype: bool - """ - if not matrix: - return False - row = len(matrix) - col = len(matrix[0]) if row else 0 - m, n = 0, col - 1 - while m < row and n >= 0: - if matrix[m][n] < target: - m += 1 - elif matrix[m][n] > target: - n -= 1 - else: - return True - return False - -``` diff --git "a/docs/Leetcode_Solutions/C++/242._valid_anagram \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/242._valid_anagram \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 46d8cd269..000000000 --- "a/docs/Leetcode_Solutions/C++/242._valid_anagram \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,61 +0,0 @@ -### 242. Valid Anagram - -题目: - - - -难度 : Easy - - -一行瞬秒: - -```python -class Solution(object): - def isAnagram(self, s, t): - """ - :type s: str - :type t: str - :rtype: bool - """ - return collections.Counter(s) == collections.Counter(t) -``` - -```python -class Solution(object): - def isAnagram(self, s, t): - """ - :type s: str - :type t: str - :rtype: bool - """ - return sorted(s) == sorted(t) - -``` - - -用字数统计,因为只可能是26个字母 - - -``` - -class Solution(object): - def isAnagram(self, s, t): - """ - :type s: str - :type t: str - :rtype: bool - """ - if len(s) != len(t): - return False - - charCnt = [0] * 26 - - for i in range(len(s)): - charCnt[ord(s[i]) - 97] += 1 - charCnt[ord(t[i]) - 97] -= 1 - - for cnt in charCnt: - if cnt != 0: - return False - return True -``` diff --git "a/docs/Leetcode_Solutions/C++/252. Meeting Rooms \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/252. Meeting Rooms \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index c84dee953..000000000 --- "a/docs/Leetcode_Solutions/C++/252. Meeting Rooms \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,47 +0,0 @@ -### 252. Meeting Rooms - - - -题目: - - - - -难度 : Easy - - - -思路: - -学了一下如何根据attribute 来sort object `intervals.sort(key = lambda interval : interval.start)` - - - -AC 代码 - -``` -# Definition for an interval. -# class Interval(object): -# def __init__(self, s=0, e=0): -# self.start = s -# self.end = e - -class Solution(object): - def canAttendMeetings(self, intervals): - """ - :type intervals: List[Interval] - :rtype: bool - """ - n = len(intervals) - if n < 2 : return True - intervals.sort(key = lambda interval : interval.start) - for i in range(1,n): - if intervals[i].start < intervals[i-1].end: - return False - return True -``` - - - - - diff --git "a/docs/Leetcode_Solutions/C++/255._Verify_Preorder_Sequence_in_Binary_Search_Tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/255._Verify_Preorder_Sequence_in_Binary_Search_Tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index dfe1f7039..000000000 --- "a/docs/Leetcode_Solutions/C++/255._Verify_Preorder_Sequence_in_Binary_Search_Tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,72 +0,0 @@ -### 255. Verify Preorder Sequence in Binary Search Tree - -题目: - - - -难度: - -Medium - - -思路: - -这道题让给了我们一个一维数组,让我们验证其是否为一个二叉搜索树的先序遍历出的顺序,我们都知道二叉搜索树的性质是左<根<右,如果用中序遍历得到的结果就是有序数组,而先序遍历的结果就不是有序数组了,但是难道一点规律都没有了吗,其实规律还是有的,根据二叉搜索树的性质,当前节点的值一定大于其左子树中任何一个节点值,而且其右子树中的任何一个节点值都不能小于当前节点值,那么我们可以用这个性质来验证,举个例子,比如下面这棵二叉搜索树: -``` - 10 - / \ - 5 12 - / \ - 2 6 - - preorder:[10, 5, 2, 6, 12] -``` - -如这个例子,我们先设一个最小值min_num,然后遍历数组,如果当前值小于这个最小值min_num,返回false,对于根节点,我们将其压入栈中,然后往后遍历,如果遇到的数字比栈顶元素小,说明是其左子树的点,继续压入栈中,直到遇到的数字比栈顶元素大,那么就是右边的值了,我们需要找到是哪个节点的右子树,所以我们更新low值并删掉栈顶元素,然后继续和下一个栈顶元素比较,如果还是大于,则继续更新low值和删掉栈顶,直到栈为空或者当前栈顶元素大于当前值停止,压入当前值,这样如果遍历完整个数组之前都没有返回false的话,最后返回true即可 - - -参考[Ethan Li 的技术专栏](https://segmentfault.com/a/1190000003874375) - -O(n) time, O(n) space -```python -class Solution(object): - def verifyPreorder(self, preorder): - """ - :type preorder: List[int] - :rtype: bool - """ - stack = [] - min_num = -1 << 31 # 初始化最小值为最小整数 - for x in preorder: - if x < min_num: # 违反最小值限定则是无效的 - return False - while stack and x > stack[-1]: # 将路径中所有小于当前的数pop出来并更新最小值 - min_num = stack.pop() - stack.append(x) # 将当前值push进去 - return True -``` - -### Follow up: -O(n) time, O(1) space - -we realize that the preorder array can be reused as the stack thus achieve O(1) extra space, since the scanned items of preorder array is always more than or equal to the length of the stack. -```python -class Solution(object): - def verifyPreorder(self, preorder): - """ - :type preorder: List[int] - :rtype: bool - """ - # stack = preorder[:i], reuse preorder as stack - min_num = -1 << 31 - i = 0 - for x in preorder: - if x < min_num: - return False - while i > 0 and x > preorder[i - 1]: - min_num = preorder[i - 1] - i -= 1 - preorder[i] = x - i += 1 - return True -``` diff --git "a/docs/Leetcode_Solutions/C++/256. Paint House \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/256. Paint House \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 21576f90a..000000000 --- "a/docs/Leetcode_Solutions/C++/256. Paint House \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,57 +0,0 @@ -### 256. Paint House - -题目: - - -难度: -Medium - - - -其实这个题目有实际意义诶,至少我的故乡?在要申请啥东西的时候就把街上的房子全刷了。 - -然后这个是相邻的房子不同色。 - - - -其实我觉得paint fense更难一点 - - - -思路: - -数组 dp\[x][3] 代表第x个房子paint r/g/b的值 - - - -AC代码 - -``` -class Solution(object): - def minCost(self, costs): - """ - :type costs: List[List[int]] - :rtype: int - """ - m = len(costs) - if m == 0 : return 0 - elif m == 1 : return min(costs[0][0], costs[0][1],costs[0][2]) - else: - n = 3 if m else 0 - dp = [[0 for i in range(3)] for j in range(m)] - - dp[0] = costs[0] - - - for i in range(1,m): - dp[i][0] = min(dp[i-1][1],dp[i-1][2]) + costs[i][0] - dp[i][1] = min(dp[i-1][0],dp[i-1][2]) + costs[i][1] - dp[i][2] = min(dp[i-1][0],dp[i-1][1]) + costs[i][2] - return min(dp[m-1][0], dp[m-1][1], dp[m-1][2]) - -``` - - - - - diff --git "a/docs/Leetcode_Solutions/C++/257._binary_tree_paths \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/257._binary_tree_paths \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index c0fdea6ed..000000000 --- "a/docs/Leetcode_Solutions/C++/257._binary_tree_paths \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,45 +0,0 @@ -###257. Binary Tree Paths - -题目: - - - - -难度: - -Easy - - -Tag : tree, DFS - -类似的题目是Path Sum Ⅱ - - -第一眼看起来不像easy题目,然后堵了一下自己写的Path Sum Ⅱ自己的解答 - -同一种花样 - -``` -class Solution: - # @param {TreeNode} root - # @return {string[]} - def binaryTreePaths(self, root): - if root == None: return [] - result = [] - self.auxTreePaths(root,result,"") - return result - - - def auxTreePaths(self,root,result,curStr): - if root == None: - return - curStr += str(root.val) - if root.left == None and root.right == None: - result.append(curStr) - if root.left: - self.auxTreePaths(root.left,result,curStr + "->") - if root.right: - self.auxTreePaths(root.right,result,curStr + "->") - -``` - diff --git "a/docs/Leetcode_Solutions/C++/258_ Add_Digits \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/258_ Add_Digits \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 2fa72406a..000000000 --- "a/docs/Leetcode_Solutions/C++/258_ Add_Digits \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,34 +0,0 @@ -### 258. Add Digits - -题目: - - - -难度: - -Easy - - -思路 - -这就简单的一p了。。 - - -```python -class Solution(object): - def addDigits(self, num): - """ - :type num: int - :rtype: int - """ - while num / 10 >= 1: - tmp = 0 - while num / 10 >= 1: - tmp += num % 10 - num /= 10 - tmp += num % 10 - num = tmp - return num -``` - - diff --git "a/docs/Leetcode_Solutions/C++/261. Graph Valid Tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/261. Graph Valid Tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 1e309007a..000000000 --- "a/docs/Leetcode_Solutions/C++/261. Graph Valid Tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,69 +0,0 @@ -### 261. Graph Valid Tree - - - -题目: - - - - -难度 : Medium - - - -思路: - -graph 为 tree 两个条件: - -- 这个图是connected -- 没有cycle - - - -偷懒AC代码,直接在323题,Number of Connected Components in an Undirected Graph上改的AC代码: - - - -``` -class Solution(object): - def validTree(self, n, edges): - """ - :type n: int - :type edges: List[List[int]] - :rtype: bool - """ - def find(x): - if uf[x] != x: - uf[x] = find(uf[x]) - return uf[x] - - def union(x,y): - xRoot = find(x) - yRoot = find(y) - uf[xRoot] = yRoot - - uf = [i for i in range(n)] - - for node1, node2 in edges: - # cycle exists - if find(node1) == find(node2): - print 'ha ' - return False - else: - union(node1, node2) - - res = set() - for i in range(n): - res.add(find(i)) - - return len(res) == 1 -``` - - - - - - - - - diff --git "a/docs/Leetcode_Solutions/C++/263._ugly_number \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/263._ugly_number \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 730b0bdde..000000000 --- "a/docs/Leetcode_Solutions/C++/263._ugly_number \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,38 +0,0 @@ -###263. Ugly Number - - - -题目: - - - -难度: -Easy - - -思路: - -因为其prime factors 只包括 2, 3, 5,所以比如如果能被2 整除, n = n / 2, 直到不能被2整除,然后同样对3,5检验,如果最终结果为1,那么就是ugly number,否则不过关 - - -注意一下边界条件,当num为0的时候,return一下False - -``` -class Solution(object): - def isUgly(self, num): - """ - :type num: int - :rtype: bool - """ - if num == 0 : return False - while num % 2 == 0: - num = num / 2 - while num % 3 == 0: - num = num / 3 - while num % 5 == 0: - num = num / 5 - if num == 1: - return True - return False -``` - diff --git "a/docs/Leetcode_Solutions/C++/264._ugly_number_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/264._ugly_number_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index ba1546b9e..000000000 --- "a/docs/Leetcode_Solutions/C++/264._ugly_number_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,140 +0,0 @@ -###264. Ugly Number II - - - -题目: - - - -难度: -Medium - - -思路: - -暴力算法一定会超时 - - - - -先看一个非常🐂的帖子,当我知道python 除了有list之外还有collections就已经被刷新了一次了,然后数据结构 x 数据结构,就展示了数据结构的魅力 - - - - -看一下deque + rotate: - - -``` -import collections -a = collections.deque() -a.append(2) -a.append(5) -a.append(7) -a.append(9) #a deque([2, 5, 7, 9]) - -import bisect -idx = bisect.bisect_left(a,3) #1 -a.rotate(-idx) #deque([5, 7, 9, 2]) - -a.appendleft(3) #deque([3, 5, 7, 9, 2]) - -a.rotate(idx) # deque([2, 3, 5, 7, 9]) -``` - -这个rotate -是往左边rotate,看官网的介绍. - ->Rotate the deque n steps to the right. If n is negative, rotate to the left. Rotating one step to the right is equivalent to: d.appendleft(d.pop()). - -所以这样造成可以🐂的数据结构 - -用这个微调之后的fasttable来解决问题 - - -``` -import collections -import bisect - -class FastTable: - - def __init__(self): - self.__deque = collections.deque() - - def __len__(self): - return len(self.__deque) - - def head(self): - return self.__deque.popleft() - - def tail(self): - return self.__deque.pop() - - def peek(self): - return self.__deque[-1] - - def insert(self, obj): - if obj in self.__deque: - return - index = bisect.bisect_left(self.__deque, obj) - self.__deque.rotate(-index) - self.__deque.appendleft(obj) - self.__deque.rotate(index) - -class Solution(object): - - def nthUglyNumber(self, n): - """ - :type n: int - :rtype: int - """ - q = FastTable() - q.insert(1) - while n > 0: - x = q.head() - q.insert(2*x) - q.insert(3*x) - q.insert(5*x) - n -= 1 - return x -``` - - -还可以优化: -根据页面hint 来做的 - - -``` -class Solution(object): - def nthUglyNumber(self, n): - """ - :type n: int - :rtype: int - """ - if n == 1: - return 1 - else: - import collections - q2 = collections.deque() - q3 = collections.deque() - q5 = collections.deque() - q2.append(2) - q3.append(3) - q5.append(5) - while n > 1: - x = min(q2[0],q3[0],q5[0]) - if x == q2[0]: - x = q2.popleft() - q2.append(2*x) - q3.append(3*x) - q5.append(5*x) - elif x == q3[0]: - x = q3.popleft() - q3.append(3*x) - q5.append(5*x) - else: - x = q5.popleft() - q5.append(5*x) - n -= 1 - return x -``` - diff --git "a/docs/Leetcode_Solutions/C++/265. Paint House II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/265. Paint House II \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index c9dfbc20f..000000000 --- "a/docs/Leetcode_Solutions/C++/265. Paint House II \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,60 +0,0 @@ -### 265. Paint House II - - - -题目: - - -难度: - -Hard - - - -思路: - -感觉不像hard 题,知道为啥hard了,因为can you solve it in O(nk) runtime - -数组 dp\[x][k] 代表第x个房子paint 0..k的值 - - - -用paint house 1 改的AC代码: - -不过这个时间复杂度是O(nkk)吧 - - - -``` -class Solution(object): - def minCostII(self, costs): - """ - :type costs: List[List[int]] - :rtype: int - """ - n = len(costs) - if n == 0 : return 0 - elif n == 1 : return min (costs[0]) - else: - k = len(costs[0]) if n else 0 - dp = [[0 for i in range(k)] for j in range(n)] - - dp[0] = costs[0] - - for i in range(1,n): - for j in range(0,k): - minVal = float('inf') - for m in range(0,k): - if m != j and dp[i-1][m] < minVal: - minVal = dp[i-1][m] - dp[i][j] = minVal + costs[i][j] - - return min(dp[-1]) -``` - - - - - - - diff --git "a/docs/Leetcode_Solutions/C++/266. Palindrome Permutation \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/266. Palindrome Permutation \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 49f78bd04..000000000 --- "a/docs/Leetcode_Solutions/C++/266. Palindrome Permutation \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,46 +0,0 @@ -### 266. Palindrome Permutation - - - -题目: - - -难度 : Easy - - - -思路: - -hint 已经提示的很明显。数单字个数来处理 - - - -AC代码 - - - -``` -class Solution(object): - def canPermutePalindrome(self, s): - """ - :type s: str - :rtype: bool - """ - lookup = {} - - for char in s: - lookup[char] = lookup.get(char,0) + 1 - - res = 0 - - for char, cnt in lookup.items(): - if cnt % 2 == 0 : - continue - else: - res += 1 - - return res < 2 -``` - -​ - diff --git "a/docs/Leetcode_Solutions/C++/267. Palindrome Permutation II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/267. Palindrome Permutation II \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 5243954ee..000000000 --- "a/docs/Leetcode_Solutions/C++/267. Palindrome Permutation II \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,77 +0,0 @@ -### 267. Palindrome Permutation II - - - - - -题目: - - - - -难度 : Medium - - - -思路: - -首先这个题目有个简单版本,那就是判断是否可以permutate 为 palindrome. 问题的关键是最多只能一个odd character. - - - -写的这么不elegant,我也是服气! - -AC代码: - - - -``` -class Solution(object): - def generatePalindromes(self, s): - """ - :type s: str - :rtype: List[str] - """ - def permuteUnique(firstS): - if len(firstS) == 0 : return [] - if len(firstS) == 1 : return [firstS] - res = [] - for i in range(len(firstS)): - if i > 0 and firstS[i] == firstS[i-1]: continue - for j in permuteUnique(firstS[:i] + firstS[i+1:]): - res.append([firstS[i]] + j) - return res - - lookup = {} - for char in s: - lookup[char] = lookup.get(char, 0) + 1 - - res, firstS, oddChar = 0, [], '' - for char, cnt in lookup.items(): - if cnt % 2 == 0: - for i in range(cnt/2): - firstS.append(char) - continue - else: - for i in range(cnt / 2): - firstS.append(char) - oddChar = char - res += 1 - if res >= 2: - return [] - else: - res = permuteUnique(firstS) - if len(res) == 0 and oddChar: - return [oddChar] - return map(lambda x: ''.join(x) + oddChar + ''.join(x[::-1]),res) - -``` - - - - - - - - - diff --git "a/docs/Leetcode_Solutions/C++/268._missing_number \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/268._missing_number \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index fbd54da5a..000000000 --- "a/docs/Leetcode_Solutions/C++/268._missing_number \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,49 +0,0 @@ -### 268. Missing Number - -题目: - - - -难度: - -Medium - - - -等差数列前n项和减去数组之和,一行瞬秒 -```(注意题目input从0开始取值)``` - - -```python -class Solution(object): - def missingNumber(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - return len(nums) * (len(nums) + 1) / 2 - sum(nums) -``` - - - -第二种解法是位运算:位运算(异或运算) - - - -```python -class Solution(object): - def missingNumber(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - res = n = len(nums) - for i in range(n): - res ^= i - res ^= nums[i] - return res -``` - - - - diff --git "a/docs/Leetcode_Solutions/C++/270. Closest Binary Search Tree Value \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/270. Closest Binary Search Tree Value \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b2aafe48a..000000000 --- "a/docs/Leetcode_Solutions/C++/270. Closest Binary Search Tree Value \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,66 +0,0 @@ -### 270. Closest Binary Search Tree Val - -题目: - - - - - -难度 : Easy - -最简单的算法是inorder一遍,得到有序的lst,然后O(N) 寻找最靠近的,但是明显不是很高效。 - -AC代码 - -``` -class Solution(object): - def closestValue(self, root, target): - """ - :type root: TreeNode - :type target: float - :rtype: int - """ - lst = [] - - def inorder(root): - if root: - inorder(root.left) - lst.append(root.val) - inorder(root.right) - - inorder(root) - - close = lst[0] - diff = abs(target - lst[0]) - - for i in lst: - if abs(target - i) < diff: - close = i - diff = abs(target - i ) - - return close -``` - - - -AC代码,跟binary search tree 寻值一样, loop 一遍树来寻找 - - - -``` - -class Solution(object): - def closestValue(self, root, target): - """ - :type root: TreeNode - :type target: float - :rtype: int - """ - close = root.val - - while root: - close = root.val if abs(target - root.val) < abs(target - close) else close - root = root.right if root.val < target else root.left - return close -``` - diff --git "a/docs/Leetcode_Solutions/C++/276. Paint Fence \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/276. Paint Fence \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 3b7373ed9..000000000 --- "a/docs/Leetcode_Solutions/C++/276. Paint Fence \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,65 +0,0 @@ -### 276. Paint Fence - -题目: - - -难度: -Easy - -思路: - -先解释一下题目意思: fence 栅栏, post 柱子 , no more than two adjacent fence posts have the same color.(一开始看漏,没有看到more than,以为相邻就不能同色)。 - -本来想画格子找规律,结果走偏了,所以老老实实写递推关系式,貌似是这样的 - -- n = 0 : 全为0 -- n = 1 : 有 k种方式 -- n = 2 :有 k * k 种 -- 否则,第n个有两种可能, 跟 n-1 颜色不一样, 跟 n-1 颜色一样, fn = (k-1)fn-1 + (k-1) fn-2 - - - -画一下表:对一下递推关系式,正确✅ - - - -``` - n - 0 1 2 3 4 - 0 0 0 0 0 0 -t 1 0 1 1 0 0 - 2 0 2 4 6 10 - 3 0 3 9 24 . - 4 0 4 16 60 . -``` - - - -AC 代码 - -``` -class Solution(object): - def numWays(self, n, k): - """ - :type n: int - :type k: int - :rtype: int - """ - if n == 0: - return 0 - else: - if k == 0: return 0 - elif n == 1: return k - elif n == 2 : return k * k - else: - dp = [0 for i in range(n+1)] - dp[0] = 0 - dp[1] = k - dp[2] = k * k - - for i in range(3,n+1): - dp[i] = (k-1) * dp [i-1] + (k-1) * dp [i-2] - return dp[-1] - -``` - diff --git "a/docs/Leetcode_Solutions/C++/277. Find the Celebrity \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/277. Find the Celebrity \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e6bc0312a..000000000 --- "a/docs/Leetcode_Solutions/C++/277. Find the Celebrity \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,65 +0,0 @@ -### 277. Find the Celebrity - - - -题目: - - - - -难度 : Medium - - - -思路: - -算法考试考过 - -celebrity 是 每个人都知道他,而他不认识任何别的人。 - - - -如果用图来看,那就每个别的人都有箭头指向c,而c没有任何出去的箭头。 - -O(N^2)的代码还是还是很容易想到的 - -但是我们可以有提升,那么就是可以check `knows(a,b)`,如果 a knows b,那么可以排除a是celebrity,否则可以排除b是celebrity. - -最后还要确认一遍是否这个是真的celebrity - - - -AC代码 - -``` -# The knows API is already defined for you. -# @param a, person a -# @param b, person b -# @return a boolean, whether a knows b -# def knows(a, b): - -class Solution(object): - def findCelebrity(self, n): - """ - :type n: int - :rtype: int - """ - if n == 0: - return -1 - c = 0 - for i in xrange(1,n): - if not knows(i, c): - c = i - for i in range(n): - if c != i: - if not knows(i,c) or knows(c,i): - return -1 - return c - - -``` - - - - - diff --git "a/docs/Leetcode_Solutions/C++/278._First_Bad _Version \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/278._First_Bad _Version \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 7c6d94240..000000000 --- "a/docs/Leetcode_Solutions/C++/278._First_Bad _Version \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,40 +0,0 @@ -### 278. First Bad Version - - - - - -题目: - - - - -难度 : Easy - - - -思路: - -根据 search for a range 改的 - - - -```python -class Solution(object): - def firstBadVersion(self, n): - """ - :type n: int - :rtype: int - """ - l, r = 0, n - 1 - while l <= r: - mid = l + ((r - l) >> 2) - if not isBadVersion(mid): - l = mid + 1 - else: - r = mid - 1 - return l -``` - - - diff --git "a/docs/Leetcode_Solutions/C++/279._perfect_squares \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/279._perfect_squares \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index f4d8bd50f..000000000 --- "a/docs/Leetcode_Solutions/C++/279._perfect_squares \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,116 +0,0 @@ - -### 279. Perfect Squares - - -题目: - - - -难度: - -Medium - -### 思路一: -DP, 状态转移方程: - -```dp[i] = min(dp[i], dp[i - j * j] + 1)``` - - - - -```python -class Solution(object): - def numSquares(self, n): - """ - :type n: int - :rtype: int - """ - dp = [0] * (n+1) - for i in range(n+1): - dp[i] = i - j = 1 - while j * j <= i: - dp[i] = min(dp[i], dp[i-j*j] + 1) - j += 1 - return dp[-1] -``` -但是这个方法贼慢,beats 12%, 有时候提交甚至会超时,有时候又不会。。。。因此想别的办法 - -### 思路二: - -Static DP, beats 90.39% - -```python -class Solution(object): - dp = [0] - def numSquares(self, n): - """ - :type n: int - :rtype: int - """ - while len(self.dp) <= n: - m = len(self.dp) - inf = float('inf') - i = 1 - while i * i <= m: - inf = min(inf, self.dp[m-i*i] + 1) - i += 1 - self.dp.append(inf) - return self.dp[n] -``` - -进一步简化可以写成: -```python -class Solution(object): - dp = [0] - def numSquares(self, n): - """ - :type n: int - :rtype: int - """ - while len(self.dp) <= n: - self.dp += min(self.dp[-j*j] + 1 for j in range(1, int(len(self.dp)**0.5+1))), - return self.dp[n] -``` -这里有个问题现在还没搞明白,以后再好好想一下,写成```return self.dp[-1]```提交就失败, -``` -Submission Result: Wrong Answer -Input: 1024 -Output: 4 -Expected: 1 -``` - -### 思路三: - -还是慢,有个数学方法, runtime beats 98.48% -```python -import math -class Solution(object): - def numSquares(self, n): - """ - :type n: int - :rtype: int - """ - def isSquare(num): - tmp = int(math.sqrt(num)) - return tmp * tmp == num - while n & 3 == 0: # n % 4 == 0 - n >>= 2 - if n & 7 == 7: # n % 8 == 7 - return 4 - if isSquare(n): - return 1 - sqrt_n = int(math.sqrt(n)) - for i in range(1, sqrt_n + 1): - if isSquare(n-i*i): - return 2 - return 3 -``` -in order to understand, I suggest u read: - -here is the [Lagrange's Four Square theorem](https://en.wikipedia.org/wiki/Lagrange%27s_four-square_theorem -) - Limit the result to <= 4: - -And this [article](http://www.alpertron.com.ar/4SQUARES.HTM), in which you can also find the way to present a number as a sum of four squares: - - diff --git "a/docs/Leetcode_Solutions/C++/280._Wiggle_Sort \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/280._Wiggle_Sort \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 3188ca405..000000000 --- "a/docs/Leetcode_Solutions/C++/280._Wiggle_Sort \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,78 +0,0 @@ -### 280. Wiggle Sort - - - - - -题目: - - - - -难度 : Medium - - - -思路: - - - -想的是比如bubble sort或者任何简单的比较sort,只是放数字的时候是按这样的大小顺序放: - -1, n, 2, n-1,3, n-2…. - -或者每个pass其实做两个sort,找出最大的和最小的。然后分别放在头尾。 - - - -这样的写法TLE: - -``` -class Solution(object): -    def wiggleSort(self, nums): # 此法超时 -        """ - :type nums: List[int] - :rtype: void Do not return anything, modify nums in-place instead. - """ - n = len(nums) - for i in range(n): - # small bubble sort - if i % 2 == 0: - for j in range(n-1, i-1, -1): - if nums[j] > nums[j-1]: - nums[j], nums[j-1] = nums[j-1],nums[j] - else: - for j in range(n-1, i-1, -1): - if nums[j] < nums[j-1]: - nums[j], nums[j-1] = nums[j-1],nums[j] -``` - - - - - -但是貌似想复杂了,其实对于这个简单化,要求只有一个: - -1. 如果i是奇数,nums[i] >= nums[i - 1] -2. 如果i是偶数,nums[i] <= nums[i - 1] - -所以我们只要遍历一遍数组,把不符合的情况交换一下就行了。具体来说,如果nums[i] > nums[i - 1], 则交换以后肯定有nums[i] <= nums[i - 1]。 - - - -AC 代码 - -```python -class Solution(object): - def wiggleSort(self, nums): - """ - :type nums: List[int] - :rtype: void Do not return anything, modify nums in-place instead. - """ - for i in xrange(1, len(nums)): - if ((i % 2) and nums[i] < nums[i-1]) or ((not i % 2) and nums[i] > nums[i-1]): - nums[i], nums[i-1] = nums[i-1], nums[i] -``` - - - diff --git "a/docs/Leetcode_Solutions/C++/283._move_zeroes \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/283._move_zeroes \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a5e887c05..000000000 --- "a/docs/Leetcode_Solutions/C++/283._move_zeroes \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,128 +0,0 @@ -### 283. Move Zeroes - - -题目: - - - -难度: -Easy - - -思路: - -### 思路一:暴力 - -```python -class Solution(object): - def moveZeroes(self, nums): - """ - :type nums: List[int] - :rtype: void Do not return anything, modify nums in-place instead. - """ - i = 0 - while 0 in nums: - nums.remove(0) - i += 1 - nums.extend([0]*i) -``` - -### 思路二: - -一旦遇到不是0的就把它往前移动,移动非0完成,剩下的全部填0,看例子 - - - -``` -0 1 0 3 12 - -``` - -也算双指针吧, -首先cur = 0, idx = 0,为0,不变,然后idx = 1,不为0,前移,数组变成 - -``` -1 1 0 3 12 -``` - -继续idx 这个时候是2,不变,继续处理,碰到3可以变成 - -``` -1 3 0 3 12 -``` -这样知道变换完成,简直逆天啊,因为cur 总是小于idx,所以总可以保持这样的稳定性 - - -```python -class Solution(object): - def moveZeroes(self, nums): - """ - :type nums: List[int] - :rtype: void Do not return anything, modify nums in-place instead. - """ - cur,idx = 0,0 - while idx < len(nums): - # cur is not 0 - if nums[idx] != 0 : - nums[cur] = nums[idx] - cur += 1 - idx += 1 - - while cur < len(nums): - nums[cur] = 0 - cur += 1 - -``` - - -### 思路三: - -传统的双指针,参考这里 - - - -```此法最快,beats 90.50%``` - -```python -class Solution(object): - def moveZeroes(self, nums): - """ - :type nums: List[int] - :rtype: void Do not return anything, modify nums in-place instead. - """ -        p0, p1 = 0, 0 # P1指向非0,p0指向0 -        while p0 < len(nums) and p1 < len(nums): - if nums[p0] != 0: - p0 += 1 - p1 = p0 - continue - if nums[p1] == 0: - p1 += 1 - continue - nums[p0],nums[p1] = nums[p1],nums[p0] - p0 += 1 - p1 += 1 -``` - -相反,我觉得这样双指针反而没有上面的代码容易理解 - -### 思路四: - -一个比较巧妙的方法: -```python -class Solution(object): - def moveZeroes(self, nums): - """ - :type nums: List[int] - :rtype: void Do not return anything, modify nums in-place instead. - """ - nums.sort(key= lambda x: 1 if x == 0 else 0) -``` -原理就是原先为0的数优先级在此次sort中更高了,所以全部升序排列排到后面去了 - -但是这个解法被人说是没有满足题目```no extra space```的条件,详见[Sayo](https://leetcode.com/problems/move-zeroes/discuss/72074/) -``` -timsort can require a temp array containing as many as N//2 pointers, which means as many as 2*N extra bytes on 32-bit boxes. -``` - - diff --git "a/docs/Leetcode_Solutions/C++/285._inorder_successor_in_bst \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/285._inorder_successor_in_bst \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a5a489be9..000000000 --- "a/docs/Leetcode_Solutions/C++/285._inorder_successor_in_bst \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,81 +0,0 @@ -###285. Inorder Successor in BST - - -题目: - - - -难度: -Medium - -思路: - - -BST的特性,对于一个node,它的所有左侧node都比它小,它的所有右侧node都比它大。最小的元素在最左边,最大的元素在最右边。 - -一个node x它的successor y 是满足y > x的最小值。两种情况,如果node x有right child,那么这个right child 中的最小值就是它的successor,否则就要往上走,如果走上去的parent使得这个node是其左边的孩子的话,那么successor我们也找到了。 - - -因为状况可能是这样的: - -``` - 3 - / - 1 - / \ - 0 2 -``` - -如果是寻找0的successor,那么我们往上一走,发现0的祖先是1,并且0是1的左孩子,找到,否则如果寻找2的successor,那么我们要往上走到3的部分,2是3的左subtree,这样才能解决问题。 - -伪码 - -``` -function Succ(x) - if Right(x) ̸= NIL then - return Min(Right(x)) - else - p ← Parent(x) - while p ̸= NIL and x = Right(p) do - x←p - p ← Parent(p) - return p -``` - -这里伪码有点不适用是因为我们并没有这个parent指针,当然我们还是有trick方式的,就是我们从root开始走,直到找到这个node p,同时我们记录一路上看到的比p.val大的值,这样最后一个就是它的successor.其中最低的那一个就是他的successor. - -AC代码如下: - - -``` -class Solution(object): - def inorderSuccessor(self, root, p): - """ - :type root: TreeNode - :type p: TreeNode - :rtype: TreeNode - """ - def minNode(root): - while root.left!= None: - root = root.left - return root - - - def searchP(p, root): - if root == None or root.val == p.val: - return None - else: - succ = None - while root != None and p.val != root.val: - if p.val < root.val: - succ = root - root = root.left - else: - root = root.right - return succ - - if p.right: - return minNode(p.right) - else: - return searchP(p, root) -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/286. Walls and Gates \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/286. Walls and Gates \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 8a23c2681..000000000 --- "a/docs/Leetcode_Solutions/C++/286. Walls and Gates \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,90 +0,0 @@ -### 286. Walls and Gates - - - -题目: -https://leetcode.com/problems/walls-and-gates/ - - - -难度 : Medium - - - -思路: - -乍一看feel like all pairs shortest path. - -naive的想法是针对所有为0的点做all pairs shortest path,然后最终得到的就是把INF替换保留最小的。时间复杂度是0的个数* BFS - - - -naive的想法AC - -``` -class Solution(object): - def wallsAndGates(self, rooms): - """ - :type rooms: List[List[int]] - :rtype: void Do not return anything, modify rooms in-place instead. - """ - def legal(x,y): - return x >= 0 and x < row and y >= 0 and y < col and rooms[x][y] != -1 - - def bfs(rooms, i, j): - queue = [] - queue.append((i,j)) - - while queue: - (x,y) = queue.pop() - - if legal(x-1,y) and rooms[x-1][y] > rooms[x][y] + 1: - rooms[x-1][y] = rooms[x][y] + 1 - queue.append((x-1,y)) - if legal(x+1,y) and rooms[x+1][y] > rooms[x][y] + 1 : - rooms[x+1][y] = rooms[x][y] + 1 - queue.append((x+1,y)) - if legal(x,y-1) and rooms[x][y-1] > rooms[x][y] + 1: - rooms[x][y-1] = rooms[x][y] + 1 - queue.append((x,y-1)) - if legal(x,y+1) and rooms[x][y+1] > rooms[x][y] + 1 : - rooms[x][y+1] = rooms[x][y] + 1 - queue.append((x,y+1)) - - - row = len(rooms) - col = len(rooms[0]) if row else 0 - - for i in range(row): - for j in range(col): - if rooms[i][j] == 0: - bfs(rooms,i,j) -``` - - - -复习一下BFS的伪码 - -from wikipedia, 一开始有点小迷茫,那就是为什么没有keep一个visited的数据结构,但是随即反应过来,其实`n.distance == INFINITY` 已经是check它是否被visited 过了,我以上的代码并没有做这个操作,但是因为是格子状以及我仅在检查是否更小,所以也能AC. - -``` -Breadth-First-Search(Graph, root): - - for each node n in Graph: - n.distance = INFINITY - n.parent = NIL - - create empty queue Q - - root.distance = 0 - Q.enqueue(root) - - while Q is not empty: - current = Q.dequeue() - for each node n that is adjacent to current: - if n.distance == INFINITY: - n.distance = current.distance + 1 - n.parent = current - Q.enqueue(n) -``` - diff --git "a/docs/Leetcode_Solutions/C++/289._game_of_life \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/289._game_of_life \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 097ffc3ed..000000000 --- "a/docs/Leetcode_Solutions/C++/289._game_of_life \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,111 +0,0 @@ -### 289. Game of Life - -题目: - - - -难度 : Medium - - -直接一上来就没有考虑solve it in-place,考虑的是便利,简直是born for 便利 - -首先我把board拓宽了,宽,高各增加了两排。 - -因为这样求neighbor方便,针对原来的borad,现在新的big 对于 1 -> n-1 的部分 - -全都有八个neighbor,用了一个2d array来记录nbrs,再根据当下的nbr来判断更新,因为不能一边在board上loop一边更新. - -AC的效率还ok: - -```python -class Solution(object): - def gameOfLife(self, board): - """ - :type board: List[List[int]] - :rtype: void Do not return anything, modify board in-place instead. - """ - def liveNeighbors(i,j): - return big[i-1][j-1] + big[i-1][j] + big[i-1][j+1] + big[i][j-1] + big[i][j+1] + big[i+1][j-1] + big[i+1][j] + big[i+1][j+1] - - if board == [[]] : return - row = len(board) - col = len(board[0]) - - nbrs = [[0 for j in range(col)] for i in range(row)] - big = [[ 0 for j in range(col+2) ] for i in range(row+2)] - for i in range(1,row+1): - for j in range(1,col+1): - big[i][j] = board[i-1][j-1] - - for i in range(1,row+1): - for j in range(1,col+1): - nbrs[i-1][j-1] = liveNeighbors(i,j) - - for i in range(row): - for j in range(col): - if board[i][j] == 1: - if nbrs[i][j] < 2: - board[i][j] = 0 - elif nbrs[i][j] == 2 or nbrs[i][j] == 3: - board[i][j] = 1 - else: - board[i][j] = 0 - else: - if nbrs[i][j] == 3: - board[i][j] = 1 - -``` - -谷歌了一下,大家都用到了temp 2d array嘛,哼(ˉ(∞)ˉ)唧。好吧,空间复杂度比我小。 - - - -很多的解法都是一样开了一个二维数组,即使没有像我一样扩展board.因为问题在于不能一边更新board 一边来做。 - -看了一下这边的思路: - - - - - - - -不开数组 - -我们可以使用状态机转换 o(╯□╰)o 感觉不知道在听什么 还是很迷茫的感觉, in-place AC代码 - -```python -class Solution(object): - def gameOfLife(self, board): - """ - :type board: List[List[int]] - :rtype: void Do not return anything, modify board in-place instead. - """ - row = len(board) - col = len(board[0]) if row else 0 - - dx = [-1,-1,-1,0,1,1,1,0] - dy = [-1,0,1,1,1,0,-1,-1] - - for i in range(row): - for j in range(col): - cnt = 0 - for k in range(8): - x, y = i + dx[k], j + dy[k] - if x >=0 and x < row and y >=0 and y < col and (board[x][y] == 1 or board[x][y] == 2): - cnt += 1 - - if board[i][j] and (cnt < 2 or cnt > 3): - board[i][j] = 2 - elif board[i][j] == 0 and cnt == 3: - board[i][j] = 3 - - for i in range(row): - for j in range(col): - board[i][j] %= 2 - - -``` - - - diff --git "a/docs/Leetcode_Solutions/C++/290._word_pattern \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/290._word_pattern \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e6122ec87..000000000 --- "a/docs/Leetcode_Solutions/C++/290._word_pattern \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,42 +0,0 @@ -###290. Word Pattern - -题目: - - - -难度 : Easy - -4.pattern = "abba", str = "dog dog dog dog" should return false. - -因为这个的限制,所以中间加了一个loop用来查询是否这个a对应的已经出现过了。 - -不过其实也可以用两个dictionary来处理,可以O(n^3) -> O(n^2) - - -``` -class Solution(object): - def wordPattern(self, pattern, str): - """ - :type pattern: str - :type str: str - :rtype: bool - """ - strList = str.split(' ') - if len(pattern) != len(strList): - return False - lookup = {} - for i in range(len(strList)): - if pattern[i] not in lookup: - for key in lookup: - if lookup[key] == strList[i]: - return False - lookup[pattern[i]] = strList[i] - elif lookup[pattern[i]] != strList[i]: - return False - - return True - -``` - - -另外看到一段非常简短代码,使用了map函数,有待学习 diff --git "a/docs/Leetcode_Solutions/C++/292._nim_game \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/292._nim_game \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 9f78914f5..000000000 --- "a/docs/Leetcode_Solutions/C++/292._nim_game \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,55 +0,0 @@ -### 292. Nim Game - -题目: - - - - -难度: - -Easy - - -对于总是优先开始的那方 - - -- 有一到三块,总是赢 -- 有四块,总是输 -- 有五块,总是赢 - -所以如果自己想赢,总是要迫使对方拿之后,给自己遗留5块,或者三块以及以下。 - -- 如果是六块: - - 拿一块,对方五块,对方赢 - - 拿两块,对方余下四块,我方赢 - - 拿三块,余三块,对方赢 - -- 七块: - - 拿三块,余四块,迫使对方输,总是赢 - -本打算用递归来看,因为对方也可以重复使用这个函数,但是会超时,所以就看了一下hint - - -- n <= 3 能赢 √ -- n == 4 总输 -- n = 5,6,7 总赢 -- n == 8, 先手如何选,总可以转成5,6,7 对方总会赢 - - -所以 n % 4 == 0 时候,先手必输 - -简直是啊,有些游戏就是这样来必赢的啊,没想到你是这样的题目 - - - -``` -class Solution(object): - def canWinNim(self, n): - """ - :type n: int - :rtype: bool - """ - return n % 4 != 0 -``` - - diff --git "a/docs/Leetcode_Solutions/C++/296. Best Meeting Point \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/296. Best Meeting Point \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 5f141f6a4..000000000 --- "a/docs/Leetcode_Solutions/C++/296. Best Meeting Point \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,67 +0,0 @@ -### 296. Best Meeting Point - -题目: - - - - -难度 : Hard - - - -思路: - -提示是先从一维开始,其实一开始是略迷茫的,因为如果两个点,那么只要在这两个之间,一定就是最小值,线段长度。 - -不过倘若点增加到三个,那么就是第三个点处。 - - - -然后发现了一个很棒的stackoverflow page - - - - - -因为一开始理解错误二维数组的输入,以为是给的locs这样的数组,所以直接这样写了,然后发现给的是格子,所以但是还是偷懒这样写了。 - - - -AC 代码 - -``` -class Solution(object): - def minTotalDistance(self, grid): - """ - :type grid: List[List[int]] - :rtype: int - """ - res = 0 - locs = [] - - m = len(grid) - n = len(grid[0]) if m else 0 - - for i in range(m): - for j in range(n): - if grid[i][j] == 1: - locs.append([i,j]) - - - locs.sort(key = lambda point: point[0]) - x = locs[len(locs)/2][0] - for point in locs: - res += abs(point[0] - x) - - locs.sort(key = lambda point: point[1]) - y = locs[len(locs)/2][1] - for point in locs: - res += abs(point[1] - y) - - return res -``` - - - - - diff --git "a/docs/Leetcode_Solutions/C++/298. Binary Tree Longest Consecutive Sequence \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/298. Binary Tree Longest Consecutive Sequence \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 4c6bc841b..000000000 --- "a/docs/Leetcode_Solutions/C++/298. Binary Tree Longest Consecutive Sequence \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,123 +0,0 @@ -### 298. Binary Tree Longest Consecutive Sequence - - - - - -题目: -https://leetcode.com/problems/binary-tree-longest-consecutive-sequence/ - - - -难度 : Medium - - - -思路: - - - -TLE代码,每个node求,然后求最大值 - -``` -# Definition for a binary tree node. -# class TreeNode(object): -# def __init__(self, x): -# self.val = x -# self.left = None -# self.right = None - -class Solution(object): - def longestConsecutive(self, root): - """ - :type root: TreeNode - :rtype: int - """ - def consecutive(root): - if root == None: - return 0 - else: - left, right = 0,0 - if root.left: - if root.left.val == root.val + 1: - left = 1 + consecutive(root.left) - if root.right: - if root.right.val == root.val + 1: - right = 1 + consecutive(root.right) - return max(left, right, 1) - - def dfs(root): - s = [] - s.append(root) - while s: - root = s.pop() - res.append(consecutive(root)) - if root.left: - s.append(root.left) - if root.right: - s.append(root.right) - if not root: - return 0 - - res = [] - dfs(root) - return max(res) - -``` - - - - - -其实第二次递归,也就是dfs其实是有点多余的?因为可以边走边保存最大值? - -因为可以 - -> - recursion,在参数中包含当前的连续seq长度 -> - 如果left, right child的value是连续的,那么就将长度+1传入下一个call - - - - - -AC代码 - -``` -# Definition for a binary tree node. -# class TreeNode(object): -# def __init__(self, x): -# self.val = x -# self.left = None -# self.right = None - -class Solution(object): - def longestConsecutive(self, root): - """ - :type root: TreeNode - :rtype: int - """ - def dfs(root, curLen): - self.result = max(curLen, self.result) - if root.left: - if root.left.val == root.val + 1: - dfs(root.left, curLen + 1) - else: - dfs(root.left, 1) - if root.right: - if root.right.val == root.val + 1: - dfs(root.right, curLen + 1) - else: - dfs(root.right,1) - - if not root: return 0 - - self.result = 0 - dfs(root, 1) - return self.result - -``` - - - -这里值得注意的是这里的self.result其实相当于dfs的全局变量,也是利用了这个才做到边递归边记录边重置。 - diff --git "a/docs/Leetcode_Solutions/C++/299._bulls_and_cows \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/299._bulls_and_cows \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 8b6cbe468..000000000 --- "a/docs/Leetcode_Solutions/C++/299._bulls_and_cows \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,119 +0,0 @@ -###299. Bulls and Cows - -题目: - - - - -难度: - -Easy - - -我花了很久时间来AC,因为想了边界条件 - - -``` -class Solution(object): - def getHint(self, secret, guess): - """ - :type secret: str - :type guess: str - :rtype: str - """ - maps = {} - for i in range(len(secret)): - if secret[i] not in maps: - maps[secret[i]] = [i] - else: - maps[secret[i]].append(i) - mapg = {} - for i in range(len(guess)): - if guess[i] not in mapg: - mapg[guess[i]] = [i] - else: - mapg[guess[i]].append(i) - - print maps, mapg - - a,b = 0,0 - for key in maps.keys(): - if key in mapg.keys(): - common = list(set(mapg[key]) & set(maps[key])) - #check for bull - a += len(common) - mapg[key] = [item for item in mapg[key] if item not in common] - maps[key] = [item for item in maps[key] if item not in common] - b += min(len(maps[key]), len(mapg[key])) - return str(a) + 'A' + str(b) + 'B' -``` - - - - - - - -两种解法都....... - -都这么短。。。。。 -我Python还是用的不行啊 - - -``` -class Solution(object): - def getHint(self, secret, guess): - """ - :type secret: str - :type guess: str - :rtype: str - """ - bull = sum(map(operator.eq, secret, guess)) - sa = collections.Counter(secret) - sb = collections.Counter(guess) - cow = sum((sa & sb).values()) - bull - return str(bull) + 'A' + str(cow) + 'B' -``` - - -bull = secret与guess下标与数值均相同的数字个数 - -cow = secret与guess中出现数字的公共部分 - bull - - - - -来分析一下这个解法 - -``` -def getHint(self, secret, guess): - bulls = sum(map(operator.eq, secret, guess)) - both = sum(min(secret.count(x), guess.count(x)) for x in '0123456789') - return '%dA%dB' % (bulls, both - bulls) -``` - -首先map的用法是,对于iterable中的每个元素应用function方法,将结果作为list返回 - -``` ->>> def add100(x): -... return x+100 -... ->>> hh = [11,22,33] ->>> map(add100,hh) -[111, 122, 133] -``` - - - - -用'1123','0111' 来测试: - - -``` -map(operator.eq, secret, guess) -[False, True, False, False] -``` -就是将equal函数并行应用在两个string上,然后后面的解法也是粗暴简约和厉害 - - -参考 diff --git "a/docs/Leetcode_Solutions/C++/300._longest_increasing_subsequence \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/300._longest_increasing_subsequence \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index bd1752b9e..000000000 --- "a/docs/Leetcode_Solutions/C++/300._longest_increasing_subsequence \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,42 +0,0 @@ -###300. Longest Increasing Subsequence - -题目: - - - -难度: -Medium - - -思路: - -典型DP - -递推关系式: - -对于以num[i]结束的longest increasing subsequence的长度 - -dp[i] = dp[j] + 1 if num[i] > num[j] else 1 - -最后loop一圈,求出最长的 - -AC 代码 - -``` -class Solution(object): - def lengthOfLIS(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - if not nums: return 0 - n = len(nums) - dp = [1 for i in range(n)] - for i in range(1,n): - for j in range(i): - if nums[i] > nums[j] : - dp[i] = max(dp[i],dp[j] + 1) - - return max(dp) -``` - diff --git "a/docs/Leetcode_Solutions/C++/303._range_sum_query_-_immutable \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/303._range_sum_query_-_immutable \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 32c459aee..000000000 --- "a/docs/Leetcode_Solutions/C++/303._range_sum_query_-_immutable \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,47 +0,0 @@ -###303. Range Sum Query - Immutable - -题目: - - - -tag : DP -难度 : Easy - - - -``` -sum(i, j) = nums[i] j = i -sum(i,j) = sum[i,j-1] + nums[j] j > i - -``` - -Python代码 - -``` - -class NumArray(object): - def __init__(self, nums): - """ - initialize your data structure here. - :type nums: List[int] - """ - self.sums = nums - for i in range(1, len(self.sums)): - self.sums[i] = self.sums[i-1] + self.sums[i] - - - - - def sumRange(self, i, j): - """ - sum of elements nums[i..j], inclusive. - :type i: int - :type j: int - :rtype: int - """ - if i == 0 : - return self.sums[j] - else : - return self.sums[j] - self.sums[i-1] - -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/316._Remove_Duplicate_Letters \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/316._Remove_Duplicate_Letters \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index cce1a8b43..000000000 --- "a/docs/Leetcode_Solutions/C++/316._Remove_Duplicate_Letters \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,108 +0,0 @@ -### 316. Remove Duplicate Letters - -题目: - - - -难度: - -Hard - - -思路 - -这道题让我们移除重复字母,使得每个字符只能出现一次,而且结果要按最优的字母顺序排列,前提是不能打乱其原本的相对位置。 -- 先用remaining统计所有出现字母出现过的次数; -- res就是输出结果的字母顺序(list),最后用join连接起来作为返回值(str); -- 在stack(set)中的元素意味着其已经出现在最终结果中; - -对s中每个字母c,首先看它在stack中有没有出现过: -1. 如果没有那么只要res最后一个字母的ASCII值大于c,且其剩余次数大于0,就将其在res和stack中删去,不停做此操作 -2. 如果有了那么说明已经出现在最终结果中,只需要将其统计次数减去1以防后面挪动位置要做判断 - -做完这些后必须要把c加入到stack和res中去,代表c已经加入到最终结果中的目前应该处于的位置 - -参考[python的colloections之defaultdict模块](https://docs.python.org/2/library/collections.html) - -```python -class Solution(object): - def removeDuplicateLetters(self, s): - """ - :type s: str - :rtype: str - """ - remaining = collections.defaultdict(int) - for c in s: - remaining[c] += 1 - res, stack = [], set() - for c in s: - if c not in stack: - while res and res[-1] > c and remaining[res[-1]] > 0: - stack.remove(res.pop()) - res.append(c) - stack.add(c) - remaining[c] -= 1 - return ''.join(res) -``` -还有别的一些优美的解法,参考[stefan的回答](https://leetcode.com/problems/remove-duplicate-letters/discuss/76787) - - - -```python -递归贪心版本 -class Solution(object): - def removeDuplicateLetters(self, s): - """ - :type s: str - :rtype: str - """ - for c in sorted(set(s)): - suffix = s[s.index(c):] - if set(suffix) == set(s): - return c + self.removeDuplicateLetters(suffix.replace(c, '')) - return '' -``` -```python -class Solution(object): - def removeDuplicateLetters(self, s): - """ - :type s: str - :rtype: str - """ - result = '' - while s: - i = min(map(s.rindex, set(s))) - c = min(s[:i+1]) - result += c - s = s[s.index(c):].replace(c, '') - return result -``` - -```python -class Solution(object): - def removeDuplicateLetters(self, s): - """ - :type s: str - :rtype: str - """ - rindex = {c: i for i, c in enumerate(s)} - result = '' - for i, c in enumerate(s): - if c not in result: - while c < result[-1:] and i < rindex[result[-1]]: - result = result[:-1] - result += c - return result -``` - - - - - - - - - - - - diff --git "a/docs/Leetcode_Solutions/C++/319._Bulb_Switcher \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/319._Bulb_Switcher \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 840cce518..000000000 --- "a/docs/Leetcode_Solutions/C++/319._Bulb_Switcher \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,69 +0,0 @@ -### 319. Bulb Switcher - -题目: - - - -难度: - -Medium - - -思路 - -bulb代表第一轮结束后的所有灯亮灭的情况,从第二轮开始 -- 如果是最后一轮,则bulb的最后一个灯要switch -- 对于其他轮,相应的第i-1+C(i)个灯要siwitch,且C为常数,i-1+C(i)必须<=n-1 - -但是发现这样提交会超时 -Last executed input: -999999 - - -``` -class Solution(object): - def bulbSwitch(self, n): - """ - :type n: int - :rtype: int - """ - bulb = [1] * n - for i in range(2,n+1): - for x in range(i-1, n, i): - bulb[x] = 1 if bulb[x] == 0 else 0 - return bulb.count(1) -``` - -原来,这是一道智商碾压题: - -> A bulb ends up on iff it is switched an odd number of times. -Bulb i is switched in round d iff d divides i. -So bulb i ends up on iff it has an odd number of >divisors. -Divisors come in pairs, like i=12 has divisors 1 and 12, 2 and 6, and 3 and 4. -Except if i is a >square, like 36 has divisors 1 and 36, 2 and 18, 3 and 12, 4 and 9, -and double divisor 6. So bulb >i ends up on iff and only if i is a square. So just count the square numbers. - -大概解释一下,当一个灯泡被执行偶数次switch操作时它是灭着的,当被执行奇数次switch操作时它是亮着的,那么这题就是要找出哪些编号的灯泡会被执行奇数次操作。 - -现在假如我们执行第i次操作,即从编号i开始对编号每次+i进行switch操作,对于这些灯来说, -如果其编号j(j=1,2,3,⋯,n)能够整除i,则编号j的灯需要执行switch操作。 -具备这样性质的i是成对出现的,比如: -- 12 = 1 * 12, -- 12 = 2 * 6 -- 12 = 3 * 4 - -所以编号为12的灯,在第1次,第12次;第2次,第6次;第3次,第4次一定会被执行Switch操作,这样的话,编号为12的灯执行偶数次switch,肯定为灭。 -这样推出,完全平方数一定是亮着的,因为它有两个相同的因子,总因子数为奇数,如36 = 6 * 6,所以本题的关键在于找完全平方数的个数。 - -```python -class Solution(object): - def bulbSwitch(self, n): - """ - type n: int - rtype: int - """ - # The number of full squares. - return int(math.sqrt(n)) -``` - - diff --git "a/docs/Leetcode_Solutions/C++/322. Coin Change \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/322. Coin Change \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 1246fa161..000000000 --- "a/docs/Leetcode_Solutions/C++/322. Coin Change \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,52 +0,0 @@ -### 322. Coin Change - - - -题目: - - -难度: - -Medium - -DP入门 - -递推方程式: dp[i] = min(dp[i-vj]+1), vj 是硬币的面额 - -伪码: - -``` -Set Min[i] equal to Infinity for all of i -Min[0]=0 - -For i = 1 to S - For j = 0 to N - 1 - If (Vj<=i AND Min[i-Vj]+1 - - - -难度 : Medium - - - -思路: - - - -最容易想到的是针对每个节点做dfs?然后发现其已经被mark了就不管了,最后数dfs的次数? - -这样尝试,到n =2000 的时候 TLE - -``` -class Solution(object): - def countComponents(self, n, edges): - """ - :type n: int - :type edges: List[List[int]] - :rtype: int - """ - def dfs(node): - if visited[node] == 1: - return - else: - visited[node] = 1 - for node1, node2 in edges: - if node1 == node: - dfs(node2) - elif node2 == node: - dfs(node1) - - res = 0 - visited = [ 0 for i in range(n)] - for i in range(n): - if visited[i] == 0: - dfs(i) - res += 1 - return res -``` - - - -tag是union find,不用是否浪费? - -所谓的union find,应当不是每个做dfs,而是每个来看一下是否属于同一个set,一次dfs,然后loop 做union find - -[Disjoint-set_data_structure](https://en.wikipedia.org/wiki/Disjoint-set_data_structure) - - - -这里有一个很棒的[实现](http://python-algorithms.readthedocs.io/en/stable/_modules/python_algorithms/basic/union_find.html) - - - -AC代码 - -这里就偷懒了,利用岛是0-n,然后也只做了path compression,没更多的优化 - - - -``` -class Solution(object): - def countComponents(self, n, edges): - """ - :type n: int - :type edges: List[List[int]] - :rtype: int - """ - def find(x): - if uf[x] != x: - uf[x] = find(uf[x]) - return uf[x] - - def union(x,y): - xRoot = find(x) - yRoot = find(y) - uf[xRoot] = yRoot - - uf = [i for i in range(n)] - - for node1, node2 in edges: - union(node1, node2) - - res = set() - for i in range(n): - res.add(find(i)) - - return len(res) -``` - - - diff --git "a/docs/Leetcode_Solutions/C++/324._Wiggle_Sort_II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/324._Wiggle_Sort_II \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 5ebc2594b..000000000 --- "a/docs/Leetcode_Solutions/C++/324._Wiggle_Sort_II \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,42 +0,0 @@ -### 324. Wiggle Sort II - - - -题目: - - - -难度: -Medium - -思路: - -首先这道题和[Wiggle Sort](https://github.com/Lisanaaa/thinking_in_lc/blob/master/280._Wiggle_Sort.md)要求不一样,不能有等于, -所以如果碰到一串```‘1,1,1,1,1,1’```,当调换顺序时候还是不会满足。 - -因此我们用新方法,首先将原数组排序,然后大的那一半数字降序插在奇数```index```上,小的那一半数字降序插在偶数```index```上 - - -```python -class Solution(object): - def wiggleSort(self, nums): - """ - :type nums: List[int] - :rtype: void Do not return anything, modify nums in-place instead. - """ - nums.sort() - half = len(nums[::2]) - nums[::2], nums[1::2] = nums[:half][::-1], nums[half:][::-1] -``` - - -### Follow up -O(n) time, O(1) space - -思路: -首先想到的是将我们上面的排序方法用堆排序实现即可,建堆O(n),调整堆O(lgN) - - -```python - -``` diff --git "a/docs/Leetcode_Solutions/C++/326._power_of_three \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/326._power_of_three \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 9cd035d9c..000000000 --- "a/docs/Leetcode_Solutions/C++/326._power_of_three \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,48 +0,0 @@ -### 326. Power of Three - -题目: - - - - - -难度 : Easy - - -直接就上的递归 - -```python -class Solution(object): - def isPowerOfThree(self,n): - """ - :type n: int - :rtype: bool - """ - if n <= 0: - return False - if n == 1: - return True - if n % 3 == 0: - return self.isPowerOfThree(n/3) - return False - -``` - -有一个follow up,可否不用 loop/recusion - -看到了取巧的办法,因为是Given an integer,是有范围的(<2147483648),存在能输入的最大的3的幂次,即 3^19=1162261467。 - -只用检查是否能被这个数整除 - - -```python -class Solution(object): - def isPowerOfThree(self, n): - """ - :type n: int - :rtype: bool - """ - return n > 0 and pow(3, 19) % n == 0 - -``` - diff --git "a/docs/Leetcode_Solutions/C++/328._odd_even_linked_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/328._odd_even_linked_list \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b628ab241..000000000 --- "a/docs/Leetcode_Solutions/C++/328._odd_even_linked_list \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,112 +0,0 @@ -###328. Odd Even Linked List - -题目: - - - -难度: - -Medium - - -想法:因为相对顺序保持不变,所以可以拆list,然后再组合在一起?这样是满足题目要求的,因为linked list不像array,我们操作的时候只是用指向,没有分配新的空间。 - -``` - -class Solution(object): - def oddEvenList(self, head): - """ - :type head: ListNode - :rtype: ListNode - """ - if head == None or head.next == None or head.next.next == None: - return head - - oddDummy = ListNode(-1) - oddDummy.next = head - - evenDummy = ListNode(-1) - evenDummy.next = head.next - - oddCur = oddDummy.next - evenCur = evenDummy.next - - cur = head.next.next - while cur: - oddCur.next = cur - oddCur = oddCur.next - evenCur.next = cur.next - evenCur = evenCur.next - if cur.next: - cur = cur.next.next - else: - cur = cur.next - oddCur.next = evenDummy.next - # print oddDummy.next.val - return oddDummy.next - -``` - - - - -看别人的优雅代码 - -``` -class Solution(object): - def oddEvenList(self, head): - """ - :type head: ListNode - :rtype: ListNode - """ - if head == None: - return head - - # odd used to keep track of the tail of odd nodes - odd = oddHead = head - # record how many swaps happend - even = evenHead = head.next - while even and even.next: - odd.next = even.next - odd = odd.next - even.next = odd.next - even = even.next - odd.next = evenHead - return head -``` - -intuitive and concise - - -``` -1 → 2 → 3 → 4 → 5 → NULL - -一开始 - - 1 → 2 → 3 → 4 → 5 → NULL -odd even even.next - - -1 → 3 → 4 → 5 → NULL - odd ↑ - 2 - - - -1 → 3 → 4 → 5 → NULL - odd - 2 - even - - -再loop一次: - - | ----------- - | --------- ↓ ↓ -1 → 3 4 5 → NULL - odd ↑ - 2 - ↑ even - - -最后一步,再将两个odd的最后一个和evenHead连接起来,完工 -``` - - diff --git "a/docs/Leetcode_Solutions/C++/334._increasing_triplet_subsequence \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/334._increasing_triplet_subsequence \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e5e4c645a..000000000 --- "a/docs/Leetcode_Solutions/C++/334._increasing_triplet_subsequence \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,71 +0,0 @@ -###334. Increasing Triplet Subsequence - -题目: - - - -难度: -Medium - - -思路: - -用longest increasing subsequence来求,超时 - -``` -class Solution(object): - def increasingTriplet(self, nums): - """ - :type nums: List[int] - :rtype: bool - """ - if not nums: return False - n = len(nums) - dp = [1 for i in range(n)] - for i in range(1,n): - for j in range(i): - if nums[i] > nums[j] : - dp[i] = max(dp[i],dp[j] + 1) - if dp[i] >= 3: - return True - - return False -``` - -于是转而用Third Maximum Number的方法,维护一个当前最小和当前第二小,当碰到当前比较大,返回True,否则一圈走下来依旧不能满足,返回false. - -想一下,如果不是求三个增长,如果是求两个的话,那么一定想到的是保存当前最小值,那么一旦后方遇到一个比较大的,就这样处理掉了。 - -所以对于任何一个num来说,有三种可能: - -- 小于当前的最小值,那么更新当前最小值 -- 小于当前第二小值,更新当前第二小值 -- 如果以上两种都不是,那么是大于当前第二小值和最小值,于是这样就true - -所以是求四个增长也是类似的么 - -AC代码 - -``` -class Solution(object): - def increasingTriplet(self, nums): - """ - :type nums: List[int] - :rtype: bool - """ - # m - min, sm - second min - m, sm = float('inf'), float('inf') - - for num in nums: - print m, sm - if m >= num: - m = num - elif sm >= num: - sm = num - else: - return True - return False -``` - - - diff --git "a/docs/Leetcode_Solutions/C++/337._house_robber_iii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/337._house_robber_iii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a081ba016..000000000 --- "a/docs/Leetcode_Solutions/C++/337._house_robber_iii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,47 +0,0 @@ -###337. House Robber III - - -题目: - - - -难度: -Medium - -思路: - -参考 - - -这个解法好像有点厉害 - -从root开始抢起来,最大能抢到的两个可能: 抢root和不抢root - -- rob_root = max(rob_L + rob_R , no_rob_L + no_nob_R + root.val) -- no_rob_root = rob_L + rob_R - - -这个递归写起来就很厉害了 - - -``` -class Solution(object): - def rob(self, root): - """ - :type root: TreeNode - :rtype: int - """ - def dfs(root): - if not root: return 0, 0 - rob_L, no_rob_L = dfs(root.left) - rob_R, no_rob_R = dfs(root.right) - return max(no_rob_R + no_rob_L + root.val , rob_L + rob_R), rob_L + rob_R - - return dfs(root)[0] - -``` - -对于每个node,我们return的是从这个node能抢到的最大值,以及不抢它能获得的最大值,这个递归简直我服 - - - diff --git "a/docs/Leetcode_Solutions/C++/338. Counting Bits \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/338. Counting Bits \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e74a13253..000000000 --- "a/docs/Leetcode_Solutions/C++/338. Counting Bits \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,46 +0,0 @@ -### 338. Counting Bits - -题目: - - - -难度: -Medium - - - -**O(n\*sizeof(integer))** 算法,其实就是把count of 1 bit拿来用: - -``` -class Solution(object): - def countBits(self, num): - """ - :type num: int - :rtype: List[int] - """ - def hammingWeight(n): - cnt = 0 - while n != 0: - n &= n -1 - cnt += 1 - return cnt - - res = [] - for i in range(num+1): - res.append(hammingWeight(i)) - return res - -``` - - - -DP算法 - to be done - - - - - - - - - diff --git "a/docs/Leetcode_Solutions/C++/339. Nested List Weight Sum \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/339. Nested List Weight Sum \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a39800a58..000000000 --- "a/docs/Leetcode_Solutions/C++/339. Nested List Weight Sum \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,58 +0,0 @@ -### 339. Nested List Weight Sum - - - -题目: - - -难度: -Easy - -思路: - -一开始没认真读题,直接上手开写: - -``` -class Solution(object): - def depthSum(self, nestedList): - """ - :type nestedList: List[NestedInteger] - :rtype: int - """ - def dfs(nestedList): - for item in nestedList: - if item.isInteger(): - self.res += item.getInteger() - else: - dfs(item.getList()) - self.res = 0 - dfs(nestedList) - return self.res -``` - - - -然后注意到要weight by its depth. - - - -AC - -``` -class Solution(object): - def depthSum(self, nestedList): - """ - :type nestedList: List[NestedInteger] - :rtype: int - """ - def dfs(nestedList,depth): - for item in nestedList: - if item.isInteger(): - self.res += item.getInteger() * depth - else: - dfs(item.getList(), depth+1) - self.res = 0 - dfs(nestedList,1) - return self.res -``` - diff --git "a/docs/Leetcode_Solutions/C++/341._Flatten_Nested_List_Iterator \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/341._Flatten_Nested_List_Iterator \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 2acc186f5..000000000 --- "a/docs/Leetcode_Solutions/C++/341._Flatten_Nested_List_Iterator \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,47 +0,0 @@ -### 341. Flatten Nested List Iterator - - - -题目: - - - - -难度: -Medium - - - -```python -class NestedIterator(object): - - def __init__(self, nestedList): - """ - Initialize your data structure here. - :type nestedList: List[NestedInteger] - """ - def dfs(nestedList): - for item in nestedList: - if item.isInteger(): - self.stack.append(item.getInteger()) - else: - dfs(item.getList()) - self.stack = [] - dfs(nestedList) - - - def next(self): - """ - :rtype: int - """ - if self.hasNext(): - return self.stack.pop(0) - - - def hasNext(self): - """ - :rtype: bool - """ - return self.stack != [] -``` - diff --git "a/docs/Leetcode_Solutions/C++/342._Power_of_Four \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/342._Power_of_Four \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index c895a7c24..000000000 --- "a/docs/Leetcode_Solutions/C++/342._Power_of_Four \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,32 +0,0 @@ -### 342. Power of Four - - - -题目: - - - - -难度 : Easy - -继续照抄power of three - -```python -class Solution(object): - def isPowerOfFour(self, num): - """ - :type num: int - :rtype: bool - """ - if num <= 0 : - return False - if num == 1: - return True - if num % 4 == 0: - return self.isPowerOfFour(num/4) - return False - -``` - - - diff --git "a/docs/Leetcode_Solutions/C++/344._reverse_string \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/344._reverse_string \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 0e4c0f4fb..000000000 --- "a/docs/Leetcode_Solutions/C++/344._reverse_string \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,47 +0,0 @@ -### 344. Reverse String - - - -题目: - - - -难度: -Easy - -思路: - -不要脸的python AC code: - - -```python -class Solution(object): - def reverseString(self, s): - """ - :type s: str - :rtype: str - """ - return s[::-1] -``` - -因为python不支持item assignment - -所以如果非要用two pointer来做的话,那么会是这样 - -```python -class Solution(object): - def reverseString(self, s): - """ - :type s: str - :rtype: str - """ - lst = list(s) - n = len(lst) - start, end = 0, n - 1 - - while start < end: - lst[end], lst[start] = lst[start],lst[end] - start += 1 - end -= 1 - return ''.join(lst) -``` diff --git "a/docs/Leetcode_Solutions/C++/345._Reverse_Vowels_of_a_String \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/345._Reverse_Vowels_of_a_String \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 380c1b513..000000000 --- "a/docs/Leetcode_Solutions/C++/345._Reverse_Vowels_of_a_String \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,61 +0,0 @@ -### 345. Reverse Vowels of a String - - -题目: - - - -难度: - -Easy - - - -思路 - -字符串不可变,所以用list代替,最后join - - - -```python -class Solution(object): - def reverseVowels(self, s): - """ - :type s: str - :rtype: str - """ - vowels = 'aeiou' - string = list(s) - i, j = 0, len(s) -1 - while i <= j: - if string[i].lower() not in vowels: - i += 1 - elif string[j].lower() not in vowels: - j -= 1 - else: - string[i], string[j] = string[j], string[i] - i += 1 - j -= 1 - return ''.join(string) -``` - -正则版本 - -```python -class Solution(object): - def reverseVowels(self, s): - """ - :type s: str - :rtype: str - """ - vowels = re.findall('(?i)[aeiou]', s) - return re.sub('(?i)[aeiou]', lambda m: vowels.pop(), s) -``` - - - - - - - - diff --git "a/docs/Leetcode_Solutions/C++/349._intersection_of_two_arrays \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/349._intersection_of_two_arrays \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 2f79b8dd9..000000000 --- "a/docs/Leetcode_Solutions/C++/349._intersection_of_two_arrays \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,25 +0,0 @@ -### 349. Intersection of Two Arrays - -题目: - - - -难度: - -Easy - - - -Python一句话作弊 - -```python -class Solution(object): - def intersection(self, nums1, nums2): - """ - :type nums1: List[int] - :type nums2: List[int] - :rtype: List[int] - """ - return list(set(nums1).intersection(nums2)) -``` - diff --git "a/docs/Leetcode_Solutions/C++/350._intersection_of_two_arrays_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/350._intersection_of_two_arrays_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index d2a444772..000000000 --- "a/docs/Leetcode_Solutions/C++/350._intersection_of_two_arrays_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,65 +0,0 @@ -### 350. Intersection of Two Arrays II - -题目: - - - - -难度: - -Easy - - -sort之后用了双指针来走和看 - - -```python -class Solution(object): - def intersect(self, nums1, nums2): - """ - :type nums1: List[int] - :type nums2: List[int] - :rtype: List[int] - """ - nums1.sort() - nums2.sort() - - l1 = len(nums1) - l2 = len(nums2) - - p1 = 0 - p2 = 0 - - res = [] - - while p1 < l1 and p2 < l2: - if nums1[p1] < nums2[p2]: - p1 += 1 - elif nums1[p1] > nums2[p2]: - p2 += 1 - else: - res.append(nums1[p1]) - p1 += 1 - p2 += 1 - return res -``` - -两行版本 -```python -class Solution(object): - def intersect(self, nums1, nums2): - """ - :type nums1: List[int] - :type nums2: List[int] - :rtype: List[int] - """ - a, b = map(collections.Counter, (nums1, nums2)) - return list((a & b).elements()) -``` - - - - - - - diff --git "a/docs/Leetcode_Solutions/C++/353. Design Snake Game \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/353. Design Snake Game \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b9b95757c..000000000 --- "a/docs/Leetcode_Solutions/C++/353. Design Snake Game \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,89 +0,0 @@ -### 353. Design Snake Game - - - -题目: - - - -难度: Medium - -思路: - -纯正单纯方式 - -在TLE边缘AC - -AC代码 - - - -``` -class SnakeGame(object): - - def __init__(self, width,height,food): - """ - Initialize your data structure here. - @param width - screen width - @param height - screen height - @param food - A list of food positions - E.g food = [[1,1], [1,0]] means the first food is positioned at [1,1], the second is at [1,0]. - :type width: int - :type height: int - :type food: List[List[int]] - """ - self.width = width - self.height = height - self.food = food - self.snake = [[0,0]] - self.score = 0 - - - def move(self, direction): - """ - Moves the snake. - @param direction - 'U' = Up, 'L' = Left, 'R' = Right, 'D' = Down - @return The game's score after the move. Return -1 if game over. - Game over when snake crosses the screen boundary or bites its body. - :type direction: str - :rtype: int - """ - - nextx, nexty = self.snake[0] - - if direction == 'U': - nextx -= 1 - if direction == 'L': - nexty -=1 - if direction == 'R': - nexty +=1 - if direction == 'D': - nextx +=1 - - # nextx, nexty has food - if self.food and [nextx,nexty] == self.food[0]: - self.snake.insert(0,[nextx,nexty]) - self.food = self.food[1:] - self.score += 1 - # netx, nety outside boundary - else: - self.snake = self.snake[:-1] - self.snake.insert(0,[nextx,nexty]) - if nextx < 0 or nextx > self.height - 1 or nexty < 0 or nexty > self.width - 1: - return -1 - noDupes = [] - - for snakePt in self.snake: - # print snakePt, - if snakePt not in noDupes: - noDupes.append(snakePt) - # print 'snake', self.snake - # print 'noDpues', noDupes - if len(noDupes) < len(self.snake): - return -1 - return self.score - -``` - - - diff --git "a/docs/Leetcode_Solutions/C++/364. Nested List Weight Sum II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/364. Nested List Weight Sum II \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index d72cb1643..000000000 --- "a/docs/Leetcode_Solutions/C++/364. Nested List Weight Sum II \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,47 +0,0 @@ -### 364. Nested List Weight Sum II - - - -题目: - - -难度: -Medium - -思路: - - - -跟 Nested List Weight Sum I 的区别是这个是从不是数depth,是数层的高度: - - - -比较naive的AC代码: - -``` -class Solution(object): - def depthSumInverse(self, nestedList): - """ - :type nestedList: List[NestedInteger] - :rtype: int - """ - def level(nestedList,height): - self.level = max(height, self.level) - for item in nestedList: - if not item.isInteger(): - level(item.getList(), height + 1) - - def dfs(nestedList, height): - for item in nestedList: - if item.isInteger(): - self.res += item.getInteger() * height - else: - dfs(item.getList(),height - 1) - - self.level = 1 - self.res = 0 - level(nestedList,1) - dfs(nestedList, self.level) - return self.res -``` - diff --git "a/docs/Leetcode_Solutions/C++/366. Find Leaves of Binary Tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/366. Find Leaves of Binary Tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e82d592cc..000000000 --- "a/docs/Leetcode_Solutions/C++/366. Find Leaves of Binary Tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,52 +0,0 @@ -### 366. Find Leaves of Binary Tree - - - -题目: - - - - - -难度 :Medium - - - -按照它的要求,老老实实写了两个递归 findleaf 和 deleteleaf, 再组合起来 - - - -AC代码 - -```python -class Solution(object): - def findLeaves(self, root): - """ - :type root: TreeNode - :rtype: List[List[int]] - """ - def findLeaf(root): - if not root: - return [] - elif not root.left and not root.right: - return [root.val] - else: - return findLeaf(root.left) + findLeaf(root.right) - def removeLeaf(root): - if not root: - return None - elif not root.left and not root.right: - return None - else: - if root.left: - root.left = removeLeaf(root.left) - if root.right: - root.right = removeLeaf(root.right) - return root - res = [] - while root: - res.append(findLeaf(root)) - root = removeLeaf(root) - return res -``` - diff --git "a/docs/Leetcode_Solutions/C++/367._valid_perfect_square \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/367._valid_perfect_square \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 7bb7285d4..000000000 --- "a/docs/Leetcode_Solutions/C++/367._valid_perfect_square \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,42 +0,0 @@ -###367. Valid Perfect Square - -题目: - - - - -难度: - -Medium - - -直接用循环做也可以AC - - -``` -class Solution(object): - def isPerfectSquare(self, num): - """ - :type num: int - :rtype: bool - """ - if num == 1 or num == 4 : return True - for i in xrange(num//2): - if i*i == num: - return True - elif i*i > num: - return False - return False - -``` - -然后发现有传说中的牛顿法 - -有待阅读,然后还有二分法 - -``` - r = x - while r*r > x: - r = (r + x/r) / 2 - return r*r == x -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/369.Plus One Linked List \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/369.Plus One Linked List \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 92c64e78e..000000000 --- "a/docs/Leetcode_Solutions/C++/369.Plus One Linked List \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,46 +0,0 @@ -### 369.Plus One Linked List - -题目: - - -难度 : Medium - - - -类似题目: plus one,plus one 用递归和循环写了,对于linked list,因为most significant digit在首位,递归写起来不方便,用循环尝试,然后代码并没有实质上的区别。 - - - -``` -class Solution(object): - def plusOne(self, head): - """ - :type head: ListNode - :rtype: ListNode - """ - lst = [] - cur = head - - while cur: - lst.append(cur) - cur = cur.next - - carry = 1 - for i in range(len(lst)-1,-1,-1): - lst[i].val += carry - if lst[i].val < 10: - carry = 0 - break - else: - lst[i].val -= 10 - - if carry == 1: - node = ListNode(1) - node.next = head - return node - else: - return head -``` - - - diff --git "a/docs/Leetcode_Solutions/C++/371._sum_of_two_integers \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/371._sum_of_two_integers \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 675aa9724..000000000 --- "a/docs/Leetcode_Solutions/C++/371._sum_of_two_integers \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,95 +0,0 @@ -###371. Sum of Two Integers - -题目: - - - -难度: - -Easy - - -思路 - - -谷歌答案 - - -位运算 - -``` -XOR -x y output -0 0 0 -1 0 1 -0 1 1 -1 1 0 - - -AND -x y output -0 0 0 -1 0 1 -0 1 1 -1 1 1 - -``` - -如果对x和y来做加法(x和y都是一位的),那么末位会是x xor y,进位会是x and y - - - - - -python没有左移,用c++来看 - -``` -class Solution { -public: - int getSum(int a, int b) { - while (b != 0 ){ - int c = a & b; - a = a ^ b; - b = c << 1; - } - return a; - } -}; -``` - -实际上看到答案还是没有那么明白的,还是动手算算 - - - -``` -a = 6 (0110) -b = 15 (1111) - - -1st ---------- -carry = a & b = 0110 -a = a ^ b = 1001 -b = 1100 - - -2nd ---------- -carry = a & b = 1000 -a = a ^ b = 0101 -b = 10000 - - -3rd ----------- - -carry = a & b = 0 -a = a ^ b = 10101 -b = 0 - -这个时候a 的值是2^4 + 2^2 + 2^0 = 16+4+1 = 21 -``` - -虽然convence了我自己,但是表示依旧迷茫ing - -也知道位运算需要待补啊 \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/374._Guess_Number_Higher_or_Lower \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/374._Guess_Number_Higher_or_Lower \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index d7d3072f2..000000000 --- "a/docs/Leetcode_Solutions/C++/374._Guess_Number_Higher_or_Lower \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,34 +0,0 @@ -### 374. Guess Number Higher or Lower - -题目: - - - -难度: - -Easy - - -思路 - -二分 - -```python -class Solution(object): - def guessNumber(self, n): - """ - :type n: int - :rtype: int - """ - l, r = 1, n - while l <= r: - mid = l + ((r - l) >> 2) - if guess(mid) == 1: - l = mid + 1 - elif guess(mid) == -1: - r = mid - 1 - else: - return mid -``` - - diff --git "a/docs/Leetcode_Solutions/C++/377._combination_sum_iv \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/377._combination_sum_iv \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 88548d175..000000000 --- "a/docs/Leetcode_Solutions/C++/377._combination_sum_iv \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,77 +0,0 @@ -###377. Combination Sum IV - -题目: - - - - -难度: - -Medium - - -直接用combination sum的思路: 超时 - -``` -class Solution(object): - def combinationSum4(self, candidates, target): - """ - :type candidates: List[int] - :type target: int - :rtype: List[List[int]] - """ - def combSum(candidates, target, start, valueList): - length = len(candidates) - if target == 0 : - res.append(valueList) - for i in range(start, length): - if target < candidates[i]: - return - combSum(candidates, target - candidates[i], 0, valueList + [candidates[i]]) - - candidates = list(set(candidates)) - candidates.sort() - res = [] - combSum(candidates, target, 0, []) - return len(res) -``` - - - - - -说起来标签是dp,也知道是dp啊,状态转移方程: - - - -参考: - - - -> -> -> 我们需要一个一维数组dp,其中dp[i]表示目标数为i的解的个数,然后我们从1遍历到target,对于每一个数i,遍历nums数组,如果i>=x, dp[i] += dp[i - x]。这个也很好理解,比如说对于[1,2,3] 4,这个例子,当我们在计算dp[3]的时候,3可以拆分为1+x,而x即为dp[2],3也可以拆分为2+x,此时x为dp[1],3同样可以拆为3+x,此时x为dp[0],我们把所有的情况加起来就是组成3的所有情况了 - - - -AC代码 - -``` -class Solution(object): - def combinationSum4(self, candidates, target): - """ - :type candidates: List[int] - :type target: int - :rtype: List[List[int]] - """ - dp = [0 for i in range(target+1)] - - dp[0] = 1 - - for i in range(target+1): - for candidate in candidates: - if i >= candidate: - dp[i] += dp[i - candidate] - return dp[-1] -``` - diff --git "a/docs/Leetcode_Solutions/C++/378._kth_smallest_element_in_a_sorted_matrix \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/378._kth_smallest_element_in_a_sorted_matrix \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 34c267b41..000000000 --- "a/docs/Leetcode_Solutions/C++/378._kth_smallest_element_in_a_sorted_matrix \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,107 +0,0 @@ -### 378. Kth Smallest Element in a Sorted Matrix - - - -题目: - - - -难度: -Medium - - - -### 思路一:暴力法 - -```python -class Solution(object): - def kthSmallest(self, matrix, k): - """ - :type matrix: List[List[int]] - :type k: int - :rtype: int - """ - tmp = [] - for row in matrix: - for column in row: - tmp.append(column) - tmp.sort() - return tmp[k-1] if tmp and len(tmp)>0 else None -``` -### 思路二: -两个tag : binary search, heap - -######先来heap - -1. 利用heap,先对第一行所有元素加入heap,每个元素下面同一列的元素必然比他们大 -2. 重复K-1次下面的过程 - - 取现在的root - - 将root下面的元素加入heap - -可以手写一个例子来看 - -参考: - - -```python -class Solution(object): - def kthSmallest(self, matrix, k): - """ - :type matrix: List[List[int]] - :type k: int - :rtype: int - """ - if not matrix: - return 0 - - heap = [] - row = len(matrix) - col = len(matrix[0]) - - for i in range(col): - # heap store its value and location - heapq.heappush(heap, (matrix[0][i], 0, i)) - - print heap - - for j in range(k-1): - cur = heappop(heap) - x = cur[1] - y = cur[2] - if x+1 < row: - heapq.heappush(heap, (matrix[x+1][y],x+1,y)) - - return heap[0][0] -``` - -### 思路三: heapq一行 - -```python -class Solution(object): - def kthSmallest(self, matrix, k): - """ - :type matrix: List[List[int]] - :type k: int - :rtype: int - """ - return list(heapq.merge(*matrix))[k-1] -``` - -### 思路四; binary search -```python -class Solution(object): - def kthSmallest(self, matrix, k): - """ - :type matrix: List[List[int]] - :type k: int - :rtype: int - """ - l, r = matrix[0][0], matrix[-1][-1] - while l <= r: - mid = l + ((r - l) >> 2) - if sum(bisect.bisect_right(row, mid) for row in matrix) < k: - l = mid + 1 - else: - r = mid - 1 - return l -``` diff --git "a/docs/Leetcode_Solutions/C++/380. Insert Delete GetRandom O(1) \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/380. Insert Delete GetRandom O(1) \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 401f3ee7f..000000000 --- "a/docs/Leetcode_Solutions/C++/380. Insert Delete GetRandom O(1) \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,159 +0,0 @@ -### 380. Insert Delete GetRandom O(1) - - - -题目: - - - - -难度 : Hard - - - -我的naive TLE代码,关键还是在想这个getRandom,这就不是O(1)的: - - - -``` -class RandomizedSet(object): - - def __init__(self): - """ - Initialize your data structure here. - """ - self.container = {} - - - def insert(self, val): - """ - Inserts a value to the set. Returns true if the set did not already contain the specified element. - :type val: int - :rtype: bool - """ - # 1 stands for present - if val in self.container and self.container[val] == 1: - return False - else: - self.container[val] = 1 - return True - - - def remove(self, val): - """ - Removes a value from the set. Returns true if the set contained the specified element. - :type val: int - :rtype: bool - """ - if self.container.get(val,0) == 1: - self.container[val] = 0 - return True - else: - return False - - - - def getRandom(self): - """ - Get a random element from the set. - :rtype: int - """ - import random - keys = self.container.keys() - rd = random.randint(0, len(keys) - 1) - if self.container[keys[rd]] == 1: - return keys[rd] - elif self.container.get(keys[rd],0) == 0: - return self.getRandom() -``` - - - -也是有[stackoverflow问题界面的题目](http://stackoverflow.com/questions/5682218/data-structure-insert-remove-contains-get-random-element-all-at-o1#comment18171331_5684892): - -> Consider a data structure composed of a hashtable H and an array A. The hashtable keys are the elements in the data structure, and the values are their positions in the array. -> -> 1.insert(value): append the value to array and let i be its index in A. Set H[value]=i. -> -> 2.remove(value): We are going to replace the cell that contains value in A with the last element in A. let d be the last element in the array A at index m. let i be H[value], the index in the array of the value to be removed. Set A[i]=d, H[d]=i, decrease the size of the array by one, and remove value from H. -> -> 3.contains(value): return H.contains(value) -> -> 4.getRandomElement(): let r=random(current size of A). return A[r]. -> -> -> -> since the array needs to auto-increase in size, it's going to be amortize O(1) to add an element, but I guess that's OK. - - - - - -按照以答案AC代码 - -``` -class RandomizedSet(object): - - def __init__(self): - """ - Initialize your data structure here. - """ - self.hashtable = {} - self.array = [] - self.arraySize = 0 - - def insert(self, val): - """ - Inserts a value to the set. Returns true if the set did not already contain the specified element. - :type val: int - :rtype: bool - """ - # already in the set - if val in self.hashtable: - return False - else: - self.hashtable[val] = self.arraySize - self.array.append(val) - self.arraySize += 1 - return True - - - def remove(self, val): - """ - Removes a value from the set. Returns true if the set contained the specified element. - :type val: int - :rtype: bool - """ - if val not in self.hashtable: - return False - else: - removeIdx = self.hashtable[val] - if self.arraySize == 1: - self.__init__() - else: - self.array[removeIdx] = self.array[-1] - self.hashtable[self.array[-1]] = removeIdx - self.arraySize -= 1 - del self.hashtable[val] - del self.array[-1] - return True - - - - def getRandom(self): - """ - Get a random element from the set. - :rtype: int - """ - import random - rd = random.randint(0, self.arraySize-1) - return self.array[rd] -``` - - - - - -最后getRandom也可以写成: - -`return random.choice(self.array)` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/381. Insert Delete GetRandom O(1) - Duplicates allowed \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/381. Insert Delete GetRandom O(1) - Duplicates allowed \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 9adb6cd32..000000000 --- "a/docs/Leetcode_Solutions/C++/381. Insert Delete GetRandom O(1) - Duplicates allowed \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,83 +0,0 @@ -### 381. Insert Delete GetRandom O(1) - Duplicates allowed - - - -题目: - - - - -难度 : Hard - - - -一开始的想法是在380上面做简单的修改,比如用一个list来存每个数对应的location,但是这样remove会退化为O(N),然后看到: - -- 用 set 这个数据结构就可以贴近O(1) -- 学了一个新的东西`defaultdict`, 相当于 D.get('key',defaultvalue) - - - -这个defaultdict的好处就是添加的时候默认的值就是set,但是并不默认这个就存在 - - - -AC代码 - -``` -class RandomizedCollection(object): - - def __init__(self): - """ - Initialize your data structure here. - """ - import collections - self.hashtable = collections.defaultdict(set) - self.array = [] - - def insert(self, val): - """ - Inserts a value to the collection. Returns true if the collection did not already contain the specified element. - :type val: int - :rtype: bool - """ - valin = val not in self.hashtable - self.hashtable[val].add(len(self.array)) - self.array.append(val) - return valin - - def remove(self, val): - """ - Removes a value from the collection. Returns true if the collection contained the specified element. - :type val: int - :rtype: bool - """ - if val not in self.hashtable: - return False - else: - if self.array[-1] == val: - removeIdx = len(self.array) - 1 - self.hashtable[val].remove(removeIdx) - else: - # set pop remove arbitrary element - removeIdx = self.hashtable[val].pop() - self.array[removeIdx] = self.array[-1] - self.hashtable[self.array[-1]].remove(len(self.array) - 1) - self.hashtable[self.array[-1]].add(removeIdx) - if len(self.hashtable[val]) == 0: - del self.hashtable[val] - del self.array[-1] - return True - - - def getRandom(self): - """ - Get a random element from the collection. - :rtype: int - """ - import random - return random.choice(self.array) - -``` - -` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/382._linked_list_random_node \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/382._linked_list_random_node \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 775a0b32d..000000000 --- "a/docs/Leetcode_Solutions/C++/382._linked_list_random_node \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,79 +0,0 @@ - -###382. Linked List Random Node - - -题目: - - - -难度: - -Medium - - - -tag:reservoir sampling 水塘抽样 - - -思路: - -n选k - - -这样来看,有k个元素,那么这个时候全部选中,当第k+1个元素进来的时候,生成一个随机数r,如果 r <= k,那么用它来替换第r个元素 - -那么r被替换掉的概率是 1 / k + 1, 不被替换掉的概率是 k / k + 1 (不生成r) - -k+2来继续: 被替换掉的概率 1 / k + 2, 不被替换掉的概率 (k + 1) / (k+2) - -所以最终被选中的(不被替换掉的概率是) k / n - -随机 √ - - -针对这道题目来看 - -- 一开始选head为choice -- 出现第二个,生成[1,2]之间的随机数,如果r = 2,则用新的来替换choice -- 出现第三个,生成[1,2,3]之间的随机数,如果r = 3,则替换 - -再写简单一点就是 - - -每次以 1/i 来决定是否用新的元素来替换选中元素,那么就是 i - 1 / i 不替换,它之前被选中的概率就是 1 / i-1 ,所以最终被选中的概率是 1/i - -这个对于linked list更优之处在于它不用reverse - -时间复杂度 O(N), 空间复杂度O(K) - - -然后AC - - -``` -class Solution(object): - - def __init__(self, head): - """ - @param head The linked list's head. - Note that the head is guaranteed to be not null, so it contains at least one node. - :type head: ListNode - """ - self.head = head - - def getRandom(self): - """ - Returns a random node's value. - :rtype: int - """ - choice = self.head - cur = self.head - i = 1 - while cur.next: - cur = cur.next - i += 1 - rd = random.randint(1,i) - if rd == i: - choice = cur - return choice.val -``` diff --git "a/docs/Leetcode_Solutions/C++/383._ransom_note \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/383._ransom_note \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 6a6ee16e7..000000000 --- "a/docs/Leetcode_Solutions/C++/383._ransom_note \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,53 +0,0 @@ -### 383. Ransom Note - -题目: - - - -难度 : Easy - - - -略微想了一下,用了一个dictionary来存magazine里面的单字出现的个数,然后来对应check是否可以用来组成ransomNote - - -```python -class Solution(object): - def canConstruct(self, ransomNote, magazine): - """ - :type ransomNote: str - :type magazine: str - :rtype: bool - """ - maps = {} - for i in magazine: - if i in maps: - maps[i] += 1 - else: - maps[i] = 1 - for i in ransomNote: - if i not in maps: - return False - else: - maps[i] -= 1 - if maps[i] < 0: - return False - return True -``` -解法2: - -```python -class Solution(object): - def canConstruct(self, ransomNote, magazine): - """ - :type ransomNote: str - :type magazine: str - :rtype: bool - """ - magCounter = collections.Counter(magazine) - ranCounter = collections.Counter(ransomNote) - for k in ranCounter: - if ranCounter.get(k) > magCounter.get(k): - return False - return True -``` diff --git "a/docs/Leetcode_Solutions/C++/384. Shuffle an Array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/384. Shuffle an Array \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index bd3d126a9..000000000 --- "a/docs/Leetcode_Solutions/C++/384. Shuffle an Array \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,105 +0,0 @@ -### 384. Shuffle an Array - - - -题目: - - - - -难度 : Medium - - - -思路: - - - -这就是洗牌算法吧,洗牌算法几种常见的: - - - -http://www.matrix67.com/blog/archives/879 - - - -也是有wikipedia page的: - -最简单的算法是很容易想到的, O(N^2) - -然后就是modern 算法: - - - -``` --- To shuffle an array a of n elements (indices 0..n-1): -for i from n−1 downto 1 do - j ← random integer such that 0 ≤ j ≤ i - exchange a[j] and a[i] -``` - - - -这个感觉还是比较容易证明的,一开始生成的数字 1/n 概率 - -没选中,下一个 n-1 /n * 1/ n-1 = 1/n, 所以每个位置都是等概率的? - - - -这个有很妙的点: - -比如五个人顺序抽签,只要不uncover 结果,那么就是等概率的。 - - - -但是第一个人抽奖之后uncover结果,比如他没有抽中 → 那么概率就会变。 - - - - - - - -AC代码: - -``` -class Solution(object): - - def __init__(self, nums): - """ - - :type nums: List[int] - :type size: int - """ - self.lst = nums - - - def reset(self): - """ - Resets the array to its original configuration and return it. - :rtype: List[int] - """ - return self.lst - - - def shuffle(self): - """ - Returns a random shuffling of the array. - :rtype: List[int] - """ - import random - res = self.lst[:] - n = len(res) - for i in range(n-1,0,-1): - j = random.randint(0,i) - res[i], res[j] = res[j], res[i] - return res - -``` - - - - - - - diff --git "a/docs/Leetcode_Solutions/C++/387._first_unique_character_in_a_string \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/387._first_unique_character_in_a_string \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index dfbb89ae1..000000000 --- "a/docs/Leetcode_Solutions/C++/387._first_unique_character_in_a_string \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,58 +0,0 @@ -### 387. First Unique Character in a String - -题目: - - - -难度: -Easy - - - -思路一: - -Python作弊法 - -用Python的Counter模块 - -可以参考 - - - - -```python -class Solution(object): - def firstUniqChar(self, s): - """ - :type s: str - :rtype: int - """ - d = collections.Counter(s) - for x,c in enumerate(s): - if d[c] == 1: - return x - return -1 -``` - - -思路二: - -利用问题的特性,因为只有可能是小写字母,所以可以用一个长度为26的array, 先数一遍char的数量,然后enumerate从左往右又来 - -```python -class Solution(object): - def firstUniqChar(self, s): - """ - :type s: str - :rtype: int - """ - cnt = [0 for i in range(26)] - for char in s: - cnt[ord(char) - ord('a')] += 1 - - for idx, char in enumerate(s): - if cnt[ord(char) - ord('a')] == 1: - return idx - return -1 - -``` diff --git "a/docs/Leetcode_Solutions/C++/388._Longest_Absolute_File_Path \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/388._Longest_Absolute_File_Path \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 7d92da63a..000000000 --- "a/docs/Leetcode_Solutions/C++/388._Longest_Absolute_File_Path \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,93 +0,0 @@ -### 388. Longest Absolute File Path - - -题目: - - - -难度: - -Medium - - - -思路 - -我们首先观察到每个```文件夹```或者是```文件```前面都会有一个```'\n'```, 还有对应其层数个数的```'\t'```. -- 所以首先根据```'\n'```分行,然后算出该```文件/文件夹```的层数```depth``` -- 如果是```文件```,我们需要更新```maxlen``` -- 如果是```文件夹```,我们需要更新该```depth```下的```pathlen``` - -### 程序变量解释 - -- ```maxlen``` 代表目前最大子串的长度 -- ```pathlen``` 每一个```depth```下对应的```path```长度 - -#### 特别需要注意的是,```'\t'```的长度是1 -有的人仍然会有疑问,每次碰到文件夹都直接更新```pathlen```会不会导致本来长的反而变得短了,但是我们可以看到字符串的排版格式,每层```path```都是严格有自己的分级的, -因此不会出现这样的问题。 -例如: -- The string ```"dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext"``` represents: -``` -dir - subdir1 - file1.ext - subsubdir1 - subdir2 - subsubdir2 - file2.ext -``` -其最大长度是```32```, ```"dir/subdir2/subsubdir2/file2.ext"``` - -- 如果变成```"dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir20\n\t\tsubsubdir2\n\t\t\tfile2.ext"```, - -``` -dir - subdir1 - file1.ext - subsubdir1 - subdir20 - subsubdir2 - file2.ext -``` - -最大长度就是```33```, -```"dir/subdir2/subsubdir20/file2.ext"``` - - -- 如果变成 -```"dir\n\tsubdir1000000000000\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext"``` - -``` -dir - subdir10000000000000 - file1.ext - subsubdir1 - subdir20 - subsubdir2 - file2.ext -``` - -最大长度就是```34```,```"dir/subdir10000000000000/file1.ext"``` - - -```python -class Solution(object): - def lengthLongestPath(self, input): - """ - :type input: str - :rtype: int - """ - maxlen = 0 - pathlen = {0 : 0} - for line in input.splitlines(): - name = line.lstrip('\t') - depth = len(line) - len(name) # 前面有几个'\t', depth就是几 - if '.' in name: - maxlen = max(maxlen, pathlen[depth] + len(name)) - else: -                pathlen[depth+1] = pathlen[depth] + len(name) + 1   #加1是为了加上一个path分隔符'/'的长度 - return maxlen -``` - - diff --git "a/docs/Leetcode_Solutions/C++/389._find_the_difference \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/389._find_the_difference \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a26bc73ae..000000000 --- "a/docs/Leetcode_Solutions/C++/389._find_the_difference \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,47 +0,0 @@ - -###389. Find the Difference - - -题目: - - - -难度: - -Easy - - -思路 - -用两个hashmap分别来记录 s 和 t 中char的数量,一旦t[key] > s[key], output - -注意这个好的写法 - - -mapt[char] = mapt.get(char,0) + 1 - -如果mapt[char]不存在,会默认给1 - - - -``` -class Solution(object): - def findTheDifference(self, s, t): - """ - :type s: str - :type t: str - :rtype: str - """ - maps = {} - mapt = {} - for char in s: - maps[char] = maps.get(char,0) + 1 - for char in t: - mapt[char] = mapt.get(char,0) + 1 - - for key in mapt: - if mapt[key] - maps.get(key,0) > 0: - return key -``` - - diff --git "a/docs/Leetcode_Solutions/C++/392._is_subsequence \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/392._is_subsequence \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b7727173b..000000000 --- "a/docs/Leetcode_Solutions/C++/392._is_subsequence \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,69 +0,0 @@ - -###392. Is Subsequence - - -题目: - - - -难度: - -Medium - - -思路 - - -follow up question很有意思 - - -最naive的思路表现形式如下: - -超时 - -``` -class Solution(object): - def isSubsequence(self, s, t): - """ - :type s: str - :type t: str - :rtype: bool - """ - if s == "": return True - for i in xrange(len(t)): - if t[i] == s[0]: - return self.isSubsequence(s[1:],t[i+1:]) - - return False -``` - -因为直接操作string的昂贵以及递归的昂贵 - -同样的思路 - - -``` -class Solution(object): - def isSubsequence(self, s, t): - """ - :type s: str - :type t: str - :rtype: bool - """ - if s == "" : return True - - ps, pt = 0, 0 - lens, lent = len(s), len(t) - while ps < lens and pt < lent: - if s[ps] == t[pt]: - ps += 1 - pt += 1 - else: - pt += 1 - - return ps >= lens -``` - -AC - - diff --git "a/docs/Leetcode_Solutions/C++/394._decode_string \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/394._decode_string \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a9eabe7f1..000000000 --- "a/docs/Leetcode_Solutions/C++/394._decode_string \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,70 +0,0 @@ -###394. Decode String - - -题目: - - - - -难度: - -Medium - - -思路: - -感觉像用栈做运算。 - -s = "3[a2[c]]" - -⬇️ - -s = 3 *( a + 2 * ( c ) ) - - -遇到非右括号全部入栈,碰到右括号出栈直到左括号,这个就算运算符2 → op2 -然后检查,直到stack空掉或者碰到下一个非数字,这个就算运算符1 → op1 - -算出op1 和 op2 之后把这个res继续入栈。然后接着处理 - - -代码不是很优美 - - - - -``` -class Solution(object): - def decodeString(self, s): - """ - :type s: str - :rtype: str - """ - - s = list(s) - stack = [] - - while s: - char = s.pop(0) - if char != ']': - stack.append(char) - else: - op1, op2 = '','' - popChar = stack.pop() - while popChar != '[': - op2 = popChar + op2 - popChar = stack.pop() - - while stack and stack[-1] in ['0','1','2','3','4','5','6','7','8','9']: - popChar = stack.pop() - op1 = popChar + op1 - - res = int(op1) * op2 - - for char in res: - stack.append(char) - - return ''.join(stack) -``` - - diff --git "a/docs/Leetcode_Solutions/C++/400. Nth Digit \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/400. Nth Digit \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 6cc93ab3e..000000000 --- "a/docs/Leetcode_Solutions/C++/400. Nth Digit \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,46 +0,0 @@ -### 400. Nth Digit - - - -题目: - - -难度: - -Easy - -思路: - -这道简单题我服, tag是math,找规律 - -``` -1- 9 : 9 → 只占1位 9 -10 - 99: 90 → 两位 90 * 2 -100 - 999: 900 → 三位 900 * 3 -1000 - 9999: 9000 → 四位 9000 * 4 -``` - - - -AC代码来之不易,是参考别人的,这里的`for i in range(9)`, 其实无论`range`多少都可以吧 - - - -``` -class Solution(object): - def findNthDigit(self, n): - """ - :type n: int - :rtype: int - """ - for i in range(9): - d = 9 * 10 ** i - if n <= d * (i+1): break - n -= d *(i+1) - n -= 1 - - return int(str(10**i + n / (i+1))[n % (i+1)]) -``` - - - diff --git "a/docs/Leetcode_Solutions/C++/401._binary_watch \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/401._binary_watch \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 00f217e7f..000000000 --- "a/docs/Leetcode_Solutions/C++/401._binary_watch \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,60 +0,0 @@ -###401. Binary Watch - - - -题目: - - - -难度: -Easy - - -思路: - - -一看到位操作,我的内心是拒绝的。 - -我也有想这样的想法,因为其实可以的组合并没有那么多,干脆枚举算了,然而也没有动手来写,直到被发了题解的截屏。 - - -``` -class Solution(object): - def readBinaryWatch(self, num): - """ - :type num: int - :rtype: List[str] - """ - hour = { 0 : ['0'], - 1:['1','2','4','8'], - 2:['3','5','6','9','10'], - 3:['7','11'] - } - - minute = { 0:['00'], - 1: ['01','02','04','08','16','32'], - 2: ['03','05','06','09','10','12','17','18','20','24','33','34','36','40','48'], - 3: ['07','11','13','14','19','21','22','25','26','28','35','37','38','41','42','44','49','50','52','56'], - 4: ['15','23','27','29','30','39','43','45','46','51','53','54','57','58'], - 5: ['31','47','55','59'] - } - - res = [] - - #num = num for hour + num for minute - i = 0 - - while i <= 3 and i <= num: - if num - i <= 5: - for str1 in hour[i]: - for str2 in minute[num-i]: - res.append(str1 + ':' + str2) - i += 1 - return res -``` - - -关于循环那处,因为hour的led最多只有4个,所以这样写循环 - - - diff --git "a/docs/Leetcode_Solutions/C++/404._sum_of_left_leaves \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/404._sum_of_left_leaves \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b6cda537c..000000000 --- "a/docs/Leetcode_Solutions/C++/404._sum_of_left_leaves \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,45 +0,0 @@ -###404. Sum of Left Leaves - - - -题目: - - - -难度: -Easy - - -思路: - - -典型递归,检查root的左孩子是不是node,是的话加上它的值,不是的话递归去求它的孩子们的,对于右边,递归的求sum of left leaves - - - -``` -class Solution(object): - def sumOfLeftLeaves(self, root): - """ - :type root: TreeNode - :rtype: int - """ - def isLeaf(node): - if node == None: - return False - if node.left == None and node.right == None: - return True - return False - - res = 0 - - if root: - if isLeaf(root.left): - res += root.left.val - else: - res += self.sumOfLeftLeaves(root.left) - if root.right: - res += self.sumOfLeftLeaves(root.right) - - return res -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/405. Convert a Number to Hexadecimal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/405. Convert a Number to Hexadecimal \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 5bcb3ec36..000000000 --- "a/docs/Leetcode_Solutions/C++/405. Convert a Number to Hexadecimal \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,114 +0,0 @@ -### 405. Convert a Number to Hexadecimal - -题目: - - - -难度: - -Easy - - - -wikipedia两个page: - - - -[十六进制](https://zh.wikipedia.org/wiki/十六进制#.E5.8D.81.E9.80.B2.E5.88.B6.E8.BD.89.E5.8D.81.E5.85.AD.E9.80.B2.E5.88.B6) - -例子: - -4877÷16=304....13(D) - -304÷16=19....0 - -19÷16=1....3 - -1÷16=0....1 - -這樣就計到4877(10)=130D(16) - - - -[补码](https://zh.wikipedia.org/wiki/二補數) - -> 一個數字的二補數就是將該數字作[位元](https://zh.wikipedia.org/wiki/%E4%BD%8D%E5%85%83)[反相](https://zh.wikipedia.org/w/index.php?title=%E5%8F%8D%E7%9B%B8&action=edit&redlink=1)運算(即[一補數](https://zh.wikipedia.org/wiki/%E4%B8%80%E8%A3%9C%E6%95%B8)或[反码](https://zh.wikipedia.org/wiki/%E5%8F%8D%E7%A0%81)),再將結果加1。在二補數系統中,一個負數就是用其對應正數的二補數來表示 - - - -看给的这个-1的例子 - - - -0000 0000 0000 0000 0000 0000 0000 0001 - -1111 1111 1111 1111 1111 1111 1111 1110 +1 - -1111 1111 1111 1111 1111 1111 1111 1111 - -f f f f f f f f - - - - - -也可以参考这里: - -[基础03:原码、反码、补码](https://higoge.github.io/2015/07/02/basic03/) - - - -这里我一开始迷茫和晕了一下,但是随后反应过来,这些数字在电脑里使用二进制存的,而负数也是用二进制的补码存的。所以其实AC代码应当很简单。 - -参考: - - - - - -AC代码: - -``` -class Solution(object): - def toHex(self, num): - """ - :type num: int - :rtype: str - """ - if not num : - return "0" - - result = [] - hexStr ="0123456789abcdef" - while num and len(result) != 8: - h = num & 15 - result.append(hexStr[h]) - num >>= 4 - - return ''.join(result[::-1]) -``` - - - -每次看后四位的结果,把它存起来,比如还是是看4877 - -它在计算机内部的表示是: - -``` -0b1001100001101 -num & 15 1101 & 15 = 13(d) -num >>=4 0b100110000 -num & 15 0000 & 15 = 0 -num >>=4 0b10011 -num & 15 10011 & 15 = 9 -num >>=4 0001 -num & 15 0001 & 15 = 1 - -``` - - - - - - - diff --git "a/docs/Leetcode_Solutions/C++/406._Queue_Reconstruction_by_Height \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/406._Queue_Reconstruction_by_Height \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 87e551963..000000000 --- "a/docs/Leetcode_Solutions/C++/406._Queue_Reconstruction_by_Height \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,43 +0,0 @@ -### 406. Queue Reconstruction by Height - -题目: - - - -难度: - -Medium - - -思路: -People are only counting (in their k-value) taller or equal-height others standing in front of them. -So a smallest person is completely irrelevant for all taller ones. And of all smallest people, -the one standing most in the back is even completely irrelevant for everybody else. Nobody is counting that person. -So we can first arrange everybody else, ignoring that one person. And then just insert that person appropriately. -Now note that while this person is irrelevant for everybody else, everybody else is relevant for this person - -this person counts exactly everybody in front of them. So their count-value tells you exactly the index they must be standing. - -So you can first solve the sub-problem with all but that one person and then just insert that person appropriately. -And you can solve that sub-problem the same way, first solving the sub-sub-problem with all -but the last-smallest person of the subproblem. And so on. The base case is when you have the sub-…-sub-problem of zero people. -You’re then inserting the people in the reverse order, i.e., that overall last-smallest person in the very end -and thus the first-tallest person in the very beginning. That’s what the above solution does, -Sorting the people from the first-tallest to the last-smallest, and inserting them one by one as appropriate. - -参考[stefan](https://leetcode.com/problems/queue-reconstruction-by-height/discuss/89359) - -```python -class Solution(object): - def reconstructQueue(self, people): - """ - :type people: List[List[int]] - :rtype: List[List[int]] - """ - people.sort(key=lambda (h, k): (-h, k)) - queue = [] - for p in people: - queue.insert(p[1], p) - return queue -``` - - diff --git "a/docs/Leetcode_Solutions/C++/412._fizz_buzz \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/412._fizz_buzz \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 76551be9f..000000000 --- "a/docs/Leetcode_Solutions/C++/412._fizz_buzz \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,68 +0,0 @@ -### 412. Fizz Buzz - -题目: - - - -难度: -Easy - -一行 -```python -class Solution(object): - def fizzBuzz(self, n): - """ - :type n: int - :rtype: List[str] - """ - return [(not i%3)*"Fizz" + (not i%5)*"Buzz" or str(i) for i in range(1, n+1)] - -``` -```python -class Solution(object): - def fizzBuzz(self, n): - """ - :type n: int - :rtype: List[str] - """ - return [str(i) if (i%3!=0 and i%5!=0) else (('Fizz'*(i%3==0)) + ('Buzz'*(i%5==0))) for i in range(1,n+1)] - -``` - - -就是easy,不过可以参见这里,有一些讨论 - - - -我觉得这里一个用yield的想法还蛮不错 -``` -# the fizbuz logic, returns an iterator object that -# calculates one value at a time, not all ot them at once -def fiz(numbers): - for i in numbers: - if i % 15 == 0: - yield 'fizbuz' - elif i % 5 == 0: - yield 'buz' - elif i % 3 == 0: - yield 'fiz' - else: - yield str(i) - -# xrange evaluates lazily, good for big numbers -# matches well with the lazy-eval generator function -numbers = xrange(1,2**20) - -# this gets one number, turns that one number into fuz, repeat -print ' '.join(fiz(numbers)) - -# returns: 1 2 fiz 4 buz fiz [...] fiz 1048573 1048574 fizbuz -``` -- clearly separates fizbuz logic from concatenation -- is as plain and readeable as possible -- generator iterator does not keep all the array in memory -- so that you can do it on arbitrary numbers (see Euler problem #10) - -What I do not like in this solution is the three ifs, whereas the problem can be solved with two. - -Answer: because yield is efficient when you do not want to keep big arrays in memory just to iterate through them. But this question is not about big arrays. diff --git "a/docs/Leetcode_Solutions/C++/413. Arithmetic Slices \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/413. Arithmetic Slices \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 6aff8c826..000000000 --- "a/docs/Leetcode_Solutions/C++/413. Arithmetic Slices \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,84 +0,0 @@ -### 413. Arithmetic Slices - - - -题目: - - - - -难度 : Medium - - - -思路: - -tag 是DP - -数从 i 到 j 之间的这个arithmetic 数 - -我的方法时间复杂度比较高O(N^2),从 i 开始数它的arithmetic slice,每个i数一遍,到 j - -AC代码 - -``` -class Solution(object): - def numberOfArithmeticSlices(self, A): - """ - :type A: List[int] - :rtype: int - """ - n = len(A) - if n < 3: - return 0 - else: - res = 0 - for i in range(n-2): - for j in range(i+2,n): - if A[j] - A[j-1] == A[i+1] - A[i]: - res += 1 - else: - break - return res -``` - - - -应该可以优化到O(N) - -不需要每个每个开始数,可以边数边移动 - -可以参考 - - - -O(N) 代码 - -``` -class Solution(object): - def numberOfArithmeticSlices(self, A): - """ - :type A: List[int] - :rtype: int - """ - n = len(A) - if n < 3: - return 0 - else: - res, cnt = 0, 2 - for i in range(2, n): - if A[i] - A[i-1] == A[i-1] - A[i-2]: - print i, i-1, i-2 - cnt += 1 - else: - if cnt > 2: - res += (cnt-1) * (cnt-2) / 2 - cnt = 2 - if cnt > 2: res += (cnt-1) * (cnt-2) / 2 - return res - - -``` - - - diff --git "a/docs/Leetcode_Solutions/C++/414._third_maximum_number \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/414._third_maximum_number \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index fc3652b98..000000000 --- "a/docs/Leetcode_Solutions/C++/414._third_maximum_number \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,46 +0,0 @@ -###414. Third Maximum Number - -题目: - - - -难度: - -Easy - - -思路: - -用三个变量来记录,max, secondmax, thirdmax, - -- 遇到比max还大的就更新,当前max降级为secondmax,当前secondmax降级为thirdmax -- 遇到比max小但是比secondmax大的也这样做降级处理 -- 更thirdmax - - -AC代码 - - -``` -class Solution(object): - def thirdMax(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - m, sm, tm = float('-inf'), float('-inf'), float('-inf') - - for num in nums: - if num > m: - tm = sm - sm = m - m = num - elif num < m and num > sm: - tm = sm - sm = num - elif num < m and num < sm and num > tm: - tm = num - - return tm if tm != float('-inf') else m -``` - diff --git "a/docs/Leetcode_Solutions/C++/415._add_strings \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/415._add_strings \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index bfa319cdf..000000000 --- "a/docs/Leetcode_Solutions/C++/415._add_strings \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,61 +0,0 @@ -###415. Add Strings - -题目: - - - -难度: -Easy - - -照抄2. Add Two Numbers的代码,超时 - -``` -class Solution(object): - def addStrings(self, num1, num2): - """ - :type num1: str - :type num2: str - :rtype: str - """ - if num1 == '' or num1 == '0': - return num2 - if num2 == '' or num2 == '0': - return num1 - if int(num1[-1]) + int(num2[-1]) < 10: - num3 = str(int(num1[-1]) + int(num2[-1]) ) - return self.addStrings(num1[:-1] , num2[:-1]) + num3 - else: - num3 = str(int(num1[-1]) + int(num2[-1]) - 10) - return self.addStrings(self.addStrings(num1[:-1] , num2[:-1]),'1') + num3 -``` - - - -换成迭代,并非递归再来尝试,看了别人的代码,真是精巧啊 - - -``` -class Solution(object): - def addStrings(self, num1, num2): - """ - :type num1: str - :type num2: str - :rtype: str - """ - result = [] - carry = 0 - idx1, idx2 = len(num1), len(num2) - while idx1 or idx2 or carry: - digit = carry - if idx1: - idx1 -= 1 - digit += int(num1[idx1]) - if idx2: - idx2 -= 1 - digit += int(num2[idx2]) - carry = digit > 9 - result.append(str(digit % 10)) - print result - return ''.join(result[::-1]) # 这里是reverse一下 -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/416. Partition Equal Subset Sum \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/416. Partition Equal Subset Sum \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 1dee2d982..000000000 --- "a/docs/Leetcode_Solutions/C++/416. Partition Equal Subset Sum \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,87 +0,0 @@ -### 416. Partition Equal Subset Sum - - - -题目: - - -难度: - -Medium - -记得算法考试考过证明这个问题是NP的,当时用的是subset sum是NP,然后来证明这个?如果我们能找到一个subset的sum是整个array sum的一半,那么问题解决。subset sum我们又可以继续转化,转成背包问题。 - -值得注意的是,这是subset sum,并不是subarray sum(这个明显要简单一些,因为subarray是连着的). - -subset sum也是有自己的[wikipedia page](https://en.wikipedia.org/wiki/Subset_sum_problem). - - - -当然,这也是一个subset problem,我们当然也可以用subset,加入和不加入,但是worst case O(2^n). - - - -对于subset sum的递推方程式: - -subset(arr,n,s) = subset(arr,n-1,s) or subset(arr, n-1, s- arrp[n-1]) - - - -画表可以开始,第一列全为1,是因为不选全部可以为0 - - - -``` - 0 1 2 3 4 5 6 8 9 10 11 -0 1 0 0 0 0 0 0 0 0 0 0 -1 1 1 0 0 0 0 0 0 0 0 0 -5 1 1 0 0 0 1 1 0 0 0 0 -5 1 1 0 0 0 1 1 0 0 0 1 -``` - - - -所以伪多项式算法写出来 - -AC代码 - - - -``` -class Solution(object): - def canPartition(self, nums): - """ - :type nums: List[int] - :rtype: bool - """ - def subset(nums, s): - dp = [[0 for i in range(s+1) ] for j in range(len(nums)+1)] - - dp[0][0] = 1 - # init the first col - for i in range(len(nums)+1 - dp[i][0] = 1 - - for i in range(1,len(nums)+1): - for j in range(1,s+1): - if dp[i-1][j] == 1: - dp[i][j] = 1 - elif j >= nums[i-1] and dp[i-1][j-nums[i-1]] ==1: - dp[i][j] = 1 - return dp[-1][-1] == 1 - - - - total = sum(nums) - if total % 2 == 1: - return False - else: - half = total / 2 - return subset(nums,half) == 1 - -``` - - - -当然可以小调整,比如一旦发现,提前return等等,但是时间上依旧是后20%,不知道时间上快很多的人是如何做到的||| - diff --git "a/docs/Leetcode_Solutions/C++/421._Maximum_XOR_of_Two_Numbers_in_an_Array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/421._Maximum_XOR_of_Two_Numbers_in_an_Array \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b0697b2a6..000000000 --- "a/docs/Leetcode_Solutions/C++/421._Maximum_XOR_of_Two_Numbers_in_an_Array \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,74 +0,0 @@ -### 421. Maximum XOR of Two Numbers in an Array - -题目: - - - -难度: - -Medium - -题目要求O(N)时间 - -看了半天的解法居然超时, -```python -class Solution(object): # 此法超时 -    def findMaximumXOR(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - '''The maxResult is a record of the largest XOR we got so far. if it's 11100 at i = 2, it means - before we reach the last two bits, 11100 is the biggest XOR we have, and we're going to explore - whether we can get another two '1's and put them into maxResult''' - max_res, mask = 0, 0 - - '''This is a greedy part, since we're looking for the largest XOR, we start - from the very begining, aka, the 31st postition of bits.''' - for i in range(32)[::-1]: - - '''The mask will grow like 100..000 , 110..000, 111..000, then 1111...111 - for each iteration, we only care about the left parts''' - mask |= (1 << i) - tmp = [] - for num in nums: - '''we only care about the left parts, for example, if i = 2, then we have - {1100, 1000, 0100, 0000} from {1110, 1011, 0111, 0010}''' - tmp.append(num & mask) - - '''if i = 1 and before this iteration, the maxResult we have now is 1100, - my wish is the maxResult will grow to 1110, so I will try to find a candidate - which can give me the greedyTry;''' - greedy_try = max_res | (1 << i) - - for i in tmp: - '''This is the most tricky part, coming from a fact that if a ^ b = c, then a ^ c = b; - now we have the 'c', which is greedyTry, and we have the 'a', which is leftPartOfNum - If we hope the formula a ^ b = c to be valid, then we need the b, - and to get b, we need a ^ c, if a ^ c exisited in our set, then we're good to go''' - if i ^ greedy_try in tmp: - max_res = greedy_try - '''If unfortunately, we didn't get the greedyTry, we still have our max, - So after this iteration, the max will stay at 1100.''' - return max_res -``` - - -只好想别的办法 - - -参考[stefan](https://leetcode.com/problems/maximum-xor-of-two-numbers-in-an-array/discuss/91050?page=3) -```python -class Solution(object): - def findMaximumXOR(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - answer = 0 - for i in range(32)[::-1]: - answer <<= 1 - prefixes = {num >> i for num in nums} - answer += any(answer^1 ^ p in prefixes for p in prefixes) - return answer -``` diff --git "a/docs/Leetcode_Solutions/C++/422. Valid Word Square \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/422. Valid Word Square \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 17cb1144d..000000000 --- "a/docs/Leetcode_Solutions/C++/422. Valid Word Square \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,48 +0,0 @@ -### 422. Valid Word Square - - - - - -题目: - - - - -难度 : Easy - - - -思路: - -就是对比一个矩阵内 xy == yx? - -try /except 真是好用 - -AC代码 - - - -``` -class Solution(object): - def validWordSquare(self, words): - """ - :type words: List[str] - :rtype: bool - """ - n = len(words) - for i in xrange(n): - m = len(words[i]) - for j in xrange(m): - try: - if words[i][j] != words[j][i]: - return False - except: - return False - return True -``` - - - - - diff --git "a/docs/Leetcode_Solutions/C++/434._number_of_segments_in_a_string \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/434._number_of_segments_in_a_string \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 424472a5a..000000000 --- "a/docs/Leetcode_Solutions/C++/434._number_of_segments_in_a_string \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,27 +0,0 @@ -### 434. Number of Segments in a String - -题目: - - - -难度: - -Easy - - -作弊神器Python - - -```python -class Solution(object): - def countSegments(self, s): - """ - :type s: str - :rtype: int - """ - return len(s.split()) -``` - -不过对于比如C++这种语言来说,应该是O(N),扫一圈应该也能得到正确答案 - -总之拿Python做string的题目就是作弊啊 diff --git "a/docs/Leetcode_Solutions/C++/437._path_sum_iii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/437._path_sum_iii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index ac5c314a6..000000000 --- "a/docs/Leetcode_Solutions/C++/437._path_sum_iii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,39 +0,0 @@ -### 437. Path Sum III - - - -题目: - - - -难度: -Easy - -思路: - - - - -```python -class Solution(object): - def pathSum(self, root, sum): - """ - :type root: TreeNode - :type sum: int - :rtype: int - """ - if not root: - return 0 - res = self.auxPathSum(root, sum) - res += self.pathSum(root.left, sum) - res += self.pathSum(root.right, sum) - return res - def auxPathSum(self, root, sum): - if not root: - return 0 - if sum == root.val: -            # 因为可能有负值, 所以sum为0也会有解, 必须加上 -            return 1 + self.auxPathSum(root.left, 0) + self.auxPathSum(root.right, 0) - else: - return self.auxPathSum(root.left, sum - root.val) + self.auxPathSum(root.right, sum - root.val) -``` diff --git "a/docs/Leetcode_Solutions/C++/438._Find_All_Anagrams_in_a_String \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/438._Find_All_Anagrams_in_a_String \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 2b8519852..000000000 --- "a/docs/Leetcode_Solutions/C++/438._Find_All_Anagrams_in_a_String \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,92 +0,0 @@ -### 438. Find All Anagrams in a String - - -题目: - - - -难度: - -Easy - - - -思路 - -刚开始打算直接遍历整个s,时间复杂度为O(m*n),m和n分别为字符串p和s的长度,但是超时了 - - - -``` - -class Solution(object): # 此法超时 -    def findAnagrams(self, s, p): - """ - :type s: str - :type p: str - :rtype: List[int] - """ - l, res = len(p), [] - for i in range(len(s)): - if collections.Counter(s[i:i+l]) == collections.Counter(p): - res.append(i) - return res -``` - -于是用双指针,left和right都从0开始往后遍历 -``` -class Solution(object): - def findAnagrams(self, s, p): - """ - :type s: str - :type p: str - :rtype: List[int] - """ - res, cnts = [], [0] * 26 - for c in p: - cnts[ord(c) - ord('a')] += 1 - left, right = 0, 0 - while right < len(s): - cnts[ord(s[right]) - ord('a')] -= 1 - while left <= right and cnts[ord(s[right]) - ord('a')] < 0: - cnts[ord(s[left]) - ord('a')] += 1 - left += 1 - if right - left + 1 == len(p): - res.append(left) - right += 1 - return res -``` -模板大法好 -```python -class Solution(object): - def findAnagrams(self, s, p): - """ - :type s: str - :type p: str - :rtype: List[int] - """ - res = [] - if len(p) > len(s): - return res - maps = collections.Counter(p) - counter = len(maps.keys()) - begin, end, head, length = 0, 0, 0, sys.maxint - while end < len(s): - if s[end] in maps: - maps[s[end]] -= 1 - if maps[s[end]] == 0: - counter -= 1 - end += 1 - while counter == 0: - if s[begin] in maps: - maps[s[begin]] += 1 - if maps[s[begin]] > 0: - counter += 1 - if end - begin == len(p): - res.append(begin) - begin += 1 - return res -``` - - - diff --git "a/docs/Leetcode_Solutions/C++/439. Ternary Expression Parser \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/439. Ternary Expression Parser \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 065f56cd7..000000000 --- "a/docs/Leetcode_Solutions/C++/439. Ternary Expression Parser \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,58 +0,0 @@ -### 439. Ternary Expression Parser - - - - - -题目: - - - - -难度: -Medium - -思路: - -其实这个和算术运算蛮像,但是不同于运算,有operator precedence差别,这个是三目运算,并且需要检查是否符合运算规则。 - - - -运用stack 然后每次查看是否形成运算式再来做处理 - -AC代码: - -``` -class Solution(object): - def parseTernary(self, expression): - """ - :type expression: str - :rtype: str - """ - n = len(expression) - - stack = [] - - for i in range(n-1, -1, -1): - char = expression[i] - stack.append(char) - - if len(stack) >= 5: - op0 = stack.pop() - op1 = stack.pop() - op2 = stack.pop() - op3 = stack.pop() - op4 = stack.pop() - - if op1 == '?' and op3 == ':': - res = op2 if op0 == 'T' else op4 - stack.append(res) - else: - stack.append(op4) - stack.append(op3) - stack.append(op2) - stack.append(op1) - stack.append(op0) - return stack[0] -``` - diff --git "a/docs/Leetcode_Solutions/C++/441._arranging_coins \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/441._arranging_coins \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 5ef0dae95..000000000 --- "a/docs/Leetcode_Solutions/C++/441._arranging_coins \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,29 +0,0 @@ -###441. Arranging Coins - -题目: - - - -难度: -Easy - - -可以直接O(1),公式: - -i(i+1)/2 = n - -解i - -i = ( sqrt(8*n+1) -1 )/ 2 - - -``` -import math -class Solution(object): - def arrangeCoins(self, n): - """ - :type n: int - :rtype: int - """ - return int((math.sqrt( 8 * n + 1) - 1 )/ 2 ) -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/448._Find_All_Numbers_Disappeared_in_an_Array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/448._Find_All_Numbers_Disappeared_in_an_Array \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b03105e6b..000000000 --- "a/docs/Leetcode_Solutions/C++/448._Find_All_Numbers_Disappeared_in_an_Array \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,25 +0,0 @@ -### 448. Find All Numbers Disappeared in an Array - -题目: - - - -难度: - -Easy - - - - - -```python -class Solution(object): - def findDisappearedNumbers(self, nums): - """ - :type nums: List[int] - :rtype: List[int] - """ - return list(set(range(1, len(nums)+1)) - set(nums)) -``` - - diff --git "a/docs/Leetcode_Solutions/C++/450. Delete Node in a BST \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/450. Delete Node in a BST \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 3f622c90a..000000000 --- "a/docs/Leetcode_Solutions/C++/450. Delete Node in a BST \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,62 +0,0 @@ -### 450. Delete Node in a BST - - - -题目: - - -难度 : Medium - - - -思路: - -从二叉搜索树中删除节点x的方法如下: - -• 如果x没有子节点,或者只有一个孩子,直接将x“切下”; - -• 否则,x有两个孩子,我们用其右子树中的最小值替换掉x,然后将右子树中的这一最小值递归的“切掉”。 -​ - - - -AC代码 - - - -```python -class Solution(object): - def deleteNode(self, root, key): - """ - :type root: TreeNode - :type key: int - :rtype: TreeNode - """ - def findmin(root): - while root.left: - root = root.left - return root - - - if not root : return None - elif key < root.val: root.left = self.deleteNode(root.left, key) - elif key > root.val : root.right = self.deleteNode(root.right, key) - else: - if root.left and root.right: - tmp = findmin(root.right) - root.val = tmp.val - root.right = self.deleteNode(root.right, tmp.val) - else: - if not root.left: - root = root.right - elif not root.right: - root = root.left - return root -``` - -​ - - - -其实这个代码还是需要花点时间来理解,需要画个图,理解这个root是每个stack return回去然后被接在原来的树上的,if 这个node并不是在node左右。 - diff --git "a/docs/Leetcode_Solutions/C++/453._Minimum_Moves_to_Equal_Array_Elements \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/453._Minimum_Moves_to_Equal_Array_Elements \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 2e9668086..000000000 --- "a/docs/Leetcode_Solutions/C++/453._Minimum_Moves_to_Equal_Array_Elements \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,72 +0,0 @@ -### 453. Minimum Moves to Equal Array Elements - - - - - -题目: - - - - -难度 : Easy - - - -思路: - -naive TLE 代码: - -每次都是给并不是最大的元素加1直到全部相等。 - -``` -class Solution(object): - def minMoves(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - res = 0 - while(not all(x == nums[0] for x in nums)): - nums.sort() - for i in range(len(nums) - 1): - nums[i] += 1 - res += 1 - - return res -``` - - - -给的测试例子是 `[1,2147483647]`能不TLE么?tag 是Math,所以要用观察到的结果来做吧? - -所以就是每个和最小值来比,看到底要增加多少,这是观察,但不是证明 - - - - - -AC代码 - -```python -class Solution(object): - def minMoves(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - res = 0 - minVal = min(nums) - for num in nums: - res += num -minVal - return res -``` - - - -类证明: - - - -> 其实给n-1个数字加1,效果等同于给那个未被选中的数字减1,比如数组[1,2,3], 给除去最大值的其他数字加1,变为[2,3,3],我们全体减1,并不影响数字间相对差异,变为[1,2,2],这个结果其实就是原始数组的最大值3自减1,那么问题也可能转化为,将所有数字都减小到最小值,这样难度就大大降低了,我们只要先找到最小值,然后累加每个数跟最小值之间的差值即可 - diff --git "a/docs/Leetcode_Solutions/C++/459._Repeated_Substring_Pattern \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/459._Repeated_Substring_Pattern \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index f32b6eb4b..000000000 --- "a/docs/Leetcode_Solutions/C++/459._Repeated_Substring_Pattern \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,31 +0,0 @@ -### 459. Repeated Substring Pattern - - -题目: - - - -难度: - -Easy - - -思路 - -- 如果存在这样的子串,那么子串的第一个字符和最后一个字符肯定跟父字符串```s```的相同。 -- 因此构建一个新字符串```s*2```(两个父字符串相加),去掉首尾字符 -- 如果此时能在其中找到```s```,说明存在这样的子串 - - - - -```python -class Solution(object): - def repeatedSubstringPattern(self, s): - """ - :type s: str - :rtype: bool - """ - return (s*2)[1:-1].find(s) != -1 -``` - diff --git "a/docs/Leetcode_Solutions/C++/461._Hamming Distance \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/461._Hamming Distance \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 4a8d63d81..000000000 --- "a/docs/Leetcode_Solutions/C++/461._Hamming Distance \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,66 +0,0 @@ -### 461. Hamming Distance - - - -题目: - For binary strings *a* and *b* the Hamming distance is equal to the number of ones ([Hamming weight](https://en.wikipedia.org/wiki/Hamming_weight)) in *a* [XOR](https://en.wikipedia.org/wiki/Exclusive_or) *b*. -> -> - - - -一行无敌 -```python -class Solution(object): - def hammingDistance(self, x, y): - """ - :type x: int - :type y: int - :rtype: int - """ - return bin(x^y).count('1') -``` -AC代码 - -```python -class Solution(object): - def hammingDistance(self, x, y): - """ - :type x: int - :type y: int - :rtype: int - """ - dist = 0 - val = x ^ y - - while val: - dist += 1 - val &= val - 1 - - return dist -``` - - - - - diff --git "a/docs/Leetcode_Solutions/C++/463._Island_Perimeter \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/463._Island_Perimeter \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index bedc5f8a1..000000000 --- "a/docs/Leetcode_Solutions/C++/463._Island_Perimeter \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,38 +0,0 @@ -### 463. Island Perimeter - - - -题目: - - - -难度: -Easy - -思路: - - - - -```python -class Solution(object): - def islandPerimeter(self, grid): - """ - :type grid: List[List[int]] - :rtype: int - """ - # 每一个陆地单元格的周长为4,当两单元格上下或者左右相邻时,令周长减2 - h = len(grid) - w = len(grid[0]) if h else 0 - ans = 0 - for x in range(h): - for y in range(w): - if grid[x][y] == 1: - ans += 4 - # 因为x+1还在后面,所以不需要考虑,即只需要考虑左边和上边,因为循环已经出现过该点了 - if x > 0 and grid[x - 1][y]: - ans -= 2 - if y > 0 and grid[x][y - 1]: - ans -= 2 - return ans -``` diff --git "a/docs/Leetcode_Solutions/C++/467._Unique_Substrings_in_Wraparound_String \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/467._Unique_Substrings_in_Wraparound_String \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 85c7a9d97..000000000 --- "a/docs/Leetcode_Solutions/C++/467._Unique_Substrings_in_Wraparound_String \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,42 +0,0 @@ -### 467. Unique Substrings in Wraparound String - -题目: - - - -难度: - -Medium - - -思路: - -有个无限长的字符串s,是由无数个「abcdefghijklmnopqrstuvwxyz」组成的。现在给你一个字符串p,求多少个p的非空子串在s中出现了? -   - -先考虑s的特性,满足条件(在s中)的p的子串只可能是abcd……z的连续序列(z后面是a), 我们只需要处理p中连续的部分就可以了。但是 举个例子,h-k的序列出现了,a-z的序列也出现了,那么只需要计算a-z的子串个数就可以了,因为h-k已经包含在a-z里了。考虑所有包含的情况,似乎就变得复杂了,a-z还可能被包含在x-za-z中,甚至更长的序列中。 - -  但是如果考虑以某个字母结尾的子串个数,那么p中以该字母结尾的连续序列长度,就是满足条件的子串个数。如果以字母x结尾的连续序列有多个, 我们只需要最长的一个即可,因为其他短的序列都已经被长的包含进去了,例如'bcd'和'abcd',有了'abcd'就知道以d结尾的子串有4个,分别是‘d’,'cd','bcd','abcd',‘bcd’已经被包含进去了。最后求和,问题就解决了。 这样思考就非常简单了,代码也可以很容易写出来。 - - - -```python -class Solution(object): - def findSubstringInWraproundString(self, p): - """ - :type p: str - :rtype: int - """ -        letters = [0] * 26         #开始默认每个都是0 -        length = 0 - for i in range(len(p)): - curr = ord(p[i]) - ord('a') -            if i > 0 and ord(p[i-1]) != (curr-1)%26 + ord('a'):   #一旦开始不相等了就要将length重置为0 -                length = 0 -            length += 1     #否则就说明继续与前面一个字符是连续的,length要加1才行 -            if length > letters[curr]:     #length一直加,如果到i这个字符length比它的目前的最大连续子串长度还要长,那么肯定要更新letters -                letters[curr] = length - return sum(letters) -``` - - diff --git "a/docs/Leetcode_Solutions/C++/469. Convex Polygon \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/469. Convex Polygon \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 2afb7d070..000000000 --- "a/docs/Leetcode_Solutions/C++/469. Convex Polygon \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,88 +0,0 @@ -### 469. Convex Polygon - - - -题目: - You can make things a lot easier than the Gift-Wrapping Algorithm... that's a good answer when you have a set of points w/o any particular boundary and need to find the convex hull. -> -> A polygon is a set of points in a list where the consecutive points form the boundary. It is much easier to figure out whether a polygon is convex or not (and you don't have to calculate any angles, either): -> -> -> -> For each consecutive pair of edges of the polygon (each triplet of points), compute the z-component of the cross product of the vectors defined by the edges pointing towards the points in increasing order. Take the cross product of these vectors: -> -> The polygon is convex if the z-components of the cross products are either all positive or all negative. Otherwise the polygon is nonconvex. -> -> given p[k], p[k+1], p[k+2] each with coordinates x, y: -> ->  dx1 = x[k+1]-x[k] -> ->  dy1 = y[k+1]-y[k] -> ->  dx2 = x[k+2]-x[k+1] -> ->  dy2 = y[k+2]-y[k+1] -> ->  zcrossproduct = dx1 * dy2 - dy1 * dx2 -> -> If there are N points, make sure you calculate N cross products, e.g. be sure to use the triplets (p[N-2],p[N-1],p[0]) and (p[N-1],p[0],p[1]). - - - -所以根据这个答案AC代码 - -``` -class Solution(object): - def isConvex(self, points): - """ - :type points: List[List[int]] - :rtype: bool - """ - n = len(points) - zcrossproduct = None - - for i in range(-2, n-2): - x = [ points[i][0], points[i+1][0], points[i+2][0] ] - y = [ points[i][1], points[i+1][1], points[i+2][1] ] - - dx1 = x[1] - x[0] - dy1 = y[1] - y[0] - - dx2 = x[2] - x[1] - dy2 = y[2] - y[1] - - if not zcrossproduct: - zcrossproduct = dx1 * dy2 - dy1 * dx2 - elif ( dx1 * dy2 - dy1 * dx2 ) * zcrossproduct < 0: - return False - return True -``` - diff --git "a/docs/Leetcode_Solutions/C++/476._Number_Complement \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/476._Number_Complement \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 91b253972..000000000 --- "a/docs/Leetcode_Solutions/C++/476._Number_Complement \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,28 +0,0 @@ -### 476. Number Complement - - - -题目: - - - -难度: -Easy - - - - - -```python -class Solution(object): - def findComplement(self, num): - """ - :type num: int - :rtype: int - """ - i = 1 << (len(bin(num)) -2) # 因为bin函数转化成的格式是‘0bXXXX’,头两个‘0b’要减掉去 - return (i - 1) ^ num - # return (i - 1) - num # 这样也可以 -``` - - diff --git "a/docs/Leetcode_Solutions/C++/477._Total_Hamming_Distance \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/477._Total_Hamming_Distance \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index cf5bc54a7..000000000 --- "a/docs/Leetcode_Solutions/C++/477._Total_Hamming_Distance \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,82 +0,0 @@ -### 477. Total Hamming Distance - - - -题目: - - - -难度: -Medium - -思路: - - -第一想法就是暴力,直接超时 - -``` -class Solution(object): # 此法超时 - def totalHammingDistance(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - res = 0 - for i in range(len(nums)): - for j in range(i+1, len(nums)): - res += bin(nums[i]^nums[j]).count('1') - return res -``` - - -前面的解法是```O(n^2)```所以超时,所以我们想想有没有```O(n)```的解法 -对于所有的数字,我们先从右数第一位开始算,如果一共有```n```个数字,其中```k```个数字的右数第一位是```‘1’```,其他```n-k```个数字的右数第一位是```‘0’```, -所以这一位对最终```res```的贡献就是```k*(n-k)```,这样我们的时间复杂度就是```O(32n)```,也就是```O(N)```了 - -``` -for each “column” or bit position, once you count the number of set bits you can figure out the number of pairs -that will contribute to the count using combination logic. - -Consider you have 10 numbers and only one of them is a 1 the rest are zeros. How many (1, 0) pairs can you make? -Clearly you can make 9, pair the 1 with each of the other 9 zeros. If you have 2 ones, -you can pair each of those with the other 8 zeros giving 2*8 = 16. -Keep going and you see that you can pair each 1 with each zero so the number of pairs is just the number of 1’s times the number of 0’s. - -This would be an O(32 * n) solution which is an O(n) solution, no space used. -``` - -AC代码 - -```python -class Solution(object): - def totalHammingDistance(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - # iterate thru "column" or bit position - # Note: you could stop at 10^9 as stated in the problem if you want to optimize - res = 0 - for i in range(32): - mask = 1 << i - count_ones, count_zeros = 0, 0 - for num in nums: - if num & mask != 0: - count_ones += 1 - else: - count_zeros += 1 - res += count_ones * count_zeros - return res -``` - -上面的代码简化一下就是[stefan大神(老流氓罒ω罒)](https://leetcode.com/problems/total-hamming-distance/discuss/96229)的无敌一行了 - -```python -class Solution(object): # 此法超时 - def totalHammingDistance(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - return sum(b.count('0') * b.count('1') for b in zip(*map('{:032b}'.format, nums))) -``` diff --git "a/docs/Leetcode_Solutions/C++/485._Max_Consecutive_Ones \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/485._Max_Consecutive_Ones \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 422a70c92..000000000 --- "a/docs/Leetcode_Solutions/C++/485._Max_Consecutive_Ones \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,40 +0,0 @@ -### 485. Max Consecutive Ones - - - -题目: - - - -难度: -Easy - -思路: - - -一行无敌 -```python -class Solution(object): - def findMaxConsecutiveOnes(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - return len(max(''.join(map(str, nums)).split('0'))) -``` - -```python -class Solution(object): - def findMaxConsecutiveOnes(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - res, count = [], 0 - for x in nums: - count = 0 if x == 0 else count + 1 - res.append(count) - return max(res) -``` - - diff --git "a/docs/Leetcode_Solutions/C++/587._Erect_the_Fence \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/587._Erect_the_Fence \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index f61d75b3c..000000000 --- "a/docs/Leetcode_Solutions/C++/587._Erect_the_Fence \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,133 +0,0 @@ - - -### 587. Erect the Fence - - -题目: - - - -难度: - -Hard - - - -思路 - -题目要求用一个围栏把所有的点(🌲)围起来,然后求处于围栏上点(🌲)的集合。 - -我们可以发现,从最左边的那个点一直往右走,只要一直都是走的逆时针方向,那么我们一定可以找到这条围栏。那么接下来就考虑最简单的情况, - -- 只有两个点```p```和```q```,我们从```p```走到```q```,当```p```到原点这条直线的斜率小于```q```到原点这条直线的斜率时,```p->q```就是沿逆时针方向走的; -- 接下来考虑3个点:```p,q,r```,以```p```为参照点(即前面的原点),那么从```q```走到```r```的时候,只要```q```到```q```这条直线的斜率小于```r```到```p```这条直线的斜率,```q->r```就是沿逆时针方向走的。 - -因此,我们只要构建一个```orientation```函数,就可以判断出目前我们的围栏是不是沿着逆时针在走下去了。 - -我们用一个```stack```来存放目前认为在围栏上的点的集合,然后把所有的点按照指定规则排好序:```先按照点的x坐标升序排列,如果x相等则按照点的y坐标升序排列```。这样我们依次取点,只要```stack```里面的点大于等于```2```个我们就要无限进行判断是否走的是逆时针,如果不是就把```stack```里面最后那个点```pop```出去(可能一直```pop```到只剩一个点),否则就把目前的这个点加入到```stack```中去,因为目前它还是在逆时针方向上的。 - -从左往右走完一遍```points```之后,我们围栏的下部分```lower hull```就构建好了,此时我们还要构建围栏的```upper hull```,因此我们将```points```逆序一下,从右往左再来一次遍历,仍然看是否走的是逆时针。但是这次遍历我们需要进行一个判断,就是之前放进```stack```的点,此时我们还是会经过它,如果它已经在```stack```里面了,我们就不需要再加进去了,同时这样也避免了我们把最左边的点重复加进去。 - - - -```python -python -# import functools -class Solution: - def outerTrees(self, points): - """ - :type points: List[Point] - :rtype: List[Point] - """ - def orientation(p, q, r): - return (q.y - p.y)*(r.x - p.x) - (r.y - p.y)*(q.x - p.x) - # def myComparator(p,q): - # return p.x - q.x if p.x != q.x else p.y - q.y - stack= [] - # points.sort(key = functools.cmp_to_key(myComparator)) - points.sort(key = lambda p: (p.x, p.y)) - for i in range(len(points)): - while (len(stack) >= 2 and orientation(stack[-2],stack[-1],points[i]) > 0): - stack.pop() - stack.append(points[i]) - points.reverse(); - for i in range(len(points)): - while (len(stack) >= 2 and orientation(stack[-2],stack[-1],points[i]) > 0): - stack.pop() - if points[i] not in stack: - stack.append(points[i]) - return stack -``` -简化python版本 -```python -class Solution(object): - def outerTrees(self, points): - """ - :type points: List[Point] - :rtype: List[Point] - """ - def orientation(p, q, r): - return (q.y - p.y) * (r.x - q.x) - \ - (q.x - p.x) * (r.y - q.y) - - hull = [] - points.sort(key=lambda p: (p.x, p.y)) - - for i in itertools.chain(xrange(len(points)), \ - reversed(xrange(len(points)))): - while len(hull) >= 2 and \ - orientation(hull[-2], hull[-1], points[i]) > 0: - hull.pop() - hull.append(points[i]) - - return list(set(hull)) -``` - -下面是小傅大神的代码,本来想叫‘’傅神‘’的,结果这名字🤦‍♂️(手动捂脸)[小傅每日一题587](https://www.bilibili.com/video/av15446980/) - -另外其中的```stack.pop()```这行代码注释掉也是可以的 - -```java -java -class Solution { - public List outerTrees(Point[] points) { - List res = new ArrayList(); - Arrays.sort(points, new Comparator(){ - @Override - public int compare(Point p, Point q){ - return p.x == q.x ? p.y - q.y : p.x - q.x; - } - }); - Stack stack = new Stack<>(); - for (int i = 0; i < points.length; i++){ - while(stack.size() >= 2 && orientation(stack.get(stack.size() - 2), stack.peek(), points[i]) > 0){ - stack.pop(); - } - stack.push(points[i]); - } - //stack.pop(); - for (int i = points.length - 1; i >= 0; i--){ - while(stack.size() >= 2 && orientation(stack.get(stack.size() - 2), stack.peek(), points[i]) > 0){ - stack.pop(); - } - stack.push(points[i]); - } - res.addAll(new HashSet<>(stack)); - return res; - } - - public int orientation(Point p, Point q, Point r){ - return (q.y - p.y)*(r.x - p.x) - (r.y - p.y)*(q.x - p.x); - } -} -``` - - - - - -Author: Keqi Huang - -If you like it, please spread your support - -![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) diff --git "a/docs/Leetcode_Solutions/C++/599._Minimum_Index_Sum_of_Two_Lists \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/599._Minimum_Index_Sum_of_Two_Lists \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 1682fab62..000000000 --- "a/docs/Leetcode_Solutions/C++/599._Minimum_Index_Sum_of_Two_Lists \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,58 +0,0 @@ -### 599. Minimum Index Sum of Two Lists - - -题目: - - - -难度: - -Easy - - - -思路 - -两个list,我们首先要取得它们相同的部分,并且之后我们还要知道哪个相同的字符串在两个list中的index之和是最小的。 -- 所以我们首先遍历list1,只要目前这个字符串在list2中,我们就以[字符串,index之和]的形式将其存放到ress中,同时维护一个index保持为最小index之和的值 -- 对于ress,我们遍历,只要某一项的index之和等于最小index之和我们就将他的字符串以i[0]的形式append到res中去, -- return res - -### 程序变量解释 - -- ress format: [[string1, sumOfIndex1], [string2, sumOfIndex2]... ] -- index 最小sunOfIndex值 -- res 最终结果,foramt: [string1, string2,. ...] - - - - -```python -python -class Solution: - def findRestaurant(self, list1, list2): - """ - :type list1: List[str] - :type list2: List[str] - :rtype: List[str] - """ - ress = [] - index = 2000 - for i in list1: - if i in list2: - ress.append([i, list1.index(i)+list2.index(i)]) - index = min(index, list1.index(i)+list2.index(i)) - res = [] - for i in ress: - if i[1] == index: - res.append(i[0]) - return res -``` - - - -Author: Keqi Huang - -If you like it, please spread your support - -![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) diff --git "a/docs/Leetcode_Solutions/C++/647._Palindromic_Substrings \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/647._Palindromic_Substrings \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 8ee312ad5..000000000 --- "a/docs/Leetcode_Solutions/C++/647._Palindromic_Substrings \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,89 +0,0 @@ -### 647. Palindromic Substrings - -题目: - - - -难度: - -Medium - - -思路 - -这道题要求给定一个字符串中的所有回文子串的个数,所以我想到了Manacher算法, -[Manacher算法](https://www.felix021.com/blog/read.php?2040) - -Manacher算法增加两个辅助变量id和mx,其中id表示最大回文子串中心的位置,mx则为id+P[id],也就是最大回文子串的边界。得到一个很重要的结论: - -- 如果mx > i,那么P[i] >= Min(P[2 * id - i], mx - i) . 为什么这样说呢,下面解释 - -下面,令j = 2*id - i,也就是说j是i关于id的对称点。 - -- 当 mx - i > P[j] 的时候,以S[j]为中心的回文子串包含在以S[id]为中心的回文子串中,由于i和j对称,以S[i]为中心的回文子串必然包含在以S[id]为中心的回文子串中,所以必有P[i] = P[j]; -![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher1.png) - -- 当 P[j] >= mx - i 的时候,以S[j]为中心的回文子串不一定完全包含于以S[id]为中心的回文子串中,但是基于对称性可知,下图中两个绿框所包围的部分是相同的,也就是说以S[i]为中心的回文子串,其向右至少会扩张到mx的位置,也就是说 P[i] >= mx - i。至于mx之后的部分是否对称,再具体匹配。 -![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher2.png) -所以P[i] >= Min(P[2 * id - i], mx - i),因为以j为中心的绘回文子串的左边界可能会比mx关于id的对称点要大,此时只能证明P[i]=P[2 * id - i] -- 此外,对于 mx <= i 的情况,因为无法对 P[i]做更多的假设,只能让P[i] = 1,然后再去匹配。 -此题还可以借鉴我leetcode第5题的解析, -[thining-in-lc-5](https://github.com/Lisanaaa/thinking_in_lc/blob/master/005._longest_palindromic_substring.md) - -这道题的基本思想是将以每一个字符为中心的回文子串个数相加,还是用一个小例子来解释 -![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher3.jpg) -其实,以‘#’为中心的回文子串就代表这个子串的长度是偶数,类似于'abba'这种 -但是其实这个字符本身也是一个回文子串,所以叠加的形式是count += (P[i]+1)/2,为什么呢,以下是解释: -- 对于每一个以字符‘#’为中心的回文子串,其P值绝对是偶数,所以```(P[i]+1)/2 = P[i]/2```,并不影响 -- 对于每一个以非字符‘#’为中心的回文子串,其P值绝对是奇数,这就保证了单个字母的回文子串(```例如'a'也算一个回文子串```)也被加起来了,因为```(P[i]+1)/2 = P[i]/2+1``` - - -```python -class Solution(object): - def countSubstrings(self, s): - """ - :type s: str - :rtype: str - """ - def preProcess(s): - if not s: - return ['^', '$'] - T = ['^'] - for c in s: - T += ['#', c] - T += ['#', '$'] - return T - T = preProcess(s) - P = [0] * len(T) - id, mx, count = 0, 0, 0 - for i in range(1,len(T) - 1): - j = 2*id - i - if mx > i: - P[i] = min(mx - i, P[j]) - else: - P[i] = 0 - while T[i+P[i]+1] == T[i-P[i]-1]: - P[i] += 1 - if (i + P[i]) > mx: - id, mx = i, i + P[i] - for i in range(len(P)): - count += (P[i]+1)/2 - return count -``` -python无敌啊!!!有没有天理啊,手动滑稽😏😏😏😏!一行解法: -```python -class Solution(object): - def countSubstrings(self, s): - """ - :type s: str - :rtype: int - """ - return sum(len(os.path.commonprefix((s[:i][::-1], s[i:]))) - + len(os.path.commonprefix((s[:i][::-1], s[i + 1:]))) + 1 - for i in range(len(s))) -``` -解释下为啥要加两次,因为回文串有以下两种形式: -- ‘abcba’ -- 'abba' - -那为啥要加那个1呢,上面解释过了,单个字符也算是一个回文子串呀,嘻嘻😁 diff --git "a/docs/Leetcode_Solutions/C++/657._Judge_Route_Circle \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/657._Judge_Route_Circle \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 12827f576..000000000 --- "a/docs/Leetcode_Solutions/C++/657._Judge_Route_Circle \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,23 +0,0 @@ -### 657. Judge Route Circle -题目: - - - -难度: - -Easy - - - - -```python -class Solution(object): - def judgeCircle(self, moves): - """ - :type moves: str - :rtype: bool - """ - return moves.count('D') == moves.count('U') and moves.count('R') == moves.count('L') -``` - - diff --git "a/docs/Leetcode_Solutions/C++/665._Non-decreasing_Array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/665._Non-decreasing_Array \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index cf05d3c9e..000000000 --- "a/docs/Leetcode_Solutions/C++/665._Non-decreasing_Array \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,48 +0,0 @@ -### 665. Non-decreasing Array - -题目: - - - -难度: - -Easy - - -思路 - -从index=1的元素依次检查,只要不符合规则则让count+1,如果count>1则肯定不符合返回False -但是我们在发现nums[i]小于nums[i-1]的时候,我们就必须要对原数组作出改变了,来让它的后面index部分尽可能满足条件 -下面就是两种情况: -- 2,4,2,6 - -如果是这种情况,当index=2时,不满足条件,但是i=0的元素是小于i=2处元素的,我们需要改变的是i-1处的元素,也就是将4改变成i=2处元素即2,最终变成2,2,2,6 - -- 3,4,2,6 - -这种情况如果我们将4变成2那么仍然是不满足条件的,此时我们需要将2变成4,即将i处元素变为i-1处元素 - -在每一次不符合条件的时候我们都检查一下count,如果count大于1的话我们就返回False,否则最终就返回True - -```python -class Solution(object): - def checkPossibility(self, nums): - """ - :type nums: List[int] - :rtype: bool - """ - count = 0 - for i in range(1,len(nums)): - if nums[i] < nums[i-1]: - count += 1 - if count > 1: - return False - if i - 2 < 0 or nums[i-2] <= nums[i]: - nums[i-1] = nums[i] - else: - nums[i] = nums[i-1] - return True -``` - - - diff --git "a/docs/Leetcode_Solutions/C++/672._Bulb_Switcher_II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/672._Bulb_Switcher_II \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 2441178f4..000000000 --- "a/docs/Leetcode_Solutions/C++/672._Bulb_Switcher_II \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,74 +0,0 @@ -### 672. Bulb Switcher II - -题目: - - - -难度: - -Medium - - -思路 - -这道题又是一个数学题。找规律呀找规律。 -我们只需要考虑当 n<=2 and m < 3 的特殊情形。因为当 n >2 and m >=3, 结果肯定是 8. -The four buttons: - -- Flip all the lights. -- Flip lights with even numbers. -- Flip lights with odd numbers. -- Flip lights with (3k + 1) numbers, k = 0, 1, 2, ... - -如果我们使用了 button 1 和 2, 其效果等同于使用 button 3 。 -类似的.. - -- 1 + 2 --> 3 -- 1 + 3 --> 2 -- 2 + 3 --> 1 - -所以,只有 8 种情形。 - -***灯全亮, 操作1, 操作2, 操作3, 操作4, 操作1+4, 操作2+4, 操作3+4*** - -并且当 n>2 and m>=3 时,我们就能够获得所有的情形。 - -| m\n | 0 | 1 | 2 | 3 | 4 | - --- |----|--- |----|---|---| -| 0 | 1 | 1 | 1 | 1 | 1 | -| 1 | 1 | 2 | 3 | 4 | 4 | -| 2 | 1 | 2 | 4 | 7 | 7 | -| 3 | 1 | 2 | 3 | 8 | 8 | - -```python -class Solution(object): - def flipLights(self, n, m): - """ - :type n: int - :type m: int - :rtype: int - """ - if m * n == 0: return 1 - if n == 1: return 2 - if n == 2: return 4 - (m % 2) - if m == 1: return 4 - if m == 2: return 7 - return 8 -``` - -还有两位大佬的两行解法: -```python -class Solution(object): - def flipLights(self, n, m): - m, n = min(3, m), min(3, n) - return 1 if n * m == 0 else self.flipLights(n - 1, m) + self.flipLights( n - 1, m - 1) -``` -```python -class Solution(object): - def flipLights(self, n, m): - n = min(n, 3) - return min(1< - - -难度: - -Medium - - - -思路 - -题目说输入一个时间,format是HH:MM, 然后输出接下来最近的一个时间,且这个时间的数字必须要在输入的时间中可以找到,所以我们用```h```, ```m``` -分别代表输入时间的小时数和分钟数,然后可以计算出输入时间的总分钟数```curr```,在未来的一天之内,我们一分钟一分钟往下面试,第一个满足的就直接 -作为结果就行了. - - - - -```python -class Solution(object): - def nextClosestTime(self, time): - """ - :type time: str - :rtype: str - """ - h, m = time.split(":") -        curr = int(h) * 60 + int(m) # 这里要注意h可能会是0开头的,如输入的时间为01:22,所以需要int(h)和int(m) -        result = None - for i in xrange(curr+1, curr+1441): - t = i % 1440 - h, m = t // 60, t % 60 - result = "%02d:%02d" % (h, m) - if set(result) <= set(time): - break - return result -``` - - - - - - diff --git "a/docs/Leetcode_Solutions/C++/682._Baseball_Game \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/682._Baseball_Game \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e775cbf8c..000000000 --- "a/docs/Leetcode_Solutions/C++/682._Baseball_Game \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,37 +0,0 @@ -### 682. Baseball Game - -题目: - - - -难度: - -Easy - - -思路 - -points用来存放每一次的分数,最后求和。 - - -```python -class Solution(object): - def calPoints(self, ops): - """ - :type ops: List[str] - :rtype: int - """ - points = [] - for i in ops: - if i == 'C': - points.pop() - elif i == 'D': - points.append(2 * points[-1]) - elif i == '+': - points.append(points[-1] + points[-2]) - else: - points.append(int(i)) - return sum(points) -``` - - diff --git "a/docs/Leetcode_Solutions/C++/687._Longest_Univalue_Path \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/687._Longest_Univalue_Path \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 0b7a2eef5..000000000 --- "a/docs/Leetcode_Solutions/C++/687._Longest_Univalue_Path \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,58 +0,0 @@ -### 687. Longest Univalue Path - - -题目: - - - -难度: - -Easy - - - -思路 - -这道题也只能算个```easy```题目,根据传进来的```root```,我们只要从它的左右节点不停的递归下去,只要其```value```值与```root```一样, -该方向上的```length```就加```1```,最后我们将左右方向上的```length```相加, 递归取最大值 -##### 很重要的一点就是,Note: The length of path between two nodes is represented by the number of edges between them. -- 因此是```self.res = max(self.res, left_arrow + right_arrow)```, ```return max(left_arrow, right_arrow)``` -- 而不是```self.res = max(self.res, left_arrow + right_arrow + 1)```, ```return max(left_arrow + 1, right_arrow + 1)``` - - - - - -```python -# Definition for a binary tree node. -# class TreeNode(object): -# def __init__(self, x): -# self.val = x -# self.left = None -# self.right = None - -class Solution(object): - def longestUnivaluePath(self, root): - """ - :type root: TreeNode - :rtype: int - """ - self.res = 0 - def dir_length(node): - if not node: - return 0 - left_len = dir_length(node.left) # 左节点的length - right_len = dir_length(node.right) # 右节点的length - left_dir, right_dir = 0, 0 - if node.left and node.left.val == node.val: - left_dir = left_len + 1 # 当前节点的左节点方向的length - if node.right and node.right.val == node.val: - right_dir = right_len + 1 # 当前节点的右边节点方向的length - self.res = max(self.res, left_dir + right_dir) - return max(left_dir, right_dir) - dir_length(root) - return self.res -``` - - - diff --git "a/docs/Leetcode_Solutions/C++/740._delete_and_earn \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/740._delete_and_earn \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 3810c4b09..000000000 --- "a/docs/Leetcode_Solutions/C++/740._delete_and_earn \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,29 +0,0 @@ -### 740. Delete and Earn - -题目: - - - -难度: - -Medium - - - - -```python -class Solution(object): - def deleteAndEarn(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - dp = [0] * 10001 - for num in nums: - dp[num] += num - for i in range(2, 10001): - dp[i] = max(dp[i]+dp[i-2], dp[i-1]) - return dp[-1] -``` - - diff --git "a/docs/Leetcode_Solutions/C++/760._Find_Anagram_Mappings \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/760._Find_Anagram_Mappings \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index fe69ce141..000000000 --- "a/docs/Leetcode_Solutions/C++/760._Find_Anagram_Mappings \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,31 +0,0 @@ -### 760. Find Anagram Mappings - -题目: - - - -难度: - -Easy - - - - - -```python -class Solution(object): - def anagramMappings(self, A, B): - """ - :type A: List[int] - :type B: List[int] - :rtype: List[int] - """ - if not A: - return [] - res = [] - for i in A: - res.append(B.index(i)) - return res -``` - - diff --git "a/docs/Leetcode_Solutions/C++/README \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/C++/README \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index c477b8c84..000000000 --- "a/docs/Leetcode_Solutions/C++/README \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1 +0,0 @@ -# Leetcode solutions and summarizations! diff --git "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Binary Search \344\270\215\346\230\223\345\206\231.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Binary Search \344\270\215\346\230\223\345\206\231.md" deleted file mode 100644 index bd65c3c65..000000000 --- "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Binary Search \344\270\215\346\230\223\345\206\231.md" +++ /dev/null @@ -1,91 +0,0 @@ -### Binary Search 不易写 - - - -坊间一直有binary search不容易写对的传言,一写还真是||| - -值得注意的是这里的u位置上的元素搜索是不包括的 - -先献上递归版本伪码: - -``` -function Binary_Search(x, A, l, u) - if u < l then - No found error - else - m ← l + [ ( u - l ) / 2 ] //避免溢出 - if A[m] = x then - return m - if x < A[m] then - return Binary-Search(x, A, l, m - 1) - else - return Binary-Search(x, A, m + 1, u) -``` - - - -迭代版本伪码: - - - -``` -function Binary_Search(x, A, l, u) - while l < u do - m ← l + [ ( u - l ) / 2 ] - if A[m] = x then - return m - if x < A[m] then - u ← m - 1 - else - l ← m + 1 - return NIL - -``` - - - - - -或者这样,正确代码 - -```python -def binarySearch(nums, target): - l, r = 0, len(nums) -1 - while l <= r: - mid = l + ((r-l) >> 2) - if nums[mid] > target: - r = mid - 1 - elif nums[mid] < target: - l = mid + 1 - else: - return mid - return -1 -``` - - - - - -这样就不对 - -``` -def binarySearch(nums, target): - l, r = 0, len(nums) - while l < r: - mid = (l+r) / 2 - if nums[mid] == target: - return mid - elif nums[mid] > target: - r = mid - 1 - else: - l = mid + 1 - return -1 - -print binarySearch([1,2,3,4,5,6],1) -// → -1 -``` - - - -之所以binary Search很容易不对,是因为边界状况,所以觉得一上来应当检查边界状况 - diff --git "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Data Structure and Algorthim Review.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Data Structure and Algorthim Review.md" deleted file mode 100644 index 61c9c7d68..000000000 --- "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Data Structure and Algorthim Review.md" +++ /dev/null @@ -1,101 +0,0 @@ - - -### Data Structure and Algorthim Review - - - -- [x] Binary Search Tree - - - [x] 插入 - - • 如果树为空,创建一个叶子节点,令该节点的key = k; - • 如果k小于根节点的key,将它插入到左子树中; - • 如果k大于根节点的key,将它插入到右子树中。 - - - [x] 遍历 - - • 前序: 根,左,右 - - • 中序:左,根,右 **有序** - - • 后序:左,右,根 - - - [x] 搜索 - - - look up : 是否存在 - - ​• 如果树为空,搜索失败; - ​• 如果根节点的key等于待搜索的值,搜索成功,返回根节点作为结果; - ​• 如果待搜索的值小于根节点的key,继续在左子树中递归搜索; - ​• 否则,待搜索的值大于根节点的key,继续在右子树中递归搜索。 - - - 最大元素和最小元素 - - ​ • 最右和最左 - - - 前驱(Successor)和后继(predecessor) - - ​ 给定元素x,它的后继元素y是满足y > x的最小值 - - ​ • 如果x所在的节点有一个非空的右子树,则右子树中的最小值就是答案 - - ​ • 否则我们需要向上回溯,找到最近的一个祖先,使得该祖先的左侧孩子,也为x的祖 先。 - ​ - - - [x] 删除 - - • 如果x没有子节点,或者只有一个孩子,直接将x“切下”; - - • 否则,x有两个孩子,我们用其右子树中的最小值替换掉x,然后将右子树中的这一最小值“切掉”。 - - - - - - -- [x] 递归 - - [x] 入门 - - - 回文 - - 阶乘 factorial, 慕指数 - - 分形 - - Tower of Hanoi - - - [x] 排列 Permutation - - - [x] 子集 Subsets - - - [ ] backtracking - - -- [x] dynamic programming - - - coin change - - - longest common subsequence - - - edit distance - - ​ - - - - --[ ] majority element - - - -- [ ] 随机 - - 水塘抽样 - - 洗牌 - - --[ ] 荷兰旗问题 - - --[ ] quick select - - --[ ] median of two sorted array --[ ] regular expression - diff --git "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Dynamic Programming.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Dynamic Programming.md" deleted file mode 100644 index 102d032c3..000000000 --- "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Dynamic Programming.md" +++ /dev/null @@ -1,48 +0,0 @@ -### Dynamic Programming - - - -- Fibonacci Numbers -- Shortest Path (no cycles) - - - - - - - -- subproblems - -- guessing - -- relate subproblems - -- recurse & memoize (bulid DP table) - -- solve original problem - - ​ - - - - - - -​ -​ -​ - -感觉DP有几类: - -- 容易写出递推公式的 - -- 画表更容易理解的 - - ​ - -* DP ≈ “controlled brute force” - -* DP ≈ recursion + re-use - - ​ - diff --git "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" deleted file mode 100644 index 110950bf9b2bd29f84cf9ecb7494b50cc39a4531..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117543 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 ZIXEJ|$lM;b2)}r^xG@> 24) & 0xFF); - result[1] = (byte) ((i >> 16) & 0xFF); - result[2] = (byte) ((i >> 8) & 0xFF); - result[3] = (byte) (i & 0xFF); - return result; -} - -//byte数组转换为int类型 -public static int byteArrayToInt(byte[] bytes) { - int value = 0; - // 由高位到低位 - for (int i = 0; i < 4; i++) { - int shift = (4 - 1 - i) * 8; - value += (bytes[i] & 0x000000FF) << shift;// 往高位游 - } - return value; -} -``` - -还有一种为: - -``` -//int类型转换为byte[]数组 -public static byte[] intToByteArray(int x) { - byte[] bb = new byte[4]; - bb[3] = (byte) (x >> 24); - bb[2] = (byte) (x >> 16); - bb[1] = (byte) (x >> 8); - bb[0] = (byte) (x >> 0); - return bb; -} - -//byte数组转换为int类型 -public static int byteArrayToInt(byte[] bb) { - return (int) ((((bb[3] & 0xff) << 24) | ((bb[2] & 0xff) << 16) | ((bb[1] & 0xff) << 8) | ((bb[0] & 0xff) << 0))); -} -``` - -## int转long - -int类型转换为long类型的情况并不是大多,这里主要接收几种转换方法: - -``` -public class IntToLong { - public static void main(String[] args) { - int number = 123111; - long num1 = (long) number;//强制 - long num2 = Long.parseLong(new Integer(number).toString());//先转String再进行转换 - long num3 = Long.valueOf(number); - } -} -``` - -## int转Interger - -int类型转换为Interger类型的情况,我是基本上每怎么遇到过,在这里也上网查询一些资料找到了两种方法。 - -``` -public class IntToInterge { - public static void main(String[] args) { - int number = 123456; - Integer num1 = Integer.valueOf(number); - Integer num2 = new Integer(number); - } -} -``` - ------- - -# byte数组的转换 - -关于byte数组的转换,上面有几个都是它们只见相互转换的,所以这里就不再介绍那么多,只介绍一个byte数组转换String类型的方法,其他的类型可以通过String类型再进行转换。 - -byte数组转String类型的方法经常用的可能就是下面这种方法。 - -``` -public class ByteToString { - public static void main(String[] args) { - byte[] number = "121121".getBytes(); - String num1 = new String(number); - } -} -``` - ------- - -最后简单补充以下Java基本数据类型的一些知识: - -| 类型 | 字节数 | 类名称 | 范围 | -| ------ | ---- | -------- | ---------------------------------------- | -| int | 4字节 | Interger | -2147483648 ~ 2147483647 | -| short | 2字节 | Short | -32768 ~ 32767 | -| long | 8字节 | Long | -9223372036854775808 ~ 9223372036854775807 | -| byte | 1字节 | Byte | -128 ~ 127 | -| float | 4字节 | Float | | -| double | 8字节 | Double | | \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/LinkedList\346\212\200\345\267\247.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/LinkedList\346\212\200\345\267\247.md" deleted file mode 100644 index 677a083a2..000000000 --- "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/LinkedList\346\212\200\345\267\247.md" +++ /dev/null @@ -1,118 +0,0 @@ -# LinkedList - -结点定义如下: - - class ListNode(object): - def __init__(self, x): - self.val = x - self.next = None - - -可以使用的技巧包括: - - -## Dummy head - -有的时候因为边界条件,需要判定是否是list的head,因为处理起来会有些不同,而创造一个dummy head则可以极大的解决一些问题。 - -``` - dummy = ListNode(-1) - dummy.next = head -``` - -## 双指针 - -- 19. Remove Nth Node From End of List - -两个指针p,q, q先走n步,然后p和q一起走,直到q走到结点,删除p.next解决。 - -理解: 先走了n步,q始终在p前方n个,这样q走到末尾,p的下一个则是距离尾端n个的,画个图还是容易理解。 - - -- 160. Intersection of Two Linked Lists - -如果两个linkedlist有intersection的话,可以看到,其实如果一开始我们就走到b2的话,那么我们就可以两个pointer一个一个的对比,到哪一个地址一样,接下来就是intersection部分。 - -就一开始把长的那条list走掉多余部分。 -还有这里保证了是无环的状况 - - - -``` -A: a1 → a2 - ↘ - c1 → c2 → c3 - ↗ -B: b1 → b2 → b3 -``` - - -## 快慢指针 - -- 141. Linked List Cycle - -用两个指针,一个每次走两步,一个每次走一步,如果慢的最终和快的相遇,那么说明有环,否则没有环,直观的理解是如果两个跑的速度不一的人进操场跑步,那么最终慢的会追上快的. - - - -## Reverse Linked List - -- 206. Reverse Linked List - -loop版本用prev, cur ,nxt 三个指针过一遍,recursion版本如下,可以再消化消化 - -``` -class Solution(object): - def reverseList(self, head): - """ - :type head: ListNode - :rtype: ListNode - """ - return self.doReverse(head, None) - - - def doReverse(self, head, newHead): - if head == None: - return newHead - nxt = head.next - head.next = newHead - return self.doReverse(nxt, head) -``` - - -## 寻找LinkedList中间项 - -依旧使用双指针,快慢指针:快指针每次走两步,慢指针每次走一步,快指针如果到头了,那么慢指针也会在中间了,这个中间可以考量,如果是奇数的话必然是中间。 - -如果是偶数则是偏前面的中间一项 - -``` -1 -> 2 -> 3 -> 4: 2 -1 -> 2 -> 3 -> 4 -> 5 -> 6 : 3 -1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 : 4 - -``` - -算法: - -``` - -def findMid(head): - if head == None or head.next == None: - return head - - slow = head - fast = head - - while fast.next and fast.next.next: - slow = slow.next - fast = fast.next.next - - return slow -``` - - - - - - diff --git "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Maximal Square.pdf" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Maximal Square.pdf" deleted file mode 100644 index 235cd3b86547102c2de81ebaedb59cd4f3f40b63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185749 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

    y&B`PeXKeQE9zPYAF!+)Lg=x*9vJS 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 diff --git "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" deleted file mode 100644 index bdd0b3ab5..000000000 --- "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" +++ /dev/null @@ -1,96 +0,0 @@ -# python有无数奇技淫巧和许多人不知道的秘密,这里用简洁的语言一条条表述出来,不断更新, 大家一起贡献! - -# 1. python 排序 -# 用lst.sort() 而不是nlst = sorted(lst), 区别在于lst.sort()是 in-place sort,改变lst, sorted会创建新list,成本比较高。 - -# 2. xrange和range的区别 -# range会产生list存在memory中,xrange更像是生成器,generate on demand所以有的时候xrange会更快 - -# 3. python处理矩阵 -row = len(matrix) -col = len(matrix[0]) if row else 0 -# 这样写通用的原因是, 当matrix = [], row = 0, col = 0 - -# 4. python列表生成式 -lst = [0 for i in range(3)] # lst = [0,0,0] -lst = [[0 for i in range(3)] for j in range(2)] # lst =  [[0, 0, 0], [0, 0, 0]] -# 下面这种写法危险: -# lst1 = [ 0, 0, 0 ] -# lst2  = [lst1] * 2  # lst2 = [ [0,0,0] , [0,0,0] ] -# lst2[0][0] = 1  # lst2 = [ [1,0,0], [1,0,0]] -# 因为lst1是object,改一个相当于全改, 这样写会踩坑 - -# 5. D.get(key, default) -# 如果这个key 没有在dict里面,给它一个默认值: -D = {} -if 1 in D: - val = D[1] -else : - val = 0 -# 等同于这样写: -val = D.get(1, 0) - -# 6. 字典赋值 -if key in D: - D[key].append(1) -else : - D[key] = [] - -# 7. 字符串反转 -# python字符串没有reverse函数,只能str[::-1] -string[::-1] -# python的list可以直接reverse(),因此也可以借用这个特性 -"".join([string].reverse()) - -# 8. 快速统计 -import collections -lst = [1, 1, 1, 2, 3, 4, 5, 5] -collections.Counter(lst) # Counter({1: 3, 5: 2, 2: 1, 3: 1, 4: 1}) - -# 9. python自带小顶堆heapq -# Python有built-in heap, 默认min heap. -heapq.heappush(heap, item) # 把item添加到heap中(heap是一个列表) - -heapq.heappop(heap) # 把堆顶元素弹出,返回的就是堆顶 - -heapq.heappushpop(heap, item) # 先把item加入到堆中,然后再pop,比heappush()再heappop()要快得多 - -heapq.heapreplace(heap, item) # 先pop,然后再把item加入到堆中,比heappop()再heappush()要快得多 - -heapq.heapify(x) # 将列表x进行堆调整,默认的是小顶堆 - -heapq.merge(*iterables) # 将多个列表合并,并进行堆调整,返回的是合并后的列表的迭代器 - -heapq.nlargest(n, iterable, key=None) # 返回最大的n个元素(Top-K问题) - -heapq.nsmallest(n, iterable, key=None) # 返回最小的n个元素(Top-K问题) - -# 如何来用它实现max heap呢,看到过一个有意思的方法是把key取负,比如把100变成-100,5变成-5 - -import heapq -mylist = [1, 2, 3, 4, 5, 10, 9, 8, 7, 6] -largest = heapq.nlargest(3, mylist) # [10, 9, 8] -smallest = heapq.nsmallest(3, mylist) # [1, 2, 3] - -# 10. 双端队列deque [http://stackoverflow.com/questions/4098179/anyone-know-this-python-data-structure] -# 可以很简单的.popleft(), .popright(), .appendleft(), .appendright(),最关键的是时间是O(1), 而用list来模拟队列是O(n)的时间复杂度 -# 还有很好用的rotate函数, -# 一个简单的跑马灯程序 -import sys -import time -from collections import deque - -fancy_loading = deque('>--------------------') - -while True: - print('\r%s' % ''.join(fancy_loading)) - fancy_loading.rotate(1) - sys.stdout.flush() - time.sleep(0.08) - -# 11. 用yield 不用return,可以返回一个generator - -# 12. 符号~的巧妙应用 -for i in range(n): - # 这里的```[~i]``` 意思就是 ```[n-1-i]``` - a[~i] = 1 diff --git "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Range Sum Query 2D - Immutable.pdf" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Range Sum Query 2D - Immutable.pdf" deleted file mode 100644 index 09410e209c3adc3ad41ebbdfdf0de177bb229e9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167781 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 z 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 diff --git "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Recusrion & BackTracking.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Recusrion & BackTracking.md" deleted file mode 100644 index 16e0f9279..000000000 --- "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Recusrion & BackTracking.md" +++ /dev/null @@ -1,237 +0,0 @@ -#Recusrion & BackTracking - -##Recusrion - -### DrawFractal - -``` -void DrawFractal(double x, double y, double w, double h) -{ - DrawTriangel(x, y, w, h); - if(w < .2 || h < .2) return ; - double halfH = h/2; - double halfw = w/2; - DrawFractal(x, y, halfW, halfH); - DrawFractal(x + halfW/2, y + halfH, halfW, halfH); - DrawFractal(x + halfW, y, halfW, halfH); -} -``` - - -Sierpinski triangle更伪码的写法: - -``` -void DrawFractal (x, y, w, h){ - if (too small) return ; - DrawTriangle(x, y, w, h); - DrawFractal(.left); - DrawFractal(.top); - DrawFractal(.right); -} -``` - -实际上老师故意调了里面几句代码的顺序,让来看到虽然结果相同,但是画的过程是不一样的。 - -然后老师还在黑板上画了过程树,分枝是怎样的,实际上当学到DFS的preOrder, inOrder 和 postOrder的时候会更印象深刻。 - -一个分支走完之后再回去走另一些。 - - -### DrawMondrian - - - -``` -void DrawMondrian(double x, double y, double w, double h){ - - if(w < 1 || h < 1) return ;// base case - - FillRectangle(x,y,w,h,RandomColor()); // fill background - - switch(RandomInteger(0, 2)){ - case 0: // do nothing - break; - case 1: // bisect vertically - double midX = RandomReal(0,w); - DrawBlackLine( x + midX, y, h); - DrawMondrian(x, y, midX, h); - DrawMondrian(x + midx, y, w- midX, h); - break; - case 2: // bisect horizontally - double midY = RandomReal(0,h); - DrawBlackLine( x, y+ midY, h); - DrawMondrian(x, y, w, midY); - DrawMondrian(x, y+midY,w, midY); - break; - } -} -``` - - -### The tower of Hanoi - - -``` -void MoveTower(int n, char src, char dst, char tmp){ - if (n > 0){ - MoveTower(n - 1, src, tmp, dst ); - MoveSingleDisk(src, dst); - MoveTower(n -1, tmp, dst, src); - } -} - -``` - - -### Permutation - -老师说permutation 和 subset 是 mother problems of all recursion. - - -given a string, print out its all permutations - -思路如下: - -- 使用了的string sofar,以及还未使用的string rest -- 一开始rest就是给的string本身,然后sofar是空 -- 每次挑一个rest里面的char,然后递归的再把rest剩下的拿来permutation,这样每次都会有一个char从rest shuffle到sofar -- n 次之后 rest为空,制造了一个permutation - - -``` -void RecPermute(string sofar, string rest){ - if(rest = ""){ - cout << soFar << endl; - } else { - for(int i = 0 ; i < rest.length(); i++){ - string next = soFar + rest[i]; - string remaining = rest.substr(0,i) + rest.substr(i+1); - RecPermute(next, remaining); - } - } -} - - -// "wrapper" function -void ListPermutations(string s) -{ - RecPermute("",s); -} -``` - - -老师的黑板图真的是击中要害。 - -因为老师强调的是,也要用mind来trace它是如何操作的。 - - - -### Subsets - - -``` -void RecSubsets(string soFar, string rest) -{ - if(rest = "") - cout << soFar << endl; - else { - // add to subset, remove from rest, recur - RecSubsets(soFar + rest[0],rest.substr(1)); - //don't add to substr, remove from rest, recur - RecSubsets(soFar, rest.substr(1)); - } -} - - -void ListSubsets(string str) -{ - RecSubsets("",str); -} - -``` - -代码非常容易理解 - - -比较一下:两个都是有关选择,permutation是每次选哪一个char,而subsets是选择这个char 是否in. - -两个recursion tree都是有branching 和 depth的, depth都是n,每次选一个,知道n个选完. - -branching是how many recusive calls 每次made,subset每次都是两个,in/out,而permutation则是n,n-1.......grows very quickly. - -因为permutation是n!,subsets是2^n,跟树对应。这些都是比较intractable的问题,并不是因为recursion,而是问题本身的复杂度。 - - -这两个问题都是exhaustive的,然而,我们会更多碰到一些问题,有着 - -similar exhaustive structure,但是遇到'satisfactory' outcome就会stop的 -> 也就是backtracking了. - -##BackTracking - - - -### pseudocode - -把问题转成decision problem,然后开始make choice. - -``` -bool Solve(configuration conf) -{ - if (no more choices) // BASE CASE - return (conf is goal state); - - for (all available choices){ - try one choice c; - // sove from here, it works out. you're done. - if (Solve(conf with choice c made)) return true; - unmake choice c; - } - return false; //tried all choices, no soln found -} -``` - - -###IsAnagram - - -``` -bool IsAnagram(string soFar, string rest, Lexicon & lex) -{ - if(rest == ""){ - if(lex.contains(soFar)){ - cout << soFar << endl; - return true; - } - } else { - for(int i = 0; i < rest.length() ; i++ ){ - string next = soFar + rest[i]; - string remaining = rest.substr(0,i) + rest.substr(i+1); - if(IsAnagram(next, remaining, lex)) return true; - } - } - return false; -} -``` - - -### 8 Queens - - -``` - -bool Solve(Grid &board, int col) -{ - if(col > = board.numCols()) return true; - - for(int rowToTry = 0; rowToTry < board.numRows(); rowToTry++){ - if (IsSafe(board,rowToTry, col)){ - PlaceQueen(board,rowToTry,col); - if (Solve(board,col+1)) return true; - RemoveQueen(board,rowToTry, col); - } - } - return false; -} - -``` - diff --git "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/backtracking\346\200\235\350\267\257.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/backtracking\346\200\235\350\267\257.md" deleted file mode 100644 index dbb7e8cf1..000000000 --- "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/backtracking\346\200\235\350\267\257.md" +++ /dev/null @@ -1,295 +0,0 @@ -## backtracking 全集 - -### 回溯是啥 -用爬山来比喻回溯,好比从山脚下找一条爬上山顶的路,起初有好几条道可走,当选择一条道走到某处时,又有几条岔道可供选择,只能选择其中一条道往前走,若能这样子顺利爬上山顶则罢了,否则走到一条绝路上时,只好返回到最近的一个路口,重新选择另一条没走过的道往前走。如果该路口的所有路都走不通,只得从该路口继续回返。照此规则走下去,要么找到一条到达山顶的路,要么最终试过所有可能的道,无法到达山顶。 -回溯是一种穷举,但与brute force有一些区别,回溯带了两点脑子的,并不多,brute force一点也没带。 -第一点脑子是回溯知道回头;相反如果是brute force,发现走不通立刻跳下山摔死,换第二条命从头换一条路走。 -第二点脑子是回溯知道剪枝;如果有一条岔路上放了一坨屎,那这条路我们不走,就可以少走很多不必要走的路。 - -还有一些爱混淆的概念:递归,回溯,DFS。 -回溯是一种找路方法,搜索的时候走不通就回头换路接着走,直到走通了或者发现此山根本不通。 -DFS是一种开路策略,就是一条道先走到头,再往回走一步换一条路走到头,这也是回溯用到的策略。在树和图上回溯时人们叫它DFS。 -递归是一种行为,回溯和递归如出一辙,都是一言不合就回到来时的路,所以一般回溯用递归实现;当然也可以不用,用栈。 -以下以回溯统称,因为这个词听上去很文雅。 - -### 识别回溯 -判断回溯很简单,拿到一个问题,你感觉如果不穷举一下就没法知道答案,那就可以开始回溯了。 -一般回溯的问题有三种: - -1. Find a path to success 有没有解 -2. Find all paths to success 求所有解 - - 2.1 求所有解的个数, - - 2.2 求所有解的具体信息 -3. Find the best path to success 求最优解 - -理解回溯:给一堆选择, 必须从里面选一个. 选完之后我又有了新的一组选择. ```This procedure is repeated over and over until you reach a final state. If you made a good sequence of choices, your final state is a goal state; if you didn't, it isn't.``` - -回溯可以抽象为一棵树,我们的目标可以是找这个树有没有good leaf,也可以是问有多少个good leaf,也可以是找这些good leaf都在哪,也可以问哪个good leaf最好,分别对应上面所说回溯的问题分类。 -good leaf都在leaf上。good leaf是我们的goal state,leaf node是final state,是解空间的边界。 - -对于第一类问题(问有没有解),基本都是长着个样子的,理解了它,其他类别迎刃而解: -```java -boolean solve(Node n) { - if n is a leaf node { - if the leaf is a goal node, return true - else return false - } else { - for each child c of n { - if solve(c) succeeds, return true - } - return false - } -} -``` -请读以下这段话以加深理解: -```Notice that the algorithm is expressed as a boolean function. This is essential to understanding the algorithm. If solve(n) is true, that means node n is part of a solution--that is, node n is one of the nodes on a path from the root to some goal node. We say that n is solvable. If solve(n) is false, then there is no path that includes n to any goal node.``` - -还不懂的话请通读全文吧:[Backtracking - David Matuszek](https://www.cis.upenn.edu/~matuszek/cit594-2012/Pages/backtracking.html) - -关于回溯的三种问题,模板略有不同, -第一种,返回值是true/false。 -第二种,求个数,设全局counter,返回值是void;求所有解信息,设result,返回值void。 -第三种,设个全局变量best,返回值是void。 - -第一种: -```java -boolean solve(Node n) { - if n is a leaf node { - if the leaf is a goal node, return true - else return false - } else { - for each child c of n { - if solve(c) succeeds, return true - } - return false - } -} -``` -第二种: -```java -void solve(Node n) { - if n is a leaf node { - if the leaf is a goal node, count++, return; - else return - } else { - for each child c of n { - solve(c) - } - } -} -``` -第三种: -```java -void solve(Node n) { - if n is a leaf node { - if the leaf is a goal node, update best result, return; - else return - } else { - for each child c of n { - solve(c) - } - } -} -``` -题目 - -八皇后 N-Queens - -问题 - -1. 给个n,问有没有解; -2. 给个n,有几种解;(Leetcode N-Queens II) -3. 给个n,给出所有解;(Leetcode N-Queens I) - -解答 - -1.有没有解 - -怎么做:一行一行的放queen,每行尝试n个可能,有一个可达,返回true;都不可达,返回false. - -边界条件leaf:放完第n行 或者 该放第n+1行(出界,返回) - -目标条件goal:n行放满且isValid,即目标一定在leaf上 - -helper函数: -boolean solve(int i, int[][] matrix) -在进来的一瞬间,满足property:第i行还没有被放置,前i-1行放置完毕且valid -solve要在给定的matrix上试图给第i行每个位置放queen。 -```java -public static boolean solve1(int i, List matrix, int n) { - if (i == n) { - if (isValid(matrix)) - return true; - return false; - } else { - for (int j = 0; j < n; j++) { - matrix.add(j); - if (isValid(matrix)) { //剪枝 - if (solve1(i + 1, matrix, n)) - return true; - } - matrix.remove(matrix.size() - 1); - } - return false; - } -} -``` -2.求解的个数 - -怎么做:一行一行的放queen,每行尝试n个可能。这回因为要找所有,返回值就没有了意义,用void即可。在搜索时,如果有一个可达,仍要继续尝试;每个子选项都试完了,返回. - -边界条件leaf:放完第n行 或者 该放第n+1行(出界,返回) - -目标条件goal:n行放满且isValid,即目标一定在leaf上 - -helper函数: -void solve(int i, int[][] matrix) -在进来的一瞬间,满足property:第i行还没有被放置,前i-1行放置完毕且valid -solve要在给定的matrix上试图给第i行每个位置放queen。 -这里为了记录解的个数,设置一个全局变量(static)int是比较efficient的做法。 -```java -public static void solve2(int i, List matrix, int n) { - if (i == n) { - if (isValid(matrix)) - count++; - return; - } else { - for (int j = 0; j < n; j++) { - matrix.add(j); - if (isValid(matrix)) { //剪枝 - solve2(i + 1, matrix, n); - } - matrix.remove(matrix.size() - 1); - } - } -} -``` -3.求所有解的具体信息 - -怎么做:一行一行的放queen,每行尝试n个可能。返回值同样用void即可。在搜索时,如果有一个可达,仍要继续尝试;每个子选项都试完了,返回. - -边界条件leaf:放完第n行 或者 该放第n+1行(出界,返回) - -目标条件goal:n行放满且isValid,即目标一定在leaf上 - -helper函数: -void solve(int i, int[][] matrix) -在进来的一瞬间,满足property:第i行还没有被放置,前i-1行放置完毕且valid -solve要在给定的matrix上试图给第i行每个位置放queen。 -这里为了记录解的具体情况,设置一个全局变量(static)集合是比较efficient的做法。 -当然也可以把结果集合作为参数传来传去。 -```java -public static void solve3(int i, List matrix, int n) { - if (i == n) { - if (isValid(matrix)) - result.add(new ArrayList(matrix)); - return; - } else { - for (int j = 0; j < n; j++) { - matrix.add(j); - if (isValid(matrix)) { //剪枝 - solve3(i + 1, matrix, n); - } - matrix.remove(matrix.size() - 1); - } - } -} -``` -优化 - -上面的例子用了省空间的方法。 -由于每行只能放一个,一共n行的话,用一个大小为n的数组,数组的第i个元素表示第i行放在了第几列上。 - -Utility(给一个list判断他的最后一行是否和前面冲突): -```java -public static boolean isValid(List list){ - int row = list.size() - 1; - int col = list.get(row); - for (int i = 0; i <= row - 1; i++) { - int row1 = i; - int col1 = list.get(i); - if (col == col1) - return false; - if (row1 - row == col1 - col) - return false; - if (row1 - row == col - col1) - return false; - } - return true; - -} -``` - -参考[Backtracking回溯法(又称DFS,递归)全解](https://segmentfault.com/a/1190000006121957) -以及 [Python Patterns - Implementing Graphs](https://www.python.org/doc/essays/graphs/) - - - -## 以Generate Parentheses为例,backtrack的题到底该怎么去思考? - - -所谓Backtracking都是这样的思路:在当前局面下,你有若干种选择。那么尝试每一种选择。如果已经发现某种选择肯定不行(因为违反了某些限定条件),就返回;如果某种选择试到最后发现是正确解,就将其加入解集 - -所以你思考递归题时,只要明确三点就行:选择 (Options),限制 (Restraints),结束条件 (Termination)。即“ORT原则”(这个是我自己编的) - - - - -对于这道题,在任何时刻,你都有两种选择: -1. 加左括号。 -2. 加右括号。 - -同时有以下限制: -1. 如果左括号已经用完了,则不能再加左括号了。 -2. 如果已经出现的右括号和左括号一样多,则不能再加右括号了。因为那样的话新加入的右括号一定无法匹配。 - -结束条件是: -左右括号都已经用完。 - -结束后的正确性: -左右括号用完以后,一定是正确解。因为1. 左右括号一样多,2. 每个右括号都一定有与之配对的左括号。因此一旦结束就可以加入解集(有时也可能出现结束以后不一定是正确解的情况,这时要多一步判断)。 - -递归函数传入参数: -限制和结束条件中有“用完”和“一样多”字样,因此你需要知道左右括号的数目。 -当然你还需要知道当前局面sublist和解集res。 - -因此,把上面的思路拼起来就是代码: - - if (左右括号都已用完) { - 加入解集,返回 - } - //否则开始试各种选择 - if (还有左括号可以用) { - 加一个左括号,继续递归 - } - if (右括号小于左括号) { - 加一个右括号,继续递归 - } - - - -你帖的那段代码逻辑中加了一条限制:“3. 是否还有右括号剩余。如有才加右括号”。这是合理的。不过对于这道题,如果满足限制1、2时,3一定自动满足,所以可以不判断3。 - -这题其实是最好的backtracking初学练习之一,因为ORT三者都非常简单明显。你不妨按上述思路再梳理一遍,还有问题的话再说。 - - - -以上文字来自 1point3arces的牛人解答 - - - -Backtracking 伪码 - - -``` -Pick a starting point. -while(Problem is not solved) - For each path from the starting point. - check if selected path is safe, if yes select it - and make recursive call to rest of the problem - If recursive calls returns true, then return true. - else undo the current move and return false. - End For - If none of the move works out, return false, NO SOLUTON. - -``` diff --git "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/delete_node_in_a_linked_list\351\227\256\351\242\230.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/delete_node_in_a_linked_list\351\227\256\351\242\230.md" deleted file mode 100644 index e148bb218..000000000 --- "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/delete_node_in_a_linked_list\351\227\256\351\242\230.md" +++ /dev/null @@ -1,69 +0,0 @@ -##Delete Node in a Linked List问题 - - -This is a LeetCode question, I knew its solution, but wondering about why my code not work. - - ->Write a function to delete a node (except the tail) in a singly linked list, given only access to that node. - ->Supposed the linked list is 1 -> 2 -> 3 -> 4 and you are given the third node with value 3, the linked list should become 1 -> 2 -> 4 after calling your function - - -At first glance, my intution is delete like an array: - -shift all the node values one front, then delete the tail, here's my implementation and test case: - - - - class ListNode(object): - def __init__(self, x): - self.val = x - self.next = None - - node1 = ListNode(1) - node2 = ListNode(2) - node3 = ListNode(3) - node4 = ListNode(4) - node5 = ListNode(5) - - node1.next = node2 - node2.next = node3 - node3.next = node4 - node4.next = node5 - - - - def deleteNode(node): - """ - :type node: ListNode - :rtype: void Do not return anything, modify node in-place instead. - """ - while node.next: - node.val = node.next.val - node = node.next - node = None - - - deleteNode(node4) - -But After deletion, it has two 5 value nodes, the tail was still kept, can anyone please explain to me what's wrong here? - - deleteNode(node4) - - node1.val - Out[162]: 1 - - node1.next.val - Out[163]: 2 - - node1.next.next.val - Out[164]: 3 - - node1.next.next.next.val - Out[165]: 5 - - node1.next.next.next.next.val - Out[166]: 5 - - -Really appreciate any help. \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" deleted file mode 100644 index 864326ec7..000000000 --- "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" +++ /dev/null @@ -1,14 +0,0 @@ -# Local Search, 一些新的思路 - -当一个问题我们只关心解法,而不是其达到解的顺序,那么考虑使用local search,比如八皇后问题,我们只关心哪个皇后放哪,根本不关心加入皇后的顺序。 - -local search还能用来解一类问题,求最优。 - - - -> A complete local search algorithm always finds a goal if one exists; an optimal algorithm always finds a global minimum/maximum. - - -一个解八皇后的新思路是我们根本就random来放皇后,然后如果state 合法,就get解答一枚,否则可以Move only to neighboring states,当然,选之剑attack数量最少的state. - -这种方法叫 hill - climbing,很多问题,可能被卡,然后random restart \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/python\347\232\204\345\220\204\347\247\215pass.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/python\347\232\204\345\220\204\347\247\215pass.md" deleted file mode 100644 index c1ac085a8..000000000 --- "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/python\347\232\204\345\220\204\347\247\215pass.md" +++ /dev/null @@ -1,123 +0,0 @@ -#Python的各种Pass - -感觉最近对于pass by reference 和 pass by value又有了一点/一些认识 - - -1. python不允许程序员选择采用传值还是传引用。Python参数传递采用的肯定是“传对象引用”的方式。实际上,这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值——相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象——相当于通过“传值'来传递对象。 -2. 当人们复制列表或字典时,就复制了对象列表的引用同,如果改变引用的值,则修改了原始的参数。 -3. 为了简化内存管理,Python通过引用计数机制实现自动垃圾回收功能,Python中的每个对象都有一个引用计数,用来计数该对象在不同场所分别被引用了多少次。每当引用一次Python对象,相应的引用计数就增1,每当消毁一次Python对象,则相应的引用就减1,只有当引用计数为零时,才真正从内存中删除Python对象。 - - -##### Linked List的例子 - - - -``` -class ListNode(object): - def __init__(self, x): - self.val = x - self.next = None - -node1 = ListNode(1) -node2 = ListNode(2) -node3 = ListNode(3) -node4 = ListNode(4) -node5 = ListNode(5) - -node1.next = node2 -node2.next = node3 -node3.next = node4 -node4.next = node5 - -``` - - - -来改变head - -``` -def testWithPointers1(head): - head.next = None -``` - - - -运行 testWithPointers1(node1) - -然后node1.next 为None了 - -// 可以理解,因为传进去的是head这个可变对象。 - - - -``` -def testWithPointers2(head): - cur = head - cur.next = None -``` - - - -运行 testWithPointers2(node1) -// node1.next 同样为None了 - -Python的object,list都是pass by reference,所以是改变的 - -看另外一个例子: - -``` -def printLinkedList(head): - while head: - print(head) - head = head.next -``` - - -输出 - -``` - printLinkedList(head) - -<__main__.ListNode object at 0x1044c0e10> - -1 - -<__main__.ListNode object at 0x1044c0fd0> - -2 - -<__main__.ListNode object at 0x1044c0c88> - -3 - -<__main__.ListNode object at 0x1044c0be0> - -4 - -<__main__.ListNode object at 0x1044c0780> - -5 - -head - -Out[39]: <__main__.ListNode at 0x1044c0e10> - -``` - -其实这里的head为什么没有改变有点疑惑 - - - -##### String看一下 - - - a = "abc" - - def changeA(s): - s = "" - changeA(a) - - -a 并不会改变,依旧为'abc' - - \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/slide_windows_template.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/slide_windows_template.md" deleted file mode 100644 index 919d1c0f9..000000000 --- "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/slide_windows_template.md" +++ /dev/null @@ -1,185 +0,0 @@ -能用此模板解决的题目目前有如下: -[leetcode 003](https://github.com/Lisanaaa/thinking_in_lc/blob/master/003._longest_substring_without_repeating_characters.md), -[leetcode 030](https://github.com/Lisanaaa/thinking_in_lc/edit/master/30._Substring_with_Concatenation_of_All_Words.md), -[leetcode 076](https://github.com/Lisanaaa/thinking_in_lc/blob/master/076._Minimum_Window_Substring.md), -[leetcode 159](https://github.com/Lisanaaa/thinking_in_lc/blob/master/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md), -[leetcode 438](https://github.com/Lisanaaa/thinking_in_lc/blob/master/438._Find_All_Anagrams_in_a_String.md) - - - -带注释python版本 -```python -class Solution(object): - def slideWindowTemplateByLisanaaa(self, s, t): - """ - :type s: str - :type t: str - :rtype: 具体题目具体分析 - """ - # init a collection or int value to save the result according the question. - res = [] - if len(t) > len(s): - return res - - # create a hashmap to save the Characters of the target substring. - # (K, V) = (Character, Frequence of the Characters) - maps = collections.Counter(t) - - # maintain a counter to check whether match the target string. - # must be the map size, NOT the string size because the char may be duplicate. - counter = len(maps.keys()) - - # Two Pointers: begin - left pointer of the window; end - right pointer of the window - begin, end = 0, 0 - - # the length of the substring which match the target string. - length = sys.maxint - - # loop at the begining of the source string - while end < len(s): - if s[end] in maps: - maps[s[end]] -= 1 # plus or minus one - if maps[s[end]] == 0: - counter -= 1 # modify the counter according the requirement(different condition). - end += 1 - - # increase begin pointer to make it invalid/valid again - while counter == 0: # counter condition. different question may have different condition - if s[begin] in maps: - maps[s[begin]] += 1 # plus or minus one - if maps[s[begin]] > 0: - counter += 1 # modify the counter according the requirement(different condition). - begin += 1 - - ''' - type your code here according to the question - 1. save / update(min/max) the result if find a target - 2. result: collections or int value - ''' - return res -``` - -无注释python版本: -```python -class Solution(object): - def slideWindowTemplateByLisanaaa(self, s, t): - res = [] - if len(t) > len(s): - return res - maps = collections.Counter(t) - counter = len(maps.keys()) - begin, end = 0, 0 - length = sys.maxint - while end < len(s): - if s[end] in maps: - maps[s[end]] -= 1 - if maps[s[end]] == 0: - counter -= 1 - end += 1 - while counter == 0: - if s[begin] in maps: - maps[s[begin]] += 1 - if maps[s[begin]] > 0: - counter += 1 - begin += 1 - - ''' - 1. save / update(min/max) the result if find a target - 2. result: collections or int value - ''' - return res -``` -带注释java版本 -```java -public class Solution { - public List slidingWindowTemplateByHarryChaoyangHe(String s, String t) { - //init a collection or int value to save the result according the question. - List result = new LinkedList<>(); - if(t.length()> s.length()) return result; - - //create a hashmap to save the Characters of the target substring. - //(K, V) = (Character, Frequence of the Characters) - Map map = new HashMap<>(); - for(char c : t.toCharArray()){ - map.put(c, map.getOrDefault(c, 0) + 1); - } - //maintain a counter to check whether match the target string. - int counter = map.size();//must be the map size, NOT the string size because the char may be duplicate. - - //Two Pointers: begin - left pointer of the window; end - right pointer of the window - int begin = 0, end = 0; - - //the length of the substring which match the target string. - int len = Integer.MAX_VALUE; - - //loop at the begining of the source string - while(end < s.length()){ - - char c = s.charAt(end);//get a character - - if( map.containsKey(c) ){ - map.put(c, map.get(c)-1);// plus or minus one - if(map.get(c) == 0) counter--;//modify the counter according the requirement(different condition). - } - end++; - - //increase begin pointer to make it invalid/valid again - while(counter == 0 /* counter condition. different question may have different condition */){ - - char tempc = s.charAt(begin);//***be careful here: choose the char at begin pointer, NOT the end pointer - if(map.containsKey(tempc)){ - map.put(tempc, map.get(tempc) + 1);//plus or minus one - if(map.get(tempc) > 0) counter++;//modify the counter according the requirement(different condition). - } - - /* save / update(min/max) the result if find a target*/ - // result collections or result int value - - begin++; - } - } - return result; - } -} -``` - -无注释java版本: -```java -public class Solution { - public List slidingWindowTemplateByHarryChaoyangHe(String s, String t) { - List result = new LinkedList<>(); - if(t.length()> s.length()) return result; - Map map = new HashMap<>(); - for(char c : t.toCharArray()){ - map.put(c, map.getOrDefault(c, 0) + 1); - } - int counter = map.size(); - int begin = 0, end = 0; - int len = Integer.MAX_VALUE; - while(end < s.length()){ - char c = s.charAt(end); - if( map.containsKey(c) ){ - map.put(c, map.get(c)-1); - if(map.get(c) == 0) counter--; - } - end++; - while(counter == 0){ - char tempc = s.charAt(begin); - if(map.containsKey(tempc)){ - map.put(tempc, map.get(tempc) + 1); - if(map.get(tempc) > 0) counter++; - } - - /* - save / update(min/max) the result if find a target - result collections or result int value - */ - - begin++; - } - } - return result; - } -} -``` - diff --git "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" deleted file mode 100644 index 656ec8a1f..000000000 --- "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" +++ /dev/null @@ -1,156 +0,0 @@ -# Tree Search, Graph Search, DFS, BFS - - -其实原本是根本不知道还有tree search的,只知道graph search,原来graph search就是一般我看到的dfs,bfs,有一个结构来记录visited node,这样在寻找邻居的时候,防止已经visit的node再被visit. - - -## Tree Search - -general tree search pseudocode - - -``` -function TREE_SEARCH(problem, strategy) returns a solution, or failure - initialize the search tree using the initial state of problem - loop do - if there are no candidates for expansion then return failure - choose a leaf node for expansion according to strategy - if the node contains a goal state then return the corresponding solution - else expand the node and add the resulting nodes to the search tree - end -``` - - -## DFS/BFS - -可以让stack/queue记录更多一些的东西,因为反正stack/queue更像通用结构 - -``` - A - / \ - C B - \ / \ - \ D E - \ / - F - - -graph = {'A': set(['B', 'C']), - 'B': set(['A', 'D', 'E']), - 'C': set(['A', 'F']), - 'D': set(['B']), - 'E': set(['B', 'F']), - 'F': set(['C', 'E'])} -``` -### DFS -The implementation below uses the stack data-structure to build-up and return a set of vertices that are accessible within the subjects connected component. Using Python’s overloading of the subtraction operator to remove items from a set, we are able to add only the unvisited adjacent vertices. -```python -def dfs(graph, start): # iterative - visited, stack = [], [start] - while stack: - vertex = stack.pop() - if vertex not in visited: - visited.append(vertex) - stack.extend(graph[vertex] - set(visited)) - return visited -print(dfs(graph, 'A')) # ['A', 'C', 'F', 'E', 'B', 'D'] 这只是其中一种答案 -``` -The second implementation provides the same functionality as the first, however, this time we are using the more succinct recursive form. Due to a common Python gotcha with default parameter values being created only once, we are required to create a new visited set on each user invocation. Another Python language detail is that function variables are passed by reference, resulting in the visited mutable set not having to reassigned upon each recursive call. -```python -def dfs(graph, start, visited=None): # recursive - if visited is None: - visited = [] - print('visiting', start) - visited.append(start) - for next in graph[start]: - if next not in visited: - dfs(graph, next, visited) - return visited -print(dfs(graph, 'A')) # ['A', 'C', 'F', 'E', 'B', 'D'] 这只是其中一种答案 -``` -We are able to tweak both of the previous implementations to return all possible paths between a start and goal vertex. The implementation below uses the stack data-structure again to iteratively solve the problem, yielding each possible path when we locate the goal. Using a generator allows the user to only compute the desired amount of alternative paths. -```python -def dfs_paths(graph, start, goal): # iterative - stack = [(start, [start])] - while stack: - (vertex, path) = stack.pop() - for next in graph[vertex] - set(path): - if next == goal: - yield path + [next] - else: - stack.append((next, path + [next])) -print(list(dfs_paths(graph, 'A', 'F'))) # [['A', 'C', 'F'], ['A', 'B', 'E', 'F']] -``` -The implementation below uses the recursive approach calling the ‘yield from’ PEP380 addition to return the invoked located paths. Unfortunately the version of Pygments installed on the server at this time does not include the updated keyword combination. -```python -def dfs_paths(graph, start, goal, path=None): # recursive - if path is None: - path = [start] - if start == goal: - yield path - for next in graph[start] - set(path): - yield from dfs_paths(graph, next, goal, path + [next]) -print(list(dfs_paths(graph, 'C', 'F'))) # [['C', 'A', 'B', 'E', 'F'], ['C', 'F']] -``` - -### BFS - -Similar to the iterative DFS implementation the only alteration required is to remove the next item from the beginning of the list structure instead of the stacks last. -```python -def bfs(graph, start): # iterative - visited, queue = [], [start] - while queue: - vertex = queue.pop(0) - if vertex not in visited: - visited.append(vertex) - queue.extend(graph[vertex] - set(visited)) - return visited -print(bfs(graph, 'A')) # ['A', 'C', 'B', 'F', 'D', 'E'] -``` -This implementation can again be altered slightly to instead return all possible paths between two vertices, the first of which being one of the shortest such path. -```python -def bfs_paths(graph, start, goal): - queue = [(start, [start])] - while queue: - (vertex, path) = queue.pop(0) - for next in graph[vertex] - set(path): - if next == goal: - yield path + [next] - else: - queue.append((next, path + [next])) -print(list(bfs_paths(graph, 'A', 'F'))) # [['A', 'C', 'F'], ['A', 'B', 'E', 'F']] -``` -Knowing that the shortest path will be returned first from the BFS path generator method we can create a useful method which simply returns the shortest path found or ‘None’ if no path exists. As we are using a generator this in theory should provide similar performance results as just breaking out and returning the first matching path in the BFS implementation. -```python -def bfs_paths(graph, start, goal): - queue = [(start, [start])] - while queue: - (vertex, path) = queue.pop(0) - for next in graph[vertex] - set(path): - if next == goal: - yield path + [next] - else: - queue.append((next, path + [next])) -def shortest_path(graph, start, goal): - try: - return next(bfs_paths(graph, start, goal)) - except StopIteration: - return None -print(shortest_path(graph, 'A', 'F')) # ['A', 'C', 'F'] -``` - -#### Improvement/Follow up - -1. 一旦BFS/DFS与更具体的,更有特性的data structure结合起来,比如binary search tree,那么BFS/DFS会针对这个tree traversal显得更有特性。 -2. it's worth mentioning that there is an optimized queue object in the collections module called [deque](https://docs.python.org/2/library/collections.html#collections.deque)) for which removing items from the beginning ( or popleft ) takes constant time as opposed to O(n) time for lists. - - - -### Resources - -1. [Depth-and Breadth-First Search](https://jeremykun.com/2013/01/22/depth-and-breadth-first-search/) -2. [Edd Mann](http://eddmann.com/posts/depth-first-search-and-breadth-first-search-in-python/) -3. [graph - Depth-first search in Python](https://codereview.stackexchange.com/questions/78577/depth-first-search-in-python) - - - diff --git "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\344\275\215\350\277\220\347\256\227.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\344\275\215\350\277\220\347\256\227.md" deleted file mode 100644 index aeaa44c4d..000000000 --- "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\344\275\215\350\277\220\347\256\227.md" +++ /dev/null @@ -1,38 +0,0 @@ -### 位运算 - -位运算包括: 加 减 乘 取反 and 异或 - -- 0110 + 0110 = 0110 * 2 ,也就是0110左移1位 - -- 0011 * 0100 0100 = 4, 一个数乘以 2^n 即是将这个数左移n - -- a ^(~a) = 0 - -- x & (~0 << n ) 这样来看,0取反全部为1,然后将其右移n位,后面的全是0,x & (~0 <>:右移 - - ​ - -Bit Facts and Tricks - -``` -x ^ 0s = x x & 0s = 0 x | 0s = x -x ^ 1s = ~x x & 1s = x x | 1s = 1s -x ^ x = 0 x & x = x x | x = x -``` - diff --git "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" deleted file mode 100644 index 767617664..000000000 --- "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" +++ /dev/null @@ -1,194 +0,0 @@ -### 全排列算法 - - -#### 46. Permutations - - -Given a collection of distinct numbers, return all possible permutations. - -For example, -[1,2,3] have the following permutations: - - [ - [1,2,3], - [1,3,2], - [2,1,3], - [2,3,1], - [3,1,2], - [3,2,1] - ] - - -#####从空开始加 - -先跳离开这道题,来看类似的'ABC',我们要求它的全排列 - - -``` -def recPermute(sofar, rest): - if rest == '': - print sofar - else: - for i in range(len(rest)): - nxt = sofar + rest[i] - remaining = rest[:i] + rest[i+1:] - recPermute(nxt, remaining) - -// "wrapper" function -def listPermute(s): - recPermute('',s) -``` - -会正确输出`ABC ACB BAC BCA CAB CBA`,题目依靠的是每次我们从余下的字母中选一个,如果画图则会是这样: - - -``` - A B C - B C A C A B - C B C A B A -``` - -时间复杂度应该是O(n!) - -- n choose 1 -- n-1 choose 1 -- ... - - - -#####另一种市面上常见思路是交换: - -思路是这样的,同样看上面的图: - -- n个元素的全排列 = (n-1)个元素的全排列 + 另一个元素作为前缀 -- 如果只有一个元素,那么这个元素本身就是它的全排列 -- 不断将每个元素放作第一个元素,然后将这个元素作为前缀,并将其余元素继续全排列,等到出口,出口出去后还需要还原数组 - - -这个用数组来测试更容易写代码和直观: - - -``` -def recPermute(nums,begin): - n = len(nums) - if begin == n: - print nums, - - for i in range(begin,n): - nums[begin], nums[i] = nums[i],nums[begin] - recPermute(nums,begin+1) - nums[begin],nums[i] = nums[i],nums[begin] - -recPermute(['A','B','C'],0) - -``` - -这样的写法更容易理解: - - -```python -class Solution: - # @param num, a list of integer - # @return a list of lists of integers - def permute(self, num): - if len(num) == 0: return [] - if len(num) == 1: return [num] - res = [] - for i in range(len(num)): - x = num[i] - xs = num[:i] + num[i+1:] - for j in self.permute(xs): - res.append([x] + j) - return res -``` - -每次用一个没有用过的头元素,然后加上全排列产生的结果. - -如果分析复杂度,应该也是O(n!) - - -#### 47. Permutations II - - -最简单的想法: - -- 排序 -- 如果碰到重复的就继续处理下一个 - -``` -class Solution(object): - def permuteUnique(self, nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - if len(nums) == 0: return [] - if len(nums) == 1: return [nums] - res = [] - nums.sort() - for i in range(len(nums)): - if i > 0 and nums[i] == nums[i-1]: continue - for j in self.permuteUnique(nums[:i] + nums[i+1:]): - res.append([nums[i]] + j) - return res - -``` - - - - -#### 31. Next Permutation - -实际上这个题目也就是Generation in lexicographic order, - -wikipedia 和 [这里](https://www.nayuki.io/page/next-lexicographical-permutation-algorithm) 有很好,很精妙的算法,也有点two pointer的意思 - - -``` -1. Find the highest index i such that s[i] < s[i+1]. If no such index exists, the permutation is the last permutation. -2. Find the highest index j > i such that s[j] > s[i]. Such a j must exist, since i+1 is such an index. -3. Swap s[i] with s[j]. -4. Reverse the order of all of the elements after index i till the last element. -``` - - -看例子: - -125430 - - -- 从末尾开始,找到decreasing subsequence,5430,因为来调5330无论怎么调,都不可能有比它更小的,数也被自然的分成两部分(1,2) 和 (5,4,3,0) -- 下一步是找这个sequence里面第一个比前面部分,比2大的,3,也很容易理解,因为下一个必定是(1,3)打头 -- 交换 3和2 ,变成 (1,3,5,4,2,0),再把后面的部分reverse,得到后面部分可得到的最小的 - -这个时候,得到下一个sequence 130245 - - - -``` -class Solution(object): - def nextPermutation(self, nums): - """ - :type nums: List[int] - :rtype: void Do not return anything, modify nums in-place instead. - """ - m, n = 0, 0 - for i in range(len(nums) - 2, 0 , -1): - if nums[i] < nums[i+1]: - m = i - break - - for i in range(len(nums) - 1, 0 , -1): - if nums[i] > nums[m]: - n = i - break - - if m < n : - nums[m], nums[n] = nums[n], nums[m] - nums[m+1:] = nums[len(nums):m:-1] - else: - nums = nums.reverse() -``` - - -所以可以用这个next permutation来解46/47也可以,然后我兴奋了一下,这个算法很快的!然后我又冷静了,因为permutation的个数是O(n!)个啊|||,所以也不可能有啥大的提升吧 diff --git "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\345\205\253\346\216\222\345\272\217.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\345\205\253\346\216\222\345\272\217.md" deleted file mode 100644 index 83b327202..000000000 --- "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\345\205\253\346\216\222\345\272\217.md" +++ /dev/null @@ -1,386 +0,0 @@ -## 前言 -八大排序,三大查找是《数据结构》当中非常基础的知识点,在这里为了复习顺带总结了一下常见的八种排序算法。 -常见的八大排序算法,他们之间关系如下: - -![](/images/SortingAlgorithm/八大排序算法总结.png) - -他们的性能比较: - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -### 直接插入排序 (Insertion sort) - -![](/images/SortingAlgorithm/直接插入排序.gif) - -直接插入排序的核心思想就是:将数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已排序的元素小,则交换,直到全部元素都比较过。 -因此,从上面的描述中我们可以发现,直接插入排序可以用两个循环完成: - -1. 第一层循环:遍历待比较的所有数组元素 -2. 第二层循环:将本轮选择的元素(selected)与已经排好序的元素(ordered)相比较。 - - 如果```selected > ordered```,那么将二者交换 - -```python -#直接插入排序 -def insert_sort(L): - #遍历数组中的所有元素,其中0号索引元素默认已排序,因此从1开始 - for x in range(1,len(L)): - #将该元素与已排序好的前序数组依次比较,如果该元素小,则交换 - #range(x-1,-1,-1):从x-1倒序循环到0 - for i in range(x-1,-1,-1): - #判断:如果符合条件则交换 - if L[i] > L[i+1]: - L[i], L[i+1] = L[i+1], L[i] -``` -### 希尔排序 (Shell sort) - -![](/images/SortingAlgorithm/希尔排序.png) - -希尔排序的算法思想:将待排序数组按照步长gap进行分组,然后将每组的元素利用直接插入排序的方法进行排序;每次将gap折半减小,循环上述操作;当gap=1时,利用直接插入,完成排序。 -同样的:从上面的描述中我们可以发现:希尔排序的总体实现应该由三个循环完成: - -1. 第一层循环:将gap依次折半,对序列进行分组,直到gap=1 -2. 第二、三层循环:也即直接插入排序所需要的两次循环。具体描述见上。 - -```python -#希尔排序 -def insert_shell(L): - #初始化gap值,此处利用序列长度的一半为其赋值 - gap = int(len(L)/2) - #第一层循环:依次改变gap值对列表进行分组 - while (gap >= 1): - #下面:利用直接插入排序的思想对分组数据进行排序 - #range(gap,len(L)):从gap开始 - for x in range(gap,len(L)): - #range(x-gap,-1,-gap):从x-gap开始与选定元素开始倒序比较,每个比较元素之间间隔gap - for i in range(x-gap,-1,-gap): - #如果该组当中两个元素满足交换条件,则进行交换 - if L[i] > L[i+gap]: - L[i], L[i+gap] = L[i+gap], L[i] - #while循环条件折半 - gap = int((gap/2)) -``` - -### 简单选择排序 (Selection sort) - -![](/images/SortingAlgorithm/简单选择排序.gif) - -简单选择排序的基本思想:比较+交换。 - -1. 从待排序序列中,找到关键字最小的元素; -2. 如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换; -3. 从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。 -因此我们可以发现,简单选择排序也是通过两层循环实现。 - - 第一层循环:依次遍历序列当中的每一个元素 - - 第二层循环:将遍历得到的当前元素依次与余下的元素进行比较,符合最小元素的条件,则交换。 - -```python -# 简单选择排序 -def select_sort(L): -#依次遍历序列中的每一个元素 - for x in range(0,len(L)): -#将当前位置的元素定义此轮循环当中的最小值 - minimum = L[x] -#将该元素与剩下的元素依次比较寻找最小元素 - for i in range(x+1,len(L)): - if L[i] < minimum: - L[i], minimum = minimum, L[i] -#将比较后得到的真正的最小值赋值给当前位置 - L[x] = minimum -``` - -### 堆排序 (Heap sort) - -#### 堆的概念 - -堆:本质是一种数组对象。特别重要的一点性质:任意的叶子节点小于(或大于)它所有的父节点。对此,又分为大顶堆和小顶堆,大顶堆要求节点的元素都要大于其孩子,小顶堆要求节点元素都小于其左右孩子,两者对左右孩子的大小关系不做任何要求。 -利用堆排序,就是基于大顶堆或者小顶堆的一种排序方法。下面,我们通过大顶堆来实现。 - -基本思想: -堆排序可以按照以下步骤来完成: - -1. 首先将序列构建称为大顶堆; - -(这样满足了大顶堆那条性质:位于根节点的元素一定是当前序列的最大值) - -![](/images/SortingAlgorithm/构建大顶堆.png) - -2. 取出当前大顶堆的根节点,将其与序列末尾元素进行交换; - -(此时:序列末尾的元素为已排序的最大值;由于交换了元素,当前位于根节点的堆并不一定满足大顶堆的性质) - -3. 对交换后的n-1个序列元素进行调整,使其满足大顶堆的性质; - -![](/images/SortingAlgorithm/调整大顶堆.png) - -4. 重复2.3步骤,直至堆中只有1个元素为止 - -```python -#-------------------------堆排序-------------------------------- -#**********获取左右叶子节点********** -def LEFT(i): - return 2*i + 1 -def RIGHT(i): - return 2*i + 2 -#********** 调整大顶堆 ********** -#L:待调整序列 length: 序列长度 i:需要调整的结点 -def adjust_max_heap(L, length, i): -#定义一个int值保存当前序列最大值的下标 - largest = i -#获得序列左右叶子节点的下标 - left, right = LEFT(i), RIGHT(i) -#当左叶子节点的下标小于序列长度 并且 左叶子节点的值大于父节点时,将左叶子节点的下标赋值给largest - if (left < length) and (L[left] > L[i]): - largest = left -#当右叶子节点的下标小于序列长度 并且 右叶子节点的值大于父节点时,将右叶子节点的下标值赋值给largest - if (right < length) and (L[right] > L[largest]): - largest = right -#如果largest不等于i 说明当前的父节点不是最大值,需要交换值 - if (largest != i): - L[i], L[largest] = L[largest], L[i] - # 执行递归操作:两个任务:1 寻找最大值的下标;2.最大值与父节点交换 - adjust_max_heap(L, length, largest) -#********** 建立大顶堆 ********** -def build_max_heap(L): - length = len(L) - for x in range(int((length-1)/2), -1, -1): - adjust_max_heap(L, length, x) -#********** 堆排序 ********** -def heap_sort(L): -#先建立大顶堆,保证最大值位于根节点;并且父节点的值大于叶子结点 - build_max_heap(L) -#i:当前堆中序列的长度.初始化为序列的长度 - i = len(L) -#执行循环:1. 每次取出堆顶元素置于序列的最后(len-1,len-2,len-3...) -# 2. 调整堆,使其继续满足大顶堆的性质,注意实时修改堆中序列的长度 - while (i > 0): - L[i-1], L[0] = L[0], L[i-1] -#堆中序列长度减1 - i -= 1 -#调整大顶堆 - adjust_max_heap(L, i, 0) -``` -### 冒泡排序 (Bubble sort) - -![](/images/SortingAlgorithm/冒泡排序.gif) - -冒泡排序思路比较简单: - -1. 将序列当中的左右元素,依次比较,保证右边的元素始终大于左边的元素; -( 第一轮结束后,序列最后一个元素一定是当前序列的最大值;) -2. 对序列当中剩下的n-1个元素再次执行步骤1。 -3. 对于长度为n的序列,一共需要执行n-1轮比较 -(利用while循环可以减少执行次数) - -```python -#冒泡排序 -def bubble_sort(L): - length = len(L) -#序列长度为length,需要执行length-1轮交换 - for x in range(1, length): -#对于每一轮交换,都将序列当中的左右元素进行比较 -#每轮交换当中,由于序列最后的元素一定是最大的,因此每轮循环到序列未排序的位置即可 - for i in range(0, length-x): - if L[i] > L[i+1]: - L[i], L[i+1] = L[i+1], L[i] -``` - -### 快速排序 (Quick sort) - -![](/images/SortingAlgorithm/快速排序.gif) - -快速排序的基本思想:挖坑填数+分治法 - -1. 从序列当中选择一个基准数(pivot) -在这里我们选择序列当中第一个数作为基准数 -2. 将序列当中的所有数依次遍历,比基准数大的位于其右侧,比基准数小的位于其左侧 -3. 重复步骤1.2,直到所有子集当中只有一个元素为止。 - -用伪代码描述如下: -- i =L; j = R; 将基准数挖出形成第一个坑a[i]。 -- j--由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中。 -- i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中。 -- 再重复执行2,3二步,直到i==j,将基准数填入a[i]中 - -```python -#快速排序 -#L:待排序的序列;start排序的开始index,end序列末尾的index -#对于长度为length的序列:start = 0;end = length-1 -def quick_sort(L, start, end): - if start < end: - i, j, pivot = start, end, L[start] - while i < j: -#从右开始向左寻找第一个小于pivot的值 - while (i < j) and (L[j] >= pivot): - j -= 1 -#将小于pivot的值移到左边 - if (i < j): - L[i] = L[j] - i += 1 -#从左开始向右寻找第一个大于pivot的值 - while (i < j) and (L[i] <= pivot): - i += 1 -#将大于pivot的值移到右边 - if (i < j): - L[j] = L[i] - j -= 1 -#循环结束后,说明 i=j,此时左边的值全都小于pivot,右边的值全都大于pivot -#pivot的位置移动正确,那么此时只需对左右两侧的序列调用此函数进一步排序即可 -#递归调用函数:依次对左侧序列:从0 ~ i-1//右侧序列:从i+1 ~ end - L[i] = pivot -#左侧序列继续排序 - quick_sort(L, start, i-1) -#右侧序列继续排序 - quick_sort(L, i+1, end) -``` - -### 归并排序 (Merge sort) - -![](/images/SortingAlgorithm/归并排序.gif) - -1. 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个典型的应用。它的基本操作是:将已有的子序列合并,达到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。 -2. 归并排序其实要做两件事: - - 分解----将序列每次折半拆分 - - 合并----将划分后的序列段两两排序合并 -因此,归并排序实际上就是两个操作,拆分+合并 -3. 如何合并? - - L[first...mid]为第一段,L[mid+1...last]为第二段,并且两端已经有序,现在我们要将两端合成达到L[first...last]并且也有序。 - - 首先依次从第一段与第二段中取出元素比较,将较小的元素赋值给temp[] - - 重复执行上一步,当某一段赋值结束,则将另一段剩下的元素赋值给temp[] - - 此时将temp[]中的元素复制给L[],则得到的L[first...last]有序 -4. 如何分解? - - 在这里,我们采用递归的方法,首先将待排序列分成A,B两组; - - 然后重复对A、B序列分组; - - 直到分组后组内只有一个元素,此时我们认为组内所有元素有序,则分组结束。 - -```python -# 归并排序 -#这是合并的函数 -# 将序列L[first...mid]与序列L[mid+1...last]进行合并 -def mergearray(L, first, mid, last, temp): -#对i,j,k分别进行赋值 - i, j, k = first, mid+1, 0 -#当左右两边都有数时进行比较,取较小的数 - while (i <= mid) and (j <= last): - if L[i] <= L[j]: - temp[k] = L[i] - i += 1 - k += 1 - else: - temp[k] = L[j] - j += 1 - k += 1 -#如果左边序列还有数 - while (i <= mid): - temp[k] = L[i] - i += 1 - k += 1 -#如果右边序列还有数 - while (j <= last): - temp[k] = L[j] - j += 1 - k += 1 -#将temp当中该段有序元素赋值给L待排序列使之部分有序 - for x in range(0, k): - L[first+x] = temp[x] -# 这是分组的函数 -def merge_sort(L, first, last, temp): - if first < last: - mid = int(((first + last) / 2)) -#使左边序列有序 - merge_sort(L, first, mid, temp) -#使右边序列有序 - merge_sort(L, mid+1, last, temp) -#将两个有序序列合并 - mergearray(L, first, mid, last, temp) -# 归并排序的函数 -def merge_sort_array(L): -#声明一个长度为len(L)的空列表 - temp = len(L)*[None] -#调用归并排序 - merge_sort(L, 0, len(L)-1, temp) -``` - -### 基数排序 (Radix sort) - -![](/images/SortingAlgorithm/基数排序.gif) - -1. 基数排序:通过序列中各个元素的值,对排序的N个元素进行若干趟的“分配”与“收集”来实现排序。 - - 分配:我们将L[i]中的元素取出,首先确定其个位上的数字,根据该数字分配到与之序号相同的桶中 - - 收集:当序列中所有的元素都分配到对应的桶中,再按照顺序依次将桶中的元素收集形成新的一个待排序列L[ ] - - 对新形成的序列L[]重复执行分配和收集元素中的十位、百位...直到分配完该序列中的最高位,则排序结束 -2. 根据上述“基数排序”的展示,我们可以清楚的看到整个实现的过程 - -```python -#************************基数排序**************************** -#确定排序的次数 -#排序的顺序跟序列中最大数的位数相关 -def radix_sort_nums(L): - maxNum = L[0] -#寻找序列中的最大数 - for x in L: - if maxNum < x: - maxNum = x -#确定序列中的最大元素的位数 - times = 0 - while (maxNum > 0): - maxNum = int((maxNum/10)) - times += 1 - return times -#找到num从低到高第pos位的数据 -def get_num_pos(num, pos): - return (int((num/(10**(pos-1))))) % 10 -#基数排序 -def radix_sort(L): - count = 10 * [None] #存放各个桶的数据统计个数 - bucket = len(L) * [None] #暂时存放排序结果 -#从低位到高位依次执行循环 - for pos in range(1, radix_sort_nums(L)+1): - #置空各个桶的数据统计 - for x in range(0, 10): - count[x] = 0 - #统计当前该位(个位,十位,百位....)的元素数目 - for x in range(0, len(L)): - #统计各个桶将要装进去的元素个数 - j = get_num_pos(int(L[x]), pos) - count[j] += 1 - #count[i]表示第i个桶的右边界索引 - for x in range(1,10): - count[x] += count[x-1] - #将数据依次装入桶中 - for x in range(len(L)-1, -1, -1): - #求出元素第K位的数字 - j = get_num_pos(L[x], pos) - #放入对应的桶中,count[j]-1是第j个桶的右边界索引 - bucket[count[j]-1] = L[x] - #对应桶的装入数据索引-1 - count[j] -= 1 - # 将已分配好的桶中数据再倒出来,此时已是对应当前位数有序的表 - for x in range(0, len(L)): - L[x] = bucket[x] -``` - -## 运行时间实测 - -10w数据 -``` -直接插入排序:1233.581131 -希尔排序:1409.8012320000003 -简单选择排序:466.66974500000015 -堆排序:1.2036720000000969 -冒泡排序:751.274449 -#**************************************************** -快速排序:1.0000003385357559e-06 -#快速排序有误:实际上并未执行 -#RecursionError: maximum recursion depth exceeded in comparison -#**************************************************** -归并排序:0.8262230000000272 -基数排序:1.1162899999999354 -``` -从运行结果上来看,堆排序、归并排序、基数排序真的快。 -对于快速排序迭代深度超过的问题,可以将考虑将快排通过非递归的方式进行实现。 - -## Resources - -1. [算法导论》笔记汇总](http://mindlee.com/2011/08/21/study-notes-directory/) -2. [八大排序算法的 Python 实现](http://python.jobbole.com/82270/) -3. [数据结构常见的八大排序算法(详细整理)](https://www.jianshu.com/p/7d037c332a9d) diff --git "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" deleted file mode 100644 index 0d4afa96a..000000000 --- "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" +++ /dev/null @@ -1,114 +0,0 @@ -###子集合问题 - -####78. Subsets - -子集合是全排列的好朋友,也是combination组合的好朋友,排列·组合·子集,他们三个都是好朋友. - - -#####从空开始加 - -同样先来看'ABC' - -``` -def recsubsets(sofar, rest): - if rest == '': - print sofar, - else: - recsubsets(sofar, rest[1:]) - recsubsets(sofar + rest[0], rest[1:]) - -def listsubsets(s): - recsubsets('',s) - - -listsubsets('ABC') -``` - -##### 市面流行思路 - -市面上流行的思路: - -- [[],[1]] 是 [1] 的子集合 -- [[],[1],[2],[1,2]] 是 [1,2] 的子集合,实际上就是1的子集合们加了一个2 - - -所以用python写起来也很简单/精美 - -``` -def subsets(nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - results = [[]] - for num in nums: - results.extend([result + [num] for result in results]) - return results -``` -我在这里犯过错,所以这一句 - -`results.extend([result + [num] for result in results])` 实际上等于: - - -``` -tmp = [] -for result in results: - tmp.append(result + [num]) -results.extend(tmp) -``` - - - - - -#### 90. Subsets II - - -要去重了,比如如果有 [1,2,2],那么解答为: - - - [ - [2], - [1], - [1,2,2], - [2,2], - [1,2], - [] - ] - - -现在来观察规律,与之前有不同之处是我们需要一个位置来mark,因为不再需要往之前出现过的地方再加了,看这个: - - -``` -[[],[1]] 是 [1] 的子集合 -[[],[1],[2],[1,2]] 是 [1,2] 的子集合,实际上就是1的子集合们加了一个2 -新来的2不能再从头开始加了,它需要从[ .., [2],[1,2] ]加 才是合理的 -``` - -所以看到非常精妙的代码 - - -``` -def subsets(nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - nums.sort() - result = [[]] - temp_size = 0 - - for i in range(len(nums)): - start = temp_size if i >= 1 and nums[i] == nums[i-1] else 0 - temp_size = len(result) - #print start,temp_size,result - for j in range(start, temp_size): - result.append(result[j] + [nums[i]]) - print result - -subsets([1,2,2]) -``` - -这里这个start是来记录了之前一次数组的长度,temp_size记住目前数组的长度,然后用这个来达到去重的目的,非常聪明 - diff --git "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\346\200\273\347\273\223.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\346\200\273\347\273\223.md" deleted file mode 100644 index 99fcba752..000000000 --- "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\346\200\273\347\273\223.md" +++ /dev/null @@ -1,120 +0,0 @@ -# 1 -```solution```下自定义函数```func(self, fargs, *args, **kwargs)```, 调用时使用```self.func()```的格式 - -# 2 -```not fargs``` 和 ```fargs == None```不一样,前者```fargs```可能为[], '', 0, etc - -# 3 -递归问题 -Any problem can be solved using dp. Solving using a greedy strategy is harder though, since you need to prove that greedy will work for that problem. There are some tell-tale signs of a problem where greedy may be applicable, but isn’t immediately apparent. Example: - -- Choice of an element depends only on its immediate neighbours (wiggle sort). -- Answer is monotonically non-decreasing or non-increasing (sorting). This is also applicable for LIS for example. -- Anything that requires lexicographically largest or smallest of something. -- Anything where processing the input in sorted order will help. -- Anything where processing the input in forward or reverse (as given) will help. -- Anything which requires you to track the minimum or maximum of something (think of sliding window problems). - -There’s matroid theory which deal with greedy algorithms, but I don’t really understand it. If someone does, I’ll be super grateful to them to explain it to me in simple language! - -In general, try to see if for a problem, the solution doesn’t depend on a lot of history about the solution itself, but the next part of the solution is somewhat independent from the rest of the solution. These are all indicative of the fact that a greedy strategy could be applicable. - -# 4 -[Counter.elements()](https://docs.python.org/2/library/collections.html) - -# 5 -测试案例写法 - -```python -import unittest -class Solution(object): - def isMatch(self, s, p): - """ - :type s: str - :type p: str - :rtype: bool - """ - m, n = len(s), len(p) - dp = [ [0 for i in range(n+1)] for j in range(m+1)] - - dp[0][0] = 1 - - # init the first line - for i in range(2,n+1): - if p[i-1] == '*': - dp[0][i] = dp[0][i-2] - - for i in range(1,m+1): - for j in range(1,n+1): - if p[j-1] == '*': - if p[j-2] != s[i-1] and p[j-2] != '.': - dp[i][j] = dp[i][j-2] - elif p[j-2] == s[i-1] or p[j-2] == '.': - dp[i][j] = dp[i-1][j] or dp[i][j-2] - - elif s[i-1] == p[j-1] or p[j-1] == '.': - dp[i][j] = dp[i-1][j-1] - - return dp[m][n] == 1 - - -class TestSolution(unittest.TestCase): - def test_none_0(self): - s = "" - p = "" - self.assertTrue(Solution().isMatch(s, p)) - - def test_none_1(self): - s = "" - p = "a" - self.assertFalse(Solution().isMatch(s, p)) - - def test_no_symbol_equal(self): - s = "abcd" - p = "abcd" - self.assertTrue(Solution().isMatch(s, p)) - - def test_no_symbol_not_equal_0(self): - s = "abcd" - p = "efgh" - self.assertFalse(Solution().isMatch(s, p)) - - def test_no_symbol_not_equal_1(self): - s = "ab" - p = "abb" - self.assertFalse(Solution().isMatch(s, p)) - - def test_symbol_0(self): - s = "" - p = "a*" - self.assertTrue(Solution().isMatch(s, p)) - - def test_symbol_1(self): - s = "a" - p = "ab*" - self.assertTrue(Solution().isMatch(s, p)) - - def test_symbol_2(self): - # E.g. - # s a b b - # p 1 0 0 0 - # a 0 1 0 0 - # b 0 0 1 0 - # * 0 1 1 1 - s = "abb" - p = "ab*" - self.assertTrue(Solution().isMatch(s, p)) - - -if __name__ == "__main__": - unittest.main() - - - -输出: -........ - -Ran 8 tests in 0.001s - -OK -``` diff --git "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\347\273\204\345\220\210\351\227\256\351\242\230.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\347\273\204\345\220\210\351\227\256\351\242\230.md" deleted file mode 100644 index 33f295e82..000000000 --- "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\347\273\204\345\220\210\351\227\256\351\242\230.md" +++ /dev/null @@ -1,84 +0,0 @@ -### 组合问题 - - -#### 77.Combinations - - -##### 会超时的recursion - - - -``` -class Solution(object): - def combine(self, n, k): - """ - :type n: int - :type k: int - :rtype: List[List[int]] - """ - ans = [] - self.dfs(n, k, 1, [], ans) - return ans - - def dfs(self, n, k ,start, lst, ans): - if k == 0 : - ans.append(lst) - return - for i in range(start, n+1): - self.dfs(n, k - 1, i + 1,lst +[i], ans) -``` - -理解方式 - -``` - - 1 2 3 - 12 13 14 23 24 34 -``` - -可以参照这里 - - - - - -##### 市面上流行解法 - -递归的思想: n选k - -- 如果 k==n ,则全选。 -- n > k 又可以分成两类: - - 选了n, 则在余下的n-1中选k-1 - - 没有选n, 则在余下的n-1中选k - -注意一下会有两个base case,因为k在不断减小和n在不断减小,所以写起来可以这样: - - -``` -def combine(n,k): - if k == 1: - return [[i+1] for i in range(n)] - if n == k: - return [range(1, k+1)] - # choose n , not choose n - return [r + [n] for r in combine(n-1,k-1)] + combine(n-1,k) - - -print combine(20,16) -``` - - -#### 39. Combination Sum - - -使用正常递归思路 - - -#### 40. Combination Sum II - -重复做跳过处理 - -#### 216. Combination Sum III - - -#### 377. Combination Sum IV diff --git "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\351\200\222\345\275\222_recursion.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\351\200\222\345\275\222_recursion.md" deleted file mode 100644 index 413872965..000000000 --- "a/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\351\200\222\345\275\222_recursion.md" +++ /dev/null @@ -1,39 +0,0 @@ -#递归 Recursion - -### 递归 - -递归绝对是一个非常重要的概念。比如安利? 不断的delegate,本来想要完成1000个人的销售,找10个人,每人完成100人的,这10个人每人再去找10个人,每人完成10人的销售,这样就完成了1000人的销售(不懂安利是否这样,拿来举例)。 - - -递归之所以重要,这里面存在的概念太多了,首先上面这个例子里面就有divide and conquer的意思,把task divide小,然后来解决它。 - - -同样有趣的例子 → 吃完一个bowl of chips: - -- for loop,知道多少薯片,然后从0开始吃到最后 -- while, while 碗里还有薯片,就吃 -- 递归,吃一片,然后继续吃剩下的 N - 1 片,直到碗里的薯片数量只剩下0片了 - - -典型的例子: - -- pow(x,n) -- isPalindrome -- TowerofHanoi -- binarySearch - - - -### 链表, 树, 图 - -链表(linked list) 是数据结构的基础,而链表本身就是具有递归特性的,看C++中对于linked list node的定义, next指向本身这样的结构,就是再这个node定义还未完成之时,我们已经指向自己。 - - -``` -struct node{ - int data; - node* next; -}; -``` - -binary tree定义就是靠递归来实现的。 diff --git "a/docs/Leetcode_Solutions/Java/001._two_sum \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/001._two_sum \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index 120db871d..000000000 --- "a/docs/Leetcode_Solutions/Java/001._two_sum \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,43 +0,0 @@ -### 1. Two Sum - -题目: - - - -难度: - -Easy - - -思路 - -可以用O(n^2) loop - -但是也可以牺牲空间换取时间,异常聪明的AC解法 - -``` - 2 7 11 15 - 不存在 存在之中 -lookup {2:0} [0,1] -``` - -一但字典内有了这个 `target - 当前数字`,找到它的index和当前index一起返回。 - - -```python -class Solution(object): - def twoSum(self, nums, target): - """ - :type nums: List[int] - :type target: int - :rtype: List[int] - """ - lookup = {} - for i, num in enumerate(nums): - if target - num in lookup: - return [lookup[target - num],i] - lookup[num] = i - return [] -``` - - diff --git "a/docs/Leetcode_Solutions/Java/002._add_two_numbers \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/002._add_two_numbers \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index 7ead7c7c4..000000000 --- "a/docs/Leetcode_Solutions/Java/002._add_two_numbers \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,37 +0,0 @@ -### 2. Add Two Numbers - -题目: - - - -难度 : Medium - - -跟plus One, add Binary 玩的同一种花样 - - -```python -class Solution(object): - def addTwoNumbers(self, l1, l2): - """ - :type l1: ListNode - :type l2: ListNode - :rtype: ListNode - """ - #easiest case - if l1 == None: - return l2 - if l2 == None: - return l1 - - if l1.val + l2.val < 10: - l3 = ListNode(l1.val + l2.val) - l3.next = self.addTwoNumbers(l1.next, l2.next) - - elif l1.val + l2.val >= 10: - l3 = ListNode(l1.val + l2.val - 10) - tmp = ListNode(1) - tmp.next = None - l3.next = self.addTwoNumbers(l1.next, self.addTwoNumbers(l2.next ,tmp)) - return l3 -``` diff --git "a/docs/Leetcode_Solutions/Java/003._longest_substring_without_repeating_characters \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/003._longest_substring_without_repeating_characters \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index 8b8ef18eb..000000000 --- "a/docs/Leetcode_Solutions/Java/003._longest_substring_without_repeating_characters \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,84 +0,0 @@ -### 3. Longest Substring Without Repeating Characters - - -题目: - - - -难度: - -Medium - - - -思路 - -粗一看是dp,细一看是greedy - -我们先从第一个字符开始,只要碰到已经出现过的字符我们就必须从之前出现该字符的index开始重新往后看。 - -例如‘xyzxlkjh’,当看到第二个‘x’时我们就应该从y开始重新往后看了。 - -那么怎么判断字符已经出现过了呢?我们使用一个hashmap,将每一个已经阅读过的字符作为键,而它的值就是它在原字符串中的index,如果我们现在的字符不在hashmap里面我们就把它加进hashmap中去,因此,只要目前的这个字符在该hashmap中的值大于等于了这一轮字符串的首字符,就说明它已经出现过了,我们就将首字符的index加1,即从后一位又重新开始读,然后比较目前的子串长度与之前的最大长度,取大者。 - -### 程序变量解释 - -- l(字母L) 代表目前最大子串的长度 -- start 是这一轮未重复子串首字母的index -- maps 放置每一个字符的index,如果maps.get(s[i], -1)大于等于start的话,就说明字符重复了,此时就要重置 l(字母L) 和start的值了, - - - -```python -class Solution(object): - def lengthOfLongestSubstring(self, s): - """ - :type s: str - :rtype: int - - """ - l, start, n = 0, 0, len(s) - maps = {} - for i in range(n): - start = max(start, maps.get(s[i], -1)+1) - l = max(l, i - start+1) - maps[s[i]] = i - return l -``` - -```python -class Solution(object): - def lengthOfLongestSubstring(self, s): - """ - :type s: str - :rtype: int - """ - maps = {} - begin, end, counter, d = 0, 0, 0, 0 - while end < len(s): - if s[end] in maps: - maps[s[end]] += 1 - else: - maps[s[end]] = 1 - if maps[s[end]] > 1: - counter += 1 - end += 1 - while counter > 0: - if maps[s[begin]] > 1: - counter -= 1 - maps[s[begin]] -= 1 - begin += 1 - d = max(d, end - begin) - return d -``` - - - - - - -Author: Keqi Huang - -If you like it, please spread your support - -![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) diff --git "a/docs/Leetcode_Solutions/Java/004._median_of_two_sorted_arrays \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/004._median_of_two_sorted_arrays \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index 8ad14bbb6..000000000 --- "a/docs/Leetcode_Solutions/Java/004._median_of_two_sorted_arrays \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,260 +0,0 @@ -### 4. Median of Two Sorted Arrays - -题目: - - - -难度: - -Hard - - -一看到的时候,觉得跟CLRS书上的一道习题类似 -求X[1....n] Y[1....n] 的 median - -习题 9.3-8 - - -Let X[1..n] and Y [1..n] be two arrays, each containing n numbers already in sorted order. Give an O(lg n)-time algorithn to find the median of all 2n elements in arrays X and Y . - - -> The median can be obtained recursively as follows. Pick the median of the sorted array A. This is just O(1) time as median is the n/2th element in the sorted array. Now compare the median of A, call is a∗ with median of B, b∗. We have two cases. - -- a∗ < b∗ : In this case, the elements in B[n/2 ···n] are also greater than a . So the median cannot lie in either A[1 · · · n/2 ] or B[n/2 · · · n]. So we can just throw these away and recursively - -- a∗ > b∗ : In this case, we can still throw away B[1··· n/2] and also A[ n/ · · · n] and solve a smaller subproblem recursively. - - -In either case, our subproblem size reduces by a factor of half and we spend only constant time to compare the medians of A and B. So the recurrence relation would be T (n) = T (n/2) + O(1) which has a solution T (n) = O(log n). - - -divide and conquer - -- 如果X[n/2] == Y[n/2],则找到,return -- 如果X[n/2] < Y[n/2],找X[n/2+1….n]和Y[1,2…n/2]之间 -- 否则找X[1..n/2]和Y[n/2…n] - - - - -但是实际上不同,这里需要考虑的问题更多: - -- 两个数组长度不一样 -- 并不是只找一个median,如果median有两个,需要算平均 - -思路 - -把它转化成经典的findKth问题 - -参考: - - -首先转成求A和B数组中第k小的数的问题, 然后用k/2在A和B中分别找。 - - -比如k = 6, 分别看A和B中的第3个数, 已知 A1 < A2 < A3 < A4 < A5... 和 B1 < B2 < B3 < B4 < B5..., 如果A3 <= B3, 那么第6小的数肯定不会是A1, A2, A3, 因为最多有两个数小于A1, 三个数小于A2, 四个数小于A3。 关键点是从 k/2 开始来找。 - - - -B3至少大于5个数, 所以第6小的数有可能是B1 (A1 < A2 < A3 < A4 < A5 < B1), 有可能是B2 (A1 < A2 < A3 < B1 < A4 < B2), 有可能是B3 (A1 < A2 < A3 < B1 < B2 < B3)。那就可以排除掉A1, A2, A3, 转成求A4, A5, ... B1, B2, B3, ...这些数中第3小的数的问题, k就被减半了。每次都假设A的元素个数少, pa = min(k/2, lenA)的结果可能导致k == 1或A空, 这两种情况都是终止条件。 - - -发问,为什么要从k/2开始寻找,依旧k = 6, 我可以比较A1 和 B5的关系么,可以这样做,但是明显的问题出现在如果A1 > B5,那么这个第6小的数应该存在于B6和A1中。 - -如果A1 < B5,这个时间可能性就很多了,比如A1 < A2 < A3 < A4 < B1 < B2,各种可能,无法排除元素,所以还是要从k/2开始寻找。 - -这个跟习题算法的区别是每次扔的东西明显少一些,但是k也在不断变小。下面的代码的时间复杂度是O(lg(m+n)) - - -```python -class Solution(object): - def findMedianSortedArrays(self, nums1, nums2): - """ - :type nums1: List[int] - :type nums2: List[int] - :rtype: float - """ - n = len(nums1) + len(nums2) - if n % 2 == 1: - return self.findKth(nums1, nums2, n / 2 + 1) - else: - smaller = self.findKth(nums1, nums2, n / 2) - bigger = self.findKth(nums1, nums2, n / 2 + 1) - return (smaller + bigger) / 2.0 - - - def findKth(self, A, B, k): - if len(A) == 0: - return B[k-1] - if len(B) == 0: - return A[k-1] - if k == 1 : - return min(A[0],B[0]) - - - a = A[ k / 2 - 1 ] if len(A) >= k / 2 else None - b = B[ k / 2 - 1 ] if len(B) >= k / 2 else None - - if b is None or (a is not None and a < b): - return self.findKth(A[k/2:], B, k - k/2) -   return self.findKth(A, B[k/2:],k - k/2) #这里要注意:因为 k/2 不一定 等于 (k - k/2), - - -``` -```python -#python3里面要用向下取整函数才可以AC,否则报错,TypeError: list indices must be integers or slices, not float - -from math import floor -class Solution: - def findMedianSortedArrays(self, nums1, nums2): - """ - :type nums1: List[int] - :type nums2: List[int] - :rtype: float - """ - n = len(nums1) + len(nums2) - if n % 2 == 1: - return self.findKth(nums1, nums2, floor(n/2)+1) - else: - smaller = self.findKth(nums1, nums2, floor(n/2)) - bigger = self.findKth(nums1, nums2, floor(n/2)+1) - return (smaller + bigger) / 2.0 - def findKth(self, A, B, k): - - if len(A) == 0: - return B[k-1] - if len(B) == 0: - return A[k-1] - if k == 1: - return min(A[0], B[0]) - a = A[floor(k/2)-1] if len(A) >= k/2 else None - b = B[floor(k/2)-1] if len(B) >= k/2 else None - if b is None or (a is not None and a < b): - return self.findKth(A[floor(k/2):], B, k - floor(k/2)) - else: - return self.findKth(A, B[floor(k/2):], k - floor(k/2)) -``` - -这个findKth的算法单独抽出来也是题目。 -### 寻找最小的k个数 - -题目描述 - -输入n个整数,输出其中最小的k个。 -分析与解法 - -## 解法一 - -要求一个序列中最小的k个数,按照惯有的思维方式,则是先对这个序列从小到大排序,然后输出前面的最小的k个数。 -至于选取什么的排序方法,我想你可能会第一时间想到快速排序(我们知道,快速排序平均所费时间为n*logn),然后再遍历序列中前k个元素输出即可。因此,总的时间复杂度:```O(n * log n)+O(k)=O(n * log n)```。 -## 解法二 - -咱们再进一步想想,题目没有要求最小的```k```个数有序,也没要求最后```n-k```个数有序。既然如此,就没有必要对所有元素进行排序。这时,咱们想到了用选择或交换排序,即: -1. 遍历```n```个数,把最先遍历到的k个数存入到大小为```k```的数组中,假设它们即是最小的```k```个数; -2. 对这```k```个数,利用选择或交换排序找到这k个元素中的最大值```kmax```(找最大值需要遍历这```k```个数,时间复杂度为```O(k))```; -3. 继续遍历剩余```n-k```个数。假设每一次遍历到的新的元素的值为```x```,把```x```与```kmax```比较:如果```x``` < ```kmax``` ,用```x```替换```kmax```,并回到第二步重新找出k个元素的数组中最大元素kmax‘;如果```x >= kmax```,则继续遍历不更新数组。 -每次遍历,更新或不更新数组的所用的时间为```O(k)```或```O(0)```。故整趟下来,时间复杂度为```n*O(k)=O(n*k)```。 -## 解法三 - -更好的办法是维护容量为k的最大堆,原理跟解法二的方法相似: -1. 用容量为```k```的最大堆存储最先遍历到的```k```个数,同样假设它们即是最小的```k```个数; -2. 堆中元素是有序的,令```k1 pivot ){ } - if( i < j ) - swap( &a[ i ], &a[ j ] ); - else - break; - } - //重置枢纽元 - swap( &a[ i ], &a[ right - 1 ] ); - - if( k <= i ) - QuickSelect( a, k, left, i - 1 ); - else if( k > i + 1 ) - QuickSelect( a, k, i + 1, right ); - } - else - InsertSort( a + left, right - left + 1 ); -} -``` -这个快速选择SELECT算法,类似快速排序的划分方法。N个数存储在数组S中,再从数组中选取“中位数的中位数”作为枢纽元X,把数组划分为Sa和Sb俩部分,Sa<=X<=Sb,如果要查找的k个元素小于Sa的元素个数,则返回Sa中较小的k个元素,否则返回Sa中所有元素+Sb中小的k-|Sa|个元素,这种解法在平均情况下能做到O(n)的复杂度。 -更进一步,《算法导论》第9章第9.3节介绍了一个最坏情况下亦为O(n)时间的SELECT算法,有兴趣的读者可以参看。 - -给定两个已经排序好的数组,求第k大的,算法有O(m+n).类似merge sort的原理。否则利用的就是之上提到的,利用已经有序的原理,然后每次丢。 - -之所以这里还有一个丢弃条件是b is None 丢A的一部分,是因为B的数组长度是有限的,这个时候很明显丢A的k/2是不影响的,因为无论B[-1]是如何大或者小,因为整个B的长度没有达到k/2小,所以丢掉的这部分最大的A[k/2-1]也不可能是第k个,因为即使整个B都比A[k/2-1]小,拼起来也不能使A[k/2-1]第k大,所以可以放心丢弃。 - - -这里是两个sorted list/array findKth,想到了类似的题目,如果给一个n个linked list,findKth,能想到的办法也只能是用heap吧,类似merge k sorted lists. - - -再写一个O(m+n)类似merge sort的也可以AC的代码 - -```python -class Solution(object): - def findMedianSortedArrays(self, nums1, nums2): - """ - :type nums1: List[int] - :type nums2: List[int] - :rtype: float - """ - def findKth(A, pa, B, pb, k): - res = 0 - m = 0 - while pa < len(A) and pb < len(B) and m < k: - if A[pa] < B[pb]: - res = A[pa] - m += 1 - pa += 1 - else: - res = B[pb] - m += 1 - pb += 1 - - while pa < len(A) and m < k: - res = A[pa] - pa += 1 - m += 1 - - - while pb < len(B) and m < k: - res = B[pb] - pb += 1 - m += 1 - return res - - n = len(nums1) + len(nums2) - if n % 2 == 1: - return findKth(nums1,0, nums2,0, n / 2 + 1) - else: - smaller = findKth(nums1,0, nums2,0, n / 2) - bigger = findKth(nums1,0, nums2,0, n / 2 + 1) - return (smaller + bigger) / 2.0 - -``` diff --git "a/docs/Leetcode_Solutions/Java/005._longest_palindromic_substring \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/005._longest_palindromic_substring \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index 14fd335f3..000000000 --- "a/docs/Leetcode_Solutions/Java/005._longest_palindromic_substring \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,241 +0,0 @@ -### 5. Longest Palindromic Substring - -题目: - -https://leetcode.com/problems/longest-palindromic-substring/ - -难度: - -Medium - - - -思路0: - -暴力解法绝对不行 - -思路1: - -所以一个好的想法是 s 和 reverse(s) 共有的最长的 substring就是longest palindromic substring -> 问题转成求Longest common substring problem - -参见wikipedia - -,典型动归 - -LCSuff(S1...p, T1...q) = LCS(S1...p1, T1...q-1) if S[p] = T[q] else 0 - - - -伪码也有了,代码也有: - -https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Longest_common_substring#Python_2 - -这样也超时? -```python - class Solution(object): - def longestPalindrome(self, s): - """ - :type s: str - :rtype: str - """ - def lcs(s1, s2): - m = [[0] * (1 + len(s2)) for i in xrange(1 + len(s1))] - longest, x_longest = 0, 0 - for x in xrange(1, 1 + len(s1)): - for y in xrange(1, 1 + len(s2)): - if s1[x - 1] == s2[y - 1]: - m[x][y] = m[x - 1][y - 1] + 1 - if m[x][y] > longest: - longest = m[x][y] - x_longest = x - else: - m[x][y] = 0 - return s1[x_longest - longest: x_longest] - - return lcs(s, s[::-1]) -``` -因为以为这样s[::-1]已经很快了. - -这个方法是buggy的,看字符串abcxgcba,它reverse之后是abcgxcba,它们有公共字符串,但是这里面没有回文,修复方式是: - -we check if the substring’s indices are the same as the reversed substring’s original indices. If it is, then we attempt to update the longest palindrome found so far; if not, we skip this and find the next candidate. - -我觉得的修复方式这样么: - - 原本 翻转 - ABXYBA ABYXBA - - 求出来的substring indices是 0:2 但是这个s1[0:2] 和 s2[0:2]一样,所以不行 - 同理common substring indices还是s[4:6] 和s2[4:6]一样,不行 - - 而比如ABAD和 DABA - - substring indice 一个是0:3, 一个是1:4,这样就没问题 - - - - -思路2: - - - -依次把每一个字符当做回文字符串的中间字符,找到以该字符为中间字符的回文串的最大长度。分别对奇偶的情况进行讨论,接下来的关键就是对边界的把握,确保下标不要越界。当子串已经包含首字符或最后一个字符且此时还是回文串的时候,下标分别会向两边多移一位,需要补回来。 - -参考https://shenjie1993.gitbooks.io/leetcode-python/content/005%20Longest%20Palindromic%20Substring.html -```python - class Solution(object): - def longestPalindrome(self, s): - """ - :type s: str - :rtype: str - """ - n = len(s) - - # empty or one char - if n < 2: - return s - - # left index of the target substring - l = 0 - # right index of the target substring - r = 0 - # length of the longest palindromic substring for now - m = 0 - # length of the current substring - c = 0 - - # Whether the substring contains the first character or last character and is palindromic - b = True - for i in range(n): - # Odd situation - for j in range(min(n-i,i+1)): - if s[i-j] != s [i+j]: - b = False - break - else: - c = 2 * j + 1 - - if c > m : - l = i - j + 1 - b - r = i + j + b - m = c - b = True - - # Even situation - for j in range(min(n - i - 1, i + 1)): - if (s[i - j] != s[i + j + 1]): - b = False - break - else: - c = 2 * j + 2 - if (c > m): - l = i - j + 1 - b - r = i + j + 1 + b - m = c - b = True - return s[l:r] -``` -以上是参考版本,自己写的版本: -```python - class Solution(object): - def longestPalindrome(self, s): - """ - :type s: str - :rtype: str - """ - n = len(s) - - m,l,r = 0,0,0 - - for i in range(n): - # odd case - for j in range(min(i+1,n-i)): - if s[i-j] != s[i+j]: - break - if 2*j + 1 > m : - m = 2 * j + 1 - l = i-j - r = i+j - - - if i+1 < n and s[i] == s[i+1]: - for j in range(min(i+1,n-i-1)): - if s[i-j] != s[i+j+1]: - break - if 2 * j + 2 > m : - m = 2*j +2 - l = i-j - r = i+j+1 - - - return s[l:r+1] -``` - - -思路3: - -[Manacher算法](https://www.felix021.com/blog/read.php?2040) - -Manacher算法增加两个辅助变量id和mx,其中id表示最大回文子串中心的位置,mx则为id+P[id],也就是最大回文子串的边界。得到一个很重要的结论: - -- 如果mx > i,那么P[i] >= Min(P[2 * id - i], mx - i) . 为什么这样说呢,下面解释 - -下面,令j = 2*id - i,也就是说j是i关于id的对称点。 - -- 当 mx - i > P[j] 的时候,以S[j]为中心的回文子串包含在以S[id]为中心的回文子串中,由于i和j对称,以S[i]为中心的回文子串必然包含在以S[id]为中心的回文子串中,所以必有P[i] = P[j]; -![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher1.png) - -- 当 P[j] >= mx - i 的时候,以S[j]为中心的回文子串不一定完全包含于以S[id]为中心的回文子串中,但是基于对称性可知,下图中两个绿框所包围的部分是相同的,也就是说以S[i]为中心的回文子串,其向右至少会扩张到mx的位置,也就是说 P[i] >= mx - i。至于mx之后的部分是否对称,再具体匹配。 -![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher2.png) -所以P[i] >= Min(P[2 * id - i], mx - i),因为以j为中心的绘回文子串的左边界可能会比mx关于id的对称点要大,此时只能证明P[i]=P[2 * id - i] -- 此外,对于 mx <= i 的情况,因为无法对 P[i]做更多的假设,只能让P[i] = 1,然后再去匹配。 - -在下面的程序中我的P数组保存的是,以当前字符为回文子串中心时,该回文子串的长度(不包含当前字符自身) - - -简单地用一个小例子来解释:原字符串为'qacbcaw',一眼就可以看出来最大回文子串是'acbca', -下面是我做的图,累shi了! - -![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher3.jpg) - - - -所以最终代码中的max_i就是字符'b'所对应的index8,start的值就是(max_i - P[max_i] - 1) / 2 = 1,最终输出结果为s[1:6],即‘acbca’ - -```python -class Solution(object): - def longestPalindrome(self, s): - """ - :type s: str - :rtype: str - """ - def preProcess(s): - if not s: - return ['^', '&'] - T = ['^'] - for i in s: - T += ['#', i] - T += ['#', '$'] - return T - T = preProcess(s) - P = [0] * len(T) - id, mx = 0, 0 - for i in range(1, len(T)-1): - j = 2 * id - i - if mx > i: - P[i] = min(P[j], mx-i) - else: - P[i]= 0 - while T[i+P[i]+1] == T[i-P[i]-1]: - P[i] += 1 - if i + P[i] > mx: - id, mx = i, i + P[i] - max_i = P.index(max(P)) #保存的是当前最大回文子串中心位置的index - start = (max_i - P[max_i] - 1) / 2 - res = s[start:start+P[max_i]] - return res -``` -run code的时候结果会跟expected不一样,但是该input确实2个结果都可以,所以放心地submit吧 -还可以转到[647题](https://github.com/Lisanaaa/thinking_in_lc/blob/master/647._Palindromic_Substrings.md)去看一看,也可以用这个算法解 - - diff --git "a/docs/Leetcode_Solutions/Java/006._ZigZag_Conversion \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/006._ZigZag_Conversion \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index cc7bcbe33..000000000 --- "a/docs/Leetcode_Solutions/Java/006._ZigZag_Conversion \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,67 +0,0 @@ -### 6. ZigZag Conversion - -题目: - - - -难度: - -Medium - - -思路 - -参考大神[pharrellyhy](https://leetcode.com/problems/zigzag-conversion/discuss/3404/Python-O(n)-Solution-in-96ms-(99.43)?page=2)的思路, -纵向思维考虑,```index```从```0```开始,我们要一直***自增***直到```numRows-1```,此后又一直***自减***到```0```,重复执行。 -给个例子容易懂一些:```s = “abcdefghijklmn”```, ```numRows = 4``` -``` -a g m -b f h l n -c e i k -d j -``` -看明白了吗,下来上去,下来上去,zigzag - - -```python -class Solution(object): - def convert(self, s, numRows): - """ - :type s: str - :type numRows: int - :rtype: str - """ - if numRows == 1 or numRows >= len(s): - return s - - L = [''] * numRows - index, step = 0, 1 - - for x in s: - L[index] += x - if index == 0: - step = 1 - elif index == numRows -1: - step = -1 - index += step - - return ''.join(L) -``` -假设用我上面给的例子,并且在```L[index] += x```这一行后面打印出index, step, L的值, 输出结果如下: -``` -(0, 1, ['a', '', '', '']) -(1, 1, ['a', 'b', '', '']) -(2, 1, ['a', 'b', 'c', '']) -(3, 1, ['a', 'b', 'c', 'd']) -(2, -1, ['a', 'b', 'ce', 'd']) -(1, -1, ['a', 'bf', 'ce', 'd']) -(0, -1, ['ag', 'bf', 'ce', 'd']) -(1, 1, ['ag', 'bfh', 'ce', 'd']) -(2, 1, ['ag', 'bfh', 'cei', 'd']) -(3, 1, ['ag', 'bfh', 'cei', 'dj']) -(2, -1, ['ag', 'bfh', 'ceik', 'dj']) -(1, -1, ['ag', 'bfhl', 'ceik', 'dj']) -(0, -1, ['agm', 'bfhl', 'ceik', 'dj']) -(1, 1, ['agm', 'bfhln', 'ceik', 'dj']) -``` - diff --git "a/docs/Leetcode_Solutions/Java/007._Reverse_Integer \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/007._Reverse_Integer \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index f4120c1ea..000000000 --- "a/docs/Leetcode_Solutions/Java/007._Reverse_Integer \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,65 +0,0 @@ -### 7. Reverse Integer - -题目: - - - -难度: - -Easy - - -思路 - -翻转数字问题需要注意的就是溢出问题,为什么会存在溢出问题呢,我们知道int型的数值范围是 -2147483648~2147483647(负的2的31次方~2的31次方-1), 那么如果我们要翻转 1000000009 这个在范围内的数得到 9000000001,而翻转后的数就超过了范围。 - -#### 解法1: -如果输入的是负数,就递归调用原函数,参数变成-x即可 - - -```python -class Solution(object): - def reverse(self, x): - """ - :type x: int - :rtype: int - """ - if x < 0: - return -self.reverse(-x) - res = 0 - while x: - res = res * 10 + x % 10 - x /= 10 - return res if res <= 0x7fffffff else 0 -``` -#### 解法2: -按照参数正负号先将其转成字符串,然后再反转,根据是否溢出决定输出0还是反转结果 -```python -class Solution(object): - def reverse(self, x): - """ - :type x: int - :rtype: int - """ -        x = -int(str(x)[::-1][:-1]) if x < 0 else int(str(x)[::-1]) # [:-1]相当于把负号去掉 -        x = 0 if abs(x) > 0x7FFFFFFF else x - return x -``` -#### 解法3(StefanPochmann大神): -看这个解法前先看[backticks](https://docs.python.org/2.7/reference/expressions.html#string-conversions) - - -cmp函数在python3.x中用不了了,import operator用gt或者lt吧,或者回归if/else condition爸爸的怀抱吧! -```python -class Solution(object): - def reverse(self, x): - """ - :type x: int - :rtype: int - """ - s = cmp(x, 0) - r = int(`s * x`[::-1]) - return s * r * (r < 2 ** 31) -``` - - diff --git "a/docs/Leetcode_Solutions/Java/008._string_to_integer_(atoi) \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/008._string_to_integer_(atoi) \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index 4ff1cddcf..000000000 --- "a/docs/Leetcode_Solutions/Java/008._string_to_integer_(atoi) \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,53 +0,0 @@ -### 8. String to Integer (atoi) - -题目: - - - -难度: -Medium - - -需要考虑比较多的边界条件&特殊情况 -1. 首先输入可能会有空格,所以先去掉空格 -2. 去掉空格后要考虑空字符串情况 -3. 字符串首位可能会有正负号,要考虑 -4. 开始转换成数字,题目说只要遇到非数字就可以break了 -5. 结果太大或者太小超过```int```限制就要返回特定数字 ```2147483647``` 或者 ```-2147483648``` -6. 根据之前的正负号结果返回对应数值 - - -```python -class Solution(object): - def myAtoi(self, str): - """ - :type str: str - :rtype: int - """ - str = str.strip() - strNum = 0 - if len(str) == 0: - return strNum - - positive = True - if str[0] == '+' or str[0] == '-': - if str[0] == '-': - positive = False - str = str[1:] - - for char in str: - if char >='0' and char <='9': - strNum = strNum * 10 + ord(char) - ord('0') - if char < '0' or char > '9': - break - - if strNum > 2147483647: - if positive == False: - return -2147483648 - else: - return 2147483647 - if not positive: - strNum = 0 - strNum - return strNum - -``` diff --git "a/docs/Leetcode_Solutions/Java/009._Palindrome_Number \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/009._Palindrome_Number \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index 8e14084f7..000000000 --- "a/docs/Leetcode_Solutions/Java/009._Palindrome_Number \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,31 +0,0 @@ -### 9. Palindrome Number - -题目: - - -难度: -Medium - - -- 首先负数肯定不是palindrome -- 其次如果一个数字是一个正数,并且能被我0整除那它肯定也不是palindrome - -这样降低了复杂度 - -```python -class Solution(object): - def isPalindrome(self, x): - """ - :type x: int - :rtype: bool - """ - if x < 0 or (x != 0 and x % 10 == 0): - return False - rev, y = 0, x - while x > 0: - rev = rev * 10 + x % 10 - x /= 10 - return y == rev - -``` - diff --git "a/docs/Leetcode_Solutions/Java/010._regular_expression_matching \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/010._regular_expression_matching \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index f3d51b109..000000000 --- "a/docs/Leetcode_Solutions/Java/010._regular_expression_matching \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,229 +0,0 @@ -### 010. Regular Expression Matching - -题目: - - - -难度: - -Hard - - - - -先尝试暴力解法,难点就在 * 身上, * 不会单独出现,它一定是和前面一个字母或"."配成一对。看成一对后"X*",它的性质就是:要不匹配0个,要不匹配连续的“X”.所以尝试暴力解法的时候一个trick是从后往前匹配. - - - -暴力解法居然也能AC? - -是这样来分情况看得: - -- 如果s[i] = p[j] 或者 p[j]= . : 往前匹配一位 -- 如果p[j] = ' * ', 检查一下,如果这个时候p[j-1] = . 或者p[j-1] = s[i] ,那么就往前匹配,如果这样能匹配过,就return True, 否者我们忽略 ' X* ',这里注意里面的递推关系 -- 再处理一下边界状况: - - s已经匹配完了, 如果此时p还有,那么如果剩下的是 X* 这种可以过,所以检查 - - p匹配完毕,如果s还有那么报错 - -```python -class Solution(object): - def isMatch(self, s, p): - """ - :type s: str - :type p: str - :rtype: bool - """ - def helper(s, i, p, j): - if j == -1: - return i == -1 - if i == -1: - if p[j] != '*': - return False - return helper(s, i, p, j-2) - if p[j] == '*': - if p[j-1] == '.' or p[j-1] == s[i]: - if helper(s, i-1, p, j): - return True - return helper(s, i, p, j-2) - if p[j] == '.' or p[j] == s[i]: - return helper(s, i-1, p, j-1) - return False - - return helper(s, len(s)-1, p, len(p)-1) -``` - - - ----------- - -dp优化,感觉和edit distance很像。 DP优化待代码化,感觉学DP的一个重点除了递归学好以外,另一点是一定要会画表格。 - - -画一个表格来看一下状况 - -``` - c * a * b - 0 1 2 3 4 5 - 0 1 0 1 0 1 0 -a 1 0 0 0 1 1 0 -a 2 0 0 0 0 1 0 -b 3 0 0 0 0 0 1 - -``` - -这里有几个取巧/容易出问题的敌方,这里画的表用的是1-based string。一上来,做的事包括: - -- 初始化,空字符匹配:dp[0][0] =1 -- 第一行,c* 可以匹配空字符,c* a* 可以匹配空字符,p[j-1] != s[i],匹配空字符 -- 然后进入第二行再来看,实际上我们可以看到,如果没有碰到 * 匹配还是很朴素的,但是碰到 * : - - 1这个匹配可以从左侧传来,dp[i][j] = dp[i][j-1],that is 匹配 1个 - - 1 也可以有上方传来,这种情况是p[j-1] = s[i],匹配多个 dp[i][j] = dp[i-1][j] - - 1 这个匹配也可以从间隔一个的左侧传来,that is也可以有个性的匹配0个,如同匹配空字符一样dp[i][j] = dp[i][j-2],但是注意匹配0个实际上有两种状况,如果p[j-1]!=s[i],强制匹配0个,即使p[j-1] == s[i],我们也可以傲娇的用它来匹配0个。 - -再代码化一点: - -- s[i] == p[j] 或者 p[j] == '.' : dp[i][j] = dp[i-1][j-1] -- p[j] == '*': 然后分几种情况 - - p[j-1] != s[i] : dp[i][j] = dp[i][j-2] 匹配0个的状况 - - p[j-1] == s[i] or p[i-1] == '.': - - dp[i][j] = dp[i-1][j] 匹配多个s[i] - - dp[i][j] = dp[i][j-2] 匹配0个 - -AC代码,注意一下,因为上表为了表达方便,用的是1-based string系统,实际写代码的时候我们心里还是清楚这个string还是从0开始的,不过也可以尝试往前面添东西来方便。 - - -AC代码 - -```python -class Solution(object): - def isMatch(self, s, p): - """ - :type s: str - :type p: str - :rtype: bool - """ - m, n = len(s), len(p) - dp = [ [0 for i in range(n+1)] for j in range(m+1)] - - dp[0][0] = 1 - - # init the first line - for i in range(2,n+1): - if p[i-1] == '*': - dp[0][i] = dp[0][i-2] - - for i in range(1,m+1): - for j in range(1,n+1): - if p[j-1] == '*': - if p[j-2] != s[i-1] and p[j-2] != '.': - dp[i][j] = dp[i][j-2] - elif p[j-2] == s[i-1] or p[j-2] == '.': - dp[i][j] = dp[i-1][j] or dp[i][j-2] - - elif s[i-1] == p[j-1] or p[j-1] == '.': - dp[i][j] = dp[i-1][j-1] - - return dp[m][n] == 1 -``` - -写个测试案例 -```python -import unittest -class Solution(object): - def isMatch(self, s, p): - """ - :type s: str - :type p: str - :rtype: bool - """ - m, n = len(s), len(p) - dp = [ [0 for i in range(n+1)] for j in range(m+1)] - - dp[0][0] = 1 - - # init the first line - for i in range(2,n+1): - if p[i-1] == '*': - dp[0][i] = dp[0][i-2] - - for i in range(1,m+1): - for j in range(1,n+1): - if p[j-1] == '*': - if p[j-2] != s[i-1] and p[j-2] != '.': - dp[i][j] = dp[i][j-2] - elif p[j-2] == s[i-1] or p[j-2] == '.': - dp[i][j] = dp[i-1][j] or dp[i][j-2] - - elif s[i-1] == p[j-1] or p[j-1] == '.': - dp[i][j] = dp[i-1][j-1] - - return dp[m][n] == 1 - - -class TestSolution(unittest.TestCase): - def test_none_0(self): - s = "" - p = "" - self.assertTrue(Solution().isMatch(s, p)) - - def test_none_1(self): - s = "" - p = "a" - self.assertFalse(Solution().isMatch(s, p)) - - def test_no_symbol_equal(self): - s = "abcd" - p = "abcd" - self.assertTrue(Solution().isMatch(s, p)) - - def test_no_symbol_not_equal_0(self): - s = "abcd" - p = "efgh" - self.assertFalse(Solution().isMatch(s, p)) - - def test_no_symbol_not_equal_1(self): - s = "ab" - p = "abb" - self.assertFalse(Solution().isMatch(s, p)) - - def test_symbol_0(self): - s = "" - p = "a*" - self.assertTrue(Solution().isMatch(s, p)) - - def test_symbol_1(self): - s = "a" - p = "ab*" - self.assertTrue(Solution().isMatch(s, p)) - - def test_symbol_2(self): - # E.g. - # s a b b - # p 1 0 0 0 - # a 0 1 0 0 - # b 0 0 1 0 - # * 0 1 1 1 - s = "abb" - p = "ab*" - self.assertTrue(Solution().isMatch(s, p)) - - -if __name__ == "__main__": - unittest.main() - - - -输出: -........ - -Ran 8 tests in 0.001s - -OK -``` - -参考: - - -[动态规划](https://hk029.gitbooks.io/leetbook/content/动态规划/010.%20Regular%20Expression%20Matching/010.%20Regular%20Expression%20Matching.html) - - diff --git "a/docs/Leetcode_Solutions/Java/011._container_with_most_water \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/011._container_with_most_water \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index 4fac0f11c..000000000 --- "a/docs/Leetcode_Solutions/Java/011._container_with_most_water \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,112 +0,0 @@ -### 11. Container With Most Water - - - -题目: - - - -难度: -Medium - -思路: - - -首先理解花了我一点时间,因为一开始写出来,给了一个例子: - -``` - -height = [3,2,1,3] -解是 9 - - -| | -| | | -| | | | -1 2 3 4 - - 一开始我的理解走偏的地方是这个9是如何得到的,因为根据最短板原理,明显不可能得到9啊,后来发现是·Find two lines, which together with x-axis forms a container, such that the container contains the most water. -``` - -所以代码写起来就简单了,AC无能,超时,时间复杂度O(N^2) - - -``` -class Solution(object): # 此法超时 - def maxArea(self, height): - """ - :type height: List[int] - :rtype: int - """ - n = len(height) - most_water = 0 - for i in range(n-1): - for j in range(i, n): - water = (j-i) * min(height[i], height[j]) - most_water = max(water, most_water) - return most_water - -``` - -题目给的tag是 two pointer,所以上边的策略肯定可以改进,改进的地方就不能是这个一次走一边,而可能是两边都要走。 - - - -参考 - - -思路: - -由于ai和aj (i=i, j'<=j) >= S(i,j)```,由于```j'-i' <= j-i```,必然要有```min(ai',aj')>=min(ai,aj)```才行。同样可以采用头尾双指针向中间移动: - -当```a(left) < a(right)```时,对任何```j S(left, j a(right)时,需要左移right`。 - -`而当a(left) = a(right)时,需要同时移动left和right。` - -思路整理: -left = 0, right = n-1 -1. a[left] < a[right], left++ -2. a[left] > a[right], right-- -3. a[left] = a[right], left++, right-- -终止条件:left >= right - -这个证明大快人心 - - -这样写也能过: - - -```python -class Solution(object): - def maxArea(self, height): - """ - :type height: List[int] - :rtype: int - """ - n = len(height) - left, right = 0, n-1 - most_water = 0 - while left <= right: - water = (right - left) * min(height[left], height[right]) - most_water = max(water, most_water) - if height[left] < height[right]: - left += 1 - elif height[left] > height[right]: - right -= 1 - else: - left += 1 - right -= 1 - return most_water - -``` diff --git "a/docs/Leetcode_Solutions/Java/012._Integer_to_Roman \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/012._Integer_to_Roman \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index 6177e3322..000000000 --- "a/docs/Leetcode_Solutions/Java/012._Integer_to_Roman \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,71 +0,0 @@ -### 12. Integer to Roman - - -题目: - - - -难度: -Medium - -思路: - -首先我学习了一下罗马字母是如何表示的。然后感慨,这个阿拉伯数字是多么好的发明 - - - -上图 - - - -基于的是这些个Symbol: - -``` -1 5 10 50 100 500 1000 -I V X L C D M -``` - - - -罗马数字表示法见[Leetcode 013](https://github.com/Lisanaaa/thinking_in_lc/blob/master/013._Roman_to_Integer.md) - -这里有一个很棒的[算法](https://gist.github.com/imilu/00f32c61e50b7ca296f91e9d96d8e976) - -AC代码 - -```python -class Solution(object): - def intToRoman(self, num): - """ - :type num: int - :rtype: str - """ - lookup = { - 'M': 1000, - 'CM': 900, - 'D': 500, - 'CD': 400, - 'C': 100, - 'XC': 90, - 'L': 50, - 'XL': 40, - 'X': 10, - 'IX': 9, - 'V': 5, - 'IV': 4, - 'I': 1 - } - romanStr = '' - - for symbol, val in sorted(lookup.items(), key = lambda t: t[1], reverse = True): - while num >= val: - romanStr += symbol - num -= val - return romanStr -``` - - - - - -因为dict本身是无序的,这里做了一个排序的操作,否则可能会出现IIII这种状况。 diff --git "a/docs/Leetcode_Solutions/Java/013._Roman_to_Integer \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/013._Roman_to_Integer \344\270\212\345\215\2102.49.12.md" deleted file mode 100644 index 4f1184b8a..000000000 --- "a/docs/Leetcode_Solutions/Java/013._Roman_to_Integer \344\270\212\345\215\2102.49.12.md" +++ /dev/null @@ -1,82 +0,0 @@ -### 13.Roman to Integer - - - -题目: - - -难度: -Easy - -思路: - - -``` -罗马数字是最古老的数字表示方式,比阿拉伯数组早2000多年,起源于罗马 - -罗马数字有如下符号: - -基本字符 I V X L C D M -对应阿拉伯数字 1 5 10 50 100 500 1000 - -计数规则: -- 相同的数字连写,所表示的数等于这些数字相加得到的数,例如:III = 3 -- 小的数字在大的数字右边,所表示的数等于这些数字相加得到的数,例如:VIII = 8 -- 小的数字,限于(I、X和C)在大的数字左边,所表示的数等于大数减去小数所得的数,例如:IV = 4,这条规则好像这题不管 -- 正常使用时,连续的数字重复不得超过三次 -- 在一个数的上面画横线,表示这个数扩大1000倍(本题只考虑3999以内的数,所以用不到这条规则) -- 从前向后遍历罗马数字,如果某个数比前一个数小,则加上该数。反之,减去前一个数的两倍然后加上该数 -``` - - - -integer to Roman 是 Medium,这个roman to integer是easy - - -- 从前往后扫描,用一个临时变量记录分段数字。 -- 如果当前比前一个大,说明这一段的值应当是这个值减去上一个值。比如IV = 5-1 =4; 否则,将当前值加入到结果中,然后开始下一段记录,比如VI = 5 + 1, II = 1 +1 - - -所以这也就是罗马数字的基础,感觉?这样才不会读串? - - - -AC代码 - -```python -class Solution(object): - def romanToInt(self, s): - """ - :type s: str - :rtype: int - """ - lookup = { - 'M': 1000, - 'D': 500, - 'C': 100, - 'L': 50, - 'X': 10, - 'V': 5, - 'I': 1 - } - res = 0 - for i in range(len(s)): - if i > 0 and lookup[s[i]] > lookup[s[i-1]]: - res = res + lookup[s[i]] - 2 * lookup[s[i-1]] - else: - res += lookup[s[i]] - return res -``` -或者甚至可以建立一个新函数用于取对应数值: -``` - def table(x): - return { - 'I':1, - 'V':5, - 'X':10, - 'L':50, - 'C':100, - 'D':500, - 'M':1000 - }.get(x) -``` diff --git "a/docs/Leetcode_Solutions/Java/014._longest_common_prefix \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/014._longest_common_prefix \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a64997ef1..000000000 --- "a/docs/Leetcode_Solutions/Java/014._longest_common_prefix \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,77 +0,0 @@ -### 14. Longest Common Prefix - - -题目: - - - -难度: - -Easy - - -思路: - -#### 解法1: -以一个小例子来解释,strs=['laa', 'lab', 'lac'], 如果存在LCP的话它肯定就在第一个字符串strs[0]中,并且LCP的长度肯定不会大于strs[0]的长度 -- 依次假设LCP长度为0到len(strs[0]),在每一轮循环中: -   -- 1. 只要strs中存在比当前长度i更短的string,立刻返回上一轮LCP,即strs[0][:i] - 2. 只要strs中存在当前index字符与LCP该index不相同的字符串,立刻返回上一轮LCP,即strs[0][:i] -- 如果一直没返回,说明strs[0]本身就是LCP,返回它 - - -``` -class Solution(object): - def longestCommonPrefix(self, strs): - """ - :type strs: List[str] - :rtype: str - """ - if not strs: - return "" - for i in range(len(strs[0])): - for str in strs: - if len(str) <= i or strs[0][i] != str[i]: - return strs[0][:i] - return strs[0] - -``` - -#### 解法2: -- dp[i]代表前i+1个字符串的最大前缀串, -- 如果第i+2个字符串不以dp[i]为前缀,就去掉dp[i]的最后一个字符再试一次 -- 都去完了那么dp[i+1]肯定就是空串了,也就等于这时候的dp[i],因为dp[i]的每个字符已经被去完了 -```python -class Solution(object): - def longestCommonPrefix(self, strs): - """ - :type strs: List[str] - :rtype: str - """ - if not strs: - return '' - dp = [strs[0]]*len(strs) - for i in range(1,len(strs)): - while not strs[i].startswith(dp[i-1]): - dp[i-1] = dp[i-1][:-1] - dp[i] = dp[i-1] - return dp[-1] -``` - - - - - - - -python无敌啊!!!有没有天理啊,手动滑稽😏😏😏😏!一行解法: -```python -class Solution(object): - def longestCommonPrefix(self, strs): - """ - :type strs: List[str] - :rtype: str - """ - return os.path.commonprefix(strs) -``` diff --git "a/docs/Leetcode_Solutions/Java/015._3sum \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/015._3sum \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 9f962f9e2..000000000 --- "a/docs/Leetcode_Solutions/Java/015._3sum \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,106 +0,0 @@ -### 15. 3Sum - -题目: - - - -难度: - -Medium - - -第一想法,先把nums排序,用三个loop,无法AC - -``` -class Solution(object): - def threeSum(self, nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - n = len(nums) - res = [] - nums.sort() - for i in range(n): - for j in range(i,n): - for k in range(j,n): - if nums[i] + nums[j] + nums[k] == 0 and j != i and k != j and k != i: - curRes = [nums[i],nums[j],nums[k]] - if curRes not in res: - res.append(curRes) - - return res -``` - - -然后查了一下2sum,用2sum的花样,因为要排除重复以及输出是按照从小到大的输出:但是还是超时 - - -``` -class Solution(object): # 此法也超时 -    def threeSum(self, nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - def twoSum(nums, target): - """ - :type nums: List[int] - :type target: int - :rtype: List[int] - """ - lookup = {} - for num in nums: - if target - num in lookup: - if (-target ,target - num, num) not in res: - res.append((-target ,target - num, num)) - lookup[num] = target - num - - n = len(nums) - nums.sort() - res = [] - for i in range(n): - twoSum(nums[i+1:], 0-nums[i]) - return [list(i) for i in res] -``` - - -谷歌看别人的代码,思路非常清晰的,运行起来比直接调用 Two Sum快. - -清晰的思路: - -- 排序 -- 固定左边,如果左边重复,继续 -- 左右弄边界,去重,针对不同的左右边界情况处理 - - -```python -class Solution(object): - def threeSum(self, nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - n, res = len(nums), [] - nums.sort() - for i in range(n): - if i > 0 and nums[i] == nums[i-1]: # 因为i=0这个元素会直接往下执行 - continue - l, r = i+1, n-1 - while l < r: - tmp = nums[i] + nums[l] + nums[r] - if tmp == 0: - res.append([nums[i], nums[l], nums[r]]) - l += 1 - r -= 1 - while l < r and nums[l] == nums[l-1]: - l += 1 - while l < r and nums[r] == nums[r+1]: - r -= 1 - elif tmp > 0: - r -= 1 - else: - l += 1 - return res -``` - diff --git "a/docs/Leetcode_Solutions/Java/016._3sum_closest \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/016._3sum_closest \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 96b012ad2..000000000 --- "a/docs/Leetcode_Solutions/Java/016._3sum_closest \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,51 +0,0 @@ -### 16. 3Sum Closest - -题目: - - - -难度: - -Medium - - -思路: -跟3 Sum一样,固定一个元素 - -用两个指针来循环 - - -```python -class Solution(object): - def threeSumClosest(self, nums, target): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - n, res, diff = len(nums), None, float('inf') - nums.sort() - for i in range(n): - if i > 0 and nums[i] == nums[i-1]: - continue - l, r = i+1, n-1 - while l < r: - tmp = nums[i] + nums[l] + nums[r] - if tmp == target: - return target - elif tmp > target: - r -= 1 - if abs(tmp-target) < diff: - diff = abs(tmp-target) - res = tmp - while l < r and nums[r] == nums[r+1]: - r -= 1 - else: - l += 1 - if abs(tmp-target) < diff: - diff = abs(tmp-target) - res = tmp - while l < r and nums[l] == nums[l-1]: - l += 1 - return res - -``` diff --git "a/docs/Leetcode_Solutions/Java/017._letter_combinations_of_a_phone_number \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/017._letter_combinations_of_a_phone_number \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e951ad85d..000000000 --- "a/docs/Leetcode_Solutions/Java/017._letter_combinations_of_a_phone_number \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,51 +0,0 @@ -### 17. Letter Combinations of a Phone Number - -题目: - - - - -难度: - -Medium - - -思路: - - - hash table一个,用来对应digit -> letter - - s用来记录结果,每次从digits里面去一个,然后寻找其可能的char,加到s中,digits长度减小 - - digits长度为0时候,把它加入结果 - - - -```python -class Solution(object): - def letterCombinations(self, digits): - """ - :type digits: str - :rtype: List[str] - """ - if digits == '': - return [] - self.res = [] - self.singleResult('', digits) - return self.res - - def singleResult(self, s, digits): - if len(digits) == 0: - self.res.append(s) - else: - mapx = {'2':['a','b','c'], - '3':['d','e','f'], - '4':['g','h','i'], - '5':['j','k','l'], - '6':['m','n','o'], - '7':['p','q','r','s'], - '8':['t','u','v'], - '9':['w','x','y','z']} - cur_digit = digits[0] - for c in mapx[cur_digit]: - self.singleResult(s+c, digits[1:]) -``` - - diff --git "a/docs/Leetcode_Solutions/Java/018._4sum \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/018._4sum \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index ba6862056..000000000 --- "a/docs/Leetcode_Solutions/Java/018._4sum \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,136 +0,0 @@ -### 18. 4Sum - -题目: - - - -难度: - -Medium - - -思路: - -用3sum改 - -固定两个数,活动别的 - - -```python -class Solution(object): - def fourSum(self, nums, target): - """ - :type nums: List[int] - :type target: int - :rtype: List[List[int]] - """ - n = len(nums) - nums.sort() - res = [] - for i in range(n): - for j in range(i+1,n): - l, r = j+1, n-1 - while l < r: - temp = nums[i] + nums[j] + nums[l] + nums[r] - if temp == target: - if [nums[i],nums[j],nums[l],nums[r]] not in ans: - ans.append([nums[i],nums[j],nums[l],nums[r]]) - l += 1 - r -= 1 - elif temp > target: - r -= 1 - else: - l+=1 - return ans -``` - -可以通过加判断条件,前后数字相等可以直接跳过,使得算法更快 - - -```python -class Solution(object): - def fourSum(self, nums, target): - """ - :type nums: List[int] - :type target: int - :rtype: List[List[int]] - """ - n, res = len(nums), [] - nums.sort() - for i in range(n): - if i > 0 and nums[i] == nums[i-1]: # 因为i=0这个元素会直接往下执行 - continue - for j in range(i+1, n): - if j > i+1 and nums[j] == nums[j-1]: # 因为j=i+1这个元素会直接往下执行 - continue - l, r = j+1, n-1 - while l < r: - tmp = nums[i] + nums[j] + nums[l] + nums[r] - if tmp == target: - res.append([nums[i], nums[j], nums[l], nums[r]]) - l += 1 - r -= 1 - while l < r and nums[l] == nums[l-1]: - l += 1 - while l < r and nums[r] == nums[r+1]: - r -= 1 - elif tmp > target: - r -= 1 - else: - l += 1 - return res - -``` - -还可以再用一些判断来加速,比如枚举第一个数的时候 - -- nums[i] + nums[i + 1] + nums[i + 2] + nums[i + 3] > target: break -这是当前能凑齐的最小的4个数,比target后面都不用做了 -- nums[i] + nums[n – 3] + nums[n – 2] + nums[n – 1] < target: continue -这是当前凑齐的最大的4个数,比target小,说明第一个数不够大 - -参考 - - - - -```python -class Solution(object): - def fourSum(self, nums, target): - """ - :type nums: List[int] - :type target: int - :rtype: List[List[int]] - """ - n, res = len(nums), [] - nums.sort() - for i in range(n): - if i > 0 and nums[i] == nums[i-1]: # 因为i=0这个元素会直接往下执行 - continue - if i+3 <= n-1: - if nums[i] + nums[i+1] + nums[i+2] + nums[i+3] > target: - break - if i < n-3: - if nums[i] + nums[n-3] + nums[n-2] + nums[n-1] < target: - continue - for j in range(i+1, n): - if j > i+1 and nums[j] == nums[j-1]: # 因为j=i+1这个元素会直接往下执行 - continue - l, r = j+1, n-1 - while l < r: - tmp = nums[i] + nums[j] + nums[l] + nums[r] - if tmp == target: - res.append([nums[i], nums[j], nums[l], nums[r]]) - l += 1 - r -= 1 - while l < r and nums[l] == nums[l-1]: - l += 1 - while l < r and nums[r] == nums[r+1]: - r -= 1 - elif tmp > target: - r -= 1 - else: - l += 1 - return res - -``` diff --git "a/docs/Leetcode_Solutions/Java/019._remove_nth_node_from_end_of_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/019._remove_nth_node_from_end_of_list \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 5bdefb7a0..000000000 --- "a/docs/Leetcode_Solutions/Java/019._remove_nth_node_from_end_of_list \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,42 +0,0 @@ -### 19. Remove Nth Node From End of List - -题目: - - - - -难度: Medium - - -AC击败了95.80%的Python用户,技巧 dummy head 和双指针。 - -切记最后要返回```dummy.next```而不是```head```,因为有这样一种情况,删掉节点后```linked list```空了,那返回```head```的话结果显然不同。如: -输入链表为```[1]```, ```n = 1```, 应该返回```None```而不是```[1]``` - -```python -class Solution(object): - def removeNthFromEnd(self, head, n): - """ - :type head: ListNode - :type n: int - :rtype: ListNode - """ - dummy = ListNode(-1) - dummy.next = head - p, q = dummy, dummy - - for i in range(n): - q = q.next - - while q.next: - p = p.next - q = q.next - - p.next = p.next.next - return dummy.next - -``` - - - - diff --git "a/docs/Leetcode_Solutions/Java/020._valid_parentheses \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/020._valid_parentheses \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 3b008ac91..000000000 --- "a/docs/Leetcode_Solutions/Java/020._valid_parentheses \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,52 +0,0 @@ -### 20. Valid Parentheses - -题目: - - - - -难度: - -Easy - - -### 思路: - -因为一共只有三种状况"(" -> ")", "[" -> "]", "{" -> "}". - -一遇到左括号就入栈,右括号出栈,这样来寻找对应 - -需要检查几件事: - -- 出现右括号时stack里还有没有东西 -- 出stack时是否对应 -- 最终stack是否为空 - - - -```python -class Solution(object): - def isValid(self, s): - """ - :type s: str - :rtype: bool - """ - leftP = '([{' - rightP = ')]}' - stack = [] - for char in s: - if char in leftP: - stack.append(char) - if char in rightP: - if not stack: - return False - tmp = stack.pop() - if char == ')' and tmp != '(': - return False - if char == ']' and tmp != '[': - return False - if char == '}' and tmp != '{': - return False - return stack == [] -``` - diff --git "a/docs/Leetcode_Solutions/Java/021._merge_two_sorted_lists \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/021._merge_two_sorted_lists \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 40517726c..000000000 --- "a/docs/Leetcode_Solutions/Java/021._merge_two_sorted_lists \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,48 +0,0 @@ -### 21. Merge Two Sorted Lists - -题目: - - - - -难度: Easy - - -同样适用dummy head - -```python -class Solution(object): - def mergeTwoLists(self, l1, l2): - """ - :type l1: ListNode - :type l2: ListNode - :rtype: ListNode - """ - if l1 == None: - return l2 - if l2 == None: - return l1 - - dummy = ListNode(-1) - cur = dummy - - while l1 and l2: - if l1.val < l2.val: - cur.next = l1 - l1 = l1.next - else: - cur.next = l2 - l2 = l2.next - cur = cur.next - - if l1: - cur.next = l1 - else: - cur.next = l2 - return dummy.next - -``` - - - - diff --git "a/docs/Leetcode_Solutions/Java/022._generate_parentheses \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/022._generate_parentheses \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index ae14c9089..000000000 --- "a/docs/Leetcode_Solutions/Java/022._generate_parentheses \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,88 +0,0 @@ -### 22. Generate Parentheses - -题目: - - - -难度: - -Medium - - - - - -```python -class Solution(object): - def generateParenthesis(self,n): - """ - :type n: int - :rtype: List[str] - """ - self.res = [] - self.singleStr('', 0, 0, n) - return self.res - - def singleStr(self, s, left, right, n): - if left == n and right == n: - self.res.append(s) - if left < n: - self.singleStr(s + '(',left + 1, right,n) - if right < left: - self.singleStr(s + ')',left, right + 1, n) - -``` - - -非常牛逼的讲解,需要这样的人来给我们讲算法 - -####以Generate Parentheses为例,backtrack的题到底该怎么去思考? - - -所谓Backtracking都是这样的思路:在当前局面下,你有若干种选择。那么尝试每一种选择。如果已经发现某种选择肯定不行(因为违反了某些限定条件),就返回;如果某种选择试到最后发现是正确解,就将其加入解集 - -所以你思考递归题时,只要明确三点就行:选择 (Options),限制 (Restraints),结束条件 (Termination)。即“ORT原则”(这个是我自己编的) - - - - -对于这道题,在任何时刻,你都有两种选择: -1. 加左括号。 -2. 加右括号。 - -同时有以下限制: -1. 如果左括号已经用完了,则不能再加左括号了。 -2. 如果已经出现的右括号和左括号一样多,则不能再加右括号了。因为那样的话新加入的右括号一定无法匹配。 - -结束条件是: -左右括号都已经用完。 - -结束后的正确性: -左右括号用完以后,一定是正确解。因为1. 左右括号一样多,2. 每个右括号都一定有与之配对的左括号。因此一旦结束就可以加入解集(有时也可能出现结束以后不一定是正确解的情况,这时要多一步判断)。 - -递归函数传入参数: -限制和结束条件中有“用完”和“一样多”字样,因此你需要知道左右括号的数目。 -当然你还需要知道当前局面sublist和解集res。 - -因此,把上面的思路拼起来就是代码: - - if (左右括号都已用完) { - 加入解集,返回 - } - //否则开始试各种选择 - if (还有左括号可以用) { - 加一个左括号,继续递归 - } - if (右括号小于左括号) { - 加一个右括号,继续递归 - } - - - -你帖的那段代码逻辑中加了一条限制:“3. 是否还有右括号剩余。如有才加右括号”。这是合理的。不过对于这道题,如果满足限制1、2时,3一定自动满足,所以可以不判断3。 - -这题其实是最好的backtracking初学练习之一,因为ORT三者都非常简单明显。你不妨按上述思路再梳理一遍,还有问题的话再说。 - - - -以上文字来自 1point3arces的牛人解答 diff --git "a/docs/Leetcode_Solutions/Java/023._merge_k_sorted_lists \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/023._merge_k_sorted_lists \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 9cd97355c..000000000 --- "a/docs/Leetcode_Solutions/Java/023._merge_k_sorted_lists \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,46 +0,0 @@ -### 23. Merge k Sorted Lists - - - -题目: - - - -难度: -Hard - -思路: - -看到思路有heap,similar question有ugly number|| -> 这个是用heapq来解决的 - -那么就用heap吧? heapsort - -最简单的做法是只要每个list里面还有node,就把他们扔到minheap里面去,然后再把minheap pop,一个一个node连起来,听起来时间复杂度和空间复杂度都蛮高的。 -直接merge必然是不好的,因为没有利用有序这个点,应该做的是每次取来一个,然后再把应该的下一个放入 - -写到这里瞬间明白和ugly number ii像的点了,甚至感觉跟find in sorted matrix ii也像 - -```python -class Solution(object): - def mergeKLists(self, lists): - """ - :type lists: List[ListNode] - :rtype: ListNode - """ - import heapq - h = [] - for lst_head in lists: - if lst_head: - heapq.heappush(h, (lst_head.val, lst_head)) - cur = ListNode(-1) - dummy = cur - while h: - smallest_node = heapq.heappop(h)[1] - cur.next = smallest_node - cur = cur.next - if smallest_node.next: - heapq.heappush(h, (smallest_node.next.val, smallest_node.next)) - return dummy.next -``` - -当然还像merge two sorted list diff --git "a/docs/Leetcode_Solutions/Java/024._swap_nodes_in_pairs \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/024._swap_nodes_in_pairs \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 907744af1..000000000 --- "a/docs/Leetcode_Solutions/Java/024._swap_nodes_in_pairs \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,35 +0,0 @@ -###24. Swap Nodes in Pairs - -题目: - - - -难度 : Easy - -看了hint,用loop做,每个node关系要弄清楚 - - -``` - -class Solution(object): - def swapPairs(self, head): - """ - :type head: ListNode - :rtype: ListNode - """ - if head == None or head.next == None: - return head - - dummy = ListNode(-1) - dummy.next = head - - cur = dummy - - while cur.next and cur.next.next: - next_one, next_two, next_three = cur.next, cur.next.next, cur.next.next.next - cur.next = next_two - next_two.next = next_one - next_one.next = next_three - cur = next_one - return dummy.next -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/026._Remove_Duplicates_from_Sorted_Array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/026._Remove_Duplicates_from_Sorted_Array \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 23b43561c..000000000 --- "a/docs/Leetcode_Solutions/Java/026._Remove_Duplicates_from_Sorted_Array \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,73 +0,0 @@ -### 26. Remove Duplicates from Sorted Array - - - -题目: - - - -难度: -Easy - -思路: -因为题目说了是```sorted array```,所以只需要不停判断当前位置值和下一位置是否相等,若相等则```pop掉当前值```,否则```move```到下一位置做重复判断 - - -```python -class Solution(object): - def removeDuplicates(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - i = 0 - while i < (len(nums) - 1): - if nums[i] == nums[i+1]: - nums.remove(nums[i]) - else: - i += 1 - return len(nums) -``` - - -这里代码用```while loop```而不用```for loop```是因为```pop```操作之后```nums```的长度会变化 - -如:```for i in range(len(nums)-1)```实际上固定了```range```里面的值了,不会二次判断 - -``` -n = 10 -for i in range(n): - n = n - 1 # 尽管n在变化 - print(i) - -上面这段代码的输出结果为: - -0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -``` - - - - - - - - - - - - - - - - - - diff --git "a/docs/Leetcode_Solutions/Java/027._Remove_Element \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/027._Remove_Element \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 3603a5b3d..000000000 --- "a/docs/Leetcode_Solutions/Java/027._Remove_Element \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,25 +0,0 @@ -### 27. Remove Element - - - -题目: - - - -难度: -Easy - -瞬秒 - -```python -class Solution(object): - def removeElement(self, nums, val): - """ - :type nums: List[int] - :type val: int - :rtype: int - """ - while val in nums: - nums.remove(val) - return len(nums) -``` diff --git "a/docs/Leetcode_Solutions/Java/028._implement_strstr() \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/028._implement_strstr() \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index cecd6a5e5..000000000 --- "a/docs/Leetcode_Solutions/Java/028._implement_strstr() \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,47 +0,0 @@ -### 28. Implement strStr() - -题目: - - - - -难度: - -Easy - - -一行解法如何? -```python -class Solution(object): - def strStr(self, haystack, needle): - """ - :type haystack: str - :type needle: str - :rtype: int - """ - return haystack.find(needle) -``` - - -这个题目其实可以引来一大类,那就是关于string的算法,但是此处先用暴力算法来AC,然后再来细读/品味别的string相关算法吧。 - -虽然是暴力算法,但是也不容易写对啊 -```python -class Solution(object): - def strStr(self, haystack, needle): - """ - :type haystack: str - :type needle: str - :rtype: int - """ - if not needle: - return 0 - for i in xrange(len(haystack) - len(needle) + 1): - if haystack[i] == needle[0]: - j = 1 - while j < len(needle) and haystack[i+j] == needle[j]: - j += 1 - if j == len(needle): - return i - return -1 -``` diff --git "a/docs/Leetcode_Solutions/Java/030._Substring_with_Concatenation_of_All_Words \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/030._Substring_with_Concatenation_of_All_Words \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 0dd9eea26..000000000 --- "a/docs/Leetcode_Solutions/Java/030._Substring_with_Concatenation_of_All_Words \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,54 +0,0 @@ -### 30. Substring with Concatenation of All Words - -题目: - - - -难度 : Hard - - - -```python -class Solution(object): - def findSubstring(self, s, words): - """ - :type s: str - :type words: List[str] - :rtype: List[int] - """ - res = [] - if len(words) == 0 or len(s) < len(words) * len(words[0]): - return res - n, m, wl = len(s), len(words), len(words[0]) - maps, cur_map = {}, {} - maps = collections.Counter(words) - for i in range(wl): - count, start, r = 0, i, i - while r + wl <= n: - string = s[r:r+wl] - if string in maps: - cur_map[string] = cur_map.get(string, 0) + 1 - if cur_map[string] <= maps[string]: - count += 1 - while cur_map[string] > maps[string]: - tmp = s[start:start+wl] - cur_map[tmp] -= 1 - start += wl - if cur_map[tmp] < maps[tmp]: - count -= 1 - if count == m: - res.append(start) - tmp = s[start:start+wl] - cur_map[tmp] -= 1 - start += wl - count -= 1 - else: - cur_map = {} - count = 0 - start = r + wl - r += wl - cur_map = {} - return res - - -``` diff --git "a/docs/Leetcode_Solutions/Java/031._next_permutation \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/031._next_permutation \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 69d810cb1..000000000 --- "a/docs/Leetcode_Solutions/Java/031._next_permutation \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,103 +0,0 @@ - -### 31. Next Permutation - - -题目: - - - -难度: - -Medium - -参照wikipedia: - - - -首先,关于什么是全排列不做解释。如果一个排列为A,下一个排列为A_NEXT,那么A_NEXT一定与A有尽可能长的公共前缀。 - -看具体例子,一个排列为124653,如何找到它的下一个排列,因为下一个排列一定与124653有尽可能长的前缀,所以,脑洞大开一下,从后面往前看这个序列,如果后面的若干个数字有下一个排列,问题就得到了解决。 - -第一步:找最后面1个数字的下一个全排列。 - -124653,显然最后1个数字3不具有下一个全排列。 - -第二步:找最后面2个数字的下一个全排列。 - -124653,显然最后2个数字53不具有下一个全排列。 - -第三步:找最后面3个数字的下一个全排列。 - -124653,显然最后3个数字653不具有下一个全排列。 - - -------插曲:到这里相信大家已经看出来,如果一个序列是递减的,那么它不具有下一个排列。 - - -第四步:找最后面4个数字的下一个全排列。 - -124653,我们发现显然最后4个数字4653具有下一个全排列。因为它不是递减的,例如6453,5643这些排列都在4653的后面。 - - -我们总结上面的操作,并总结出重复上面操作的两种终止情况: - -1:从后向前比较相邻的两个元素,直到前一个元素小于后一个元素,停止 - -2:如果已经没有了前一个元素,则说明这个排列是递减的,所以这个排列是没有下一个排列的。 - - -124653这个排列终止情况是上面介绍的第一种,从后向前比较相邻的2个元素,遇到4<6的情况停止。 - -并且我们可以知道: - -1:124653和它的下一个排列的公共前缀为12(因为4653存在下一个排列,所以前面的数字12保持不变) - -2:4后面的元素是递减的(上面介绍的终止条件是前一个元素小于后一个元素,这里是4<6) - - -现在,我们开始考虑如何找到4653的下个排列,首先明确4后面的几个数字中至少有一个大于4. - -4肯定要和653这3个数字中大于4的数字中(6,5)的某一个进行交换。这里就是4要和6,5中的某一个交换,很明显要和5交换,如果找到这样的元素呢,因为我们知道4后面的元素是递减的,所以在653中从后面往前查找,找到第一个大于4的数字,这就是需要和4进行交换的数字。这里我们找到了5,交换之后得到的临时序列为5643.,交换后得到的643也是一个递减序列。 - - -所以得到的4653的下一个临时序列为5643,但是既然前面数字变大了(4653--->5643),后面的自然要变为升序才行,变换5643得到5346. - -所以124653的下一个序列为125346. - -看一个permutation,比如 - -125430 - - -- 从末尾开始,找到decreasing subsequence,5430,因为来调5330无论怎么调,都不可能有比它更小的,数也被自然的分成两部分(1,2) 和 (5,4,3,0) -- 下一步是找这个sequence里面第一个比前面部分,比2大的,3,也很容易理解,因为下一个必定是(1,3)打头 -- 交换 3和2 ,变成 (1,3,5,4,2,0),再把后面的部分reverse,得到后面部分可得到的最小的 - -这个时候,得到下一个sequence 130245 - -AC 代码 - -```python -class Solution(object): - def nextPermutation(self, nums): - """ - :type nums: List[int] - :rtype: void Do not return anything, modify nums in-place instead. - """ - if len(nums) <= 1: - return - idx = 0 - for i in range(len(nums)-1, 0, -1): - if nums[i] > nums[i-1]: # find first number which is smaller than it's after number - idx = i - break - if idx != 0: # if the number exist,which means that the nums not like{5,4,3,2,1} - for i in range(len(nums)-1, idx-1, -1): - if nums[i] > nums[idx-1]: - nums[i], nums[idx-1] = nums[idx-1], nums[i] - break - - nums[idx:] = nums[idx:][::-1] -``` - - diff --git "a/docs/Leetcode_Solutions/Java/033._search_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/033._search_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index c2e6eb74c..000000000 --- "a/docs/Leetcode_Solutions/Java/033._search_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,53 +0,0 @@ -### 33. Search in Rotated Sorted Array - -题目: - - - -难度: -Medium - - -思路: - - - -下面是rotated-array图解, - -![rotated-array图解](https://github.com/Lisanaaa/myTODOs/blob/master/rotated-array12:09:2017.jpg) - - -所以直接用二分,O(lg(n)) -- 如果是mid,return mid -- 如果mid在绿色线上,就对绿色线进行二分 -- 如果mid在红色线上,就对红色线进行二分 -- 都没找到,return -1 - - -```python -class Solution(object): - def search(self, nums, target): - """ - :type nums: List[int] - :type target: int - :rtype: int - """ - l, r = 0, len(nums) - 1 - while l <= r: - mid = l + ((r - l) >> 2) - if nums[mid] == target: - return mid - if nums[mid] < nums[r]: - if nums[mid] < target <= nums[r]: - l = mid + 1 - else: - r = mid - 1 - else: - if nums[l] <= target < nums[mid]: - r = mid - 1 - else: - l = mid + 1 - return -1 -``` - - diff --git "a/docs/Leetcode_Solutions/Java/034._Search for a Range \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/034._Search for a Range \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e5a7048b1..000000000 --- "a/docs/Leetcode_Solutions/Java/034._Search for a Range \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,77 +0,0 @@ -### 34. Search for a Range - - - -题目: - - https://leetcode.com/problems/search-for-a-range/ - - - -难度 : Medium - - - -思路: - -二分法,先找```target```出现的左边界,判断是否有```target```后再判断右边界 - -- 找左边界:二分,找到一个```index``` - - 该```index```对应的值为```target``` - - 并且它左边```index-1```对应的值不是```target```(如果```index```为```0```则不需要判断此条件) - - 如果存在```index```就将其```append```到```res```中 -- 判断此时```res```是否为空,如果为空,说明压根不存在```target```,返回```[-1, -1]``` -- 找右边界:二分,找到一个```index```(但是此时用于二分循环的```l```可以保持不变,```r```重置为```len(nums)-1```,这样程序可以更快一些) - - 该```index```对应的值为```target``` - - 并且它右边```index+1```对应的值不是```target```(如果```index```为```len(nums)-1```则不需要判断此条件) - - 如果存在```index```就将其```append```到```res```中 - - - -AC 代码 - - - - -```python -class Solution(object): - def searchRange(self, nums, target): - """ - :type nums: List[int] - :type target: int - :rtype: List[int] - """ - if not nums : return [-1, -1] - - res = [] - l, r = 0, len(nums)-1 - # search for left bound - while l <= r: - mid = l + ((r - l) >> 2) - if nums[mid] == target and (mid == 0 or nums[mid-1] != target): - res.append(mid) - break - if nums[mid] < target: - l = mid + 1 - else: - r = mid - 1 - if not res: - return [-1, -1] - # search for right bound - r = len(nums)-1 - while l <= r: - mid = l + ((r - l) >> 2) - if nums[mid] == target and (mid == len(nums)-1 or nums[mid+1] != target): - res.append(mid) - break - if nums[mid] > target: - r = mid - 1 - else: - l = mid + 1 - return res -``` - - - - - diff --git "a/docs/Leetcode_Solutions/Java/035._search_insert_position \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/035._search_insert_position \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 1b14c88ce..000000000 --- "a/docs/Leetcode_Solutions/Java/035._search_insert_position \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,48 +0,0 @@ -### 35. Search Insert Position - -题目: - - - -难度: - -Medium - -找到第一个比```target```大的值的```index```,如果没找到则返回```len(nums)```,但是代码中直接返回```i```值就行了 - -### 思路一:暴力 - -```python -class Solution(object): - def searchInsert(self, nums, target): - """ - :type nums: List[int] - :type target: int - :rtype: int - """ - i = 0 - while nums[i] < target: - i += 1 - if i == len(nums): - return i - return i -``` -### 思路二:二分 - -```python -class Solution(object): - def searchInsert(self, nums, target): - """ - :type nums: List[int] - :type target: int - :rtype: int - """ - left, right = 0, len(nums) - 1 - while left <= right: - mid = left + ((right - left) >> 2) - if nums[mid] < target: - left = mid + 1 - else: - right = mid - 1 - return left -``` diff --git "a/docs/Leetcode_Solutions/Java/038._Count_and_Say \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/038._Count_and_Say \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index c735ca188..000000000 --- "a/docs/Leetcode_Solutions/Java/038._Count_and_Say \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,98 +0,0 @@ -### 38. Count and Say - -题目: - - - -难度: - -Easy - - -思路 - - -1. i代表字符下标,从0开始取值,也就是从第一个字符开始,因为要让i取到最后一个字符,并且后面还要进行i+1的操作,所以将原字符串随意加上一个‘*’字符防止溢出 -2. count代表此时已经连续相同的字符个数 -3. res代表最终输出的字符串 - -- 只要i下标对应的字符等于下一个字符,则sum和i都加1,无限循环 -- 如果i下标对应的字符不等于下一个字符了,则res应该加上str(sum)和i下标对应的那个字符,并且i加1,sum复原回0 - -``` -Examples of nth sequence - - 1. 1 - 2. 11 - 3. 21 - 4. 1211 - 5. 111221 - 6. 312211 - 7. 13112221 - 8. 1113213211 - 9. 31131211131221 - 10. 13211311123113112211 - -``` -```python -解法1 -class Solution(object): - def countAndSay(self, n): - """ - :type n: int - :rtype: str - """ - if n == 1: - return '1' - s = self.countAndSay(n-1) + '*' - res, count = '', 1 - for i in range(len(s)-1): - if s[i] == s[i+1]: - count += 1 - else: - res += str(count) + str(s[i]) - count = 1 - return res -``` -```python -解法2 -class Solution(object): - def countAndSay(self, n): - """ - :type n: int - :rtype: str - """ - res = '1' - for i in range(n-1): - res = ''.join([str(len(list(group))) + digit for digit, group in itertools.groupby(res)]) - return res -``` -详见[python进阶-ITERTOOLS模块小结](http://www.wklken.me/posts/2013/08/20/python-extra-itertools.html#itertoolsgroupbyiterable-key) - -```java -解法3 -class Solution { - public String countAndSay(int n) { - if(n == 1){ - return "1"; - } - //递归调用,然后对字符串处理 - String str = countAndSay(n-1) + "*";//为了str末尾的标记,方便循环读数 - char[] c = str.toCharArray(); - int count = 1; - String s = ""; - for(int i = 0; i < c.length - 1;i++){ - if(c[i] == c[i+1]){ - count++;//计数增加 - }else{ - s = s + count + c[i];//上面的*标记这里方便统一处理 - count = 1;//初始化 - } - } - return s; - - } -} -``` - - diff --git "a/docs/Leetcode_Solutions/Java/039._combination_sum \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/039._combination_sum \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b5579c25d..000000000 --- "a/docs/Leetcode_Solutions/Java/039._combination_sum \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,64 +0,0 @@ -### 39. Combination Sum - -题目: - - - - -难度: - -Medium - - -最初的思路: - - -``` -res = [] -def combSum(candidates, target, valueList): - if target == 0: - res.append(valueList) - for candidate in candidates: - if candidate > target: - return - combSum(candidates, target - candidate, valueList + [candidate] ) - -``` - - -问题在于,有重复: - -``` -combSum([2,3,6,7],7,[]) - -res -Out[9]: [[2, 2, 3], [2, 3, 2], [3, 2, 2], [7]] -``` - -然后看了hint,除[2, 2, 3] 和 [2, 3, 2]这种重复的方式是, 把candidates先sort,然后用index的方式来处理。 - - -所以最终的除重大法如下,根据hint做出: - -```python -class Solution(object): - def combinationSum(self, candidates, target): - """ - :type candidates: List[int] - :type target: int - :rtype: List[List[int]] - """ - def dfs(remain, combo, index): - if remain == 0: - res.append(combo) - return - for i in range(index, len(candidates)): - if candidates[i] > remain: - break - dfs(remain - candidates[i], combo + [candidates[i]], i) - candidates = list(set(candidates)) - candidates.sort() - res = [] - dfs(target, [], 0) - return res -``` diff --git "a/docs/Leetcode_Solutions/Java/040._combination_sum_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/040._combination_sum_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 7abb448f3..000000000 --- "a/docs/Leetcode_Solutions/Java/040._combination_sum_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,39 +0,0 @@ -### 40. Combination Sum II - -题目: - - - - -难度: - -Medium - - -Combination Sum 已经AC,做了minor change. -- 现在不需要```set```化```candidates```了 -- 但是递归的时候```index```要从```i+1```开始了 -- 要判断```combo not in res```才```append```到```res```中去 - -```python -class Solution(object): - def combinationSum2(self, candidates, target): - """ - :type candidates: List[int] - :type target: int - :rtype: List[List[int]] - """ - def dfs(remain, combo, index): - if remain == 0 and combo not in res: - res.append(combo) - return - for i in range(index, len(candidates)): - if candidates[i] > remain: - break - dfs(remain - candidates[i], combo + [candidates[i]], i+1) - candidates.sort() - res = [] - dfs(target, [], 0) - return res - -``` diff --git "a/docs/Leetcode_Solutions/Java/042._trapping_rain_water \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/042._trapping_rain_water \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 17e03b9ea..000000000 --- "a/docs/Leetcode_Solutions/Java/042._trapping_rain_water \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,39 +0,0 @@ -### 42. Trapping Rain Water - - - -题目: - - - -难度: -Hard - -思路: - -题目有几个特性可用,bar width = 1,然后第一个和最后一个是不能trap water,其次中间的部分能trap多少水是看`左右高度差较低的那个 - 本身的高度` - -The basic idea is that we set two pointers ```l``` and ```r``` to the left and right end of ```height```. Then we get the minimum height (```min_height```) of these pointers (similar to Container with Most Water due to the Leaking Bucket Effect) since the level of the water cannot be higher than it. Then we move the two pointers towards the center. If the coming level is less than ```min_height```, then it will hold some water. Fill the water until we meet some “barrier” (with height larger than ```min_height```) and update ```l``` and ```r``` to repeat this process in a new interval. - -AC代码: - - -```python -class Solution(object): - def trap(self, height): - """ - :type height: List[int] - :rtype: int - """ - l, r, water, min_height = 0, len(height) - 1, 0, 0 - while l < r: - min_height = min(height[l], height[r]) - while l < r and height[l] <= min_height: - water += min_height - height[l] - l += 1 - while l < r and height[r] <= min_height: - water += min_height - height[r] - r -= 1 - return water - -``` diff --git "a/docs/Leetcode_Solutions/Java/043._multiply_strings \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/043._multiply_strings \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 461c8ee91..000000000 --- "a/docs/Leetcode_Solutions/Java/043._multiply_strings \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,81 +0,0 @@ -###43. Multiply Strings - -题目: - - - -难度: - -Medium - - -思路: - -虽然写了一堆similar problems,拿到的时候也算有思路,但是还是觉得很难写 - -参考了别人的思路: - -1. m位的数字乘以n位的数字的结果最大为m+n位: -999*99 < 1000*100 = 100000,最多为3+2 = 5位数。 -2. 先将字符串逆序便于从最低位开始计算。 - - -觉得这样写才是最容易理解的,看一个具体的🌰: - -``` -123 * 456 - - 123 - * 456 - - -先把每一位拿来相乘:得到 - 1 2 3 - 4 5 6 - - 6 12 18 - 5 10 15 - 4 8 12 - -这样在全部加起来和做进位处理 - 5 6 0 8 8 - - -``` - - - - -``` -class Solution(object): - def multiply(self, num1, num2): - """ - :type num1: str - :type num2: str - :rtype: str - """ - if num1 == '0' or num2 == '0' : return '0' - len1,len2 = len(num1),len(num2) - - num1 = num1[::-1] - num2 = num2[::-1] - # 99 * 99 < 10000, maxmize 4 digit - arr = [0 for i in range(len1 + len2)] - - for i in xrange(len1): - for j in xrange(len2): - arr[i+j] += (ord(num1[i]) - ord('0')) * (ord(num2[j]) - ord('0')) - - - res = [0 for i in range(len1 + len2)] - - for i in range(len(arr)): - res[i] = arr[i] % 10 - if i < len(arr) - 1: - arr[i+1] += arr[i]/10 - - i = len(arr)-1 - if res[i] == 0: - i -= 1 - return ''.join(str(j) for j in res[:i+1][::-1]) -``` diff --git "a/docs/Leetcode_Solutions/Java/044._wildcard_matching \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/044._wildcard_matching \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e7d2755a0..000000000 --- "a/docs/Leetcode_Solutions/Java/044._wildcard_matching \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,44 +0,0 @@ -###44. Wildcard Matching - -题目: - - - -难度: - -Hard - - - -做完Regular Expression Matching来做的这道题,按照DP思路run一下是超时,感觉是开心的,至少暂时没有报错了,有待优化,应该在dp的同时在贪心一下么。 - - - -超时代码 -``` -class Solution(object): - def isMatch(self, s, p): - """ - :type s: str - :type p: str - :rtype: bool - """ - m, n = len(s), len(p) - dp = [ [0 for i in xrange(n+1)] for j in xrange(m+1)] - - dp[0][0] = 1 - - # init the first line - for i in xrange(1,n+1): - if p[i-1] == '*': - dp[0][i] = dp[0][i-1] - - for i in xrange(1,m+1): - for j in xrange(1,n+1): - if p[j-1] == s[i-1] or p[j-1] == '?': - dp[i][j] = dp[i-1][j-1] - elif p[j-1] == '*': - dp[i][j] = dp[i][j-1] or dp[i-1][j] - - return dp[m][n] == 1 -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/045._Jump_Game_II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/045._Jump_Game_II \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index ae8caf9a1..000000000 --- "a/docs/Leetcode_Solutions/Java/045._Jump_Game_II \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,43 +0,0 @@ -### 45. Jump Game II - -题目: - - - -难度: - -Easy - - -思路 - -greedy solution, the current jump is ```[i, cur_end]```, and the ```cur_farthest``` is the farthest point -that all of point in ```[i, cur_end]``` can reach, whenever ```cur_farthest``` is larger than the last point' index, -return current ```jump+1```; whenever ```i``` reaches ```cur_end```, update ```cur_end``` to ```current cur_farthest```. -- Time: O(log(n)) -- Space: O(1) - -```python -class Solution(object): - def jump(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - # Note You can assume that you can always reach the last index. - cur_end, cur_farthest, step, n = 0, 0, 0, len(nums) - for i in range(n-1): - cur_farthest = max(cur_farthest, i + nums[i]) - if cur_farthest >= n - 1: - step += 1 - break - if i == cur_end: - cur_end = cur_farthest - step += 1 - return step - - - -``` - - diff --git "a/docs/Leetcode_Solutions/Java/046._permutations \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/046._permutations \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a79e7c67c..000000000 --- "a/docs/Leetcode_Solutions/Java/046._permutations \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,138 +0,0 @@ -###46. Permutations - -题目: - - - -难度: - -Medium - - -复习了一下,自己写的容易理解版本: - -每次调一个放入现有 - -``` -class Solution(object): - def permute(self, nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - self.result = [] - self.recPermute([],nums) - return self.result - - def recPermute(self, sofar, rest): - if rest == []: - self.result.append(sofar) - else: - for i in range(len(rest)): - next = sofar + [rest[i]] - remaining = rest[:i] + rest[i+1:] - self.recPermute(next, remaining) -``` - -交换 - - - -``` -class Solution(object): - def permute(self, nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - result = [] - self.helper(nums,0,result) - return result - - def helper(self,nums,begin,result): - n = len(nums) - if begin == n: - tmp = nums[:] - result.append(tmp) - return - - for i in range(begin,n): - nums[begin], nums[i] = nums[i],nums[begin] - self.helper(nums,begin+1,result) - nums[begin],nums[i] = nums[i],nums[begin] - -``` - - - - - - -好像还有一个巧妙的版本 - - -``` -class Solution: - # @param num, a list of integer - # @return a list of lists of integers - def permute(self, num): - if len(num) == 0: return [] - if len(num) == 1: return [num] - res = [] - for i in range(len(num)): - for j in self.permute(num[:i] + num[i+1:]): - res.append([num[i]] + j) - return res -``` - - -更容易理解的写法: - - -``` -class Solution: - # @param num, a list of integer - # @return a list of lists of integers - def permute(self, num): - if len(num) == 0: return [] - if len(num) == 1: return [num] - res = [] - for i in range(len(num)): - x = num[i] - xs = num[:i] + num[i+1:] - for j in self.permute(xs): - res.append([x] + j) - return res - -``` - -就是一定要有递归的信念❤️ - - - -还有介绍的基本无memory使用的算法: - - -``` -class Solution: - # @param num, a list of integer - # @return a list of lists of integers - def permute(self, num): - if len(num) == 0: yield [] - if len(num) == 1: yield [num] - res = [] - for i in range(len(num)): - x = num[i] - xs = num[:i] + num[i+1:] - for j in self.permute(xs): - res.append([x] + j) - yield res - -``` - -但是这个yield只是生产generator,要看结果还是要用for in的。 - - - - - diff --git "a/docs/Leetcode_Solutions/Java/047._permutations_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/047._permutations_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 68a3ead84..000000000 --- "a/docs/Leetcode_Solutions/Java/047._permutations_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,42 +0,0 @@ -###47. Permutations II - -题目: - - - -难度: - -Medium - - -虽然想到了,但是没有靠自己的力量implement出来,还是比较容易了理解的,因为如果有重复的,那么处理只用处理第一个,就只用把第一个提出来,剩下的管它怎么permute。 - -第二次碰到这个元素就不要再用它了,因为可能出现的组合已经有了。 - - -看代码: -base case 处理掉 -sort一下,设置一个prevNum变量 - -如果碰到过了,就continue,去继续执行下一个 - - -``` -class Solution(object): - def permuteUnique(self, nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - if len(nums) == 0: return [] - if len(nums) == 1: return [nums] - res = [] - nums.sort() - for i in range(len(nums)): - if i > 0 and nums[i] == nums[i-1]: continue - for j in self.permuteUnique(nums[:i] + nums[i+1:]): - res.append([nums[i]] + j) - return res -``` - - diff --git "a/docs/Leetcode_Solutions/Java/048._rotate_image \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/048._rotate_image \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 5c727dd7c..000000000 --- "a/docs/Leetcode_Solutions/Java/048._rotate_image \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,105 +0,0 @@ -### 48. Rotate Image - - -题目: - - - -难度: - -Medium - - - - -思路一: - - -先将矩阵上下翻转,然后将矩阵中心对称翻转,即可实现顺时针90度旋转。 - - -- 上下翻转规律 [i][:] --> [n-1-i][:] -- 对角线变换的规律是 [i][j] --> [j][i] - - -例如: -``` -1 1 1 3 3 3 3 2 1 -2 2 2 -> 2 2 2 -> 3 2 1 -3 3 3 1 1 1 3 2 1 -``` - - -```python -class Solution(object): - def rotate(self, matrix): - """ - :type matrix: List[List[int]] - :rtype: void Do not return anything, modify matrix in-place instead. - """ - n = len(matrix) - # 上下翻转 - for i in range(n/2): - matrix[i], matrix[n-1-i] = matrix[n-1-i], matrix[i] - # 主对角线翻转 - for i in range(n): - for j in range(i+1,n): - matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j] -``` - - -思路二: - -参考这里 - - - -找规律,一次完成四个数的该有的变换 - -``` - -1 2 3 4 5 - -6 7 8 9 10 - -11 12 13 14 15 - -16 17 18 19 20 - -21 22 23 24 25 - -``` - -在思路一的解法下观察得出,每个元素的变换是 [x][y] -> [n-1-x][y] -> [y][n-1-x] -> [n-1-y][x] - - -```python -class Solution(object): - def rotate(self, matrix): - """ - :type matrix: List[List[int]] - :rtype: void Do not return anything, modify matrix in-place instead. - """ - n = len(matrix) - for i in range(n/2): - for j in range(n-n/2): - matrix[i][j], matrix[~j][i], matrix[~i][~j], matrix[j][~i] = \ - matrix[~j][i], matrix[~i][~j], matrix[j][~i], matrix[i][j] -``` -这里的```[~i]``` 意思就是 ```[n-1-i]``` - -思路三: - -直接用zip函数,一行, 😂 - -```python -class Solution: - def rotate(self, A): - A[:] = zip(*A[::-1]) - # A[:] = map(list, zip(*A[::-1])) -``` - - - - - diff --git "a/docs/Leetcode_Solutions/Java/049._group_anagrams_python \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/049._group_anagrams_python \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 1371afdb4..000000000 --- "a/docs/Leetcode_Solutions/Java/049._group_anagrams_python \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,28 +0,0 @@ -### 49. Group Anagrams python - -题目: - - - -难度 : Medium - -python大法好 - - -```python -class Solution(object): - def groupAnagrams(self, strs): - """ - :type strs: List[str] - :rtype: List[List[str]] - """ - mapx = {} - for i in strs: - x = ''.join(sorted(list(i))) - if x in mapx: - mapx[x].append(i) - else: - mapx[x] = [i] - return mapx.values() - -``` diff --git "a/docs/Leetcode_Solutions/Java/050._pow(x,_n) \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/050._pow(x,_n) \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 697863e2f..000000000 --- "a/docs/Leetcode_Solutions/Java/050._pow(x,_n) \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,48 +0,0 @@ -### 50. Pow(x, n) - -题目: - - - -难度: - -Medium - - -Recursive - -```python -class Solution(object): - def myPow(self, x, n): - """ - :type x: float - :type n: int - :rtype: float - """ - if n == 0: - return 1 - if n < 0: - return 1 / self.myPow(x, -n) - if n % 2 == 0: - return self.myPow(x*x, n/2) - else: - return x * self.myPow(x*x, n/2) - -``` -iterative - - -```python -class Solution: - def myPow(self, x, n): - if n < 0: - x = 1 / x - n = -n - pow = 1 - while n: - if n & 1: - pow *= x - x *= x - n >>= 1 - return pow -``` diff --git "a/docs/Leetcode_Solutions/Java/051._n-queens \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/051._n-queens \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 3e7c197c3..000000000 --- "a/docs/Leetcode_Solutions/Java/051._n-queens \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,38 +0,0 @@ -### 51. N-Queens - -题目: - - - -难度: -Hard - -八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当n = 1或n ≥ 4时问题有解[1]。 - -对于任意(x,y),如果要让新的点和它不能处于同一条横行、纵行或斜线上,则新点(p,q)必须要满足p+q != x+y 和p-q!= x-y, 前者针对左下右上斜线,后者针对左上右下斜线,两者同时都保证了不在同一条横行和纵行上。 - -代码中变量的含义: -- col_per_row: 每一行皇后的column位置组成的列表 -- cur_row:目前正在判断的row的index -- xy_diff:所有x-y组成的列表 -- xy_sum:所有x+y组成的列表 - -```python -class Solution(object): - def solveNQueens(self, n): - """ - :type n: int - :rtype: List[List[str]] - """ - def dfs(col_per_row, xy_diff, xy_sum): - cur_row = len(col_per_row) - if cur_row == n: - ress.append(col_per_row) - for col in range(n): - if col not in col_per_row and cur_row-col not in xy_diff and cur_row+col not in xy_sum: - dfs(col_per_row+[col], xy_diff+[cur_row-col], xy_sum+[cur_row+col]) - ress = [] - dfs([], [], []) - return [['.'*i + 'Q' + '.'*(n-i-1) for i in res] for res in ress] - -``` diff --git "a/docs/Leetcode_Solutions/Java/052._n-queens_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/052._n-queens_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 1d65adc16..000000000 --- "a/docs/Leetcode_Solutions/Java/052._n-queens_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,46 +0,0 @@ -### 52. N-Queens II - -题目: - - - -难度: -Hard - -思路参见recursion & backtracking - -n queens还是属于比较难的,需要花时间吃透的问题 - -八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当n = 1或n ≥ 4时问题有解[1]。 - -对于任意(x,y),如果要让新的点和它不能处于同一条横行、纵行或斜线上,则新点(p,q)必须要满足p+q != x+y 和p-q!= x-y, 前者针对左下右上斜线,后者针对左上右下斜线,两者同时都保证了不在同一条横行和纵行上。 - -代码中变量的含义: -- col_per_row: 每一行皇后的column位置组成的列表 -- cur_row:目前正在判断的row的index -- xy_diff:所有x-y组成的列表 -- xy_sum:所有x+y组成的列表 - -```python -class Solution(object): - def totalNQueens(self, n): - """ - :type n: int - :rtype: int - """ - def dfs(col_per_row, xy_diff, xy_sum): - cur_row = len(col_per_row) - if cur_row == n: - ress.append(col_per_row) - for col in range(n): - if col not in col_per_row and cur_row-col not in xy_diff and cur_row+col not in xy_sum: - dfs(col_per_row+[col], xy_diff+[cur_row-col], xy_sum+[cur_row+col]) - ress = [] - dfs([], [], []) - return len(ress) - -``` - - - - diff --git "a/docs/Leetcode_Solutions/Java/053._maximum_subarray \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/053._maximum_subarray \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e71c549d1..000000000 --- "a/docs/Leetcode_Solutions/Java/053._maximum_subarray \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,146 +0,0 @@ -### 53. Maximum Subarray - -题目: - - - -难度: -Medium - - -思路一: - -O(N^2) - -从i开始,计算i到n,存比较大的sum,会超时 - -``` -class Solution(object): - def maxSubArray(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - n = len(nums) - m = float('-inf') - for i in range(n): - s = 0 - for j in range(i,n): - s = s + nums[j] - m = max(m,s) - return m -``` - -思路二: - -动归 - -ms(i) = max(ms[i-1]+ a[i],a[i]) - -到i处的最大值两个可能,一个是加上a[i],另一个从a[i]起头,重新开始。可以AC - -```python -class Solution(object): - def maxSubArray(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - n = len(nums) - maxSum = [nums[0] for i in range(n)] - for i in range(1,n): - maxSum[i] = max(maxSum[i-1] + nums[i], nums[i]) - return max(maxSum) -``` - - -思路三: - - -Kadane’s Algorithm wikipedia可以查到,然后一般的是负的可以还回0,这里需要稍作修改,参考 - - - - -``` -start: - max_so_far = a[0] - max_ending_here = a[0] - -loop i= 1 to n - (i) max_end_here = Max(arrA[i], max_end_here+a[i]); - (ii) max_so_far = Max(max_so_far,max_end_here); - -return max_so_far - -``` - -AC代码: - -```python -class Solution(object): - def maxSubArray(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - n = len(nums) - maxSum , maxEnd = nums[0], nums[0] - - for i in range(1,n): - maxEnd = max(nums[i],maxEnd + nums[i]) - maxSum = max(maxEnd,maxSum) - return maxSum -``` - - -思路四: - - - -参见clrs 第71页,用divide and conquer,有伪码 - - -最大的subarray sum有三个可能,左半段或者右半段,或者跨越左右半段, - -速度比较慢,AC代码,复杂度O(NlogN) - -``` -class Solution(object): - def maxSubArray(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - def find_max_crossing_subarray(nums, low, mid, high): - left_sum = float('-inf') - sum = 0 - for i in xrange(mid,low-1,-1): - sum = sum + nums[i] - if sum > left_sum: - left_sum = sum - - right_sum = float('-inf') - sum = 0 - for j in range(mid+1,high+1): - sum = sum + nums[j] - if sum > right_sum: - right_sum = sum - - return left_sum + right_sum - - def find_max_subarray(nums,low,high): - if low == high: - return nums[low] - else: - mid = (low + high) / 2 - left_sum = find_max_subarray(nums, low, mid) - right_sum = find_max_subarray(nums,mid+1,high) - cross_sum = find_max_crossing_subarray(nums,low,mid,high) - # print left_sum, right_sum, cross_sum - # print mid, low, high - return max(left_sum, right_sum, cross_sum) - - return find_max_subarray(nums, 0, len(nums)-1) - -``` diff --git "a/docs/Leetcode_Solutions/Java/054._spiral_matrix \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/054._spiral_matrix \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index ca2219ec1..000000000 --- "a/docs/Leetcode_Solutions/Java/054._spiral_matrix \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,139 +0,0 @@ -### 54. Spiral Matrix - -题目: - - - -难度: -Medium - - -参考别人的代码,一开始觉得很有递归性,根据奇偶不同来写,递归太难写。 - -然后想到了loop,再想,可能有更优trick,事实证明并没有。 - -用四个变量来控制边界,然后因为方向总是:→↓←↑ 左右下上 - - - - -```python -class Solution(object): - def spiralOrder(self, matrix): - """ - :type matrix: List[List[int]] - :rtype: List[int] - """ - if matrix == [] : return [] - res = [] - maxUp = maxLeft = 0 - maxDown = len(matrix) - 1 - maxRight = len(matrix[0]) - 1 - direction = 0 # 0 go right, 1 go down, 2 go left, 3 up - while True: - if direction == 0: #go right - for i in range(maxLeft, maxRight+1): - res.append(matrix[maxUp][i]) - maxUp += 1 - elif direction == 1: # go down - for i in range(maxUp, maxDown+1): - res.append(matrix[i][maxRight]) - maxRight -= 1 - elif direction == 2: # go left - for i in reversed(range(maxLeft, maxRight+1)): - res.append(matrix[maxDown][i]) - maxDown -= 1 - else: #go up - for i in reversed(range(maxUp, maxDown+1)): - res.append(matrix[i][maxLeft]) - maxLeft +=1 - if maxUp > maxDown or maxLeft > maxRight: - return res - direction = (direction + 1 ) % 4 -``` - -以上的写法非常精妙,看看我自己用同样的思路写的|||| - -```python -class Solution(object): - def spiralOrder(self, matrix): - """ - :type matrix: List[List[int]] - :rtype: List[int] - """ - if len(matrix) == 0 : return [] - - left = 0 - up = 0 - down = len(matrix) - 1 - right = len(matrix[0]) -1 - - # 0 -> right, 1 -> down, 2-> left, 3 -> up - direction = 0 - - # start location - x, y = 0,0 - res = [] - - while True: - if left > right or up > down: - return res - - if direction == 0 : - while y <= right: - res.append(matrix[up][y]) - y += 1 - up += 1 - x = up - direction = 1 - continue - - if direction == 1: - while x <= down: - res.append(matrix[x][right]) - x += 1 - right -= 1 - y = right - direction = 2 - continue - - if direction == 2: - while y >= left: - res.append(matrix[down][y]) - y -= 1 - down -= 1 - x = down - direction = 3 - continue - - if direction == 3: - while x >= up: - res.append(matrix[x][left]) - x -= 1 - left += 1 - y = left - direction = 0 - continue - -``` - -明显别人的代码写的更精妙,因为这里两个boundary都很明确,所以用for in range就能很好的解决问题了. - - - - - ------------ - -最后放一个无敌一行,怕你看完不想看上面的代码了 -```python -class Solution(object): - def spiralOrder(self, matrix): - """ - :type matrix: List[List[int]] - :rtype: List[int] - """ - return matrix and list(matrix.pop(0)) + self.spiralOrder(zip(*matrix)[::-1]) -``` - -oh, my god! diff --git "a/docs/Leetcode_Solutions/Java/055._jump_game \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/055._jump_game \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 1de4f1d02..000000000 --- "a/docs/Leetcode_Solutions/Java/055._jump_game \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,39 +0,0 @@ -### 55. Jump Game - -题目: - - - -难度: - -Medium - - -问题出现在一旦有0,而且这个0是不可跨过的那么无解,无法达到 - - -看了hint,根本不用这个数组,直接用一个数来记录可达最远距离,非常巧妙 - - -```python -class Solution(object): - def canJump(self, nums): - """ - :type nums: List[int] - :rtype: bool - """ - if not nums: - return True - if len(nums) == 1: - return True - n = len(nums) - idx, reach = 0, 0 - while idx < n-1 and idx <= reach: # idx <= reach是为了处理nums[idx] == 0的情况,若idx>reach说明已经失败了 - reach = max(reach, idx+nums[idx]) - idx += 1 - return reach >= n-1 -``` - -idx记录当前loop位置,reach记录当前可到位置 - -注意这里的while循环的条件是 `idx < n-1 and idx <= reach`,之所以加上 `idx <= reach` 是因为如果```idx > reach```说明```idx```层不可达,其实也可以直接terminate. diff --git "a/docs/Leetcode_Solutions/Java/056._Merge_Intervals \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/056._Merge_Intervals \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 1f5ab7aa6..000000000 --- "a/docs/Leetcode_Solutions/Java/056._Merge_Intervals \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,31 +0,0 @@ -### 56. Merge Intervals - -题目: - - - -难度: - -Medium - - -Just go through the intervals sorted by start coordinate and -either combine the current interval with the previous one if they overlap, or add it to the output by itself if they don’t. - -```python -class Solution(object): - def merge(self, intervals): - """ - :type intervals: List[Interval] - :rtype: List[Interval] - """ - res = [] - for i in sorted(intervals, key = lambda i: i.start): - if res and i.start <= res[-1].end: - res[-1].end = max(i.end, res[-1].end) - else: - res.append(i) - return res -``` - - diff --git "a/docs/Leetcode_Solutions/Java/058._length_of_last_word \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/058._length_of_last_word \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b9ec0160c..000000000 --- "a/docs/Leetcode_Solutions/Java/058._length_of_last_word \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,45 +0,0 @@ -### 58. Length of Last Word - -题目: - - - -难度 : Easy - -我的解法: - -```python -class Solution(object): - def lengthOfLastWord(self, s): - """ - :type s: str - :rtype: int - """ - s = s[::-1].strip() - return s.find(' ') if s.find(' ') != -1 else len(s) -``` -作弊式做法 - -```python -class Solution(object): - def lengthOfLastWord(self, s): - """ - :type s: str - :rtype: int - """ - lst = s.split() - if len(lst) >= 1: - return len(lst[-1]) - return 0 -``` -split()方法最低可以分0组,split(' ')最低可以分1组 -```python -一行解法: -class Solution(object): - def lengthOfLastWord(self, s): - """ - :type s: str - :rtype: int - """ - return len(s.strip().split(" ")[-1]) -``` diff --git "a/docs/Leetcode_Solutions/Java/059._spiral_matrix_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/059._spiral_matrix_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 42ae52662..000000000 --- "a/docs/Leetcode_Solutions/Java/059._spiral_matrix_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,67 +0,0 @@ -### 59. Spiral Matrix II - -题目: - - - -难度: -Medium - -和Spiral Matrix的思路基本一致 - -也许还有待挖掘trick - - -```python -class Solution(object): - def generateMatrix(self,n): - """ - :type n: int - :rtype: List[List[int]] - """ - curNum = 0 - matrix = [[0 for i in range(n)] for j in range(n)] - maxUp = maxLeft = 0 - maxDown = maxRight = n - 1 - direction = 0 - while True: - if direction == 0: #go right - for i in range(maxLeft, maxRight+1): - curNum += 1 - matrix[maxUp][i] = curNum - maxUp += 1 - elif direction == 1: # go down - for i in range(maxUp, maxDown+1): - curNum += 1 - matrix[i][maxRight] = curNum - maxRight -= 1 - elif direction == 2: # go left - for i in reversed(range(maxLeft, maxRight+1)): - curNum += 1 - matrix[maxDown][i] = curNum - maxDown -= 1 - else: #go up - for i in reversed(range(maxUp, maxDown+1)): - curNum += 1 - matrix[i][maxLeft] = curNum - maxLeft +=1 - if curNum >= n*n: - return matrix - direction = (direction + 1 ) % 4 -``` - -Same idea with [spiral matrix I](https://github.com/Lisanaaa/thinking_in_lc/blob/master/054._spiral_matrix.md) -```python -class Solution(object): - def generateMatrix(self, n): - """ - :type n: int - :rtype: List[List[int]] - """ - res = [] - l = n * n + 1 - while l > 1: - l, r = l - len(res), l - res = [range(l, r)] + zip(*res[::-1]) - return res -``` diff --git "a/docs/Leetcode_Solutions/Java/060._permutation_sequence \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/060._permutation_sequence \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 81935e253..000000000 --- "a/docs/Leetcode_Solutions/Java/060._permutation_sequence \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,93 +0,0 @@ -###60. Permutation Sequence - -题目: - - - -难度: - -Medium - - - -偷懒,用46的方法,会超时 - -``` - -class Solution(object): - def getPermutation(self, n, k): - """ - :type n: int - :type k: int - :rtype: str - """ - self.result = [] - s = "" - for i in range(1, n+1): - s += str(i) - self.recPermute("",s,k) - return self.result[-1] - - - def recPermute(self, sofar, rest, k): - if rest == "": - if len(self.result) == k: - return - self.result.append(sofar) - else: - for i in xrange(len(rest)): - nnext = sofar + rest[i] - remaining = rest[:i] + rest[i+1:] - self.recPermute(nnext, remaining, k) -``` - - -然后其实有规律的,比如 - -``` -1 "123" -2 "132" -3 "213" -4 "231" -5 "312" -6 "321" -``` - -是第n个数 + 余下的n-1个数的permutation - - -k = 1 就是所有的顺序排列 -k = n! 是所有的逆序排列 - -对于余下的也是递归,比如 - - -k < (n-1)! 1 + (n-1)个数的全排列的第k个 -k < 2*(n-1)! 2 + (n-1)个数的顺序全排列的第k个 - - -发现思路对了,但是implement还有点困难. - -看了一个最为精妙的解法 - -``` -class Solution(object): - def getPermutation(self, n, k): - """ - :type n: int - :type k: int - :rtype: str - """ - seq, k, fact = '', k-1, math.factorial(n-1) - perm = [i for i in range(1, n+1)] - for i in reversed(xrange(n)): - curr = perm[k/fact] - seq += str(curr) - perm.remove(curr) - if i > 0: - k %= fact - fact /= i - return seq -``` - - diff --git "a/docs/Leetcode_Solutions/Java/061._rotate_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/061._rotate_list \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a26319d15..000000000 --- "a/docs/Leetcode_Solutions/Java/061._rotate_list \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,58 +0,0 @@ - -###61. Rotate List - - -题目: - - - -难度: - -Medium - -- k可能比list的size大,需要做一个取余准备 -- 计算list size的同时把tail也记录下来,方便之后把tail的next指向原本的head -- 利用之前的到末端的kth node - - -AC 代码 - -``` -class Solution(object): - def rotateRight(self, head, k): - if head == None or k == 0 : - return head - - cur = head - size = 1 - while cur.next: - size += 1 - cur = cur.next - - tail = cur - - k = k % size - - p = self.findKth(head,k) - - tail.next = head - head = p.next - p.next = None - return head - - def findKth(self,head, k): - dummy = ListNode(-1) - dummy.next = head - p = dummy - q = dummy - - for i in range(k): - q = q.next - - while q.next: - p = p.next - q = q.next - return p -``` - - diff --git "a/docs/Leetcode_Solutions/Java/064._minimum_path_sum \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/064._minimum_path_sum \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 591c171b5..000000000 --- "a/docs/Leetcode_Solutions/Java/064._minimum_path_sum \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,58 +0,0 @@ - -###64. Minimum Path Sum - -题目: - - - -难度: - -Medium - - - -非常明显的DP - -状态转移方程 - -dp[i][j] = gird[i][j] + min(dp[i-1][j], dp[i][j-1]) - - -然后注意一下边界的处理,一开始dp[0][0] = grid[0][0] - -第一行和第一列,之后开始全用状态转移方程 - - -``` -class Solution(object): - def minPathSum(self, grid): - """ - :type grid: List[List[int]] - :rtype: int - """ - m = len(grid) - n = len(grid[0]) if m else 0 - - dp = [[0 for i in range(n)] for i in range(m)] - - dp[0][0] = grid[0][0] - - # first row - for i in range(1,n): - dp[0][i] = grid[0][i] + dp[0][i-1] - - # first col - for i in range(1,m): - dp[i][0] = grid[i][0] + dp[i-1][0] - - - for i in range(1,m): - for j in range(1,n): - dp[i][j] = grid[i][j] + min(dp[i-1][j], dp[i][j-1]) - - - return dp[m-1][n-1] - - - -``` diff --git "a/docs/Leetcode_Solutions/Java/065.unique_paths_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/065.unique_paths_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 16e8e940c..000000000 --- "a/docs/Leetcode_Solutions/Java/065.unique_paths_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,84 +0,0 @@ - ###65.Unique Paths II - -题目: - - - - -tag : DP - -难度 : Medium - - - - - -``` -BASE CASE( i = 0 , j = 0): -//第一排和第一列,如果没有obstacle, 则走法为1, 一旦有了obstacle,则之后的格子走法都为0 - -非BASE CASE : -//一旦有obstacle,则dp为0 -dp(i, j) = dp(i,j-1) + dp(i-1,j) - -``` - -Python代码 - -``` -class Solution(object): - def uniquePathsWithObstacles(self, obstacleGrid): - """ - :type obstacleGrid: List[List[int]] - :rtype: int - """ - row = len(obstacleGrid) - col = len(obstacleGrid[0]) - dp = [[0 for i in range(col)] for j in range(row)] - - dp[0][0] = int(obstacleGrid[0][0] == 0) - - #first row - for j in range(1,col): - if obstacleGrid[0][j] == 1: - dp[0][j] = 0 - else: - dp[0][j] = dp[0][j-1] - #first col - for i in range(1,row): - if obstacleGrid[i][0] == 1: - dp[i][0] = 0 - else: - dp[i][0] = dp[i-1][0] - - for i in range(1,row): - for j in range(1,col): - if obstacleGrid[i][j] == 1: - dp[i][j] = 0 - else: - dp[i][j] = dp[i-1][j] + dp[i][j-1] - return dp[row-1][col-1] - -``` - -犯了一个错,简直觉得不可思议。一开始初始化dp用的代码是 - -``` -dp = [[0] * col] * row -``` - -问题在此: - - -``` ->>> x = [[]] * 3 ->>> x[1].append(0) ->>> x -[[0], [0], [0]] -``` - -这样初始化是做了三个一样的object. - -The problem is that they're all the same exact list in memory. When you use the [x]*n syntax, what you get is a list of n many x objects, but they're all references to the same object. They're not distinct instances, rather, just n references to the same instance. - -参见stackoverflow : diff --git "a/docs/Leetcode_Solutions/Java/066._plus_one \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/066._plus_one \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 8897d3919..000000000 --- "a/docs/Leetcode_Solutions/Java/066._plus_one \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,60 +0,0 @@ -### 66. Plus One - -题目: - - - -难度 : Easy - - - - -这里是用的递归,很容易理解,如果空列表直接加1,最后一位小于9,那么直接就最后一位加1,否则添加一个0,然后再把余下的递归加1 - - -```python - -class Solution(object): - def plusOne(self, digits): - """ - :type digits: List[int] - :rtype: List[int] - """ - if digits == []: - return [1] - if digits[-1] < 9: - return digits[:-1] + [digits[-1] + 1] - else: - return self.plusOne(digits[:-1]) + [0] -``` - - -其实可以考虑循环,效率更高,参考[此处](https://shenjie1993.gitbooks.io/leetcode-python/content/066%20Plus%20One.html) - - - -> 从低位到高位,如果后一位有进位的话,那么该位要加上一,否则退出循环。如果最高位也进位,那么在列表前要插入一个一。 - - - -``` -class Solution(object): - def plusOne(self, digits): - """ - :type digits: List[int] - :rtype: List[int] - """ - carry = 1 - - for i in range(len(digits)-1,-1,-1): - digits[i] += carry - if digits[i] < 10: - carry = 0 - break - else: - digits[i] -= 10 - if carry == 1: - digits.insert(0,1) - return digits -``` - diff --git "a/docs/Leetcode_Solutions/Java/067._add_binary \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/067._add_binary \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 875dc9e63..000000000 --- "a/docs/Leetcode_Solutions/Java/067._add_binary \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,31 +0,0 @@ -###67. Add Binary - -题目: - - - -难度 : Easy - - -几种case: - -- a or b 为空,最简单 -- 唯一的问题是如果有进位的处理,进位的处理就是先让其中的一个数和```‘1’```做```addBinary```处理 ,然后再用```addBinary``` - -```python -class Solution(object): - def addBinary(self, a, b): - """ - :type a: str - :type b: str - :rtype: str - """ - if (a == '' or b == ''): - return a + b - elif a[-1] == '0' and b[-1] == '0': - return self.addBinary(a[:-1], b[:-1]) + '0' - elif a[-1] == '1' and b[-1] == '1': - return self.addBinary(a[:-1], self.addBinary(b[:-1],'1')) + '0' - else: - return self.addBinary(a[:-1], b[:-1]) + '1' -``` diff --git "a/docs/Leetcode_Solutions/Java/069._sqrt(x) \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/069._sqrt(x) \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 70c28f6e2..000000000 --- "a/docs/Leetcode_Solutions/Java/069._sqrt(x) \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,101 +0,0 @@ -### 69. Sqrt(x) - - -题目: - - - -难度: - -Medium - - -思路: - -一看,觉得很容易,一写,超时: - -``` -class Solution(object): - def mySqrt(self, x): - """ - :type x: int - :rtype: int - """ - i = 0 - while i * i <= x : - if i * i == x: - return i - elif i * i < x and (i+1) * (i+1) > x: - return i - i += 1 -``` - -看一眼tag, binary search,难道从x/2之类的开始搜起来?话说还想到求sqrt有个🐂的牛顿法? - -莫名其妙过了的代码: - -```python -class Solution(object): - def mySqrt(self, x): - """ - :type x: int - :rtype: int - """ - if x == 1 : return 1 - if x == 0 : return 0 - l, r = 0, x - 1 - while l <= r: - mid = l + ((r - l) >> 2) - if mid * mid <= x and (mid+1)*(mid+1) > x: - return mid - elif mid * mid > x: - r = mid - 1 - else: - l = mid + 1 -``` - -或者 -```python -class Solution(object): - def mySqrt(self, x): - """ - :type x: int - :rtype: int - """ - if x == 1: - return 1 - if x == 0: - return 0 - l, r = 0, x-1 - while l <= r: - mid = l + ((r - l) >> 2) - if (mid * mid - x == 0): - return mid - elif (mid * mid - x > 0): - r = mid - 1 - else: - l = mid + 1 - return r -``` - - - -牛顿法 - -参见wikipedia,to be done:自己推导一遍 - - - -```python -class Solution(object): - def mySqrt(self, x): - """ - :type x: int - :rtype: int - """ - res = 1.0 - while abs(res * res - x) > 0.1: - res = (res + x / res) / 2 - return int(res) - -``` diff --git "a/docs/Leetcode_Solutions/Java/070. Climbing Stairs \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/070. Climbing Stairs \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 890b2f338..000000000 --- "a/docs/Leetcode_Solutions/Java/070. Climbing Stairs \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,99 +0,0 @@ -### 70. Climbing Stairs - - -题目: - - - -难度: -Easy - -思路: - -Fibonacci 的DP版本 - -对于DP的不同理解造成不同的写法 -Memoization will usually add on your time-complexity to your space-complexity (e.g. with tabulation you have more liberty to throw away calculations, like using tabulation with Fib lets you use O(1) space, but memoization with Fib uses O(N) stack space). -详看 - -[Dynamic programming and memoization: bottom-up vs top-down approaches](https://awjin.me/algos-js/dp/tab-memo.html) - -[Tabulation vs Memoizatation](http://www.geeksforgeeks.org/tabulation-vs-memoizatation/) -- top-down(memorize) - -``` -def memorize_fib(n): # n为第几个Fibonacci数 - memo = {1:1, 2:1} - if n in memo: - return memo[n] - else: - memo[n] = memorize_fib(n-1) + memorize_fib(n-2) - return memo[n] - -print(memorize_fib(4)) -``` -输出```3``` - - -- bottom up(tabulation) - -``` -def tabulation_fib(n): # n为第几个Fibonacci数 - fib = [1, 1, 2] - if n < 4: - return fib[n-1] - for k in range(3, n+1): - fib[2] = fib[0] + fib[1] - fib[0], fib[1] = fib[1], fib[2] - return fib[2] - -print(tabulation_fib(4)) -``` -输出```3``` - -这里memo用dict,用array也一样。当然用bottom up还有一点,可以只存每次最后两个数,可以save space.,这样就只用到constant space. - -AC 代码(这里采用bottom up思想) - -```python -class Solution(object): - def climbStairs(self, n): - """ - :type n: int - :rtype: int - """ - fib = [1, 2, 3] - if n < 4: - return fib[n-1] - for k in range(3, n+1): -            fib[2] = fib[0] + fib[1]             # 永远只存3个元素,save space -            fib[0], fib[1] = fib[1], fib[2] - return fib[2] -``` -- Complexity Analysis - - - Time complexity : O(n) - - - Space complexity : O(1). Constant space is used. -另外还有一个公式法: - -![](https://github.com/Lisanaaa/myTODOs/blob/master/41512784914_.pic.jpg) - -由于这里面相当于```standard Fibonacci```函数向前进了一步,排列为1,2,3,5而非原本的1,1,2,3,所以代码中使用```n+1``` -```python -class Solution(object): - def climbStairs(self, n): - """ - :type n: int - :rtype: int - """ - import math - sqrt5 = math.sqrt(5) - fibn = pow((1 + sqrt5) / 2, n+1) - pow((1 - sqrt5) / 2, n+1) - return int(float(fibn/sqrt5)) -``` -- Complexity Analysis - - - Time complexity : O(lg(n)). pow method takes log(n) time. - - - Space complexity : O(1). Constant space is used. diff --git "a/docs/Leetcode_Solutions/Java/072._edit_distance \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/072._edit_distance \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index c2720f92b..000000000 --- "a/docs/Leetcode_Solutions/Java/072._edit_distance \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,116 +0,0 @@ -###72. Edit Distance - -题目: - - - -难度: - -Hard - -可以做的操作: - -- insert -- delete -- replace - -动归典型,原来也是有wikipedia page的算法 - - - - - - -看wikipedia 这解释 - -``` - / max(i,j) if min(i,j) = 0 - - / dp[i-1][j] + 1 word1[i]不在word2[0...j]中,所以删除 - dp[i][j] - min -- dp[i][j-1] + 1 insertion - \ dp[i-1][j-1] + 1/0 word[i]与word[j]是否相等 -``` - -上面的就不用解释了,min分别对应:删除、插入、以及替代(1/0取决 word1[i] == word2[j] ),反正也是tabular类型,画表来解决问题。 - - -用wikipedia上的伪码改造 - -``` -function LevenshteinDistance(char s[1..m], char t[1..n]): - // for all i and j, d[i,j] will hold the Levenshtein distance between - // the first i characters of s and the first j characters of t - // note that d has (m+1)*(n+1) values - declare int d[0..m, 0..n] - - set each element in d to zero - - // source prefixes can be transformed into empty string by - // dropping all characters - for i from 1 to m: - d[i, 0] := i - - // target prefixes can be reached from empty source prefix - // by inserting every character - for j from 1 to n: - d[0, j] := j - - for j from 1 to n: - for i from 1 to m: - if s[i] = t[j]: - substitutionCost := 0 - else: - substitutionCost := 1 - d[i, j] := minimum(d[i-1, j] + 1, // deletion - d[i, j-1] + 1, // insertion - d[i-1, j-1] + substitutionCost) // substitution - - return d[m, n] -``` - -对应的例子表格图 - -``` - k i t t e n - 0 1 2 3 4 5 6 -s 1 1 2 3 4 5 6 -i 2 2 1 2 3 4 5 -t 3 3 2 1 2 3 4 -t 4 4 3 2 1 2 3 -i 5 5 4 3 2 2 3 -n 6 6 5 4 3 3 2 -g 7 7 6 5 4 4 3 -``` - - -AC代码 - -``` -class Solution(object): - def minDistance(self, word1, word2): - """ - :type word1: str - :type word2: str - :rtype: int - """ - m,n = len(word1), len(word2) - dp = [[0 for i in range(m+1)] for j in range(n+1)] - - for i in range(1,m+1): - dp[0][i] = i - - for j in range(1,n+1): - dp[j][0] = j - - for j in range(1,n+1): - for i in range(1,m+1): - cost = 0 if word1[i-1] == word2[j-1] else 1 - dp[j][i] = min(dp[j-1][i] + 1, dp[j][i-1] + 1, dp[j-1][i-1] + cost) - - return dp[n][m] -``` - - -貌似还有提升版本,但是比较明显即使有伪码,一开始也出错于下标. - -升级版 to be learned. \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/073. Set Matrix Zeroes \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/073. Set Matrix Zeroes \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 0b30f99ed..000000000 --- "a/docs/Leetcode_Solutions/Java/073. Set Matrix Zeroes \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,55 +0,0 @@ -### 73. Set Matrix Zeroes - - - -题目: - - - - -难度 : Medium - - - -思路: - -Naive AC代码,一看类似那个 game of life,不用extra space,不用O(mn),应该就是用状态转移机了(?),所以还是先naive AC把: - -``` -class Solution(object): - def setZeroes(self, matrix): - """ - :type matrix: List[List[int]] - :rtype: void Do not return anything, modify matrix in-place instead. - """ - def setZero(i,j): - for m in range(col): - matrix[i][m] = 0 - for n in range(row): - matrix[n][j] = 0 - - - row = len(matrix) - col = len(matrix[0]) if row else 0 - - newM = [] - for i in range(row): - newM.append(matrix[i][:]) - - - for i in range(row): - for j in range(col): - if newM[i][j] == 0: - setZero(i,j) -``` - - - -`正确思路`: - -一边遍历,一边将相应的行和列置为0是行不通的,会影响后面元素的遍历判断,所以要记录下哪些行和哪些列是要置为0的。为了节约空间,在原矩阵中借两条边,如果该行或者列要置为0,则把左边或者上边的相应位置置为0。如果左边和上边本来就有0,那么需要额外标记一下,最后把左边或者右边也全部置为0. - - - - - diff --git "a/docs/Leetcode_Solutions/Java/074._search_a_2d_matrix \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/074._search_a_2d_matrix \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 026a5d34d..000000000 --- "a/docs/Leetcode_Solutions/Java/074._search_a_2d_matrix \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,81 +0,0 @@ -### 74. Search a 2D Matrix - -题目: - - - -难度: -Medium - - -思路: -想过将```2D matrix```看成一个大```sorted list```,代码如下: -```python -class Solution(object): - def searchMatrix(self, matrix, target): - """ - :type matrix: List[List[int]] - :type target: int - :rtype: bool - """ - row = len(matrix) - col = len(matrix[0]) if row else 0 - l, r = 0, row * col - 1 - while l <= r: - mid = l + ((r - l) >> 2) - if target > matrix[mid/col][mid%col]: - l = mid + 1 - elif target < matrix[mid/col][mid%col]: - r = mid - 1 - else: - return True - return False -``` - - -但是后面觉得不行, -原因如下: -1. m * n may overflow for large m and n; -2. it will use multiple expensive operations such as / and % - - - - - - -因此二分Search,``` binary search by row first, then binary search by column.``` - - -```python -class Solution(object): - def searchMatrix(self, matrix, target): - """ - :type matrix: List[List[int]] - :type target: int - :rtype: bool - """ - if not matrix or not matrix[0]: - return False - row = len(matrix) - col = len(matrix[0]) if row else 0 - l, r = 0, row - 1 - while l <= r: - mid_row = l + ((r - l) >> 2) - if matrix[mid_row][0] <= target <= matrix[mid_row][-1]: - m, n = 0, col - 1 - while m <= n: - mid_col = m + ((n - m) >> 2) - if matrix[mid_row][mid_col] > target: - n = mid_col - 1 - elif matrix[mid_row][mid_col] < target: - m = mid_col + 1 - else: - return True - return False - elif target < matrix[mid_row][0]: - r = mid_row - 1 - else: - l = mid_row + 1 - return False - -``` diff --git "a/docs/Leetcode_Solutions/Java/075._sort_colors \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/075._sort_colors \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e70f4e6ad..000000000 --- "a/docs/Leetcode_Solutions/Java/075._sort_colors \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,54 +0,0 @@ -###75. Sort Colors - -题目: - - - -难度: - -Medium - - -思路: - -这个问题是 Dutch National Flag Problem, 荷兰旗问题 - - - -思路其实是类似partition的,比x小的放左边,比x大的放右边。 - -这里是用三个指针,begin, cur, end,cur需要遍历整个数组 - -- cur 指向0,交换begin与cur, begin++,cur++ -- cur 指向1,不做任何交换,cur++ -- cur 指向2,交换end与cur,end-- - -之所以cur指向2,交换之后不前进是因为我们不知道end此时指向的元素是几,如果交换过来的是0或者1,那么明显我们需要做进一步的处理,所以最终判断条件是end =< cur应该就结束了 - -这样的three-way-partition也只是3-way好用吧?如果有4个数,那么这样则是无效的,或者如果是4-way,那么可以转换成3-way+2-way - - -``` -class Solution(object): - def sortColors(self, nums): - """ - :type nums: List[int] - :rtype: void Do not return anything, modify nums in-place instead. - """ - begin,cur,end = 0,0,len(nums) - 1 - - while cur <= end: - if nums[cur] == 0: - nums[begin],nums[cur] = nums[cur],nums[begin] - cur += 1 - begin += 1 - - elif nums[cur] == 1: - cur += 1 - - else: # nums[cur] == 2 - nums[cur],nums[end] = nums[end],nums[cur] - end -=1 - -``` - diff --git "a/docs/Leetcode_Solutions/Java/076._Minimum_Window_Substring \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/076._Minimum_Window_Substring \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 1407d82d3..000000000 --- "a/docs/Leetcode_Solutions/Java/076._Minimum_Window_Substring \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,44 +0,0 @@ -### 76. Minimum Window Substring -题目: - - - -难度 : Hard - - -模板大法 - - -```python -class Solution(object): - def minWindow(self, s, t): - """ - :type s: str - :type t: str - :rtype: str - """ - if len(t) > len(s): - return '' - maps = collections.Counter(t) - counter = len(maps.keys()) - begin, end, head, length = 0, 0, 0, float('inf') - while end < len(s): - if s[end] in maps: - maps[s[end]] -= 1 - if maps[s[end]] == 0: - counter -= 1 - end += 1 - while counter == 0: - if s[begin] in maps: - maps[s[begin]] += 1 - if maps[s[begin]] > 0: - counter += 1 - if end - begin < length: - length = end - begin - head = begin - begin += 1 - if length == float('inf'): - return '' - return s[head:head+length] -``` - diff --git "a/docs/Leetcode_Solutions/Java/077._combinations \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/077._combinations \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 1672b9dff..000000000 --- "a/docs/Leetcode_Solutions/Java/077._combinations \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,123 +0,0 @@ -###77. Combinations - - -题目: - - - -难度 : Medium - - -思路一: -python作弊法 - -``` -import itertools -p = [4, 8, 15, 16, 23, 42] -c = itertools.combinations(p, 4) -for i in c: - print i - -结果: - -(4, 8, 15, 16) -(4, 8, 15, 23) -(4, 8, 15, 42) -(4, 8, 16, 23) -(4, 8, 16, 42) -(4, 8, 23, 42) -(4, 15, 16, 23) -(4, 15, 16, 42) -(4, 15, 23, 42) -(4, 16, 23, 42) -(8, 15, 16, 23) -(8, 15, 16, 42) -(8, 15, 23, 42) -(8, 16, 23, 42) -(15, 16, 23, 42) -``` - -作弊AC代码: - -``` -class Solution(object): - def combine(self, n, k): - """ - :type n: int - :type k: int - :rtype: List[List[int]] - """ - import itertools - return [list(i) for i in itertools.combinations(range(1,n+1), k)] -``` - - -思路二: - -标准的recursion - -但是会超时 - - -``` -class Solution(object): - def combine(self, n, k): - """ - :type n: int - :type k: int - :rtype: List[List[int]] - """ - ans = [] - self.dfs(n, k, 1, [], ans) - return ans - - def dfs(self, n, k ,start, lst, ans): - if k == 0 : - ans.append(lst) - return - for i in range(start, n+1): - self.dfs(n, k - 1, i + 1,lst +[i], ans) -``` - -理解方式 - -``` - - 1 2 3 - 12 13 14 23 24 34 -``` - -可以参照这里 - - - - - -解法三: - - -采用递归的方式,在n个数中选k个,如果n大于k,那么可以分类讨论,如果选了n,那么就是在1到(n-1)中选(k-1)个,否则就是在1到(n-1)中选k个。递归终止的条件是k为1,这时候1到n都符合要求。 - -注意一开始这里的else part花了我一点时间来理解,因为n必定大于k,所以这样递归当 n == k的时候选法就是code原作者的写法,也就是直接[range(1,k+1)] - -参考这里: - - -``` -class Solution(object): - def combine(self, n, k): - """ - :type n: int - :type k: int - :rtype: List[List[int]] - """ - if k == 1: - return [[i + 1] for i in range(n)] - result = [] - if n > k: - result = [r + [n] for r in self.combine(n - 1, k - 1)] + self.combine(n - 1, k) - else: #n == k - # result = [r + [n] for r in self.combine(n - 1, k - 1)] - result = [range(1,k+1)] - return result -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/078.Subsets \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/078.Subsets \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e5b100563..000000000 --- "a/docs/Leetcode_Solutions/Java/078.Subsets \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,47 +0,0 @@ -### 78. Subsets - -题目: - - - -难度 : Medium - - -Python代码 - -```python -class Solution(object): - def subsets(self, nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - results = [[]] - for num in nums: - results.extend([result + [num] for result in results]) - return results - -``` - - -BackTrack 标准解法版 - - -```python -class Solution: - - def search(self, nums, S, index): - if index == len(nums): - self.results.append(S) - return - - self.search(nums, S + [nums[index]], index + 1) - self.search(nums, S, index + 1) - - def subsets(self, nums): - self.results = [] - self.search(nums, [], 0) - return self.results -``` - -对每个元素,有两种可能,加入S和不加入S,写起来思路还是很清爽的 diff --git "a/docs/Leetcode_Solutions/Java/079._word_search \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/079._word_search \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e097a4259..000000000 --- "a/docs/Leetcode_Solutions/Java/079._word_search \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,63 +0,0 @@ -###79. Word Search - - - -题目: - - - -难度: -Medium - - -思路: - -其实这个题和number of islands类似,是backtracking基本功的考查,但是基本功非常有待提高||| - -比较核心的是dfs函数,然后这个函数有取巧的写法:如果outside of boundary就return False - -loop, 如果碰到跟word开头的字母一样,把这个扔进去loop,可以考查这个char在这个board的上下左右是否可以选择,补课使用则重置used, 然后return - -也还是之前摘录的,backtrack写法关键: 选择 (Options),限制 (Restraints),结束条件 (Termination)。 - - - - -``` -class Solution(object): - def exist(self, board, word): - """ - :type board: List[List[str]] - :type word: str - :rtype: bool - """ - - def dfs(board, used, row, col, x, y, word, idx): - if idx == len(word) : - return True - - if x < 0 or x > row -1 or y < 0 or y > col -1 : - return False - - if board[x][y] == word[idx] and not used[x][y]: - used[x][y] = 1 - left = dfs(board,used,row,col,x-1,y,word,idx+1) - right = dfs(board,used,row,col,x+1,y,word,idx+1) - up = dfs(board,used,row,col,x,y-1,word,idx+1) - down = dfs(board,used,row,col,x,y+1,word,idx+1) - - used[x][y] = left or right or up or down - return left or right or up or down - return False - - - row = len(board) - col = len(board[0]) if row else 0 - used = [ [0 for i in range(col)] for j in range(row)] - - for i in range(row): - for j in range(col): - if dfs(board,used,row,col,i,j,word,0): - return True - return False -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/082._remove_duplicates_from_sorted_list_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/082._remove_duplicates_from_sorted_list_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 277b3870c..000000000 --- "a/docs/Leetcode_Solutions/Java/082._remove_duplicates_from_sorted_list_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,49 +0,0 @@ -###82. Remove Duplicates from Sorted List II - - -题目: - - - - -难度: - -Medium - - -木有space 和 time的限制,第一想法,用dictionary存一下每个nodes的个数,这样只要看到它是大于1的,就删删删。 - -虽然是笨办法。但是也可以AC - -``` -class Solution(object): - def deleteDuplicates(self, head): - """ - :type head: ListNode - :rtype: ListNode - """ - dummy = ListNode(-1) - dummy.next = head - - cur = dummy.next - nodeNumber = {} - while cur: - if cur.val in nodeNumber: - nodeNumber[cur.val] += 1 - else: - nodeNumber[cur.val] = 1 - cur = cur.next - - cur = dummy - while cur.next: - if nodeNumber[cur.next.val] > 1: - cur.next = cur.next.next - else: - cur = cur.next - return dummy.next -``` - - -谷歌一下,更省时间的方法是用一个prev 和 cur 指针,然后用一个bool来记录是否duplicate,这样loop一次即可解决问题。 - -to be 写出来 \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/083._remove_duplicates_from_sorted_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/083._remove_duplicates_from_sorted_list \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a9081a689..000000000 --- "a/docs/Leetcode_Solutions/Java/083._remove_duplicates_from_sorted_list \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,28 +0,0 @@ -### 83. Remove Duplicates from Sorted List - -题目: - - - -难度: - -Easy - - -dummy 大法 - -```python -class Solution(object): - def deleteDuplicates(self, head): - """ - :type head: ListNode - :rtype: ListNode - """ - dummy = head - while head: - while head.next and head.next.val == head.val: - head.next = head.next.next # skip duplicated node - head = head.next # not duplicate of current node, move to next node - return dummy - -``` diff --git "a/docs/Leetcode_Solutions/Java/086._partition_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/086._partition_list \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index c1fd2dca0..000000000 --- "a/docs/Leetcode_Solutions/Java/086._partition_list \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,56 +0,0 @@ -###86. Partition List - - -题目: - - - -难度 : Medium - - -思路一: - - -最简单的思路就是两个dummy head,然后一个指向 小于的node,一个指向大于的node - - -思路二: - -不走寻常路了,使用两个指针,一个指向小于的尾巴,一个一直往后走,指向大于,然后交换node - -完成比完美更重要啊,其实可以先试试用简单方法,因为我用我的不走寻常路画了比较久的图,写起来也稍显没那么美观,还在交换node的部分卡了一会 - - - -``` -class Solution(object): - def partition(self, head, x): - """ - :type head: ListNode - :type x: int - :rtype: ListNode - """ - dummy = ListNode(-1) - dummy.next = head - - p1 = p2 = dummy - - while p1.next and p1.next.val < x: - p1 = p1.next - - p2 = p1.next - - while p2: - while p2.next and p2.next.val >= x: - p2 = p2.next - - if p2.next == None: - break - node = p2.next - p2.next = node.next - node.next = p1.next - p1.next = node - p1 = p1.next - - return dummy.next -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/088._merge_sorted_array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/088._merge_sorted_array \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 029b3c330..000000000 --- "a/docs/Leetcode_Solutions/Java/088._merge_sorted_array \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,46 +0,0 @@ -### 88. Merge Sorted Array - - -题目: - - - -难度 : Easy - -### 思路: - -给的数组可能是这样的 - -- nums1 : [0] -- m : 0 -- nums2 : [1] -- n : 1 - - -所以要判断m和n是不是仍然大于0 - - -AC代码 - - -```python -class Solution: - def merge(self, nums1, m, nums2, n): - """ - :type nums1: List[int] - :type m: int - :type nums2: List[int] - :type n: int - :rtype: void Do not return anything, modify nums1 in-place instead. - """ - while m > 0 and n > 0: - if nums1[m-1] > nums2[n-1]: - nums1[m+n-1] = nums1[m-1] - m -= 1 - else: - nums1[m+n-1] = nums2[n-1] - n -= 1 - if n > 0: - nums1[:n] = nums2[:n] - -``` diff --git "a/docs/Leetcode_Solutions/Java/089._gray_code \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/089._gray_code \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index c0a9f193c..000000000 --- "a/docs/Leetcode_Solutions/Java/089._gray_code \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,101 +0,0 @@ -###89. Gray Code - - - -题目: - - - -难度: -Medium - -思路: - -首先不是从任何一个数开始都是有效的,所以naive的想法是从任何一个开始,然后如果能到2^n位,那么说明是有效的,问题解决. - -A gray code sequence must begin with 0. ->简化了一点 - -先写了一段代码: - -``` -def nextCode(curCode, res, n): - if curCode not in res: - res.append(curCode) - else: - return - if len(res) == pow(2,n): - return res - for i in range(n): - nCode = curCode[:] - nCode[i] = 1 if curCode[i] == 0 else 0 - nextCode(nCode,res,n) - -res = [] -nextCode([0,0,0],res,3) -print res -#[[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0], [0, 1, 1], [1, 1, 1], [1, 0, 1], [0, 0, 1]] -``` -实际上问题是这段代码的时间复杂度感觉很高,但是试试 - - -不失所望,到11就超时 - -``` - -class Solution(object): - def grayCode(self, n): - """ - :type n: int - :rtype: List[int] - """ - def nextCode(curCode, res, n): - if curCode not in res: - res.append(curCode) - else: - return - if len(res) == pow(2,n): - return res - for i in xrange(n): - nCode = curCode[:] - nCode[i] = 1 if curCode[i] == 0 else 0 - nextCode(nCode, res, n) - - def listoVal(curCode,n): - val = 0 - for i in range(n-1,-1,-1): - val += pow(2,i) * curCode[i] - return val - - - res = [] - nextCode([0]*n, res, n) - # print res - - val = [] - for i in res: - val.append(listoVal(i,n)) - return val -``` - -然后居然有这个东西: -Gray code,要用位运算!瞑目 - - - - -服气,这个待研究 -``` -class Solution(object): - def grayCode(self, n): - """ - :type n: int - :rtype: List[int] - """ - result = [(i>>1)^i for i in range(pow(2,n))] - return results -``` - - - - - diff --git "a/docs/Leetcode_Solutions/Java/090._subsets_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/090._subsets_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 99661e3da..000000000 --- "a/docs/Leetcode_Solutions/Java/090._subsets_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,80 +0,0 @@ -### 90. Subsets II - -题目: - - - -难度 : Medium - - -思路: - - -参考别人的 - -现在来观察规律,与之前有不同之处是我们需要一个位置来mark,因为不再需要往之前出现过的地方再加了,看这个: - - -``` -[[],[1]] 是 [1] 的子集合 -[[],[1],[2],[1,2]] 是 [1,2] 的子集合,实际上就是1的子集合们加了一个2 -新来的2不能再从头开始加了,它需要从[ .., [2],[1,2] ]加 才是合理的 - -****当出现多个重复数字时,应该从 已经拥有了新数字所出现全部次数的list开始加才是合理的**** -[[],[1]] 是 [1] 的子集合 -[[],[1],[2],[1,2]] 是 [1,2] 的子集合,实际上就是1的子集合们加了一个2 -[ - [2], - [1], - [1,2,2], - [2,2], - [1,2], - [] -] 是 [1,2,2] 的子集和,实际上也就是[1,2]的子集合加了一个2 -新来的2不能再从头开始加了,它需要从[ .., [2,2],[1,2,2] ]加 才是合理的 -例如: -``` - - -这里这个start是来记录了之前一次数组的长度,temp_size记住目前数组的长度,然后用这个来达到去重的目的,非常聪明 - -自己的解法 -```python -class Solution(object): - def subsetsWithDup(self, nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - nums.sort() - results = [[]] - for i in range(len(nums)): - if any(nums[i] in result for result in results): - results.extend([result + [nums[i]] for result in results if result.count(nums[i]) == i - nums.index(nums[i])]) - else: - results.extend([result + [nums[i]] for result in results]) - return results - -``` - - -别人的,但是一个意思 -```python -class Solution(object): - def subsetsWithDup(self, nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - nums.sort() - result = [[]] - temp_size = 0 - for i in range(len(nums)): - start = temp_size if i >= 1 and nums[i] == nums[i-1] else 0 - temp_size = len(result) - for j in range(start, temp_size): - result.append(result[j] + [nums[i]]) - return result - -``` - diff --git "a/docs/Leetcode_Solutions/Java/091._decode_ways \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/091._decode_ways \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 3abd24a85..000000000 --- "a/docs/Leetcode_Solutions/Java/091._decode_ways \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,71 +0,0 @@ -###91. Decode Ways - -题目: - - - - -tag : DP - -难度 : Medium - - - - - -``` -BASE CASE(len(s) = 1 和 len(s) = 2 ): -直接check - -非BASE CASE : -先令 dp[i] = 0 -如果s[i]是可以map的话 -> dp[i] += dp[i-1] 原本的s[0..i]decode方式加上s[i] -如果s[i-1,i]可以map的话 -> dp[i] += dp[i-2] 原本的s[0...i-1]decode方式加上s[i-1,i] -``` - - -Python代码(可美化) - -``` -class Solution(object): - def numDecodings(self, s): - """ - :type s: str - :rtype: int - """ - keys = ['1', '2', '3', '4', '5', '6', '7', '8', '9' ,'10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26'] - values = ['A', 'B','C', 'D', 'E', 'F', 'G','H', 'I', 'J', 'K', 'L', 'M' , 'N', 'O', 'P','Q', 'S', 'R', 'T', 'U','V', 'W', 'X','Y','Z'] - numbersToLetters = dict(zip(keys, values)) - - ways = {} - n = len(s) - for i in range(n): - ways[i] = 0 - if n == 0: - return 0 - elif n == 1 : - ways[0] = int(s in numbersToLetters) - elif n == 2: - if (s[0] in numbersToLetters) and (s[1] in numbersToLetters): - ways[1] += 1 - if (s in numbersToLetters): - ways[1] += 1 - else: - #s[0] - ways[0] = int(s[0] in numbersToLetters) - #s[01] - if (s[0] in numbersToLetters) and (s[1] in numbersToLetters): - ways[1] += 1 - if (s[:2] in numbersToLetters): - ways[1] += 1 - for i in range(2,n): - if s[i] in numbersToLetters: - ways[i] += ways[i-1] - if (s[i-1:i+1] in numbersToLetters): - ways[i] += ways[i-2] - - #print(ways[n-1]) - return ways[n-1] - -``` - diff --git "a/docs/Leetcode_Solutions/Java/092._reverse_linked_list_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/092._reverse_linked_list_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index f2b29da12..000000000 --- "a/docs/Leetcode_Solutions/Java/092._reverse_linked_list_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,66 +0,0 @@ -###92. Reverse Linked List II - -题目: - - - -难度: -Medium - - -跟 reverse linked list一样 - -思路: 找到 第 m 个node,然后开始reverse到第n个node,然后再把它们和原本的list连接起来 - -AC 代码 - -``` -class Solution(object): - def reverseBetween(self, head, m, n): - """ - :type head: ListNode - :type m: int - :type n: int - :rtype: ListNode - """ - # m == n, not reverse - if m == n : return head - - dummy = ListNode(-1) - dummy.next = head - - mbefore = dummy - cnt = 1 - - while mbefore and cnt < m: - mbefore = mbefore.next - cnt += 1 - - prev = None - cur = mbefore.next - tail1 = mbefore.next - - - while cnt <= n : - nxt = cur.next - cur.next = prev - prev = cur - cur = nxt - cnt += 1 - - - - mbefore.next = prev - tail1.next = cur - - return dummy.next -``` - -看了一下别人的代码,又比我写的好嘛,因为是保证m和n有效,用的是for循环先找到 m node: - - - for _ in range(m-1): - .... - - for _ in range(n-m): - reverse 操作 \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/093._restore_ip_addresses \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/093._restore_ip_addresses \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 55e31916b..000000000 --- "a/docs/Leetcode_Solutions/Java/093._restore_ip_addresses \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,66 +0,0 @@ -###93. Restore IP Addresses - -题目: - - - - -难度: - -Medium - - -基本思路已达到,等待AC之路 - -结果AC之路还是比较漫长的,因为不允许前缀为0困扰了一下 - -``` -class Solution(object): - def restoreIpAddresses(self, s): - """ - :type s: str - :rtype: List[str] - """ - self.res = [] - self.singgleAddresses([],s,4) - for i in range(len(self.res)): - self.res[i] = '.'.join(str(j) for j in self.res[i]) - return self.res - - - - def singgleAddresses(self, curRes, s, k): - """ - :type s: str - :rtype: List[str] - """ - if len(s) == 0 and k == 0: - if curRes not in self.res: - self.res.append(curRes) - if len(s) == 0 or k < 0: - return - else: - if self.between0And255(s[:1]): - self.singgleAddresses(curRes + [int(s[:1])], s[1:], k-1) - if self.between0And255(s[:2]): - self.singgleAddresses(curRes + [int(s[:2])], s[2:], k-1) - if self.between0And255(s[:3]): - self.singgleAddresses(curRes + [int(s[:3])], s[3:], k-1) - - def between0And255(self,s): - #前缀不允许为0 - if int(s) == 0 : - if len(s) == 1 : - return True - else: - return False - - if int(s) > 0 and s[0] == '0': - return False - if int(s) > 0 and int(s) <= 255: - return True - return False - -``` - - diff --git "a/docs/Leetcode_Solutions/Java/094._binary_tree_inorder_traversal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/094._binary_tree_inorder_traversal \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index dc288f127..000000000 --- "a/docs/Leetcode_Solutions/Java/094._binary_tree_inorder_traversal \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,92 +0,0 @@ -### 94. Binary Tree Inorder Traversal - -题目: - - - -难度: - -Medium - - -递归版本1⃣️:自己瞬秒的 - - - - -```python -class Solution(object): - def inorderTraversal(self, root): - """ - :type root: TreeNode - :rtype: List[int] - """ - res = [] - if not root: - return res - if root.left: - res.extend(self.inorderTraversal(root.left)) - res.append(root.val) - if root.right: - res.extend(self.inorderTraversal(root.right)) - return res -``` - -递归版本2⃣️: -```python -class Solution(object): - def inorderTraversal(self, root): - """ - :type root: TreeNode - :rtype: List[int] - """ - self.lst = [] - self.DFS(root) - return self.lst - - - def DFS(self,root): - if root == None: - return - if root.left: - self.DFS(root.left) - self.lst.append(root.val) - if root.right: - self.DFS(root.right) - -``` - -非递归用stack,我听谁讲过 😓 - -// to be done - - -via wikipedia - - -递归: - -``` -inorder(node) - if (node = null) - return - inorder(node.left) - visit(node) - inorder(node.right) -``` - - -非递归,跟之前那个iterator有得一拼,其实好几个题都是在玩这个花样? - -``` -iterativeInorder(node) - s ← empty stack - while (not s.isEmpty() or node ≠ null) - if (node ≠ null) - s.push(node) - node ← node.left - else - node ← s.pop() - visit(node) - node ← node.right -``` diff --git "a/docs/Leetcode_Solutions/Java/096._unique_binary_search_trees \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/096._unique_binary_search_trees \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 2e29cf929..000000000 --- "a/docs/Leetcode_Solutions/Java/096._unique_binary_search_trees \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,43 +0,0 @@ -###96. Unique Binary Search Trees - - - -题目: - - - -难度: -Medium - -思路: - - -参照此处hint: - - - - -首先明确n个不等的数它们能构成的二叉搜索树的种类都是相等的. - -毫无头绪,对于1...n的bst,可以这样看,k可以作为root,那么1..k-1必定在左边,k+1...n必定在右边,而1...k-1课产生的bst树是dp[k-1],右边产生的数是dp[n-k],所以能生成的树的数量是 dp[k-1]* dp[n-k] - -dp[n] = sum(dp[k-1]*dp[n-k]),从0到k - - -``` -class Solution(object): - def numTrees(self, n): - """ - :type n: int - :rtype: int - """ - dp = [ 1 for i in range(n+1)] - - for i in range(2,n+1): - s = 0 - for k in range(i): - s += dp[k]*dp[i-k-1] - dp[i] = s - - return dp[-1] -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/098._validate_binary_search_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/098._validate_binary_search_tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index c4b5dcfbf..000000000 --- "a/docs/Leetcode_Solutions/Java/098._validate_binary_search_tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,74 +0,0 @@ -###98. Validate Binary Search Tree - -题目: - - - - -难度: - -Easy - - -以前做过这道题,valid binary tree,需要check两件事: - - -``` - 10 - / \ - 7 20 - / \ - 5 40 -``` - - -- node.left.val < node.val - - right subtree of left child, value < node.val -- node.right.val > node.val - - left subtree of the right child, value > node.val - - -wikipedia上有伪码: - -``` -truct TreeNode { - int key; - int value; - struct TreeNode *left; - struct TreeNode *right; -}; - -bool isBST(struct TreeNode *node, int minKey, int maxKey) { - if(node == NULL) return true; - if(node->key < minKey || node->key > maxKey) return false; - - return isBST(node->left, minKey, node->key) && isBST(node->right, node->key, maxKey); -} - - -if(isBST(root, INT_MIN, INT_MAX)) { - puts("This is a BST."); -} else { - puts("This is NOT a BST!"); -} -``` - -实际上就是每次往下看,node都确保被夹在一个范围。 - -翻译了一下伪码,AC - - -``` -class Solution(object): - def isValidBST(self, root): - """ - :type root: TreeNode - :rtype: bool - """ - return self.isBST(root, float('-inf'),float('inf')) - - def isBST(self, root, minKey, maxKey): - if root == None: return True - if root.val <= minKey or root.val >= maxKey : return False - return self.isBST(root.left,minKey,root.val) and self.isBST(root.right, root.val, maxKey) -``` diff --git "a/docs/Leetcode_Solutions/Java/100._same_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/100._same_tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index f12c86c3a..000000000 --- "a/docs/Leetcode_Solutions/Java/100._same_tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,49 +0,0 @@ -### 100. Same Tree - -题目: - - - - -难度: - -Easy - - -太简单了,递归一行! - - -```python -# Definition for a binary tree node. -# class TreeNode(object): -# def __init__(self, x): -# self.val = x -# self.left = None -# self.right = None - -class Solution(object): - def isSameTree(self, p, q): - """ - :type p: TreeNode - :type q: TreeNode - :rtype: bool - """ - return p.val == q.val and all(map(self.isSameTree, (p.left, p.right), (q.left, q.right))) if p and q else p is q -``` - -```python -class Solution(object): - def isSameTree(self, p, q): - """ - :type p: TreeNode - :type q: TreeNode - :rtype: bool - """ - if (not p and q) or (p and not q): - return False - if not p and not q: - return True - if p.val == q.val: - return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right) - return False -``` diff --git "a/docs/Leetcode_Solutions/Java/101._symmetric_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/101._symmetric_tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index cb6f5219b..000000000 --- "a/docs/Leetcode_Solutions/Java/101._symmetric_tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,45 +0,0 @@ -### 101. Symmetric Tree - -题目: - - - - -难度: - -Easy - - -两棵树symmetric, 有几种可能: - -- 均为none ,symmetric -- 左孩子,右孩子都不存在,并且值相等, symmetric -- 右子树 和 另一棵树的左子树相等,左子树 和另一颗树的右子树相等 🌲 - - -```python -class Solution(object): - def isSymmetric(self, root): - """ - :type root: TreeNode - :rtype: bool - """ - if not root: - return True - return self.symmetric(root.left, root.right) - - def symmetric(self, l1, l2): - if not l1 or not l2: - if not l1 and not l2: - return True - else: - return False - if l1.val == l2.val: - return self.symmetric(l1.left, l2.right) and self.symmetric(l1.right, l2.left) - else: - return False -``` - - - - diff --git "a/docs/Leetcode_Solutions/Java/102._binary_tree_level_order_traversal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/102._binary_tree_level_order_traversal \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 7d4ac4efb..000000000 --- "a/docs/Leetcode_Solutions/Java/102._binary_tree_level_order_traversal \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,62 +0,0 @@ -### 102. Binary Tree Level Order Traversal - -题目: - - - - -难度: - -Medium - -第一种做法:利用curLevel和nextLevel来记录,然后按层append. - - -```python -class Solution(object): - def levelOrder(self, root): - """ - :type root: TreeNode - :rtype: List[List[int]] - """ - if not root: - return [] - res, cur_level = [], [root] - while cur_level: - next_level, tmp_res = [], [] - for node in cur_level: - tmp_res.append(node.val) - if node.left: - next_level.append(node.left) - if node.right: - next_level.append(node.right) - res.append(tmp_res) - cur_level = next_level - return res -``` - - -第二种做法:递归 - - - -```python -class Solution(object): - def levelOrder(self, root): - """ - :type root: TreeNode - :rtype: List[List[int]] - """ - res = [] - self.iter_order(root, 0, res) - return res - - def iter_order(self, root, level, res): - if not root: return - if len(res) < level + 1: - res.append([]) - res[level].append(root.val) - self.iter_order(root.left, level+1, res) - self.iter_order(root.right, level+1, res) -``` -用递归来记录每一层,需要更加学习,不算easy diff --git "a/docs/Leetcode_Solutions/Java/103._binary_tree_zigzag_level_order_traversal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/103._binary_tree_zigzag_level_order_traversal \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index edc9b3986..000000000 --- "a/docs/Leetcode_Solutions/Java/103._binary_tree_zigzag_level_order_traversal \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,43 +0,0 @@ -### 103. Binary Tree Zigzag Level Order Traversal - -题目: - - - - -难度: - -Medium - - - -```python -class Solution(object): - def zigzagLevelOrder(self, root): - """ - :type root: TreeNode - :rtype: List[List[int]] - """ - if not root: - return [] - res, cur_level, level_count = [], [root], 0 - while cur_level: - next_level, tmp_res = [], [] - for node in cur_level: - tmp_res.append(node.val) - if node.left: - next_level.append(node.left) - if node.right: - next_level.append(node.right) - if level_count % 2 == 0: - res.append(tmp_res) - else: - tmp_res.reverse() - res.append(tmp_res) - level_count += 1 - cur_level = next_level - - return res -``` - - diff --git "a/docs/Leetcode_Solutions/Java/104._maximum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/104._maximum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 451160d32..000000000 --- "a/docs/Leetcode_Solutions/Java/104._maximum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,23 +0,0 @@ -### 104. Maximum Depth of Binary Tree - -题目: - - - -难度: - -Easy - - -简单题,但是这道题跟[leetcode111](https://github.com/Lisanaaa/thinking_in_lc/blob/master/111._minimum_depth_of_binary_tree.md)不一样,这道题没有特殊情况,所以一行就够了 - - -```python -class Solution(object): - def maxDepth(self, root): - """ - :type root: TreeNode - :rtype: int - """ - return 1 + max(map(self.maxDepth, (root.left, root.right))) if root else 0 -``` diff --git "a/docs/Leetcode_Solutions/Java/105._construct_binary_tree_from_preorder_and_inorder_traversal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/105._construct_binary_tree_from_preorder_and_inorder_traversal \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 7ed244dd9..000000000 --- "a/docs/Leetcode_Solutions/Java/105._construct_binary_tree_from_preorder_and_inorder_traversal \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,100 +0,0 @@ -###105. Construct Binary Tree from Preorder and Inorder Traversal - -题目: - - - -难度 : Medium - - -preorder 是 根 -> 左 -> 右 -inorder 是 左 -> 根 -> 右 - - -首先pre的第一个就是整个树的root, 假设 pre[0] = in[k],那么in的前k-1个就是树的左子树,后面部分就是树的右子树,这样递归来看. - -然后递归来看,对于前k-1个又是同样的道理吧。 - -然后用递归,写了一颗小树测试,感觉上是对的, - - -``` -class TreeNode(object): - def __init__(self, x): - self.val = x - self.left = None - self.right = None - -nodeA = TreeNode('A') -nodeB = TreeNode('B') -nodeC = TreeNode('C') -nodeD = TreeNode('D') -nodeE = TreeNode('E') -nodeF = TreeNode('F') - -nodeA.left = nodeB -nodeA.right = nodeC -nodeB.left = nodeD -nodeB.right = nodeE -nodeC.left = nodeF - - - # A - # / \ - # B C - # / \ / - # D E F - - -def construct(preorder, inorder): - if preorder == inorder == []: - return None - else: - rootVal = preorder[0] - root = TreeNode(rootVal) - k = inorder.index(rootVal) - if len(preorder) == len(inorder) == 1: - return root - else: - root.left = construct(preorder[1:1+k],inorder[:k]) - root.right = construct(preorder[k+1:],inorder[k+1:]) - return root -root = construct(['A','B','D','E','C','F'],['D','B','E','A','F','C']) - -``` - -尝试AC发现,memory limit超,用大一点的数据测试RecursionError: maximum recursion depth exceeded。 - -根据网上的参考改成偏iteration一点的递归, AC通过 - -mark一下,为了避免数组的复杂操作,这里直接用左右界和数组的引用来代表一段前序遍历和中序遍历。直接用递归更改list本身不能AC,但是变成这样就可以AC,因为更改数组会拷贝数组带来很多内存和递归上的麻烦,是这样的么? - -这个技巧还比较常见,就是用原本list的角标,而不去cut list本身 - - -``` -class Solution(object): - def buildTree(self, preorder, inorder): - """ - :type preorder: List[int] - :type inorder: List[int] - :rtype: TreeNode - """ - def buildTree(preorder, inorder, lp, rp, li, ri): - if lp > rp or li > ri: - return None - - root = TreeNode(preorder[lp]) - k = inorder.index(preorder[lp]) - - # left node - left = buildTree(preorder, inorder, lp+1, lp + k - li, li, k - 1) - right = buildTree(preorder, inorder, lp + k - li + 1, rp, k+1, ri) - - root.left = left - root.right = right - - return root - - return buildTree(preorder, inorder, 0 , len(preorder) - 1, 0, len(inorder) -1) -``` diff --git "a/docs/Leetcode_Solutions/Java/106._construct_binary_tree_from_inorder_and_postorder_traversal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/106._construct_binary_tree_from_inorder_and_postorder_traversal \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 61331c520..000000000 --- "a/docs/Leetcode_Solutions/Java/106._construct_binary_tree_from_inorder_and_postorder_traversal \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,68 +0,0 @@ -###106. Construct Binary Tree from Inorder and Postorder Traversal - -题目: - - - -难度 : Medium - - -inorder 是 左 -> 根 -> 右 -postorder 是 左 -> 右 -> 根 - - -跟105基本一样 - -还是先弄了一个递归可用版本 - - -``` -def buildTree(inorder, postorder): - """ - :type preorder: List[int] - :type inorder: List[int] - :rtype: TreeNode - """ - if postorder == inorder == []: - return None - else: - rootVal = postorder[-1] - root = TreeNode(rootVal) - k = inorder.index(rootVal) - root.left = buildTree(inorder[:k],postorder[:k]) - root.right = buildTree(inorder[k+1:],postorder[k:-1]) - return root - -``` -照抄105 - - -``` -class Solution(object): - def buildTree(self, inorder, postorder): - """ - :type inorder: List[int] - :type postorder: List[int] - :rtype: TreeNode - """ - def buildTree(inorder, postorder, li, ri ,lp, rp ): - if lp > rp or li > ri: - return None - - root = TreeNode(postorder[rp]) - k = inorder.index(postorder[rp]) - - # left node - left = buildTree(inorder, postorder, li, k-1, lp, lp + k - li - 1) - right = buildTree(inorder, postorder, k+1, ri, lp+k-li, rp-1) - - root.left = left - root.right = right - - return root - - return buildTree(inorder, postorder, 0, len(inorder) - 1, 0, len(postorder) - 1) - -``` - - diff --git "a/docs/Leetcode_Solutions/Java/107._binary_tree_level_order_traversal_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/107._binary_tree_level_order_traversal_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a7fd3d732..000000000 --- "a/docs/Leetcode_Solutions/Java/107._binary_tree_level_order_traversal_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,48 +0,0 @@ -###107. Binary Tree Level Order Traversal II - -题目: - - - - -难度: - -Easy - - -用102 的算法作弊 - - -``` -# Definition for a binary tree node. -# class TreeNode(object): -# def __init__(self, x): -# self.val = x -# self.left = None -# self.right = None - -class Solution(object): - def levelOrderBottom(self, root): - """ - :type root: TreeNode - :rtype: List[List[int]] - """ - res = [] - - if root == None: return [] - - curLevel = [root] - while curLevel: - nextLevel = [] - tmpRes = [] - for node in curLevel: - tmpRes.append(node.val) - if node.left: nextLevel.append(node.left) - if node.right: nextLevel.append(node.right) - res.append(tmpRes) - curLevel = nextLevel - res.reverse() - return res -``` - - diff --git "a/docs/Leetcode_Solutions/Java/108._convert_sorted_array_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/108._convert_sorted_array_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 12705f918..000000000 --- "a/docs/Leetcode_Solutions/Java/108._convert_sorted_array_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,41 +0,0 @@ -###108. Convert Sorted Array to Binary Search Tree - -题目: - - - -难度: -Medium - - -思路: - -递归 - -- nums为空,return None -- nums 只有一个, return其为根节点 -- nums 大于一个,nums[n/2]为中间元素,根结点,nums[:mid]为左子树, nums[mid+1:]为右子树 - - -``` -class Solution(object): - def sortedArrayToBST(self, nums): - """ - :type nums: List[int] - :rtype: TreeNode - """ - n = len(nums) - - if n == 0 : - return None - if n == 1 : - return TreeNode(nums[0]) - else: - mid = n / 2 - root = TreeNode(nums[mid]) - root.left = self.sortedArrayToBST(nums[:mid]) - root.right = self.sortedArrayToBST(nums[mid+1:]) - return root - - -``` diff --git "a/docs/Leetcode_Solutions/Java/109._convert_sorted_list_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/109._convert_sorted_list_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 4ca36dc47..000000000 --- "a/docs/Leetcode_Solutions/Java/109._convert_sorted_list_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,47 +0,0 @@ -###109. Convert Sorted List to Binary Search Tree - - - -题目: - - - -难度: - -Medium - -思路: - -跟解array to binary search tree一样,递归,找到list中间点,把它变成root,左边为左树,右边为右子树 - -值得注意的是需要找到的是list中间的前一个,所以用一个dummy node,然后反复使用linked list找中点的代码 - -``` -class Solution(object): - def sortedListToBST(self, head): - """ - :type head: ListNode - :rtype: TreeNode - """ - - if head == None: - return None - elif head.next == None: - return TreeNode(head.val) - else: - dummy = ListNode(-1) - dummy.next = head - slow, fast = dummy, dummy - while fast.next and fast.next.next: - slow = slow.next - fast = fast.next.next - - # print slow.val - mid = slow.next - slow.next = None - - root = TreeNode(mid.val) - root.left = self.sortedListToBST(head) - root.right = self.sortedListToBST(mid.next) - return root -``` diff --git "a/docs/Leetcode_Solutions/Java/110._balanced_binary_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/110._balanced_binary_tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 4b32130f9..000000000 --- "a/docs/Leetcode_Solutions/Java/110._balanced_binary_tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,37 +0,0 @@ -###110. Balanced Binary Tree - -题目: - - - -难度: -Easy - - -全程递归中 - - - -``` -class Solution(object): - def isBalanced(self, root): - """ - :type root: TreeNode - :rtype: bool - """ - if root == None: - return True - - lh = self.height(root.left) - rh = self.height(root.right) - - if abs(lh-rh) <= 1 and self.isBalanced(root.left) and self.isBalanced(root.right): - return True - return False - - - def height(self, node): - if node == None: - return 0 - return 1 + max(self.height(node.left),self.height(node.right)) -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/111._minimum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/111._minimum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index d84421b0c..000000000 --- "a/docs/Leetcode_Solutions/Java/111._minimum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,94 +0,0 @@ -### 111. Minimum Depth of Binary Tree - -题目: - - - -难度: - -Easy - - -思路,看完题目我想当然的认为就是直接递归取最小的值,代码如下: -``` -class Solution(object): - def minDepth(self, root): - """ - :type root: TreeNode - :rtype: int - """ - if not root: - return 0 - return 1 + min(map(self.minDepth, (root.left, root.right))) -``` - - -但是没过,有一种特殊情况就是 - -注意```leaf node```反正就是没有```left```和```right```的 - -比如下图 - - -``` -1 - \ - 2 -``` - -```2```是一个孩子节点 - -这种情况应该输出```2```而不是```1``` - - - -唯一的特殊情况就是上面这种了,因为```root```下只有一个左节点或者是右节点,这样另外一边的空节点并不算是```leaf node``` - -```leaf node: itself is not null but it has both children null``` - -因此要避免这种情况,代码改成下面: - - -```python -# Definition for a binary tree node. -# Definition for a binary tree node. -# class TreeNode(object): -# def __init__(self, x): -# self.val = x -# self.left = None -# self.right = None - -class Solution(object): - def minDepth(self, root): - """ - :type root: TreeNode - :rtype: int - """ - if not root: - return 0 - depth_under_root = map(self.minDepth, (root.left, root.right)) - return 1 + (min(depth_under_root) or max(depth_under_root)) -``` - - -所以还是要养成多写edge case的好习惯,也许就帮你避免了general写法的特例,代码如下 -```python -class Solution(object): - def minDepth(self, root): - """ - :type root: TreeNode - :rtype: int - """ - if root == None: - return 0 - elif root.left == None and root.right == None: - return 1 - else : - if root.left == None: - return 1 + self.minDepth(root.right) - elif root.right == None: - return 1 + self.minDepth(root.left) - else: - return min(1+ self.minDepth(root.left), 1+ self.minDepth(root.right)) - -``` diff --git "a/docs/Leetcode_Solutions/Java/112._path_sum \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/112._path_sum \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 1f6b07a51..000000000 --- "a/docs/Leetcode_Solutions/Java/112._path_sum \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,28 +0,0 @@ -### 112. Path Sum - -题目: - - - -难度: - -Easy - - -递归 - -```python -class Solution(object): - def hasPathSum(self, root, sum): - """ - :type root: TreeNode - :type sum: int - :rtype: bool - """ - if not root: - return False - if root.left or root.right: - return self.hasPathSum(root.left, sum-root.val) or self.hasPathSum(root.right, sum-root.val) - else: - return root.val == sum -``` diff --git "a/docs/Leetcode_Solutions/Java/113._path_sum_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/113._path_sum_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index d1f2ea9c6..000000000 --- "a/docs/Leetcode_Solutions/Java/113._path_sum_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,40 +0,0 @@ -### 113. Path Sum II - -题目: - - - - - -tag : DFS - - -难度 : Medium - - -注意宁愿写几次curList + [root.val] 也不要直接传一个list进去,因为list pass by reference的亏已经吃过了 - -```python -class Solution(object): - def pathSum(self, root, sum): - """ - :type root: TreeNode - :type sum: int - :rtype: List[List[int]] - """ - res = [] - self.auxPathSum(root, sum, [], res) - return res - def auxPathSum(self, root, sum, cur_list, cur_lists): - if not root: - return - sum -= root.val - if sum == 0 and not root.left and not root.right: - cur_lists.append(cur_list + [root.val]) - return - if root.left: - self.auxPathSum(root.left, sum, cur_list + [root.val], cur_lists) - if root.right: - self.auxPathSum(root.right, sum, cur_list + [root.val], cur_lists) -``` - diff --git "a/docs/Leetcode_Solutions/Java/114._flatten_binary_tree_to_linked_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/114._flatten_binary_tree_to_linked_list \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 81ad647ca..000000000 --- "a/docs/Leetcode_Solutions/Java/114._flatten_binary_tree_to_linked_list \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,71 +0,0 @@ -### 114. Flatten Binary Tree to Linked List - -题目: - - - -难度: - -Medium - -这道题看了hint,说每个node的右节点都是相应先序遍历中它的下一个节点。 -所以我的思路是先把先序遍历的node顺序搞出来,然后对于这里面的每一个节点,只需要做两个操作: -1. node.left = None -2. node.right = 相应先序遍历中node的下一个节点 - -```python -class Solution(object): - def flatten(self, root): - """ - :type root: TreeNode - :rtype: void Do not return anything, modify root in-place instead. - """ - def preorder(root): - res = [] - if not root: - return res - res.append(root) - if root.left: - res.extend(preorder(root.left)) - if root.right: - res.extend(preorder(root.right)) - return res - if not root: - return - node_order = preorder(root) - for i in range(len(node_order)-1): - node_order[i].left = None - node_order[i].right = node_order[i+1] - node_order[-1].left = None - node_order[-1].right = None -``` -beat 40.67% - -另外一种解法: -1. copy the left and right subtree -2. then cut root’s left subtree -3. do DFS -4. left and right has been flattened and connect them left and right back to the root - -```python -class Solution(object): - def flatten(self, root): - """ - :type root: TreeNode - :rtype: void Do not return anything, modify root in-place instead. - """ - if not root: - return - left_node = root.left - right_node = root.right - root.left = None - self.flatten(left_node) - self.flatten(right_node) - if left_node: - root.right = left_node - while left_node.right: - left_node = left_node.right - left_node.right = right_node -``` -beat 32.18% - diff --git "a/docs/Leetcode_Solutions/Java/116._populating_next_right_pointers_in_each_node \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/116._populating_next_right_pointers_in_each_node \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index ed51a5c1e..000000000 --- "a/docs/Leetcode_Solutions/Java/116._populating_next_right_pointers_in_each_node \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,36 +0,0 @@ -###116. Populating Next Right Pointers in Each Node - -题目: - - - - -难度: - -Medium - -思路: 跟level print一样,把每个level由左到右记录。 -然后这层level的右指向右,最后一个指向None。 -处理一下边界条件,完工。 - -看题目tag给的DFS,所以是否有哪种push & pop stack的方法可以特别来处理指向呢-》 有待研究 - -``` -class Solution(object): - def connect(self, root): - """ - :type root: TreeLinkNode - :rtype: nothing - """ - if root == None: return root - thislevel = [root] - while thislevel: - nextlevel = list() - for n in thislevel: - if n.left: nextlevel.append(n.left) - if n.right: nextlevel.append(n.right) - for i in range(len(thislevel)-1): - thislevel[i].next = thislevel[i+1] - thislevel[-1].next = None - thislevel = nextlevel -``` diff --git "a/docs/Leetcode_Solutions/Java/118._pascal's_triangle \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/118._pascal's_triangle \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 72e7a44f9..000000000 --- "a/docs/Leetcode_Solutions/Java/118._pascal's_triangle \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,36 +0,0 @@ -###118. Pascal's Triangle - -题目: - - - - -难度: - -Easy - - -高中数学知识,把行数理理清楚就ok - - -``` -class Solution(object): - def generate(self, numRows): - """ - :type numRows: int - :rtype: List[List[int]] - """ - res = [[1],[1,1]] - if numRows < 3: - return res[:numRows] - for i in range(3, numRows+1): - tmp = [1] * i - for j in range(1,i-1): - tmp[j] = res[i-2][j-1] + res[i-2][j] - res.append(tmp) - return res - - -``` - - diff --git "a/docs/Leetcode_Solutions/Java/119. Pascal's Triangle II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/119. Pascal's Triangle II \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index dbf97df9d..000000000 --- "a/docs/Leetcode_Solutions/Java/119. Pascal's Triangle II \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,59 +0,0 @@ -### 119. Pascal's Triangle II - -题目: - - -难度 : Easy - - - -思路: - -高中数学 - - - -这种算法会超时||| - -``` -class Solution(object): - def getRow(self, rowIndex): - """ - :type rowIndex: int - :rtype: List[int] - """ - def combNum(n,k): - if k == 0 or k == n : - return 1 - return combNum(n-1,k-1) + combNum(n-1,k) - res = [] - for i in range(rowIndex + 1): - res.append(combNum(rowIndex,i)) - - return res -``` - - - -用118改的,AC代码 - - - -``` -class Solution(object): - def getRow(self, rowIndex): - """ - :type rowIndex: int - :rtype: List[int] - """ - res = [[1],[1,1]] - if rowIndex < 2: - return res[rowIndex] - for i in range(3, rowIndex+2): - tmp = [1] * i - for j in range(1,i-1): - tmp[j] = res[i-2][j-1] + res[i-2][j] - res.append(tmp) - return res[-1] -``` - diff --git "a/docs/Leetcode_Solutions/Java/120. Triangle \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/120. Triangle \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 954a28cb8..000000000 --- "a/docs/Leetcode_Solutions/Java/120. Triangle \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,72 +0,0 @@ -### 120. Triangle - -题目: - - - -难度: -Medium - -思路: - -先是要注意下这句话:**Each step you may move to adjacent numbers on the row below** - -在考虑adjacent number的定义,并不是角标的adjacent,而是真的形态上的adjacent - -比如 - -``` - -1 -1 - 2 1 最小 1 0 --2 2 0 -1 2 0 -``` - -最小是-1, 而并不能从第二排的0跳到第三排的第一个造成-2. - - so AC代码 - -感觉关于dp,我可能还需要补一些东西,因为我不能做到O(n) space - -``` -class Solution(object): - def minimumTotal(self, triangle): - """ - :type triangle: List[List[int]] - :rtype: int - """ - # n total rows of triangle - n = len(triangle) - if n == 1: return triangle[0][0] - elif n == 2 : return min(triangle[0][0] + triangle[1][0], triangle[0][0] + triangle[1][1]) - else: - res = [] - for i in range(n): - res.append(triangle[i]) - - res[0] = [triangle[0][0]] - res[1] = [triangle[0][0] + triangle[1][0], triangle[0][0] + triangle[1][1]] - - for i in range(2,n): - for j in range(i+1): - if j == 0: - res[i][j] = res[i-1][j] + triangle[i][j] - elif j == i: - res[i][j] = res[i-1][-1] + triangle[i][j] - else: - res[i][j] = min(res[i-1][j-1],res[i-1][j]) + triangle[i][j] - - return min(res[-1]) -``` - - - - - - - - - - - - - diff --git "a/docs/Leetcode_Solutions/Java/121._Best_Time_to_Buy_and_Sell_Stock \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/121._Best_Time_to_Buy_and_Sell_Stock \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 2edfa898b..000000000 --- "a/docs/Leetcode_Solutions/Java/121._Best_Time_to_Buy_and_Sell_Stock \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,59 +0,0 @@ -### 121. Best Time to Buy and Sell Stock - -题目: - - - -难度: - -Easy - - -思路 - -All the straight forward solution should work, but if the interviewer twists the question slightly -by giving the difference array of prices, Ex: for ```{1, 7, 4, 11}```, if he gives ```{0, 6, -3, 7}```, -you might end up being confused. - -Here, the logic is to calculate the difference ```(maxCur += prices[i] - prices[i-1])``` -of the original array, and find a contiguous subarray giving maximum profit. -If the difference falls below ```0```, reset it to zero. - -参考[Maximum subarray problem](https://en.wikipedia.org/wiki/Maximum_subarray_problem), -[Kadane's Algorithm](https://discuss.leetcode.com/topic/19853/kadane-s-algorithm-since-no-one-has-mentioned-about-this-so-far-in-case-if-interviewer-twists-the-input) - - -``` -Why maxCur = Math.max(0, maxCur += prices[i] - prices[i-1]); ? - -Well, we can assume opt(i) as the max Profit you will get if you sell the stock at day i; - -We now face two situations: - -We hold a stock at day i, which means opt(i) = opt(i - 1) - prices[i - 1] + prices[i] (max Profit you can get if you sell stock at day(i-1) - money you lose if you buy the stock at day (i-1) + money you gain if you sell the stock at day i. - -We do not hold a stock at day i, which means we cannot sell any stock at day i. In this case, money we can get at day i is 0; - -opt(i) is the best case of 1 and 2. - -So, opt(i) = Max{opt(i - 1) - prices[i - 1] + prices[i], 0} -``` - - -```python -class Solution(object): - def maxProfit(self, prices): - """ - :type prices: List[int] - :rtype: int - """ - if not prices: - return 0 - res, max_cur = 0, 0 - for i in range(1, len(prices)): - max_cur = max(0, max_cur+prices[i]-prices[i-1]) - res = max(res, max_cur) - return res -``` - - diff --git "a/docs/Leetcode_Solutions/Java/125._valid_palindrome \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/125._valid_palindrome \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index d3e09f6c2..000000000 --- "a/docs/Leetcode_Solutions/Java/125._valid_palindrome \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,46 +0,0 @@ -### 125. Valid Palindrome - -题目: - - - -难度: - -Easy - - - -就是比较reversed string 和原本的是否相等. - - -```python -class Solution(object): - def isPalindrome(self,s): - """ - :type s: str - :rtype: bool - """ - - new=[] - s = s.lower() - - for i in s: - if '0'<=i<='9' or 'a'<=i<='z': - new.append(i) - - return new == new[::-1] -``` - -或者用正则,详见[re.sub()用法](http://blog.csdn.net/geekleee/article/details/75309433) -瞬间```beats 97.71%``` -```python -class Solution(object): - def isPalindrome(self, s): - """ - :type s: str - :rtype: bool - """ - newString = re.sub("[^0-9a-zA-Z]+", "", s) - return newString.lower() == newString.lower()[::-1] -``` - diff --git "a/docs/Leetcode_Solutions/Java/126. Word Ladder II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/126. Word Ladder II \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 99e75f495..000000000 --- "a/docs/Leetcode_Solutions/Java/126. Word Ladder II \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,99 +0,0 @@ -### 126. Word Ladder II - -题目: - - - -难度: - -Hard - -其实关键在于怎么优化和表示图 - - - -思路来自1p3a: - -这题目实在是太适合python了  如此简洁 - -就是基本的bfs,典型的level order traverse -有两个坑: - -1. 不要判断字典里的某两个word是否只相差一个字母,而是要判断某个word的邻居(和他只相差一个字母的所有word)是否在字典里,这样的改进会使这一步的复杂度下降很多,否则超时妥妥 -2. 每一轮访问过的word一定要从字典中删除掉,否则一定会超时 - -最后见到end word就收 -完成 - - - -拿题目的例子来看: - -```\ - hit - | - hot - / \ - dot lot - | | - dog log - \ / - cog -``` - -routine 字典,然后再根据这个来寻找路径 - -`{'cog': ['log', 'dog'], 'hit': [], 'log': ['lot'], 'dog': ['dot'], 'hot': ['hit'], 'lot': ['hot'], 'dot': ['hot']}` - -```'cog': ['log', 'dog']```这里的意思就是说在走到```'cog'```之前尝试过了```'log'```和```'dog'```,即previous tried node - -而生成字典的过程就是BFS的,此处保证寻找的路径就是最短的。 - -AC代码: - -```python -class Solution(object): - def findLadders(self, beginWord, endWord, wordList): - """ - :type beginWord: str - :type endWord: str - :type wordList: List[str] - :rtype: List[List[str]] - """ - - def backtrack(result, trace, path, word): - if len(trace[word]) == 0: - result.append([word] + path) - else: - for prev in trace[word]: - backtrack(result, trace, [word] + path, prev) - - lookup = set(wordList) | set([beginWord]) - res, cur, routine = [], set([beginWord]), {word: [] for word in lookup} - while cur and endWord not in cur: - next_queue = set() - for word in cur: - lookup.remove(word) - for word in cur: - for i in range(len(word)): - for j in 'abcdefghijklmnopqrstuvwxyz': - candidate = word[:i] + j + word[i + 1:] - if candidate in lookup: - next_queue.add(candidate) - routine[candidate].append(word) - cur = next_queue - - if cur: - backtrack(res, routine, [], endWord) - return res -``` - - - -这样可以beat 69.09% - - - - - - diff --git "a/docs/Leetcode_Solutions/Java/127._word_ladder \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/127._word_ladder \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 42a14a7af..000000000 --- "a/docs/Leetcode_Solutions/Java/127._word_ladder \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,43 +0,0 @@ -### 127. Word Ladder - -题目: - - - - -难度: - -Medium - -tag可以算BFS,其实就是求shortest path的变体 - -Reference from [kamyu104](https://github.com/kamyu104/LeetCode/blob/71e0ba555ee49befa01fcd9fc78c3528e2ab63a9/Python/word-ladder.py) - -```python -class Solution(object): - def ladderLength(self, beginWord, endWord, wordList): - """ - :type beginWord: str - :type endWord: str - :type wordList: List[str] - :rtype: int - """ - distance, cur, visited, lookup = 0, [beginWord], set([beginWord]), set(wordList) - - while cur: - next_queue = [] - - for word in cur: - if word == endWord: - return distance + 1 - for i in xrange(len(word)): - for j in 'abcdefghijklmnopqrstuvwxyz': - candidate = word[:i] + j + word[i + 1:] - if candidate not in visited and candidate in lookup: - next_queue.append(candidate) - visited.add(candidate) - distance += 1 - cur = next_queue - - return 0 -``` diff --git "a/docs/Leetcode_Solutions/Java/128._Longest_Consecutive_Sequence \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/128._Longest_Consecutive_Sequence \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 53e57505e..000000000 --- "a/docs/Leetcode_Solutions/Java/128._Longest_Consecutive_Sequence \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,70 +0,0 @@ -### 128. Longest Consecutive Sequence - -题目: - - - -难度: - -Hard - - -### 思路 -首先去重复,时间```O(N)```,然后将所有元素都放到一个字典中,这样判断一个数字的后续在不在这个字典中,如果存在就一直判断下去,每次判断只要```O(1)```。 - -对于每个数,如果他的前续已经判断过了,他就没有必要判断了,继续判断下一个数,即: -``` -if num - 1 in nums: - continue -``` - - -AC代码: - -```python -class Solution(object): - def longestConsecutive(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - nums = set(nums) - tmp = {} - for num in nums: - tmp[num] = 1 - res = 0 - for num in nums: - if num - 1 not in nums: - y = num + 1 - while y in nums: - y += 1 - res = max(res, y - num) - return res -``` - -但其实```set```和字典的```in```判断都是```O(1)``` - -```dict```与```set```实现原理是一样的,都是将实际的值放到```list```中。唯一不同的在于hash函数操作的对象,对于```dict```,```hash```函数操作的是其```key```,而对于```set```是直接操作的它的元素,假设操作内容为```x```,其作为因变量,放入```hash```函数,通过运算后取```list```的余数,转化为一个```list```的下标,此下标位置对于```set```而言用来放其本身,而对于```dict```则是创建了两个```list```,一个```list```该下表放此```key```,另一个```list```中该下标方对应的```value```。参考[python dict与set 的实现](http://www.cnblogs.com/pengsixiong/p/5326893.html) - -  其中,我们把实现set的方式叫做Hash Set,实现dict的方式叫做Hash Map/Table(注:map指的就是通过key来寻找value的过程) - -```set```和```dict```的唯一区别仅在于没有存储对应的```value```,但是,```set```的原理和```dict```一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证```set```内部“不会有重复元素”。 - -因此,代码也可以写成这样 -```python -class Solution(object): - def longestConsecutive(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - nums = set(nums) - res = 0 - for num in nums: - if num - 1 not in nums: - y = num + 1 - while y in nums: - y += 1 - res = max(res, y - num) - return res -``` diff --git "a/docs/Leetcode_Solutions/Java/129._sum_root_to_leaf_numbers \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/129._sum_root_to_leaf_numbers \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index cedbdcd74..000000000 --- "a/docs/Leetcode_Solutions/Java/129._sum_root_to_leaf_numbers \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,37 +0,0 @@ -###129. Sum Root to Leaf Numbers - -题目: - - - -难度: - -Medium - -其实递归不难想到,不过我自己做错在细节方面 - -如果只有单支,每朝下走一层,代表的数字都增加10, 10* 原本的 + 新节点的数字,最终也是用这个来解 - -``` -class Solution(object): - def sumNumbers(self, root): - """ - :type root: TreeNode - :rtype: int - """ - return self.calSum(root,0) - - - def calSum(self,root,curSum): - if root == None: - return 0 - else: - curSum = curSum * 10 + root.val - if root.left == None and root.right == None: - return curSum - else: - return self.calSum(root.left, curSum) + self.calSum(root.right, curSum) - - - -``` diff --git "a/docs/Leetcode_Solutions/Java/130._surrounded_regions \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/130._surrounded_regions \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a0f76e264..000000000 --- "a/docs/Leetcode_Solutions/Java/130._surrounded_regions \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,147 +0,0 @@ -###130. Surrounded Regions - - -题目: - - - - -难度: - -Medium - - -思路: - -loop,然后碰到O做DFS/BFS找出O所在区域: - -- 貌似只要O没有碰壁,O就总是被X包围着? -- 所以找出O的范围,然后看它是否碰壁,没有碰壁则mark不需要修改 - -但是这道题折磨我了很久,因为它有毛病。。。。 -它给的input例子是 -["XXX","XOX","XXX"] -也怪我 input写着List[List[str]] - -但实际上的输入是: -[[u'X', u'X', u'X'], [u'X', u'X', u'X'], [u'X', u'X', u'X']] - - -还要mark unicode - -还有就是学会了新的可以函数之下定义函数,这样就不用什么self了,用起来真方便,但是这样的思路做起来会超时。 - - - -``` -class Solution(object): - def solve(self, board): - """ - :type board: List[List[str]] - :rtype: void Do not return anything, modify board in-place instead. - """ - - - def shouldOChange(i, j): - """ - return x,y area and whether they shouldChange - """ - shouldChange = True - Oarea = [] - s = [] - s.append((i,j)) - while s: - (x,y) = s.pop() - if x == 0 or x == row - 1 or y == 0 or y == col -1 : - shouldChange = False - visited[x][y] = 1 - Oarea.append((x,y)) - if legal(x-1,y): - s.append((x-1,y)) - if legal(x+1,y): - s.append((x+1,y)) - if legal(x,y-1): - s.append((x,y-1)) - if legal(x,y-1): - s.append((x,y+1)) - return Oarea,shouldChange - - def legal(x,y): - return x>=0 and x < row and y>=0 and y < col and board[x][y] == 'O' and visited[x][y] == 0 - - - row = len(board) - col = len(board[0]) if row else 0 - - visited = [[0 for i in range(col)] for j in range(row)] - - for i in range(row): - for j in range(col): - if board[i][j] == 'O' and visited[i][j] == 0: - Oarea, shouldChange = shouldOChange(i,j) - print Oarea,shouldChange - if shouldChange: - for (x,y) in Oarea: - board[x][y] = u'X' - - print board -``` - - -另一个思路就是对周围碰壁的O做BFS/DFS,碰壁的和碰壁相连的是不需要修改的。这样就时间复杂度降低很多了。 - -原本是O(n^2)可能做DFS/BFS。现在是O(4n)做DFS/BFS,但是发现依旧超时,最后查看了别人的解法,因为我的解法里面多了一个存储工具,相当于,把需要更换location的位置存储起来,最后做loop的时候去查,然后这样还是很耗时。 - -而一个简便的变法是把这些特别的碰壁的'O' mark出来,这样最后loop的时候不改变这些'O',只改变不碰壁的'O',又可以减少工作量。同时依旧可以使用collection里面的queue - - - -AC代码 - -``` -class Solution(object): - def solve(self, board): - """ - :type board: List[List[str]] - :rtype: void Do not return anything, modify board in-place instead. - """ - def legal(x,y): - return x>=0 and x < row and y>=0 and y < col and board[x][y] == 'O' and visited[x][y] == 0 - - - row = len(board) - col = len(board[0]) if row else 0 - - visited = [[0 for i in range(col)] for j in range(row)] - - notChangeOArea = [] - queue = collections.deque() - - for j in range(col): - if board[0][j] == 'O': queue.append((0,j)) - if board[row-1][j] == 'O': queue.append((row-1,j)) - for i in range(row): - if board[i][0] == 'O': queue.append((i,0)) - if board[i][col-1] == 'O': queue.append((i,col-1)) - - while queue: - (x,y) = queue.popleft() - board[x][y] = '$' - visited[x][y] = 1 - if legal(x-1,y): - queue.append((x-1,y)) - if legal(x+1,y): - queue.append((x+1,y)) - if legal(x,y-1): - queue.append((x,y-1)) - if legal(x,y+1): - queue.append((x,y+1)) - - for i in range(row): - for j in range(col): - if board[i][j] == '$' : board[i][j] = 'O' - elif board[i][j] == 'O' : board[i][j] = 'X' -``` - - -同时发现,用这种方式,无论是否使用collection里面的queue,都能AC \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/131._palindrome_partitioning \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/131._palindrome_partitioning \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 45d404c89..000000000 --- "a/docs/Leetcode_Solutions/Java/131._palindrome_partitioning \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,48 +0,0 @@ -###131. Palindrome Partitioning - -题目: - - - -难度: -Medium - -知道一定是用递归做,但是在怎么拆的部分疑惑了,然后看了hint - -key部分长这样,拆法是类似于combination,然后这个len(s) == 0是确保能被拆为palindrome,因为这样剩下的string才是空的 - - -这个recursion tree是这样的,感觉时间复杂度是O(n!),因为每次树都branch n个分支 - -``` - -class Solution(object): - def partition(self, s): - """ - :type s: str - :rtype: List[List[str]] - """ - self.res = [] - self.dfs(s,[]) - return self.res - - - def dfs(self, s, stringList): - if len(s) == 0: - self.res.append(stringList) - for i in range(1,len(s)+1): - if self.isPalindrome(s[:i]): - self.dfs(s[i:],stringList + [s[:i]]) - - def isPalindrome(self, s): - if len(s) <= 1: - return True - return s[0] == s[-1] and self.isPalindrome(s[1:-1]) - -a = Solution() -print a.partition("aab") - -# [['a', 'a', 'b'], ['aa', 'b']] -``` - -输出是每次必定从单个char的list开始,然后单个char 配 palindrome word,然后palindrome word再来配char... \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/133._clone_graph \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/133._clone_graph \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 39921e282..000000000 --- "a/docs/Leetcode_Solutions/Java/133._clone_graph \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,66 +0,0 @@ -###133. Clone Graph - - -题目: - - - -难度: -Medium - - - -思路: - -DFS或者BFS把graph traverse一遍,边traverse边复制。因为nodes are labeled uniquely,这就是方便的地方,但是注意node可能重复和有self-loop. - -所以先建立新的root node,然后有一个dict把node label和node一一对应。 - -用stack来存储原本的graph root node,对原本的graph做DFS,这个时候,如果这个node的neighbor是已经出现过,那么我们就是去修改原本的existNode,让它指向存在的neighbor,否则创建新的,再把它们联系起来,谷歌了一下,别人写的比我更简单。anyway,先AC。 - - - -`if cur.label in createdNodes:`多余。 - - - - -``` -class Solution(object): - def cloneGraph(self, node): - """ - :type node: UndirectedGraphNode - :rtype: UndirectedGraphNode - """ - if node == None: return None - - root = UndirectedGraphNode(node.label) - # must 1 to 1 - createdNodes = {} - createdNodes[root.label] = root - - stack = [] - stack.append(node) - - while stack: - cur = stack.pop() - if cur.label in createdNodes: - existNode = createdNodes[cur.label] - for neighbor in cur.neighbors: - if neighbor.label in createdNodes: - existNeighbor = createdNodes[neighbor.label] - existNode.neighbors.append(existNeighbor) - else: - newNode = UndirectedGraphNode(neighbor.label) - existNode.neighbors.append(newNode) - createdNodes[neighbor.label] = newNode - stack.append(neighbor) - return root -``` - - - -看了别人的代码,貌似比我又写的简洁。 - - - diff --git "a/docs/Leetcode_Solutions/Java/136._single_number \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/136._single_number \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 18540da0f..000000000 --- "a/docs/Leetcode_Solutions/Java/136._single_number \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,42 +0,0 @@ -### 136. Single Number - - - -题目: - - - -难度: - -Easy - - -思路: - -位运算,终于要take it了 - -非常常见的一道算法题,将所有数字进行异或操作即可。对于异或操作明确以下三点: - -- 一个整数与自己异或的结果是0 -- 一个整数与0异或的结果是自己 -- 异或操作满足交换律,即a^b=b^a - -Python的位操作: - - -神奇的解法: - - -```python -class Solution(object): - def singleNumber(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - res = nums[0] - for i in nums[1:]: - res ^= i - return res -``` - diff --git "a/docs/Leetcode_Solutions/Java/139._word_break \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/139._word_break \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 815737dec..000000000 --- "a/docs/Leetcode_Solutions/Java/139._word_break \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,59 +0,0 @@ -### 139. Word Break - -题目: - - - -难度: - -Medium - - - -```ok[i]``` tells whether ```s[:i]``` can be built. - -```python -class Solution(object): - def wordBreak(self, s, wordDict): - """ - :type s: str - :type wordDict: List[str] - :rtype: bool - """ - ok = [True] - for i in range(1, len(s)+1): - ok += [any(ok[j] and s[j:i] in wordDict for j in range(i))] - return ok[-1] -``` - -但是往list里面加数据的方法有快有慢,下面是对比: -``` ->>> from timeit import timeit ->>> timeit('x.append(1)', 'x = []', number=10000000) -1.9880003412529277 ->>> timeit('x += 1,', 'x = []', number=10000000) -1.2676891852971721 ->>> timeit('x += [1]', 'x = []', number=10000000) -3.361207239950204 -``` -因此我们可以将代码直接换成下面的格式 -```python -ok += any(ok[j] and s[j:i] in wordDict for j in range(i)) # 会报错 -``` -但是这样会报错,TypeError: 'bool' object is not iterable,因此bool类型数据不能这样加,别的可以(list类型本身当然要注意哈) - -因此在这个例子中我们这样: -```python -class Solution(object): - def wordBreak(self, s, wordDict): - """ - :type s: str - :type wordDict: List[str] - :rtype: bool - """ - ok = [True] - for i in range(1, len(s)+1): - ok += any(ok[j] and s[j:i] in wordDict for j in range(i)), - return ok[-1] -``` -代码里面的那个逗号构建了一个tuple,也会快一点 diff --git "a/docs/Leetcode_Solutions/Java/140._word_break_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/140._word_break_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 6333bf8fe..000000000 --- "a/docs/Leetcode_Solutions/Java/140._word_break_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,113 +0,0 @@ - -### 140. Word Break II - -题目: - - - -难度: - -Medium - - - -还是backtracking,会超时 - -``` -class Solution(object): # 此法超时 -    def wordBreak(self, s, wordDict): - """ - :type s: str - :type wordDict: Set[str] - :rtype: bool - """ - self.res = [] - self.wordBreakLst("",s,wordDict) - return self.res - - - def wordBreakLst(self, lst, rest, wordDict): - if rest == '': - self.res.append(lst.rstrip()) - # print lst - for i in range(1+len(rest)): - if rest[:i] in wordDict: - self.wordBreakLst(lst + rest[:i] + " ",rest[i:],wordDict) - -``` - - - - -然后看到有把word break i 结合起来减少时间复杂度的作法。 - - -做法如下,聪明: - -就是对于每一个s,我们来check它是否可以break,如果不可以,就不用做相应的操作了 - - -```python -class Solution(object): - def wordBreak(self, s, wordDict): - """ - :type s: str - :type wordDict: List[str] - :rtype: List[str] - """ - self.res = [] - self.wordBreakLst(s, wordDict, '') - return self.res - - def check(self, s, wordDict): - ok = [True] - for i in range(1, len(s) + 1): - ok += any(ok[j] and s[j:i] in wordDict for j in range(i)), - return ok[-1] - - - def wordBreakLst(self, s, wordDict, stringLst): - if self.check(s, wordDict): - if len(s) == 0 : self.res.append(stringLst[1:]) # 因为最开始也加了一个空格 - for i in range(1,len(s)+1): - if s[:i] in wordDict: - self.wordBreakLst(s[i:], wordDict, stringLst + ' ' + s[:i]) -``` - - -但是其实 - -``` -s = "aaaaaa" -wordDict = ["a","aa","aaa"] -print a.wordBreak(s,wordDict)还是会loop很多次 - -不过像 -s = "aabbb" -wordDict = ["a","abbb"] -就会极其的减少loop次数 -``` - - -看看stefan大神的做法: - -```sentences(i)``` returns a list of all sentences that can be built from the suffix ```s[i:]```. - -```python -class Solution(object): - def wordBreak(self, s, wordDict): - """ - :type s: str - :type wordDict: List[str] - :rtype: List[str] - """ - memo = {len(s): ['']} - def sentences(i): - if i not in memo: - memo[i] = [s[i:j] + (tail and ' ' + tail) - for j in range(i+1, len(s)+1) - if s[i:j] in wordDict - for tail in sentences(j)] - return memo[i] - return sentences(0) -``` diff --git "a/docs/Leetcode_Solutions/Java/141._linked_list_cycle \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/141._linked_list_cycle \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 2d50901e9..000000000 --- "a/docs/Leetcode_Solutions/Java/141._linked_list_cycle \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,105 +0,0 @@ -### 141. Linked List Cycle - -题目: - - - - -难度: - -Easy - - -想法一: - -直接超时 - -``` -class Solution(object): - def hasCycle(self, head): - """ - :type head: ListNode - :rtype: bool - """ - if head == None: return False - lst = [] - cur = head - while cur: - if cur in lst: - return True - lst.append(cur) - cur = cur.next - return False -``` - - - -想法二:相当用boolean array记录某个点是否被访问过,时间,空间复杂度都是O(n) - -``` -class Solution(object): - def hasCycle(self, head): - """ - :type head: ListNode - :rtype: bool - """ - if head == None: return False - dictx = {} - cur = head - while cur: - if cur in dictx: - return True - dictx[cur] = 1 - cur = cur.next - return False -``` - -结果这种方法的run time还比较快 - -查了一下,有解答说可以有空间复杂度O(1),时间复杂度O(n)。两个指针,一个快一个慢,快的每次走两步,慢的每次走一步,如果有环,最终会在某处相遇。这也是一个算法。这种快慢指针配合已经不是第一次遇到了,比如找linklist中间的node。 - - - -但是并没有觉得这样的算法是O(n), worst case time complexity is O(N+K), which is O(n). - - -```python -python -class Solution(object): - def hasCycle(self, head): - """ - :type head: ListNode - :rtype: bool - """ - slow = head - fast = head - while fast and fast.next: - slow = slow.next - fast = fast.next.next - if slow == fast: - return True - return False -``` - - -```java -java -public class Solution { - public boolean hasCycle(ListNode head) { - if (head == null){ - return false; - } - ListNode fast = head; - ListNode slow = head; - while (fast != null && slow != null && fast.next != null){ - fast = fast.next.next; - slow = slow.next; - if (slow == fast){ - return true; - } - } - return false; - } -} -``` - diff --git "a/docs/Leetcode_Solutions/Java/142_Linked_List_Cycle_II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/142_Linked_List_Cycle_II \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index cd8875929..000000000 --- "a/docs/Leetcode_Solutions/Java/142_Linked_List_Cycle_II \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,56 +0,0 @@ -### 142. Linked List Cycle II - -题目: - - - - -难度: - -Medium - -思路: -稍微改了一下[141](https://github.com/Lisanaaa/thinking_in_lc/blob/master/141._linked_list_cycle.md),这里稍微注意一下```while-else clause```就行 - -Let’s say, the first node is node ```0```, the cycle starts at node ```L```, and the length of the cycle is ```C```; -Moreover, after ```t``` steps, ```fast``` catches ```slow```. - -Now we know that fast totally traveled ```2t``` nodes, and slow traveled ```t``` nodes - -Then we have: -```2t - t = nC``` (where ```n``` is an positive integer.) -i.e. ```t=nC``` - -Now, think about that, at step ```t```, if we travels ```L``` more steps, where are we? -i.e. if we travel ```L+t = L + nC``` steps in total, where are we? - -Absolutely, at the start of the cycle, because we have covered the first ```L``` nodes once and the entire cycle ```n``` times. - -So, if we travel ```L``` more steps at time ```t```, then we get the start of the cycle. - -However, how can we travel exactly ```L``` step? -The answer is to use an other pointer to travel from node ```0```, and when they meet together, it is exactly ```L``` steps and both of them are at the start of the cycle. - -参考[LostSummer233的解答](https://leetcode.com/problems/linked-list-cycle-ii/discuss/44833) -```python -class Solution(object): - def detectCycle(self, head): - """ - :type head: ListNode - :rtype: bool - """ - slow = fast = head - while fast and fast.next: - slow = slow.next - fast = fast.next.next - if slow == fast: - break - else: - return None - while head != slow: - slow = slow.next - head = head.next - return head -``` - - diff --git "a/docs/Leetcode_Solutions/Java/143._reorder_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/143._reorder_list \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 59c9fb9fb..000000000 --- "a/docs/Leetcode_Solutions/Java/143._reorder_list \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,112 +0,0 @@ -###143. Reorder List - -题目: - - - - -难度: - -Medium - -超时 - - -``` - -class Solution(object): - def reorderList(self, head): - """ - :type head: ListNode - :rtype: void Do not return anything, modify head in-place instead. - """ - head = self.reorder(head) - - - def reorder(self, head): - if head == None or head.next == None or head.next.next == None: - return head - - l0 = head - l1 = head.next - ln_1 = self.oneNodeTail(head) - ln =ln_1.next - - l0.next = ln - ln_1.next = None - ln.next = self.reorder(l1) - return l0 - - - def oneNodeTail(self, head): - if head == None or head.next == None or head.next.next == None: - return head - cur = head - while cur.next: - if cur.next.next: - cur = cur.next - else: - break - return cur - -``` - - -取巧的办法是: - -找到中间节点,断开,把后半截linked list reverse,然后合并 √ - -看了AC指南 - -``` -class Solution(object): - def reorderList(self, head): - """ - :type head: ListNode - :rtype: void Do not return anything, modify head in-place instead. - """ - if head == None or head.next == None or head.next.next == None: - return - - slow = head - fast = head - prev = None - - while fast and fast.next: - prev = slow - slow = slow.next - fast = fast.next.next - - prev.next = None - - - slow = self.reverseList(slow) - - cur = head - while cur.next: - tmp = cur.next - cur.next = slow - slow = slow.next - cur.next.next = tmp - cur = tmp - cur.next = slow - - - - def reverseList(self,head): - """ - :type head: ListNode - :rtype: ListNode - """ - prev = None - cur = head - while(cur): - nxt = cur.next - cur.next = prev - prev = cur - cur = nxt - return prev - - -``` - diff --git "a/docs/Leetcode_Solutions/Java/144._binary_tree_preorder_traversal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/144._binary_tree_preorder_traversal \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 8f5e21689..000000000 --- "a/docs/Leetcode_Solutions/Java/144._binary_tree_preorder_traversal \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,81 +0,0 @@ -### 144. Binary Tree Preorder Traversal - -题目: - - - - -难度: - -Medium - -Recursive,瞬秒 - - -```python -class Solution(object): - def preorderTraversal(self, root): - """ - :type root: TreeNode - :rtype: List[int] - """ - res = [] - if not root: - return res - res.append(root.val) - if root.left: - res.extend(self.preorderTraversal(root.left)) - if root.right: - res.extend(self.preorderTraversal(root.right)) - return res -``` - -```python -class Solution(object): - def preorderTraversal(self, root): - """ - :type root: TreeNode - :rtype: List[int] - """ - if root == None: - return [] - res = [] - self.preorder(root,res) - return res - - - def preorder(self,root,res): - if root == None: - return - res.append(root.val) - self.preorder(root.left,res) - self.preorder(root.right,res) -``` - - -Iterative - - -```python -class Solution(object): - def preorderTraversal(self, root): - """ - :type root: TreeNode - :rtype: List[int] - """ - if root == None: - return [] - res = [] - - stack = [] - stack.append(root) - while stack: - node = stack.pop() - res.append(node.val) - if node.right: - stack.append(node.right) - if node.left: - stack.append(node.left) - return res - -``` diff --git "a/docs/Leetcode_Solutions/Java/145._binary_tree_postorder_traversal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/145._binary_tree_postorder_traversal \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 788cfc623..000000000 --- "a/docs/Leetcode_Solutions/Java/145._binary_tree_postorder_traversal \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,67 +0,0 @@ -###145. Binary Tree Postorder Traversal - -题目: - - - - -难度: - -Hard - -wikipedia 助你幸福 - -递归版本 - -``` -postorder(node) - if (node = null) - return - postorder(node.left) - postorder(node.right) - visit(node) -``` - - -迭代版本 - -``` -iterativePostorder(node) - s ← empty stack - lastNodeVisited ← null - while (not s.isEmpty() or node ≠ null) - if (node ≠ null) - s.push(node) - node ← node.left - else - peekNode ← s.peek() - // if right child exists and traversing node - // from left child, then move right - if (peekNode.right ≠ null and lastNodeVisited ≠ peekNode.right) - node ← peekNode.right - else - visit(peekNode) - lastNodeVisited ← s.pop() -``` - - - -刷进度直接用递归AC - -``` -class Solution(object): - def postorderTraversal(self, root): - """ - :type root: TreeNode - :rtype: List[int] - """ - self.result = [] - self.postOrder(root) - return self.result - - def postOrder(self, root): - if root == None : return - self.postOrder(root.left) - self.postOrder(root.right) - self.result.append(root.val) -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/147._insertion_sort_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/147._insertion_sort_list \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b385d14f1..000000000 --- "a/docs/Leetcode_Solutions/Java/147._insertion_sort_list \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,59 +0,0 @@ -###147. Insertion Sort List - -题目: - - - -难度: -Medium - -insertion sort 也是入门必备,一个元素本身被认为是sort的,一个简单的理解是打牌,然后进入第二个元素的时候,看它是比第一个元素大还是小,做排序,进入下一个元素的时候再看再移。 - -伪码 - -``` -for i ← 1 to length(A)-1 - j ← i - while j > 0 and A[j-1] > A[j] - swap A[j] and A[j-1] - j ← j - 1 - end while -end for -``` - -这个伪码对于list可能适用性没有那么强,则考虑,从第二个node开始,那么从开始开始看,找到这个node应该插入的位置,插入。 - - - -就是这样,就是会超时|||| - -``` -class Solution(object): - def insertionSortList(self, head): - """ - :type head: ListNode - :rtype: ListNode - """ - if head == None or head.next == None: - return head - - dummy = ListNode(-1) - dummy.next = head - - prev = head - cur = head.next - - while cur: - p = dummy - while p.next.val <= cur.val and p != prev: - p = p.next - if p != prev: - prev.next = cur.next - cur.next = p.next - p.next = cur - prev = cur - cur = cur.next - - return dummy.next -``` - diff --git "a/docs/Leetcode_Solutions/Java/148._sort_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/148._sort_list \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 7bb4e80b0..000000000 --- "a/docs/Leetcode_Solutions/Java/148._sort_list \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,138 +0,0 @@ -###148. Sort List - -题目: - - - -难度: -Medium - -MergeSort - -merge sort是必备,divide & conquer的入门之物。 - -merge sort做两件事, sort 和 merge。 - -看一看标准伪码: - -``` -function mergesort(m) - var list left, right, result - if length(m) ≤ 1 - return m - else - var middle = length(m) / 2 - for each x in m up to middle - 1 - add x to left - for each x in m at and after middle - add x to right - left = mergesort(left) - right = mergesort(right) - if last(left) ≤ first(right) - append right to left - return left - result = merge(left, right) - return result - -function merge(left,right) - var list result - while length(left) > 0 and length(right) > 0 - if first(left) ≤ first(right) - append first(left) to result - left = rest(left) - else - append first(right) to result - right = rest(right) - if length(left) > 0 - append rest(left) to result - if length(right) > 0 - append rest(right) to result - return result -``` - -另一处获得伪码 - -``` -MergeSort(arr[], l, r) -If r > l - 1. Find the middle point to divide the array into two halves: - middle m = (l+r)/2 - 2. Call mergeSort for first half: - Call mergeSort(arr, l, m) - 3. Call mergeSort for second half: - Call mergeSort(arr, m+1, r) - 4. Merge the two halves sorted in step 2 and 3: - Call merge(arr, l, m, r) -``` - - -merge sort用在linked list上的好处是不用开辟空间,然后就处理node - -用旧的代码拼装出来的结果 - -然后需要注意的一点是拆分链表,所以有设置left node 的tail为None的操作. - -``` -class Solution(object): - def sortList(self, head): - """ - :type head: ListNode - :rtype: ListNode - """ - if head == None or head.next == None: - return head - - mid = self.findMid(head) - # split the - l1 = head - l2 = mid.next - mid.next = None - - l1 = self.sortList(l1) - l2 = self.sortList(l2) - - return self.mergeTwoLists(l1, l2) - - def mergeTwoLists(self, l1, l2): - """ - :type l1: ListNode - :type l2: ListNode - :rtype: ListNode - """ - if l1 == None: - return l2 - if l2 == None: - return l1 - - dummy = ListNode(-1) - cur = dummy - - while l1 and l2: - if l1.val < l2.val: - cur.next = l1 - l1 = l1.next - else: - cur.next = l2 - l2 = l2.next - cur = cur.next - - if l1: - cur.next = l1 - else: - cur.next = l2 - return dummy.next - - def findMid(self,head): - if head == None or head.next == None: - return head - - slow = head - fast = head - - while fast.next and fast.next.next: - slow = slow.next - fast = fast.next.next - - return slow - -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/150._evaluate_reverse_polish_notation \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/150._evaluate_reverse_polish_notation \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 4e2b48aac..000000000 --- "a/docs/Leetcode_Solutions/Java/150._evaluate_reverse_polish_notation \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,83 +0,0 @@ -###150. Evaluate Reverse Polish Notation - - - -题目: - - - -难度: -Medium - - - -AC代码 - -``` -class Solution(object): - def evalRPN(self, tokens): - """ - :type tokens: List[str] - :rtype: int - """ - def cal(op, op1, op2): - if op == '*': - return op1 * op2 - elif op == '/': - return op1 / float(op2) - elif op == '+': - return op1 + op2 - else: - return op1 - op2 - - operandStack = [] - - for token in tokens: - if token in '+-*/': - op2 = operandStack.pop() - op1 = operandStack.pop() - res = cal(token, op1, op2) - operandStack.append(int(res)) - else: - operandStack.append(int(token)) - - return operandStack.pop() -``` - - -实际上这里有一个很奇(sha)怪(bi)的地方,看到了么,除法➗处,如果我不这么做,就是错的,这是python 2 和 python 3 的除法不一致导致的,所以最终我这样做了才能得到正确答案。 - -思路: - -已经给了我们wikipedia的链接了 - -- While there are input tokens left - - Read the next token from input. - - If the token is a value - - Push it onto the stack. - -Otherwise, the token is an operator (operator here includes both operators and functions). - - It is already known that the operator takes n arguments. - - If there are fewer than n values on the stack - - (Error) The user has not input sufficient values in the expression. - - Else, Pop the top n values from the stack. - - Evaluate the operator, with the values as arguments. - - Push the returned results, if any, back onto the stack. -- If there is only one value in the stack - - That value is the result of the calculation. -- Otherwise, there are more values in the stack - - (Error) The user input has too many values. - - - -再参考这里 - - - - -1. Create an empty stack called operandStack. -2. Convert the string to a list by using the string method split. -3. Scan the token list from left to right. - - If the token is an operand, convert it from a string to an integer and push the value onto the operandStack. - - If the token is an operator, *, /, +, or -, it will need two operands. Pop the operandStack twice. The first pop is the second operand and the second pop is the first operand. Perform the arithmetic operation. Push the result back on the operandStack. -4. When the input expression has been completely processed, the result is on the stack. Pop the operandStack and return the value. - diff --git "a/docs/Leetcode_Solutions/Java/151._reverse_words_in_a_string \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/151._reverse_words_in_a_string \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 10414801b..000000000 --- "a/docs/Leetcode_Solutions/Java/151._reverse_words_in_a_string \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,37 +0,0 @@ -### 151. Reverse Words in a String - -题目: - - - -难度: -Medium - -太简单了 - -```python -class Solution(object): - def reverseWords(self, s): - """ - :type s: str - :rtype: str - """ - tmp = s.split() - res = " ".join(tmp[::-1]) - return res - -``` - -```python -class Solution(object): - def reverseWords(self, s): - """ - :type s: str - :rtype: str - """ - tmp = s.split() - tmp.reverse() - res = " ".join(tmp) - return res - -``` diff --git "a/docs/Leetcode_Solutions/Java/152._maximum_product_subarray \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/152._maximum_product_subarray \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 7570876fa..000000000 --- "a/docs/Leetcode_Solutions/Java/152._maximum_product_subarray \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,44 +0,0 @@ -###152. Maximum Product Subarray - - - -题目: - - - -难度: -Medium - -思路: - -粗一看, 一股浓烈的DP气息飘来,想要套用53题的思路和方程。但是这个跟sum是不一样的,因为乘积可以正负正负的跳,这样的动归方程肯定是不对的 - -dp[i] = max(dp[i-1] * a[i],a[i]) - -举个例子 : [-2,3,-4] - - -用O(N^2)超时,厉害啊! - -想,可不可以记录+的和-的,记录两个dp数组,我哭了,真的是这样做的 - -最大值可能来源于最小值 -> 哲学般的句子 - -``` -class Solution(object): - def maxProduct(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - n = len(nums) - maxdp = [ nums[0] for i in range(n)] - mindp = [ nums[0] for i in range(n)] - - - for i in range(1,n): - maxdp[i] = max(mindp[i-1]*nums[i], maxdp[i-1]*nums[i],nums[i]) - mindp[i] = min(maxdp[i-1]*nums[i], mindp[i-1]*nums[i],nums[i]) - - return max(maxdp) -``` diff --git "a/docs/Leetcode_Solutions/Java/153._find_minimum_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/153._find_minimum_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b46e1950d..000000000 --- "a/docs/Leetcode_Solutions/Java/153._find_minimum_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,85 +0,0 @@ -###153. Find Minimum in Rotated Sorted Array - - -题目: - - - -难度: - -Medium - - - -思路一: - -O(N) 就不说了 - -思路二: - -想的是分治,两段分别找出最小值,然后取最小值,但是依旧没有利用题目特性,并且也是O(N). - -> We can do it in O(logn) using Binary Search. If we take a closer look at above examples, we can easily figure out following pattern: The minimum element is the only element whose previous element is greater than it. If there is no such element, then there is no rotation and first element is the minimum element. - - -上面提到了一个特性,就是minimum element唯一一个它之前的element比它大的,如果不存在这个element,那么就没有rotation. - - - -思路其实是判断前半部分或者后半部分是否有序,然后来剔除,这里需要注意有比较多的边界case,因为如果就两个,那么会有特殊case 0 ,1 mid = 0,所以可以看一下,它这个处理,最后一个elif 是来比较mid 和 end - - - - - -``` -class Solution(object): - def findMin(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - def findRotatedMin(nums, start, end): - if end < start: - return nums[0] - if start == end: - return nums[start] - mid = (start + end) / 2 - if mid > start and nums[mid] < nums[mid-1]: - return nums[mid] - elif mid < end and nums[mid+1] < nums[mid]: - return nums[mid+1] - elif nums[mid] < nums[end]: - return findRotatedMin(nums,start, mid -1) - return findRotatedMin(nums, mid+1, end) - - - return findRotatedMin(nums,0,len(nums)-1) - -``` - -非递归 - -``` -class Solution(object): - def findMin(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - l,r = 0, len(nums) - 1 - while l < r: - mid = (l+r) / 2 - if mid > l and nums[mid] < nums[mid-1]: - return nums[mid] - elif mid < r and nums[mid] > nums[mid+1]: - return nums[mid+1] - elif nums[mid] < nums[r]: - r = mid -1 - else: - l = mid +1 - return nums[0] - -``` - - diff --git "a/docs/Leetcode_Solutions/Java/155._min_stack \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/155._min_stack \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index fac02c17e..000000000 --- "a/docs/Leetcode_Solutions/Java/155._min_stack \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,169 +0,0 @@ -### 155. Min Stack - -题目: - - - -难度: - -Easy - -思路一: - -懒,直接用系统的数据结构 -用lst和系统的heapq,提升一下,用deque和heapq,这样也没太大提升 - - -```python -from heapq import * - -class MinStack(object): - - def __init__(self): - """ - initialize your data structure here. - """ - self.lst = [] - self.h = [] - - - def push(self, x): - """ - :type x: int - :rtype: void - """ - self.lst.append(x) - heappush(self.h,x) - - - def pop(self): - """ - :rtype: void - """ - val = self.lst.pop() - self.h.remove(val) - heapify(self.h) - - def top(self): - """ - :rtype: int - """ - return self.lst[-1] - - - def getMin(self): - """ - :rtype: int - """ - return self.h[0] - -``` - -思路二: - - -参考 - -用两个stack,其中一个始终来记录到当前位置的最小值 - - -``` -When we insert 18, both stacks change to following. -Actual Stack -18 <--- top -Auxiliary Stack -18 <---- top - -When 19 is inserted, both stacks change to following. -Actual Stack -19 <--- top -18 -Auxiliary Stack -18 <---- top -18 - -When 29 is inserted, both stacks change to following. -Actual Stack -29 <--- top -19 -18 -Auxiliary Stack -18 <---- top -18 -18 - -When 15 is inserted, both stacks change to following. -Actual Stack -15 <--- top -29 -19 -18 -Auxiliary Stack -15 <---- top -18 -18 -18 - -When 16 is inserted, both stacks change to following. -Actual Stack -16 <--- top -15 -29 -19 -18 -Auxiliary Stack -15 <---- top -15 -18 -18 -18 -``` - -这样无论是用deque还是本身的lst都有一些提升 - - -```python -from collections import deque -class MinStack(object): - - def __init__(self): - """ - initialize your data structure here. - """ - self.lst = deque() - self.aux = deque() - - - def push(self, x): - """ - :type x: int - :rtype: void - """ - self.lst.append(x) - if not self.aux or self.aux[-1] > x: - self.aux.append(x) - else: - self.aux.append(self.aux[-1]) - - - - def pop(self): - """ - :rtype: void - """ - self.lst.pop() - self.aux.pop() - - def top(self): - """ - :rtype: int - """ - return self.lst[-1] - - - def getMin(self): - """ - :rtype: int - """ - return self.aux[-1] -``` diff --git "a/docs/Leetcode_Solutions/Java/159._Longest_Substring_with_At_Most_Two_Distinct_Characters \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/159._Longest_Substring_with_At_Most_Two_Distinct_Characters \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 7d65fb605..000000000 --- "a/docs/Leetcode_Solutions/Java/159._Longest_Substring_with_At_Most_Two_Distinct_Characters \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,32 +0,0 @@ -### 159. Longest Substring with At Most Two Distinct Characters - -题目: - - - -难度 : Hard - - - -```python -class Solution(object): - def lengthOfLongestSubstringTwoDistinct(self, s): - """ - :type s: str - :rtype: int - """ - maps = {} - begin, end, counter, length = 0, 0, 0, 0 - while end < len(s): - maps[s[end]] = maps.get(s[end], 0) + 1 - if maps[s[end]] == 1: - counter += 1 -            end += 1   # end 永远指向下一个待处理的字符 -            while counter > 2: - maps[s[begin]] -= 1 - if maps[s[begin]] == 0: - counter -= 1 - begin += 1 -            length = max(length, end - begin) # 因此这里是```end - begin```而不是```end - begin + 1``` -        return length -``` diff --git "a/docs/Leetcode_Solutions/Java/160._intersection_of_two_linked_lists \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/160._intersection_of_two_linked_lists \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b403f01f9..000000000 --- "a/docs/Leetcode_Solutions/Java/160._intersection_of_two_linked_lists \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,59 +0,0 @@ -### 160. Intersection of Two Linked Lists - -题目: - - - -难度: - -Easy - - -如果两个linkedlist有intersection的话,可以看到,其实如果一开始我们就走到b2的话,那么我们就可以两个pointer一个一个的对比,到哪一个地址一样,接下来就是intersection部分。 - - - -``` -A: a1 → a2 - ↘ - c1 → c2 → c3 - ↗ -B: b1 → b2 → b3 -``` -比较巧妙的数学解法,看下面的解释和代码 - - - -AC代码如下: - -```python -class Solution(object): - def getIntersectionNode(self, headA, headB): - """ - :type head1, head1: ListNode - :rtype: ListNode - """ - pA, pB = headA, headB - while pA is not pB: - pA = pA.next if pA else headB - pB = pB.next if pB else headA - return pA -``` -Just count the number of moves by each pointer before they meet. One pointer will traverse entire list1 for N moves and then jump to the head of list1 to move (M-K) steps to intersection, where K represents the length of common part. Now the other pointer must also moved the same number of steps since they are both moved at the same time. The second pointer traverses the entire list2 for M steps and jumped to the head of list1 to move (N-K) steps. So the loop finished with M+N-K times. -详见[zzg_zzm的评论](https://leetcode.com/problems/intersection-of-two-linked-lists/discuss/49799) - -This algorithm is sooooo perfect! - -I was wonder if the running time is O(n+m), but later I figured out that the actually running time is just: - -- m+n for non-intersection case - -With intersection: - -- Suppose for LL-A, it’s a+b=n, a is the # of nodes before intersection - -- Suppose for LL-B, it’s c+b=m, c is the # of nodes before intersection - -Thus the actual running time is a+b+c = n+c = m+a. - -Actually, when b=0, this just stands for the case with no intersection with a+b+c=n+m diff --git "a/docs/Leetcode_Solutions/Java/162._find_peak_element \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/162._find_peak_element \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 2aad9b1c8..000000000 --- "a/docs/Leetcode_Solutions/Java/162._find_peak_element \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,61 +0,0 @@ -### 162. Find Peak Element - -题目: - - - -难度: -Medium - - -思路: - - -最直观的是O(N)解法 - -```python -class Solution(object): - def findPeakElement(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - for i in range(1, len(nums)): - if nums[i] < nums[i-1]: - return i-1 - return len(nums) - 1 -``` - -O(lgN) 解法 - -这是一个经典题目 - -- a[mid] < a[mid] only look at the left side -- a[mid] < a[mid] only look at the right side -- else peak found - - -证明就是用反证法,或者看peak,因为这里已经限制了num[i] ≠ num[i+1],所以peak element 一定存在。然后a[mid] < a[mid-1],那么说明这里一定是下降的,说明之前一定有一个peak存在,否则我们可以用反证法证明. - -写到这里,我非常相信就是binary search能写对其实不容易。 - - -AC代码 - -```python -class Solution(object): - def findPeakElement(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - l, r = 0, len(nums) - 1 - while l <= r: - if l == r : return l - mid = l + ((r - l) >> 2) - if nums[mid] < nums[mid+1]: - l = mid + 1 - else: - r = mid -``` - diff --git "a/docs/Leetcode_Solutions/Java/165._compare_version_numbers \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/165._compare_version_numbers \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index ab976ce99..000000000 --- "a/docs/Leetcode_Solutions/Java/165._compare_version_numbers \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,47 +0,0 @@ -###165. Compare Version Numbers - -题目: - - - -难度: - -Easy - - -其实我并不觉得这个很简单 - -因为可能两个的位数不一样,首端或者尾端需要补0,同时我还考虑过可能有出现多个'.'的状况 - - - -``` -class Solution(object): - def compareVersion(self, version1, version2): - """ - :type version1: str - :type version2: str - :rtype: int - """ - v1 = version1.split('.') - v2 = version2.split('.') - v1 = [int(x) for x in v1] - v2 = [int(x) for x in v2] - - len1 = len(v1) - len2 = len(v2) - lenMax = max(len1, len2) - for x in range(lenMax): - v1Token = 0 - if x < len1: - v1Token = v1[x] - v2Token = 0 - if x < len2: - v2Token = v2[x] - if v1Token > v2Token: - return 1 - elif v1Token < v2Token: - return -1 - return 0 - -``` diff --git "a/docs/Leetcode_Solutions/Java/166._Fraction_to_Recurring_Decimal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/166._Fraction_to_Recurring_Decimal \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index d4285fe4b..000000000 --- "a/docs/Leetcode_Solutions/Java/166._Fraction_to_Recurring_Decimal \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,42 +0,0 @@ -### 166. Fraction to Recurring Decimal - -题目: - - - -难度: - -Medium - - - - -```python -class Solution: - # @return a string - def fractionToDecimal(self, n, d): - res = '' - if n == 0: # zero numerator - return str(n) - if (n < 0) ^ (d < 0): # determine the sign - res += '-' - n = abs(n) # remove sign of operands - d = abs(d) - res += str(n / d) # append integral part - if (n % d == 0): # in case no fractional part - return res - res += '.' - r = n % d - m = {} - while r: # simulate the division process - if r in m: # meet a known remainder - res = res[:m[r]] + '(' + res[m[r]:] + ')' # so we reach the end of the repeating part - break - m[r] = len(res) # if the remainder is first seen, remember the current position for it - r *= 10 - res += str(r / d) # append the quotient digit - r %= d - return res -``` - - diff --git "a/docs/Leetcode_Solutions/Java/167._two_sum_ii_-_input_array_is_sorted \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/167._two_sum_ii_-_input_array_is_sorted \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 8fcd51708..000000000 --- "a/docs/Leetcode_Solutions/Java/167._two_sum_ii_-_input_array_is_sorted \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,35 +0,0 @@ -### 167. Two Sum II - Input array is sorted - - - -题目: - - - -难度: -Medium - - -思路: - - -双指针 - -```python -class Solution(object): - def twoSum(self, numbers, target): - """ - :type numbers: List[int] - :type target: int - :rtype: List[int] - """ - l, r = 0, len(numbers) - 1 - while l < r: - if numbers[l] + numbers[r] == target: - return [l+1, r+1] - elif numbers[l] + numbers[r] > target: - r -= 1 - else: - l += 1 - -``` diff --git "a/docs/Leetcode_Solutions/Java/168._excel_sheet_column_title \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/168._excel_sheet_column_title \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 547f083ee..000000000 --- "a/docs/Leetcode_Solutions/Java/168._excel_sheet_column_title \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,28 +0,0 @@ -###168. Excel Sheet Column Title - -题目: - - - - -难度: - -Easy - -依旧26进制的反击,不过这个反击我做的没之前那个好,看了hint - -``` -class Solution(object): - def convertToTitle(self, n): - """ - :type n: int - :rtype: str - """ - ans = '' - while n : - ans = chr(ord('A') + (n - 1) % 26) + ans - n = (n - 1) // 26 - return ans - -``` - diff --git "a/docs/Leetcode_Solutions/Java/169._majority_element \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/169._majority_element \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 6701ba759..000000000 --- "a/docs/Leetcode_Solutions/Java/169._majority_element \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,74 +0,0 @@ -###169. Majority Element - - - -题目: - - - -难度: -Easy - -思路: - -其实这个我有点有想到过 - - -给定一个长度为 n的数组,其中有一个数,它出现的次数大于⎣n/2⎦,称为主要元素,找到它. - -这个很像之前做过的一道CLRS的题目,想法可以用divide & conquer. - - -- 如果数组长度 <= 2,那么return第一个即解决问题 -- 如果长度 > 2,那么可以两两配对,对于配对一样的结果,删去 - - 如果最后余一个,这一个留下 - - shuffle之后再尝试两两配对,直到最后结果不再改变 - - 这样肯定是能解决问题的,因为为了满足次数大于⎣n/2⎦这个条件。 - - - - - - -``` - - 1 2 1 2 1 2 1 2 - 2 3 2 3 2 3 2 3 - 2 4 2 2 2 2 3 - 2 4 2 3 3 - 3 2 - 2 2 - 2 2 -``` - -思路容易implement非常难啊. - - - -这个问题有一个很出名的算法 - - -Boyer-Moore众数(majority number) 问题 - -在数组中找到两个不相同的元素并删除它们,不断重复此过程,直到数组中元素都相同,那么剩下的元素就是主要元素。 - - -这个算法的妙处在于不直接删除数组中的元素,而是利用一个计数变量. - -伪码 - - def majorityElement(self, nums): - count,major=0,0 - for n in nums: - if count==0: - major=n - if major==n: - count+=1 - else: - count-=1 - return major - - - - \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/171._excel_sheet_column_number \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/171._excel_sheet_column_number \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 4521f737c..000000000 --- "a/docs/Leetcode_Solutions/Java/171._excel_sheet_column_number \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,34 +0,0 @@ -###171. Excel Sheet Column Number - -题目: - - - - -难度: - -Easy - - -26进制的反击 - -``` -class Solution(object): - def titleToNumber(self, s): - """ - :type s: str - :rtype: int - """ - maps = {} - for i in range(65,91): - maps[chr(i)] = i - 64 - - lst = list(s) - lst.reverse() - num = 0 - for idx,item in enumerate(lst): - num += maps[item] * (26 ** idx) - return num - -``` - diff --git "a/docs/Leetcode_Solutions/Java/173._binary_search_tree_iterator \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/173._binary_search_tree_iterator \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a8b6fd9cc..000000000 --- "a/docs/Leetcode_Solutions/Java/173._binary_search_tree_iterator \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,95 +0,0 @@ -### 173. Binary Search Tree Iterator - -题目: - - - -难度: -Medium - - -同样没有听题目要求,一开始就取巧,用InOrder,这样得到BSF有序排列,然后使用 - - -```python - -class BSTIterator(object): - def __init__(self, root): - """ - :type root: TreeNode - """ - self.root = root - self.lst = [] - self.inOrder(root) - self.lst.reverse() - - - - def hasNext(self): - """ - :rtype: bool - """ - return self.lst != [] - - - def next(self): - """ - :rtype: int - """ - return self.lst.pop() - - def inOrder(self, root): - if root == None: - return - self.inOrder(root.left) - self.lst.append(root.val) - self.inOrder(root.right) - -``` - -谷歌了一下,得到如何满足题目要求的hint,从root开始,往左走,把左孩子压入stack,直到左边为空。 - -然后开始取node,如果node有右孩子,则同样要把node的右孩子的所有左孩子全部append入stack,画了一个图,可行。 - - - - - -```python - -class BSTIterator(object): - def __init__(self, root): - """ - :type root: TreeNode - """ - self.root = root - self.stack = [] - self.pushAllLeft(root) - - - def hasNext(self): - """ - :rtype: bool - """ - return self.stack != [] - - - def next(self): - """ - :rtype: int - """ - if self.hasNext(): - cur = self.stack.pop() - if cur.right: - self.pushAllLeft(cur.right) - return cur.val - - def pushAllLeft(self, node): - """ - :type node: TreeNode - """ - cur = node - while cur: - self.stack.append(cur) - cur = cur.left -``` diff --git "a/docs/Leetcode_Solutions/Java/189._rotate_array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/189._rotate_array \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 080a1e581..000000000 --- "a/docs/Leetcode_Solutions/Java/189._rotate_array \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,23 +0,0 @@ -###189. Rotate Array - -题目: - - - -难度 : Easy - - -作弊神奇python大法 - -``` -class Solution(object): - def rotate(self, nums, k): - """ - :type nums: List[int] - :type k: int - :rtype: void Do not return anything, modify nums in-place instead. - """ - n = len(nums) - nums[:] = nums[n-k:] + nums[:n-k] - œ -``` diff --git "a/docs/Leetcode_Solutions/Java/191._number_of_1_bits \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/191._number_of_1_bits \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index dcba66c7b..000000000 --- "a/docs/Leetcode_Solutions/Java/191._number_of_1_bits \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,66 +0,0 @@ -### 191. Number of 1 Bits - -题目: - - - - -难度: - -Easy - - -转成二进制,数1的个数 - -```python -class Solution(object): - def hammingWeight(self, n): - """ - :type n: int - :rtype: int - """ - return bin(n).count('1') -``` - - - -有wikipedia的题目 [Hamming Weight]((https://zh.wikipedia.org/wiki/汉明重量)) - - - -用wikipedia的解法: - -原理是在于每次使用x & x-1 总会把低位的数字给置0 - -比如 3 = 011 2 = 010 3 & 2 = 010 cnt =1 - -​ 2 = 010 1 = 001 2 & 1 = 000 cnt = 2 - -比如 9 = 1001 8 = 1000 9&8 = 1000 cnt =1 - -​ 8 = 1000 7 = 0111 8&7 = 0000 cnt = 2 - -> 减1操作将最右边的符号从0变到1,从1变到0,与操作将会移除最右端的1。如果最初X有N个1,那么经过N次这样的迭代运算,X将减到0。下面的算法就是根据这个原理实现的。 - -所以关键点是每次都会把最右边的1变成0. - - - -AC代码 - - - -```python -class Solution(object): - def hammingWeight(self, n): - """ - :type n: int - :rtype: int - """ - cnt = 0 - while n != 0: - n &= n - 1 - cnt += 1 - return cnt -``` - diff --git "a/docs/Leetcode_Solutions/Java/198._house_robber \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/198._house_robber \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 2b2deedda..000000000 --- "a/docs/Leetcode_Solutions/Java/198._house_robber \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,53 +0,0 @@ - -### 198. House Robber - - -题目: - - - -难度: - -Easy - - -状态转移方程: - -dp[i] = max(dp[i-1], dp[i-2] + nums[i]) - - -AC 代码 - -```python -class Solution(object): - def rob(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - n = len(nums) - if n == 0 : return 0 - elif n == 1 : return nums[0] - elif n == 2 : return max(nums[0], nums[1]) - else: - dp = [0 for i in range(n)] - dp[0] = nums[0] - dp[1] = max(nums[0],nums[1]) - for i in range(2,n): - dp[i] = max( dp[i-1], dp[i-2] + nums[i]) - return dp[n-1] -``` - -```python -class Solution(object): - def rob(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - last, now = 0, 0 - for i in nums: last, now = now, max(last + i, now) - return now -``` - - diff --git "a/docs/Leetcode_Solutions/Java/199._binary_tree_right_side_view \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/199._binary_tree_right_side_view \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 6f7b3b6d6..000000000 --- "a/docs/Leetcode_Solutions/Java/199._binary_tree_right_side_view \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,37 +0,0 @@ -###199. Binary Tree Right Side View - -题目: - - - - -难度: - -Medium - - -还是在玩第102题,level order traversal. - -``` -class Solution(object): - def rightSideView(self, root): - """ - :type root: TreeNode - :rtype: List[int] - """ - if root == None: return [] - - res = [] - curLevel = [root] - while curLevel: - nextLevel = [] - tmpRes = [] - for node in curLevel: - tmpRes.append(node.val) - if node.left: nextLevel.append(node.left) - if node.right: nextLevel.append(node.right) - res.append(tmpRes[-1]) - curLevel = nextLevel - return res -``` - diff --git "a/docs/Leetcode_Solutions/Java/200._number_of_islands \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/200._number_of_islands \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 73c5aecf4..000000000 --- "a/docs/Leetcode_Solutions/Java/200._number_of_islands \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,130 +0,0 @@ -### 200. Number of Islands - - -题目: - - - -难度: -Medium - - -思路: - - -一开始: -numberOfIslands = 0 -islandArea = [] - - -然后遇到(x,y) = 1的状况,更新numberOfIslands,并且把(x,y)放入islandArea,然后用BFS或者DFS查找岛屿范围,全部更如islandArea,做loop - -以上就是基本思路 - - -然后超时|||, 小改之后AC - - -``` - -class Solution(object): - def numIslands(self, grid): - """ - :type grid: List[List[str]] - :rtype: int - """ - self.grid = grid[:] - - self.row = len(self.grid) - self.col = len(self.grid[0]) if self.row else 0 - self.visited = [[0 for i in range(self.col)]for j in range(self.row)] - - - self.numberOfIslands = 0 - - for i in range(self.row): - for j in range(self.col): - if self.grid[i][j] == '1' and self.visited[i][j] == 0: - self.findArea(i,j) - self.numberOfIslands += 1 - - return self.numberOfIslands - - def findArea(self, i, j): - s = [] - s.append((i,j)) - while s: - (x,y) = s.pop() - self.visited[x][y] = 1 - if self.legal(x-1,y): - s.append((x-1,y)) - if self.legal(x+1,y): - s.append((x+1,y)) - if self.legal(x,y-1): - s.append((x,y-1)) - if self.legal(x,y+1): - s.append((x,y+1)) - - def legal(self,x,y): - return x>= 0 and x < self.row and y >= 0 and y < self.col and self.grid[x][y] == '1' and self.visited[x][y] == 0 -a = Solution() -print a.numIslands(["11000","11000","00100","00011"]) - -``` - - -看了别人的代码,写的真美 ╮(╯_╰)╭ 啊 - -``` -class Solution(object): - def numIslands(self, grid): - """ - :type grid: List[List[str]] - :rtype: int - """ - def dfs(gird, used, row, col, x, y): - if gird[x][y] == '0' or used[x][y]: - return - used[x][y] = True - - if x!= 0: - dfs(grid, used, row,col, x-1,y) - if x!= row -1 : - dfs(grid, used, row,col, x+1, y) - if y!= 0: - dfs(grid, used, row,col, x, y-1) - if y!= col - 1: - dfs(grid, used, row,col, x, y+1) - - - row = len(grid) - col = len(grid[0]) if row else 0 - - used = [[0 for i in xrange(col)] for i in xrange(row)] - - count = 0 - for i in xrange(row): - for j in xrange(col): - if grid[i][j] == '1' and not used[i][j]: - dfs(grid,used,row,col,i,j) - count += 1 - return count -``` - -厉害的解法:Sink and count the islands. -```python -class Solution(object): - def numIslands(self, grid): - """ - :type grid: List[List[str]] - :rtype: int - """ - def sink(i, j): - if 0 <= i < len(grid) and 0 <= j < len(grid[0]) and grid[i][j] == '1': - grid[i][j] = '0' - map(sink, (i+1, i-1, i, i), (j, j, j+1, j-1)) - return 1 - return 0 - return sum(sink(i, j) for i in range(len(grid)) for j in range(len(grid[0]))) -``` - diff --git "a/docs/Leetcode_Solutions/Java/203._remove_linked_list_elements \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/203._remove_linked_list_elements \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 15aa10efa..000000000 --- "a/docs/Leetcode_Solutions/Java/203._remove_linked_list_elements \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,38 +0,0 @@ -###203. Remove Linked List Elements - -题目: - - - -难度: - -Easy - - -AC代码如下: - - - -``` -class Solution(object): - def removeElements(self, head, val): - """ - :type head: ListNode - :type val: int - :rtype: ListNode - """ - dummy = ListNode(-1) - dummy.next = head - - cur = dummy - - while cur.next: - if cur.next.val == val: - cur.next = cur.next.next - else: - cur = cur.next - - return dummy.next - - -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/204._count_primes \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/204._count_primes \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b69290b70..000000000 --- "a/docs/Leetcode_Solutions/Java/204._count_primes \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,57 +0,0 @@ -###204. Count Primes - - -题目: - - - -难度: - -Easy - - - -这个题的hint是已经把算法喂到嘴边了 - - - - -``` -Input: an integer n > 1 - -Let A be an array of Boolean values, indexed by integers 2 to n, -initially all set to true. - -for i = 2, 3, 4, ..., not exceeding √n: - if A[i] is true: - for j = i^2, i^2+i, i^2+2*i, i^2+3i, ..., not exceeding n : - A[j] := false - -Output: all i such that A[i] is true. -``` - - - -python算法 - - -``` -class Solution(object): - def countPrimes(self, n): - """ - :type n: int - :rtype: int - """ - isPrime = [1 for i in range(n)] - - i = 2 - while i * i < n: - if isPrime[i]: - j = i * i - while j < n : - isPrime[j] = 0 - j += i - i += 1 - - return sum(isPrime[2:]) -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/205._isomorphic_strings \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/205._isomorphic_strings \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 47b0ab772..000000000 --- "a/docs/Leetcode_Solutions/Java/205._isomorphic_strings \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,39 +0,0 @@ -###205. Isomorphic Strings - -题目: - - - -难度 : Easy - - -AC之法,用dictionary,因为限制,所以确保s 和 t 是isomorphic 同时 t 和 s 是 - - -``` -class Solution(object): - def isIsomorphic(self, s, t): - """ - :type s: str - :type t: str - :rtype: bool - """ - return self.iso(s,t) and self.iso(t,s) - - def iso(self,s, t): - """ - :type s: str - :type t: str - :rtype: bool - """ - mapx = {} - for i in range(len(s)): - if s[i] not in mapx: - mapx[s[i]] = t[i] - elif s[i] in mapx: - if t[i] != mapx[s[i]]: - return False - return True - - -``` diff --git "a/docs/Leetcode_Solutions/Java/206._reverse_linked_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/206._reverse_linked_list \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 97c10db26..000000000 --- "a/docs/Leetcode_Solutions/Java/206._reverse_linked_list \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,69 +0,0 @@ -### 206. Reverse Linked List - -题目: - - - -难度: -Easy - -用三个指针,分别指向prev,cur 和 nxt,然后loop一圈还算比较简单. - - - - -```python -class Solution(object): - def reverseList(self, head): - """ - :type head: ListNode - :rtype: ListNode - """ - prev = None - cur = head - while(cur): - nxt = cur.next - cur.next = prev - prev = cur - cur = nxt - return prev -``` -其实一个指针就够了 -```python -class Solution(object): - def reverseList(self, head): - """ - :type head: ListNode - :rtype: ListNode - """ - if not head: - return head - prev = None - while head.next: - tmp = head.next - head.next = prev - prev = head - head = tmp - head.next = prev - return head -``` - -递归版本,可以再消化一下. - - -```python -class Solution(object): - def reverseList(self, head): - """ - :type head: ListNode - :rtype: ListNode - """ - return self.reverseHelper(head, None) - - def reverseHelper(self, head, new_head): - if not head: - return new_head - nxt = head.next - head.next = new_head - return self.reverseHelper(nxt, head) -``` diff --git "a/docs/Leetcode_Solutions/Java/207._course_schedule \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/207._course_schedule \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 6e990f09d..000000000 --- "a/docs/Leetcode_Solutions/Java/207._course_schedule \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,93 +0,0 @@ -###207. Course Schedule - - - -题目: - - - -难度: -Medium - -思路: - -就是考topological sort,用来判断directed graph是否有cycle - -DFS 和 BFS都可以用来拓扑排序。 - -最简单的想法是每次取出indegree是0的node,然后把它和与之相关的edge都删了。一开始觉得这样的时间复杂度会很高,然后看到了这样写,参照: - - - -很聪明的写法 - -这里做了转成set以及添加removeList这样的操作是因为边list边做iterator这样的操作很危险 - - - - -``` -class Solution(object): - def canFinish(self, numCourses, prerequisites): - """ - :type numCourses: int - :type prerequisites: List[List[int]] - :rtype: bool - """ - degrees = [ 0 for i in range(numCourses)] - childs = [[] for i in range(numCourses)] - for front, tail in prerequisites: - degrees[front] += 1 - childs[tail].append(front) - - courses = set(range(numCourses)) - flag = True - - while flag and len(courses): - flag = False - removeList = [] - for x in courses: - if degrees[x] == 0: - for child in childs[x]: - degrees[child] -= 1 - removeList.append(x) - flag = True - for x in removeList: - courses.remove(x) - return len(courses) == 0 - -``` - -因为CLRS里面明确提到涂色法来处理DFS - -搞了半天,写了一个涂色法,在超时的边缘。之所以超时边缘是因为每次都要去prerequisites里看,没有删减,不高效. - -``` -class Solution(object): - def canFinish(self, numCourses, prerequisites): - """ - :type numCourses: int - :type prerequisites: List[List[int]] - :rtype: bool - """ - def dfs(i, colors, prerequisites): - colors[i] = 'G' - #print i, colors - for front, tail in prerequisites: - if tail == i: - if colors[front] == 'G': - return False - elif colors[front] == 'B': - continue - elif dfs(front, colors, prerequisites) == False: - return False - colors[i] = 'B' - return True - - colors = ['W' for i in range(numCourses)] - for i in range(numCourses): - if colors[i] == 'W': - if dfs(i, colors, prerequisites) == False: - return False - return True -``` diff --git "a/docs/Leetcode_Solutions/Java/208._implement_trie_(prefix_tree) \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/208._implement_trie_(prefix_tree) \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 8ee06db58..000000000 --- "a/docs/Leetcode_Solutions/Java/208._implement_trie_(prefix_tree) \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,89 +0,0 @@ -### 208. Implement Trie (Prefix Tree) - -题目: - - - - -难度: - -Medium - -这个Python实现也太精美了吧,谷歌复写之 - -然后还unlock了一个solution,to read - -Trie整个都需要 to read,精美,可爱😊 - - - - -```python -class TrieNode(object): - def __init__(self): - """ - Initialize your data structure here. - """ - self.childs = dict() - self.isWord = False - - - -class Trie(object): - - def __init__(self): - self.root = TrieNode() - - def insert(self, word): - """ - Inserts a word into the trie. - :type word: str - :rtype: void - """ - node = self.root - for letter in word: - child = node.childs.get(letter) - if child is None: - child = TrieNode() - node.childs[letter] = child - node = child - node.isWord = True - - def search(self, word): - """ - Returns if the word is in the trie. - :type word: str - :rtype: bool - """ - node = self.root - for i in word: - child = node.childs.get(i) - if child is None: - return False - node = child - return node.isWord - - - def startsWith(self, prefix): - """ - Returns if there is any word in the trie - that starts with the given prefix. - :type prefix: str - :rtype: bool - """ - node = self.root - for letter in prefix: - child = node.childs.get(letter) - if child is None: - return False - node = child - return True - - -# Your Trie object will be instantiated and called as such: -# trie = Trie() -# trie.insert("somestring") -# trie.search("key") - -``` - diff --git "a/docs/Leetcode_Solutions/Java/210._course_schedule_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/210._course_schedule_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 852b1163e..000000000 --- "a/docs/Leetcode_Solutions/Java/210._course_schedule_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,55 +0,0 @@ -###210. Course Schedule II - - - -题目: - - - -难度: -Medium - -思路: - -在207的基础上加了order,进击 - - -``` -class Solution(object): - def findOrder(self, numCourses, prerequisites): - """ - :type numCourses: int - :type prerequisites: List[List[int]] - :rtype: List[int] - """ - degrees = [ 0 for i in range(numCourses)] - childs = [[] for i in range(numCourses)] - for front, tail in prerequisites: - degrees[front] += 1 - childs[tail].append(front) - - - courses = set(range(numCourses)) - flag = True - order = [] - - while flag and len(courses): - flag = False - removeList = [] - for x in courses: - if degrees[x] == 0: - print x - for child in childs[x]: - degrees[child] -= 1 - removeList.append(x) - order.append(x) - flag = True - for x in removeList: - courses.remove(x) - - if len(courses) == 0: - return order - else: - return [] - -``` diff --git "a/docs/Leetcode_Solutions/Java/211. Add and Search Word - Data structure design \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/211. Add and Search Word - Data structure design \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 7dd0ea278..000000000 --- "a/docs/Leetcode_Solutions/Java/211. Add and Search Word - Data structure design \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,77 +0,0 @@ -### 211. Add and Search Word - Data structure design - -题目: - - - -难度: Medium - -思路: - -trie也是树,那么dfs/bfs同样适用。 - -实际上是照抄208trie的题目再加上dfs - - - -AC代码 - - - -``` -class TrieNode(object): - """docstring for TrieNode""" - def __init__(self): - self.childs = dict() - self.isWord = False - -class WordDictionary(object): - def __init__(self): - """ - initialize your data structure here. - """ - self.root = TrieNode() - - - def addWord(self, word): - """ - Adds a word into the data structure. - :type word: str - :rtype: void - """ - node = self.root - for letter in word: - child = node.childs.get(letter) - if child is None: - child = TrieNode() - node.childs[letter] = child - node = child - node.isWord = True - - - def search(self, word): - """ - Returns if the word is in the data structure. A word could - contain the dot character '.' to represent any one letter. - :type word: str - :rtype: bool - """ - def dfs(root, word): - if len(word) == 0: - return root.isWord - elif word[0] == '.': - for node in root.childs: - if dfs(root.childs[node], word[1:]): - return True - return False - else: - node = root.childs.get(word[0]) - if node is None: - return False - return dfs(node, word[1:]) - - return dfs(self.root, word) -``` - - - diff --git "a/docs/Leetcode_Solutions/Java/213._house_robber_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/213._house_robber_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 9caec3dfd..000000000 --- "a/docs/Leetcode_Solutions/Java/213._house_robber_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,61 +0,0 @@ -###213. House Robber II - - -题目: - - - -难度: -Medium - -思路: - -跟house robber 1 类似,但是加了一些限制,抢到第 n-1 家最大两种可能,抢第 n-1 家和不抢第 n-1 家。 - - 0, 1, 2, 3, 4, 5, 6 ... n-1 - - -所以状态转移方程写成二维的更好来求,从第i家抢到第j家的状态转移方程 - - - nums[j] ,j = i - dp[i][j] = max(nums[i], nums[i+1]) , j = i +1 - max(dp[i][j-2] + nums[j], dp[i][j-1]), j > i+1 - - - -Show me the code - - -AC代码 - -``` -class Solution(object): - def rob(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - n = len(nums) - if n == 0 : return 0 - if n == 1 : return nums[0] - if n == 2 : return max(nums[0],nums[1]) - - dp = [[0 for i in range(n)] for j in range(n)] - - for i in range(n): - for j in range(i,n): - if j == i: - dp[i][j] = nums[j] - elif j == i + 1: - dp[i][j] = max(nums[i],nums[i+1]) - else: - dp[i][j] = max(dp[i][j-2] + nums[j], dp[i][j-1]) - - # print dp - # rob without n-1, or rob with n-1 - val = max(dp[0][n-2], dp[1][n-3] + nums[n-1]) - - return val - -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/216._combination_sum_iii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/216._combination_sum_iii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 9e1b6371e..000000000 --- "a/docs/Leetcode_Solutions/Java/216._combination_sum_iii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,40 +0,0 @@ -###216. Combination Sum III - -题目: - - - - -难度: - -Medium - -继续Combination Sum 系列 - - -``` -class Solution(object): - def combinationSum3(self, k, n): - """ - :type k: int - :type n: int - :rtype: List[List[int]] - """ - candidates = [1,2,3,4,5,6,7,8,9] - self.res = [] - self.combSum(candidates, n, [], k) - return self.res - - - def combSum(self,candidates, target, valueList, k): - if target == 0 and k == 0: - self.res.append(valueList) - length = len(candidates) - if length == 0 or k < 0 : - return - for i in range(length): - if candidates[i] > target: - return - self.combSum(candidates[i+1:], target - candidates[i], valueList + [candidates[i]], k-1) - -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/217._contains_duplicate \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/217._contains_duplicate \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index f6c2a2aef..000000000 --- "a/docs/Leetcode_Solutions/Java/217._contains_duplicate \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,62 +0,0 @@ -###217. Contains Duplicate - -题目: - - - -难度: - -Easy - - -我直接sort,然后比较相邻的元素,这样O(n),也是笨办法,居然unlocked a solution,所以来读读解答. - -三个办法: - -- linear search O(n^2) -- sort O(n) -- hashtable - - -我用的sort - -``` -class Solution(object): - def containsDuplicate(self, nums): - """ - :type nums: List[int] - :rtype: bool - """ - nums.sort() - for i in range(len(nums)-1): - if nums[i] == nums[i+1]: - return True - return False -``` - - - - -看给的Java解法 - - -``` -public boolean containsDuplicate(int[] nums) { - Set set = new HashSet<>(nums.length); - for (int x: nums) { - if (set.contains(x)) return true; - set.add(x); - } - return false; -} -``` - -还有一个取巧的Python解法,我也看到了 - -``` -class Solution(object): - def containsDuplicate(self, nums): - if len(nums) > len(set(nums)): - return True - return False -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/218._The _Skyline_Problem \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/218._The _Skyline_Problem \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 34d9c9176..000000000 --- "a/docs/Leetcode_Solutions/Java/218._The _Skyline_Problem \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,134 +0,0 @@ -### 218. The Skyline Problem - -题目: - - - -难度: - -Hard - -思路 - -观察发现,skyline的points的横坐标一定是某个building的左边界或者右边界。 - -开始,假设只有2个建筑物,拿出第一个buiding B1,我们先把它的左上顶点加进我们的output结果skyline中,然后继续拿下一个building B2,我们现在需要将B2的左上顶点对应的x coordinate与B1的右上顶点所对应的x coordinate做比较: - -- 如果前者小且B2的高度大于B1的高度,则我们将B2的左上顶点也加入skyline中去。 -- 如果前者小且B2的高度小于等于B1的高度,则忽略B2的左上顶点 - -接下来考虑更多建筑物的情况,从左到右扫描,当我们遇到第一个楼的左边界时,把它push到一个heap中。如果后面扫描的楼的高度比heap中最高的楼还高,那么它的左上顶点一定会被加入到skyline中。当我们遇到一个building的右边界时,我们需要将其从heap中pop掉,如果heap中max height有变化,则push到结果中。 - -参考[Brian Gordon的blog](https://briangordon.github.io/2014/08/the-skyline-problem.html) - 和 [Stefan大神的题解](https://leetcode.com/problems/the-skyline-problem/discuss/61194) - -#### 程序代码解释 - -- liveBuildings代表(左上顶点已经被加入output中但右上顶点还没有做判断的building)的右上顶点的集合,形式为[(height, x-coordinate)…..] -- skyline是output -- 程序里面的这句代码```while idx < n and buildings[idx][0] == start:```是为了防止有左右坐标完全相同但是height不同的building的存在,it's not useless!!! -- python里面的heapq模块如果有不懂的同学可以看看这个文章:[heapq](http://blog.csdn.net/calling_wisdom/article/details/41676133) - - -```python -class Solution(object): - def getSkyline(self, buildings): - """ - :type buildings: List[List[int]] - :rtype: List[List[int]] - """ - idx, n = 0, len(buildings) - liveBuildings, skyline = [], [] -        while idx < n or len(liveBuildings) > 0: # 只要所有的点没处理完就一直循环 -            if len(liveBuildings) == 0 or (idx < n and buildings[idx][0] <= -liveBuildings[0][1]): - start = buildings[idx][0] - while idx < n and buildings[idx][0] == start: - heapq.heappush(liveBuildings, [-buildings[idx][2], -buildings[idx][1]]) - idx += 1 - else: - start = -liveBuildings[0][1] - while len(liveBuildings) > 0 and -liveBuildings[0][1] <= start: - heapq.heappop(liveBuildings) - height = len(liveBuildings) and -liveBuildings[0][0] - if len(skyline) == 0 or skyline[-1][1] != height: - skyline.append([start, height]) - return skyline -``` -#####另外还有一个超级6的大神的代码,但是今天我要赶报告,就只先贴代码了 - -```python -class Solution(object): - def getSkyline(self, buildings): - """ - :type buildings: List[List[int]] - :rtype: List[List[int]] - """ - events = sorted([(L, -H, R) for L, R, H in buildings] + list(set((R, 0, None) for L, R, H in buildings))) - #events = sorted(event for L, R, H in buildings for event in ((L, -H, R), (R, 0, None))) - res, hp = [[0, 0]], [(0, float("inf"))] - for x, negH, R in events: - while x >= hp[0][1]: - heapq.heappop(hp) - if negH: heapq.heappush(hp, (negH, R)) - if res[-1][1] + hp[0][0]: - res += [x, -hp[0][0]], - return res[1:] -``` - -```Java -public class Solution { - public List getSkyline(int[][] buildings) { - List result = new ArrayList(); - if (buildings == null || buildings.length == 0 || buildings[0].length == 0) { - return result; - } - - List heights = new ArrayList(); - for (int[] building : buildings) { - heights.add(new Height(building[0], -building[2])); - heights.add(new Height(building[1], building[2])); - } - Collections.sort(heights, new Comparator() { - @Override - public int compare(Height h1, Height h2) { - return h1.index != h2.index ? h1.index - h2.index : h1.height - h2.height; - } - }); - - PriorityQueue pq = new PriorityQueue(1000, Collections.reverseOrder()); - pq.offer(0); - int prev = 0; - for (Height h : heights) { - if (h.height < 0) { - pq.offer(-h.height); - } else { - pq.remove(h.height); - } - int cur = pq.peek(); - if (cur != prev) { - result.add(new int[]{h.index, cur}); - prev = cur; - } - } - - return result; - } - - class Height { - int index; - int height; - Height(int index, int height) { - this.index = index; - this.height = height; - } - } -} -``` - - - -Author: Keqi Huang - -If you like it, please spread your support - -![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) diff --git "a/docs/Leetcode_Solutions/Java/219._contains_duplicate_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/219._contains_duplicate_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 8c5868c6f..000000000 --- "a/docs/Leetcode_Solutions/Java/219._contains_duplicate_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,35 +0,0 @@ -###219. Contains Duplicate II - -题目: - - - -难度: - -Easy - - -经过了Contains Duplicate的考验,用hash table(也叫dictionary)来存,这个元素还没出现过,就放hash table,如果出现了,计算相邻距离,小于等于k则return true,否则更新hash table中元素的位置, - - -我用的sort - -``` -class Solution(object): - def containsNearbyDuplicate(self, nums, k): - """ - :type nums: List[int] - :type k: int - :rtype: bool - """ - if len(nums) < 2 : return False - lookup = {} - for i in range(len(nums)): - if nums[i] not in lookup: - lookup[nums[i]] = i - else: - if i - lookup[nums[i]] <= k : - return True - lookup[nums[i]] = i - return False -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/221._maximal_square \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/221._maximal_square \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 3dd7b9a8c..000000000 --- "a/docs/Leetcode_Solutions/Java/221._maximal_square \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,78 +0,0 @@ -###221. Maximal Square - - -题目: - - - -难度: -Medium - -tag: DP - - -递推公式,一开始想的很简单: - -dp[i][j] = dp[i-1][j-1] + 1 #如果dp[i-1][j-1]为1,dp[i-1][j]为1,dp[i][j-1]为1 - -很明显的错误,一旦遇到更大的方块就会有问题 - -然后看了hint,其实递推方程式是很有技巧的,左上角,左边,上面,相邻的三个部分最小的+1,当然,前提也是要这里dp[i][j] 为1,然后我们再会去看其他的部分。 - -看个例子 - -``` -原本的matrix DP - -1 0 1 0 0 1 0 1 0 0 -1 0 1 1 1 → 1 0 1 1 1 -1 1 1 1 1 1 1 1 2 2 -1 0 0 1 0 1 0 0 1 0 - -``` - -是非常make sense的,因为最小的必定包括了周边的1,然后再加1,否则如果是0的话那么就为0. - -而naïve的错误的递推公式是因为一个square考虑的部分是k * k的部分, k * k 部分都必定为1. - -而正确的递推公式 - - - dp[i][j] = min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1]) + 1 - -则完美的考虑了这一情况 - - -``` -class Solution(object): - def maximalSquare(self, matrix): - """ - :type matrix: List[List[str]] - :rtype: int - """ - dp = [] - for i in matrix: - tmp = [] - for j in i: - tmp.append(int(j)) - dp.append(tmp) - - row = len(dp) - col = len(dp[0]) if row else 0 - - - for i in range(1,row): - for j in range(1,col): - if dp[i][j] == 1: - dp[i][j] = min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1]) + 1 - - - maxv = 0 - for i in range(row): - for j in range(col): - if dp[i][j] > maxv: - maxv = dp[i][j] - return maxv * maxv -``` - - diff --git "a/docs/Leetcode_Solutions/Java/222._count_complete_tree_nodes \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/222._count_complete_tree_nodes \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e1b6bede6..000000000 --- "a/docs/Leetcode_Solutions/Java/222._count_complete_tree_nodes \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,67 +0,0 @@ -###222. Count Complete Tree Nodes - -题目: - - - -难度: -Medium - - -思路: - - -思路一: 超时,跟一般的树一样,递归的来数nodes数 - - - -``` -class Solution(object): - def countNodes(self, root): - """ - :type root: TreeNode - :rtype: int - """ - if root == None: - return 0 - if root.left == None and root.right == None: - return 1 - return 1 + self.countNodes(root.left) + self.countNodes(root.right) -``` - - -思路二:既然说了是 complete binary tree,那么必然有特性可用,complete binary tree的特性是除了最后一层,之前的就是perfect tree. - - -所以寻找左子树的最左边的高度和右子树的最右边的node高度,如果相同就是perfect tree,高度2^h - 1, 否则递归的来看左子树和右子树 - - -``` - -class Solution(object): - def countNodes(self, root): - """ - :type root: TreeNode - :rtype: int - """ - if root == None: - return 0 - - p, q = root,root - - leftHeight = 0 - rightHeight = 0 - - while p: - p = p.left - leftHeight += 1 - - while q: - q = q.right - rightHeight += 1 - - if leftHeight == rightHeight: - return (int)(math.pow(2,leftHeight) - 1) - else: - return 1 + self.countNodes(root.left) + self.countNodes(root.right) -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/223._rectangle_area \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/223._rectangle_area \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 3edba1bc3..000000000 --- "a/docs/Leetcode_Solutions/Java/223._rectangle_area \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,50 +0,0 @@ -###223. Rectangle Area - -题目: - - - -难度 : Easy - - -这道题是我瞎了狗眼,🐶,之前看错了,以为要求相交的部分,结果是求cover的部分,所以写的长|||||| - - -``` -class Solution(object): - def computeArea(self, A, B, C, D, E, F, G, H): - """ - :type A: int - :type B: int - :type C: int - :type D: int - :type E: int - :type F: int - :type G: int - :type H: int - :rtype: int - """ - return self.area(C - A, D - B) + self.area(H - F, G - E ) - self.area(self.interSect(A,C,E,G), self.interSect(B,D,F,H)) - - def area(self, w, h): - if w * h < 0: - return - w * h - return w * h - - - def interSect(self, A, C, E, G): - if E > C: - return 0 - elif G < A: - return 0 - elif E >= A and G <= C: - return G - E - elif A >= E and C <= G: - return C - A - elif G <= C and G >= A and E <= A: - return G - A - else: - return C - E - - -``` diff --git "a/docs/Leetcode_Solutions/Java/224. Basic Calculator \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/224. Basic Calculator \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 53683dc7e..000000000 --- "a/docs/Leetcode_Solutions/Java/224. Basic Calculator \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,108 +0,0 @@ -### 224. Basic Calculator - - - -题目: - - -难度: -Medium - -思路: - -基本跟227一样,只是这里加了括号 - -瞄了一眼,基本上infix(中缀表达式)都是表达成postfix(后缀表达式)再来求值的。 -比如 A + B * C 写成 A B C * + - -| Infix Expression | Prefix Expression | Postfix Expression | -| ---------------- | ----------------- | ------------------ | -| A + B | + A B | A B + | -| A + B * C | + A * B C | A B C * + | - - - -infix 中缀转postfix 后缀还有专门的算法: - - - -1. Create an empty stack called opstack for keeping operators. Create an empty list for output. - -2. Convert the input infix string to a list by using the string method split. - -3. Scan the token list from left to right. - -4. - If the token is an operand, append it to the end of the output list. - - If the token is a left parenthesis, push it on the opstack. - - If the token is a right parenthesis, pop the opstack until the corresponding left parenthesis is removed. Append each operator to the end of the output list. - - If the token is an operator, *, /, +, or -, push it on the opstack. However, first remove any operators already on the opstack that have higher or equal precedence and append them to the output list. - -5. When the input expression has been completely processed, check the opstack. Any operators still on the stack can be removed and appended to the end of the output list. - - - -可以看到中缀转后缀一个重要的点是: 当我们把operator +-*/ 放到opstack上时候,我们需要考虑/看是否有之前的operator有更高或者相等的precedence,这个时候我们需要优先(计算)把它放到output list. - - - -参考 - - - - - -AC代码 - -``` -class Solution(object): - def calculate(self, s): - """ - :type s: str - :rtype: int - """ - def precedence(op): - if op == '*' or op == '/': - return 2 - else: - return 1 - - def cal(op, op1, op2): - if op == '*': - return op1 * op2 - elif op == '/': - return op1 / float(op2) - elif op == '+': - return op1 + op2 - else: - return op1 - op2 - - - opstack = [] - operands = [] - - # remove empty space and put operands and - idx = 0 - for i in range(idx, len(s)): - if s[i] in '+-*/': - operands.append(s[idx:i]) - while len(opstack) > 0 and precedence(s[i]) <= precedence(opstack[-1]) and len(operands) >= 2: - op = opstack.pop() - op2 = int(operands.pop()) - op1 = int(operands.pop()) - res = cal(op, op1, op2) - operands.append(res) - opstack.append(s[i]) - idx = i + 1 - operands.append(s[idx:]) - - while opstack: - op = opstack.pop() - op2 = int(operands.pop()) - op1 = int(operands.pop()) - res = cal(op, op1, op2) - operands.append(res) - - return int(operands[0]) - -``` - diff --git "a/docs/Leetcode_Solutions/Java/225._implement_stack_using_queues \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/225._implement_stack_using_queues \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 10a1ac200..000000000 --- "a/docs/Leetcode_Solutions/Java/225._implement_stack_using_queues \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,53 +0,0 @@ -###225. Implement Stack using Queues - -题目: - - - - -难度: - -Easy - - -又到了作弊神预言Python的强项 - - -``` -class Stack(object): - def __init__(self): - """ - initialize your data structure here. - """ - self.lst = [] - - - def push(self, x): - """ - :type x: int - :rtype: nothing - """ - self.lst.append(x) - - - def pop(self): - """ - :rtype: nothing - """ - self.lst.remove(self.lst[-1]) - - - def top(self): - """ - :rtype: int - """ - return self.lst[-1] - - def empty(self): - """ - :rtype: bool - """ - return self.lst == [] - -``` - diff --git "a/docs/Leetcode_Solutions/Java/226._invert_binary_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/226._invert_binary_tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b66918814..000000000 --- "a/docs/Leetcode_Solutions/Java/226._invert_binary_tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,33 +0,0 @@ -###226. Invert Binary Tree - -题目: - - - -难度: - -Easy - -然后查了一下,有更简单的写法 - - -``` - -class Solution(object): - def invertTree(self, root): - """ - :type root: TreeNode - :rtype: TreeNode - """ - if root == None: return None - elif root.left == None and root.right == None: return root - else: - leftNode = root.left - rightNode = root.right - root.right = leftNode - root.left = rightNode - self.invertTree(root.left) - self.invertTree(root.right) - return root -``` - diff --git "a/docs/Leetcode_Solutions/Java/227._basic_calculator_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/227._basic_calculator_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index ac5ea4eeb..000000000 --- "a/docs/Leetcode_Solutions/Java/227._basic_calculator_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,108 +0,0 @@ -###227. Basic Calculator II - - - -题目: - - - -难度: -Medium - -思路: - -瞄了一眼,基本上infix(中缀表达式)都是表达成postfix(后缀表达式)再来求值的。 -比如 A + B * C 写成 A B C * + - - -| Infix Expression | Prefix Expression | Postfix Expression | -| ---------------- | ----------------- | ------------------ | -| A + B | + A B | A B + | -| A + B * C | + A * B C | A B C * + | - - -infix 中缀转postfix 后缀还有专门的算法: - - - -1. Create an empty stack called opstack for keeping operators. Create an empty list for output. - -2. Convert the input infix string to a list by using the string method split. - -3. Scan the token list from left to right. - -4. - If the token is an operand, append it to the end of the output list. - - If the token is a left parenthesis, push it on the opstack. - - If the token is a right parenthesis, pop the opstack until the corresponding left parenthesis is removed. Append each operator to the end of the output list. - - If the token is an operator, *, /, +, or -, push it on the opstack. However, first remove any operators already on the opstack that have higher or equal precedence and append them to the output list. - -5. When the input expression has been completely processed, check the opstack. Any operators still on the stack can be removed and appended to the end of the output list. - - - -可以看到中缀转后缀一个重要的点是: 当我们把operator +-*/ 放到opstack上时候,我们需要考虑/看是否有之前的operator有更高或者相等的precedence,这个时候我们需要优先(计算)把它放到output list. - - - - -参考 - - - - - -AC代码 - -``` -class Solution(object): - def calculate(self, s): - """ - :type s: str - :rtype: int - """ - def precedence(op): - if op == '*' or op == '/': - return 2 - else: - return 1 - - def cal(op, op1, op2): - if op == '*': - return op1 * op2 - elif op == '/': - return op1 / float(op2) - elif op == '+': - return op1 + op2 - else: - return op1 - op2 - - - opstack = [] - operands = [] - - # remove empty space and put operands and - idx = 0 - for i in range(idx, len(s)): - if s[i] in '+-*/': - operands.append(s[idx:i]) - while len(opstack) > 0 and precedence(s[i]) <= precedence(opstack[-1]) and len(operands) >= 2: - op = opstack.pop() - op2 = int(operands.pop()) - op1 = int(operands.pop()) - res = cal(op, op1, op2) - operands.append(res) - opstack.append(s[i]) - idx = i + 1 - operands.append(s[idx:]) - - while opstack: - op = opstack.pop() - op2 = int(operands.pop()) - op1 = int(operands.pop()) - res = cal(op, op1, op2) - operands.append(res) - - return int(operands[0]) - -``` - diff --git "a/docs/Leetcode_Solutions/Java/228._summary_ranges \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/228._summary_ranges \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index ce9dce0f9..000000000 --- "a/docs/Leetcode_Solutions/Java/228._summary_ranges \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,58 +0,0 @@ -### 228. Summary Ranges - -题目: - - - -难度: - -Medium - - -Just collect the ranges, then format and return them. - -```python -class Solution(object): - def summaryRanges(self, nums): - """ - :type nums: List[int] - :rtype: List[str] - """ - ranges = [] - for i in nums: - if not ranges or i > ranges[-1][-1] + 1: - ranges += [], - ranges[-1][1:] = i, - return ['->'.join(map(str, r)) for r in ranges] -``` -About the commas :-) - -``` -ranges += [], -r[1:] = n, -``` -Why the trailing commas? Because it turns the right hand side into a tuple and I get the same effects as these more common alternatives: -``` -ranges += [[]] -or -ranges.append([]) - -r[1:] = [n] -``` -Without the comma, … - -- ranges += [] wouldn’t add [] itself but only its elements, i.e., nothing. -- r[1:] = n wouldn’t work, because my n is not an iterable. - -Why do it this way instead of the more common alternatives I showed above? Because it’s shorter and faster (according to tests I did a while back). - -写到这里可能又有疑问了🤔️,为什么不可以直接写```ranges[-1][1] = i```呢,当然是会报```IndexError: list assignment index out of range```错误啦,那为什么```ranges[-1][1:] = i,```可以呢? - -简单来说 - -L1=L 与 L1=L[:] -- L1和L 都是对同一个对象的引用(所谓绑定的意思)。 -- L[:] 是生成了一个和L不同的新的对象,L1 变为了L[:] 这个对象的引用。 - - -参考[stefan](https://leetcode.com/problems/summary-ranges/discuss/63193) diff --git "a/docs/Leetcode_Solutions/Java/229._majority_element_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/229._majority_element_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 061c03441..000000000 --- "a/docs/Leetcode_Solutions/Java/229._majority_element_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,62 +0,0 @@ -###229. Majority Element II - - - -题目: - - - -难度: -Medium - -思路: - -majority element是两两比较扔掉不同的元素,然后最后会留下一个。 - -这里变成三三比较来扔东西, find all elements that appear more than ⌊ n/3 ⌋ times,所以最多可以有两个majority element ii. - - -最后再加一个比较来确认这些函数是majority element - -``` -class Solution(object): - def majorityElement(self, nums): - """ - :type nums: List[int] - :rtype: List[int] - """ - cnt1 = 0 - cnt2 = 0 - maj1 = 0 - maj2 = 0 - for num in nums: - if maj1 == num: - cnt1 += 1 - elif maj2 == num: - cnt2 += 1 - elif cnt1 == 0: - maj1 = num - cnt1 += 1 - elif cnt2 == 0: - maj2 = num - cnt2 += 1 - else: - cnt1 -= 1 - cnt2 -= 1 - - cnt1 = 0 - cnt2 = 0 - - n = len(nums) - res = [] - for num in nums: - if maj1 == num: - cnt1 += 1 - elif maj2 == num: - cnt2 += 1 - if cnt1 > n/3: - res.append(maj1) - if cnt2 > n/3: - res.append(maj2) - return res -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/230._kth_smallest_element_in_a_bst \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/230._kth_smallest_element_in_a_bst \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b51fc7a07..000000000 --- "a/docs/Leetcode_Solutions/Java/230._kth_smallest_element_in_a_bst \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,48 +0,0 @@ -### 230. Kth Smallest Element in a BST - -题目: - - - -难度: -Medium - - -跟昨天做的一道题类似,一上来就走取巧之路。 - -InOrder排序,输出,当然也完全可以用昨天的binary tree iterator,入stack,出stack,直到输出第k位 - - -```python -class Solution(object): - def kthSmallest(self, root, k): - """ - :type root: TreeNode - :type k: int - :rtype: int - """ - self.root = root - self.lst = [] - self.inOrder(root) - return self.lst[k-1] - - def inOrder(self, root): - if root == None: - return - self.inOrder(root.left) - self.lst.append(root.val) - self.inOrder(root.right) -``` - - -现在看到kth 就条件反射的想用divide & conquer, 扫root的左子树看nodes量,如果nodes数量是k-1,那么node就刚好是第k个,如果大于k > 左子树数量,扫右子树,同时更新root为root.right。 - -看到的言论: - -> If we can change the BST node structure, We can add a new Integer to mark the number of element in the left sub-tree. - -when the node is not null. - -- if k == node.leftNum + 1, return node -- if k > node.leftNum + 1, make k -= node.leftNum + 1, and then node = node.right -- otherwise, node = node.left diff --git "a/docs/Leetcode_Solutions/Java/231. _Power_of_Two \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/231. _Power_of_Two \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index c90024d2e..000000000 --- "a/docs/Leetcode_Solutions/Java/231. _Power_of_Two \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,89 +0,0 @@ -### 231. Power of Two - - - -题目: - - - -难度: - -Easy - - - -思路: - - - -power of two 那是这个数字的binary 表示一定只有一个1 - -套用以前的代码[leetcode191](https://github.com/Lisanaaa/thinking_in_lc/blob/master/191._number_of_1_bits.md) - -这样会超时 - -``` -class Solution(object): -    def isPowerOfTwo(self, n): # 此法超时 -        """ - :type n: int - :rtype: bool - """ - cnt = 0 - while n != 0: - n &= n - 1 - cnt += 1 - return cnt == 1 -``` - - - -跟power of three一样递归,可以AC - - - -```python -class Solution(object): - def isPowerOfTwo(self, n): - """ - :type n: int - :rtype: bool - """ - if n <= 0: - return False - if n == 1: - return True - if n % 2 == 0: - return self.isPowerOfTwo(n/2) - return False - -``` - - - - - - - -也是有[算法的wikipedia page](https://en.wikipedia.org/wiki/Power_of_two#Fast_algorithm_to_check_if_a_positive_number_is_a_power_of_two) - -> The [binary representation](https://en.wikipedia.org/wiki/Binary_numeral_system) of integers makes it possible to apply a very fast test to determine whether a given [positive integer](https://en.wikipedia.org/wiki/Positive_integer) *x* is a power of two: -> -> positive *x* is a power of two ⇔ (*x* & (*x* − 1)) is equal to zero. - - - -注意特殊case 0的处理 - -```python -class Solution(object): - def isPowerOfTwo(self, n): - """ - :type n: int - :rtype: bool - """ - return n & (n-1) == 0 if n != 0 else False -``` - - - diff --git "a/docs/Leetcode_Solutions/Java/232._implement_queue_using_stacks \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/232._implement_queue_using_stacks \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 53647fc0e..000000000 --- "a/docs/Leetcode_Solutions/Java/232._implement_queue_using_stacks \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,51 +0,0 @@ -###232. Implement Queue using Stacks - -题目: - - - -难度: -Easy - -这个题没有乖乖听话,不过因为当年做过用两个stack来模拟queue - -然后不得不说,我Python大法实在太厉害了 - -这功能强大的,我简直要啧啧啧 - -``` -class Queue(object): - def __init__(self): - """ - initialize your data structure here. - """ - self.lst = [] - - - def push(self, x): - """ - :type x: int - :rtype: nothing - """ - self.lst.append(x) - - - def pop(self): - """ - :rtype: nothing - """ - del self.lst[0] - - def peek(self): - """ - :rtype: int - """ - return self.lst[0] - - - def empty(self): - """ - :rtype: bool - """ - return self.lst == [] -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/234._palindrome_linked_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/234._palindrome_linked_list \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 0d92492b0..000000000 --- "a/docs/Leetcode_Solutions/Java/234._palindrome_linked_list \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,94 +0,0 @@ -### 234. Palindrome Linked List - -题目: - - - -难度: -Easy - -蠢了一下, - -思路是:“先翻转整个链表(in-place),然后和之前的链表比较”,但是这样原链表都变了,肯定错。 - -如果新建一个链表,然后改造成原来链表的翻转链表,还是可行的,但是空间复杂度就是O(n)了。那还不如直接把List中元素拷贝到数组中直接比较,ac代码如下: - - -```python -class Solution(object): - def isPalindrome(self, head): - """ - :type head: ListNode - :rtype: bool - """ - vals = [] - while head: - vals += head.val, - head = head.next - return vals == vals[::-1] -``` - -这道题并不能算Easy吧: - -思路二: -要想实现O(1)的空间复杂度,可以找到中间的节点,把linked list拆成两个部分,后半部分linkedlist reverse,然后比较两个linked list值是否相同,看例子: - - -``` -1 -> 3 -> 1 拆成 1 和 1 - -1 -> 3 -> 5 ->5 -> 3 -> 1 拆成 1-> 3 -> 5 和 5 -> 3 -> 1 - -``` - -可以使用快慢指针来找到中间的节点。 - - -```python -class Solution(object): - def isPalindrome(self, head): - """ - :type head: ListNode - :rtype: bool - """ - fast = slow = head - # 找到中间节点 - while fast and fast.next: - fast = fast.next.next - slow = slow.next - # 翻转后半部分 - prev = None - while slow: - tmp = slow.next - slow.next = prev - prev = slow - slow = tmp - # 比较前后两部分 - while prev: # while prev and head: - if prev.val != head.val: - return False - prev = prev.next - head = head.next - return True -``` - -给个最终状态的例子: -``` - - fast tmp - None prev slow - ^ ^ ^ - | | | -1 --> 2 --> 3 <-- 2 <-- 1 None - -``` -但是注意最后的while prev不能换成while fast, 因为这是总节点数为奇数的情况,如果是偶数情况就不一样了,如下: -``` -                         tmp -                          slow    - None prev fast - ^ ^ ^ - | | | -1 --> 2 --> 2 <-- 1 None - -``` diff --git "a/docs/Leetcode_Solutions/Java/235._lowest_common_ancestor_of_a_binary_search_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/235._lowest_common_ancestor_of_a_binary_search_tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 62c1e09a5..000000000 --- "a/docs/Leetcode_Solutions/Java/235._lowest_common_ancestor_of_a_binary_search_tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,33 +0,0 @@ -###235. Lowest Common Ancestor of a Binary Search Tree - -题目: - - - -难度 : Easy - -- 两个node,一个大于root,一个小于root,那么必定root两边,共同的ancestor是root,同时再考虑同为空的状况 -- 两个node,都比node小,到左边去寻找,那么先找到那个必定是common ancestor -- 两个node,都比node大,类似.... - - -AC解法 - -``` -class Solution(object): - def lowestCommonAncestor(self, root, p, q): - """ - :type root: TreeNode - :type p: TreeNode - :type q: TreeNode - :rtype: TreeNode - """ - if root == None or root == p or root == q: - return root - elif p.val < root.val < q.val or q.val < root.val < p.val : - return root - elif p.val < root.val and q.val < root.val: - return self.lowestCommonAncestor(root.left,p,q) - else: - return self.lowestCommonAncestor(root.right,p,q) -``` diff --git "a/docs/Leetcode_Solutions/Java/236._lowest_common_ancestor_of_a_binary_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/236._lowest_common_ancestor_of_a_binary_tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 271c462ad..000000000 --- "a/docs/Leetcode_Solutions/Java/236._lowest_common_ancestor_of_a_binary_tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,104 +0,0 @@ - -###236. Lowest Common Ancestor of a Binary Tree - - -题目: - - - -难度: - -Medium - - - -思路 - -求root到node的path,然后对比path,最后一个想同的点就是lowest common ancestor - - - -好开心,AC了 - - -但是我根本不能在Runtime Distribution 上找到我,因为太慢了|||| - - - - -``` - -class Solution(object): - def lowestCommonAncestor(self, root, p, q): - """ - :type root: TreeNode - :type p: TreeNode - :type q: TreeNode - :rtype: TreeNode - """ - pathP = self.pathTo(root,p) - pathQ = self.pathTo(root,q) - n = min(len(pathP), len(pathQ)) - - ans = root - for i in range(n): - if pathP[i] == pathQ[i]: - ans = pathP[i] - else: - break - return ans - - - def pathTo(self, root, goal): - # goal node ,path - if root == None: return root - stack = [(root, [root])] - while stack: - node, path = stack.pop() - if node == goal: - return path - if node.left: stack.append((node.left, path + [node.left])) - if node.right: stack.append((node.right, path + [node.right])) - -``` - -递归解法,之所以我没有用递归因为有疑惑, BASE CASE 很容易想到,root 是none,或者p == root 或者q == root,那么LCA就是root,如果两个node一个在左边,一个在右边,那么LCA也是root,但是如果一个是6,另一个是4则有一点疑惑,但其实是没有问题的,因为这个时候给的总是他们的共同root,所以这个递归解法是没错的,总是想到递归是在那个状况下递归 - - -``` - _______3______ - / \ - ___5__ ___1__ - / \ / \ - 6 _2 0 8 - / \ - 7 4 -``` - -AC代码 - - - -``` -class Solution(object): - def lowestCommonAncestor(self, root, p, q): - """ - :type root: TreeNode - :type p: TreeNode - :type q: TreeNode - :rtype: TreeNode - """ - if root == None: - return None - - if p == root or q == root: - return root - - left = self.lowestCommonAncestor(self.left,p,q) - right = self.lowestCommonAncestor(self.right,p,q) - - if left and right: - return root - - return left if left is None else right -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/237._delete_node_in_a_linked_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/237._delete_node_in_a_linked_list \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index d401e090d..000000000 --- "a/docs/Leetcode_Solutions/Java/237._delete_node_in_a_linked_list \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,52 +0,0 @@ -### 237. Delete Node in a Linked List - -题目: - - - -难度: -Easy - - - -这道题,第一感觉,像删链表一样来删,把所有的node val前移一个,但是有个问题,为什么tail那个node还是存在?哼(ˉ(∞)ˉ)唧.. - -已经被解答: - - - - - -另外一个O(1)的办法更好,把后一个node的val移到待删这个节点,并且把node.next = node.next.next - -题目说了不会删最后一个点,所以node.next.next一定存在,所以直接让node的val等于它next的val,然后让node的next指向它的next的next,举个例子: - 1->2->3->4->5->None,要删除第四个节点,就让4变成5,然后让第四个节点指向第五个节点的next, -这样原来的第四个节点就不存在了,虽然原来的第五个节点仍然存在且指向None,变成了1->2->3->5->None-<5 - - - -```python -O(1)时间 -class Solution(object): - def deleteNode(self, node): - """ - :type node: ListNode - :rtype: void Do not return anything, modify node in-place instead. - """ - node.val = node.next.val - node.next = node.next.next -``` -```python -O(n)时间 -class Solution(object): - def deleteNode(self, node): - """ - :type node: ListNode - :rtype: void Do not return anything, modify node in-place instead. - """ - while node.next: - node.val = node.next.val - prev, node = node, node.next - # clear reference to tail - prev.next = None -``` diff --git "a/docs/Leetcode_Solutions/Java/238._product_of_array_except_self \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/238._product_of_array_except_self \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 00a883f6b..000000000 --- "a/docs/Leetcode_Solutions/Java/238._product_of_array_except_self \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,100 +0,0 @@ -###238. Product of Array Except Self - -题目: - - - -难度: - -Medium - - -不使用division 并且O(n) - - -想到的算法 O(n^2) - -会超时 - - -``` -class Solution(object): - def productExceptSelf(self,nums): - """ - :type nums: List[int] - :rtype: List[int] - """ - lst = [] - for i in range(len(nums)): - lst.append(self.productWithoutI(nums,i)) - return lst - - - def productWithoutI(self,nums,i): - product = 1 - for j in range(len(nums)): - if j != i: - product *= nums[j] - return product -``` - -如果用除法,也会有问题,如果有0出现也会变繁琐。 - -谷歌一下: - - -解法还是很棒的 - - output[i] = { i 前面的数的乘积} X { i 后面的数的乘积} - - -``` -class Solution(object): - def productExceptSelf(self,nums): - """ - :type nums: List[int] - :rtype: List[int] - """ - if nums == [] : return [] - lft = [1] - rgt = [1] - product = 1 - for i in range(1,len(nums)): - product *= nums[i-1] - lft.append(product) - product = 1 - for i in reversed(range(1,len(nums))): - product *= nums[i] - rgt.append(product) - rgt.reverse() - result = [] - for i in range(len(nums)): - result.append(lft[i]*rgt[i]) - return result - -``` - - -空间O(n),再看到满足要求的“标准解法” - - -``` -class Solution(object): - def productExceptSelf(self,nums): - """ - :type nums: List[int] - :rtype: List[int] - """ - if nums == [] : return [] - size = len(nums) - output = [1] * size - left = 1 - for x in range(size-1): - left *= nums[x] - output[x+1] *= left - right = 1 - for x in range(size - 1, 0, -1): - right *= nums[x] - output[x-1] *= right - return output -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/240._search_a_2d_matrix_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/240._search_a_2d_matrix_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 545732ebc..000000000 --- "a/docs/Leetcode_Solutions/Java/240._search_a_2d_matrix_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,63 +0,0 @@ -### 240. Search a 2D Matrix II - - - -题目: - - - -难度: -Medium - -思路: - -每行,每列都是sorted - -但是比较好的策略是从右上角开始搜索,比如这样: - -``` -matrix = [ - [1, 4, 7, 11, 15], - [2, 5, 8, 12, 19], - [3, 6, 9, 16, 22], - [10, 13, 14, 17, 24], - [18, 21, 23, 26, 30] -] - -m, n = 0, col - 1 -更新策略: - matrix[m][n] < target: 那么这一行到从左走到此都会小于target,row+1 ,往下走 - matrix[m][n] > target: 那么这一列往下走都会大于target,col - 1,往左走 - 否则找到 -``` - -时间复杂度O(max(M,N)),因为每次都会往下或者往左走 - - -用的算法是Saddleback - - - -```python -class Solution(object): - def searchMatrix(self, matrix, target): - """ - :type matrix: List[List[int]] - :type target: int - :rtype: bool - """ - if not matrix: - return False - row = len(matrix) - col = len(matrix[0]) if row else 0 - m, n = 0, col - 1 - while m < row and n >= 0: - if matrix[m][n] < target: - m += 1 - elif matrix[m][n] > target: - n -= 1 - else: - return True - return False - -``` diff --git "a/docs/Leetcode_Solutions/Java/242._valid_anagram \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/242._valid_anagram \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 46d8cd269..000000000 --- "a/docs/Leetcode_Solutions/Java/242._valid_anagram \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,61 +0,0 @@ -### 242. Valid Anagram - -题目: - - - -难度 : Easy - - -一行瞬秒: - -```python -class Solution(object): - def isAnagram(self, s, t): - """ - :type s: str - :type t: str - :rtype: bool - """ - return collections.Counter(s) == collections.Counter(t) -``` - -```python -class Solution(object): - def isAnagram(self, s, t): - """ - :type s: str - :type t: str - :rtype: bool - """ - return sorted(s) == sorted(t) - -``` - - -用字数统计,因为只可能是26个字母 - - -``` - -class Solution(object): - def isAnagram(self, s, t): - """ - :type s: str - :type t: str - :rtype: bool - """ - if len(s) != len(t): - return False - - charCnt = [0] * 26 - - for i in range(len(s)): - charCnt[ord(s[i]) - 97] += 1 - charCnt[ord(t[i]) - 97] -= 1 - - for cnt in charCnt: - if cnt != 0: - return False - return True -``` diff --git "a/docs/Leetcode_Solutions/Java/252. Meeting Rooms \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/252. Meeting Rooms \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index c84dee953..000000000 --- "a/docs/Leetcode_Solutions/Java/252. Meeting Rooms \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,47 +0,0 @@ -### 252. Meeting Rooms - - - -题目: - - - - -难度 : Easy - - - -思路: - -学了一下如何根据attribute 来sort object `intervals.sort(key = lambda interval : interval.start)` - - - -AC 代码 - -``` -# Definition for an interval. -# class Interval(object): -# def __init__(self, s=0, e=0): -# self.start = s -# self.end = e - -class Solution(object): - def canAttendMeetings(self, intervals): - """ - :type intervals: List[Interval] - :rtype: bool - """ - n = len(intervals) - if n < 2 : return True - intervals.sort(key = lambda interval : interval.start) - for i in range(1,n): - if intervals[i].start < intervals[i-1].end: - return False - return True -``` - - - - - diff --git "a/docs/Leetcode_Solutions/Java/255._Verify_Preorder_Sequence_in_Binary_Search_Tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/255._Verify_Preorder_Sequence_in_Binary_Search_Tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index dfe1f7039..000000000 --- "a/docs/Leetcode_Solutions/Java/255._Verify_Preorder_Sequence_in_Binary_Search_Tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,72 +0,0 @@ -### 255. Verify Preorder Sequence in Binary Search Tree - -题目: - - - -难度: - -Medium - - -思路: - -这道题让给了我们一个一维数组,让我们验证其是否为一个二叉搜索树的先序遍历出的顺序,我们都知道二叉搜索树的性质是左<根<右,如果用中序遍历得到的结果就是有序数组,而先序遍历的结果就不是有序数组了,但是难道一点规律都没有了吗,其实规律还是有的,根据二叉搜索树的性质,当前节点的值一定大于其左子树中任何一个节点值,而且其右子树中的任何一个节点值都不能小于当前节点值,那么我们可以用这个性质来验证,举个例子,比如下面这棵二叉搜索树: -``` - 10 - / \ - 5 12 - / \ - 2 6 - - preorder:[10, 5, 2, 6, 12] -``` - -如这个例子,我们先设一个最小值min_num,然后遍历数组,如果当前值小于这个最小值min_num,返回false,对于根节点,我们将其压入栈中,然后往后遍历,如果遇到的数字比栈顶元素小,说明是其左子树的点,继续压入栈中,直到遇到的数字比栈顶元素大,那么就是右边的值了,我们需要找到是哪个节点的右子树,所以我们更新low值并删掉栈顶元素,然后继续和下一个栈顶元素比较,如果还是大于,则继续更新low值和删掉栈顶,直到栈为空或者当前栈顶元素大于当前值停止,压入当前值,这样如果遍历完整个数组之前都没有返回false的话,最后返回true即可 - - -参考[Ethan Li 的技术专栏](https://segmentfault.com/a/1190000003874375) - -O(n) time, O(n) space -```python -class Solution(object): - def verifyPreorder(self, preorder): - """ - :type preorder: List[int] - :rtype: bool - """ - stack = [] - min_num = -1 << 31 # 初始化最小值为最小整数 - for x in preorder: - if x < min_num: # 违反最小值限定则是无效的 - return False - while stack and x > stack[-1]: # 将路径中所有小于当前的数pop出来并更新最小值 - min_num = stack.pop() - stack.append(x) # 将当前值push进去 - return True -``` - -### Follow up: -O(n) time, O(1) space - -we realize that the preorder array can be reused as the stack thus achieve O(1) extra space, since the scanned items of preorder array is always more than or equal to the length of the stack. -```python -class Solution(object): - def verifyPreorder(self, preorder): - """ - :type preorder: List[int] - :rtype: bool - """ - # stack = preorder[:i], reuse preorder as stack - min_num = -1 << 31 - i = 0 - for x in preorder: - if x < min_num: - return False - while i > 0 and x > preorder[i - 1]: - min_num = preorder[i - 1] - i -= 1 - preorder[i] = x - i += 1 - return True -``` diff --git "a/docs/Leetcode_Solutions/Java/256. Paint House \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/256. Paint House \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 21576f90a..000000000 --- "a/docs/Leetcode_Solutions/Java/256. Paint House \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,57 +0,0 @@ -### 256. Paint House - -题目: - - -难度: -Medium - - - -其实这个题目有实际意义诶,至少我的故乡?在要申请啥东西的时候就把街上的房子全刷了。 - -然后这个是相邻的房子不同色。 - - - -其实我觉得paint fense更难一点 - - - -思路: - -数组 dp\[x][3] 代表第x个房子paint r/g/b的值 - - - -AC代码 - -``` -class Solution(object): - def minCost(self, costs): - """ - :type costs: List[List[int]] - :rtype: int - """ - m = len(costs) - if m == 0 : return 0 - elif m == 1 : return min(costs[0][0], costs[0][1],costs[0][2]) - else: - n = 3 if m else 0 - dp = [[0 for i in range(3)] for j in range(m)] - - dp[0] = costs[0] - - - for i in range(1,m): - dp[i][0] = min(dp[i-1][1],dp[i-1][2]) + costs[i][0] - dp[i][1] = min(dp[i-1][0],dp[i-1][2]) + costs[i][1] - dp[i][2] = min(dp[i-1][0],dp[i-1][1]) + costs[i][2] - return min(dp[m-1][0], dp[m-1][1], dp[m-1][2]) - -``` - - - - - diff --git "a/docs/Leetcode_Solutions/Java/257._binary_tree_paths \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/257._binary_tree_paths \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index c0fdea6ed..000000000 --- "a/docs/Leetcode_Solutions/Java/257._binary_tree_paths \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,45 +0,0 @@ -###257. Binary Tree Paths - -题目: - - - - -难度: - -Easy - - -Tag : tree, DFS - -类似的题目是Path Sum Ⅱ - - -第一眼看起来不像easy题目,然后堵了一下自己写的Path Sum Ⅱ自己的解答 - -同一种花样 - -``` -class Solution: - # @param {TreeNode} root - # @return {string[]} - def binaryTreePaths(self, root): - if root == None: return [] - result = [] - self.auxTreePaths(root,result,"") - return result - - - def auxTreePaths(self,root,result,curStr): - if root == None: - return - curStr += str(root.val) - if root.left == None and root.right == None: - result.append(curStr) - if root.left: - self.auxTreePaths(root.left,result,curStr + "->") - if root.right: - self.auxTreePaths(root.right,result,curStr + "->") - -``` - diff --git "a/docs/Leetcode_Solutions/Java/258_ Add_Digits \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/258_ Add_Digits \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 2fa72406a..000000000 --- "a/docs/Leetcode_Solutions/Java/258_ Add_Digits \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,34 +0,0 @@ -### 258. Add Digits - -题目: - - - -难度: - -Easy - - -思路 - -这就简单的一p了。。 - - -```python -class Solution(object): - def addDigits(self, num): - """ - :type num: int - :rtype: int - """ - while num / 10 >= 1: - tmp = 0 - while num / 10 >= 1: - tmp += num % 10 - num /= 10 - tmp += num % 10 - num = tmp - return num -``` - - diff --git "a/docs/Leetcode_Solutions/Java/261. Graph Valid Tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/261. Graph Valid Tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 1e309007a..000000000 --- "a/docs/Leetcode_Solutions/Java/261. Graph Valid Tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,69 +0,0 @@ -### 261. Graph Valid Tree - - - -题目: - - - - -难度 : Medium - - - -思路: - -graph 为 tree 两个条件: - -- 这个图是connected -- 没有cycle - - - -偷懒AC代码,直接在323题,Number of Connected Components in an Undirected Graph上改的AC代码: - - - -``` -class Solution(object): - def validTree(self, n, edges): - """ - :type n: int - :type edges: List[List[int]] - :rtype: bool - """ - def find(x): - if uf[x] != x: - uf[x] = find(uf[x]) - return uf[x] - - def union(x,y): - xRoot = find(x) - yRoot = find(y) - uf[xRoot] = yRoot - - uf = [i for i in range(n)] - - for node1, node2 in edges: - # cycle exists - if find(node1) == find(node2): - print 'ha ' - return False - else: - union(node1, node2) - - res = set() - for i in range(n): - res.add(find(i)) - - return len(res) == 1 -``` - - - - - - - - - diff --git "a/docs/Leetcode_Solutions/Java/263._ugly_number \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/263._ugly_number \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 730b0bdde..000000000 --- "a/docs/Leetcode_Solutions/Java/263._ugly_number \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,38 +0,0 @@ -###263. Ugly Number - - - -题目: - - - -难度: -Easy - - -思路: - -因为其prime factors 只包括 2, 3, 5,所以比如如果能被2 整除, n = n / 2, 直到不能被2整除,然后同样对3,5检验,如果最终结果为1,那么就是ugly number,否则不过关 - - -注意一下边界条件,当num为0的时候,return一下False - -``` -class Solution(object): - def isUgly(self, num): - """ - :type num: int - :rtype: bool - """ - if num == 0 : return False - while num % 2 == 0: - num = num / 2 - while num % 3 == 0: - num = num / 3 - while num % 5 == 0: - num = num / 5 - if num == 1: - return True - return False -``` - diff --git "a/docs/Leetcode_Solutions/Java/264._ugly_number_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/264._ugly_number_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index ba1546b9e..000000000 --- "a/docs/Leetcode_Solutions/Java/264._ugly_number_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,140 +0,0 @@ -###264. Ugly Number II - - - -题目: - - - -难度: -Medium - - -思路: - -暴力算法一定会超时 - - - - -先看一个非常🐂的帖子,当我知道python 除了有list之外还有collections就已经被刷新了一次了,然后数据结构 x 数据结构,就展示了数据结构的魅力 - - - - -看一下deque + rotate: - - -``` -import collections -a = collections.deque() -a.append(2) -a.append(5) -a.append(7) -a.append(9) #a deque([2, 5, 7, 9]) - -import bisect -idx = bisect.bisect_left(a,3) #1 -a.rotate(-idx) #deque([5, 7, 9, 2]) - -a.appendleft(3) #deque([3, 5, 7, 9, 2]) - -a.rotate(idx) # deque([2, 3, 5, 7, 9]) -``` - -这个rotate -是往左边rotate,看官网的介绍. - ->Rotate the deque n steps to the right. If n is negative, rotate to the left. Rotating one step to the right is equivalent to: d.appendleft(d.pop()). - -所以这样造成可以🐂的数据结构 - -用这个微调之后的fasttable来解决问题 - - -``` -import collections -import bisect - -class FastTable: - - def __init__(self): - self.__deque = collections.deque() - - def __len__(self): - return len(self.__deque) - - def head(self): - return self.__deque.popleft() - - def tail(self): - return self.__deque.pop() - - def peek(self): - return self.__deque[-1] - - def insert(self, obj): - if obj in self.__deque: - return - index = bisect.bisect_left(self.__deque, obj) - self.__deque.rotate(-index) - self.__deque.appendleft(obj) - self.__deque.rotate(index) - -class Solution(object): - - def nthUglyNumber(self, n): - """ - :type n: int - :rtype: int - """ - q = FastTable() - q.insert(1) - while n > 0: - x = q.head() - q.insert(2*x) - q.insert(3*x) - q.insert(5*x) - n -= 1 - return x -``` - - -还可以优化: -根据页面hint 来做的 - - -``` -class Solution(object): - def nthUglyNumber(self, n): - """ - :type n: int - :rtype: int - """ - if n == 1: - return 1 - else: - import collections - q2 = collections.deque() - q3 = collections.deque() - q5 = collections.deque() - q2.append(2) - q3.append(3) - q5.append(5) - while n > 1: - x = min(q2[0],q3[0],q5[0]) - if x == q2[0]: - x = q2.popleft() - q2.append(2*x) - q3.append(3*x) - q5.append(5*x) - elif x == q3[0]: - x = q3.popleft() - q3.append(3*x) - q5.append(5*x) - else: - x = q5.popleft() - q5.append(5*x) - n -= 1 - return x -``` - diff --git "a/docs/Leetcode_Solutions/Java/265. Paint House II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/265. Paint House II \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index c9dfbc20f..000000000 --- "a/docs/Leetcode_Solutions/Java/265. Paint House II \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,60 +0,0 @@ -### 265. Paint House II - - - -题目: - - -难度: - -Hard - - - -思路: - -感觉不像hard 题,知道为啥hard了,因为can you solve it in O(nk) runtime - -数组 dp\[x][k] 代表第x个房子paint 0..k的值 - - - -用paint house 1 改的AC代码: - -不过这个时间复杂度是O(nkk)吧 - - - -``` -class Solution(object): - def minCostII(self, costs): - """ - :type costs: List[List[int]] - :rtype: int - """ - n = len(costs) - if n == 0 : return 0 - elif n == 1 : return min (costs[0]) - else: - k = len(costs[0]) if n else 0 - dp = [[0 for i in range(k)] for j in range(n)] - - dp[0] = costs[0] - - for i in range(1,n): - for j in range(0,k): - minVal = float('inf') - for m in range(0,k): - if m != j and dp[i-1][m] < minVal: - minVal = dp[i-1][m] - dp[i][j] = minVal + costs[i][j] - - return min(dp[-1]) -``` - - - - - - - diff --git "a/docs/Leetcode_Solutions/Java/266. Palindrome Permutation \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/266. Palindrome Permutation \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 49f78bd04..000000000 --- "a/docs/Leetcode_Solutions/Java/266. Palindrome Permutation \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,46 +0,0 @@ -### 266. Palindrome Permutation - - - -题目: - - -难度 : Easy - - - -思路: - -hint 已经提示的很明显。数单字个数来处理 - - - -AC代码 - - - -``` -class Solution(object): - def canPermutePalindrome(self, s): - """ - :type s: str - :rtype: bool - """ - lookup = {} - - for char in s: - lookup[char] = lookup.get(char,0) + 1 - - res = 0 - - for char, cnt in lookup.items(): - if cnt % 2 == 0 : - continue - else: - res += 1 - - return res < 2 -``` - -​ - diff --git "a/docs/Leetcode_Solutions/Java/267. Palindrome Permutation II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/267. Palindrome Permutation II \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 5243954ee..000000000 --- "a/docs/Leetcode_Solutions/Java/267. Palindrome Permutation II \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,77 +0,0 @@ -### 267. Palindrome Permutation II - - - - - -题目: - - - - -难度 : Medium - - - -思路: - -首先这个题目有个简单版本,那就是判断是否可以permutate 为 palindrome. 问题的关键是最多只能一个odd character. - - - -写的这么不elegant,我也是服气! - -AC代码: - - - -``` -class Solution(object): - def generatePalindromes(self, s): - """ - :type s: str - :rtype: List[str] - """ - def permuteUnique(firstS): - if len(firstS) == 0 : return [] - if len(firstS) == 1 : return [firstS] - res = [] - for i in range(len(firstS)): - if i > 0 and firstS[i] == firstS[i-1]: continue - for j in permuteUnique(firstS[:i] + firstS[i+1:]): - res.append([firstS[i]] + j) - return res - - lookup = {} - for char in s: - lookup[char] = lookup.get(char, 0) + 1 - - res, firstS, oddChar = 0, [], '' - for char, cnt in lookup.items(): - if cnt % 2 == 0: - for i in range(cnt/2): - firstS.append(char) - continue - else: - for i in range(cnt / 2): - firstS.append(char) - oddChar = char - res += 1 - if res >= 2: - return [] - else: - res = permuteUnique(firstS) - if len(res) == 0 and oddChar: - return [oddChar] - return map(lambda x: ''.join(x) + oddChar + ''.join(x[::-1]),res) - -``` - - - - - - - - - diff --git "a/docs/Leetcode_Solutions/Java/268._missing_number \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/268._missing_number \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index fbd54da5a..000000000 --- "a/docs/Leetcode_Solutions/Java/268._missing_number \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,49 +0,0 @@ -### 268. Missing Number - -题目: - - - -难度: - -Medium - - - -等差数列前n项和减去数组之和,一行瞬秒 -```(注意题目input从0开始取值)``` - - -```python -class Solution(object): - def missingNumber(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - return len(nums) * (len(nums) + 1) / 2 - sum(nums) -``` - - - -第二种解法是位运算:位运算(异或运算) - - - -```python -class Solution(object): - def missingNumber(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - res = n = len(nums) - for i in range(n): - res ^= i - res ^= nums[i] - return res -``` - - - - diff --git "a/docs/Leetcode_Solutions/Java/270. Closest Binary Search Tree Value \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/270. Closest Binary Search Tree Value \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b2aafe48a..000000000 --- "a/docs/Leetcode_Solutions/Java/270. Closest Binary Search Tree Value \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,66 +0,0 @@ -### 270. Closest Binary Search Tree Val - -题目: - - - - - -难度 : Easy - -最简单的算法是inorder一遍,得到有序的lst,然后O(N) 寻找最靠近的,但是明显不是很高效。 - -AC代码 - -``` -class Solution(object): - def closestValue(self, root, target): - """ - :type root: TreeNode - :type target: float - :rtype: int - """ - lst = [] - - def inorder(root): - if root: - inorder(root.left) - lst.append(root.val) - inorder(root.right) - - inorder(root) - - close = lst[0] - diff = abs(target - lst[0]) - - for i in lst: - if abs(target - i) < diff: - close = i - diff = abs(target - i ) - - return close -``` - - - -AC代码,跟binary search tree 寻值一样, loop 一遍树来寻找 - - - -``` - -class Solution(object): - def closestValue(self, root, target): - """ - :type root: TreeNode - :type target: float - :rtype: int - """ - close = root.val - - while root: - close = root.val if abs(target - root.val) < abs(target - close) else close - root = root.right if root.val < target else root.left - return close -``` - diff --git "a/docs/Leetcode_Solutions/Java/276. Paint Fence \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/276. Paint Fence \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 3b7373ed9..000000000 --- "a/docs/Leetcode_Solutions/Java/276. Paint Fence \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,65 +0,0 @@ -### 276. Paint Fence - -题目: - - -难度: -Easy - -思路: - -先解释一下题目意思: fence 栅栏, post 柱子 , no more than two adjacent fence posts have the same color.(一开始看漏,没有看到more than,以为相邻就不能同色)。 - -本来想画格子找规律,结果走偏了,所以老老实实写递推关系式,貌似是这样的 - -- n = 0 : 全为0 -- n = 1 : 有 k种方式 -- n = 2 :有 k * k 种 -- 否则,第n个有两种可能, 跟 n-1 颜色不一样, 跟 n-1 颜色一样, fn = (k-1)fn-1 + (k-1) fn-2 - - - -画一下表:对一下递推关系式,正确✅ - - - -``` - n - 0 1 2 3 4 - 0 0 0 0 0 0 -t 1 0 1 1 0 0 - 2 0 2 4 6 10 - 3 0 3 9 24 . - 4 0 4 16 60 . -``` - - - -AC 代码 - -``` -class Solution(object): - def numWays(self, n, k): - """ - :type n: int - :type k: int - :rtype: int - """ - if n == 0: - return 0 - else: - if k == 0: return 0 - elif n == 1: return k - elif n == 2 : return k * k - else: - dp = [0 for i in range(n+1)] - dp[0] = 0 - dp[1] = k - dp[2] = k * k - - for i in range(3,n+1): - dp[i] = (k-1) * dp [i-1] + (k-1) * dp [i-2] - return dp[-1] - -``` - diff --git "a/docs/Leetcode_Solutions/Java/277. Find the Celebrity \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/277. Find the Celebrity \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e6bc0312a..000000000 --- "a/docs/Leetcode_Solutions/Java/277. Find the Celebrity \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,65 +0,0 @@ -### 277. Find the Celebrity - - - -题目: - - - - -难度 : Medium - - - -思路: - -算法考试考过 - -celebrity 是 每个人都知道他,而他不认识任何别的人。 - - - -如果用图来看,那就每个别的人都有箭头指向c,而c没有任何出去的箭头。 - -O(N^2)的代码还是还是很容易想到的 - -但是我们可以有提升,那么就是可以check `knows(a,b)`,如果 a knows b,那么可以排除a是celebrity,否则可以排除b是celebrity. - -最后还要确认一遍是否这个是真的celebrity - - - -AC代码 - -``` -# The knows API is already defined for you. -# @param a, person a -# @param b, person b -# @return a boolean, whether a knows b -# def knows(a, b): - -class Solution(object): - def findCelebrity(self, n): - """ - :type n: int - :rtype: int - """ - if n == 0: - return -1 - c = 0 - for i in xrange(1,n): - if not knows(i, c): - c = i - for i in range(n): - if c != i: - if not knows(i,c) or knows(c,i): - return -1 - return c - - -``` - - - - - diff --git "a/docs/Leetcode_Solutions/Java/278._First_Bad _Version \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/278._First_Bad _Version \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 7c6d94240..000000000 --- "a/docs/Leetcode_Solutions/Java/278._First_Bad _Version \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,40 +0,0 @@ -### 278. First Bad Version - - - - - -题目: - - - - -难度 : Easy - - - -思路: - -根据 search for a range 改的 - - - -```python -class Solution(object): - def firstBadVersion(self, n): - """ - :type n: int - :rtype: int - """ - l, r = 0, n - 1 - while l <= r: - mid = l + ((r - l) >> 2) - if not isBadVersion(mid): - l = mid + 1 - else: - r = mid - 1 - return l -``` - - - diff --git "a/docs/Leetcode_Solutions/Java/279._perfect_squares \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/279._perfect_squares \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index f4d8bd50f..000000000 --- "a/docs/Leetcode_Solutions/Java/279._perfect_squares \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,116 +0,0 @@ - -### 279. Perfect Squares - - -题目: - - - -难度: - -Medium - -### 思路一: -DP, 状态转移方程: - -```dp[i] = min(dp[i], dp[i - j * j] + 1)``` - - - - -```python -class Solution(object): - def numSquares(self, n): - """ - :type n: int - :rtype: int - """ - dp = [0] * (n+1) - for i in range(n+1): - dp[i] = i - j = 1 - while j * j <= i: - dp[i] = min(dp[i], dp[i-j*j] + 1) - j += 1 - return dp[-1] -``` -但是这个方法贼慢,beats 12%, 有时候提交甚至会超时,有时候又不会。。。。因此想别的办法 - -### 思路二: - -Static DP, beats 90.39% - -```python -class Solution(object): - dp = [0] - def numSquares(self, n): - """ - :type n: int - :rtype: int - """ - while len(self.dp) <= n: - m = len(self.dp) - inf = float('inf') - i = 1 - while i * i <= m: - inf = min(inf, self.dp[m-i*i] + 1) - i += 1 - self.dp.append(inf) - return self.dp[n] -``` - -进一步简化可以写成: -```python -class Solution(object): - dp = [0] - def numSquares(self, n): - """ - :type n: int - :rtype: int - """ - while len(self.dp) <= n: - self.dp += min(self.dp[-j*j] + 1 for j in range(1, int(len(self.dp)**0.5+1))), - return self.dp[n] -``` -这里有个问题现在还没搞明白,以后再好好想一下,写成```return self.dp[-1]```提交就失败, -``` -Submission Result: Wrong Answer -Input: 1024 -Output: 4 -Expected: 1 -``` - -### 思路三: - -还是慢,有个数学方法, runtime beats 98.48% -```python -import math -class Solution(object): - def numSquares(self, n): - """ - :type n: int - :rtype: int - """ - def isSquare(num): - tmp = int(math.sqrt(num)) - return tmp * tmp == num - while n & 3 == 0: # n % 4 == 0 - n >>= 2 - if n & 7 == 7: # n % 8 == 7 - return 4 - if isSquare(n): - return 1 - sqrt_n = int(math.sqrt(n)) - for i in range(1, sqrt_n + 1): - if isSquare(n-i*i): - return 2 - return 3 -``` -in order to understand, I suggest u read: - -here is the [Lagrange's Four Square theorem](https://en.wikipedia.org/wiki/Lagrange%27s_four-square_theorem -) - Limit the result to <= 4: - -And this [article](http://www.alpertron.com.ar/4SQUARES.HTM), in which you can also find the way to present a number as a sum of four squares: - - diff --git "a/docs/Leetcode_Solutions/Java/280._Wiggle_Sort \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/280._Wiggle_Sort \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 3188ca405..000000000 --- "a/docs/Leetcode_Solutions/Java/280._Wiggle_Sort \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,78 +0,0 @@ -### 280. Wiggle Sort - - - - - -题目: - - - - -难度 : Medium - - - -思路: - - - -想的是比如bubble sort或者任何简单的比较sort,只是放数字的时候是按这样的大小顺序放: - -1, n, 2, n-1,3, n-2…. - -或者每个pass其实做两个sort,找出最大的和最小的。然后分别放在头尾。 - - - -这样的写法TLE: - -``` -class Solution(object): -    def wiggleSort(self, nums): # 此法超时 -        """ - :type nums: List[int] - :rtype: void Do not return anything, modify nums in-place instead. - """ - n = len(nums) - for i in range(n): - # small bubble sort - if i % 2 == 0: - for j in range(n-1, i-1, -1): - if nums[j] > nums[j-1]: - nums[j], nums[j-1] = nums[j-1],nums[j] - else: - for j in range(n-1, i-1, -1): - if nums[j] < nums[j-1]: - nums[j], nums[j-1] = nums[j-1],nums[j] -``` - - - - - -但是貌似想复杂了,其实对于这个简单化,要求只有一个: - -1. 如果i是奇数,nums[i] >= nums[i - 1] -2. 如果i是偶数,nums[i] <= nums[i - 1] - -所以我们只要遍历一遍数组,把不符合的情况交换一下就行了。具体来说,如果nums[i] > nums[i - 1], 则交换以后肯定有nums[i] <= nums[i - 1]。 - - - -AC 代码 - -```python -class Solution(object): - def wiggleSort(self, nums): - """ - :type nums: List[int] - :rtype: void Do not return anything, modify nums in-place instead. - """ - for i in xrange(1, len(nums)): - if ((i % 2) and nums[i] < nums[i-1]) or ((not i % 2) and nums[i] > nums[i-1]): - nums[i], nums[i-1] = nums[i-1], nums[i] -``` - - - diff --git "a/docs/Leetcode_Solutions/Java/283._move_zeroes \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/283._move_zeroes \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a5e887c05..000000000 --- "a/docs/Leetcode_Solutions/Java/283._move_zeroes \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,128 +0,0 @@ -### 283. Move Zeroes - - -题目: - - - -难度: -Easy - - -思路: - -### 思路一:暴力 - -```python -class Solution(object): - def moveZeroes(self, nums): - """ - :type nums: List[int] - :rtype: void Do not return anything, modify nums in-place instead. - """ - i = 0 - while 0 in nums: - nums.remove(0) - i += 1 - nums.extend([0]*i) -``` - -### 思路二: - -一旦遇到不是0的就把它往前移动,移动非0完成,剩下的全部填0,看例子 - - - -``` -0 1 0 3 12 - -``` - -也算双指针吧, -首先cur = 0, idx = 0,为0,不变,然后idx = 1,不为0,前移,数组变成 - -``` -1 1 0 3 12 -``` - -继续idx 这个时候是2,不变,继续处理,碰到3可以变成 - -``` -1 3 0 3 12 -``` -这样知道变换完成,简直逆天啊,因为cur 总是小于idx,所以总可以保持这样的稳定性 - - -```python -class Solution(object): - def moveZeroes(self, nums): - """ - :type nums: List[int] - :rtype: void Do not return anything, modify nums in-place instead. - """ - cur,idx = 0,0 - while idx < len(nums): - # cur is not 0 - if nums[idx] != 0 : - nums[cur] = nums[idx] - cur += 1 - idx += 1 - - while cur < len(nums): - nums[cur] = 0 - cur += 1 - -``` - - -### 思路三: - -传统的双指针,参考这里 - - - -```此法最快,beats 90.50%``` - -```python -class Solution(object): - def moveZeroes(self, nums): - """ - :type nums: List[int] - :rtype: void Do not return anything, modify nums in-place instead. - """ -        p0, p1 = 0, 0 # P1指向非0,p0指向0 -        while p0 < len(nums) and p1 < len(nums): - if nums[p0] != 0: - p0 += 1 - p1 = p0 - continue - if nums[p1] == 0: - p1 += 1 - continue - nums[p0],nums[p1] = nums[p1],nums[p0] - p0 += 1 - p1 += 1 -``` - -相反,我觉得这样双指针反而没有上面的代码容易理解 - -### 思路四: - -一个比较巧妙的方法: -```python -class Solution(object): - def moveZeroes(self, nums): - """ - :type nums: List[int] - :rtype: void Do not return anything, modify nums in-place instead. - """ - nums.sort(key= lambda x: 1 if x == 0 else 0) -``` -原理就是原先为0的数优先级在此次sort中更高了,所以全部升序排列排到后面去了 - -但是这个解法被人说是没有满足题目```no extra space```的条件,详见[Sayo](https://leetcode.com/problems/move-zeroes/discuss/72074/) -``` -timsort can require a temp array containing as many as N//2 pointers, which means as many as 2*N extra bytes on 32-bit boxes. -``` - - diff --git "a/docs/Leetcode_Solutions/Java/285._inorder_successor_in_bst \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/285._inorder_successor_in_bst \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a5a489be9..000000000 --- "a/docs/Leetcode_Solutions/Java/285._inorder_successor_in_bst \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,81 +0,0 @@ -###285. Inorder Successor in BST - - -题目: - - - -难度: -Medium - -思路: - - -BST的特性,对于一个node,它的所有左侧node都比它小,它的所有右侧node都比它大。最小的元素在最左边,最大的元素在最右边。 - -一个node x它的successor y 是满足y > x的最小值。两种情况,如果node x有right child,那么这个right child 中的最小值就是它的successor,否则就要往上走,如果走上去的parent使得这个node是其左边的孩子的话,那么successor我们也找到了。 - - -因为状况可能是这样的: - -``` - 3 - / - 1 - / \ - 0 2 -``` - -如果是寻找0的successor,那么我们往上一走,发现0的祖先是1,并且0是1的左孩子,找到,否则如果寻找2的successor,那么我们要往上走到3的部分,2是3的左subtree,这样才能解决问题。 - -伪码 - -``` -function Succ(x) - if Right(x) ̸= NIL then - return Min(Right(x)) - else - p ← Parent(x) - while p ̸= NIL and x = Right(p) do - x←p - p ← Parent(p) - return p -``` - -这里伪码有点不适用是因为我们并没有这个parent指针,当然我们还是有trick方式的,就是我们从root开始走,直到找到这个node p,同时我们记录一路上看到的比p.val大的值,这样最后一个就是它的successor.其中最低的那一个就是他的successor. - -AC代码如下: - - -``` -class Solution(object): - def inorderSuccessor(self, root, p): - """ - :type root: TreeNode - :type p: TreeNode - :rtype: TreeNode - """ - def minNode(root): - while root.left!= None: - root = root.left - return root - - - def searchP(p, root): - if root == None or root.val == p.val: - return None - else: - succ = None - while root != None and p.val != root.val: - if p.val < root.val: - succ = root - root = root.left - else: - root = root.right - return succ - - if p.right: - return minNode(p.right) - else: - return searchP(p, root) -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/286. Walls and Gates \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/286. Walls and Gates \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 8a23c2681..000000000 --- "a/docs/Leetcode_Solutions/Java/286. Walls and Gates \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,90 +0,0 @@ -### 286. Walls and Gates - - - -题目: -https://leetcode.com/problems/walls-and-gates/ - - - -难度 : Medium - - - -思路: - -乍一看feel like all pairs shortest path. - -naive的想法是针对所有为0的点做all pairs shortest path,然后最终得到的就是把INF替换保留最小的。时间复杂度是0的个数* BFS - - - -naive的想法AC - -``` -class Solution(object): - def wallsAndGates(self, rooms): - """ - :type rooms: List[List[int]] - :rtype: void Do not return anything, modify rooms in-place instead. - """ - def legal(x,y): - return x >= 0 and x < row and y >= 0 and y < col and rooms[x][y] != -1 - - def bfs(rooms, i, j): - queue = [] - queue.append((i,j)) - - while queue: - (x,y) = queue.pop() - - if legal(x-1,y) and rooms[x-1][y] > rooms[x][y] + 1: - rooms[x-1][y] = rooms[x][y] + 1 - queue.append((x-1,y)) - if legal(x+1,y) and rooms[x+1][y] > rooms[x][y] + 1 : - rooms[x+1][y] = rooms[x][y] + 1 - queue.append((x+1,y)) - if legal(x,y-1) and rooms[x][y-1] > rooms[x][y] + 1: - rooms[x][y-1] = rooms[x][y] + 1 - queue.append((x,y-1)) - if legal(x,y+1) and rooms[x][y+1] > rooms[x][y] + 1 : - rooms[x][y+1] = rooms[x][y] + 1 - queue.append((x,y+1)) - - - row = len(rooms) - col = len(rooms[0]) if row else 0 - - for i in range(row): - for j in range(col): - if rooms[i][j] == 0: - bfs(rooms,i,j) -``` - - - -复习一下BFS的伪码 - -from wikipedia, 一开始有点小迷茫,那就是为什么没有keep一个visited的数据结构,但是随即反应过来,其实`n.distance == INFINITY` 已经是check它是否被visited 过了,我以上的代码并没有做这个操作,但是因为是格子状以及我仅在检查是否更小,所以也能AC. - -``` -Breadth-First-Search(Graph, root): - - for each node n in Graph: - n.distance = INFINITY - n.parent = NIL - - create empty queue Q - - root.distance = 0 - Q.enqueue(root) - - while Q is not empty: - current = Q.dequeue() - for each node n that is adjacent to current: - if n.distance == INFINITY: - n.distance = current.distance + 1 - n.parent = current - Q.enqueue(n) -``` - diff --git "a/docs/Leetcode_Solutions/Java/289._game_of_life \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/289._game_of_life \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 097ffc3ed..000000000 --- "a/docs/Leetcode_Solutions/Java/289._game_of_life \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,111 +0,0 @@ -### 289. Game of Life - -题目: - - - -难度 : Medium - - -直接一上来就没有考虑solve it in-place,考虑的是便利,简直是born for 便利 - -首先我把board拓宽了,宽,高各增加了两排。 - -因为这样求neighbor方便,针对原来的borad,现在新的big 对于 1 -> n-1 的部分 - -全都有八个neighbor,用了一个2d array来记录nbrs,再根据当下的nbr来判断更新,因为不能一边在board上loop一边更新. - -AC的效率还ok: - -```python -class Solution(object): - def gameOfLife(self, board): - """ - :type board: List[List[int]] - :rtype: void Do not return anything, modify board in-place instead. - """ - def liveNeighbors(i,j): - return big[i-1][j-1] + big[i-1][j] + big[i-1][j+1] + big[i][j-1] + big[i][j+1] + big[i+1][j-1] + big[i+1][j] + big[i+1][j+1] - - if board == [[]] : return - row = len(board) - col = len(board[0]) - - nbrs = [[0 for j in range(col)] for i in range(row)] - big = [[ 0 for j in range(col+2) ] for i in range(row+2)] - for i in range(1,row+1): - for j in range(1,col+1): - big[i][j] = board[i-1][j-1] - - for i in range(1,row+1): - for j in range(1,col+1): - nbrs[i-1][j-1] = liveNeighbors(i,j) - - for i in range(row): - for j in range(col): - if board[i][j] == 1: - if nbrs[i][j] < 2: - board[i][j] = 0 - elif nbrs[i][j] == 2 or nbrs[i][j] == 3: - board[i][j] = 1 - else: - board[i][j] = 0 - else: - if nbrs[i][j] == 3: - board[i][j] = 1 - -``` - -谷歌了一下,大家都用到了temp 2d array嘛,哼(ˉ(∞)ˉ)唧。好吧,空间复杂度比我小。 - - - -很多的解法都是一样开了一个二维数组,即使没有像我一样扩展board.因为问题在于不能一边更新board 一边来做。 - -看了一下这边的思路: - - - - - - - -不开数组 - -我们可以使用状态机转换 o(╯□╰)o 感觉不知道在听什么 还是很迷茫的感觉, in-place AC代码 - -```python -class Solution(object): - def gameOfLife(self, board): - """ - :type board: List[List[int]] - :rtype: void Do not return anything, modify board in-place instead. - """ - row = len(board) - col = len(board[0]) if row else 0 - - dx = [-1,-1,-1,0,1,1,1,0] - dy = [-1,0,1,1,1,0,-1,-1] - - for i in range(row): - for j in range(col): - cnt = 0 - for k in range(8): - x, y = i + dx[k], j + dy[k] - if x >=0 and x < row and y >=0 and y < col and (board[x][y] == 1 or board[x][y] == 2): - cnt += 1 - - if board[i][j] and (cnt < 2 or cnt > 3): - board[i][j] = 2 - elif board[i][j] == 0 and cnt == 3: - board[i][j] = 3 - - for i in range(row): - for j in range(col): - board[i][j] %= 2 - - -``` - - - diff --git "a/docs/Leetcode_Solutions/Java/290._word_pattern \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/290._word_pattern \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e6122ec87..000000000 --- "a/docs/Leetcode_Solutions/Java/290._word_pattern \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,42 +0,0 @@ -###290. Word Pattern - -题目: - - - -难度 : Easy - -4.pattern = "abba", str = "dog dog dog dog" should return false. - -因为这个的限制,所以中间加了一个loop用来查询是否这个a对应的已经出现过了。 - -不过其实也可以用两个dictionary来处理,可以O(n^3) -> O(n^2) - - -``` -class Solution(object): - def wordPattern(self, pattern, str): - """ - :type pattern: str - :type str: str - :rtype: bool - """ - strList = str.split(' ') - if len(pattern) != len(strList): - return False - lookup = {} - for i in range(len(strList)): - if pattern[i] not in lookup: - for key in lookup: - if lookup[key] == strList[i]: - return False - lookup[pattern[i]] = strList[i] - elif lookup[pattern[i]] != strList[i]: - return False - - return True - -``` - - -另外看到一段非常简短代码,使用了map函数,有待学习 diff --git "a/docs/Leetcode_Solutions/Java/292._nim_game \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/292._nim_game \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 9f78914f5..000000000 --- "a/docs/Leetcode_Solutions/Java/292._nim_game \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,55 +0,0 @@ -### 292. Nim Game - -题目: - - - - -难度: - -Easy - - -对于总是优先开始的那方 - - -- 有一到三块,总是赢 -- 有四块,总是输 -- 有五块,总是赢 - -所以如果自己想赢,总是要迫使对方拿之后,给自己遗留5块,或者三块以及以下。 - -- 如果是六块: - - 拿一块,对方五块,对方赢 - - 拿两块,对方余下四块,我方赢 - - 拿三块,余三块,对方赢 - -- 七块: - - 拿三块,余四块,迫使对方输,总是赢 - -本打算用递归来看,因为对方也可以重复使用这个函数,但是会超时,所以就看了一下hint - - -- n <= 3 能赢 √ -- n == 4 总输 -- n = 5,6,7 总赢 -- n == 8, 先手如何选,总可以转成5,6,7 对方总会赢 - - -所以 n % 4 == 0 时候,先手必输 - -简直是啊,有些游戏就是这样来必赢的啊,没想到你是这样的题目 - - - -``` -class Solution(object): - def canWinNim(self, n): - """ - :type n: int - :rtype: bool - """ - return n % 4 != 0 -``` - - diff --git "a/docs/Leetcode_Solutions/Java/296. Best Meeting Point \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/296. Best Meeting Point \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 5f141f6a4..000000000 --- "a/docs/Leetcode_Solutions/Java/296. Best Meeting Point \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,67 +0,0 @@ -### 296. Best Meeting Point - -题目: - - - - -难度 : Hard - - - -思路: - -提示是先从一维开始,其实一开始是略迷茫的,因为如果两个点,那么只要在这两个之间,一定就是最小值,线段长度。 - -不过倘若点增加到三个,那么就是第三个点处。 - - - -然后发现了一个很棒的stackoverflow page - - - - - -因为一开始理解错误二维数组的输入,以为是给的locs这样的数组,所以直接这样写了,然后发现给的是格子,所以但是还是偷懒这样写了。 - - - -AC 代码 - -``` -class Solution(object): - def minTotalDistance(self, grid): - """ - :type grid: List[List[int]] - :rtype: int - """ - res = 0 - locs = [] - - m = len(grid) - n = len(grid[0]) if m else 0 - - for i in range(m): - for j in range(n): - if grid[i][j] == 1: - locs.append([i,j]) - - - locs.sort(key = lambda point: point[0]) - x = locs[len(locs)/2][0] - for point in locs: - res += abs(point[0] - x) - - locs.sort(key = lambda point: point[1]) - y = locs[len(locs)/2][1] - for point in locs: - res += abs(point[1] - y) - - return res -``` - - - - - diff --git "a/docs/Leetcode_Solutions/Java/298. Binary Tree Longest Consecutive Sequence \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/298. Binary Tree Longest Consecutive Sequence \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 4c6bc841b..000000000 --- "a/docs/Leetcode_Solutions/Java/298. Binary Tree Longest Consecutive Sequence \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,123 +0,0 @@ -### 298. Binary Tree Longest Consecutive Sequence - - - - - -题目: -https://leetcode.com/problems/binary-tree-longest-consecutive-sequence/ - - - -难度 : Medium - - - -思路: - - - -TLE代码,每个node求,然后求最大值 - -``` -# Definition for a binary tree node. -# class TreeNode(object): -# def __init__(self, x): -# self.val = x -# self.left = None -# self.right = None - -class Solution(object): - def longestConsecutive(self, root): - """ - :type root: TreeNode - :rtype: int - """ - def consecutive(root): - if root == None: - return 0 - else: - left, right = 0,0 - if root.left: - if root.left.val == root.val + 1: - left = 1 + consecutive(root.left) - if root.right: - if root.right.val == root.val + 1: - right = 1 + consecutive(root.right) - return max(left, right, 1) - - def dfs(root): - s = [] - s.append(root) - while s: - root = s.pop() - res.append(consecutive(root)) - if root.left: - s.append(root.left) - if root.right: - s.append(root.right) - if not root: - return 0 - - res = [] - dfs(root) - return max(res) - -``` - - - - - -其实第二次递归,也就是dfs其实是有点多余的?因为可以边走边保存最大值? - -因为可以 - -> - recursion,在参数中包含当前的连续seq长度 -> - 如果left, right child的value是连续的,那么就将长度+1传入下一个call - - - - - -AC代码 - -``` -# Definition for a binary tree node. -# class TreeNode(object): -# def __init__(self, x): -# self.val = x -# self.left = None -# self.right = None - -class Solution(object): - def longestConsecutive(self, root): - """ - :type root: TreeNode - :rtype: int - """ - def dfs(root, curLen): - self.result = max(curLen, self.result) - if root.left: - if root.left.val == root.val + 1: - dfs(root.left, curLen + 1) - else: - dfs(root.left, 1) - if root.right: - if root.right.val == root.val + 1: - dfs(root.right, curLen + 1) - else: - dfs(root.right,1) - - if not root: return 0 - - self.result = 0 - dfs(root, 1) - return self.result - -``` - - - -这里值得注意的是这里的self.result其实相当于dfs的全局变量,也是利用了这个才做到边递归边记录边重置。 - diff --git "a/docs/Leetcode_Solutions/Java/299._bulls_and_cows \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/299._bulls_and_cows \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 8b6cbe468..000000000 --- "a/docs/Leetcode_Solutions/Java/299._bulls_and_cows \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,119 +0,0 @@ -###299. Bulls and Cows - -题目: - - - - -难度: - -Easy - - -我花了很久时间来AC,因为想了边界条件 - - -``` -class Solution(object): - def getHint(self, secret, guess): - """ - :type secret: str - :type guess: str - :rtype: str - """ - maps = {} - for i in range(len(secret)): - if secret[i] not in maps: - maps[secret[i]] = [i] - else: - maps[secret[i]].append(i) - mapg = {} - for i in range(len(guess)): - if guess[i] not in mapg: - mapg[guess[i]] = [i] - else: - mapg[guess[i]].append(i) - - print maps, mapg - - a,b = 0,0 - for key in maps.keys(): - if key in mapg.keys(): - common = list(set(mapg[key]) & set(maps[key])) - #check for bull - a += len(common) - mapg[key] = [item for item in mapg[key] if item not in common] - maps[key] = [item for item in maps[key] if item not in common] - b += min(len(maps[key]), len(mapg[key])) - return str(a) + 'A' + str(b) + 'B' -``` - - - - - - - -两种解法都....... - -都这么短。。。。。 -我Python还是用的不行啊 - - -``` -class Solution(object): - def getHint(self, secret, guess): - """ - :type secret: str - :type guess: str - :rtype: str - """ - bull = sum(map(operator.eq, secret, guess)) - sa = collections.Counter(secret) - sb = collections.Counter(guess) - cow = sum((sa & sb).values()) - bull - return str(bull) + 'A' + str(cow) + 'B' -``` - - -bull = secret与guess下标与数值均相同的数字个数 - -cow = secret与guess中出现数字的公共部分 - bull - - - - -来分析一下这个解法 - -``` -def getHint(self, secret, guess): - bulls = sum(map(operator.eq, secret, guess)) - both = sum(min(secret.count(x), guess.count(x)) for x in '0123456789') - return '%dA%dB' % (bulls, both - bulls) -``` - -首先map的用法是,对于iterable中的每个元素应用function方法,将结果作为list返回 - -``` ->>> def add100(x): -... return x+100 -... ->>> hh = [11,22,33] ->>> map(add100,hh) -[111, 122, 133] -``` - - - - -用'1123','0111' 来测试: - - -``` -map(operator.eq, secret, guess) -[False, True, False, False] -``` -就是将equal函数并行应用在两个string上,然后后面的解法也是粗暴简约和厉害 - - -参考 diff --git "a/docs/Leetcode_Solutions/Java/300._longest_increasing_subsequence \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/300._longest_increasing_subsequence \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index bd1752b9e..000000000 --- "a/docs/Leetcode_Solutions/Java/300._longest_increasing_subsequence \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,42 +0,0 @@ -###300. Longest Increasing Subsequence - -题目: - - - -难度: -Medium - - -思路: - -典型DP - -递推关系式: - -对于以num[i]结束的longest increasing subsequence的长度 - -dp[i] = dp[j] + 1 if num[i] > num[j] else 1 - -最后loop一圈,求出最长的 - -AC 代码 - -``` -class Solution(object): - def lengthOfLIS(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - if not nums: return 0 - n = len(nums) - dp = [1 for i in range(n)] - for i in range(1,n): - for j in range(i): - if nums[i] > nums[j] : - dp[i] = max(dp[i],dp[j] + 1) - - return max(dp) -``` - diff --git "a/docs/Leetcode_Solutions/Java/303._range_sum_query_-_immutable \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/303._range_sum_query_-_immutable \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 32c459aee..000000000 --- "a/docs/Leetcode_Solutions/Java/303._range_sum_query_-_immutable \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,47 +0,0 @@ -###303. Range Sum Query - Immutable - -题目: - - - -tag : DP -难度 : Easy - - - -``` -sum(i, j) = nums[i] j = i -sum(i,j) = sum[i,j-1] + nums[j] j > i - -``` - -Python代码 - -``` - -class NumArray(object): - def __init__(self, nums): - """ - initialize your data structure here. - :type nums: List[int] - """ - self.sums = nums - for i in range(1, len(self.sums)): - self.sums[i] = self.sums[i-1] + self.sums[i] - - - - - def sumRange(self, i, j): - """ - sum of elements nums[i..j], inclusive. - :type i: int - :type j: int - :rtype: int - """ - if i == 0 : - return self.sums[j] - else : - return self.sums[j] - self.sums[i-1] - -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/316._Remove_Duplicate_Letters \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/316._Remove_Duplicate_Letters \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index cce1a8b43..000000000 --- "a/docs/Leetcode_Solutions/Java/316._Remove_Duplicate_Letters \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,108 +0,0 @@ -### 316. Remove Duplicate Letters - -题目: - - - -难度: - -Hard - - -思路 - -这道题让我们移除重复字母,使得每个字符只能出现一次,而且结果要按最优的字母顺序排列,前提是不能打乱其原本的相对位置。 -- 先用remaining统计所有出现字母出现过的次数; -- res就是输出结果的字母顺序(list),最后用join连接起来作为返回值(str); -- 在stack(set)中的元素意味着其已经出现在最终结果中; - -对s中每个字母c,首先看它在stack中有没有出现过: -1. 如果没有那么只要res最后一个字母的ASCII值大于c,且其剩余次数大于0,就将其在res和stack中删去,不停做此操作 -2. 如果有了那么说明已经出现在最终结果中,只需要将其统计次数减去1以防后面挪动位置要做判断 - -做完这些后必须要把c加入到stack和res中去,代表c已经加入到最终结果中的目前应该处于的位置 - -参考[python的colloections之defaultdict模块](https://docs.python.org/2/library/collections.html) - -```python -class Solution(object): - def removeDuplicateLetters(self, s): - """ - :type s: str - :rtype: str - """ - remaining = collections.defaultdict(int) - for c in s: - remaining[c] += 1 - res, stack = [], set() - for c in s: - if c not in stack: - while res and res[-1] > c and remaining[res[-1]] > 0: - stack.remove(res.pop()) - res.append(c) - stack.add(c) - remaining[c] -= 1 - return ''.join(res) -``` -还有别的一些优美的解法,参考[stefan的回答](https://leetcode.com/problems/remove-duplicate-letters/discuss/76787) - - - -```python -递归贪心版本 -class Solution(object): - def removeDuplicateLetters(self, s): - """ - :type s: str - :rtype: str - """ - for c in sorted(set(s)): - suffix = s[s.index(c):] - if set(suffix) == set(s): - return c + self.removeDuplicateLetters(suffix.replace(c, '')) - return '' -``` -```python -class Solution(object): - def removeDuplicateLetters(self, s): - """ - :type s: str - :rtype: str - """ - result = '' - while s: - i = min(map(s.rindex, set(s))) - c = min(s[:i+1]) - result += c - s = s[s.index(c):].replace(c, '') - return result -``` - -```python -class Solution(object): - def removeDuplicateLetters(self, s): - """ - :type s: str - :rtype: str - """ - rindex = {c: i for i, c in enumerate(s)} - result = '' - for i, c in enumerate(s): - if c not in result: - while c < result[-1:] and i < rindex[result[-1]]: - result = result[:-1] - result += c - return result -``` - - - - - - - - - - - - diff --git "a/docs/Leetcode_Solutions/Java/319._Bulb_Switcher \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/319._Bulb_Switcher \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 840cce518..000000000 --- "a/docs/Leetcode_Solutions/Java/319._Bulb_Switcher \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,69 +0,0 @@ -### 319. Bulb Switcher - -题目: - - - -难度: - -Medium - - -思路 - -bulb代表第一轮结束后的所有灯亮灭的情况,从第二轮开始 -- 如果是最后一轮,则bulb的最后一个灯要switch -- 对于其他轮,相应的第i-1+C(i)个灯要siwitch,且C为常数,i-1+C(i)必须<=n-1 - -但是发现这样提交会超时 -Last executed input: -999999 - - -``` -class Solution(object): - def bulbSwitch(self, n): - """ - :type n: int - :rtype: int - """ - bulb = [1] * n - for i in range(2,n+1): - for x in range(i-1, n, i): - bulb[x] = 1 if bulb[x] == 0 else 0 - return bulb.count(1) -``` - -原来,这是一道智商碾压题: - -> A bulb ends up on iff it is switched an odd number of times. -Bulb i is switched in round d iff d divides i. -So bulb i ends up on iff it has an odd number of >divisors. -Divisors come in pairs, like i=12 has divisors 1 and 12, 2 and 6, and 3 and 4. -Except if i is a >square, like 36 has divisors 1 and 36, 2 and 18, 3 and 12, 4 and 9, -and double divisor 6. So bulb >i ends up on iff and only if i is a square. So just count the square numbers. - -大概解释一下,当一个灯泡被执行偶数次switch操作时它是灭着的,当被执行奇数次switch操作时它是亮着的,那么这题就是要找出哪些编号的灯泡会被执行奇数次操作。 - -现在假如我们执行第i次操作,即从编号i开始对编号每次+i进行switch操作,对于这些灯来说, -如果其编号j(j=1,2,3,⋯,n)能够整除i,则编号j的灯需要执行switch操作。 -具备这样性质的i是成对出现的,比如: -- 12 = 1 * 12, -- 12 = 2 * 6 -- 12 = 3 * 4 - -所以编号为12的灯,在第1次,第12次;第2次,第6次;第3次,第4次一定会被执行Switch操作,这样的话,编号为12的灯执行偶数次switch,肯定为灭。 -这样推出,完全平方数一定是亮着的,因为它有两个相同的因子,总因子数为奇数,如36 = 6 * 6,所以本题的关键在于找完全平方数的个数。 - -```python -class Solution(object): - def bulbSwitch(self, n): - """ - type n: int - rtype: int - """ - # The number of full squares. - return int(math.sqrt(n)) -``` - - diff --git "a/docs/Leetcode_Solutions/Java/322. Coin Change \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/322. Coin Change \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 1246fa161..000000000 --- "a/docs/Leetcode_Solutions/Java/322. Coin Change \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,52 +0,0 @@ -### 322. Coin Change - - - -题目: - - -难度: - -Medium - -DP入门 - -递推方程式: dp[i] = min(dp[i-vj]+1), vj 是硬币的面额 - -伪码: - -``` -Set Min[i] equal to Infinity for all of i -Min[0]=0 - -For i = 1 to S - For j = 0 to N - 1 - If (Vj<=i AND Min[i-Vj]+1 - - - -难度 : Medium - - - -思路: - - - -最容易想到的是针对每个节点做dfs?然后发现其已经被mark了就不管了,最后数dfs的次数? - -这样尝试,到n =2000 的时候 TLE - -``` -class Solution(object): - def countComponents(self, n, edges): - """ - :type n: int - :type edges: List[List[int]] - :rtype: int - """ - def dfs(node): - if visited[node] == 1: - return - else: - visited[node] = 1 - for node1, node2 in edges: - if node1 == node: - dfs(node2) - elif node2 == node: - dfs(node1) - - res = 0 - visited = [ 0 for i in range(n)] - for i in range(n): - if visited[i] == 0: - dfs(i) - res += 1 - return res -``` - - - -tag是union find,不用是否浪费? - -所谓的union find,应当不是每个做dfs,而是每个来看一下是否属于同一个set,一次dfs,然后loop 做union find - -[Disjoint-set_data_structure](https://en.wikipedia.org/wiki/Disjoint-set_data_structure) - - - -这里有一个很棒的[实现](http://python-algorithms.readthedocs.io/en/stable/_modules/python_algorithms/basic/union_find.html) - - - -AC代码 - -这里就偷懒了,利用岛是0-n,然后也只做了path compression,没更多的优化 - - - -``` -class Solution(object): - def countComponents(self, n, edges): - """ - :type n: int - :type edges: List[List[int]] - :rtype: int - """ - def find(x): - if uf[x] != x: - uf[x] = find(uf[x]) - return uf[x] - - def union(x,y): - xRoot = find(x) - yRoot = find(y) - uf[xRoot] = yRoot - - uf = [i for i in range(n)] - - for node1, node2 in edges: - union(node1, node2) - - res = set() - for i in range(n): - res.add(find(i)) - - return len(res) -``` - - - diff --git "a/docs/Leetcode_Solutions/Java/324._Wiggle_Sort_II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/324._Wiggle_Sort_II \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 5ebc2594b..000000000 --- "a/docs/Leetcode_Solutions/Java/324._Wiggle_Sort_II \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,42 +0,0 @@ -### 324. Wiggle Sort II - - - -题目: - - - -难度: -Medium - -思路: - -首先这道题和[Wiggle Sort](https://github.com/Lisanaaa/thinking_in_lc/blob/master/280._Wiggle_Sort.md)要求不一样,不能有等于, -所以如果碰到一串```‘1,1,1,1,1,1’```,当调换顺序时候还是不会满足。 - -因此我们用新方法,首先将原数组排序,然后大的那一半数字降序插在奇数```index```上,小的那一半数字降序插在偶数```index```上 - - -```python -class Solution(object): - def wiggleSort(self, nums): - """ - :type nums: List[int] - :rtype: void Do not return anything, modify nums in-place instead. - """ - nums.sort() - half = len(nums[::2]) - nums[::2], nums[1::2] = nums[:half][::-1], nums[half:][::-1] -``` - - -### Follow up -O(n) time, O(1) space - -思路: -首先想到的是将我们上面的排序方法用堆排序实现即可,建堆O(n),调整堆O(lgN) - - -```python - -``` diff --git "a/docs/Leetcode_Solutions/Java/326._power_of_three \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/326._power_of_three \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 9cd035d9c..000000000 --- "a/docs/Leetcode_Solutions/Java/326._power_of_three \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,48 +0,0 @@ -### 326. Power of Three - -题目: - - - - - -难度 : Easy - - -直接就上的递归 - -```python -class Solution(object): - def isPowerOfThree(self,n): - """ - :type n: int - :rtype: bool - """ - if n <= 0: - return False - if n == 1: - return True - if n % 3 == 0: - return self.isPowerOfThree(n/3) - return False - -``` - -有一个follow up,可否不用 loop/recusion - -看到了取巧的办法,因为是Given an integer,是有范围的(<2147483648),存在能输入的最大的3的幂次,即 3^19=1162261467。 - -只用检查是否能被这个数整除 - - -```python -class Solution(object): - def isPowerOfThree(self, n): - """ - :type n: int - :rtype: bool - """ - return n > 0 and pow(3, 19) % n == 0 - -``` - diff --git "a/docs/Leetcode_Solutions/Java/328._odd_even_linked_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/328._odd_even_linked_list \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b628ab241..000000000 --- "a/docs/Leetcode_Solutions/Java/328._odd_even_linked_list \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,112 +0,0 @@ -###328. Odd Even Linked List - -题目: - - - -难度: - -Medium - - -想法:因为相对顺序保持不变,所以可以拆list,然后再组合在一起?这样是满足题目要求的,因为linked list不像array,我们操作的时候只是用指向,没有分配新的空间。 - -``` - -class Solution(object): - def oddEvenList(self, head): - """ - :type head: ListNode - :rtype: ListNode - """ - if head == None or head.next == None or head.next.next == None: - return head - - oddDummy = ListNode(-1) - oddDummy.next = head - - evenDummy = ListNode(-1) - evenDummy.next = head.next - - oddCur = oddDummy.next - evenCur = evenDummy.next - - cur = head.next.next - while cur: - oddCur.next = cur - oddCur = oddCur.next - evenCur.next = cur.next - evenCur = evenCur.next - if cur.next: - cur = cur.next.next - else: - cur = cur.next - oddCur.next = evenDummy.next - # print oddDummy.next.val - return oddDummy.next - -``` - - - - -看别人的优雅代码 - -``` -class Solution(object): - def oddEvenList(self, head): - """ - :type head: ListNode - :rtype: ListNode - """ - if head == None: - return head - - # odd used to keep track of the tail of odd nodes - odd = oddHead = head - # record how many swaps happend - even = evenHead = head.next - while even and even.next: - odd.next = even.next - odd = odd.next - even.next = odd.next - even = even.next - odd.next = evenHead - return head -``` - -intuitive and concise - - -``` -1 → 2 → 3 → 4 → 5 → NULL - -一开始 - - 1 → 2 → 3 → 4 → 5 → NULL -odd even even.next - - -1 → 3 → 4 → 5 → NULL - odd ↑ - 2 - - - -1 → 3 → 4 → 5 → NULL - odd - 2 - even - - -再loop一次: - - | ----------- - | --------- ↓ ↓ -1 → 3 4 5 → NULL - odd ↑ - 2 - ↑ even - - -最后一步,再将两个odd的最后一个和evenHead连接起来,完工 -``` - - diff --git "a/docs/Leetcode_Solutions/Java/334._increasing_triplet_subsequence \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/334._increasing_triplet_subsequence \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e5e4c645a..000000000 --- "a/docs/Leetcode_Solutions/Java/334._increasing_triplet_subsequence \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,71 +0,0 @@ -###334. Increasing Triplet Subsequence - -题目: - - - -难度: -Medium - - -思路: - -用longest increasing subsequence来求,超时 - -``` -class Solution(object): - def increasingTriplet(self, nums): - """ - :type nums: List[int] - :rtype: bool - """ - if not nums: return False - n = len(nums) - dp = [1 for i in range(n)] - for i in range(1,n): - for j in range(i): - if nums[i] > nums[j] : - dp[i] = max(dp[i],dp[j] + 1) - if dp[i] >= 3: - return True - - return False -``` - -于是转而用Third Maximum Number的方法,维护一个当前最小和当前第二小,当碰到当前比较大,返回True,否则一圈走下来依旧不能满足,返回false. - -想一下,如果不是求三个增长,如果是求两个的话,那么一定想到的是保存当前最小值,那么一旦后方遇到一个比较大的,就这样处理掉了。 - -所以对于任何一个num来说,有三种可能: - -- 小于当前的最小值,那么更新当前最小值 -- 小于当前第二小值,更新当前第二小值 -- 如果以上两种都不是,那么是大于当前第二小值和最小值,于是这样就true - -所以是求四个增长也是类似的么 - -AC代码 - -``` -class Solution(object): - def increasingTriplet(self, nums): - """ - :type nums: List[int] - :rtype: bool - """ - # m - min, sm - second min - m, sm = float('inf'), float('inf') - - for num in nums: - print m, sm - if m >= num: - m = num - elif sm >= num: - sm = num - else: - return True - return False -``` - - - diff --git "a/docs/Leetcode_Solutions/Java/337._house_robber_iii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/337._house_robber_iii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a081ba016..000000000 --- "a/docs/Leetcode_Solutions/Java/337._house_robber_iii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,47 +0,0 @@ -###337. House Robber III - - -题目: - - - -难度: -Medium - -思路: - -参考 - - -这个解法好像有点厉害 - -从root开始抢起来,最大能抢到的两个可能: 抢root和不抢root - -- rob_root = max(rob_L + rob_R , no_rob_L + no_nob_R + root.val) -- no_rob_root = rob_L + rob_R - - -这个递归写起来就很厉害了 - - -``` -class Solution(object): - def rob(self, root): - """ - :type root: TreeNode - :rtype: int - """ - def dfs(root): - if not root: return 0, 0 - rob_L, no_rob_L = dfs(root.left) - rob_R, no_rob_R = dfs(root.right) - return max(no_rob_R + no_rob_L + root.val , rob_L + rob_R), rob_L + rob_R - - return dfs(root)[0] - -``` - -对于每个node,我们return的是从这个node能抢到的最大值,以及不抢它能获得的最大值,这个递归简直我服 - - - diff --git "a/docs/Leetcode_Solutions/Java/338. Counting Bits \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/338. Counting Bits \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e74a13253..000000000 --- "a/docs/Leetcode_Solutions/Java/338. Counting Bits \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,46 +0,0 @@ -### 338. Counting Bits - -题目: - - - -难度: -Medium - - - -**O(n\*sizeof(integer))** 算法,其实就是把count of 1 bit拿来用: - -``` -class Solution(object): - def countBits(self, num): - """ - :type num: int - :rtype: List[int] - """ - def hammingWeight(n): - cnt = 0 - while n != 0: - n &= n -1 - cnt += 1 - return cnt - - res = [] - for i in range(num+1): - res.append(hammingWeight(i)) - return res - -``` - - - -DP算法 - to be done - - - - - - - - - diff --git "a/docs/Leetcode_Solutions/Java/339. Nested List Weight Sum \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/339. Nested List Weight Sum \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a39800a58..000000000 --- "a/docs/Leetcode_Solutions/Java/339. Nested List Weight Sum \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,58 +0,0 @@ -### 339. Nested List Weight Sum - - - -题目: - - -难度: -Easy - -思路: - -一开始没认真读题,直接上手开写: - -``` -class Solution(object): - def depthSum(self, nestedList): - """ - :type nestedList: List[NestedInteger] - :rtype: int - """ - def dfs(nestedList): - for item in nestedList: - if item.isInteger(): - self.res += item.getInteger() - else: - dfs(item.getList()) - self.res = 0 - dfs(nestedList) - return self.res -``` - - - -然后注意到要weight by its depth. - - - -AC - -``` -class Solution(object): - def depthSum(self, nestedList): - """ - :type nestedList: List[NestedInteger] - :rtype: int - """ - def dfs(nestedList,depth): - for item in nestedList: - if item.isInteger(): - self.res += item.getInteger() * depth - else: - dfs(item.getList(), depth+1) - self.res = 0 - dfs(nestedList,1) - return self.res -``` - diff --git "a/docs/Leetcode_Solutions/Java/341._Flatten_Nested_List_Iterator \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/341._Flatten_Nested_List_Iterator \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 2acc186f5..000000000 --- "a/docs/Leetcode_Solutions/Java/341._Flatten_Nested_List_Iterator \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,47 +0,0 @@ -### 341. Flatten Nested List Iterator - - - -题目: - - - - -难度: -Medium - - - -```python -class NestedIterator(object): - - def __init__(self, nestedList): - """ - Initialize your data structure here. - :type nestedList: List[NestedInteger] - """ - def dfs(nestedList): - for item in nestedList: - if item.isInteger(): - self.stack.append(item.getInteger()) - else: - dfs(item.getList()) - self.stack = [] - dfs(nestedList) - - - def next(self): - """ - :rtype: int - """ - if self.hasNext(): - return self.stack.pop(0) - - - def hasNext(self): - """ - :rtype: bool - """ - return self.stack != [] -``` - diff --git "a/docs/Leetcode_Solutions/Java/342._Power_of_Four \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/342._Power_of_Four \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index c895a7c24..000000000 --- "a/docs/Leetcode_Solutions/Java/342._Power_of_Four \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,32 +0,0 @@ -### 342. Power of Four - - - -题目: - - - - -难度 : Easy - -继续照抄power of three - -```python -class Solution(object): - def isPowerOfFour(self, num): - """ - :type num: int - :rtype: bool - """ - if num <= 0 : - return False - if num == 1: - return True - if num % 4 == 0: - return self.isPowerOfFour(num/4) - return False - -``` - - - diff --git "a/docs/Leetcode_Solutions/Java/344._reverse_string \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/344._reverse_string \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 0e4c0f4fb..000000000 --- "a/docs/Leetcode_Solutions/Java/344._reverse_string \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,47 +0,0 @@ -### 344. Reverse String - - - -题目: - - - -难度: -Easy - -思路: - -不要脸的python AC code: - - -```python -class Solution(object): - def reverseString(self, s): - """ - :type s: str - :rtype: str - """ - return s[::-1] -``` - -因为python不支持item assignment - -所以如果非要用two pointer来做的话,那么会是这样 - -```python -class Solution(object): - def reverseString(self, s): - """ - :type s: str - :rtype: str - """ - lst = list(s) - n = len(lst) - start, end = 0, n - 1 - - while start < end: - lst[end], lst[start] = lst[start],lst[end] - start += 1 - end -= 1 - return ''.join(lst) -``` diff --git "a/docs/Leetcode_Solutions/Java/345._Reverse_Vowels_of_a_String \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/345._Reverse_Vowels_of_a_String \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 380c1b513..000000000 --- "a/docs/Leetcode_Solutions/Java/345._Reverse_Vowels_of_a_String \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,61 +0,0 @@ -### 345. Reverse Vowels of a String - - -题目: - - - -难度: - -Easy - - - -思路 - -字符串不可变,所以用list代替,最后join - - - -```python -class Solution(object): - def reverseVowels(self, s): - """ - :type s: str - :rtype: str - """ - vowels = 'aeiou' - string = list(s) - i, j = 0, len(s) -1 - while i <= j: - if string[i].lower() not in vowels: - i += 1 - elif string[j].lower() not in vowels: - j -= 1 - else: - string[i], string[j] = string[j], string[i] - i += 1 - j -= 1 - return ''.join(string) -``` - -正则版本 - -```python -class Solution(object): - def reverseVowels(self, s): - """ - :type s: str - :rtype: str - """ - vowels = re.findall('(?i)[aeiou]', s) - return re.sub('(?i)[aeiou]', lambda m: vowels.pop(), s) -``` - - - - - - - - diff --git "a/docs/Leetcode_Solutions/Java/349._intersection_of_two_arrays \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/349._intersection_of_two_arrays \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 2f79b8dd9..000000000 --- "a/docs/Leetcode_Solutions/Java/349._intersection_of_two_arrays \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,25 +0,0 @@ -### 349. Intersection of Two Arrays - -题目: - - - -难度: - -Easy - - - -Python一句话作弊 - -```python -class Solution(object): - def intersection(self, nums1, nums2): - """ - :type nums1: List[int] - :type nums2: List[int] - :rtype: List[int] - """ - return list(set(nums1).intersection(nums2)) -``` - diff --git "a/docs/Leetcode_Solutions/Java/350._intersection_of_two_arrays_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/350._intersection_of_two_arrays_ii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index d2a444772..000000000 --- "a/docs/Leetcode_Solutions/Java/350._intersection_of_two_arrays_ii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,65 +0,0 @@ -### 350. Intersection of Two Arrays II - -题目: - - - - -难度: - -Easy - - -sort之后用了双指针来走和看 - - -```python -class Solution(object): - def intersect(self, nums1, nums2): - """ - :type nums1: List[int] - :type nums2: List[int] - :rtype: List[int] - """ - nums1.sort() - nums2.sort() - - l1 = len(nums1) - l2 = len(nums2) - - p1 = 0 - p2 = 0 - - res = [] - - while p1 < l1 and p2 < l2: - if nums1[p1] < nums2[p2]: - p1 += 1 - elif nums1[p1] > nums2[p2]: - p2 += 1 - else: - res.append(nums1[p1]) - p1 += 1 - p2 += 1 - return res -``` - -两行版本 -```python -class Solution(object): - def intersect(self, nums1, nums2): - """ - :type nums1: List[int] - :type nums2: List[int] - :rtype: List[int] - """ - a, b = map(collections.Counter, (nums1, nums2)) - return list((a & b).elements()) -``` - - - - - - - diff --git "a/docs/Leetcode_Solutions/Java/353. Design Snake Game \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/353. Design Snake Game \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b9b95757c..000000000 --- "a/docs/Leetcode_Solutions/Java/353. Design Snake Game \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,89 +0,0 @@ -### 353. Design Snake Game - - - -题目: - - - -难度: Medium - -思路: - -纯正单纯方式 - -在TLE边缘AC - -AC代码 - - - -``` -class SnakeGame(object): - - def __init__(self, width,height,food): - """ - Initialize your data structure here. - @param width - screen width - @param height - screen height - @param food - A list of food positions - E.g food = [[1,1], [1,0]] means the first food is positioned at [1,1], the second is at [1,0]. - :type width: int - :type height: int - :type food: List[List[int]] - """ - self.width = width - self.height = height - self.food = food - self.snake = [[0,0]] - self.score = 0 - - - def move(self, direction): - """ - Moves the snake. - @param direction - 'U' = Up, 'L' = Left, 'R' = Right, 'D' = Down - @return The game's score after the move. Return -1 if game over. - Game over when snake crosses the screen boundary or bites its body. - :type direction: str - :rtype: int - """ - - nextx, nexty = self.snake[0] - - if direction == 'U': - nextx -= 1 - if direction == 'L': - nexty -=1 - if direction == 'R': - nexty +=1 - if direction == 'D': - nextx +=1 - - # nextx, nexty has food - if self.food and [nextx,nexty] == self.food[0]: - self.snake.insert(0,[nextx,nexty]) - self.food = self.food[1:] - self.score += 1 - # netx, nety outside boundary - else: - self.snake = self.snake[:-1] - self.snake.insert(0,[nextx,nexty]) - if nextx < 0 or nextx > self.height - 1 or nexty < 0 or nexty > self.width - 1: - return -1 - noDupes = [] - - for snakePt in self.snake: - # print snakePt, - if snakePt not in noDupes: - noDupes.append(snakePt) - # print 'snake', self.snake - # print 'noDpues', noDupes - if len(noDupes) < len(self.snake): - return -1 - return self.score - -``` - - - diff --git "a/docs/Leetcode_Solutions/Java/364. Nested List Weight Sum II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/364. Nested List Weight Sum II \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index d72cb1643..000000000 --- "a/docs/Leetcode_Solutions/Java/364. Nested List Weight Sum II \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,47 +0,0 @@ -### 364. Nested List Weight Sum II - - - -题目: - - -难度: -Medium - -思路: - - - -跟 Nested List Weight Sum I 的区别是这个是从不是数depth,是数层的高度: - - - -比较naive的AC代码: - -``` -class Solution(object): - def depthSumInverse(self, nestedList): - """ - :type nestedList: List[NestedInteger] - :rtype: int - """ - def level(nestedList,height): - self.level = max(height, self.level) - for item in nestedList: - if not item.isInteger(): - level(item.getList(), height + 1) - - def dfs(nestedList, height): - for item in nestedList: - if item.isInteger(): - self.res += item.getInteger() * height - else: - dfs(item.getList(),height - 1) - - self.level = 1 - self.res = 0 - level(nestedList,1) - dfs(nestedList, self.level) - return self.res -``` - diff --git "a/docs/Leetcode_Solutions/Java/366. Find Leaves of Binary Tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/366. Find Leaves of Binary Tree \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e82d592cc..000000000 --- "a/docs/Leetcode_Solutions/Java/366. Find Leaves of Binary Tree \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,52 +0,0 @@ -### 366. Find Leaves of Binary Tree - - - -题目: - - - - - -难度 :Medium - - - -按照它的要求,老老实实写了两个递归 findleaf 和 deleteleaf, 再组合起来 - - - -AC代码 - -```python -class Solution(object): - def findLeaves(self, root): - """ - :type root: TreeNode - :rtype: List[List[int]] - """ - def findLeaf(root): - if not root: - return [] - elif not root.left and not root.right: - return [root.val] - else: - return findLeaf(root.left) + findLeaf(root.right) - def removeLeaf(root): - if not root: - return None - elif not root.left and not root.right: - return None - else: - if root.left: - root.left = removeLeaf(root.left) - if root.right: - root.right = removeLeaf(root.right) - return root - res = [] - while root: - res.append(findLeaf(root)) - root = removeLeaf(root) - return res -``` - diff --git "a/docs/Leetcode_Solutions/Java/367._valid_perfect_square \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/367._valid_perfect_square \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 7bb7285d4..000000000 --- "a/docs/Leetcode_Solutions/Java/367._valid_perfect_square \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,42 +0,0 @@ -###367. Valid Perfect Square - -题目: - - - - -难度: - -Medium - - -直接用循环做也可以AC - - -``` -class Solution(object): - def isPerfectSquare(self, num): - """ - :type num: int - :rtype: bool - """ - if num == 1 or num == 4 : return True - for i in xrange(num//2): - if i*i == num: - return True - elif i*i > num: - return False - return False - -``` - -然后发现有传说中的牛顿法 - -有待阅读,然后还有二分法 - -``` - r = x - while r*r > x: - r = (r + x/r) / 2 - return r*r == x -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/369.Plus One Linked List \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/369.Plus One Linked List \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 92c64e78e..000000000 --- "a/docs/Leetcode_Solutions/Java/369.Plus One Linked List \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,46 +0,0 @@ -### 369.Plus One Linked List - -题目: - - -难度 : Medium - - - -类似题目: plus one,plus one 用递归和循环写了,对于linked list,因为most significant digit在首位,递归写起来不方便,用循环尝试,然后代码并没有实质上的区别。 - - - -``` -class Solution(object): - def plusOne(self, head): - """ - :type head: ListNode - :rtype: ListNode - """ - lst = [] - cur = head - - while cur: - lst.append(cur) - cur = cur.next - - carry = 1 - for i in range(len(lst)-1,-1,-1): - lst[i].val += carry - if lst[i].val < 10: - carry = 0 - break - else: - lst[i].val -= 10 - - if carry == 1: - node = ListNode(1) - node.next = head - return node - else: - return head -``` - - - diff --git "a/docs/Leetcode_Solutions/Java/371._sum_of_two_integers \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/371._sum_of_two_integers \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 675aa9724..000000000 --- "a/docs/Leetcode_Solutions/Java/371._sum_of_two_integers \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,95 +0,0 @@ -###371. Sum of Two Integers - -题目: - - - -难度: - -Easy - - -思路 - - -谷歌答案 - - -位运算 - -``` -XOR -x y output -0 0 0 -1 0 1 -0 1 1 -1 1 0 - - -AND -x y output -0 0 0 -1 0 1 -0 1 1 -1 1 1 - -``` - -如果对x和y来做加法(x和y都是一位的),那么末位会是x xor y,进位会是x and y - - - - - -python没有左移,用c++来看 - -``` -class Solution { -public: - int getSum(int a, int b) { - while (b != 0 ){ - int c = a & b; - a = a ^ b; - b = c << 1; - } - return a; - } -}; -``` - -实际上看到答案还是没有那么明白的,还是动手算算 - - - -``` -a = 6 (0110) -b = 15 (1111) - - -1st ---------- -carry = a & b = 0110 -a = a ^ b = 1001 -b = 1100 - - -2nd ---------- -carry = a & b = 1000 -a = a ^ b = 0101 -b = 10000 - - -3rd ----------- - -carry = a & b = 0 -a = a ^ b = 10101 -b = 0 - -这个时候a 的值是2^4 + 2^2 + 2^0 = 16+4+1 = 21 -``` - -虽然convence了我自己,但是表示依旧迷茫ing - -也知道位运算需要待补啊 \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/374._Guess_Number_Higher_or_Lower \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/374._Guess_Number_Higher_or_Lower \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index d7d3072f2..000000000 --- "a/docs/Leetcode_Solutions/Java/374._Guess_Number_Higher_or_Lower \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,34 +0,0 @@ -### 374. Guess Number Higher or Lower - -题目: - - - -难度: - -Easy - - -思路 - -二分 - -```python -class Solution(object): - def guessNumber(self, n): - """ - :type n: int - :rtype: int - """ - l, r = 1, n - while l <= r: - mid = l + ((r - l) >> 2) - if guess(mid) == 1: - l = mid + 1 - elif guess(mid) == -1: - r = mid - 1 - else: - return mid -``` - - diff --git "a/docs/Leetcode_Solutions/Java/377._combination_sum_iv \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/377._combination_sum_iv \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 88548d175..000000000 --- "a/docs/Leetcode_Solutions/Java/377._combination_sum_iv \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,77 +0,0 @@ -###377. Combination Sum IV - -题目: - - - - -难度: - -Medium - - -直接用combination sum的思路: 超时 - -``` -class Solution(object): - def combinationSum4(self, candidates, target): - """ - :type candidates: List[int] - :type target: int - :rtype: List[List[int]] - """ - def combSum(candidates, target, start, valueList): - length = len(candidates) - if target == 0 : - res.append(valueList) - for i in range(start, length): - if target < candidates[i]: - return - combSum(candidates, target - candidates[i], 0, valueList + [candidates[i]]) - - candidates = list(set(candidates)) - candidates.sort() - res = [] - combSum(candidates, target, 0, []) - return len(res) -``` - - - - - -说起来标签是dp,也知道是dp啊,状态转移方程: - - - -参考: - - - -> -> -> 我们需要一个一维数组dp,其中dp[i]表示目标数为i的解的个数,然后我们从1遍历到target,对于每一个数i,遍历nums数组,如果i>=x, dp[i] += dp[i - x]。这个也很好理解,比如说对于[1,2,3] 4,这个例子,当我们在计算dp[3]的时候,3可以拆分为1+x,而x即为dp[2],3也可以拆分为2+x,此时x为dp[1],3同样可以拆为3+x,此时x为dp[0],我们把所有的情况加起来就是组成3的所有情况了 - - - -AC代码 - -``` -class Solution(object): - def combinationSum4(self, candidates, target): - """ - :type candidates: List[int] - :type target: int - :rtype: List[List[int]] - """ - dp = [0 for i in range(target+1)] - - dp[0] = 1 - - for i in range(target+1): - for candidate in candidates: - if i >= candidate: - dp[i] += dp[i - candidate] - return dp[-1] -``` - diff --git "a/docs/Leetcode_Solutions/Java/378._kth_smallest_element_in_a_sorted_matrix \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/378._kth_smallest_element_in_a_sorted_matrix \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 34c267b41..000000000 --- "a/docs/Leetcode_Solutions/Java/378._kth_smallest_element_in_a_sorted_matrix \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,107 +0,0 @@ -### 378. Kth Smallest Element in a Sorted Matrix - - - -题目: - - - -难度: -Medium - - - -### 思路一:暴力法 - -```python -class Solution(object): - def kthSmallest(self, matrix, k): - """ - :type matrix: List[List[int]] - :type k: int - :rtype: int - """ - tmp = [] - for row in matrix: - for column in row: - tmp.append(column) - tmp.sort() - return tmp[k-1] if tmp and len(tmp)>0 else None -``` -### 思路二: -两个tag : binary search, heap - -######先来heap - -1. 利用heap,先对第一行所有元素加入heap,每个元素下面同一列的元素必然比他们大 -2. 重复K-1次下面的过程 - - 取现在的root - - 将root下面的元素加入heap - -可以手写一个例子来看 - -参考: - - -```python -class Solution(object): - def kthSmallest(self, matrix, k): - """ - :type matrix: List[List[int]] - :type k: int - :rtype: int - """ - if not matrix: - return 0 - - heap = [] - row = len(matrix) - col = len(matrix[0]) - - for i in range(col): - # heap store its value and location - heapq.heappush(heap, (matrix[0][i], 0, i)) - - print heap - - for j in range(k-1): - cur = heappop(heap) - x = cur[1] - y = cur[2] - if x+1 < row: - heapq.heappush(heap, (matrix[x+1][y],x+1,y)) - - return heap[0][0] -``` - -### 思路三: heapq一行 - -```python -class Solution(object): - def kthSmallest(self, matrix, k): - """ - :type matrix: List[List[int]] - :type k: int - :rtype: int - """ - return list(heapq.merge(*matrix))[k-1] -``` - -### 思路四; binary search -```python -class Solution(object): - def kthSmallest(self, matrix, k): - """ - :type matrix: List[List[int]] - :type k: int - :rtype: int - """ - l, r = matrix[0][0], matrix[-1][-1] - while l <= r: - mid = l + ((r - l) >> 2) - if sum(bisect.bisect_right(row, mid) for row in matrix) < k: - l = mid + 1 - else: - r = mid - 1 - return l -``` diff --git "a/docs/Leetcode_Solutions/Java/380. Insert Delete GetRandom O(1) \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/380. Insert Delete GetRandom O(1) \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 401f3ee7f..000000000 --- "a/docs/Leetcode_Solutions/Java/380. Insert Delete GetRandom O(1) \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,159 +0,0 @@ -### 380. Insert Delete GetRandom O(1) - - - -题目: - - - - -难度 : Hard - - - -我的naive TLE代码,关键还是在想这个getRandom,这就不是O(1)的: - - - -``` -class RandomizedSet(object): - - def __init__(self): - """ - Initialize your data structure here. - """ - self.container = {} - - - def insert(self, val): - """ - Inserts a value to the set. Returns true if the set did not already contain the specified element. - :type val: int - :rtype: bool - """ - # 1 stands for present - if val in self.container and self.container[val] == 1: - return False - else: - self.container[val] = 1 - return True - - - def remove(self, val): - """ - Removes a value from the set. Returns true if the set contained the specified element. - :type val: int - :rtype: bool - """ - if self.container.get(val,0) == 1: - self.container[val] = 0 - return True - else: - return False - - - - def getRandom(self): - """ - Get a random element from the set. - :rtype: int - """ - import random - keys = self.container.keys() - rd = random.randint(0, len(keys) - 1) - if self.container[keys[rd]] == 1: - return keys[rd] - elif self.container.get(keys[rd],0) == 0: - return self.getRandom() -``` - - - -也是有[stackoverflow问题界面的题目](http://stackoverflow.com/questions/5682218/data-structure-insert-remove-contains-get-random-element-all-at-o1#comment18171331_5684892): - -> Consider a data structure composed of a hashtable H and an array A. The hashtable keys are the elements in the data structure, and the values are their positions in the array. -> -> 1.insert(value): append the value to array and let i be its index in A. Set H[value]=i. -> -> 2.remove(value): We are going to replace the cell that contains value in A with the last element in A. let d be the last element in the array A at index m. let i be H[value], the index in the array of the value to be removed. Set A[i]=d, H[d]=i, decrease the size of the array by one, and remove value from H. -> -> 3.contains(value): return H.contains(value) -> -> 4.getRandomElement(): let r=random(current size of A). return A[r]. -> -> -> -> since the array needs to auto-increase in size, it's going to be amortize O(1) to add an element, but I guess that's OK. - - - - - -按照以答案AC代码 - -``` -class RandomizedSet(object): - - def __init__(self): - """ - Initialize your data structure here. - """ - self.hashtable = {} - self.array = [] - self.arraySize = 0 - - def insert(self, val): - """ - Inserts a value to the set. Returns true if the set did not already contain the specified element. - :type val: int - :rtype: bool - """ - # already in the set - if val in self.hashtable: - return False - else: - self.hashtable[val] = self.arraySize - self.array.append(val) - self.arraySize += 1 - return True - - - def remove(self, val): - """ - Removes a value from the set. Returns true if the set contained the specified element. - :type val: int - :rtype: bool - """ - if val not in self.hashtable: - return False - else: - removeIdx = self.hashtable[val] - if self.arraySize == 1: - self.__init__() - else: - self.array[removeIdx] = self.array[-1] - self.hashtable[self.array[-1]] = removeIdx - self.arraySize -= 1 - del self.hashtable[val] - del self.array[-1] - return True - - - - def getRandom(self): - """ - Get a random element from the set. - :rtype: int - """ - import random - rd = random.randint(0, self.arraySize-1) - return self.array[rd] -``` - - - - - -最后getRandom也可以写成: - -`return random.choice(self.array)` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/381. Insert Delete GetRandom O(1) - Duplicates allowed \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/381. Insert Delete GetRandom O(1) - Duplicates allowed \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 9adb6cd32..000000000 --- "a/docs/Leetcode_Solutions/Java/381. Insert Delete GetRandom O(1) - Duplicates allowed \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,83 +0,0 @@ -### 381. Insert Delete GetRandom O(1) - Duplicates allowed - - - -题目: - - - - -难度 : Hard - - - -一开始的想法是在380上面做简单的修改,比如用一个list来存每个数对应的location,但是这样remove会退化为O(N),然后看到: - -- 用 set 这个数据结构就可以贴近O(1) -- 学了一个新的东西`defaultdict`, 相当于 D.get('key',defaultvalue) - - - -这个defaultdict的好处就是添加的时候默认的值就是set,但是并不默认这个就存在 - - - -AC代码 - -``` -class RandomizedCollection(object): - - def __init__(self): - """ - Initialize your data structure here. - """ - import collections - self.hashtable = collections.defaultdict(set) - self.array = [] - - def insert(self, val): - """ - Inserts a value to the collection. Returns true if the collection did not already contain the specified element. - :type val: int - :rtype: bool - """ - valin = val not in self.hashtable - self.hashtable[val].add(len(self.array)) - self.array.append(val) - return valin - - def remove(self, val): - """ - Removes a value from the collection. Returns true if the collection contained the specified element. - :type val: int - :rtype: bool - """ - if val not in self.hashtable: - return False - else: - if self.array[-1] == val: - removeIdx = len(self.array) - 1 - self.hashtable[val].remove(removeIdx) - else: - # set pop remove arbitrary element - removeIdx = self.hashtable[val].pop() - self.array[removeIdx] = self.array[-1] - self.hashtable[self.array[-1]].remove(len(self.array) - 1) - self.hashtable[self.array[-1]].add(removeIdx) - if len(self.hashtable[val]) == 0: - del self.hashtable[val] - del self.array[-1] - return True - - - def getRandom(self): - """ - Get a random element from the collection. - :rtype: int - """ - import random - return random.choice(self.array) - -``` - -` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/382._linked_list_random_node \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/382._linked_list_random_node \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 775a0b32d..000000000 --- "a/docs/Leetcode_Solutions/Java/382._linked_list_random_node \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,79 +0,0 @@ - -###382. Linked List Random Node - - -题目: - - - -难度: - -Medium - - - -tag:reservoir sampling 水塘抽样 - - -思路: - -n选k - - -这样来看,有k个元素,那么这个时候全部选中,当第k+1个元素进来的时候,生成一个随机数r,如果 r <= k,那么用它来替换第r个元素 - -那么r被替换掉的概率是 1 / k + 1, 不被替换掉的概率是 k / k + 1 (不生成r) - -k+2来继续: 被替换掉的概率 1 / k + 2, 不被替换掉的概率 (k + 1) / (k+2) - -所以最终被选中的(不被替换掉的概率是) k / n - -随机 √ - - -针对这道题目来看 - -- 一开始选head为choice -- 出现第二个,生成[1,2]之间的随机数,如果r = 2,则用新的来替换choice -- 出现第三个,生成[1,2,3]之间的随机数,如果r = 3,则替换 - -再写简单一点就是 - - -每次以 1/i 来决定是否用新的元素来替换选中元素,那么就是 i - 1 / i 不替换,它之前被选中的概率就是 1 / i-1 ,所以最终被选中的概率是 1/i - -这个对于linked list更优之处在于它不用reverse - -时间复杂度 O(N), 空间复杂度O(K) - - -然后AC - - -``` -class Solution(object): - - def __init__(self, head): - """ - @param head The linked list's head. - Note that the head is guaranteed to be not null, so it contains at least one node. - :type head: ListNode - """ - self.head = head - - def getRandom(self): - """ - Returns a random node's value. - :rtype: int - """ - choice = self.head - cur = self.head - i = 1 - while cur.next: - cur = cur.next - i += 1 - rd = random.randint(1,i) - if rd == i: - choice = cur - return choice.val -``` diff --git "a/docs/Leetcode_Solutions/Java/383._ransom_note \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/383._ransom_note \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 6a6ee16e7..000000000 --- "a/docs/Leetcode_Solutions/Java/383._ransom_note \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,53 +0,0 @@ -### 383. Ransom Note - -题目: - - - -难度 : Easy - - - -略微想了一下,用了一个dictionary来存magazine里面的单字出现的个数,然后来对应check是否可以用来组成ransomNote - - -```python -class Solution(object): - def canConstruct(self, ransomNote, magazine): - """ - :type ransomNote: str - :type magazine: str - :rtype: bool - """ - maps = {} - for i in magazine: - if i in maps: - maps[i] += 1 - else: - maps[i] = 1 - for i in ransomNote: - if i not in maps: - return False - else: - maps[i] -= 1 - if maps[i] < 0: - return False - return True -``` -解法2: - -```python -class Solution(object): - def canConstruct(self, ransomNote, magazine): - """ - :type ransomNote: str - :type magazine: str - :rtype: bool - """ - magCounter = collections.Counter(magazine) - ranCounter = collections.Counter(ransomNote) - for k in ranCounter: - if ranCounter.get(k) > magCounter.get(k): - return False - return True -``` diff --git "a/docs/Leetcode_Solutions/Java/384. Shuffle an Array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/384. Shuffle an Array \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index bd3d126a9..000000000 --- "a/docs/Leetcode_Solutions/Java/384. Shuffle an Array \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,105 +0,0 @@ -### 384. Shuffle an Array - - - -题目: - - - - -难度 : Medium - - - -思路: - - - -这就是洗牌算法吧,洗牌算法几种常见的: - - - -http://www.matrix67.com/blog/archives/879 - - - -也是有wikipedia page的: - -最简单的算法是很容易想到的, O(N^2) - -然后就是modern 算法: - - - -``` --- To shuffle an array a of n elements (indices 0..n-1): -for i from n−1 downto 1 do - j ← random integer such that 0 ≤ j ≤ i - exchange a[j] and a[i] -``` - - - -这个感觉还是比较容易证明的,一开始生成的数字 1/n 概率 - -没选中,下一个 n-1 /n * 1/ n-1 = 1/n, 所以每个位置都是等概率的? - - - -这个有很妙的点: - -比如五个人顺序抽签,只要不uncover 结果,那么就是等概率的。 - - - -但是第一个人抽奖之后uncover结果,比如他没有抽中 → 那么概率就会变。 - - - - - - - -AC代码: - -``` -class Solution(object): - - def __init__(self, nums): - """ - - :type nums: List[int] - :type size: int - """ - self.lst = nums - - - def reset(self): - """ - Resets the array to its original configuration and return it. - :rtype: List[int] - """ - return self.lst - - - def shuffle(self): - """ - Returns a random shuffling of the array. - :rtype: List[int] - """ - import random - res = self.lst[:] - n = len(res) - for i in range(n-1,0,-1): - j = random.randint(0,i) - res[i], res[j] = res[j], res[i] - return res - -``` - - - - - - - diff --git "a/docs/Leetcode_Solutions/Java/387._first_unique_character_in_a_string \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/387._first_unique_character_in_a_string \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index dfbb89ae1..000000000 --- "a/docs/Leetcode_Solutions/Java/387._first_unique_character_in_a_string \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,58 +0,0 @@ -### 387. First Unique Character in a String - -题目: - - - -难度: -Easy - - - -思路一: - -Python作弊法 - -用Python的Counter模块 - -可以参考 - - - - -```python -class Solution(object): - def firstUniqChar(self, s): - """ - :type s: str - :rtype: int - """ - d = collections.Counter(s) - for x,c in enumerate(s): - if d[c] == 1: - return x - return -1 -``` - - -思路二: - -利用问题的特性,因为只有可能是小写字母,所以可以用一个长度为26的array, 先数一遍char的数量,然后enumerate从左往右又来 - -```python -class Solution(object): - def firstUniqChar(self, s): - """ - :type s: str - :rtype: int - """ - cnt = [0 for i in range(26)] - for char in s: - cnt[ord(char) - ord('a')] += 1 - - for idx, char in enumerate(s): - if cnt[ord(char) - ord('a')] == 1: - return idx - return -1 - -``` diff --git "a/docs/Leetcode_Solutions/Java/388._Longest_Absolute_File_Path \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/388._Longest_Absolute_File_Path \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 7d92da63a..000000000 --- "a/docs/Leetcode_Solutions/Java/388._Longest_Absolute_File_Path \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,93 +0,0 @@ -### 388. Longest Absolute File Path - - -题目: - - - -难度: - -Medium - - - -思路 - -我们首先观察到每个```文件夹```或者是```文件```前面都会有一个```'\n'```, 还有对应其层数个数的```'\t'```. -- 所以首先根据```'\n'```分行,然后算出该```文件/文件夹```的层数```depth``` -- 如果是```文件```,我们需要更新```maxlen``` -- 如果是```文件夹```,我们需要更新该```depth```下的```pathlen``` - -### 程序变量解释 - -- ```maxlen``` 代表目前最大子串的长度 -- ```pathlen``` 每一个```depth```下对应的```path```长度 - -#### 特别需要注意的是,```'\t'```的长度是1 -有的人仍然会有疑问,每次碰到文件夹都直接更新```pathlen```会不会导致本来长的反而变得短了,但是我们可以看到字符串的排版格式,每层```path```都是严格有自己的分级的, -因此不会出现这样的问题。 -例如: -- The string ```"dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext"``` represents: -``` -dir - subdir1 - file1.ext - subsubdir1 - subdir2 - subsubdir2 - file2.ext -``` -其最大长度是```32```, ```"dir/subdir2/subsubdir2/file2.ext"``` - -- 如果变成```"dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir20\n\t\tsubsubdir2\n\t\t\tfile2.ext"```, - -``` -dir - subdir1 - file1.ext - subsubdir1 - subdir20 - subsubdir2 - file2.ext -``` - -最大长度就是```33```, -```"dir/subdir2/subsubdir20/file2.ext"``` - - -- 如果变成 -```"dir\n\tsubdir1000000000000\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext"``` - -``` -dir - subdir10000000000000 - file1.ext - subsubdir1 - subdir20 - subsubdir2 - file2.ext -``` - -最大长度就是```34```,```"dir/subdir10000000000000/file1.ext"``` - - -```python -class Solution(object): - def lengthLongestPath(self, input): - """ - :type input: str - :rtype: int - """ - maxlen = 0 - pathlen = {0 : 0} - for line in input.splitlines(): - name = line.lstrip('\t') - depth = len(line) - len(name) # 前面有几个'\t', depth就是几 - if '.' in name: - maxlen = max(maxlen, pathlen[depth] + len(name)) - else: -                pathlen[depth+1] = pathlen[depth] + len(name) + 1   #加1是为了加上一个path分隔符'/'的长度 - return maxlen -``` - - diff --git "a/docs/Leetcode_Solutions/Java/389._find_the_difference \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/389._find_the_difference \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a26bc73ae..000000000 --- "a/docs/Leetcode_Solutions/Java/389._find_the_difference \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,47 +0,0 @@ - -###389. Find the Difference - - -题目: - - - -难度: - -Easy - - -思路 - -用两个hashmap分别来记录 s 和 t 中char的数量,一旦t[key] > s[key], output - -注意这个好的写法 - - -mapt[char] = mapt.get(char,0) + 1 - -如果mapt[char]不存在,会默认给1 - - - -``` -class Solution(object): - def findTheDifference(self, s, t): - """ - :type s: str - :type t: str - :rtype: str - """ - maps = {} - mapt = {} - for char in s: - maps[char] = maps.get(char,0) + 1 - for char in t: - mapt[char] = mapt.get(char,0) + 1 - - for key in mapt: - if mapt[key] - maps.get(key,0) > 0: - return key -``` - - diff --git "a/docs/Leetcode_Solutions/Java/392._is_subsequence \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/392._is_subsequence \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b7727173b..000000000 --- "a/docs/Leetcode_Solutions/Java/392._is_subsequence \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,69 +0,0 @@ - -###392. Is Subsequence - - -题目: - - - -难度: - -Medium - - -思路 - - -follow up question很有意思 - - -最naive的思路表现形式如下: - -超时 - -``` -class Solution(object): - def isSubsequence(self, s, t): - """ - :type s: str - :type t: str - :rtype: bool - """ - if s == "": return True - for i in xrange(len(t)): - if t[i] == s[0]: - return self.isSubsequence(s[1:],t[i+1:]) - - return False -``` - -因为直接操作string的昂贵以及递归的昂贵 - -同样的思路 - - -``` -class Solution(object): - def isSubsequence(self, s, t): - """ - :type s: str - :type t: str - :rtype: bool - """ - if s == "" : return True - - ps, pt = 0, 0 - lens, lent = len(s), len(t) - while ps < lens and pt < lent: - if s[ps] == t[pt]: - ps += 1 - pt += 1 - else: - pt += 1 - - return ps >= lens -``` - -AC - - diff --git "a/docs/Leetcode_Solutions/Java/394._decode_string \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/394._decode_string \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index a9eabe7f1..000000000 --- "a/docs/Leetcode_Solutions/Java/394._decode_string \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,70 +0,0 @@ -###394. Decode String - - -题目: - - - - -难度: - -Medium - - -思路: - -感觉像用栈做运算。 - -s = "3[a2[c]]" - -⬇️ - -s = 3 *( a + 2 * ( c ) ) - - -遇到非右括号全部入栈,碰到右括号出栈直到左括号,这个就算运算符2 → op2 -然后检查,直到stack空掉或者碰到下一个非数字,这个就算运算符1 → op1 - -算出op1 和 op2 之后把这个res继续入栈。然后接着处理 - - -代码不是很优美 - - - - -``` -class Solution(object): - def decodeString(self, s): - """ - :type s: str - :rtype: str - """ - - s = list(s) - stack = [] - - while s: - char = s.pop(0) - if char != ']': - stack.append(char) - else: - op1, op2 = '','' - popChar = stack.pop() - while popChar != '[': - op2 = popChar + op2 - popChar = stack.pop() - - while stack and stack[-1] in ['0','1','2','3','4','5','6','7','8','9']: - popChar = stack.pop() - op1 = popChar + op1 - - res = int(op1) * op2 - - for char in res: - stack.append(char) - - return ''.join(stack) -``` - - diff --git "a/docs/Leetcode_Solutions/Java/400. Nth Digit \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/400. Nth Digit \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 6cc93ab3e..000000000 --- "a/docs/Leetcode_Solutions/Java/400. Nth Digit \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,46 +0,0 @@ -### 400. Nth Digit - - - -题目: - - -难度: - -Easy - -思路: - -这道简单题我服, tag是math,找规律 - -``` -1- 9 : 9 → 只占1位 9 -10 - 99: 90 → 两位 90 * 2 -100 - 999: 900 → 三位 900 * 3 -1000 - 9999: 9000 → 四位 9000 * 4 -``` - - - -AC代码来之不易,是参考别人的,这里的`for i in range(9)`, 其实无论`range`多少都可以吧 - - - -``` -class Solution(object): - def findNthDigit(self, n): - """ - :type n: int - :rtype: int - """ - for i in range(9): - d = 9 * 10 ** i - if n <= d * (i+1): break - n -= d *(i+1) - n -= 1 - - return int(str(10**i + n / (i+1))[n % (i+1)]) -``` - - - diff --git "a/docs/Leetcode_Solutions/Java/401._binary_watch \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/401._binary_watch \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 00f217e7f..000000000 --- "a/docs/Leetcode_Solutions/Java/401._binary_watch \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,60 +0,0 @@ -###401. Binary Watch - - - -题目: - - - -难度: -Easy - - -思路: - - -一看到位操作,我的内心是拒绝的。 - -我也有想这样的想法,因为其实可以的组合并没有那么多,干脆枚举算了,然而也没有动手来写,直到被发了题解的截屏。 - - -``` -class Solution(object): - def readBinaryWatch(self, num): - """ - :type num: int - :rtype: List[str] - """ - hour = { 0 : ['0'], - 1:['1','2','4','8'], - 2:['3','5','6','9','10'], - 3:['7','11'] - } - - minute = { 0:['00'], - 1: ['01','02','04','08','16','32'], - 2: ['03','05','06','09','10','12','17','18','20','24','33','34','36','40','48'], - 3: ['07','11','13','14','19','21','22','25','26','28','35','37','38','41','42','44','49','50','52','56'], - 4: ['15','23','27','29','30','39','43','45','46','51','53','54','57','58'], - 5: ['31','47','55','59'] - } - - res = [] - - #num = num for hour + num for minute - i = 0 - - while i <= 3 and i <= num: - if num - i <= 5: - for str1 in hour[i]: - for str2 in minute[num-i]: - res.append(str1 + ':' + str2) - i += 1 - return res -``` - - -关于循环那处,因为hour的led最多只有4个,所以这样写循环 - - - diff --git "a/docs/Leetcode_Solutions/Java/404._sum_of_left_leaves \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/404._sum_of_left_leaves \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b6cda537c..000000000 --- "a/docs/Leetcode_Solutions/Java/404._sum_of_left_leaves \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,45 +0,0 @@ -###404. Sum of Left Leaves - - - -题目: - - - -难度: -Easy - - -思路: - - -典型递归,检查root的左孩子是不是node,是的话加上它的值,不是的话递归去求它的孩子们的,对于右边,递归的求sum of left leaves - - - -``` -class Solution(object): - def sumOfLeftLeaves(self, root): - """ - :type root: TreeNode - :rtype: int - """ - def isLeaf(node): - if node == None: - return False - if node.left == None and node.right == None: - return True - return False - - res = 0 - - if root: - if isLeaf(root.left): - res += root.left.val - else: - res += self.sumOfLeftLeaves(root.left) - if root.right: - res += self.sumOfLeftLeaves(root.right) - - return res -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/405. Convert a Number to Hexadecimal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/405. Convert a Number to Hexadecimal \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 5bcb3ec36..000000000 --- "a/docs/Leetcode_Solutions/Java/405. Convert a Number to Hexadecimal \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,114 +0,0 @@ -### 405. Convert a Number to Hexadecimal - -题目: - - - -难度: - -Easy - - - -wikipedia两个page: - - - -[十六进制](https://zh.wikipedia.org/wiki/十六进制#.E5.8D.81.E9.80.B2.E5.88.B6.E8.BD.89.E5.8D.81.E5.85.AD.E9.80.B2.E5.88.B6) - -例子: - -4877÷16=304....13(D) - -304÷16=19....0 - -19÷16=1....3 - -1÷16=0....1 - -這樣就計到4877(10)=130D(16) - - - -[补码](https://zh.wikipedia.org/wiki/二補數) - -> 一個數字的二補數就是將該數字作[位元](https://zh.wikipedia.org/wiki/%E4%BD%8D%E5%85%83)[反相](https://zh.wikipedia.org/w/index.php?title=%E5%8F%8D%E7%9B%B8&action=edit&redlink=1)運算(即[一補數](https://zh.wikipedia.org/wiki/%E4%B8%80%E8%A3%9C%E6%95%B8)或[反码](https://zh.wikipedia.org/wiki/%E5%8F%8D%E7%A0%81)),再將結果加1。在二補數系統中,一個負數就是用其對應正數的二補數來表示 - - - -看给的这个-1的例子 - - - -0000 0000 0000 0000 0000 0000 0000 0001 - -1111 1111 1111 1111 1111 1111 1111 1110 +1 - -1111 1111 1111 1111 1111 1111 1111 1111 - -f f f f f f f f - - - - - -也可以参考这里: - -[基础03:原码、反码、补码](https://higoge.github.io/2015/07/02/basic03/) - - - -这里我一开始迷茫和晕了一下,但是随后反应过来,这些数字在电脑里使用二进制存的,而负数也是用二进制的补码存的。所以其实AC代码应当很简单。 - -参考: - - - - - -AC代码: - -``` -class Solution(object): - def toHex(self, num): - """ - :type num: int - :rtype: str - """ - if not num : - return "0" - - result = [] - hexStr ="0123456789abcdef" - while num and len(result) != 8: - h = num & 15 - result.append(hexStr[h]) - num >>= 4 - - return ''.join(result[::-1]) -``` - - - -每次看后四位的结果,把它存起来,比如还是是看4877 - -它在计算机内部的表示是: - -``` -0b1001100001101 -num & 15 1101 & 15 = 13(d) -num >>=4 0b100110000 -num & 15 0000 & 15 = 0 -num >>=4 0b10011 -num & 15 10011 & 15 = 9 -num >>=4 0001 -num & 15 0001 & 15 = 1 - -``` - - - - - - - diff --git "a/docs/Leetcode_Solutions/Java/406._Queue_Reconstruction_by_Height \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/406._Queue_Reconstruction_by_Height \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 87e551963..000000000 --- "a/docs/Leetcode_Solutions/Java/406._Queue_Reconstruction_by_Height \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,43 +0,0 @@ -### 406. Queue Reconstruction by Height - -题目: - - - -难度: - -Medium - - -思路: -People are only counting (in their k-value) taller or equal-height others standing in front of them. -So a smallest person is completely irrelevant for all taller ones. And of all smallest people, -the one standing most in the back is even completely irrelevant for everybody else. Nobody is counting that person. -So we can first arrange everybody else, ignoring that one person. And then just insert that person appropriately. -Now note that while this person is irrelevant for everybody else, everybody else is relevant for this person - -this person counts exactly everybody in front of them. So their count-value tells you exactly the index they must be standing. - -So you can first solve the sub-problem with all but that one person and then just insert that person appropriately. -And you can solve that sub-problem the same way, first solving the sub-sub-problem with all -but the last-smallest person of the subproblem. And so on. The base case is when you have the sub-…-sub-problem of zero people. -You’re then inserting the people in the reverse order, i.e., that overall last-smallest person in the very end -and thus the first-tallest person in the very beginning. That’s what the above solution does, -Sorting the people from the first-tallest to the last-smallest, and inserting them one by one as appropriate. - -参考[stefan](https://leetcode.com/problems/queue-reconstruction-by-height/discuss/89359) - -```python -class Solution(object): - def reconstructQueue(self, people): - """ - :type people: List[List[int]] - :rtype: List[List[int]] - """ - people.sort(key=lambda (h, k): (-h, k)) - queue = [] - for p in people: - queue.insert(p[1], p) - return queue -``` - - diff --git "a/docs/Leetcode_Solutions/Java/412._fizz_buzz \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/412._fizz_buzz \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 76551be9f..000000000 --- "a/docs/Leetcode_Solutions/Java/412._fizz_buzz \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,68 +0,0 @@ -### 412. Fizz Buzz - -题目: - - - -难度: -Easy - -一行 -```python -class Solution(object): - def fizzBuzz(self, n): - """ - :type n: int - :rtype: List[str] - """ - return [(not i%3)*"Fizz" + (not i%5)*"Buzz" or str(i) for i in range(1, n+1)] - -``` -```python -class Solution(object): - def fizzBuzz(self, n): - """ - :type n: int - :rtype: List[str] - """ - return [str(i) if (i%3!=0 and i%5!=0) else (('Fizz'*(i%3==0)) + ('Buzz'*(i%5==0))) for i in range(1,n+1)] - -``` - - -就是easy,不过可以参见这里,有一些讨论 - - - -我觉得这里一个用yield的想法还蛮不错 -``` -# the fizbuz logic, returns an iterator object that -# calculates one value at a time, not all ot them at once -def fiz(numbers): - for i in numbers: - if i % 15 == 0: - yield 'fizbuz' - elif i % 5 == 0: - yield 'buz' - elif i % 3 == 0: - yield 'fiz' - else: - yield str(i) - -# xrange evaluates lazily, good for big numbers -# matches well with the lazy-eval generator function -numbers = xrange(1,2**20) - -# this gets one number, turns that one number into fuz, repeat -print ' '.join(fiz(numbers)) - -# returns: 1 2 fiz 4 buz fiz [...] fiz 1048573 1048574 fizbuz -``` -- clearly separates fizbuz logic from concatenation -- is as plain and readeable as possible -- generator iterator does not keep all the array in memory -- so that you can do it on arbitrary numbers (see Euler problem #10) - -What I do not like in this solution is the three ifs, whereas the problem can be solved with two. - -Answer: because yield is efficient when you do not want to keep big arrays in memory just to iterate through them. But this question is not about big arrays. diff --git "a/docs/Leetcode_Solutions/Java/413. Arithmetic Slices \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/413. Arithmetic Slices \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 6aff8c826..000000000 --- "a/docs/Leetcode_Solutions/Java/413. Arithmetic Slices \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,84 +0,0 @@ -### 413. Arithmetic Slices - - - -题目: - - - - -难度 : Medium - - - -思路: - -tag 是DP - -数从 i 到 j 之间的这个arithmetic 数 - -我的方法时间复杂度比较高O(N^2),从 i 开始数它的arithmetic slice,每个i数一遍,到 j - -AC代码 - -``` -class Solution(object): - def numberOfArithmeticSlices(self, A): - """ - :type A: List[int] - :rtype: int - """ - n = len(A) - if n < 3: - return 0 - else: - res = 0 - for i in range(n-2): - for j in range(i+2,n): - if A[j] - A[j-1] == A[i+1] - A[i]: - res += 1 - else: - break - return res -``` - - - -应该可以优化到O(N) - -不需要每个每个开始数,可以边数边移动 - -可以参考 - - - -O(N) 代码 - -``` -class Solution(object): - def numberOfArithmeticSlices(self, A): - """ - :type A: List[int] - :rtype: int - """ - n = len(A) - if n < 3: - return 0 - else: - res, cnt = 0, 2 - for i in range(2, n): - if A[i] - A[i-1] == A[i-1] - A[i-2]: - print i, i-1, i-2 - cnt += 1 - else: - if cnt > 2: - res += (cnt-1) * (cnt-2) / 2 - cnt = 2 - if cnt > 2: res += (cnt-1) * (cnt-2) / 2 - return res - - -``` - - - diff --git "a/docs/Leetcode_Solutions/Java/414._third_maximum_number \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/414._third_maximum_number \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index fc3652b98..000000000 --- "a/docs/Leetcode_Solutions/Java/414._third_maximum_number \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,46 +0,0 @@ -###414. Third Maximum Number - -题目: - - - -难度: - -Easy - - -思路: - -用三个变量来记录,max, secondmax, thirdmax, - -- 遇到比max还大的就更新,当前max降级为secondmax,当前secondmax降级为thirdmax -- 遇到比max小但是比secondmax大的也这样做降级处理 -- 更thirdmax - - -AC代码 - - -``` -class Solution(object): - def thirdMax(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - m, sm, tm = float('-inf'), float('-inf'), float('-inf') - - for num in nums: - if num > m: - tm = sm - sm = m - m = num - elif num < m and num > sm: - tm = sm - sm = num - elif num < m and num < sm and num > tm: - tm = num - - return tm if tm != float('-inf') else m -``` - diff --git "a/docs/Leetcode_Solutions/Java/415._add_strings \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/415._add_strings \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index bfa319cdf..000000000 --- "a/docs/Leetcode_Solutions/Java/415._add_strings \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,61 +0,0 @@ -###415. Add Strings - -题目: - - - -难度: -Easy - - -照抄2. Add Two Numbers的代码,超时 - -``` -class Solution(object): - def addStrings(self, num1, num2): - """ - :type num1: str - :type num2: str - :rtype: str - """ - if num1 == '' or num1 == '0': - return num2 - if num2 == '' or num2 == '0': - return num1 - if int(num1[-1]) + int(num2[-1]) < 10: - num3 = str(int(num1[-1]) + int(num2[-1]) ) - return self.addStrings(num1[:-1] , num2[:-1]) + num3 - else: - num3 = str(int(num1[-1]) + int(num2[-1]) - 10) - return self.addStrings(self.addStrings(num1[:-1] , num2[:-1]),'1') + num3 -``` - - - -换成迭代,并非递归再来尝试,看了别人的代码,真是精巧啊 - - -``` -class Solution(object): - def addStrings(self, num1, num2): - """ - :type num1: str - :type num2: str - :rtype: str - """ - result = [] - carry = 0 - idx1, idx2 = len(num1), len(num2) - while idx1 or idx2 or carry: - digit = carry - if idx1: - idx1 -= 1 - digit += int(num1[idx1]) - if idx2: - idx2 -= 1 - digit += int(num2[idx2]) - carry = digit > 9 - result.append(str(digit % 10)) - print result - return ''.join(result[::-1]) # 这里是reverse一下 -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/416. Partition Equal Subset Sum \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/416. Partition Equal Subset Sum \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 1dee2d982..000000000 --- "a/docs/Leetcode_Solutions/Java/416. Partition Equal Subset Sum \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,87 +0,0 @@ -### 416. Partition Equal Subset Sum - - - -题目: - - -难度: - -Medium - -记得算法考试考过证明这个问题是NP的,当时用的是subset sum是NP,然后来证明这个?如果我们能找到一个subset的sum是整个array sum的一半,那么问题解决。subset sum我们又可以继续转化,转成背包问题。 - -值得注意的是,这是subset sum,并不是subarray sum(这个明显要简单一些,因为subarray是连着的). - -subset sum也是有自己的[wikipedia page](https://en.wikipedia.org/wiki/Subset_sum_problem). - - - -当然,这也是一个subset problem,我们当然也可以用subset,加入和不加入,但是worst case O(2^n). - - - -对于subset sum的递推方程式: - -subset(arr,n,s) = subset(arr,n-1,s) or subset(arr, n-1, s- arrp[n-1]) - - - -画表可以开始,第一列全为1,是因为不选全部可以为0 - - - -``` - 0 1 2 3 4 5 6 8 9 10 11 -0 1 0 0 0 0 0 0 0 0 0 0 -1 1 1 0 0 0 0 0 0 0 0 0 -5 1 1 0 0 0 1 1 0 0 0 0 -5 1 1 0 0 0 1 1 0 0 0 1 -``` - - - -所以伪多项式算法写出来 - -AC代码 - - - -``` -class Solution(object): - def canPartition(self, nums): - """ - :type nums: List[int] - :rtype: bool - """ - def subset(nums, s): - dp = [[0 for i in range(s+1) ] for j in range(len(nums)+1)] - - dp[0][0] = 1 - # init the first col - for i in range(len(nums)+1 - dp[i][0] = 1 - - for i in range(1,len(nums)+1): - for j in range(1,s+1): - if dp[i-1][j] == 1: - dp[i][j] = 1 - elif j >= nums[i-1] and dp[i-1][j-nums[i-1]] ==1: - dp[i][j] = 1 - return dp[-1][-1] == 1 - - - - total = sum(nums) - if total % 2 == 1: - return False - else: - half = total / 2 - return subset(nums,half) == 1 - -``` - - - -当然可以小调整,比如一旦发现,提前return等等,但是时间上依旧是后20%,不知道时间上快很多的人是如何做到的||| - diff --git "a/docs/Leetcode_Solutions/Java/421._Maximum_XOR_of_Two_Numbers_in_an_Array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/421._Maximum_XOR_of_Two_Numbers_in_an_Array \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b0697b2a6..000000000 --- "a/docs/Leetcode_Solutions/Java/421._Maximum_XOR_of_Two_Numbers_in_an_Array \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,74 +0,0 @@ -### 421. Maximum XOR of Two Numbers in an Array - -题目: - - - -难度: - -Medium - -题目要求O(N)时间 - -看了半天的解法居然超时, -```python -class Solution(object): # 此法超时 -    def findMaximumXOR(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - '''The maxResult is a record of the largest XOR we got so far. if it's 11100 at i = 2, it means - before we reach the last two bits, 11100 is the biggest XOR we have, and we're going to explore - whether we can get another two '1's and put them into maxResult''' - max_res, mask = 0, 0 - - '''This is a greedy part, since we're looking for the largest XOR, we start - from the very begining, aka, the 31st postition of bits.''' - for i in range(32)[::-1]: - - '''The mask will grow like 100..000 , 110..000, 111..000, then 1111...111 - for each iteration, we only care about the left parts''' - mask |= (1 << i) - tmp = [] - for num in nums: - '''we only care about the left parts, for example, if i = 2, then we have - {1100, 1000, 0100, 0000} from {1110, 1011, 0111, 0010}''' - tmp.append(num & mask) - - '''if i = 1 and before this iteration, the maxResult we have now is 1100, - my wish is the maxResult will grow to 1110, so I will try to find a candidate - which can give me the greedyTry;''' - greedy_try = max_res | (1 << i) - - for i in tmp: - '''This is the most tricky part, coming from a fact that if a ^ b = c, then a ^ c = b; - now we have the 'c', which is greedyTry, and we have the 'a', which is leftPartOfNum - If we hope the formula a ^ b = c to be valid, then we need the b, - and to get b, we need a ^ c, if a ^ c exisited in our set, then we're good to go''' - if i ^ greedy_try in tmp: - max_res = greedy_try - '''If unfortunately, we didn't get the greedyTry, we still have our max, - So after this iteration, the max will stay at 1100.''' - return max_res -``` - - -只好想别的办法 - - -参考[stefan](https://leetcode.com/problems/maximum-xor-of-two-numbers-in-an-array/discuss/91050?page=3) -```python -class Solution(object): - def findMaximumXOR(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - answer = 0 - for i in range(32)[::-1]: - answer <<= 1 - prefixes = {num >> i for num in nums} - answer += any(answer^1 ^ p in prefixes for p in prefixes) - return answer -``` diff --git "a/docs/Leetcode_Solutions/Java/422. Valid Word Square \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/422. Valid Word Square \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 17cb1144d..000000000 --- "a/docs/Leetcode_Solutions/Java/422. Valid Word Square \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,48 +0,0 @@ -### 422. Valid Word Square - - - - - -题目: - - - - -难度 : Easy - - - -思路: - -就是对比一个矩阵内 xy == yx? - -try /except 真是好用 - -AC代码 - - - -``` -class Solution(object): - def validWordSquare(self, words): - """ - :type words: List[str] - :rtype: bool - """ - n = len(words) - for i in xrange(n): - m = len(words[i]) - for j in xrange(m): - try: - if words[i][j] != words[j][i]: - return False - except: - return False - return True -``` - - - - - diff --git "a/docs/Leetcode_Solutions/Java/434._number_of_segments_in_a_string \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/434._number_of_segments_in_a_string \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 424472a5a..000000000 --- "a/docs/Leetcode_Solutions/Java/434._number_of_segments_in_a_string \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,27 +0,0 @@ -### 434. Number of Segments in a String - -题目: - - - -难度: - -Easy - - -作弊神器Python - - -```python -class Solution(object): - def countSegments(self, s): - """ - :type s: str - :rtype: int - """ - return len(s.split()) -``` - -不过对于比如C++这种语言来说,应该是O(N),扫一圈应该也能得到正确答案 - -总之拿Python做string的题目就是作弊啊 diff --git "a/docs/Leetcode_Solutions/Java/437._path_sum_iii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/437._path_sum_iii \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index ac5c314a6..000000000 --- "a/docs/Leetcode_Solutions/Java/437._path_sum_iii \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,39 +0,0 @@ -### 437. Path Sum III - - - -题目: - - - -难度: -Easy - -思路: - - - - -```python -class Solution(object): - def pathSum(self, root, sum): - """ - :type root: TreeNode - :type sum: int - :rtype: int - """ - if not root: - return 0 - res = self.auxPathSum(root, sum) - res += self.pathSum(root.left, sum) - res += self.pathSum(root.right, sum) - return res - def auxPathSum(self, root, sum): - if not root: - return 0 - if sum == root.val: -            # 因为可能有负值, 所以sum为0也会有解, 必须加上 -            return 1 + self.auxPathSum(root.left, 0) + self.auxPathSum(root.right, 0) - else: - return self.auxPathSum(root.left, sum - root.val) + self.auxPathSum(root.right, sum - root.val) -``` diff --git "a/docs/Leetcode_Solutions/Java/438._Find_All_Anagrams_in_a_String \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/438._Find_All_Anagrams_in_a_String \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 2b8519852..000000000 --- "a/docs/Leetcode_Solutions/Java/438._Find_All_Anagrams_in_a_String \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,92 +0,0 @@ -### 438. Find All Anagrams in a String - - -题目: - - - -难度: - -Easy - - - -思路 - -刚开始打算直接遍历整个s,时间复杂度为O(m*n),m和n分别为字符串p和s的长度,但是超时了 - - - -``` - -class Solution(object): # 此法超时 -    def findAnagrams(self, s, p): - """ - :type s: str - :type p: str - :rtype: List[int] - """ - l, res = len(p), [] - for i in range(len(s)): - if collections.Counter(s[i:i+l]) == collections.Counter(p): - res.append(i) - return res -``` - -于是用双指针,left和right都从0开始往后遍历 -``` -class Solution(object): - def findAnagrams(self, s, p): - """ - :type s: str - :type p: str - :rtype: List[int] - """ - res, cnts = [], [0] * 26 - for c in p: - cnts[ord(c) - ord('a')] += 1 - left, right = 0, 0 - while right < len(s): - cnts[ord(s[right]) - ord('a')] -= 1 - while left <= right and cnts[ord(s[right]) - ord('a')] < 0: - cnts[ord(s[left]) - ord('a')] += 1 - left += 1 - if right - left + 1 == len(p): - res.append(left) - right += 1 - return res -``` -模板大法好 -```python -class Solution(object): - def findAnagrams(self, s, p): - """ - :type s: str - :type p: str - :rtype: List[int] - """ - res = [] - if len(p) > len(s): - return res - maps = collections.Counter(p) - counter = len(maps.keys()) - begin, end, head, length = 0, 0, 0, sys.maxint - while end < len(s): - if s[end] in maps: - maps[s[end]] -= 1 - if maps[s[end]] == 0: - counter -= 1 - end += 1 - while counter == 0: - if s[begin] in maps: - maps[s[begin]] += 1 - if maps[s[begin]] > 0: - counter += 1 - if end - begin == len(p): - res.append(begin) - begin += 1 - return res -``` - - - diff --git "a/docs/Leetcode_Solutions/Java/439. Ternary Expression Parser \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/439. Ternary Expression Parser \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 065f56cd7..000000000 --- "a/docs/Leetcode_Solutions/Java/439. Ternary Expression Parser \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,58 +0,0 @@ -### 439. Ternary Expression Parser - - - - - -题目: - - - - -难度: -Medium - -思路: - -其实这个和算术运算蛮像,但是不同于运算,有operator precedence差别,这个是三目运算,并且需要检查是否符合运算规则。 - - - -运用stack 然后每次查看是否形成运算式再来做处理 - -AC代码: - -``` -class Solution(object): - def parseTernary(self, expression): - """ - :type expression: str - :rtype: str - """ - n = len(expression) - - stack = [] - - for i in range(n-1, -1, -1): - char = expression[i] - stack.append(char) - - if len(stack) >= 5: - op0 = stack.pop() - op1 = stack.pop() - op2 = stack.pop() - op3 = stack.pop() - op4 = stack.pop() - - if op1 == '?' and op3 == ':': - res = op2 if op0 == 'T' else op4 - stack.append(res) - else: - stack.append(op4) - stack.append(op3) - stack.append(op2) - stack.append(op1) - stack.append(op0) - return stack[0] -``` - diff --git "a/docs/Leetcode_Solutions/Java/441._arranging_coins \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/441._arranging_coins \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 5ef0dae95..000000000 --- "a/docs/Leetcode_Solutions/Java/441._arranging_coins \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,29 +0,0 @@ -###441. Arranging Coins - -题目: - - - -难度: -Easy - - -可以直接O(1),公式: - -i(i+1)/2 = n - -解i - -i = ( sqrt(8*n+1) -1 )/ 2 - - -``` -import math -class Solution(object): - def arrangeCoins(self, n): - """ - :type n: int - :rtype: int - """ - return int((math.sqrt( 8 * n + 1) - 1 )/ 2 ) -``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/448._Find_All_Numbers_Disappeared_in_an_Array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/448._Find_All_Numbers_Disappeared_in_an_Array \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index b03105e6b..000000000 --- "a/docs/Leetcode_Solutions/Java/448._Find_All_Numbers_Disappeared_in_an_Array \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,25 +0,0 @@ -### 448. Find All Numbers Disappeared in an Array - -题目: - - - -难度: - -Easy - - - - - -```python -class Solution(object): - def findDisappearedNumbers(self, nums): - """ - :type nums: List[int] - :rtype: List[int] - """ - return list(set(range(1, len(nums)+1)) - set(nums)) -``` - - diff --git "a/docs/Leetcode_Solutions/Java/450. Delete Node in a BST \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/450. Delete Node in a BST \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 3f622c90a..000000000 --- "a/docs/Leetcode_Solutions/Java/450. Delete Node in a BST \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,62 +0,0 @@ -### 450. Delete Node in a BST - - - -题目: - - -难度 : Medium - - - -思路: - -从二叉搜索树中删除节点x的方法如下: - -• 如果x没有子节点,或者只有一个孩子,直接将x“切下”; - -• 否则,x有两个孩子,我们用其右子树中的最小值替换掉x,然后将右子树中的这一最小值递归的“切掉”。 -​ - - - -AC代码 - - - -```python -class Solution(object): - def deleteNode(self, root, key): - """ - :type root: TreeNode - :type key: int - :rtype: TreeNode - """ - def findmin(root): - while root.left: - root = root.left - return root - - - if not root : return None - elif key < root.val: root.left = self.deleteNode(root.left, key) - elif key > root.val : root.right = self.deleteNode(root.right, key) - else: - if root.left and root.right: - tmp = findmin(root.right) - root.val = tmp.val - root.right = self.deleteNode(root.right, tmp.val) - else: - if not root.left: - root = root.right - elif not root.right: - root = root.left - return root -``` - -​ - - - -其实这个代码还是需要花点时间来理解,需要画个图,理解这个root是每个stack return回去然后被接在原来的树上的,if 这个node并不是在node左右。 - diff --git "a/docs/Leetcode_Solutions/Java/453._Minimum_Moves_to_Equal_Array_Elements \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/453._Minimum_Moves_to_Equal_Array_Elements \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 2e9668086..000000000 --- "a/docs/Leetcode_Solutions/Java/453._Minimum_Moves_to_Equal_Array_Elements \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,72 +0,0 @@ -### 453. Minimum Moves to Equal Array Elements - - - - - -题目: - - - - -难度 : Easy - - - -思路: - -naive TLE 代码: - -每次都是给并不是最大的元素加1直到全部相等。 - -``` -class Solution(object): - def minMoves(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - res = 0 - while(not all(x == nums[0] for x in nums)): - nums.sort() - for i in range(len(nums) - 1): - nums[i] += 1 - res += 1 - - return res -``` - - - -给的测试例子是 `[1,2147483647]`能不TLE么?tag 是Math,所以要用观察到的结果来做吧? - -所以就是每个和最小值来比,看到底要增加多少,这是观察,但不是证明 - - - - - -AC代码 - -```python -class Solution(object): - def minMoves(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - res = 0 - minVal = min(nums) - for num in nums: - res += num -minVal - return res -``` - - - -类证明: - - - -> 其实给n-1个数字加1,效果等同于给那个未被选中的数字减1,比如数组[1,2,3], 给除去最大值的其他数字加1,变为[2,3,3],我们全体减1,并不影响数字间相对差异,变为[1,2,2],这个结果其实就是原始数组的最大值3自减1,那么问题也可能转化为,将所有数字都减小到最小值,这样难度就大大降低了,我们只要先找到最小值,然后累加每个数跟最小值之间的差值即可 - diff --git "a/docs/Leetcode_Solutions/Java/459._Repeated_Substring_Pattern \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/459._Repeated_Substring_Pattern \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index f32b6eb4b..000000000 --- "a/docs/Leetcode_Solutions/Java/459._Repeated_Substring_Pattern \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,31 +0,0 @@ -### 459. Repeated Substring Pattern - - -题目: - - - -难度: - -Easy - - -思路 - -- 如果存在这样的子串,那么子串的第一个字符和最后一个字符肯定跟父字符串```s```的相同。 -- 因此构建一个新字符串```s*2```(两个父字符串相加),去掉首尾字符 -- 如果此时能在其中找到```s```,说明存在这样的子串 - - - - -```python -class Solution(object): - def repeatedSubstringPattern(self, s): - """ - :type s: str - :rtype: bool - """ - return (s*2)[1:-1].find(s) != -1 -``` - diff --git "a/docs/Leetcode_Solutions/Java/461._Hamming Distance \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/461._Hamming Distance \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 4a8d63d81..000000000 --- "a/docs/Leetcode_Solutions/Java/461._Hamming Distance \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,66 +0,0 @@ -### 461. Hamming Distance - - - -题目: - For binary strings *a* and *b* the Hamming distance is equal to the number of ones ([Hamming weight](https://en.wikipedia.org/wiki/Hamming_weight)) in *a* [XOR](https://en.wikipedia.org/wiki/Exclusive_or) *b*. -> -> - - - -一行无敌 -```python -class Solution(object): - def hammingDistance(self, x, y): - """ - :type x: int - :type y: int - :rtype: int - """ - return bin(x^y).count('1') -``` -AC代码 - -```python -class Solution(object): - def hammingDistance(self, x, y): - """ - :type x: int - :type y: int - :rtype: int - """ - dist = 0 - val = x ^ y - - while val: - dist += 1 - val &= val - 1 - - return dist -``` - - - - - diff --git "a/docs/Leetcode_Solutions/Java/463._Island_Perimeter \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/463._Island_Perimeter \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index bedc5f8a1..000000000 --- "a/docs/Leetcode_Solutions/Java/463._Island_Perimeter \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,38 +0,0 @@ -### 463. Island Perimeter - - - -题目: - - - -难度: -Easy - -思路: - - - - -```python -class Solution(object): - def islandPerimeter(self, grid): - """ - :type grid: List[List[int]] - :rtype: int - """ - # 每一个陆地单元格的周长为4,当两单元格上下或者左右相邻时,令周长减2 - h = len(grid) - w = len(grid[0]) if h else 0 - ans = 0 - for x in range(h): - for y in range(w): - if grid[x][y] == 1: - ans += 4 - # 因为x+1还在后面,所以不需要考虑,即只需要考虑左边和上边,因为循环已经出现过该点了 - if x > 0 and grid[x - 1][y]: - ans -= 2 - if y > 0 and grid[x][y - 1]: - ans -= 2 - return ans -``` diff --git "a/docs/Leetcode_Solutions/Java/467._Unique_Substrings_in_Wraparound_String \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/467._Unique_Substrings_in_Wraparound_String \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 85c7a9d97..000000000 --- "a/docs/Leetcode_Solutions/Java/467._Unique_Substrings_in_Wraparound_String \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,42 +0,0 @@ -### 467. Unique Substrings in Wraparound String - -题目: - - - -难度: - -Medium - - -思路: - -有个无限长的字符串s,是由无数个「abcdefghijklmnopqrstuvwxyz」组成的。现在给你一个字符串p,求多少个p的非空子串在s中出现了? -   - -先考虑s的特性,满足条件(在s中)的p的子串只可能是abcd……z的连续序列(z后面是a), 我们只需要处理p中连续的部分就可以了。但是 举个例子,h-k的序列出现了,a-z的序列也出现了,那么只需要计算a-z的子串个数就可以了,因为h-k已经包含在a-z里了。考虑所有包含的情况,似乎就变得复杂了,a-z还可能被包含在x-za-z中,甚至更长的序列中。 - -  但是如果考虑以某个字母结尾的子串个数,那么p中以该字母结尾的连续序列长度,就是满足条件的子串个数。如果以字母x结尾的连续序列有多个, 我们只需要最长的一个即可,因为其他短的序列都已经被长的包含进去了,例如'bcd'和'abcd',有了'abcd'就知道以d结尾的子串有4个,分别是‘d’,'cd','bcd','abcd',‘bcd’已经被包含进去了。最后求和,问题就解决了。 这样思考就非常简单了,代码也可以很容易写出来。 - - - -```python -class Solution(object): - def findSubstringInWraproundString(self, p): - """ - :type p: str - :rtype: int - """ -        letters = [0] * 26         #开始默认每个都是0 -        length = 0 - for i in range(len(p)): - curr = ord(p[i]) - ord('a') -            if i > 0 and ord(p[i-1]) != (curr-1)%26 + ord('a'):   #一旦开始不相等了就要将length重置为0 -                length = 0 -            length += 1     #否则就说明继续与前面一个字符是连续的,length要加1才行 -            if length > letters[curr]:     #length一直加,如果到i这个字符length比它的目前的最大连续子串长度还要长,那么肯定要更新letters -                letters[curr] = length - return sum(letters) -``` - - diff --git "a/docs/Leetcode_Solutions/Java/469. Convex Polygon \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/469. Convex Polygon \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 2afb7d070..000000000 --- "a/docs/Leetcode_Solutions/Java/469. Convex Polygon \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,88 +0,0 @@ -### 469. Convex Polygon - - - -题目: - You can make things a lot easier than the Gift-Wrapping Algorithm... that's a good answer when you have a set of points w/o any particular boundary and need to find the convex hull. -> -> A polygon is a set of points in a list where the consecutive points form the boundary. It is much easier to figure out whether a polygon is convex or not (and you don't have to calculate any angles, either): -> -> -> -> For each consecutive pair of edges of the polygon (each triplet of points), compute the z-component of the cross product of the vectors defined by the edges pointing towards the points in increasing order. Take the cross product of these vectors: -> -> The polygon is convex if the z-components of the cross products are either all positive or all negative. Otherwise the polygon is nonconvex. -> -> given p[k], p[k+1], p[k+2] each with coordinates x, y: -> ->  dx1 = x[k+1]-x[k] -> ->  dy1 = y[k+1]-y[k] -> ->  dx2 = x[k+2]-x[k+1] -> ->  dy2 = y[k+2]-y[k+1] -> ->  zcrossproduct = dx1 * dy2 - dy1 * dx2 -> -> If there are N points, make sure you calculate N cross products, e.g. be sure to use the triplets (p[N-2],p[N-1],p[0]) and (p[N-1],p[0],p[1]). - - - -所以根据这个答案AC代码 - -``` -class Solution(object): - def isConvex(self, points): - """ - :type points: List[List[int]] - :rtype: bool - """ - n = len(points) - zcrossproduct = None - - for i in range(-2, n-2): - x = [ points[i][0], points[i+1][0], points[i+2][0] ] - y = [ points[i][1], points[i+1][1], points[i+2][1] ] - - dx1 = x[1] - x[0] - dy1 = y[1] - y[0] - - dx2 = x[2] - x[1] - dy2 = y[2] - y[1] - - if not zcrossproduct: - zcrossproduct = dx1 * dy2 - dy1 * dx2 - elif ( dx1 * dy2 - dy1 * dx2 ) * zcrossproduct < 0: - return False - return True -``` - diff --git "a/docs/Leetcode_Solutions/Java/476._Number_Complement \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/476._Number_Complement \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 91b253972..000000000 --- "a/docs/Leetcode_Solutions/Java/476._Number_Complement \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,28 +0,0 @@ -### 476. Number Complement - - - -题目: - - - -难度: -Easy - - - - - -```python -class Solution(object): - def findComplement(self, num): - """ - :type num: int - :rtype: int - """ - i = 1 << (len(bin(num)) -2) # 因为bin函数转化成的格式是‘0bXXXX’,头两个‘0b’要减掉去 - return (i - 1) ^ num - # return (i - 1) - num # 这样也可以 -``` - - diff --git "a/docs/Leetcode_Solutions/Java/477._Total_Hamming_Distance \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/477._Total_Hamming_Distance \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index cf5bc54a7..000000000 --- "a/docs/Leetcode_Solutions/Java/477._Total_Hamming_Distance \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,82 +0,0 @@ -### 477. Total Hamming Distance - - - -题目: - - - -难度: -Medium - -思路: - - -第一想法就是暴力,直接超时 - -``` -class Solution(object): # 此法超时 - def totalHammingDistance(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - res = 0 - for i in range(len(nums)): - for j in range(i+1, len(nums)): - res += bin(nums[i]^nums[j]).count('1') - return res -``` - - -前面的解法是```O(n^2)```所以超时,所以我们想想有没有```O(n)```的解法 -对于所有的数字,我们先从右数第一位开始算,如果一共有```n```个数字,其中```k```个数字的右数第一位是```‘1’```,其他```n-k```个数字的右数第一位是```‘0’```, -所以这一位对最终```res```的贡献就是```k*(n-k)```,这样我们的时间复杂度就是```O(32n)```,也就是```O(N)```了 - -``` -for each “column” or bit position, once you count the number of set bits you can figure out the number of pairs -that will contribute to the count using combination logic. - -Consider you have 10 numbers and only one of them is a 1 the rest are zeros. How many (1, 0) pairs can you make? -Clearly you can make 9, pair the 1 with each of the other 9 zeros. If you have 2 ones, -you can pair each of those with the other 8 zeros giving 2*8 = 16. -Keep going and you see that you can pair each 1 with each zero so the number of pairs is just the number of 1’s times the number of 0’s. - -This would be an O(32 * n) solution which is an O(n) solution, no space used. -``` - -AC代码 - -```python -class Solution(object): - def totalHammingDistance(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - # iterate thru "column" or bit position - # Note: you could stop at 10^9 as stated in the problem if you want to optimize - res = 0 - for i in range(32): - mask = 1 << i - count_ones, count_zeros = 0, 0 - for num in nums: - if num & mask != 0: - count_ones += 1 - else: - count_zeros += 1 - res += count_ones * count_zeros - return res -``` - -上面的代码简化一下就是[stefan大神(老流氓罒ω罒)](https://leetcode.com/problems/total-hamming-distance/discuss/96229)的无敌一行了 - -```python -class Solution(object): # 此法超时 - def totalHammingDistance(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - return sum(b.count('0') * b.count('1') for b in zip(*map('{:032b}'.format, nums))) -``` diff --git "a/docs/Leetcode_Solutions/Java/485._Max_Consecutive_Ones \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/485._Max_Consecutive_Ones \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 422a70c92..000000000 --- "a/docs/Leetcode_Solutions/Java/485._Max_Consecutive_Ones \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,40 +0,0 @@ -### 485. Max Consecutive Ones - - - -题目: - - - -难度: -Easy - -思路: - - -一行无敌 -```python -class Solution(object): - def findMaxConsecutiveOnes(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - return len(max(''.join(map(str, nums)).split('0'))) -``` - -```python -class Solution(object): - def findMaxConsecutiveOnes(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - res, count = [], 0 - for x in nums: - count = 0 if x == 0 else count + 1 - res.append(count) - return max(res) -``` - - diff --git "a/docs/Leetcode_Solutions/Java/587._Erect_the_Fence \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/587._Erect_the_Fence \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index f61d75b3c..000000000 --- "a/docs/Leetcode_Solutions/Java/587._Erect_the_Fence \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,133 +0,0 @@ - - -### 587. Erect the Fence - - -题目: - - - -难度: - -Hard - - - -思路 - -题目要求用一个围栏把所有的点(🌲)围起来,然后求处于围栏上点(🌲)的集合。 - -我们可以发现,从最左边的那个点一直往右走,只要一直都是走的逆时针方向,那么我们一定可以找到这条围栏。那么接下来就考虑最简单的情况, - -- 只有两个点```p```和```q```,我们从```p```走到```q```,当```p```到原点这条直线的斜率小于```q```到原点这条直线的斜率时,```p->q```就是沿逆时针方向走的; -- 接下来考虑3个点:```p,q,r```,以```p```为参照点(即前面的原点),那么从```q```走到```r```的时候,只要```q```到```q```这条直线的斜率小于```r```到```p```这条直线的斜率,```q->r```就是沿逆时针方向走的。 - -因此,我们只要构建一个```orientation```函数,就可以判断出目前我们的围栏是不是沿着逆时针在走下去了。 - -我们用一个```stack```来存放目前认为在围栏上的点的集合,然后把所有的点按照指定规则排好序:```先按照点的x坐标升序排列,如果x相等则按照点的y坐标升序排列```。这样我们依次取点,只要```stack```里面的点大于等于```2```个我们就要无限进行判断是否走的是逆时针,如果不是就把```stack```里面最后那个点```pop```出去(可能一直```pop```到只剩一个点),否则就把目前的这个点加入到```stack```中去,因为目前它还是在逆时针方向上的。 - -从左往右走完一遍```points```之后,我们围栏的下部分```lower hull```就构建好了,此时我们还要构建围栏的```upper hull```,因此我们将```points```逆序一下,从右往左再来一次遍历,仍然看是否走的是逆时针。但是这次遍历我们需要进行一个判断,就是之前放进```stack```的点,此时我们还是会经过它,如果它已经在```stack```里面了,我们就不需要再加进去了,同时这样也避免了我们把最左边的点重复加进去。 - - - -```python -python -# import functools -class Solution: - def outerTrees(self, points): - """ - :type points: List[Point] - :rtype: List[Point] - """ - def orientation(p, q, r): - return (q.y - p.y)*(r.x - p.x) - (r.y - p.y)*(q.x - p.x) - # def myComparator(p,q): - # return p.x - q.x if p.x != q.x else p.y - q.y - stack= [] - # points.sort(key = functools.cmp_to_key(myComparator)) - points.sort(key = lambda p: (p.x, p.y)) - for i in range(len(points)): - while (len(stack) >= 2 and orientation(stack[-2],stack[-1],points[i]) > 0): - stack.pop() - stack.append(points[i]) - points.reverse(); - for i in range(len(points)): - while (len(stack) >= 2 and orientation(stack[-2],stack[-1],points[i]) > 0): - stack.pop() - if points[i] not in stack: - stack.append(points[i]) - return stack -``` -简化python版本 -```python -class Solution(object): - def outerTrees(self, points): - """ - :type points: List[Point] - :rtype: List[Point] - """ - def orientation(p, q, r): - return (q.y - p.y) * (r.x - q.x) - \ - (q.x - p.x) * (r.y - q.y) - - hull = [] - points.sort(key=lambda p: (p.x, p.y)) - - for i in itertools.chain(xrange(len(points)), \ - reversed(xrange(len(points)))): - while len(hull) >= 2 and \ - orientation(hull[-2], hull[-1], points[i]) > 0: - hull.pop() - hull.append(points[i]) - - return list(set(hull)) -``` - -下面是小傅大神的代码,本来想叫‘’傅神‘’的,结果这名字🤦‍♂️(手动捂脸)[小傅每日一题587](https://www.bilibili.com/video/av15446980/) - -另外其中的```stack.pop()```这行代码注释掉也是可以的 - -```java -java -class Solution { - public List outerTrees(Point[] points) { - List res = new ArrayList(); - Arrays.sort(points, new Comparator(){ - @Override - public int compare(Point p, Point q){ - return p.x == q.x ? p.y - q.y : p.x - q.x; - } - }); - Stack stack = new Stack<>(); - for (int i = 0; i < points.length; i++){ - while(stack.size() >= 2 && orientation(stack.get(stack.size() - 2), stack.peek(), points[i]) > 0){ - stack.pop(); - } - stack.push(points[i]); - } - //stack.pop(); - for (int i = points.length - 1; i >= 0; i--){ - while(stack.size() >= 2 && orientation(stack.get(stack.size() - 2), stack.peek(), points[i]) > 0){ - stack.pop(); - } - stack.push(points[i]); - } - res.addAll(new HashSet<>(stack)); - return res; - } - - public int orientation(Point p, Point q, Point r){ - return (q.y - p.y)*(r.x - p.x) - (r.y - p.y)*(q.x - p.x); - } -} -``` - - - - - -Author: Keqi Huang - -If you like it, please spread your support - -![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) diff --git "a/docs/Leetcode_Solutions/Java/599._Minimum_Index_Sum_of_Two_Lists \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/599._Minimum_Index_Sum_of_Two_Lists \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 1682fab62..000000000 --- "a/docs/Leetcode_Solutions/Java/599._Minimum_Index_Sum_of_Two_Lists \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,58 +0,0 @@ -### 599. Minimum Index Sum of Two Lists - - -题目: - - - -难度: - -Easy - - - -思路 - -两个list,我们首先要取得它们相同的部分,并且之后我们还要知道哪个相同的字符串在两个list中的index之和是最小的。 -- 所以我们首先遍历list1,只要目前这个字符串在list2中,我们就以[字符串,index之和]的形式将其存放到ress中,同时维护一个index保持为最小index之和的值 -- 对于ress,我们遍历,只要某一项的index之和等于最小index之和我们就将他的字符串以i[0]的形式append到res中去, -- return res - -### 程序变量解释 - -- ress format: [[string1, sumOfIndex1], [string2, sumOfIndex2]... ] -- index 最小sunOfIndex值 -- res 最终结果,foramt: [string1, string2,. ...] - - - - -```python -python -class Solution: - def findRestaurant(self, list1, list2): - """ - :type list1: List[str] - :type list2: List[str] - :rtype: List[str] - """ - ress = [] - index = 2000 - for i in list1: - if i in list2: - ress.append([i, list1.index(i)+list2.index(i)]) - index = min(index, list1.index(i)+list2.index(i)) - res = [] - for i in ress: - if i[1] == index: - res.append(i[0]) - return res -``` - - - -Author: Keqi Huang - -If you like it, please spread your support - -![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) diff --git "a/docs/Leetcode_Solutions/Java/647._Palindromic_Substrings \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/647._Palindromic_Substrings \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 8ee312ad5..000000000 --- "a/docs/Leetcode_Solutions/Java/647._Palindromic_Substrings \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,89 +0,0 @@ -### 647. Palindromic Substrings - -题目: - - - -难度: - -Medium - - -思路 - -这道题要求给定一个字符串中的所有回文子串的个数,所以我想到了Manacher算法, -[Manacher算法](https://www.felix021.com/blog/read.php?2040) - -Manacher算法增加两个辅助变量id和mx,其中id表示最大回文子串中心的位置,mx则为id+P[id],也就是最大回文子串的边界。得到一个很重要的结论: - -- 如果mx > i,那么P[i] >= Min(P[2 * id - i], mx - i) . 为什么这样说呢,下面解释 - -下面,令j = 2*id - i,也就是说j是i关于id的对称点。 - -- 当 mx - i > P[j] 的时候,以S[j]为中心的回文子串包含在以S[id]为中心的回文子串中,由于i和j对称,以S[i]为中心的回文子串必然包含在以S[id]为中心的回文子串中,所以必有P[i] = P[j]; -![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher1.png) - -- 当 P[j] >= mx - i 的时候,以S[j]为中心的回文子串不一定完全包含于以S[id]为中心的回文子串中,但是基于对称性可知,下图中两个绿框所包围的部分是相同的,也就是说以S[i]为中心的回文子串,其向右至少会扩张到mx的位置,也就是说 P[i] >= mx - i。至于mx之后的部分是否对称,再具体匹配。 -![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher2.png) -所以P[i] >= Min(P[2 * id - i], mx - i),因为以j为中心的绘回文子串的左边界可能会比mx关于id的对称点要大,此时只能证明P[i]=P[2 * id - i] -- 此外,对于 mx <= i 的情况,因为无法对 P[i]做更多的假设,只能让P[i] = 1,然后再去匹配。 -此题还可以借鉴我leetcode第5题的解析, -[thining-in-lc-5](https://github.com/Lisanaaa/thinking_in_lc/blob/master/005._longest_palindromic_substring.md) - -这道题的基本思想是将以每一个字符为中心的回文子串个数相加,还是用一个小例子来解释 -![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher3.jpg) -其实,以‘#’为中心的回文子串就代表这个子串的长度是偶数,类似于'abba'这种 -但是其实这个字符本身也是一个回文子串,所以叠加的形式是count += (P[i]+1)/2,为什么呢,以下是解释: -- 对于每一个以字符‘#’为中心的回文子串,其P值绝对是偶数,所以```(P[i]+1)/2 = P[i]/2```,并不影响 -- 对于每一个以非字符‘#’为中心的回文子串,其P值绝对是奇数,这就保证了单个字母的回文子串(```例如'a'也算一个回文子串```)也被加起来了,因为```(P[i]+1)/2 = P[i]/2+1``` - - -```python -class Solution(object): - def countSubstrings(self, s): - """ - :type s: str - :rtype: str - """ - def preProcess(s): - if not s: - return ['^', '$'] - T = ['^'] - for c in s: - T += ['#', c] - T += ['#', '$'] - return T - T = preProcess(s) - P = [0] * len(T) - id, mx, count = 0, 0, 0 - for i in range(1,len(T) - 1): - j = 2*id - i - if mx > i: - P[i] = min(mx - i, P[j]) - else: - P[i] = 0 - while T[i+P[i]+1] == T[i-P[i]-1]: - P[i] += 1 - if (i + P[i]) > mx: - id, mx = i, i + P[i] - for i in range(len(P)): - count += (P[i]+1)/2 - return count -``` -python无敌啊!!!有没有天理啊,手动滑稽😏😏😏😏!一行解法: -```python -class Solution(object): - def countSubstrings(self, s): - """ - :type s: str - :rtype: int - """ - return sum(len(os.path.commonprefix((s[:i][::-1], s[i:]))) - + len(os.path.commonprefix((s[:i][::-1], s[i + 1:]))) + 1 - for i in range(len(s))) -``` -解释下为啥要加两次,因为回文串有以下两种形式: -- ‘abcba’ -- 'abba' - -那为啥要加那个1呢,上面解释过了,单个字符也算是一个回文子串呀,嘻嘻😁 diff --git "a/docs/Leetcode_Solutions/Java/657._Judge_Route_Circle \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/657._Judge_Route_Circle \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 12827f576..000000000 --- "a/docs/Leetcode_Solutions/Java/657._Judge_Route_Circle \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,23 +0,0 @@ -### 657. Judge Route Circle -题目: - - - -难度: - -Easy - - - - -```python -class Solution(object): - def judgeCircle(self, moves): - """ - :type moves: str - :rtype: bool - """ - return moves.count('D') == moves.count('U') and moves.count('R') == moves.count('L') -``` - - diff --git "a/docs/Leetcode_Solutions/Java/665._Non-decreasing_Array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/665._Non-decreasing_Array \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index cf05d3c9e..000000000 --- "a/docs/Leetcode_Solutions/Java/665._Non-decreasing_Array \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,48 +0,0 @@ -### 665. Non-decreasing Array - -题目: - - - -难度: - -Easy - - -思路 - -从index=1的元素依次检查,只要不符合规则则让count+1,如果count>1则肯定不符合返回False -但是我们在发现nums[i]小于nums[i-1]的时候,我们就必须要对原数组作出改变了,来让它的后面index部分尽可能满足条件 -下面就是两种情况: -- 2,4,2,6 - -如果是这种情况,当index=2时,不满足条件,但是i=0的元素是小于i=2处元素的,我们需要改变的是i-1处的元素,也就是将4改变成i=2处元素即2,最终变成2,2,2,6 - -- 3,4,2,6 - -这种情况如果我们将4变成2那么仍然是不满足条件的,此时我们需要将2变成4,即将i处元素变为i-1处元素 - -在每一次不符合条件的时候我们都检查一下count,如果count大于1的话我们就返回False,否则最终就返回True - -```python -class Solution(object): - def checkPossibility(self, nums): - """ - :type nums: List[int] - :rtype: bool - """ - count = 0 - for i in range(1,len(nums)): - if nums[i] < nums[i-1]: - count += 1 - if count > 1: - return False - if i - 2 < 0 or nums[i-2] <= nums[i]: - nums[i-1] = nums[i] - else: - nums[i] = nums[i-1] - return True -``` - - - diff --git "a/docs/Leetcode_Solutions/Java/672._Bulb_Switcher_II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/672._Bulb_Switcher_II \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 2441178f4..000000000 --- "a/docs/Leetcode_Solutions/Java/672._Bulb_Switcher_II \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,74 +0,0 @@ -### 672. Bulb Switcher II - -题目: - - - -难度: - -Medium - - -思路 - -这道题又是一个数学题。找规律呀找规律。 -我们只需要考虑当 n<=2 and m < 3 的特殊情形。因为当 n >2 and m >=3, 结果肯定是 8. -The four buttons: - -- Flip all the lights. -- Flip lights with even numbers. -- Flip lights with odd numbers. -- Flip lights with (3k + 1) numbers, k = 0, 1, 2, ... - -如果我们使用了 button 1 和 2, 其效果等同于使用 button 3 。 -类似的.. - -- 1 + 2 --> 3 -- 1 + 3 --> 2 -- 2 + 3 --> 1 - -所以,只有 8 种情形。 - -***灯全亮, 操作1, 操作2, 操作3, 操作4, 操作1+4, 操作2+4, 操作3+4*** - -并且当 n>2 and m>=3 时,我们就能够获得所有的情形。 - -| m\n | 0 | 1 | 2 | 3 | 4 | - --- |----|--- |----|---|---| -| 0 | 1 | 1 | 1 | 1 | 1 | -| 1 | 1 | 2 | 3 | 4 | 4 | -| 2 | 1 | 2 | 4 | 7 | 7 | -| 3 | 1 | 2 | 3 | 8 | 8 | - -```python -class Solution(object): - def flipLights(self, n, m): - """ - :type n: int - :type m: int - :rtype: int - """ - if m * n == 0: return 1 - if n == 1: return 2 - if n == 2: return 4 - (m % 2) - if m == 1: return 4 - if m == 2: return 7 - return 8 -``` - -还有两位大佬的两行解法: -```python -class Solution(object): - def flipLights(self, n, m): - m, n = min(3, m), min(3, n) - return 1 if n * m == 0 else self.flipLights(n - 1, m) + self.flipLights( n - 1, m - 1) -``` -```python -class Solution(object): - def flipLights(self, n, m): - n = min(n, 3) - return min(1< - - -难度: - -Medium - - - -思路 - -题目说输入一个时间,format是HH:MM, 然后输出接下来最近的一个时间,且这个时间的数字必须要在输入的时间中可以找到,所以我们用```h```, ```m``` -分别代表输入时间的小时数和分钟数,然后可以计算出输入时间的总分钟数```curr```,在未来的一天之内,我们一分钟一分钟往下面试,第一个满足的就直接 -作为结果就行了. - - - - -```python -class Solution(object): - def nextClosestTime(self, time): - """ - :type time: str - :rtype: str - """ - h, m = time.split(":") -        curr = int(h) * 60 + int(m) # 这里要注意h可能会是0开头的,如输入的时间为01:22,所以需要int(h)和int(m) -        result = None - for i in xrange(curr+1, curr+1441): - t = i % 1440 - h, m = t // 60, t % 60 - result = "%02d:%02d" % (h, m) - if set(result) <= set(time): - break - return result -``` - - - - - - diff --git "a/docs/Leetcode_Solutions/Java/682._Baseball_Game \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/682._Baseball_Game \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index e775cbf8c..000000000 --- "a/docs/Leetcode_Solutions/Java/682._Baseball_Game \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,37 +0,0 @@ -### 682. Baseball Game - -题目: - - - -难度: - -Easy - - -思路 - -points用来存放每一次的分数,最后求和。 - - -```python -class Solution(object): - def calPoints(self, ops): - """ - :type ops: List[str] - :rtype: int - """ - points = [] - for i in ops: - if i == 'C': - points.pop() - elif i == 'D': - points.append(2 * points[-1]) - elif i == '+': - points.append(points[-1] + points[-2]) - else: - points.append(int(i)) - return sum(points) -``` - - diff --git "a/docs/Leetcode_Solutions/Java/687._Longest_Univalue_Path \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/687._Longest_Univalue_Path \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 0b7a2eef5..000000000 --- "a/docs/Leetcode_Solutions/Java/687._Longest_Univalue_Path \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,58 +0,0 @@ -### 687. Longest Univalue Path - - -题目: - - - -难度: - -Easy - - - -思路 - -这道题也只能算个```easy```题目,根据传进来的```root```,我们只要从它的左右节点不停的递归下去,只要其```value```值与```root```一样, -该方向上的```length```就加```1```,最后我们将左右方向上的```length```相加, 递归取最大值 -##### 很重要的一点就是,Note: The length of path between two nodes is represented by the number of edges between them. -- 因此是```self.res = max(self.res, left_arrow + right_arrow)```, ```return max(left_arrow, right_arrow)``` -- 而不是```self.res = max(self.res, left_arrow + right_arrow + 1)```, ```return max(left_arrow + 1, right_arrow + 1)``` - - - - - -```python -# Definition for a binary tree node. -# class TreeNode(object): -# def __init__(self, x): -# self.val = x -# self.left = None -# self.right = None - -class Solution(object): - def longestUnivaluePath(self, root): - """ - :type root: TreeNode - :rtype: int - """ - self.res = 0 - def dir_length(node): - if not node: - return 0 - left_len = dir_length(node.left) # 左节点的length - right_len = dir_length(node.right) # 右节点的length - left_dir, right_dir = 0, 0 - if node.left and node.left.val == node.val: - left_dir = left_len + 1 # 当前节点的左节点方向的length - if node.right and node.right.val == node.val: - right_dir = right_len + 1 # 当前节点的右边节点方向的length - self.res = max(self.res, left_dir + right_dir) - return max(left_dir, right_dir) - dir_length(root) - return self.res -``` - - - diff --git "a/docs/Leetcode_Solutions/Java/740._delete_and_earn \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/740._delete_and_earn \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index 3810c4b09..000000000 --- "a/docs/Leetcode_Solutions/Java/740._delete_and_earn \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,29 +0,0 @@ -### 740. Delete and Earn - -题目: - - - -难度: - -Medium - - - - -```python -class Solution(object): - def deleteAndEarn(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - dp = [0] * 10001 - for num in nums: - dp[num] += num - for i in range(2, 10001): - dp[i] = max(dp[i]+dp[i-2], dp[i-1]) - return dp[-1] -``` - - diff --git "a/docs/Leetcode_Solutions/Java/760._Find_Anagram_Mappings \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/760._Find_Anagram_Mappings \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index fe69ce141..000000000 --- "a/docs/Leetcode_Solutions/Java/760._Find_Anagram_Mappings \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1,31 +0,0 @@ -### 760. Find Anagram Mappings - -题目: - - - -难度: - -Easy - - - - - -```python -class Solution(object): - def anagramMappings(self, A, B): - """ - :type A: List[int] - :type B: List[int] - :rtype: List[int] - """ - if not A: - return [] - res = [] - for i in A: - res.append(B.index(i)) - return res -``` - - diff --git "a/docs/Leetcode_Solutions/Java/README \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/README \344\270\212\345\215\2102.49.13.md" deleted file mode 100644 index c477b8c84..000000000 --- "a/docs/Leetcode_Solutions/Java/README \344\270\212\345\215\2102.49.13.md" +++ /dev/null @@ -1 +0,0 @@ -# Leetcode solutions and summarizations! diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Binary Search \344\270\215\346\230\223\345\206\231.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Binary Search \344\270\215\346\230\223\345\206\231.md" deleted file mode 100644 index bd65c3c65..000000000 --- "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Binary Search \344\270\215\346\230\223\345\206\231.md" +++ /dev/null @@ -1,91 +0,0 @@ -### Binary Search 不易写 - - - -坊间一直有binary search不容易写对的传言,一写还真是||| - -值得注意的是这里的u位置上的元素搜索是不包括的 - -先献上递归版本伪码: - -``` -function Binary_Search(x, A, l, u) - if u < l then - No found error - else - m ← l + [ ( u - l ) / 2 ] //避免溢出 - if A[m] = x then - return m - if x < A[m] then - return Binary-Search(x, A, l, m - 1) - else - return Binary-Search(x, A, m + 1, u) -``` - - - -迭代版本伪码: - - - -``` -function Binary_Search(x, A, l, u) - while l < u do - m ← l + [ ( u - l ) / 2 ] - if A[m] = x then - return m - if x < A[m] then - u ← m - 1 - else - l ← m + 1 - return NIL - -``` - - - - - -或者这样,正确代码 - -```python -def binarySearch(nums, target): - l, r = 0, len(nums) -1 - while l <= r: - mid = l + ((r-l) >> 2) - if nums[mid] > target: - r = mid - 1 - elif nums[mid] < target: - l = mid + 1 - else: - return mid - return -1 -``` - - - - - -这样就不对 - -``` -def binarySearch(nums, target): - l, r = 0, len(nums) - while l < r: - mid = (l+r) / 2 - if nums[mid] == target: - return mid - elif nums[mid] > target: - r = mid - 1 - else: - l = mid + 1 - return -1 - -print binarySearch([1,2,3,4,5,6],1) -// → -1 -``` - - - -之所以binary Search很容易不对,是因为边界状况,所以觉得一上来应当检查边界状况 - diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Data Structure and Algorthim Review.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Data Structure and Algorthim Review.md" deleted file mode 100644 index 61c9c7d68..000000000 --- "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Data Structure and Algorthim Review.md" +++ /dev/null @@ -1,101 +0,0 @@ - - -### Data Structure and Algorthim Review - - - -- [x] Binary Search Tree - - - [x] 插入 - - • 如果树为空,创建一个叶子节点,令该节点的key = k; - • 如果k小于根节点的key,将它插入到左子树中; - • 如果k大于根节点的key,将它插入到右子树中。 - - - [x] 遍历 - - • 前序: 根,左,右 - - • 中序:左,根,右 **有序** - - • 后序:左,右,根 - - - [x] 搜索 - - - look up : 是否存在 - - ​• 如果树为空,搜索失败; - ​• 如果根节点的key等于待搜索的值,搜索成功,返回根节点作为结果; - ​• 如果待搜索的值小于根节点的key,继续在左子树中递归搜索; - ​• 否则,待搜索的值大于根节点的key,继续在右子树中递归搜索。 - - - 最大元素和最小元素 - - ​ • 最右和最左 - - - 前驱(Successor)和后继(predecessor) - - ​ 给定元素x,它的后继元素y是满足y > x的最小值 - - ​ • 如果x所在的节点有一个非空的右子树,则右子树中的最小值就是答案 - - ​ • 否则我们需要向上回溯,找到最近的一个祖先,使得该祖先的左侧孩子,也为x的祖 先。 - ​ - - - [x] 删除 - - • 如果x没有子节点,或者只有一个孩子,直接将x“切下”; - - • 否则,x有两个孩子,我们用其右子树中的最小值替换掉x,然后将右子树中的这一最小值“切掉”。 - - - - - - -- [x] 递归 - - [x] 入门 - - - 回文 - - 阶乘 factorial, 慕指数 - - 分形 - - Tower of Hanoi - - - [x] 排列 Permutation - - - [x] 子集 Subsets - - - [ ] backtracking - - -- [x] dynamic programming - - - coin change - - - longest common subsequence - - - edit distance - - ​ - - - - --[ ] majority element - - - -- [ ] 随机 - - 水塘抽样 - - 洗牌 - - --[ ] 荷兰旗问题 - - --[ ] quick select - - --[ ] median of two sorted array --[ ] regular expression - diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Dynamic Programming.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Dynamic Programming.md" deleted file mode 100644 index 102d032c3..000000000 --- "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Dynamic Programming.md" +++ /dev/null @@ -1,48 +0,0 @@ -### Dynamic Programming - - - -- Fibonacci Numbers -- Shortest Path (no cycles) - - - - - - - -- subproblems - -- guessing - -- relate subproblems - -- recurse & memoize (bulid DP table) - -- solve original problem - - ​ - - - - - - -​ -​ -​ - -感觉DP有几类: - -- 容易写出递推公式的 - -- 画表更容易理解的 - - ​ - -* DP ≈ “controlled brute force” - -* DP ≈ recursion + re-use - - ​ - diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" deleted file mode 100644 index 110950bf9b2bd29f84cf9ecb7494b50cc39a4531..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117543 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 ZIXEJ|$lM;b2)}r^xG@> 24) & 0xFF); - result[1] = (byte) ((i >> 16) & 0xFF); - result[2] = (byte) ((i >> 8) & 0xFF); - result[3] = (byte) (i & 0xFF); - return result; -} - -//byte数组转换为int类型 -public static int byteArrayToInt(byte[] bytes) { - int value = 0; - // 由高位到低位 - for (int i = 0; i < 4; i++) { - int shift = (4 - 1 - i) * 8; - value += (bytes[i] & 0x000000FF) << shift;// 往高位游 - } - return value; -} -``` - -还有一种为: - -``` -//int类型转换为byte[]数组 -public static byte[] intToByteArray(int x) { - byte[] bb = new byte[4]; - bb[3] = (byte) (x >> 24); - bb[2] = (byte) (x >> 16); - bb[1] = (byte) (x >> 8); - bb[0] = (byte) (x >> 0); - return bb; -} - -//byte数组转换为int类型 -public static int byteArrayToInt(byte[] bb) { - return (int) ((((bb[3] & 0xff) << 24) | ((bb[2] & 0xff) << 16) | ((bb[1] & 0xff) << 8) | ((bb[0] & 0xff) << 0))); -} -``` - -## int转long - -int类型转换为long类型的情况并不是大多,这里主要接收几种转换方法: - -``` -public class IntToLong { - public static void main(String[] args) { - int number = 123111; - long num1 = (long) number;//强制 - long num2 = Long.parseLong(new Integer(number).toString());//先转String再进行转换 - long num3 = Long.valueOf(number); - } -} -``` - -## int转Interger - -int类型转换为Interger类型的情况,我是基本上每怎么遇到过,在这里也上网查询一些资料找到了两种方法。 - -``` -public class IntToInterge { - public static void main(String[] args) { - int number = 123456; - Integer num1 = Integer.valueOf(number); - Integer num2 = new Integer(number); - } -} -``` - ------- - -# byte数组的转换 - -关于byte数组的转换,上面有几个都是它们只见相互转换的,所以这里就不再介绍那么多,只介绍一个byte数组转换String类型的方法,其他的类型可以通过String类型再进行转换。 - -byte数组转String类型的方法经常用的可能就是下面这种方法。 - -``` -public class ByteToString { - public static void main(String[] args) { - byte[] number = "121121".getBytes(); - String num1 = new String(number); - } -} -``` - ------- - -最后简单补充以下Java基本数据类型的一些知识: - -| 类型 | 字节数 | 类名称 | 范围 | -| ------ | ---- | -------- | ---------------------------------------- | -| int | 4字节 | Interger | -2147483648 ~ 2147483647 | -| short | 2字节 | Short | -32768 ~ 32767 | -| long | 8字节 | Long | -9223372036854775808 ~ 9223372036854775807 | -| byte | 1字节 | Byte | -128 ~ 127 | -| float | 4字节 | Float | | -| double | 8字节 | Double | | \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/LinkedList\346\212\200\345\267\247.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/LinkedList\346\212\200\345\267\247.md" deleted file mode 100644 index 677a083a2..000000000 --- "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/LinkedList\346\212\200\345\267\247.md" +++ /dev/null @@ -1,118 +0,0 @@ -# LinkedList - -结点定义如下: - - class ListNode(object): - def __init__(self, x): - self.val = x - self.next = None - - -可以使用的技巧包括: - - -## Dummy head - -有的时候因为边界条件,需要判定是否是list的head,因为处理起来会有些不同,而创造一个dummy head则可以极大的解决一些问题。 - -``` - dummy = ListNode(-1) - dummy.next = head -``` - -## 双指针 - -- 19. Remove Nth Node From End of List - -两个指针p,q, q先走n步,然后p和q一起走,直到q走到结点,删除p.next解决。 - -理解: 先走了n步,q始终在p前方n个,这样q走到末尾,p的下一个则是距离尾端n个的,画个图还是容易理解。 - - -- 160. Intersection of Two Linked Lists - -如果两个linkedlist有intersection的话,可以看到,其实如果一开始我们就走到b2的话,那么我们就可以两个pointer一个一个的对比,到哪一个地址一样,接下来就是intersection部分。 - -就一开始把长的那条list走掉多余部分。 -还有这里保证了是无环的状况 - - - -``` -A: a1 → a2 - ↘ - c1 → c2 → c3 - ↗ -B: b1 → b2 → b3 -``` - - -## 快慢指针 - -- 141. Linked List Cycle - -用两个指针,一个每次走两步,一个每次走一步,如果慢的最终和快的相遇,那么说明有环,否则没有环,直观的理解是如果两个跑的速度不一的人进操场跑步,那么最终慢的会追上快的. - - - -## Reverse Linked List - -- 206. Reverse Linked List - -loop版本用prev, cur ,nxt 三个指针过一遍,recursion版本如下,可以再消化消化 - -``` -class Solution(object): - def reverseList(self, head): - """ - :type head: ListNode - :rtype: ListNode - """ - return self.doReverse(head, None) - - - def doReverse(self, head, newHead): - if head == None: - return newHead - nxt = head.next - head.next = newHead - return self.doReverse(nxt, head) -``` - - -## 寻找LinkedList中间项 - -依旧使用双指针,快慢指针:快指针每次走两步,慢指针每次走一步,快指针如果到头了,那么慢指针也会在中间了,这个中间可以考量,如果是奇数的话必然是中间。 - -如果是偶数则是偏前面的中间一项 - -``` -1 -> 2 -> 3 -> 4: 2 -1 -> 2 -> 3 -> 4 -> 5 -> 6 : 3 -1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 : 4 - -``` - -算法: - -``` - -def findMid(head): - if head == None or head.next == None: - return head - - slow = head - fast = head - - while fast.next and fast.next.next: - slow = slow.next - fast = fast.next.next - - return slow -``` - - - - - - diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Maximal Square.pdf" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Maximal Square.pdf" deleted file mode 100644 index 235cd3b86547102c2de81ebaedb59cd4f3f40b63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185749 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

    y&B`PeXKeQE9zPYAF!+)Lg=x*9vJS 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 diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" deleted file mode 100644 index bdd0b3ab5..000000000 --- "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" +++ /dev/null @@ -1,96 +0,0 @@ -# python有无数奇技淫巧和许多人不知道的秘密,这里用简洁的语言一条条表述出来,不断更新, 大家一起贡献! - -# 1. python 排序 -# 用lst.sort() 而不是nlst = sorted(lst), 区别在于lst.sort()是 in-place sort,改变lst, sorted会创建新list,成本比较高。 - -# 2. xrange和range的区别 -# range会产生list存在memory中,xrange更像是生成器,generate on demand所以有的时候xrange会更快 - -# 3. python处理矩阵 -row = len(matrix) -col = len(matrix[0]) if row else 0 -# 这样写通用的原因是, 当matrix = [], row = 0, col = 0 - -# 4. python列表生成式 -lst = [0 for i in range(3)] # lst = [0,0,0] -lst = [[0 for i in range(3)] for j in range(2)] # lst =  [[0, 0, 0], [0, 0, 0]] -# 下面这种写法危险: -# lst1 = [ 0, 0, 0 ] -# lst2  = [lst1] * 2  # lst2 = [ [0,0,0] , [0,0,0] ] -# lst2[0][0] = 1  # lst2 = [ [1,0,0], [1,0,0]] -# 因为lst1是object,改一个相当于全改, 这样写会踩坑 - -# 5. D.get(key, default) -# 如果这个key 没有在dict里面,给它一个默认值: -D = {} -if 1 in D: - val = D[1] -else : - val = 0 -# 等同于这样写: -val = D.get(1, 0) - -# 6. 字典赋值 -if key in D: - D[key].append(1) -else : - D[key] = [] - -# 7. 字符串反转 -# python字符串没有reverse函数,只能str[::-1] -string[::-1] -# python的list可以直接reverse(),因此也可以借用这个特性 -"".join([string].reverse()) - -# 8. 快速统计 -import collections -lst = [1, 1, 1, 2, 3, 4, 5, 5] -collections.Counter(lst) # Counter({1: 3, 5: 2, 2: 1, 3: 1, 4: 1}) - -# 9. python自带小顶堆heapq -# Python有built-in heap, 默认min heap. -heapq.heappush(heap, item) # 把item添加到heap中(heap是一个列表) - -heapq.heappop(heap) # 把堆顶元素弹出,返回的就是堆顶 - -heapq.heappushpop(heap, item) # 先把item加入到堆中,然后再pop,比heappush()再heappop()要快得多 - -heapq.heapreplace(heap, item) # 先pop,然后再把item加入到堆中,比heappop()再heappush()要快得多 - -heapq.heapify(x) # 将列表x进行堆调整,默认的是小顶堆 - -heapq.merge(*iterables) # 将多个列表合并,并进行堆调整,返回的是合并后的列表的迭代器 - -heapq.nlargest(n, iterable, key=None) # 返回最大的n个元素(Top-K问题) - -heapq.nsmallest(n, iterable, key=None) # 返回最小的n个元素(Top-K问题) - -# 如何来用它实现max heap呢,看到过一个有意思的方法是把key取负,比如把100变成-100,5变成-5 - -import heapq -mylist = [1, 2, 3, 4, 5, 10, 9, 8, 7, 6] -largest = heapq.nlargest(3, mylist) # [10, 9, 8] -smallest = heapq.nsmallest(3, mylist) # [1, 2, 3] - -# 10. 双端队列deque [http://stackoverflow.com/questions/4098179/anyone-know-this-python-data-structure] -# 可以很简单的.popleft(), .popright(), .appendleft(), .appendright(),最关键的是时间是O(1), 而用list来模拟队列是O(n)的时间复杂度 -# 还有很好用的rotate函数, -# 一个简单的跑马灯程序 -import sys -import time -from collections import deque - -fancy_loading = deque('>--------------------') - -while True: - print('\r%s' % ''.join(fancy_loading)) - fancy_loading.rotate(1) - sys.stdout.flush() - time.sleep(0.08) - -# 11. 用yield 不用return,可以返回一个generator - -# 12. 符号~的巧妙应用 -for i in range(n): - # 这里的```[~i]``` 意思就是 ```[n-1-i]``` - a[~i] = 1 diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Range Sum Query 2D - Immutable.pdf" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Range Sum Query 2D - Immutable.pdf" deleted file mode 100644 index 09410e209c3adc3ad41ebbdfdf0de177bb229e9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167781 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 z 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 diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Recusrion & BackTracking.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Recusrion & BackTracking.md" deleted file mode 100644 index 16e0f9279..000000000 --- "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Recusrion & BackTracking.md" +++ /dev/null @@ -1,237 +0,0 @@ -#Recusrion & BackTracking - -##Recusrion - -### DrawFractal - -``` -void DrawFractal(double x, double y, double w, double h) -{ - DrawTriangel(x, y, w, h); - if(w < .2 || h < .2) return ; - double halfH = h/2; - double halfw = w/2; - DrawFractal(x, y, halfW, halfH); - DrawFractal(x + halfW/2, y + halfH, halfW, halfH); - DrawFractal(x + halfW, y, halfW, halfH); -} -``` - - -Sierpinski triangle更伪码的写法: - -``` -void DrawFractal (x, y, w, h){ - if (too small) return ; - DrawTriangle(x, y, w, h); - DrawFractal(.left); - DrawFractal(.top); - DrawFractal(.right); -} -``` - -实际上老师故意调了里面几句代码的顺序,让来看到虽然结果相同,但是画的过程是不一样的。 - -然后老师还在黑板上画了过程树,分枝是怎样的,实际上当学到DFS的preOrder, inOrder 和 postOrder的时候会更印象深刻。 - -一个分支走完之后再回去走另一些。 - - -### DrawMondrian - - - -``` -void DrawMondrian(double x, double y, double w, double h){ - - if(w < 1 || h < 1) return ;// base case - - FillRectangle(x,y,w,h,RandomColor()); // fill background - - switch(RandomInteger(0, 2)){ - case 0: // do nothing - break; - case 1: // bisect vertically - double midX = RandomReal(0,w); - DrawBlackLine( x + midX, y, h); - DrawMondrian(x, y, midX, h); - DrawMondrian(x + midx, y, w- midX, h); - break; - case 2: // bisect horizontally - double midY = RandomReal(0,h); - DrawBlackLine( x, y+ midY, h); - DrawMondrian(x, y, w, midY); - DrawMondrian(x, y+midY,w, midY); - break; - } -} -``` - - -### The tower of Hanoi - - -``` -void MoveTower(int n, char src, char dst, char tmp){ - if (n > 0){ - MoveTower(n - 1, src, tmp, dst ); - MoveSingleDisk(src, dst); - MoveTower(n -1, tmp, dst, src); - } -} - -``` - - -### Permutation - -老师说permutation 和 subset 是 mother problems of all recursion. - - -given a string, print out its all permutations - -思路如下: - -- 使用了的string sofar,以及还未使用的string rest -- 一开始rest就是给的string本身,然后sofar是空 -- 每次挑一个rest里面的char,然后递归的再把rest剩下的拿来permutation,这样每次都会有一个char从rest shuffle到sofar -- n 次之后 rest为空,制造了一个permutation - - -``` -void RecPermute(string sofar, string rest){ - if(rest = ""){ - cout << soFar << endl; - } else { - for(int i = 0 ; i < rest.length(); i++){ - string next = soFar + rest[i]; - string remaining = rest.substr(0,i) + rest.substr(i+1); - RecPermute(next, remaining); - } - } -} - - -// "wrapper" function -void ListPermutations(string s) -{ - RecPermute("",s); -} -``` - - -老师的黑板图真的是击中要害。 - -因为老师强调的是,也要用mind来trace它是如何操作的。 - - - -### Subsets - - -``` -void RecSubsets(string soFar, string rest) -{ - if(rest = "") - cout << soFar << endl; - else { - // add to subset, remove from rest, recur - RecSubsets(soFar + rest[0],rest.substr(1)); - //don't add to substr, remove from rest, recur - RecSubsets(soFar, rest.substr(1)); - } -} - - -void ListSubsets(string str) -{ - RecSubsets("",str); -} - -``` - -代码非常容易理解 - - -比较一下:两个都是有关选择,permutation是每次选哪一个char,而subsets是选择这个char 是否in. - -两个recursion tree都是有branching 和 depth的, depth都是n,每次选一个,知道n个选完. - -branching是how many recusive calls 每次made,subset每次都是两个,in/out,而permutation则是n,n-1.......grows very quickly. - -因为permutation是n!,subsets是2^n,跟树对应。这些都是比较intractable的问题,并不是因为recursion,而是问题本身的复杂度。 - - -这两个问题都是exhaustive的,然而,我们会更多碰到一些问题,有着 - -similar exhaustive structure,但是遇到'satisfactory' outcome就会stop的 -> 也就是backtracking了. - -##BackTracking - - - -### pseudocode - -把问题转成decision problem,然后开始make choice. - -``` -bool Solve(configuration conf) -{ - if (no more choices) // BASE CASE - return (conf is goal state); - - for (all available choices){ - try one choice c; - // sove from here, it works out. you're done. - if (Solve(conf with choice c made)) return true; - unmake choice c; - } - return false; //tried all choices, no soln found -} -``` - - -###IsAnagram - - -``` -bool IsAnagram(string soFar, string rest, Lexicon & lex) -{ - if(rest == ""){ - if(lex.contains(soFar)){ - cout << soFar << endl; - return true; - } - } else { - for(int i = 0; i < rest.length() ; i++ ){ - string next = soFar + rest[i]; - string remaining = rest.substr(0,i) + rest.substr(i+1); - if(IsAnagram(next, remaining, lex)) return true; - } - } - return false; -} -``` - - -### 8 Queens - - -``` - -bool Solve(Grid &board, int col) -{ - if(col > = board.numCols()) return true; - - for(int rowToTry = 0; rowToTry < board.numRows(); rowToTry++){ - if (IsSafe(board,rowToTry, col)){ - PlaceQueen(board,rowToTry,col); - if (Solve(board,col+1)) return true; - RemoveQueen(board,rowToTry, col); - } - } - return false; -} - -``` - diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/backtracking\346\200\235\350\267\257.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/backtracking\346\200\235\350\267\257.md" deleted file mode 100644 index dbb7e8cf1..000000000 --- "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/backtracking\346\200\235\350\267\257.md" +++ /dev/null @@ -1,295 +0,0 @@ -## backtracking 全集 - -### 回溯是啥 -用爬山来比喻回溯,好比从山脚下找一条爬上山顶的路,起初有好几条道可走,当选择一条道走到某处时,又有几条岔道可供选择,只能选择其中一条道往前走,若能这样子顺利爬上山顶则罢了,否则走到一条绝路上时,只好返回到最近的一个路口,重新选择另一条没走过的道往前走。如果该路口的所有路都走不通,只得从该路口继续回返。照此规则走下去,要么找到一条到达山顶的路,要么最终试过所有可能的道,无法到达山顶。 -回溯是一种穷举,但与brute force有一些区别,回溯带了两点脑子的,并不多,brute force一点也没带。 -第一点脑子是回溯知道回头;相反如果是brute force,发现走不通立刻跳下山摔死,换第二条命从头换一条路走。 -第二点脑子是回溯知道剪枝;如果有一条岔路上放了一坨屎,那这条路我们不走,就可以少走很多不必要走的路。 - -还有一些爱混淆的概念:递归,回溯,DFS。 -回溯是一种找路方法,搜索的时候走不通就回头换路接着走,直到走通了或者发现此山根本不通。 -DFS是一种开路策略,就是一条道先走到头,再往回走一步换一条路走到头,这也是回溯用到的策略。在树和图上回溯时人们叫它DFS。 -递归是一种行为,回溯和递归如出一辙,都是一言不合就回到来时的路,所以一般回溯用递归实现;当然也可以不用,用栈。 -以下以回溯统称,因为这个词听上去很文雅。 - -### 识别回溯 -判断回溯很简单,拿到一个问题,你感觉如果不穷举一下就没法知道答案,那就可以开始回溯了。 -一般回溯的问题有三种: - -1. Find a path to success 有没有解 -2. Find all paths to success 求所有解 - - 2.1 求所有解的个数, - - 2.2 求所有解的具体信息 -3. Find the best path to success 求最优解 - -理解回溯:给一堆选择, 必须从里面选一个. 选完之后我又有了新的一组选择. ```This procedure is repeated over and over until you reach a final state. If you made a good sequence of choices, your final state is a goal state; if you didn't, it isn't.``` - -回溯可以抽象为一棵树,我们的目标可以是找这个树有没有good leaf,也可以是问有多少个good leaf,也可以是找这些good leaf都在哪,也可以问哪个good leaf最好,分别对应上面所说回溯的问题分类。 -good leaf都在leaf上。good leaf是我们的goal state,leaf node是final state,是解空间的边界。 - -对于第一类问题(问有没有解),基本都是长着个样子的,理解了它,其他类别迎刃而解: -```java -boolean solve(Node n) { - if n is a leaf node { - if the leaf is a goal node, return true - else return false - } else { - for each child c of n { - if solve(c) succeeds, return true - } - return false - } -} -``` -请读以下这段话以加深理解: -```Notice that the algorithm is expressed as a boolean function. This is essential to understanding the algorithm. If solve(n) is true, that means node n is part of a solution--that is, node n is one of the nodes on a path from the root to some goal node. We say that n is solvable. If solve(n) is false, then there is no path that includes n to any goal node.``` - -还不懂的话请通读全文吧:[Backtracking - David Matuszek](https://www.cis.upenn.edu/~matuszek/cit594-2012/Pages/backtracking.html) - -关于回溯的三种问题,模板略有不同, -第一种,返回值是true/false。 -第二种,求个数,设全局counter,返回值是void;求所有解信息,设result,返回值void。 -第三种,设个全局变量best,返回值是void。 - -第一种: -```java -boolean solve(Node n) { - if n is a leaf node { - if the leaf is a goal node, return true - else return false - } else { - for each child c of n { - if solve(c) succeeds, return true - } - return false - } -} -``` -第二种: -```java -void solve(Node n) { - if n is a leaf node { - if the leaf is a goal node, count++, return; - else return - } else { - for each child c of n { - solve(c) - } - } -} -``` -第三种: -```java -void solve(Node n) { - if n is a leaf node { - if the leaf is a goal node, update best result, return; - else return - } else { - for each child c of n { - solve(c) - } - } -} -``` -题目 - -八皇后 N-Queens - -问题 - -1. 给个n,问有没有解; -2. 给个n,有几种解;(Leetcode N-Queens II) -3. 给个n,给出所有解;(Leetcode N-Queens I) - -解答 - -1.有没有解 - -怎么做:一行一行的放queen,每行尝试n个可能,有一个可达,返回true;都不可达,返回false. - -边界条件leaf:放完第n行 或者 该放第n+1行(出界,返回) - -目标条件goal:n行放满且isValid,即目标一定在leaf上 - -helper函数: -boolean solve(int i, int[][] matrix) -在进来的一瞬间,满足property:第i行还没有被放置,前i-1行放置完毕且valid -solve要在给定的matrix上试图给第i行每个位置放queen。 -```java -public static boolean solve1(int i, List matrix, int n) { - if (i == n) { - if (isValid(matrix)) - return true; - return false; - } else { - for (int j = 0; j < n; j++) { - matrix.add(j); - if (isValid(matrix)) { //剪枝 - if (solve1(i + 1, matrix, n)) - return true; - } - matrix.remove(matrix.size() - 1); - } - return false; - } -} -``` -2.求解的个数 - -怎么做:一行一行的放queen,每行尝试n个可能。这回因为要找所有,返回值就没有了意义,用void即可。在搜索时,如果有一个可达,仍要继续尝试;每个子选项都试完了,返回. - -边界条件leaf:放完第n行 或者 该放第n+1行(出界,返回) - -目标条件goal:n行放满且isValid,即目标一定在leaf上 - -helper函数: -void solve(int i, int[][] matrix) -在进来的一瞬间,满足property:第i行还没有被放置,前i-1行放置完毕且valid -solve要在给定的matrix上试图给第i行每个位置放queen。 -这里为了记录解的个数,设置一个全局变量(static)int是比较efficient的做法。 -```java -public static void solve2(int i, List matrix, int n) { - if (i == n) { - if (isValid(matrix)) - count++; - return; - } else { - for (int j = 0; j < n; j++) { - matrix.add(j); - if (isValid(matrix)) { //剪枝 - solve2(i + 1, matrix, n); - } - matrix.remove(matrix.size() - 1); - } - } -} -``` -3.求所有解的具体信息 - -怎么做:一行一行的放queen,每行尝试n个可能。返回值同样用void即可。在搜索时,如果有一个可达,仍要继续尝试;每个子选项都试完了,返回. - -边界条件leaf:放完第n行 或者 该放第n+1行(出界,返回) - -目标条件goal:n行放满且isValid,即目标一定在leaf上 - -helper函数: -void solve(int i, int[][] matrix) -在进来的一瞬间,满足property:第i行还没有被放置,前i-1行放置完毕且valid -solve要在给定的matrix上试图给第i行每个位置放queen。 -这里为了记录解的具体情况,设置一个全局变量(static)集合是比较efficient的做法。 -当然也可以把结果集合作为参数传来传去。 -```java -public static void solve3(int i, List matrix, int n) { - if (i == n) { - if (isValid(matrix)) - result.add(new ArrayList(matrix)); - return; - } else { - for (int j = 0; j < n; j++) { - matrix.add(j); - if (isValid(matrix)) { //剪枝 - solve3(i + 1, matrix, n); - } - matrix.remove(matrix.size() - 1); - } - } -} -``` -优化 - -上面的例子用了省空间的方法。 -由于每行只能放一个,一共n行的话,用一个大小为n的数组,数组的第i个元素表示第i行放在了第几列上。 - -Utility(给一个list判断他的最后一行是否和前面冲突): -```java -public static boolean isValid(List list){ - int row = list.size() - 1; - int col = list.get(row); - for (int i = 0; i <= row - 1; i++) { - int row1 = i; - int col1 = list.get(i); - if (col == col1) - return false; - if (row1 - row == col1 - col) - return false; - if (row1 - row == col - col1) - return false; - } - return true; - -} -``` - -参考[Backtracking回溯法(又称DFS,递归)全解](https://segmentfault.com/a/1190000006121957) -以及 [Python Patterns - Implementing Graphs](https://www.python.org/doc/essays/graphs/) - - - -## 以Generate Parentheses为例,backtrack的题到底该怎么去思考? - - -所谓Backtracking都是这样的思路:在当前局面下,你有若干种选择。那么尝试每一种选择。如果已经发现某种选择肯定不行(因为违反了某些限定条件),就返回;如果某种选择试到最后发现是正确解,就将其加入解集 - -所以你思考递归题时,只要明确三点就行:选择 (Options),限制 (Restraints),结束条件 (Termination)。即“ORT原则”(这个是我自己编的) - - - - -对于这道题,在任何时刻,你都有两种选择: -1. 加左括号。 -2. 加右括号。 - -同时有以下限制: -1. 如果左括号已经用完了,则不能再加左括号了。 -2. 如果已经出现的右括号和左括号一样多,则不能再加右括号了。因为那样的话新加入的右括号一定无法匹配。 - -结束条件是: -左右括号都已经用完。 - -结束后的正确性: -左右括号用完以后,一定是正确解。因为1. 左右括号一样多,2. 每个右括号都一定有与之配对的左括号。因此一旦结束就可以加入解集(有时也可能出现结束以后不一定是正确解的情况,这时要多一步判断)。 - -递归函数传入参数: -限制和结束条件中有“用完”和“一样多”字样,因此你需要知道左右括号的数目。 -当然你还需要知道当前局面sublist和解集res。 - -因此,把上面的思路拼起来就是代码: - - if (左右括号都已用完) { - 加入解集,返回 - } - //否则开始试各种选择 - if (还有左括号可以用) { - 加一个左括号,继续递归 - } - if (右括号小于左括号) { - 加一个右括号,继续递归 - } - - - -你帖的那段代码逻辑中加了一条限制:“3. 是否还有右括号剩余。如有才加右括号”。这是合理的。不过对于这道题,如果满足限制1、2时,3一定自动满足,所以可以不判断3。 - -这题其实是最好的backtracking初学练习之一,因为ORT三者都非常简单明显。你不妨按上述思路再梳理一遍,还有问题的话再说。 - - - -以上文字来自 1point3arces的牛人解答 - - - -Backtracking 伪码 - - -``` -Pick a starting point. -while(Problem is not solved) - For each path from the starting point. - check if selected path is safe, if yes select it - and make recursive call to rest of the problem - If recursive calls returns true, then return true. - else undo the current move and return false. - End For - If none of the move works out, return false, NO SOLUTON. - -``` diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/delete_node_in_a_linked_list\351\227\256\351\242\230.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/delete_node_in_a_linked_list\351\227\256\351\242\230.md" deleted file mode 100644 index e148bb218..000000000 --- "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/delete_node_in_a_linked_list\351\227\256\351\242\230.md" +++ /dev/null @@ -1,69 +0,0 @@ -##Delete Node in a Linked List问题 - - -This is a LeetCode question, I knew its solution, but wondering about why my code not work. - - ->Write a function to delete a node (except the tail) in a singly linked list, given only access to that node. - ->Supposed the linked list is 1 -> 2 -> 3 -> 4 and you are given the third node with value 3, the linked list should become 1 -> 2 -> 4 after calling your function - - -At first glance, my intution is delete like an array: - -shift all the node values one front, then delete the tail, here's my implementation and test case: - - - - class ListNode(object): - def __init__(self, x): - self.val = x - self.next = None - - node1 = ListNode(1) - node2 = ListNode(2) - node3 = ListNode(3) - node4 = ListNode(4) - node5 = ListNode(5) - - node1.next = node2 - node2.next = node3 - node3.next = node4 - node4.next = node5 - - - - def deleteNode(node): - """ - :type node: ListNode - :rtype: void Do not return anything, modify node in-place instead. - """ - while node.next: - node.val = node.next.val - node = node.next - node = None - - - deleteNode(node4) - -But After deletion, it has two 5 value nodes, the tail was still kept, can anyone please explain to me what's wrong here? - - deleteNode(node4) - - node1.val - Out[162]: 1 - - node1.next.val - Out[163]: 2 - - node1.next.next.val - Out[164]: 3 - - node1.next.next.next.val - Out[165]: 5 - - node1.next.next.next.next.val - Out[166]: 5 - - -Really appreciate any help. \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" deleted file mode 100644 index 864326ec7..000000000 --- "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" +++ /dev/null @@ -1,14 +0,0 @@ -# Local Search, 一些新的思路 - -当一个问题我们只关心解法,而不是其达到解的顺序,那么考虑使用local search,比如八皇后问题,我们只关心哪个皇后放哪,根本不关心加入皇后的顺序。 - -local search还能用来解一类问题,求最优。 - - - -> A complete local search algorithm always finds a goal if one exists; an optimal algorithm always finds a global minimum/maximum. - - -一个解八皇后的新思路是我们根本就random来放皇后,然后如果state 合法,就get解答一枚,否则可以Move only to neighboring states,当然,选之剑attack数量最少的state. - -这种方法叫 hill - climbing,很多问题,可能被卡,然后random restart \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/python\347\232\204\345\220\204\347\247\215pass.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/python\347\232\204\345\220\204\347\247\215pass.md" deleted file mode 100644 index c1ac085a8..000000000 --- "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/python\347\232\204\345\220\204\347\247\215pass.md" +++ /dev/null @@ -1,123 +0,0 @@ -#Python的各种Pass - -感觉最近对于pass by reference 和 pass by value又有了一点/一些认识 - - -1. python不允许程序员选择采用传值还是传引用。Python参数传递采用的肯定是“传对象引用”的方式。实际上,这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值——相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象——相当于通过“传值'来传递对象。 -2. 当人们复制列表或字典时,就复制了对象列表的引用同,如果改变引用的值,则修改了原始的参数。 -3. 为了简化内存管理,Python通过引用计数机制实现自动垃圾回收功能,Python中的每个对象都有一个引用计数,用来计数该对象在不同场所分别被引用了多少次。每当引用一次Python对象,相应的引用计数就增1,每当消毁一次Python对象,则相应的引用就减1,只有当引用计数为零时,才真正从内存中删除Python对象。 - - -##### Linked List的例子 - - - -``` -class ListNode(object): - def __init__(self, x): - self.val = x - self.next = None - -node1 = ListNode(1) -node2 = ListNode(2) -node3 = ListNode(3) -node4 = ListNode(4) -node5 = ListNode(5) - -node1.next = node2 -node2.next = node3 -node3.next = node4 -node4.next = node5 - -``` - - - -来改变head - -``` -def testWithPointers1(head): - head.next = None -``` - - - -运行 testWithPointers1(node1) - -然后node1.next 为None了 - -// 可以理解,因为传进去的是head这个可变对象。 - - - -``` -def testWithPointers2(head): - cur = head - cur.next = None -``` - - - -运行 testWithPointers2(node1) -// node1.next 同样为None了 - -Python的object,list都是pass by reference,所以是改变的 - -看另外一个例子: - -``` -def printLinkedList(head): - while head: - print(head) - head = head.next -``` - - -输出 - -``` - printLinkedList(head) - -<__main__.ListNode object at 0x1044c0e10> - -1 - -<__main__.ListNode object at 0x1044c0fd0> - -2 - -<__main__.ListNode object at 0x1044c0c88> - -3 - -<__main__.ListNode object at 0x1044c0be0> - -4 - -<__main__.ListNode object at 0x1044c0780> - -5 - -head - -Out[39]: <__main__.ListNode at 0x1044c0e10> - -``` - -其实这里的head为什么没有改变有点疑惑 - - - -##### String看一下 - - - a = "abc" - - def changeA(s): - s = "" - changeA(a) - - -a 并不会改变,依旧为'abc' - - \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/slide_windows_template.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/slide_windows_template.md" deleted file mode 100644 index 919d1c0f9..000000000 --- "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/slide_windows_template.md" +++ /dev/null @@ -1,185 +0,0 @@ -能用此模板解决的题目目前有如下: -[leetcode 003](https://github.com/Lisanaaa/thinking_in_lc/blob/master/003._longest_substring_without_repeating_characters.md), -[leetcode 030](https://github.com/Lisanaaa/thinking_in_lc/edit/master/30._Substring_with_Concatenation_of_All_Words.md), -[leetcode 076](https://github.com/Lisanaaa/thinking_in_lc/blob/master/076._Minimum_Window_Substring.md), -[leetcode 159](https://github.com/Lisanaaa/thinking_in_lc/blob/master/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md), -[leetcode 438](https://github.com/Lisanaaa/thinking_in_lc/blob/master/438._Find_All_Anagrams_in_a_String.md) - - - -带注释python版本 -```python -class Solution(object): - def slideWindowTemplateByLisanaaa(self, s, t): - """ - :type s: str - :type t: str - :rtype: 具体题目具体分析 - """ - # init a collection or int value to save the result according the question. - res = [] - if len(t) > len(s): - return res - - # create a hashmap to save the Characters of the target substring. - # (K, V) = (Character, Frequence of the Characters) - maps = collections.Counter(t) - - # maintain a counter to check whether match the target string. - # must be the map size, NOT the string size because the char may be duplicate. - counter = len(maps.keys()) - - # Two Pointers: begin - left pointer of the window; end - right pointer of the window - begin, end = 0, 0 - - # the length of the substring which match the target string. - length = sys.maxint - - # loop at the begining of the source string - while end < len(s): - if s[end] in maps: - maps[s[end]] -= 1 # plus or minus one - if maps[s[end]] == 0: - counter -= 1 # modify the counter according the requirement(different condition). - end += 1 - - # increase begin pointer to make it invalid/valid again - while counter == 0: # counter condition. different question may have different condition - if s[begin] in maps: - maps[s[begin]] += 1 # plus or minus one - if maps[s[begin]] > 0: - counter += 1 # modify the counter according the requirement(different condition). - begin += 1 - - ''' - type your code here according to the question - 1. save / update(min/max) the result if find a target - 2. result: collections or int value - ''' - return res -``` - -无注释python版本: -```python -class Solution(object): - def slideWindowTemplateByLisanaaa(self, s, t): - res = [] - if len(t) > len(s): - return res - maps = collections.Counter(t) - counter = len(maps.keys()) - begin, end = 0, 0 - length = sys.maxint - while end < len(s): - if s[end] in maps: - maps[s[end]] -= 1 - if maps[s[end]] == 0: - counter -= 1 - end += 1 - while counter == 0: - if s[begin] in maps: - maps[s[begin]] += 1 - if maps[s[begin]] > 0: - counter += 1 - begin += 1 - - ''' - 1. save / update(min/max) the result if find a target - 2. result: collections or int value - ''' - return res -``` -带注释java版本 -```java -public class Solution { - public List slidingWindowTemplateByHarryChaoyangHe(String s, String t) { - //init a collection or int value to save the result according the question. - List result = new LinkedList<>(); - if(t.length()> s.length()) return result; - - //create a hashmap to save the Characters of the target substring. - //(K, V) = (Character, Frequence of the Characters) - Map map = new HashMap<>(); - for(char c : t.toCharArray()){ - map.put(c, map.getOrDefault(c, 0) + 1); - } - //maintain a counter to check whether match the target string. - int counter = map.size();//must be the map size, NOT the string size because the char may be duplicate. - - //Two Pointers: begin - left pointer of the window; end - right pointer of the window - int begin = 0, end = 0; - - //the length of the substring which match the target string. - int len = Integer.MAX_VALUE; - - //loop at the begining of the source string - while(end < s.length()){ - - char c = s.charAt(end);//get a character - - if( map.containsKey(c) ){ - map.put(c, map.get(c)-1);// plus or minus one - if(map.get(c) == 0) counter--;//modify the counter according the requirement(different condition). - } - end++; - - //increase begin pointer to make it invalid/valid again - while(counter == 0 /* counter condition. different question may have different condition */){ - - char tempc = s.charAt(begin);//***be careful here: choose the char at begin pointer, NOT the end pointer - if(map.containsKey(tempc)){ - map.put(tempc, map.get(tempc) + 1);//plus or minus one - if(map.get(tempc) > 0) counter++;//modify the counter according the requirement(different condition). - } - - /* save / update(min/max) the result if find a target*/ - // result collections or result int value - - begin++; - } - } - return result; - } -} -``` - -无注释java版本: -```java -public class Solution { - public List slidingWindowTemplateByHarryChaoyangHe(String s, String t) { - List result = new LinkedList<>(); - if(t.length()> s.length()) return result; - Map map = new HashMap<>(); - for(char c : t.toCharArray()){ - map.put(c, map.getOrDefault(c, 0) + 1); - } - int counter = map.size(); - int begin = 0, end = 0; - int len = Integer.MAX_VALUE; - while(end < s.length()){ - char c = s.charAt(end); - if( map.containsKey(c) ){ - map.put(c, map.get(c)-1); - if(map.get(c) == 0) counter--; - } - end++; - while(counter == 0){ - char tempc = s.charAt(begin); - if(map.containsKey(tempc)){ - map.put(tempc, map.get(tempc) + 1); - if(map.get(tempc) > 0) counter++; - } - - /* - save / update(min/max) the result if find a target - result collections or result int value - */ - - begin++; - } - } - return result; - } -} -``` - diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" deleted file mode 100644 index 656ec8a1f..000000000 --- "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" +++ /dev/null @@ -1,156 +0,0 @@ -# Tree Search, Graph Search, DFS, BFS - - -其实原本是根本不知道还有tree search的,只知道graph search,原来graph search就是一般我看到的dfs,bfs,有一个结构来记录visited node,这样在寻找邻居的时候,防止已经visit的node再被visit. - - -## Tree Search - -general tree search pseudocode - - -``` -function TREE_SEARCH(problem, strategy) returns a solution, or failure - initialize the search tree using the initial state of problem - loop do - if there are no candidates for expansion then return failure - choose a leaf node for expansion according to strategy - if the node contains a goal state then return the corresponding solution - else expand the node and add the resulting nodes to the search tree - end -``` - - -## DFS/BFS - -可以让stack/queue记录更多一些的东西,因为反正stack/queue更像通用结构 - -``` - A - / \ - C B - \ / \ - \ D E - \ / - F - - -graph = {'A': set(['B', 'C']), - 'B': set(['A', 'D', 'E']), - 'C': set(['A', 'F']), - 'D': set(['B']), - 'E': set(['B', 'F']), - 'F': set(['C', 'E'])} -``` -### DFS -The implementation below uses the stack data-structure to build-up and return a set of vertices that are accessible within the subjects connected component. Using Python’s overloading of the subtraction operator to remove items from a set, we are able to add only the unvisited adjacent vertices. -```python -def dfs(graph, start): # iterative - visited, stack = [], [start] - while stack: - vertex = stack.pop() - if vertex not in visited: - visited.append(vertex) - stack.extend(graph[vertex] - set(visited)) - return visited -print(dfs(graph, 'A')) # ['A', 'C', 'F', 'E', 'B', 'D'] 这只是其中一种答案 -``` -The second implementation provides the same functionality as the first, however, this time we are using the more succinct recursive form. Due to a common Python gotcha with default parameter values being created only once, we are required to create a new visited set on each user invocation. Another Python language detail is that function variables are passed by reference, resulting in the visited mutable set not having to reassigned upon each recursive call. -```python -def dfs(graph, start, visited=None): # recursive - if visited is None: - visited = [] - print('visiting', start) - visited.append(start) - for next in graph[start]: - if next not in visited: - dfs(graph, next, visited) - return visited -print(dfs(graph, 'A')) # ['A', 'C', 'F', 'E', 'B', 'D'] 这只是其中一种答案 -``` -We are able to tweak both of the previous implementations to return all possible paths between a start and goal vertex. The implementation below uses the stack data-structure again to iteratively solve the problem, yielding each possible path when we locate the goal. Using a generator allows the user to only compute the desired amount of alternative paths. -```python -def dfs_paths(graph, start, goal): # iterative - stack = [(start, [start])] - while stack: - (vertex, path) = stack.pop() - for next in graph[vertex] - set(path): - if next == goal: - yield path + [next] - else: - stack.append((next, path + [next])) -print(list(dfs_paths(graph, 'A', 'F'))) # [['A', 'C', 'F'], ['A', 'B', 'E', 'F']] -``` -The implementation below uses the recursive approach calling the ‘yield from’ PEP380 addition to return the invoked located paths. Unfortunately the version of Pygments installed on the server at this time does not include the updated keyword combination. -```python -def dfs_paths(graph, start, goal, path=None): # recursive - if path is None: - path = [start] - if start == goal: - yield path - for next in graph[start] - set(path): - yield from dfs_paths(graph, next, goal, path + [next]) -print(list(dfs_paths(graph, 'C', 'F'))) # [['C', 'A', 'B', 'E', 'F'], ['C', 'F']] -``` - -### BFS - -Similar to the iterative DFS implementation the only alteration required is to remove the next item from the beginning of the list structure instead of the stacks last. -```python -def bfs(graph, start): # iterative - visited, queue = [], [start] - while queue: - vertex = queue.pop(0) - if vertex not in visited: - visited.append(vertex) - queue.extend(graph[vertex] - set(visited)) - return visited -print(bfs(graph, 'A')) # ['A', 'C', 'B', 'F', 'D', 'E'] -``` -This implementation can again be altered slightly to instead return all possible paths between two vertices, the first of which being one of the shortest such path. -```python -def bfs_paths(graph, start, goal): - queue = [(start, [start])] - while queue: - (vertex, path) = queue.pop(0) - for next in graph[vertex] - set(path): - if next == goal: - yield path + [next] - else: - queue.append((next, path + [next])) -print(list(bfs_paths(graph, 'A', 'F'))) # [['A', 'C', 'F'], ['A', 'B', 'E', 'F']] -``` -Knowing that the shortest path will be returned first from the BFS path generator method we can create a useful method which simply returns the shortest path found or ‘None’ if no path exists. As we are using a generator this in theory should provide similar performance results as just breaking out and returning the first matching path in the BFS implementation. -```python -def bfs_paths(graph, start, goal): - queue = [(start, [start])] - while queue: - (vertex, path) = queue.pop(0) - for next in graph[vertex] - set(path): - if next == goal: - yield path + [next] - else: - queue.append((next, path + [next])) -def shortest_path(graph, start, goal): - try: - return next(bfs_paths(graph, start, goal)) - except StopIteration: - return None -print(shortest_path(graph, 'A', 'F')) # ['A', 'C', 'F'] -``` - -#### Improvement/Follow up - -1. 一旦BFS/DFS与更具体的,更有特性的data structure结合起来,比如binary search tree,那么BFS/DFS会针对这个tree traversal显得更有特性。 -2. it's worth mentioning that there is an optimized queue object in the collections module called [deque](https://docs.python.org/2/library/collections.html#collections.deque)) for which removing items from the beginning ( or popleft ) takes constant time as opposed to O(n) time for lists. - - - -### Resources - -1. [Depth-and Breadth-First Search](https://jeremykun.com/2013/01/22/depth-and-breadth-first-search/) -2. [Edd Mann](http://eddmann.com/posts/depth-first-search-and-breadth-first-search-in-python/) -3. [graph - Depth-first search in Python](https://codereview.stackexchange.com/questions/78577/depth-first-search-in-python) - - - diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\344\275\215\350\277\220\347\256\227.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\344\275\215\350\277\220\347\256\227.md" deleted file mode 100644 index aeaa44c4d..000000000 --- "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\344\275\215\350\277\220\347\256\227.md" +++ /dev/null @@ -1,38 +0,0 @@ -### 位运算 - -位运算包括: 加 减 乘 取反 and 异或 - -- 0110 + 0110 = 0110 * 2 ,也就是0110左移1位 - -- 0011 * 0100 0100 = 4, 一个数乘以 2^n 即是将这个数左移n - -- a ^(~a) = 0 - -- x & (~0 << n ) 这样来看,0取反全部为1,然后将其右移n位,后面的全是0,x & (~0 <>:右移 - - ​ - -Bit Facts and Tricks - -``` -x ^ 0s = x x & 0s = 0 x | 0s = x -x ^ 1s = ~x x & 1s = x x | 1s = 1s -x ^ x = 0 x & x = x x | x = x -``` - diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" deleted file mode 100644 index 767617664..000000000 --- "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" +++ /dev/null @@ -1,194 +0,0 @@ -### 全排列算法 - - -#### 46. Permutations - - -Given a collection of distinct numbers, return all possible permutations. - -For example, -[1,2,3] have the following permutations: - - [ - [1,2,3], - [1,3,2], - [2,1,3], - [2,3,1], - [3,1,2], - [3,2,1] - ] - - -#####从空开始加 - -先跳离开这道题,来看类似的'ABC',我们要求它的全排列 - - -``` -def recPermute(sofar, rest): - if rest == '': - print sofar - else: - for i in range(len(rest)): - nxt = sofar + rest[i] - remaining = rest[:i] + rest[i+1:] - recPermute(nxt, remaining) - -// "wrapper" function -def listPermute(s): - recPermute('',s) -``` - -会正确输出`ABC ACB BAC BCA CAB CBA`,题目依靠的是每次我们从余下的字母中选一个,如果画图则会是这样: - - -``` - A B C - B C A C A B - C B C A B A -``` - -时间复杂度应该是O(n!) - -- n choose 1 -- n-1 choose 1 -- ... - - - -#####另一种市面上常见思路是交换: - -思路是这样的,同样看上面的图: - -- n个元素的全排列 = (n-1)个元素的全排列 + 另一个元素作为前缀 -- 如果只有一个元素,那么这个元素本身就是它的全排列 -- 不断将每个元素放作第一个元素,然后将这个元素作为前缀,并将其余元素继续全排列,等到出口,出口出去后还需要还原数组 - - -这个用数组来测试更容易写代码和直观: - - -``` -def recPermute(nums,begin): - n = len(nums) - if begin == n: - print nums, - - for i in range(begin,n): - nums[begin], nums[i] = nums[i],nums[begin] - recPermute(nums,begin+1) - nums[begin],nums[i] = nums[i],nums[begin] - -recPermute(['A','B','C'],0) - -``` - -这样的写法更容易理解: - - -```python -class Solution: - # @param num, a list of integer - # @return a list of lists of integers - def permute(self, num): - if len(num) == 0: return [] - if len(num) == 1: return [num] - res = [] - for i in range(len(num)): - x = num[i] - xs = num[:i] + num[i+1:] - for j in self.permute(xs): - res.append([x] + j) - return res -``` - -每次用一个没有用过的头元素,然后加上全排列产生的结果. - -如果分析复杂度,应该也是O(n!) - - -#### 47. Permutations II - - -最简单的想法: - -- 排序 -- 如果碰到重复的就继续处理下一个 - -``` -class Solution(object): - def permuteUnique(self, nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - if len(nums) == 0: return [] - if len(nums) == 1: return [nums] - res = [] - nums.sort() - for i in range(len(nums)): - if i > 0 and nums[i] == nums[i-1]: continue - for j in self.permuteUnique(nums[:i] + nums[i+1:]): - res.append([nums[i]] + j) - return res - -``` - - - - -#### 31. Next Permutation - -实际上这个题目也就是Generation in lexicographic order, - -wikipedia 和 [这里](https://www.nayuki.io/page/next-lexicographical-permutation-algorithm) 有很好,很精妙的算法,也有点two pointer的意思 - - -``` -1. Find the highest index i such that s[i] < s[i+1]. If no such index exists, the permutation is the last permutation. -2. Find the highest index j > i such that s[j] > s[i]. Such a j must exist, since i+1 is such an index. -3. Swap s[i] with s[j]. -4. Reverse the order of all of the elements after index i till the last element. -``` - - -看例子: - -125430 - - -- 从末尾开始,找到decreasing subsequence,5430,因为来调5330无论怎么调,都不可能有比它更小的,数也被自然的分成两部分(1,2) 和 (5,4,3,0) -- 下一步是找这个sequence里面第一个比前面部分,比2大的,3,也很容易理解,因为下一个必定是(1,3)打头 -- 交换 3和2 ,变成 (1,3,5,4,2,0),再把后面的部分reverse,得到后面部分可得到的最小的 - -这个时候,得到下一个sequence 130245 - - - -``` -class Solution(object): - def nextPermutation(self, nums): - """ - :type nums: List[int] - :rtype: void Do not return anything, modify nums in-place instead. - """ - m, n = 0, 0 - for i in range(len(nums) - 2, 0 , -1): - if nums[i] < nums[i+1]: - m = i - break - - for i in range(len(nums) - 1, 0 , -1): - if nums[i] > nums[m]: - n = i - break - - if m < n : - nums[m], nums[n] = nums[n], nums[m] - nums[m+1:] = nums[len(nums):m:-1] - else: - nums = nums.reverse() -``` - - -所以可以用这个next permutation来解46/47也可以,然后我兴奋了一下,这个算法很快的!然后我又冷静了,因为permutation的个数是O(n!)个啊|||,所以也不可能有啥大的提升吧 diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\345\205\253\346\216\222\345\272\217.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\345\205\253\346\216\222\345\272\217.md" deleted file mode 100644 index 83b327202..000000000 --- "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\345\205\253\346\216\222\345\272\217.md" +++ /dev/null @@ -1,386 +0,0 @@ -## 前言 -八大排序,三大查找是《数据结构》当中非常基础的知识点,在这里为了复习顺带总结了一下常见的八种排序算法。 -常见的八大排序算法,他们之间关系如下: - -![](/images/SortingAlgorithm/八大排序算法总结.png) - -他们的性能比较: - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -### 直接插入排序 (Insertion sort) - -![](/images/SortingAlgorithm/直接插入排序.gif) - -直接插入排序的核心思想就是:将数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已排序的元素小,则交换,直到全部元素都比较过。 -因此,从上面的描述中我们可以发现,直接插入排序可以用两个循环完成: - -1. 第一层循环:遍历待比较的所有数组元素 -2. 第二层循环:将本轮选择的元素(selected)与已经排好序的元素(ordered)相比较。 - - 如果```selected > ordered```,那么将二者交换 - -```python -#直接插入排序 -def insert_sort(L): - #遍历数组中的所有元素,其中0号索引元素默认已排序,因此从1开始 - for x in range(1,len(L)): - #将该元素与已排序好的前序数组依次比较,如果该元素小,则交换 - #range(x-1,-1,-1):从x-1倒序循环到0 - for i in range(x-1,-1,-1): - #判断:如果符合条件则交换 - if L[i] > L[i+1]: - L[i], L[i+1] = L[i+1], L[i] -``` -### 希尔排序 (Shell sort) - -![](/images/SortingAlgorithm/希尔排序.png) - -希尔排序的算法思想:将待排序数组按照步长gap进行分组,然后将每组的元素利用直接插入排序的方法进行排序;每次将gap折半减小,循环上述操作;当gap=1时,利用直接插入,完成排序。 -同样的:从上面的描述中我们可以发现:希尔排序的总体实现应该由三个循环完成: - -1. 第一层循环:将gap依次折半,对序列进行分组,直到gap=1 -2. 第二、三层循环:也即直接插入排序所需要的两次循环。具体描述见上。 - -```python -#希尔排序 -def insert_shell(L): - #初始化gap值,此处利用序列长度的一半为其赋值 - gap = int(len(L)/2) - #第一层循环:依次改变gap值对列表进行分组 - while (gap >= 1): - #下面:利用直接插入排序的思想对分组数据进行排序 - #range(gap,len(L)):从gap开始 - for x in range(gap,len(L)): - #range(x-gap,-1,-gap):从x-gap开始与选定元素开始倒序比较,每个比较元素之间间隔gap - for i in range(x-gap,-1,-gap): - #如果该组当中两个元素满足交换条件,则进行交换 - if L[i] > L[i+gap]: - L[i], L[i+gap] = L[i+gap], L[i] - #while循环条件折半 - gap = int((gap/2)) -``` - -### 简单选择排序 (Selection sort) - -![](/images/SortingAlgorithm/简单选择排序.gif) - -简单选择排序的基本思想:比较+交换。 - -1. 从待排序序列中,找到关键字最小的元素; -2. 如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换; -3. 从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。 -因此我们可以发现,简单选择排序也是通过两层循环实现。 - - 第一层循环:依次遍历序列当中的每一个元素 - - 第二层循环:将遍历得到的当前元素依次与余下的元素进行比较,符合最小元素的条件,则交换。 - -```python -# 简单选择排序 -def select_sort(L): -#依次遍历序列中的每一个元素 - for x in range(0,len(L)): -#将当前位置的元素定义此轮循环当中的最小值 - minimum = L[x] -#将该元素与剩下的元素依次比较寻找最小元素 - for i in range(x+1,len(L)): - if L[i] < minimum: - L[i], minimum = minimum, L[i] -#将比较后得到的真正的最小值赋值给当前位置 - L[x] = minimum -``` - -### 堆排序 (Heap sort) - -#### 堆的概念 - -堆:本质是一种数组对象。特别重要的一点性质:任意的叶子节点小于(或大于)它所有的父节点。对此,又分为大顶堆和小顶堆,大顶堆要求节点的元素都要大于其孩子,小顶堆要求节点元素都小于其左右孩子,两者对左右孩子的大小关系不做任何要求。 -利用堆排序,就是基于大顶堆或者小顶堆的一种排序方法。下面,我们通过大顶堆来实现。 - -基本思想: -堆排序可以按照以下步骤来完成: - -1. 首先将序列构建称为大顶堆; - -(这样满足了大顶堆那条性质:位于根节点的元素一定是当前序列的最大值) - -![](/images/SortingAlgorithm/构建大顶堆.png) - -2. 取出当前大顶堆的根节点,将其与序列末尾元素进行交换; - -(此时:序列末尾的元素为已排序的最大值;由于交换了元素,当前位于根节点的堆并不一定满足大顶堆的性质) - -3. 对交换后的n-1个序列元素进行调整,使其满足大顶堆的性质; - -![](/images/SortingAlgorithm/调整大顶堆.png) - -4. 重复2.3步骤,直至堆中只有1个元素为止 - -```python -#-------------------------堆排序-------------------------------- -#**********获取左右叶子节点********** -def LEFT(i): - return 2*i + 1 -def RIGHT(i): - return 2*i + 2 -#********** 调整大顶堆 ********** -#L:待调整序列 length: 序列长度 i:需要调整的结点 -def adjust_max_heap(L, length, i): -#定义一个int值保存当前序列最大值的下标 - largest = i -#获得序列左右叶子节点的下标 - left, right = LEFT(i), RIGHT(i) -#当左叶子节点的下标小于序列长度 并且 左叶子节点的值大于父节点时,将左叶子节点的下标赋值给largest - if (left < length) and (L[left] > L[i]): - largest = left -#当右叶子节点的下标小于序列长度 并且 右叶子节点的值大于父节点时,将右叶子节点的下标值赋值给largest - if (right < length) and (L[right] > L[largest]): - largest = right -#如果largest不等于i 说明当前的父节点不是最大值,需要交换值 - if (largest != i): - L[i], L[largest] = L[largest], L[i] - # 执行递归操作:两个任务:1 寻找最大值的下标;2.最大值与父节点交换 - adjust_max_heap(L, length, largest) -#********** 建立大顶堆 ********** -def build_max_heap(L): - length = len(L) - for x in range(int((length-1)/2), -1, -1): - adjust_max_heap(L, length, x) -#********** 堆排序 ********** -def heap_sort(L): -#先建立大顶堆,保证最大值位于根节点;并且父节点的值大于叶子结点 - build_max_heap(L) -#i:当前堆中序列的长度.初始化为序列的长度 - i = len(L) -#执行循环:1. 每次取出堆顶元素置于序列的最后(len-1,len-2,len-3...) -# 2. 调整堆,使其继续满足大顶堆的性质,注意实时修改堆中序列的长度 - while (i > 0): - L[i-1], L[0] = L[0], L[i-1] -#堆中序列长度减1 - i -= 1 -#调整大顶堆 - adjust_max_heap(L, i, 0) -``` -### 冒泡排序 (Bubble sort) - -![](/images/SortingAlgorithm/冒泡排序.gif) - -冒泡排序思路比较简单: - -1. 将序列当中的左右元素,依次比较,保证右边的元素始终大于左边的元素; -( 第一轮结束后,序列最后一个元素一定是当前序列的最大值;) -2. 对序列当中剩下的n-1个元素再次执行步骤1。 -3. 对于长度为n的序列,一共需要执行n-1轮比较 -(利用while循环可以减少执行次数) - -```python -#冒泡排序 -def bubble_sort(L): - length = len(L) -#序列长度为length,需要执行length-1轮交换 - for x in range(1, length): -#对于每一轮交换,都将序列当中的左右元素进行比较 -#每轮交换当中,由于序列最后的元素一定是最大的,因此每轮循环到序列未排序的位置即可 - for i in range(0, length-x): - if L[i] > L[i+1]: - L[i], L[i+1] = L[i+1], L[i] -``` - -### 快速排序 (Quick sort) - -![](/images/SortingAlgorithm/快速排序.gif) - -快速排序的基本思想:挖坑填数+分治法 - -1. 从序列当中选择一个基准数(pivot) -在这里我们选择序列当中第一个数作为基准数 -2. 将序列当中的所有数依次遍历,比基准数大的位于其右侧,比基准数小的位于其左侧 -3. 重复步骤1.2,直到所有子集当中只有一个元素为止。 - -用伪代码描述如下: -- i =L; j = R; 将基准数挖出形成第一个坑a[i]。 -- j--由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中。 -- i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中。 -- 再重复执行2,3二步,直到i==j,将基准数填入a[i]中 - -```python -#快速排序 -#L:待排序的序列;start排序的开始index,end序列末尾的index -#对于长度为length的序列:start = 0;end = length-1 -def quick_sort(L, start, end): - if start < end: - i, j, pivot = start, end, L[start] - while i < j: -#从右开始向左寻找第一个小于pivot的值 - while (i < j) and (L[j] >= pivot): - j -= 1 -#将小于pivot的值移到左边 - if (i < j): - L[i] = L[j] - i += 1 -#从左开始向右寻找第一个大于pivot的值 - while (i < j) and (L[i] <= pivot): - i += 1 -#将大于pivot的值移到右边 - if (i < j): - L[j] = L[i] - j -= 1 -#循环结束后,说明 i=j,此时左边的值全都小于pivot,右边的值全都大于pivot -#pivot的位置移动正确,那么此时只需对左右两侧的序列调用此函数进一步排序即可 -#递归调用函数:依次对左侧序列:从0 ~ i-1//右侧序列:从i+1 ~ end - L[i] = pivot -#左侧序列继续排序 - quick_sort(L, start, i-1) -#右侧序列继续排序 - quick_sort(L, i+1, end) -``` - -### 归并排序 (Merge sort) - -![](/images/SortingAlgorithm/归并排序.gif) - -1. 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个典型的应用。它的基本操作是:将已有的子序列合并,达到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。 -2. 归并排序其实要做两件事: - - 分解----将序列每次折半拆分 - - 合并----将划分后的序列段两两排序合并 -因此,归并排序实际上就是两个操作,拆分+合并 -3. 如何合并? - - L[first...mid]为第一段,L[mid+1...last]为第二段,并且两端已经有序,现在我们要将两端合成达到L[first...last]并且也有序。 - - 首先依次从第一段与第二段中取出元素比较,将较小的元素赋值给temp[] - - 重复执行上一步,当某一段赋值结束,则将另一段剩下的元素赋值给temp[] - - 此时将temp[]中的元素复制给L[],则得到的L[first...last]有序 -4. 如何分解? - - 在这里,我们采用递归的方法,首先将待排序列分成A,B两组; - - 然后重复对A、B序列分组; - - 直到分组后组内只有一个元素,此时我们认为组内所有元素有序,则分组结束。 - -```python -# 归并排序 -#这是合并的函数 -# 将序列L[first...mid]与序列L[mid+1...last]进行合并 -def mergearray(L, first, mid, last, temp): -#对i,j,k分别进行赋值 - i, j, k = first, mid+1, 0 -#当左右两边都有数时进行比较,取较小的数 - while (i <= mid) and (j <= last): - if L[i] <= L[j]: - temp[k] = L[i] - i += 1 - k += 1 - else: - temp[k] = L[j] - j += 1 - k += 1 -#如果左边序列还有数 - while (i <= mid): - temp[k] = L[i] - i += 1 - k += 1 -#如果右边序列还有数 - while (j <= last): - temp[k] = L[j] - j += 1 - k += 1 -#将temp当中该段有序元素赋值给L待排序列使之部分有序 - for x in range(0, k): - L[first+x] = temp[x] -# 这是分组的函数 -def merge_sort(L, first, last, temp): - if first < last: - mid = int(((first + last) / 2)) -#使左边序列有序 - merge_sort(L, first, mid, temp) -#使右边序列有序 - merge_sort(L, mid+1, last, temp) -#将两个有序序列合并 - mergearray(L, first, mid, last, temp) -# 归并排序的函数 -def merge_sort_array(L): -#声明一个长度为len(L)的空列表 - temp = len(L)*[None] -#调用归并排序 - merge_sort(L, 0, len(L)-1, temp) -``` - -### 基数排序 (Radix sort) - -![](/images/SortingAlgorithm/基数排序.gif) - -1. 基数排序:通过序列中各个元素的值,对排序的N个元素进行若干趟的“分配”与“收集”来实现排序。 - - 分配:我们将L[i]中的元素取出,首先确定其个位上的数字,根据该数字分配到与之序号相同的桶中 - - 收集:当序列中所有的元素都分配到对应的桶中,再按照顺序依次将桶中的元素收集形成新的一个待排序列L[ ] - - 对新形成的序列L[]重复执行分配和收集元素中的十位、百位...直到分配完该序列中的最高位,则排序结束 -2. 根据上述“基数排序”的展示,我们可以清楚的看到整个实现的过程 - -```python -#************************基数排序**************************** -#确定排序的次数 -#排序的顺序跟序列中最大数的位数相关 -def radix_sort_nums(L): - maxNum = L[0] -#寻找序列中的最大数 - for x in L: - if maxNum < x: - maxNum = x -#确定序列中的最大元素的位数 - times = 0 - while (maxNum > 0): - maxNum = int((maxNum/10)) - times += 1 - return times -#找到num从低到高第pos位的数据 -def get_num_pos(num, pos): - return (int((num/(10**(pos-1))))) % 10 -#基数排序 -def radix_sort(L): - count = 10 * [None] #存放各个桶的数据统计个数 - bucket = len(L) * [None] #暂时存放排序结果 -#从低位到高位依次执行循环 - for pos in range(1, radix_sort_nums(L)+1): - #置空各个桶的数据统计 - for x in range(0, 10): - count[x] = 0 - #统计当前该位(个位,十位,百位....)的元素数目 - for x in range(0, len(L)): - #统计各个桶将要装进去的元素个数 - j = get_num_pos(int(L[x]), pos) - count[j] += 1 - #count[i]表示第i个桶的右边界索引 - for x in range(1,10): - count[x] += count[x-1] - #将数据依次装入桶中 - for x in range(len(L)-1, -1, -1): - #求出元素第K位的数字 - j = get_num_pos(L[x], pos) - #放入对应的桶中,count[j]-1是第j个桶的右边界索引 - bucket[count[j]-1] = L[x] - #对应桶的装入数据索引-1 - count[j] -= 1 - # 将已分配好的桶中数据再倒出来,此时已是对应当前位数有序的表 - for x in range(0, len(L)): - L[x] = bucket[x] -``` - -## 运行时间实测 - -10w数据 -``` -直接插入排序:1233.581131 -希尔排序:1409.8012320000003 -简单选择排序:466.66974500000015 -堆排序:1.2036720000000969 -冒泡排序:751.274449 -#**************************************************** -快速排序:1.0000003385357559e-06 -#快速排序有误:实际上并未执行 -#RecursionError: maximum recursion depth exceeded in comparison -#**************************************************** -归并排序:0.8262230000000272 -基数排序:1.1162899999999354 -``` -从运行结果上来看,堆排序、归并排序、基数排序真的快。 -对于快速排序迭代深度超过的问题,可以将考虑将快排通过非递归的方式进行实现。 - -## Resources - -1. [算法导论》笔记汇总](http://mindlee.com/2011/08/21/study-notes-directory/) -2. [八大排序算法的 Python 实现](http://python.jobbole.com/82270/) -3. [数据结构常见的八大排序算法(详细整理)](https://www.jianshu.com/p/7d037c332a9d) diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" deleted file mode 100644 index 0d4afa96a..000000000 --- "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" +++ /dev/null @@ -1,114 +0,0 @@ -###子集合问题 - -####78. Subsets - -子集合是全排列的好朋友,也是combination组合的好朋友,排列·组合·子集,他们三个都是好朋友. - - -#####从空开始加 - -同样先来看'ABC' - -``` -def recsubsets(sofar, rest): - if rest == '': - print sofar, - else: - recsubsets(sofar, rest[1:]) - recsubsets(sofar + rest[0], rest[1:]) - -def listsubsets(s): - recsubsets('',s) - - -listsubsets('ABC') -``` - -##### 市面流行思路 - -市面上流行的思路: - -- [[],[1]] 是 [1] 的子集合 -- [[],[1],[2],[1,2]] 是 [1,2] 的子集合,实际上就是1的子集合们加了一个2 - - -所以用python写起来也很简单/精美 - -``` -def subsets(nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - results = [[]] - for num in nums: - results.extend([result + [num] for result in results]) - return results -``` -我在这里犯过错,所以这一句 - -`results.extend([result + [num] for result in results])` 实际上等于: - - -``` -tmp = [] -for result in results: - tmp.append(result + [num]) -results.extend(tmp) -``` - - - - - -#### 90. Subsets II - - -要去重了,比如如果有 [1,2,2],那么解答为: - - - [ - [2], - [1], - [1,2,2], - [2,2], - [1,2], - [] - ] - - -现在来观察规律,与之前有不同之处是我们需要一个位置来mark,因为不再需要往之前出现过的地方再加了,看这个: - - -``` -[[],[1]] 是 [1] 的子集合 -[[],[1],[2],[1,2]] 是 [1,2] 的子集合,实际上就是1的子集合们加了一个2 -新来的2不能再从头开始加了,它需要从[ .., [2],[1,2] ]加 才是合理的 -``` - -所以看到非常精妙的代码 - - -``` -def subsets(nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - nums.sort() - result = [[]] - temp_size = 0 - - for i in range(len(nums)): - start = temp_size if i >= 1 and nums[i] == nums[i-1] else 0 - temp_size = len(result) - #print start,temp_size,result - for j in range(start, temp_size): - result.append(result[j] + [nums[i]]) - print result - -subsets([1,2,2]) -``` - -这里这个start是来记录了之前一次数组的长度,temp_size记住目前数组的长度,然后用这个来达到去重的目的,非常聪明 - diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\346\200\273\347\273\223.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\346\200\273\347\273\223.md" deleted file mode 100644 index 99fcba752..000000000 --- "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\346\200\273\347\273\223.md" +++ /dev/null @@ -1,120 +0,0 @@ -# 1 -```solution```下自定义函数```func(self, fargs, *args, **kwargs)```, 调用时使用```self.func()```的格式 - -# 2 -```not fargs``` 和 ```fargs == None```不一样,前者```fargs```可能为[], '', 0, etc - -# 3 -递归问题 -Any problem can be solved using dp. Solving using a greedy strategy is harder though, since you need to prove that greedy will work for that problem. There are some tell-tale signs of a problem where greedy may be applicable, but isn’t immediately apparent. Example: - -- Choice of an element depends only on its immediate neighbours (wiggle sort). -- Answer is monotonically non-decreasing or non-increasing (sorting). This is also applicable for LIS for example. -- Anything that requires lexicographically largest or smallest of something. -- Anything where processing the input in sorted order will help. -- Anything where processing the input in forward or reverse (as given) will help. -- Anything which requires you to track the minimum or maximum of something (think of sliding window problems). - -There’s matroid theory which deal with greedy algorithms, but I don’t really understand it. If someone does, I’ll be super grateful to them to explain it to me in simple language! - -In general, try to see if for a problem, the solution doesn’t depend on a lot of history about the solution itself, but the next part of the solution is somewhat independent from the rest of the solution. These are all indicative of the fact that a greedy strategy could be applicable. - -# 4 -[Counter.elements()](https://docs.python.org/2/library/collections.html) - -# 5 -测试案例写法 - -```python -import unittest -class Solution(object): - def isMatch(self, s, p): - """ - :type s: str - :type p: str - :rtype: bool - """ - m, n = len(s), len(p) - dp = [ [0 for i in range(n+1)] for j in range(m+1)] - - dp[0][0] = 1 - - # init the first line - for i in range(2,n+1): - if p[i-1] == '*': - dp[0][i] = dp[0][i-2] - - for i in range(1,m+1): - for j in range(1,n+1): - if p[j-1] == '*': - if p[j-2] != s[i-1] and p[j-2] != '.': - dp[i][j] = dp[i][j-2] - elif p[j-2] == s[i-1] or p[j-2] == '.': - dp[i][j] = dp[i-1][j] or dp[i][j-2] - - elif s[i-1] == p[j-1] or p[j-1] == '.': - dp[i][j] = dp[i-1][j-1] - - return dp[m][n] == 1 - - -class TestSolution(unittest.TestCase): - def test_none_0(self): - s = "" - p = "" - self.assertTrue(Solution().isMatch(s, p)) - - def test_none_1(self): - s = "" - p = "a" - self.assertFalse(Solution().isMatch(s, p)) - - def test_no_symbol_equal(self): - s = "abcd" - p = "abcd" - self.assertTrue(Solution().isMatch(s, p)) - - def test_no_symbol_not_equal_0(self): - s = "abcd" - p = "efgh" - self.assertFalse(Solution().isMatch(s, p)) - - def test_no_symbol_not_equal_1(self): - s = "ab" - p = "abb" - self.assertFalse(Solution().isMatch(s, p)) - - def test_symbol_0(self): - s = "" - p = "a*" - self.assertTrue(Solution().isMatch(s, p)) - - def test_symbol_1(self): - s = "a" - p = "ab*" - self.assertTrue(Solution().isMatch(s, p)) - - def test_symbol_2(self): - # E.g. - # s a b b - # p 1 0 0 0 - # a 0 1 0 0 - # b 0 0 1 0 - # * 0 1 1 1 - s = "abb" - p = "ab*" - self.assertTrue(Solution().isMatch(s, p)) - - -if __name__ == "__main__": - unittest.main() - - - -输出: -........ - -Ran 8 tests in 0.001s - -OK -``` diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\347\273\204\345\220\210\351\227\256\351\242\230.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\347\273\204\345\220\210\351\227\256\351\242\230.md" deleted file mode 100644 index 33f295e82..000000000 --- "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\347\273\204\345\220\210\351\227\256\351\242\230.md" +++ /dev/null @@ -1,84 +0,0 @@ -### 组合问题 - - -#### 77.Combinations - - -##### 会超时的recursion - - - -``` -class Solution(object): - def combine(self, n, k): - """ - :type n: int - :type k: int - :rtype: List[List[int]] - """ - ans = [] - self.dfs(n, k, 1, [], ans) - return ans - - def dfs(self, n, k ,start, lst, ans): - if k == 0 : - ans.append(lst) - return - for i in range(start, n+1): - self.dfs(n, k - 1, i + 1,lst +[i], ans) -``` - -理解方式 - -``` - - 1 2 3 - 12 13 14 23 24 34 -``` - -可以参照这里 - - - - - -##### 市面上流行解法 - -递归的思想: n选k - -- 如果 k==n ,则全选。 -- n > k 又可以分成两类: - - 选了n, 则在余下的n-1中选k-1 - - 没有选n, 则在余下的n-1中选k - -注意一下会有两个base case,因为k在不断减小和n在不断减小,所以写起来可以这样: - - -``` -def combine(n,k): - if k == 1: - return [[i+1] for i in range(n)] - if n == k: - return [range(1, k+1)] - # choose n , not choose n - return [r + [n] for r in combine(n-1,k-1)] + combine(n-1,k) - - -print combine(20,16) -``` - - -#### 39. Combination Sum - - -使用正常递归思路 - - -#### 40. Combination Sum II - -重复做跳过处理 - -#### 216. Combination Sum III - - -#### 377. Combination Sum IV diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\351\200\222\345\275\222_recursion.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\351\200\222\345\275\222_recursion.md" deleted file mode 100644 index 413872965..000000000 --- "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\351\200\222\345\275\222_recursion.md" +++ /dev/null @@ -1,39 +0,0 @@ -#递归 Recursion - -### 递归 - -递归绝对是一个非常重要的概念。比如安利? 不断的delegate,本来想要完成1000个人的销售,找10个人,每人完成100人的,这10个人每人再去找10个人,每人完成10人的销售,这样就完成了1000人的销售(不懂安利是否这样,拿来举例)。 - - -递归之所以重要,这里面存在的概念太多了,首先上面这个例子里面就有divide and conquer的意思,把task divide小,然后来解决它。 - - -同样有趣的例子 → 吃完一个bowl of chips: - -- for loop,知道多少薯片,然后从0开始吃到最后 -- while, while 碗里还有薯片,就吃 -- 递归,吃一片,然后继续吃剩下的 N - 1 片,直到碗里的薯片数量只剩下0片了 - - -典型的例子: - -- pow(x,n) -- isPalindrome -- TowerofHanoi -- binarySearch - - - -### 链表, 树, 图 - -链表(linked list) 是数据结构的基础,而链表本身就是具有递归特性的,看C++中对于linked list node的定义, next指向本身这样的结构,就是再这个node定义还未完成之时,我们已经指向自己。 - - -``` -struct node{ - int data; - node* next; -}; -``` - -binary tree定义就是靠递归来实现的。 From 92ba0f667e6aefc23116d1cac684a17f11613ef3 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 2 Jun 2018 22:41:29 +0800 Subject: [PATCH 0513/2496] update --- README.md | 10 +- docs/Interview/Google/Google.md | 59 --- docs/Interview/PPd/ppd.md | 91 ---- docs/Interview/WePay/WePay.jpg | Bin 492900 -> 0 bytes docs/Interview/WePay/WePay.md | 34 -- docs/Interview/WePay/power_number.md | 36 -- docs/Interview/pocketgems/pocketgems.md | 121 ----- ...\275\215(Java)\346\200\273\347\273\223.md" | 426 ------------------ 8 files changed, 1 insertion(+), 776 deletions(-) delete mode 100644 docs/Interview/Google/Google.md delete mode 100644 docs/Interview/PPd/ppd.md delete mode 100644 docs/Interview/WePay/WePay.jpg delete mode 100644 docs/Interview/WePay/WePay.md delete mode 100644 docs/Interview/WePay/power_number.md delete mode 100644 docs/Interview/pocketgems/pocketgems.md delete mode 100644 "docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" diff --git a/README.md b/README.md index 3813dccd2..855e56fd8 100644 --- a/README.md +++ b/README.md @@ -2,15 +2,7 @@ ## 1. [LeetCode 题解和总结](/docs/Leetcode_Solutions/) -## 2. [面试问答](/docs/Interview/) - -* [面试总结](https://github.com/apachecn/LeetCode/blob/master/docs/Interview/%E5%BC%80%E5%8F%91%E5%B2%97%E4%BD%8D(Java)%E6%80%BB%E7%BB%93.md) -* [Google 面试题](/docs/Interview/Google/Google.md) -* [pocketgems 面试题](/docs/Interview/pocketgems/pocketgems.md) -* [WePay 面试题](/docs/Interview/WePay/WePay.md) -* [PPd面试题](/docs/Interview/PPd/ppd.md) - -## 3. [算法模版](/docs/Algorithm_Templates/) +## 2. [算法模版](/docs/Algorithm_Templates/) ## 推荐的一些LeetCode网站 diff --git a/docs/Interview/Google/Google.md b/docs/Interview/Google/Google.md deleted file mode 100644 index d14b8fae0..000000000 --- a/docs/Interview/Google/Google.md +++ /dev/null @@ -1,59 +0,0 @@ -### 第一轮: -1. Talk about the work experience of you - - -2. 算法题:给一个number,例如21200, - - - -Idx: 0 1 2 3 4 -Number: 2 1 2 0 0 - -- 0th位置有个2,并且整个number里面有2个0; -- 1th有个1,所以整个number里面有一个1; -- 2th有个2,所以整个number里面有两个2; -- 3th有个0,所以整个number里面有0个3; -- 4th有个0,所以整个number里面有0个4 - -满足这个property的number是self_describing的 -叫你写一个函数 -def self_describing(self, number), return 这个number是不是满足self_describing,True or False - - - -3. 算法题,面试官自己工作中的,写了一串, -- 问你是```BFS```还是DFS, -- 问你是```recursive```还是iterative,recursive方法有什么limitation -- 不管结果,你给他的代码转换成```iterative``` or recursive - - - - -### 第二轮: -1. talk about the most challenging work that you have been worked on - - -2. HashTable 和 BST的比较,你知道什么说什么,时间复杂度,实现,插入,删除,查找 - -3. HashTable 和 BST 的concurrency对比 - - - -4. 算法题 - -首先,morse_code = { - 'a': '..', - 'b': '.-', - 'c': '...', - ‘d’: '-' - , - , - ......... - } -给你一串words, -- 例如['ab','cd'],这时候因为words里面的两个word的对应的morse_code是一样的,所以我们返回他们的morse_code,即['...-'] -- 再例如有很多words,有着相同morse_code的words很多,你要返回所有相同morse_code 的words所对应的那个morse_code,例如['...-', '..'] - - - - diff --git a/docs/Interview/PPd/ppd.md b/docs/Interview/PPd/ppd.md deleted file mode 100644 index 74b73713d..000000000 --- a/docs/Interview/PPd/ppd.md +++ /dev/null @@ -1,91 +0,0 @@ -# 第一轮(一个很nice的QA小姐姐) -### 1. 介绍自己及相关项目 - -### 2. 一道简单算法热身,2个排好序的数组,如何取出它们中相同的元素 -答:O(N),就是两个数组同时从```index = 0```开始比较,小的往前进一步,如果相同就加入到```res```中,这样```n```步肯定可以走完。所以是```O(N)``` - -### 3. 类是怎么加载的 -答:五大步骤:加载、验证、准备、解析、初始化,其中解析根据是静态绑定还是动态绑定, 略... -详见[类加载机制](https://blog.csdn.net/ns_code/article/details/17881581),当时在这里看到的,就记了一下 - -### 4. GC 的原理 -答:没引用的对象就是可以回收的了,不定时选择回收与否, 略... - -### 5. 栈和堆内存的区别 -答:略... - -### 6. 永生代是什么,为啥要有这个 -答:略... - -### 7. Spring如何实现AOP和IOC -答:略... - -### 8. 平常开发管理代码用什么方法,Git clone 还是 Git branch,解释一下它们的区别 -答:平常用Git branch,就是按照功能,bug修复开分支,不断merge, 略... - -### 9. 解释RESTful的好处 -答:根据方法不同判断api的功能,非常方便,略... - -### 10. 遇到的困难和如何解决的 -答:略... - -### 11. 你有什么问题要问我的 -答:内心。。没啥要问的哈哈哈😂,略... - - -# 第二轮(一个很严谨的后端开发小哥哥) -### 1. 45分钟做了一套java试题(20单选,2编程,2问答) -反馈:说我做得还可以 - -### 1. 介绍自己及相关项目 - -### 2. 简单解释下面向对象的基本概念:继承、封装和多态 -答: -- 继承就是说现在有一个类A,我们如果想要有更多的有着相同功能的类,那么只要继承最开始的这个类A,我们就可以拥有跟类A一样的功能,根据自己条件的不同还可以对A的方法进行重写或者重载 -- 封装使得内部功能和外部隔离开来,一来安全,二来可以更加具有模块化 -- 多态就是说,类似于Father f = new Son();这种,这种可以用于任何时候我们想应用更加specific功能的时候,此时多态就产生效果了。嗯,多态其实就是基于同一个接口,使用不同的实例就可以使用不同的功能 - -### 3. Java应用程序有没有可能内存泄露?具体场景。如果有一个Java应用程序在生产上发现有内存泄漏问题,作为开发人员你打算如何对其进行问题定位?现在就有这么一个程序,代码也给到你,你怎么弄?流程思路? -答:第一印象是使用测试工具,先进行模块化检测,我一般手动,注释掉一部分然后检查,采用二分法,一般可以定位到,然后仔细检查下代码逻辑,看看会不会有长期不用的对象仍然被引用着。我觉得工业上肯定会有很多高级工具可以检查内存,但是目前我还没有使用过 - -### 4. 简单讲讲哈希表的数据结构和算法(get/put操作)。 -答:略...小学生题目不会估计就GG了 - -### 5. 如果有一个100G的大文件(假定文件里头都是一行行的字符串记录、每个记录约100个字符),要求对这个文件进行排序,请给出你的排序算法。 -答:过程讨论持续15分钟,先后给出3种方法不断优化。 -- 我们可以先遍历所有行,根据每行的前3个字符作为键放到一个hash结构中,这样问题已经可以用O(N^2*lgn)解决了。被否决,有可能前三个字符都是一样的,需要对整个字符串进行排序 -- 或者我们可以先搞一个Trie树,然后遍历一遍全部存好,每一最后字符再多存一个数字表示这一字符串出现次数,然后对这个Trie树进行层次遍历,依次append,返回。回复说文件有100G大小,假设你手头电脑只有8g内存。嗯嗯,我可能会采用先把所有的文件分开很多份分别处理,关键在于最后怎么合并起来还是有序的 -- 其实就是外部排序,先将这个大文件分成很多份,把这些子文件依次读入内存,并利用自定义的有效的内部排序方法(也就是我的方法吧)对它们进行排序,再将排序后得到的有序子文件重新写入外存;可以使用多路归并排序。 - -### 6. 谈谈你对软件研发生命周期过程的理解,如何确保软件的质量。 -答:生命周期主要有问题定义,可行性分析,系统架构设计,编码实现,测试,验收,最后维护。至于确保软件的质量,就是要选用好的,合适的软件生命周期模型。 -大概模型有瀑布模型,螺旋模型,快速原型模型。 -- 需求明确,使用瀑布模型; -- 需求很不明确,快速原型模型; -- 项目不确定性太多使用螺旋模型 - -### 7. 你是如何管理自己的时间的?举一个你设定并达成目标的例子。 -答:略... - -### 8. 你如何理解领导力?举一个由你主动牵头推进的事情。 -答:略... - -### 9. 谈谈你的强项和弱项,基于对自己的认识,你打算如何规划你的职业道路? -答:略... - -### 10. 你有什么问题要问我的 -答:这次我准备了,哈哈哈哈😂,不告诉你们,略... - - -# 总结: -1. 两点最重要:1)开放学习成长的心态,2)积极主动 -2. 后端开发的话,一开始协助做好单元和性能测试,做样例sample,先学习,证明有足够能力后,开始自己独立设计和开发小型模块。最重要的内容是打好基本功,写好像模像样的单元测试,养成良好的工程习惯。 - - - - - - - - - diff --git a/docs/Interview/WePay/WePay.jpg b/docs/Interview/WePay/WePay.jpg deleted file mode 100644 index 9f5eeadb506a3264da89a6f07240aac5d463eae5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 492900 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 z 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
    mbfg8m9^SPvU!`WToT68AYtsf>5~>u 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
    MQ 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 literal 0 HcmV?d00001 diff --git a/images/SortingAlgorithm/MergeSort_1.gif b/images/SortingAlgorithm/MergeSort_1.gif new file mode 100644 index 0000000000000000000000000000000000000000..a29ca19d027d9a924c7cc0fa6c56e3165a3f6784 GIT binary patch literal 376572 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

    }QeJkIV-ipUwQ@ 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

    jud*yanS5RaJpc3Dqn(b;sPjuVn#ltuP6*6 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

    ?3lek+RarTLEjty~66LEKs;+&b{U1j4Rn8ZKw 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
      s%sRFffjTVp(W^d0QC`&qH& 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 z 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� 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�rOkej5bZ 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�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 z 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

        ?QNU)<0X+e;04NFY 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

        A)d(6< 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

        HDJPFPAT?_x-GcNh*a_bg>Z`c6E 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

        w69EZ48dqr|As7*R|z1pruj@o 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%0DnikgEI(=4^3r9?;tQmGc|sDD7Mz>!A6_ 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

        oupp{4)dzj4O42=hW{cF`g@ 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‍&%%*KW9?~X z>AN_T-5gr`v7S&K6YZz&UO`qiOMjj#`XC|QllCGQF;oJYEs4e4M`%#ve)c21`p$=K zt;mS8Dl;v_?9 zABE@f+U{n$@KWY*sfQfC6?yNXj9@0cmMKEci@F|o4Ll5_pOC@l1!ay>Xcf@EI8k2? zm)0|UA?6;z;85GG`8cwii>BTtxbj=(v*B=Ib-QIlUMB*0BS`h73gjSu&qo?(BtlLy zZk%$zTo@u^OO-)F&MrE-jYAp4M7tE!i5H^Its8q)b(HtZ9ubp>-a9F~d5=ef8}GA} zf`mCcx`eZZD2O7+_J!wlB6dU3>QZc|$PD zCoKL;`o>=B!G+(eUR2`NmDgW0xl?X-Cv}S)Hem@J1?08QpJa&;8vj}GN!i1`uE?T6 zRRwC6*M~}>Qgbqf-MLnN>uHLuzGTo<4$D?vlFfW69BtcJP_D-t%Mka^yWXt}4KTW1 z_Ajd1#Rb`t)Cq_-lT8~57OC;*p7NRzVFz7Dxk z8Jnd{k+JCR1+{D0Z&4B9C}-f)0B3CIou!}9pF@m$x>T&V!jwW?Deo_DI=6GyjorHx z&p4D&j?#X)@>)yiB$w#LQyksZOAAsCRWKutDAIW!xLB{JR4Ha5aEu?=vrig5t}}(C zQKGl%7!<{|aQgMJaH4$fRA|1k(l549i-p$?eFzeWS{&pv2tbvp|C$_Ts(aPGmV>?bTAli`0osk(cz zgA^SOQ{>$a{K1dOh(DjIFC2o>**G_vNU-6u9h#ER`3qU)D%`e{Bo%_ql#fw~4yo>@ z5cGG^kw<~=6UWJ-Bcglwm-rL97QwN@Zy%^8mOBLcPWak7w5CkuZj8oNw-fc}d6N1Y z=Qher7I@0U5uaLD&OdFjJs;IwKk9YyA7nEiMV;Al?Q99bYQEQeYNr3K0t>53TkRLaWO#x1)_)M@67M?COy-aSUw3)Oq;DQmw5k{tb z#-d5IUHw&b^@VMQS!2(?TU6i8l}zw8rbXoVX9fE-U zo_R`rc{^(RLagf%%?uftiOo9E)<_^v`M=n^@1Q2$hF|zwQh|g}lnw!rV!_xbg1Qs| zX+}jwY(Z&izz8Uaic9Yh0Rbr*EQp{OMFCMTbfg&tDIyvhVvija zF*lnqUs{e1$?$LPsOHKiImBl!!Pjl=$3^a=S2-mxd0<>Z-GzD?-r2-nckI5&*7`Y+ zQlz9JnaH+Iq8Te*{IKjnZvLqpU&<1L6vn*>EQ$Or3eTh`H71zvhRs)wR0`D{RKueu zY-#Qe-O`6)+q}a=!i{+|ln+==?kseEG;Fl3$;r4rtZ${V`b|f#iImCyO&js6)>4GV#X2x>db3n5u(2}!q;wanDfHcY8*=@9w_lq^O|`o4mlmv zHazCyHGZHHDjjdk^Hn~J$84p!6x?exTnYC@Z+&SiG%BS;=MU$r$9$`;E}sOcERjPQ zs0`7M)~`LUWN*^C*Br9ey?KdwYx^`ZpHUmF{e+<`b+^@qqV*^B*T!l*d7wOldl zo5{YA1MZYDUJ;oWjriv4Fk_@~V9H22aRQ4J+0SnwAVk%12r-x7@@x@0odszbG6?-P zbEbC)(!V&OiK@=H=7s}#W=8i} zdW)w|NK{6+Cvg0Y*E7W%&z#FCmg*DEqG|mhGl+H!NM2$n6`e7P za1lRY4ktXnv4iYklBaqiBYye(qef+r0h|*({iu3;($k~OI=N+uTjsZD^$X~5?Gv@x z9SIoHlP9d$wcG@a$_7bT?2natp38+3JlYn1qo2%b8 zJqsU4G=-3}0WMF>#wc9g0?TMezu3Eqe+pXLq8Is4_a}oJ56P|4yKQhd#n#l{+i{C~ z37jx&>hv^V?b2mFu)G8W_8)^z%C4RYIqKI7erzh5=$GhXg;8>)tEnA1=55;jNOk$@ z3{3}lSLa5?2|@9$EnNjK7Rikj*pW5zeTXS4t4Z34GBe#Q6FU_FYWj#RKZ{+W^7zyW z?J_~eGK7K=w)TN;FyMDq_1EilXy-b_!mfxtbs1`q|G7&wi8z*XLH#h!11CWiI zW!G4D%Nf8wLT5NntEpu+UlXLRwegf`3|f{iuAJ|+_u=+GxpYxB8nVH$rIM*;l`@5F zVga&Qm37wLV}5Fh&FumYtAIt-A-%yxFN$8}cLg1Lnwf4hrk^?7y*&9s*8Q7fS6Dx~ znht*|^gFo5DwNQ+Pj)8!qZ@zjhhgT{Z=bP9wTW4f3G%p=5!s!(KdgNCt-sB8dLQBZ)sypn?{ar4=sWuD z>PcI7%hiQTDjDAv^H*QowSC6%`}_8Ptw0%Xmfq3qyGH+V5iNeR^n)g+o?h+BC=T*b z8yVTXthy-s_b&gMy3V5s)hExs3)m%lHvHgElX=bkb-NCvz90FnySMhSO|V#o&bDBTR%lDd;J*Q7TQ!H6OK2^eD0||&Y}iB{dnoS8d}MNDBAxG+31o$ zQTRLk|AuV-#Os=f{*7!#R1C;Us$H`FTwbHveHe z(U*ASOVIMkd8$~-(Ih9*m;V$U{rN=`h=@c$GYVe-BZX((E! z7R1_Mik>hzCq@wz9mR=sz_Wqswkp1j@^7P6J)_CoMvWrO)C5;Hfi?SWks*<)YNO7> zMux9Q|9@3<^gqYis5Z|x1Vu;x|3EgI{tqFWn>G0VmZzCYErA65e|wt0mK7@eLfPdM5iU5HE773Oh1xY3xAZdW70hs2$OB%pvz-y+Q2{=-`DXcSMnBcVn2>g!-k^n;kNDWwwa4J-WDP>3isSz+l0tSeOVFOhI+zVhpQVA2N8sKSw zssSnm2hNBCe9V-X;j{Q65f~sGNE*OvL}16KUJlR*7y{r%fR>rcs^NhspsCI+4i01! zL-3c^08fLlrXpg1rvb1A2Uk5{r~V180l-BdnDR6L)&OK9Wbiov+5CkyOwd>b{e?2% zQ1XGCVSwG?fK3FL2B;c_gbBb6P&EQ@bPFsE{Hrh;lXjKAiFDVee| zQ-TVtn+f&+EL{x53~)BU)&OL~1g8)|lJMPur@{W^X)L=Lz|%aJ5(%cxOyFq_Np1Dlv8f;- z_is&P?jkE=X*5pow)_@|uR*P@K9$%L7E@+{(3-ip^E6NP>TWfMp)90z znfk{&3pD1k?O>Kv+DJ7~KWaz+uh5#AIUux#oFt9zVM+9-LTm62HF8+9sa#+Z+a840 zq&w>$Wgsk z;S0oW204csV?k)mReWLZRA`N5*gYpY`7nnhR8?0Z*BuwIAhg59fJoo2E`MWn%;La6Ri8d)jOE!u9xMBzg-oFh!0{7E>*c3!yn3x+E?7)G~sCam{3cJ&BUR;W|5X0_e+2)V)r)5{1` zlBP3GLFUA)(WirJz1n+0Hk4=;0|wDqbP=hsU(?E(jQnx?JOTv_@XLOmSX+m?L0%wKA>V20~(XYXCV+@3jpmjdSWL{?uu zw*xei?zS(y-hFk*_2RA#T@Q$&*O8rbWVWB%TD%L3-(S19FDPJP+{|ec-)cmlCMwbO z;nVV#8ne}np)o{w{Vd6K&o8#_# zR7=;z&0C=__c;AS_(rR_?-IU4pL#xob-ghL$rbewU3y^fhDFrM@AY43(u33sl3&Wv zlq(T-3Px^E#1(k~}jU{93`Ct6HAE+;!R(iAHuT3H#FlV7pO zFC}wmiV+xbfA=%pUlZ*ZJtQ-l5krEWbYKin6Q%H6`?Nk`C)7kNb$c;u(~nNC-jHLl zP~03Ila8?wq|I$?swOJXBUE<$;L&)>+wI+o7(^X&d%0xfM{h*+XCnX5bBY5*G3>Z3 zAiIy-Y5f!{QesYBFG`@W@bsxrjHW3(nElvTA&YA2*rW{K(y4ycLp*b9rX6V0aIF29%? zj9L~v8*jh}va7UDyjbYb%n#<*dx}GXHwjRMK&u)hF)rV6Xyh1XD=+K$eB#$;+8p(W z)VJ)<=uN3XoCydM^?}s_I~;E$wCMb z>gj&;Jz{f3Nfdo``LdVRi8sa$ypI;BZ2oZIq-gXg{b$|hVymdUoBcD7ygRBTlO|_= zf2yVTt$h>oQ`WhgFBCI>^!#dgY{rRJU$!msY^v^u)^opJh&R6zbqK8Reo|rt9*)Zv{ts$h~$i&O#Tb~<6{FdyPci_#S?ziFP zliy}O{yiPjpOm~rqD2HdJZdcQ5Xo!r>pbnZ77_2mBc#ShaHk`g0Y|dJ5BlXDJk}l= zw1fPegg0135%Y1?@Iz;uVw7v}j=MPi9gkIuzIQI-zSBXq{3Ee7M=}Sa^(Zj~FOjzx zZeqFDNIlMVFsy$tCgyttQxe&0arkQZ(T#_)2f~VaML|k~N1}CUAFsQ{cy{CfYxF{pkS~c%~$Y-{YTL^b$6cAe{mQGhr+$ zAc0<_{X(P@J1Tm4z&?C;EDO2r#Z%$!zF?G9Uz<8@Lzcc3jb?%9TgkFk422u;61v79 z7ZI#2vZIM0CeBR=hX=ykWtJId#<`tI?gKf{3Ju5zC)yu}AIQ(yG?;teANo1Y zU6t&<$q8ApGL4D5uapMeUmt%b0or<;keUpw)gW!ej`z3m|BNB~1w?NVa&jm6#{d#8 zIW9O)oGm)~YkjI}xZEKQQ8-L6F@SJj>PUD=*z_Lc}~t+ryyHCk%p7@vWUz0gxk}}sth;~ zCxZx)m*zq1l5<={c6<4xy0Co|Az_HBu*Wp_MPTM}mEy2dEPp|ey^vsolLJMtgOJ)k zJ+J>8M8&|&rQgH-oZAK-nxJzK|XX7ZW*B(jEq7 zi&Q@7<(^`4TzwL44O{Lahg!uZuV<5pP6`J_w9k^#3ebo|a zk3$-Kfj%?Ha;32vAFda{HhfaQ`N^K#Y#JNZ;KNE7ykYRzT9)OX+Zj8Cxg?f@~FBF~Ri_76bAS2fAZeL~{$mMnE3;Q{>?`1P}+|SaAH&xq=@g;#?7! z!A9;&_$iQ_H%DPEMA{-H=}IrBK;&=+?a#NfGdg%PaO!&zX}MH}`iaP)B1NJx@hFR8 zo+|eUBWYsiwha|h6Xi;9YPaM{EJKdrR9Mb0ohyIUSBfr7j?7pR6wJvhF6R!j3AGsQ z_JmwAMi`V!KUvP*BqV*w<{F9e?U@uPPT++*U+#?St0t&I$mpw}Z)N8lr4B^uGy2mmvC&Ea6=o5NFgQX`^Sh24%qN}^Uhg0g7E1^t09)MLvLfghOoofo2QI9g@`bOft!sEXD~o zBULw(ct3fhDnV(H3GpF^sv<=Kcyg`h>Aoy-ne=M6+O<2S7gsVWN$hJYRpsyC-0PeZ z47uvZueeli*6oN2r<6;_Vgh@6?N4ymDAbSRo-)YC#PW>KTE&;7w5sKoh)Rpm3CM zq$dzjgU%>QDf$fgtFGX^5OKv(e?HtZQAw&uTWSiMux~1ioc%+R3lbu!?4x3NQmO>m zA|}c9u#W2D^$#{(8MWRUA|>y`O#UEr+jOX?FF~}EK4=>f>%xEOhsQz|pTWM_anaxG#iWJ8%(VGBK@BSMO;%sfUa2l`G zM2tp>YlB5FiywW$yRm10vKB(CMRwW@#DNo<--Xs4Y}Lac3(ieXYE9^Qf~v&Ke;9hB zkzuf_=UGzE3mcLShIE({B3UbXx~ZlD==s~`%n|O65o1qn*h7+Q=msfB(}S6mVEOd% z$n3n&u%{bAM?7@!z$r%krO5)Zqyx@+7qIZ=jp#yniOqFQ_jZ{-&2W^o86vqA?3pbh zf?hjzCozS8v-4m_y$N{@k5qxfXPMMc12mi%i`vL=&wlS5q2 zpayWL-wNqRL0y-qUtzqz>b1bKTE1RRAt4bV^6z(4-`}FM&!>=^&Zqb_K^RZLUxNB2 zUN4Z(p|c4D!Qvgz3yP+W2t6Tnd<5{Hbtat#kn7zu@9#%iFBbiU-%axIX_7j6zN^T?CbE8VRZA zYxRTY~nS;|+i9?6!oZoTKzYt-rGqDSxRW2D8Wjo3MHoIzC_io@nGdLM6{d*M$y7pBwY z_*^v!YJ*ML3~rCaL@HTb$yGj)c1=9%ell0cM;ur!v%4MUrq$}{o(b7~z_1rJ>K(c_ zE3>Ec;`AtZBOjGbLUh)%3SFp>Mz4E6T=I+C`_NwvtmqBO);?pzAe~^>?MORqkqkvS zB8tC_F=<^S$G2nPsnn{yV=2UzlGZO#@P_1k9_-;Ss^X&*X4J zIT45tEo-buv#7FHJ1Y6fJ&3>Yvwv^#(jzjGj`x?qduQEGIu?6>-H8}%HKPfP?Z_y2 z0F3(N*^66#m$gY9i(A``hDZi1Tt{%!SiRJwfalrFo=08gcK^{85{W23Yj;c%N7T56 z>=FSUqQ9HRvsa}(l=C^WKLn+!-}HDdnHIl)nu)(fr!}g*vN2~yZYMLEq>J}NGnP5G z-k2-I0O1f%h^S|C3S(5aaGITG48pUG=B1z8+%?R62MptivJ0=C=0%B=$>pX`B*hMA^lo4&t46V2@qn64BW-d%C$@4iiE?YGV?}Ah-illv6F6OR?p# z46LLryZNz-S&Xmwnw#&M;`$3pM55p9CW~%c^a*8$#az<4HA$x93+nI`E zdXHw=$1d!CA|K0fl=-yvTEEIsxunKksd9Xs|HcbxMi-m|VyIuN(B#5)?XcAsYsTt! zU!n$Gt(|WtYQ9CjA`qpy5kEF2L*wp*IE55zGb=kcfdnNi;DMl=B|;It*g&dZFX5Fq z4ocf*%*#+U7;-#2-voMYu|ux}%A}=MU6MGRF3$D#TEp}4BS594F48yE$CeheLCpPg-V3Fx{vNA=Vnxb45 z4NHPTMMn*=+KBUMKDr`QO$4>l%Qmymq+-)Io|Ly1ur<=m-{OSdtN@R0!Xlh%+5rb# z^&;MrQ9?6M5_>%2tW*>S70V_X4P|UHZFA3pjlaC**45fg z*PO+rH8st=B7%&iOzLMPD%nnqlN>~jVYAnTgzQb$Ss;KFhP06@tU^khg!E`*XQg^g zPT%?6Ci_k&Dd&Rs7Ks71uwrGEO^p(HT%T|XdN$&~J(s-W8 z&`_HnbZ{lNO!QnjI5A^NfJv;f$#Ige?0);}AKL znCV^uB1?$P+7F@XS1}heLKC{?=ed;I>ril(@t7&1-7VvQ)%*`U| z^ns-SrWvxD<5Z+}vpYEPMsBAojBomHez9b5g{3>%Em%BnZ+hY8Z`Bs@U9InT z)^Ad}-)kZKOcU*^uNeLDVBki&&K~^S(~&Rxr`Ho@?;=NUa7Z)c8txyP7lpF7eRve! z@N?AcNd23~?+`B$V#JDBID4~_YgMDM<7N3RGkpB5!W&c{RmRt+`ha-yh#T5%m5Ix3 z9x?JFat*&-4p?jBYmhzGcrTq5<)gjr_0znz``700-@AE>&WHS(rSuRey68otNo~hA zqfbXq7Cu+&Q@J%g@KgMz_NOKr!aMI>ymHJm)z7T!g=k;G?EJ3^{__{+bwAp&Ag9mf z*<#n)o_mKshd!J0(&L`Sow(soryoCkv2;US{o#g-dvirkq0LO2B9g6go5|>#=q_

        pVnLYCjp1cNh5v$>&4Z%631*IRc)sYt+y6`_C4FSUYtw?e(fEb%LVbd_*pN8!D)~ z<-z%SsOm|Mv>~$Q@`M`+>p2zKN~(8mxyuME$Xrkp94pG!Jz*lZP(^Td-+#W;ELWaLl6pK<~bW&qd7w zxu*Qt3FGeoJwe)=t;?W3;^;SJwMKO7mnVNTc+tIk8wM5jYf zr`?KZvuOBuPtvwjd-;LR4Z7&(hy!CU>TrZ1`h1dncznh3$a~qcC|G{nR?+1aSfz|m zbj0qB-|~ZZz6&5?($aVPw*Az8C?gae)EW zw{d#dR85q6PNT+|M$M~@S}l#*{f#=$8+Acw4WWst+VsElH243fnyCM;dz#4t05tv= z(J-v3d4HyODzrty0~s8^2S9)~;GBQ5U<8l=s0}d)f|*Kw0px@ynyNDbQ~|`Pi2jDc z@c$7k*gt%Q1L9i#355ZI1;7*lC?udV2oeLq0%QmiVsIcfU=#p3h^K0Q7{C_*paJX( z2e=oAk3npJO@K(@bD00A6^sD^$G`$=MF84?KpM+GWlC%iYXW!(G!@h$g1}z_9O4ND zK$S>=R{?MZU=^TNfKdU-FF>sbK(-6m1_m2272rpJIpI&mj0pY)zDOWI9KdV9q69n+ zup$h}--H*i!Ax*CL|}ITL7CDf0`NT&Kp_A`0UQO04S-4b07?K<1JDVmO9Ju)0`dgN z5e|STz=r^u0w4;`5b&TWd;$~-20#h}10n?nUxIj3bO&rS2NL`PQKqbjm<1RKuo_cK z0bT=a0aF6}i3l9=DXt?03I!k&U`~KS5ktbisV?Af|1~E9K5!jVq~sq%A_jB>m=hpR zz*>Pk0Te{|PiPD9CxD0mf&vf-*exJWfP(>^1V|DA6J)DkK#~ZBfTR4|jWB>1naXwn znJi2Q6N82D89EgBC}>3jUtx+R zOdOmBtbY#!Q^aAi!SI9Qh%@l*}fJA~=z@-SLK3D*y2$^DlRluvk$pWMb&?$hX zfQ{ud!Kg7LVwM1~8WEr^AUOt{%^*7m7$K=x#FmJ`xU*RpI7?U<6Sy3f0B8JP%JRQS zS=3{cjU^bHL0~XIG>p*{W%px z)i~05A>xX-Sk4zAt0>#;k(H9WE>rzWY{p;8!Vr^{EsQWx^2!cry8QN1K}(u#^{X|M z1q!D`WS!>>B5LByY$Tg-h0z)wY%r^W{zF-Ec^#(ao7DqU!Rh!Txl%9M1em=SrVowOEBNAWacCTM8nXSc2p`?Op`M&!f+bF@MsKT z;L!ZyoH*gR0V*&TsOBCMM^6ceIpK~e{<|i=&uYQSA zbx^jlS&1vKa)i;hG>q=rlB~+mEQNQqBDsqTCIz_s=YiRKov4y0amp@Nm0J~31iX)m zHtMLWBQ*}gPRmjv5afxS#K<-e%e-jLu@W(sm#;e}~SogMPxf#?shnMkaU@Qzwkms!*1M z$KCgO`I{kA7-cb9i)rEoPI{|FBJ?zACd0*Kb7*>%!f4LXW?L;!m`k={mze3yd?-Q{ zqD(?+9-UbpcXpam5f4d_-4UhTG1Om*>6`1;Pn`SxyGQ%~Cqh$j0<^`gBSY|l{+ zOSb&{q-LblPA*U6w zCO=_2D&w%!mWfwHn4oAd3#G=H+UrT+T7ww<>BmioI{A%oFh9=FP)g8rYgBwXjb5O! zdXKGhw8m>GS-Xe>lTFquJIB|lKN0MW;1<2kV#_OaOEXqO_GF6Gcwvq}(F$MveT|@1 z+vG!<`3!7sH-E0;Oeka3mGu_%y|K|u>JEXzOcVKIi18d8E)hj%sEZ6tjz59O9DL3* zQmkSN20J?&8h$OURnB3O*Mlbk=&-!}yHq=*aZN&9VwJ!7+I<>L8rNOMmJNMOBijUG zC`05v>$y+JjczS^%ku`?AQ5$;oSoHDgVJD{XiHURo<{S=Izo5$i3wTvxnD-+%ZAQ-xpiO8veM7H1-SGTJor*-*>m0_ytD7b&oAe&|HG6;^P4cq{la!y z+|2wOkgL&o+SeFR7PIW*xjh&BKdM*tM4DHPEF1`Mn!WMag#lRacN1hH0_~z9cJMX_NpSNhxs&P9sM-3Z& z?ft!OsHbxO#V%Zxi{)N%sdXRThcxE8H z=OF&;r`nCzUsX_#SC0^_{Cervkz19nk0&+r8>q{qc!d^mF+Cst68|i2X1CAlrUkhc z<4&M)?BA3nWpxpCyVs7E*%_D9{A?6=TLuKIjS!(mqJL4AEBwO`V-y_(MCaf}eqQ%; z=9?ioy?i_QIoQ7_%az=V7h1YK!K zvuDi^&-;5>;TV^Rg`Ab>o)xxEG>PrQjK7)e)r7XXO#Zmjg z50ZDgHvM`43o(KM{x0~S^$5j8RMV~#MDfDVMa-JI;)^}|ZfqI`eXzBU>)#`+=#ei* z76b+xoko#7h7@Z>WDjYKVi97;Ay5>0r3u!Xp?U20yo}0?%Uw;(dvTCEyGsdYs7<5 zycv^4?|6!qcMG3YoX*_xDqvf6pAJ9#{Mz4d!L{?iXI-fBV6l|gfe(G&x}WlV>ASs| z*2IVOFCA5f-*=z4e)7>{qW=5g*Plr@B~_2USE?+7lDAC`cgen#+dulW`{d+^&#nF4 z^PD~(czNj2(j)tCB}ToC);sh{@#OdZlPA7rzN~q$^KoeB!foT#8|d%vRQ{?8Jw!P4 zVd*$krg!Mx_eWonHcWn;#)jI_tv~MUk-hEvBONym_!)jD;^j2__nkjF6Q_-DK3TQr zP?N>7A4}S!=*9<+8RH5sqdMRt+cq5D5q@~sVt+&X;U5-w;9K3I>%b6^DNZk2{o~8cVi2kVgigoN7FtMhy_oIlP`;F z4Tw%ljD~6tc~0zETbmG~7PGN7Y-U8vb#lVCnmyYmVtpg_{|--hk(Y4Q363#ILQM#7 zEO6PKfcVzv_<=EK1{OG*6H4bmA?x8GQrumCC?{}#_gE6fNFHj7A010t9FW}W4*`F& zE#k;=%fLk#S^yLZ3n>Z=iWon9zce{yeQK9uvLZj_dTru;#}uLvIaiCc4n^J>NE|c@ zm<^?!qom&%i@R@*T%AbkF;9*yP3!pqo=-?Z|w_`BxG56`$$Fh0ye?3sKDGriX+CEW`= z(M)gljEF0&-8t5-|R8x`(<9xZ5$irH0&5$gq!kIw92=MDbB;K@O35)JQ~FyECXC&>TUw{cX6U z=9v9$_Zhdjk2-iqc_ep!t|Oj-h{(}G0*{*KB_h9yNHRBpZt`>8d8DmaCL+$T6Ugnn zo%hu_+<=waWsbP9k-aJwAm~4LJV}pZX(NR-Au7={@qQ`l#(>vj#1&H1TFCVj!*Upr z1EJdd;QNk8$yCC82jW_ZtL_HKfpz?>G^;)^@mz;h+Dc>ETH?b2)B!>{9HIsb-N8wv z@DqE!K@=9c4)fcV06omj4s8ODKbxb>;Z*E+`V29Y*#>*^VL1k=vlQLQK-cnub-+DZ zYLNRYZic!&1GJb_eXNAU>GAU!3Zm$(4`{6>MsyON-&YiT{s^0_%?Tjh`7}rWr)!wQdm#G z&0-VsaQZX>dQh39vgBmX7$5xdUO<7@N)V$O?ot*Z3K4iECy2+O4RYv<0Ei*j84RV; zSm<>8!tDpJp-7Ne7fm7~aY91_+67rF&c%Af|{68pWz`qORZ+x&4$v9wi;4 z%o1M|iz%0dygNdQZs)}=F~v)QG6O+I5O*7vy|$eDn1>c{=(A0!p)545AbH&bE}KuB z$j)~iMt8EYW-CHkSZSD7kb@Z3#*a&;XR$lceVUNLd0C1B6xul!^6M33#z*@)uQ=n# zF6^S^U{UP^cNGt{{*`GjhGz#LCQ^8hfO}Gc$ZLVD{-7CRk{(ns`xRvDo17&<@LCwH5O5GB0YIe?fk&@0$}4F*vQpr6@-rk~sl3R=d7OV!D85d9QHm@lA| zsF8Ifq^+ASvYmN{gd}%K-ZF>+sv^G(5w=3StpYhaQRTZ`dFV?;Zw^)OXP&D>{tyPw z5fG0`@<8&z0G|RE9!T67lv#)7rd;SAa|o7FI@_ov*Nc=Zj^A-CS|A|L9xfewS)RYJ zXro}3N=j)jiKrn(K@>`d%=#>ee`WT_l{Kk*woy*P?8_EBv@{SpfFpUr^Xp$$4Uo#_ z^W{1nN%o?%Fh;Oopvm$IF%ohybZt!`Nr#ENa=akNMsh8Y>B5tWe6pT|j#yrxOW~O;5_*U%C%iC&59_cWKpPU#6)K z-ek+dmt4REFn#h`J|8s^r-tE33ghz9H$~lT)EFV0!bx5#hUT+DKmtKa0GCn}+ywF* z$*ubxL^C#GjiCpu(K{r9nE(>K$zi0`G_`wtjLV?;;mk^wcKrZ%$rCRfJ8Sluie{B}+Y zG)O4fP2M7DiPC6Y|=@L<)Zpa5%hG9Rv60=IZ0<~XVUCsBisw19}dE^Y{$U@D-@ z&w=$M7hwD8DxDzilwLkQbiTOEN{b;{D1a@Bv!9;tQb~!dx^PTG z)OUo`uv-fT4*Jw}r4J=K{ydE+zA8TVB>Oq{~twMq~M*SwD#51T; zllXQa;jl)_`z0-BaN2cgp01EkC?+gpP`pLt(-n%*LTVcC&b_=lcM~!f@^|cIojWTE zpNT;PcOki0>^bXZuMs(vZA23zC)vd1l6}q#e!Kf8iJHFv^}&6eSv59= z^{cPe&!+7sx$u`V`dF;K#fSSwI~tnDp?xyJUB4!Dngqh;_7e(8w*=HPZZ}p4;dldd zm!M(mPnMzeeZLW|5t|Udz-b5LIG}v1wV-XIcYDnRJp&aco+b;$$jw<)gTu4uLz4UJ zOUwi1JA}kXOwu>ebp)cgiU|h~_tFv-H}U9C+~8b{nherI1jG?sJ|<8;l{uXAJ1TeS zg&7#%7b5Ik3;AMmN^~Gny7+pnxXXxqUn<`%2wx7NhAg59?{3u=1Z6+FlQ1$nnR*d9 z-npM_!a}9;drXT{TSt>;+=#fHzMwm(k5$z7Y9--j5bVZB%YYx@!zlE^ymz$gaR1lC z{EZU->1=56FZB0FvTOziiD6$;?2a4uf{r*M*C&mk6AztAxqZKzd=3kH%!zu!2SE}< zi-pdHU^-M{jUm8|6*SfCxtL%+uCRqi`y}Z-gDJ+-c*`V|-Asa_aSQP!ymB)oU`n}? zwo7aGi-ug81TQgh3pgm7TajNu0A-z1AS_%aCLR`-&P`oX$*pA5>csS}^^k(FX)pV^ z`a8(E^0|t}m54XbwWRl89@$Kaj_-WYOzXIy9>iwA%LQ4icQ5`p_i?sf+`jd$neYZf z3ibVdy!+9ZeK9HY%c#-?$VL(o&V+wHN?yvQnz7Jmvui6-Pb`(l>F^P|i)fGlo-2?g z_gy@%tMH2XyY!L?*;C@W3xYQ?V8%hhNhv|Ly==hkHA<#z5mat~o&tylZiDOM#1`K5 z`0?v|-@yVlW%(b4&rDJV1~21~TZM#poH!w(WXnIJeyv!(C?arWX0(oL>- zN71vsUU8^E{yjfmS%U0gkb@smb1B3bLU;kzUK8~G3-wtPBl0Ah5XDlc_o9BRy!Sby zW|M3El44>Y{azc69OTz#PF4+j&$na8sek^&^JZwska5KmR0(7}<@WxWYDCRX((=&~t*xDn1NZh9ci`+G*q1}7CmvWidi%6V|gkg)gsAoQoMr+<;*c%;#tNz zs!t}8w96KaV`K#lLv@2$PmQ(g(PPV`3~IJ<42c+L9>zQ$E2Ju{d^E)WC3pd;j~V^vXZvfFk?r&t(BFv&P9f8^Id2OzlEc+5Kqz$%z$=s7UHpU^nAT6 zy_qOd=a7OQY!SatG*yhW5lu?^6V{v>FOY#-^)X^4Y>6~*yquE8^7N1MjYwRV*1@V8 zVC!SwgC8LU7m^)pYZOhrDep>!!KtQ-^~G;WIdSnhFMH$V1(NtRMwWLzuU?W^@$hUC4iNx%=>;QZOS~{coqK%v+G($l^A!r_ycw6EWqY3}tD)o38T1RM-sqp2 zINb%=yKquU@=`jU9CLDhEr>& zXp1!=xB@YlGCNc2Tc8|*_()`{XSS+ayCf?3OS_pmV{9Bv)aFY_i_2`}7Tt{t;l$Cm zTO#iFw+H%Ah!Hpow`K=2`;vpZf^6V8uVy8^up8So=f>E+N7gK$uJe3*=Cp^WUe*t? zE_?`zSLVjuXi75Tl`yU5j$5tk|0LZ}y)ocqyt((zH+`3SlNBPKqO5{QJegi@$x7GT zPQkmaEY;`QC1)5k-=#T(iel)C%0&1a)rm%>#vI(e%=%R%6s@?QLxI(ntmuqh5)8U1OH|!A%p_|k zNn)q1X{x5sbWO0>r36%q7*^Qg?kQKQ?@OJ>{u-C%$A9+nzSoP=b?dF`#4%d%O_m>Z zS6tO;rTNMqVgBMeDRcN^Zn1f2&s6`Cf5q9ZX#EGAQ_d*l9?wq{uZflHRD>u7n@w!9bs`dP<4K`mc&g$zLBnR| zGLxrYM_AZ}6naRCPtjNh zKpxa58q@C*UFY~v@u74@o6GStd8Zk!Wr^}c-0IG>yGc$Cr>d~QV@jMD%Ik$1AH#5n z1`^D+tj%kQgw#hj;w0~dBGrl^MA4%q!i{T-mM1}BiwG17C+3r-xPJGRc}{ztW9+!+ zkV=^nOcb9EDpFlSzKWZG6h21MV61-G9b`o0=k191Dx z5h!_;v?&CSEqQ1nQCL@IN0}wmCZ3T{<}7NYoQ@cKk!9%-lG|4Vd7WzMH@!T3v9H)_ z$usL0!;Cl6{7!uLb^akuUbXUl=!sKbURv+a5buj&Cy|#1hMh`gC(L?Nq!=IQaPpW( zOnFuDw0!|K^X29r4EEgq^Gn%ei|RdXIOhyYV|?WijqZf%s}^z>kGcAlYZn9{Wlc_v~DM&AYc) z^Zq$E8pe)y@f2zj&bw`ywYGSdXPMl(^7Vd!>z+JVb0PSCW%!HD8`@{dO0Fban+ffh zwXrL5;7sY_^Sh_*+H~aSz;(IRmFX)2w|oTsOXjYZmj9l$wl!s=^@3wU$Hf;`EB#vA z`YGo!Ki=PM^&7j}>j$n~iofG`pkVk+@c!yz_tydOn%*TDx#!NVd$n`JucCJPV2N-= zaLDM4O~>vHlvS_WN#tqWx6M6Pv;6Btm*|7{F0?$`(>60$B09MFMeg9u?xp8L64d`m&myHHKaYT0bLl;c=&}#@0T|&dmVEh zQX%bzxAS~T{f8P;Uo?T+Q`==Jc^x+nkW-G?Y(x^TB8TQy5EpRp4dqv}!rsm$8z>CO zc`7x|PQnF0AH=8=7Sz}?ofc-K6)`d+dg@kw%6f5O-S3Hz8f!-((SS2{CX17C_-yov zcXK?y9=7VHoWPD-q>cG+e%Y}s@N?m1`y{Ikn&+szCfJY%d4xacJ4xDCwu1Ir)$)mI zK`vIlu7210ng{nUZQZ9DBE%Q;YYx=3eXXzxB5ANV{kKTw!kK(J={ZxU(Q*G3>n#a1 zU+>{NBy-f98M{ERWbh*0ykezrr%Vk-&ET)&A(WfG`f$ zzm^011PeHa2on8<96)pk0Tlpt0-y^>04xW999)D8EXQxi0pdr1Y!FOW`-p(+fP@eV zaRJPLc)t|~a2h~yKs*R+16U4#IsoJVoC9DF1OXpo%Q=UD1uO@Mr;u|FKn)o6R>uL!8Yozy z6l?+kE(BN+F$Q8r*btx{V5vg+*Wm&X0=5C@2oMASbpQ<_LWO{T0QCW+2MdLO$N;(n zhz>-8U?3X=xPxi(A%X;ec3>FLCY;}>0~ik=Km=e1#bAekt-wU6+>>yp-3I_3fN-$o zjzxxo;ZC~_;5Q^-%Ob#WP(+HNQm`tK6znJ}0s;hsgj_H(79<4FMaBXE1N@qH9e{{{ zlY$WNAApnqz5=ubSN;JoG%+|1z=43(PJ@*-Bz-j<-G3_$InB^b_Kn?&!z<|MX z0Rj<=<&i9acA#KDQb-8KB?CSL8ZC84lnmfLpLdEHU_e z2@41xE*FKs*MSi5AHX4ij&Ly)s1Jbv1z(s8CLltA=-{AiF<73I4R8pEC;_iaAu0yT zlSoh$tO$r8Fl_KL14kRM5OA!gaR|^pGDHGQ$p3*H|4qn2!Kuxau{ogQhx2d84|Oj^ ze=Y@d{FqI5{HVdW-yJ_FA^?yhisLo!pN^k31aRZ1r2?MgUT5+s^R z4;CoV9LhLsMWR`2G`K(VH{=*0h%MRe%ykIYt&TXkV;XWGcmO%{81Btdyn@*n*OXx! zI}JJ3bf{cOTGCE843_MPUlt~aQv9^fBWBk8E;mz#o3YHT^^4~%Wqh0$OjNt#w=%}S z*w3s38M$>r8IP)o+vvbjxv8Hk4<4pZ@Dp55>r;faejN* zmWBC{CuP3Zv)cP{4HrG>T3>NE@Not;qWF zD+yE=x&?mDiLw2MhRbHf&e1^11k;e?yUIH65DtyA=I7_PtK^WwEDS&n?a+I5PP_=$ z?Ub05jo&}whF*7(D`P|+3;;QfD4Ngu{PC;NupDx{7I-qa8k=z+3^nF=z%kR1BT9P1 zdj2RILu{mw=gs(yX%u^=9yZhYH{?hid;HQ5Ax=Y%@EZhcNfpz(l(rE-4rjq{$PorJ z{A9K`FEN?@lTmQ7qvMJH`xgYd*lbr2n#tV#bTnMOtIj%%sru09*xU=4@To zyR?+mLn_6}(V7GIXdyB-JT*#ErAMbYkLfDZc(JT3FF<#B?sd)`n4L>^z_;L7B~o-* z^5Kse#b#;>Wg?8)7fp7|hmwV(@px@6P89ou?!v_rJ)%<5Zml2j=HhhL?Byr~cbJ*2 zftZ}~!)x9Q-_CCIezJ$ebu@WO2C#pLc6Dtq|at6ih##A(iGJu*vq zbv;E|?fHcgS{>Z@lKiuTW(kR2 z_n%A>-^;DZl>u4Kb0*`}N#aL!|74OpO(N0{faagIuLJ+;@oh^wE)P0 zFMquOuT|W-5xOWCIv1p=RjkOBUQECJW__oKe|^;>r?iLXgZq2@?;g!|D$%LhW)v~- zu58`q^sQ67cGiCi=+j@PfECT#HGk)mu8~KzO;?xiig@z)DaqHVeNOe3{SkrBK0Xp{ zZV(gOkjE^)znX3mcke%&5!kSiOYaavr0*E#G~JsNDb8v9_~PCESKy{1L5b2#X`5;}l(L*Iy|$)nzGgWZ zZ`ABt{lSNKVC=~wBT2}6YkU)syKn0V4XsO|)tUMTE@ z+9dq)rXWaT47a{f9QX6%+D@n4%a4;GhK;k{^_gSt$;Ts;l{P{6P`{20W$mr6yz_KJ zjiaW_SHbu>99Jq&2S3BvdE49U!w#!oo@Xu<$CsOws6IIO+R#gyq%^DV&Y|VYi)ZRR zgihimds24@FBJsq&iAX%=CO>_U5PdVuJW&~=Z;)wliHc}y{lRd1Xl1yF7JbxLA<@| zJJ}=~S=)mxo;Lf=n2}Vt&#ul4W@%;KTDM%lW(=_2VNyMsJaVYHel& zvFmECh~I2e*xuvymXPg#KG`L3J!9bAxg*P@yIy!}Y8ZsI={I4=sd#*6a@SXfy4&ym zd>`ft_dl+f5s$KKFa*)D?Ffe7MJ|ug!8pwSU6oqmmZNg=0F^#b|tA z=beMxvdOA@S=EEDmjBiCd1T6*!k^F#MGyg+qc1ma}P`QDCG~{M8*#VhqqgO`a<_|weJ%r z4?NaoPOgo9cj)eq;UC3+5q#ZR6#4~j^i#z%1#@5wEmF&)nZzabwoA`otn&X`S!~?YSpQ~|Ar=y ztrNo5$dPximQr#tS}q1R9JydH_gL?-ciWHs^%xr>FZ<4-tP&|+l_>N|6s~aSI;>~| zzi7j-Xyf4MIihGCM6uflc_C$3qWDcRq6I7FKOH|-lf)NNZO7F_aLc(GFV-tJc4N2 zlhL?~I7>FeM3yYpNNKZA0UbXbV~jhlPy`PLOH%Gkrbsm89Y4Jk5aW^Bmzz4E0f7tf z6j7>FBW*AjBB5z7y;7CAur?3>sxR$cqR%^x{AUmCp01Ri!D$pBU-fXBx)Ayimj0{(W^mH9scGX4X?oPO8Dj9q z6VhM^;T|`sNYxii!6X?ppPxF_H`^5CPjm~M`!ifL@!c9Y75|L;e(7_UWIo7E*WzbN z{9vjq-Ft58I0dxNW!>|G5iz_@Gu7;H>iTaf`a*~#%3Q|>wM7}QgTSRRJM^%C-LKtZ znYk$>bJMq!rAsmnj%RZGb6^D4VrNBaLVgulQ6Z3~G%K>(mW05On(+2+6 zH?KRVATMXdc-|&z{@S_uvE4ammgHCT=N@-ZIbw&H3KaOP0?BxGHoria!UPk z6G94umK0wLDV}=~=ZzG+rWU=e(0=cq^Wj_8r@W%|jYX;alf#WCJNi#XX=W$$3#<4l zgdIY%NdYxqyJe&x*S{#T5oS_LwuYSS(#)qb-KG4J$chrEDeF8nkH|cA$>CJj%2N*x zXU=UpB^y8Wf?B$NZt2g%`I|yYwJS@}p3+_8rJZn@jDPB2#VLyT)XI?Th{I*y^2!ia zsdrP>@_=HUaFtmmr!$wFzOnf^C3{fg$M@EKYwxqAzLxQtgntFhimg<C=&4xz926M5Rw(CiH^|86kvk`H+N}TEaX}LI{g_pbe;u z!iA|U991E;GCy^42ma#@yf)_oEV}?Z;rb?0E;G+>3@1=|1Xs~ix)K*!k>@j8m`Z`p zKkyR`e9oLLx{%rg55(d}%Ts%jK1&7Itf z^-T`@ml@HY6Q5EDi&^*(h@{EEFBha5C8sJ1AR8%hQ+Yg9mO9_b$Xyg?!@F3r^U}S( za)ywvB_e7HpQJtaD~G7P6IvopwH3Eeg^(@Ue5A2T@Qt{#Qs6J9m2nlH2oxJ-v_W3^9x)w`q_+wb z_F@VXI|}wBr&cP!8z$r0Cz``#7Isp|7u@a6Yq>ITq2N1&$l&CPrdhmHB{tze5Ueay z0M=@)AT`q|^*s#+aX`vKNLQ4ux|0xxZ~7EmwupLRIV)~0f^!^9S&!kg5ry%thTBPL zRMFXciG(A|V3?IT9jlsN2F(5n`n%ZPnl);hMv0@Ms&gMeq|DL1t$PLn#CgD)}YPj z-MZ#@rY{T^CWDV^*C_GavcjqJS+rva#1>O@1tg(Dmn4zo!=_S(QuJk0I9o3LZX!XG zg=q=y-p_5hW85NO;qT`1eoAj7FA!(2e_laYx1_`MQZrv!gT zKwh~)@SaV1A!c0F&h&qsvMB|>EwKA;pGOi(yPZq*LjMvj=g55ow`~8yK&(q=;M<~(94uN6V9ndqT}2AufoV}7b*U95)_HyN<}yB*sod|+GhuBvO|IoPWz*fkWHfyr+{F{&Z z6KR^*05KU~n9@663ac&vxX>sIZH~}s*(!sN?SlFUEms2itao;_E(PD8o@iH59Wh+V z6|yl(y?y?!A3ZgXOJSnaEE<8q#as0gm}2;J63vIl2oVmXrx50Iak+!#Rvdh<7h%2- z+Ub+3uhWteirX(vqsnkp+0$>Pae5doEhW|ZSBj>{ZlUaANs( zD9}k|xJlqGqm1qnY!^P5;|Ptz1x>6=4S8ZHz#l?;f(5V{ ztB~{K)*TAPQ;a)-xNFMb0&R%60B@x8gbB`fDpn2`UiFZ|vbKwexZy0bNw>HXO-tQ= z3%0s>kH=eNb6bvs<{j<-QJ8vf(5QOXHG?OQ2@>dZ5-D1IyMEwCLB0c1I$$G)+ox(e zlV41(&u=->(N&$8lG^)T8_r-zxQgA;=bkfVu%3{AdMP1HVESPfcNB05ZL&A-2QoQSkHdG zU8$Jr#U;e)FJ6w-D@h>5qIY}KTHY*AO&**dSCe>WOo=C*s1L&HqgS3*oq2Xu@BpJv zNEGqM8C5))zd-RYLOzRCk8@~Bvp&!qKTL(=e(WGuy@N?ya);X|bkF!1$B!^X`68r` zNmJBOf)xw57Q>Y(ellczIt1<)*>fRZVshw7%0UcgBkpG_Es9_8xnJQ<;uQb0(Wlp~ zE^mf^ecpJ4;J63&5#l}HK}y({_G4q~FMJMtBS{G$9S(*`=v_C#z_SRP7nhe(!f^BvUs|m*FmX2pA*ZE(^ypMZa_}H;|QKF(wiG9%x zOmpqTn##3R8?WcDeZ8)F6*ZQ{UKNUww{FZugUE~0oR&~db&F56_CXZ2Tc_7o4cjav zGQ4Hd4&@}x{S=olZnRj(`wu%~vHjO5Lp7$S+WAjzUIo#V>c}aLXw2M|KxM}2`0!{1 zJuMn8sy)cFm7Kyc6S5u|5XhzJ%^U-hX#4_~9f{za9h8<1ODF-B5oS0F;(5~k6qnNO zsItW_657(6%skb}>=H=B5v9VYHJ{M>HbrM`50uR*e8g^|&P-d!jn~re8dXvC7R-*e zM9ZV14FnBs1V%t`nn4ChX#OXTL zQY-0uIxH6J92&J~zrfMjN!B+;-bT%J5k9M#c|cHV@d|`OkelAL?KETK8n-1zFBeGT z9JCL&#;ownA0aS;%gfs0b(6i%gDhiA1$DQWiaxQ$v4CLx>5MhQt4X)P!%Bgce~PZ- z4OFC>{x|n}LfDVhQPd$CH)(dTR0>n9rQ#)QnNW|>WP)Ka_x_Z$$9r~%bGw~PApPi< z!#~A@g<5Va7BmSs*u7{0`&rB;v*2jFA~U#+%+P-(BsLXt67}prohB)!4!xT`Z-=bi zKe}2L6*Jh;B&`?}qxBY(Z{Jw0o2j61BD+3T7c&${mjSb4T6oY?Sq?>%|P&#~706H2O* zZU)7`CD*mqv}$i--AsE*zJbZ&OEDCjp?D0&D~gP9_RfCnS{*`(p6tYv16CllLpncm zrl&u+s{d66jphC*(}X>}#d&p5iX=*XCGCqiCPpVN)7+U89JT84_S|I3Y!}X=TE|H7 z#)saEa#S_k;Qboi_^CI*qnGiOToOHY>&u!n2Pe=*$F-y#Lc8cUC_>|^Lw_4DIP8t z8*rw$F^@KECM8%ERNolE2$Afige78yFyl6|+IGB=+A`XlPY^K@b351=t!yua@H`c~s3$|q@2CKzr`HL4>ue+CG`p7hSgGaF2jENKT zml{&Sg5B_;EWCEEQPHe&5Q6PcWS?dTrWuS!CD2l)kcxZ#(r$cJ*Oxc%{d5?RavD$F zONyNcO3x$uQWBIrM$W*KPsk}y)RmvLdRO#L7km$nAz7n%M7A0izx07g>h)~vWf;RA z!}Ir{p~Y&sUUoqb6pD9QD+ROt7A@_KAv~iP%c2;$pUwxT-hdW^a69kWQ;%Qf)~*TK zh2^IW*rRtw_b*^Anj5Z?U@vVm^yl7~J%Z39qeu3C4G7+5b50W9G)~C3cUxU?_Kc2! z)K5KZ_VUe1H!q|FYtB=G<7l!&RQpj;A}-_ z+npgQL(0a{#epT)_Y~-}eD?5#hA5$=LfxyY4aqxxn(pX7?$EB9;IC~q%&6+SeuMZld20&j__-O@Z1blDY44knzu)zB zEIhy)HFw&gKkGopV$XePOW!=tt;+7MXnmV;ZTphB8Ha+`p6O4$=si`%s zty6pD9Y0NTc4vQjhx0)kpMPt}c(h;mqj@{~$6-mB`RB2o!r)bpyY8L!v{{D!+O}jx zQ}4l+1465}uY8_2-jA3%P~<+ZX=P6SgXHB0MaP>bSoMyQ3u&K=emTEh@VMzt{f+(A zFPe9Dei?Y2NU9TEuJR9x=xn@KZ{QP+O}irubTspZTHvJFW3|N zXT;5?!}}ZB1EcoFG!5q04V3*I`e?}~M!}TsrSkj4_p5Fe3@h0cUA>sH$NBY>n?KKd ztohsLHMYWWXrHb987=RZaaPXv6cfUFbc{ZjJb6LEDPcquzn}1W&7E7d=AC;qgYj&% zCF1LfW9@^xk5-8_Z?nF2uWk8kuEITmJLGVCySa?vgoJipIwo}4 zw=x4izGR`5b8gGm#L_#1d#f)IEitGhp}+b1kxQ_x;M2BQ3NPnjY>Lr5oEGPCua;NC z*e!P2YT<&np$W}nEh-zGeL>z@Jw%`%f2EB0O6|IwUwjyRaE&~r`%=xgS$t`8REN{< z52=TK3L?12yB;6iL>El6n&E#Thf<`vSBZL44*TQ3kYiKJi~}OfX3Z>+Niy~6@Ou)| zn>+cGyl`?3no1pGGoJy-5pj*g7~S~mJ^63Kom$f9_G{msZEtyBCB~^ru1$UQb@{Nr z1@9L_-fwZqR+gx;w+8J9ABU)|T$<1Kl~X-MN|Fd1c-CwcQ0B-GvXji$=SP zKX;!b^a#~@N(_2VS@)EVrepuxw3PoK8|idfiUg7XuYp0B5a0|@^E1tBfVPn!lHbBc z3hc;lWFrSOVn|Lj0DIVplw8u5Q5~}1`Gr^8=>3=$$+*2$mX}O0n~;w&1-FR9h(A33qUr& z)&NX{h#){(LKuN&rfJH$?Jh_k&0CO{)eu7Crmk%NUjs{EwKpB8<*kI2g zA>cKD-2i+8u!|5(NCK9~1``CN24ET>Y$RZIs6+^f*#Of>5iU4{D2F9w0T;w(gNHy3 zkvy9Q2pa(+0-Kx$EdUFlz}Wz8!vco~Ob)y-WMIDle*xr01jZy^rvMxAu>f8Jf>*%&{tvSGZz3Cz z!UvKcIVwao0YEk`^0XA?i;4R4D4#*|sy1s83>mmaBkFFWC9VdD2q2qu;bP-|kWHos z>FW939z4gx6~eFeu4%`6k6HXiHY)!V|3KYpb}pd!$GZc&OAo622iZ_9%uZqCS(EHI zf{_OjMK%J+22{9H#rWUFKlxHGW2Zn3qZzT5>^LPtFe{E~(!p#0ot9!^ziPW83Xlz* z9L)A07$IU0g{jaJ)5t~$kPT8IFaCj|sY=1zyHuxIj#!b%Dv8FSYbM7p&1p1-MM@n! z(hNc_whL}Cc@~-#sQY=k_@^DQQY(q3x%4sJskhxsFL*6sJ!{V(b_imqOj&`R>a0*{ zj8Nw~)I~ohVd9l(x7e~~!!|7wdk;`+VUCPEnF^$AUj z$M&V##%q1JrIF5#zDd-EqDgk=xSj;PKh|KnYqUl5vxZyXHu_5Ip<3O2g`01-Tl@N~ zq+4w1s>1oHS)94c^(=dH)t7YTBi>`n#aNKX@v)WcKgeZJR&#cJ8B%(|Jw8QPGuX(s ziDkPjQgmnSkl?EuPF;Rv+sVDF>7rc*tBa4aI@HH4gWQzeM^UQb!RPb7yZdc>##Wfe z?P6C{Sh-%$BwdDx*Ox!mjmvCSFT<&Km@DmHb7a|5cH2PTVU%l4b(y8S)a$&M08HB}@~{ccXG=>dkn=6A8BdSd#}VJ^vn6ZM3G zMCk{MvAH8$yf4Lw+`z&SKKY%sREhaebqX@ztyc(rW}8^4bgBOkH}GrBe_B_VDK8ayn>B5KW< zr+pMc{UHxxl z6KF%Gv)B(mQgHa^iJj1+o_~?edM8eTWoDN1cAdrKQBeHz^)h~===Fxq7+CGi!wZQ% zZ=gS)5o;9JImazHA7rHEEAIf3^3Ar|{aAN1$ksXk#rfcwPx|g|dn78IQN>ugGvIx! z?d8l3Q*XDfzf$zLZQaG1)4L9ZMy&66xvu{5qFsCT-VBg#OQ>&uagK46wf=bkxv@L- z^}d4FffMZdsv~2N=_5{pO&`0)mK7g1%XN6MP^`GGX!pU3`#03}9z?jocnz_LRQJf0 zo`}R8{qls=-Lm%T>m${?=L6*VktK>@V|bbv!OfQhwFYT;Xc;TSL5q15aQz6gTq&`#ppyN4q+QF^v6orjnn< zx9sq{aWCXONXsUAl#hs<&yeT63?Q>OZCw_gH3u@Cq4_9Ixv$G4X6-$4eUlzx_`2oP z!OOR_&7YoPY&C921AfL>)<0C-rO}a`Rj}1|VZzO@Nmoj9RH9`htg(OV^_iS!Ph5U9 zIs{I&&KwX&2S=9B_3ST1Fj9iA>3+L+v*aQpt!JGY!knSE(R2<^IeM{m_-&z!V(Mcw zKDc3~Mv(Y=*5e7%o><}i9ceaYPR_moPx7nGC{fk@OosP+$G$d2n~P5d;I(E=c%80y zv)!;Ab*I|;FQnDgTD)23MEOoW&xz9-bKTM%4deB~Y)@{UxBD5-Ut?|B``97rQ^(9c z(z9y2eGP-KmZ*)flNZB)hS#YzMBRdCHtcPkd^51T&rxtZ|eWA6UKLEU3JZ|^eynD(l<%IVd&?juv5F4NlY zxjnsoDnx?8%U4{T@V)!}(bz!U-{ z$ENHsf*(c-!zh!-o=CMF_7g!mgBlX0VjrdE7o{E+r5X(DN+ES{`VWgjHKNrgF@GuS z%Y|nOqD>m2&HAFvC!`htIu z&GN3;nbIg7Kw`MCz6|rrjSFaq3+#(S5CYdY##aa_pixSc_>H;o6evogJZ>}UvJ6Ss zr;)JAFX7LygfQc{bd1=Nsbb2(-xuKI$i^=*J}hx6F)Yzqs!b46W+TvVWRvN~&-UYk z%hov!{K7sy%!7f=DYj24o8(h5=yYyUjy+fgh)7QodGQ~sCD&5;BoQ=|lU$oi(nOP* z%9C~o@e68HK<~h5P->N%($kP~t1snFUy3z*Mf<(P6ISCS$Gt1RKqkV2Zg^vub${I2v9JG&H7LDXb5guObJj;KG`87y+Od>W+-W<+d9D7oOD}FNV75Bl@Dpj(rxFSFzC-P zt~eejz?o}iLEVWcTcGWq;mXf&q^3W&&v2n;I##5+YC@j;Osk5_IdjvE@=hG>B6^}( zyzvxPqqb#8hF?fVfJ25;e-`>JOI%#0h)N~k!&@6IiA$mv;`W2KpgI^<+=l7i@v0#|;)GHQPFVU?B& zplfp4ruf<|Z8^Sqsjl7dP+z|9;XH3@cEz|`A+^YMZc#|TKo!Y9I!V}*SHx>9>bzIv z8d5lOZZU~nEC?yym*UwNC)bP@38=-k<0m1LbP_5&vP4)D zB2*L=Q+v`s+ZP>~d-CeIP>Go}8KV6?BuC9LLw!dMvnSoiU+8;Scvth(OovnN^8`El zgg*1Y@V-}8zQ*q=o zc;GKBY(5Gph+)6){Kv6A*p4&v!}-heeI92*mzmIPA^uW6l(Lk+F{z9q#Cu^N>qjWB zh(dAgj{NQ6l^J2M0tZ(WfYXG|!Gd#FOmLY@$Y!73>KrR>)|jl@-lGMcp4XGyk%Vy=5Tb!-qSC+w;kmCdRMKFVkh)yGvnB zA+;_^P^dxhkwX3=;!-xj8R4&&!88GJn*gsZODga?pPgH2UQ6^9EgMdRyf~Lykm@kU z(myI4%$FG{#1K#Q;k^X-Z33be4<8`rKkwm#_nvkbajsVk6-|2MXynd`wnM6{9WG?% zmMO5~wM9fNA+#CdyYk3$c*LqnSW|K?n<9GQh%*O_Xab@^RVVtORS(m*EX6~ zc_GKQj6;P_AS)?8Am!|89xg$2J$tgQz>l~Hx#?GlpCwLP#>0UCEI}C63h9dYUQ%F> zJ0^wg2CEnxx0L}DD>f|(ffh(8v$&+p{Pqklk`GE1)A{Nw{2U(rL<9KCbwnGzSys>y zJJDDuz`r;TeM1yng;1^}Yncp=XSZbrSD5fC?o8qipo~x~g^iIKg>*Jc>3~qum8*DE z#JJDxR35nGCC1Ns({ZBQBVMQ=@T0mvsZ0EMH6yr=bieAan^UK4LLIg~A#U`z^3jRE zN(6iG;N^neBcYJctS7jsrX{x|T?kr!&^2`XrjBbg%F7P3k)X~G(R{ocJ~wY#_chs18h1mHRTTuy@N{( zX3<2f%8s2>Df`~(fQv~H_k4Li+S268W_*o=nsf!W;MC5(eJNXmt|fVRtp~rBe#c4% z-!vnxk{abp>n-N>ZIHq?snFw&#ywL__dhuHtc)ONLXRJq(Oh^q>u!n>Mon-|KhVU_ zVo{kGb>#s5aT3Ik5SRiuh)MThGq%YddNmQO!14;q9C-LoPIwyHn^S(fXnltvM81#< zSqY%pdDV{MD3pg=+{{0{ldpw&@P7<1MVsDN!J%5GM_%J52JhCb@1L3^WDEPd?Me7w zr2XhX*<1P#j#BwhbEOV67>TcLf?d7gt-Eke0#c1PNlS=}8o%1KfgdR(m|#@%T3DBT z9hTg5klo%|1ryjKISqq;;e=T-^S%klYuOp=B}3bG45|7PHK7X+w8?7>`cio~I&0Wa zx7BipctrovREC6@$IXk7xFr_lL6b?Fq*W|u>Xw4?vln35?^X&jvB6X1eHxIehW zYZ6I8s^T>f?l$lFfxOO~@=7}?mM*#0BFHf0Kpu*G&$Q7HkhIxFj^!9CaN!(`=pjnK z`tzpW0JMk=-P_III9zoKn`?)VbnJ;t+2gvzmm!rebsE7x9Oo85uVg8w_iucKcvnlW zkY8++bC=>PFlIh>NI);do-Q~?2v`nT@F+hED;bx%PwbXvG!T|@jQ5lgt)4&%+^Jhd z8%I)U69rx!KUW!tI(5V$FY8y~2rf5`rY5HB8P^fTG4AVLfkM-6qLfVz=Fm>j6id-J z9Y^zT=w6=9Iky9PISYe!u+3h%yj|jQ=8-NxQl{7qG3=HQ98jDu59jOh&XD`gcs_r8 z7&;{}u~gvmc{n@d;iq8_=c4D)Roz~V?+s_aIBAx?+%gumNBgnkKqG}6r!SU9ZGrdPi4u6pd=&bQc=LUQ zgeOyEE1{RS3DFU`q%Q>o6))kyM_*4oqDpR0l8P3PE2QLL0V8{gMPkcHSJOcBBIpq! zXLFzb3hQhusVVA%Hi(`s=6rGAIJ&rHw72PtAdK;z&A<>o1zdRt8C~43e#216Ns`h= z{;t2jGNmseW%M3he=|?f?kP{Y+ly^N7xt6NZjRT$S z^`h_;V;%Fn&0dcQl!&B3k%Wtfb!RA^XlyqqTZUKEZg958@uT%r37$~MMOUR2R=cea z@VV}|GT3u$k}K-GtYo6ThVs!UhKMJH_O#u5=td=Rtf8#B@(XNyUrp0anZA zV;IQ?|7rK|)gynCbOR@OBiBSN?vXu08 zxND~+vhd5xG-oaUmTBqcPWMTjzmLNewhqmnWiU@ksxrsG-%x*rdRxyGKIBmucOWd49jjYvCNDEMG;Or>L;k^ z4zyKz)iuD#e5J}$iS&_uQ)X~in$>QixqW-p-8&xV=FHss-DA7r;f@dYt%hV*rW8tg^y9#%oC>+X1J7# zU6N(@-&dpigztnaNU@!4!W9}@KS?ljQJ@s>5Yk~@8+r?KUJk|HNwyCiH&?PQ-{Ya< z%@anMSsOp|aUnS`@?`ER)bEV>if>J@F0=>w_T}54Cd#FON>hW(uEjGGqI26~OwlnI zm!L;kgx?gDZhFf?k6E(tleP*gfmJ8tu1iqyKOGxfe|dH9)6b(;_ZI#gIVXqLH@=^l zcWJ{ zn2V+LRiE|oOba+59mi=S`yZ(I z5~Jie#5=uv!}sU0h|*HW1X&uV4Zn%Gw2aa;RHa;@Y`79qJjvv^N9j-8EKT%Yp3ffF z{{E-e5-q!isF9dx6tFbi9cZ+^qVk7j$?uuZVpIz4e=+AQ6|u=@#zN6_RdvauQ=QRu z-j}j})kfzWUWJI0X6|cD(1iPV+fza?2&e71>Z1OuqQ=gJ$A0}aGr-}!nq~VER1&Mi zEeSbIGU{g03Rn=WOUBn zbndc!RDy~$>YcU$Y$eu}F}bRWYIo;w zRqk()jleey&e4{3K?HF7zSf(ai?!@sxy(ane;uB`eO)eIXHpOIeSl-UX}GObbMbhH zAFSSAPPCkORrBM+-ORHdb4ueMp*lZHs0zleiecCc-Cbh5=Sqmlk2cw|c0{Q@5W}la zvD^uWA)Y2Jt$vp=tFCd>H1Cqie5HK^gIi)kp|q7gs{!3+gDUEF#oAt7WiZDcavph5 z{Jg0bQ_SYV3Vj$}BNN+~ZxwA`qJK$+6HS*v*_y0TU)Bt7;+9LMb?aZ@NX%QC-8{%% z_O8lHC92O~D9@#^qw!&^biVDGTxw&P&UP zheBmPF6_Hhyij*vEMd)Dyf)j&WAes%NRWk}`TU+r3%FsE^kJ{@vvi_i%@jt^cJ*B# zX?2><^UWMp^;c~WZ&bzb6Pg(Q{ivy84NW=r&(q|YGO&!D>9fbsVrQv%i%xWBa>yP6 ze*+YJc`HQWiBEd0y?5+#qCX$GMFpqok|v<9M-JGoIoX z#^@=9(K#@5eBXjmbJ?ncv+4fyO5-y6}>iox)loQrIbNOD# z`pvV;FEu*m>h4YS(GF6}2)j<({UJH4a5dAezx&!ni}<~TBRWt0u6e$jFL;{uTt&&g zbCKeQ^bhsYIalm&tnl2QQ5yJcZbn1Ts+N7Zm%K;Nh_EhQ(xrs!w-#9D

        JzF#=I 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 G$NU}L91@!V literal 0 HcmV?d00001 diff --git a/images/SortingAlgorithm/ShellSort_4.png b/images/SortingAlgorithm/ShellSort_4.png new file mode 100644 index 0000000000000000000000000000000000000000..fa474c3d111210b93e4fa0f8951a14bde11fa07e GIT binary patch literal 77786 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 literal 0 HcmV?d00001 From 7a8413019ad4942b5bd8b838b2cfda89497ab7ba Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 27 Jul 2018 13:20:47 +0800 Subject: [PATCH 0674/2496] Delete 1.md --- images/118/1.md | 1 - 1 file changed, 1 deletion(-) delete mode 100644 images/118/1.md diff --git a/images/118/1.md b/images/118/1.md deleted file mode 100644 index 8b1378917..000000000 --- a/images/118/1.md +++ /dev/null @@ -1 +0,0 @@ - From 936a6baf0ee01c7bb7530b3ce4e2fba63b6b56e6 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 27 Jul 2018 13:21:26 +0800 Subject: [PATCH 0675/2496] Update 118._pascal's_triangle.md --- docs/Leetcode_Solutions/118._pascal's_triangle.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/Leetcode_Solutions/118._pascal's_triangle.md b/docs/Leetcode_Solutions/118._pascal's_triangle.md index 1b2fae69d..033e1e617 100644 --- a/docs/Leetcode_Solutions/118._pascal's_triangle.md +++ b/docs/Leetcode_Solutions/118._pascal's_triangle.md @@ -11,8 +11,10 @@ ``` Given a non-negative integer numRows, generate the first numRows of Pascal's triangle. +``` +![](https://github.com/apachecn/LeetCode/blob/master/images/118/PascalTriangleAnimated2.gif) - +``` In Pascal's triangle, each number is the sum of the two numbers directly above it. Example: From 0f0e0b5f71485e4b2c61b369cb802f4d3f413bba Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 27 Jul 2018 13:21:51 +0800 Subject: [PATCH 0676/2496] Update 118._pascal's_triangle.md --- docs/Leetcode_Solutions/118._pascal's_triangle.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Leetcode_Solutions/118._pascal's_triangle.md b/docs/Leetcode_Solutions/118._pascal's_triangle.md index 033e1e617..2b7c01a33 100644 --- a/docs/Leetcode_Solutions/118._pascal's_triangle.md +++ b/docs/Leetcode_Solutions/118._pascal's_triangle.md @@ -56,7 +56,7 @@ class Solution(object): res.append(tmp) return res ``` -或者可以写得更简单一些,这里谢谢荼靡小兄弟的想法,棒! +或者可以写得更简单一些,这里谢谢荼靡大佬的想法,棒! ```python class Solution(object): From 4496e8dd82088780abeb852bc9663bc782d2bcb2 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 28 Jul 2018 05:52:33 +0800 Subject: [PATCH 0677/2496] Update 217._contains_duplicate.md --- .../217._contains_duplicate.md | 39 ++++++++++++++++--- 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/docs/Leetcode_Solutions/217._contains_duplicate.md b/docs/Leetcode_Solutions/217._contains_duplicate.md index 03e9cc544..8737f9235 100644 --- a/docs/Leetcode_Solutions/217._contains_duplicate.md +++ b/docs/Leetcode_Solutions/217._contains_duplicate.md @@ -1,14 +1,40 @@ -### 217. Contains Duplicate +# 217. Contains Duplicate +**难度: 简单** -题目: - +## 刷题内容 +> 原题连接 -难度: +* https://leetcode.com/problems/contains-duplicate/ -Easy +> 内容描述 + +``` + +Given an array of integers, find if the array contains any duplicates. + +Your function should return true if any value appears at least twice in the array, and it should return false if every element is distinct. + +Example 1: + +Input: [1,2,3,1] +Output: true +Example 2: + +Input: [1,2,3,4] +Output: false +Example 3: + +Input: [1,1,1,3,3,4,3,2,4,2] +Output: true +``` + +## 解题方案 + +> 思路 1 + +利用set怎么可以这么简单。。。。 -怎么可以这么简单。。。。 ```python class Solution(object): @@ -21,6 +47,7 @@ class Solution(object): ``` +> 思路 2 或者先 sort 也可以 From e76fe4fa648f509361188db0856b1aa206d605e3 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 28 Jul 2018 05:53:56 +0800 Subject: [PATCH 0678/2496] Update 219._contains_duplicate_ii.md --- .../219._contains_duplicate_ii.md | 33 ++++++++++++++++--- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/docs/Leetcode_Solutions/219._contains_duplicate_ii.md b/docs/Leetcode_Solutions/219._contains_duplicate_ii.md index 906f18e13..050dd932e 100644 --- a/docs/Leetcode_Solutions/219._contains_duplicate_ii.md +++ b/docs/Leetcode_Solutions/219._contains_duplicate_ii.md @@ -1,12 +1,35 @@ -### 219. Contains Duplicate II +# 219. Contains Duplicate II +**难度: 简单** -题目: - +## 刷题内容 +> 原题连接 -难度: +* https://leetcode.com/problems/contains-duplicate-ii/ + +> 内容描述 + +``` +Given an array of integers and an integer k, find out whether there are two distinct indices i and j in the array such that nums[i] = nums[j] and the absolute difference between i and j is at most k. + +Example 1: + +Input: nums = [1,2,3,1], k = 3 +Output: true +Example 2: + +Input: nums = [1,0,1,1], k = 1 +Output: true +Example 3: + +Input: nums = [1,2,3,1,2,3], k = 2 +Output: false +``` + +## 解题方案 + +> 思路 1 -Easy 这道题虽然看似简单,但是我还是经历几次失败 From b3e15e5f388978a18ffca14c10dbadaa6c43e3ad Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 28 Jul 2018 06:09:21 +0800 Subject: [PATCH 0679/2496] Update 158._Read_N_Characters_Given_Read4_II_-_Call_multiple_times.md --- ...ters_Given_Read4_II_-_Call_multiple_times.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/docs/Leetcode_Solutions/158._Read_N_Characters_Given_Read4_II_-_Call_multiple_times.md b/docs/Leetcode_Solutions/158._Read_N_Characters_Given_Read4_II_-_Call_multiple_times.md index bd4c29b2f..ec2c8cce8 100644 --- a/docs/Leetcode_Solutions/158._Read_N_Characters_Given_Read4_II_-_Call_multiple_times.md +++ b/docs/Leetcode_Solutions/158._Read_N_Characters_Given_Read4_II_-_Call_multiple_times.md @@ -50,7 +50,7 @@ read("abc", 1); // returns "" ```python class Solution(object): - bp, len, buffer = 0, 0, [''] * 4 ## 定义全局变量 + head, tail, buffer = 0, 0, [''] * 4 ## 定义全局变量 def read(self, buf, n): """ @@ -60,14 +60,15 @@ class Solution(object): """ i = 0 while i < n: - if self.bp == self.len: ## 这个判断只有在刚开始读或者没得读的时候才成立 - self.bp = 0 - self.len = read4(self.buffer) - if self.len == 0: + if self.head == self.tail: ## read4 的缓存区为空的时候 + self.head = 0 + self.tail = read4(self.buffer) ## 开始进缓存区 + if self.tail == 0: break - buf[i] = self.buffer[self.bp] - i += 1 - self.bp += 1 + while i < n and self.head < self.tail: + buf[i] = self.buffer[self.head] ## 读出缓存区的变量 + i += 1 + self.head += 1 return i ``` From 8eeaceceb19b5cba4acdb517aaf795095843126a Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 28 Jul 2018 16:09:55 +0800 Subject: [PATCH 0680/2496] Update 002._add_two_numbers.md --- .../002._add_two_numbers.md | 64 +++++++++++++++++-- 1 file changed, 59 insertions(+), 5 deletions(-) diff --git a/docs/Leetcode_Solutions/002._add_two_numbers.md b/docs/Leetcode_Solutions/002._add_two_numbers.md index 7ead7c7c4..fd259e995 100644 --- a/docs/Leetcode_Solutions/002._add_two_numbers.md +++ b/docs/Leetcode_Solutions/002._add_two_numbers.md @@ -1,13 +1,67 @@ -### 2. Add Two Numbers +# 2. Add Two Numbers +**难度: 中等** -题目: - +## 刷题内容 +> 原题连接 -难度 : Medium +* https://leetcode.com/problems/add-two-numbers/description/ +> 内容描述 -跟plus One, add Binary 玩的同一种花样 +``` +You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list. + +You may assume the two numbers do not contain any leading zero, except the number 0 itself. + +Example: + +Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) +Output: 7 -> 0 -> 8 +Explanation: 342 + 465 = 807. +``` + +## 解题方案 + +> 思路 1 + +全部变成数字做加法再换回去呗,这多暴力,爽! + +```python +class Solution(object): + def addTwoNumbers(self, l1, l2): + """ + :type l1: ListNode + :type l2: ListNode + :rtype: ListNode + """ + if not l1: + return l2 + if not l2: + return l1 + + val1, val2 = [l1.val], [l2.val] + while l1.next: + val1.append(l1.next.val) + l1 = l1.next + while l2.next: + val2.append(l2.next.val) + l2 = l2.next + + num1 = ''.join([str(i) for i in val1[::-1]]) + num2 = ''.join([str(i) for i in val2[::-1]]) + + tmp = str(int(num1) + int(num2))[::-1] + res = ListNode(tmp[0]) + run_res = res + for i in range(1, len(tmp)): + run_res.next = ListNode(tmp[i]) + run_res = run_res.next + return res +``` +> 思路 2 + +可以使用递归,每次算一位的相加 ```python From 7e86272444747c3a5318334328076935957c16ce Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 28 Jul 2018 16:10:13 +0800 Subject: [PATCH 0681/2496] Update 002._add_two_numbers.md --- docs/Leetcode_Solutions/002._add_two_numbers.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/Leetcode_Solutions/002._add_two_numbers.md b/docs/Leetcode_Solutions/002._add_two_numbers.md index fd259e995..19baaad9b 100644 --- a/docs/Leetcode_Solutions/002._add_two_numbers.md +++ b/docs/Leetcode_Solutions/002._add_two_numbers.md @@ -72,10 +72,9 @@ class Solution(object): :type l2: ListNode :rtype: ListNode """ - #easiest case - if l1 == None: + if not l1: return l2 - if l2 == None: + if not l2: return l1 if l1.val + l2.val < 10: From 5705b2caf12873b4985af4326c9b14ef8c9deb81 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 28 Jul 2018 16:10:55 +0800 Subject: [PATCH 0682/2496] Update 002._add_two_numbers.md --- docs/Leetcode_Solutions/002._add_two_numbers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Leetcode_Solutions/002._add_two_numbers.md b/docs/Leetcode_Solutions/002._add_two_numbers.md index 19baaad9b..a225a341c 100644 --- a/docs/Leetcode_Solutions/002._add_two_numbers.md +++ b/docs/Leetcode_Solutions/002._add_two_numbers.md @@ -81,7 +81,7 @@ class Solution(object): l3 = ListNode(l1.val + l2.val) l3.next = self.addTwoNumbers(l1.next, l2.next) - elif l1.val + l2.val >= 10: + else: l3 = ListNode(l1.val + l2.val - 10) tmp = ListNode(1) tmp.next = None From 189165027393a12ee80f2d8e90e1bc611e7a72d7 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Mon, 30 Jul 2018 10:00:48 +0800 Subject: [PATCH 0683/2496] Update 075._sort_colors.md --- docs/Leetcode_Solutions/075._sort_colors.md | 73 ++++++++++++++++----- 1 file changed, 58 insertions(+), 15 deletions(-) diff --git a/docs/Leetcode_Solutions/075._sort_colors.md b/docs/Leetcode_Solutions/075._sort_colors.md index e70f4e6ad..89c1e21d3 100644 --- a/docs/Leetcode_Solutions/075._sort_colors.md +++ b/docs/Leetcode_Solutions/075._sort_colors.md @@ -1,15 +1,61 @@ -###75. Sort Colors +# 75. Sort Colors +**难度: 中等** -题目: - +## 刷题内容 +> 原题连接 -难度: +* https://leetcode.com/problems/sort-colors/description/ -Medium +> 内容描述 +``` +Given an array with n objects colored red, white or blue, sort them in-place so that objects of the same color are adjacent, with the colors in the order red, white and blue. + +Here, we will use the integers 0, 1, and 2 to represent the color red, white, and blue respectively. + +Note: You are not suppose to use the library's sort function for this problem. + +Example: + +Input: [2,0,2,1,1,0] +Output: [0,0,1,1,2,2] +Follow up: + +A rather straight forward solution is a two-pass algorithm using counting sort. +First, iterate the array counting number of 0's, 1's, and 2's, then overwrite array with total number of 0's, then 1's and followed by 2's. +Could you come up with a one-pass algorithm using only constant space? +``` + +## 解题方案 + +> 思路 2 -思路: +先算一下0, 1, 2分别有多少个,然后in-place改呗,简单 + +```python +class Solution(object): + def sortColors(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + red, white, blue = 0, 0, 0 + for i in nums: + if i == 0: + red += 1 + elif i == 1: + white += 1 + for i in range(red): + nums[i] = 0 + for i in range(red, red+white): + nums[i] = 1 + for i in range(red+white, len(nums)): + nums[i] = 2 +``` + + +> 思路 1 这个问题是 Dutch National Flag Problem, 荷兰旗问题 @@ -23,32 +69,29 @@ Medium - cur 指向1,不做任何交换,cur++ - cur 指向2,交换end与cur,end-- -之所以cur指向2,交换之后不前进是因为我们不知道end此时指向的元素是几,如果交换过来的是0或者1,那么明显我们需要做进一步的处理,所以最终判断条件是end =< cur应该就结束了 +之所以cur指向2,交换之后不前进是因为我们end交换过来的是0或者1,如果是0那么明显我们需要做进一步的处理,所以最终判断条件是end < cur应该就结束了 这样的three-way-partition也只是3-way好用吧?如果有4个数,那么这样则是无效的,或者如果是4-way,那么可以转换成3-way+2-way -``` +```python class Solution(object): def sortColors(self, nums): """ :type nums: List[int] :rtype: void Do not return anything, modify nums in-place instead. """ - begin,cur,end = 0,0,len(nums) - 1 + begin, cur, end = 0, 0, len(nums) - 1 while cur <= end: if nums[cur] == 0: - nums[begin],nums[cur] = nums[cur],nums[begin] + nums[begin], nums[cur] = nums[cur], nums[begin] cur += 1 begin += 1 - elif nums[cur] == 1: cur += 1 - else: # nums[cur] == 2 - nums[cur],nums[end] = nums[end],nums[cur] - end -=1 - + nums[cur], nums[end] = nums[end], nums[cur] + end -= 1 ``` From b280957e47d0312fb0cfd56e6b93f2c45b32d29a Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Mon, 30 Jul 2018 10:01:14 +0800 Subject: [PATCH 0684/2496] Update 075._sort_colors.md --- docs/Leetcode_Solutions/075._sort_colors.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Leetcode_Solutions/075._sort_colors.md b/docs/Leetcode_Solutions/075._sort_colors.md index 89c1e21d3..156e36dcb 100644 --- a/docs/Leetcode_Solutions/075._sort_colors.md +++ b/docs/Leetcode_Solutions/075._sort_colors.md @@ -29,7 +29,7 @@ Could you come up with a one-pass algorithm using only constant space? ## 解题方案 -> 思路 2 +> 思路 1 先算一下0, 1, 2分别有多少个,然后in-place改呗,简单 @@ -55,7 +55,7 @@ class Solution(object): ``` -> 思路 1 +> 思路 2 这个问题是 Dutch National Flag Problem, 荷兰旗问题 From 655c80a26df652fa767fd213052cf3fab4ce034d Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Mon, 30 Jul 2018 11:00:30 +0800 Subject: [PATCH 0685/2496] Update 075._sort_colors.md --- docs/Leetcode_Solutions/075._sort_colors.md | 54 ++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/docs/Leetcode_Solutions/075._sort_colors.md b/docs/Leetcode_Solutions/075._sort_colors.md index 156e36dcb..8e6a628c6 100644 --- a/docs/Leetcode_Solutions/075._sort_colors.md +++ b/docs/Leetcode_Solutions/075._sort_colors.md @@ -31,7 +31,7 @@ Could you come up with a one-pass algorithm using only constant space? > 思路 1 -先算一下0, 1, 2分别有多少个,然后in-place改呗,简单 +先算一下0, 1, 2分别有多少个,然后in-place改呗,简单, beats 100% ```python class Solution(object): @@ -95,3 +95,55 @@ class Solution(object): end -= 1 ``` +> 思路 3 + +两个指针也可以 + +```python +class Solution(object): + def sortColors(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + i, l, r = 0, 0, len(nums) - 1 + while i < len(nums): + if nums[i] == 2 and i < r: + nums[i], nums[r] = nums[r], 2 + r -= 1 + elif nums[i] == 0 and i > l: + nums[i], nums[l] = nums[l], 0 + l += 1 + else: + i += 1 +``` + +> 思路 4 + +这个方法就很巧妙了,我们遍历整个数组,只要碰到了什么数字我们就把这个数字往右边推一下 + +大家可以用例子[2,0,2,1,1,0]自己推导一下过程,看看是不是有一种向右推的感觉 + + +```python +class Solution(object): + def sortColors(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + n0, n1, n2 = -1, -1, -1 + for i in range(len(nums)): + if nums[i] == 0: + n0, n1, n2 = n0+1, n1+1, n2+1 + nums[n2] = 2 + nums[n1] = 1 + nums[n0] = 0 + elif nums[i] == 1: + n1, n2 = n1+1, n2+1 + nums[n2] = 2 + nums[n1] = 1 + else: + n2 += 1 + nums[n2] = 2 +``` From 762f7eabc54c3628e19e48a2601b3fb2c743ef9a Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Mon, 30 Jul 2018 14:31:11 +0800 Subject: [PATCH 0686/2496] Update README.md --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 95e7e24cf..306fa1018 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # LeetCode 面试必备 - + - 💪 就是干!如果你觉得有帮助请点个star,谢谢! * [ApacheCN 开源组织](https://github.com/apachecn/organization): https://github.com/apachecn/organization > **欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远** @@ -54,9 +54,6 @@ 18. [公瑾的Github](https://github.com/yuzhoujr/leetcode) 19. [shejie1993](https://shenjie1993.gitbooks.io/leetcode-python/content/096%20Unique%20Binary%20Search%20Trees.html) -> Please note, this repository is inspired from [KrisYu](https://github.com/KrisYu/LeetCode-CLRS-Python). However, it has been modified, added and improved to reflect our knowledge, wisdom and effort. - - - 💪 就是干!如果你觉得有帮助请点个star,谢谢! ## 项目贡献者 @@ -64,6 +61,8 @@ * [KrisYu的Github](https://github.com/KrisYu/LeetCode-CLRS-Python) +> Please note, this repository is inspired from [KrisYu](https://github.com/KrisYu/LeetCode-CLRS-Python). However, it has been modified, added and improved to reflect our knowledge, wisdom and effort. + > 项目发起人 * [@Lisanaaa](https://github.com/Lisanaaa) From 7df02cf813251317749ba2be6c79a7733f5bd5f4 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Mon, 30 Jul 2018 15:18:29 +0800 Subject: [PATCH 0687/2496] Create 774._Minimize_Max_Distance_to_Gas_Station.md --- ...4._Minimize_Max_Distance_to_Gas_Station.md | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 docs/Leetcode_Solutions/774._Minimize_Max_Distance_to_Gas_Station.md diff --git a/docs/Leetcode_Solutions/774._Minimize_Max_Distance_to_Gas_Station.md b/docs/Leetcode_Solutions/774._Minimize_Max_Distance_to_Gas_Station.md new file mode 100644 index 000000000..e9c4c06b6 --- /dev/null +++ b/docs/Leetcode_Solutions/774._Minimize_Max_Distance_to_Gas_Station.md @@ -0,0 +1,62 @@ +# 774. Minimize Max Distance to Gas Station +**难度: 困难** + +## 刷题内容 + +> 原题连接 + +* https://leetcode.com/problems/minimize-max-distance-to-gas-station/description/ + +> 内容描述 + +``` +On a horizontal number line, we have gas stations at positions stations[0], stations[1], ..., stations[N-1], where N = stations.length. + +Now, we add K more gas stations so that D, the maximum distance between adjacent gas stations, is minimized. + +Return the smallest possible value of D. + +Example: + +Input: stations = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], K = 9 +Output: 0.500000 +Note: + +stations.length will be an integer in range [10, 2000]. +stations[i] will be an integer in range [0, 10^8]. +K will be an integer in range [1, 10^6]. +Answers within 10^-6 of the true value will be accepted as correct. +``` + +## 解题方案 + +> 思路 1 + +首先明确一下题意,如果目前最大的一个距离是D的话,只要现在我们能够让最大的距离全都变小就行了,也就是说通过在最大距离的station之间再加一些station即可, +加了之后现在原来的最大距离就变小了,就可以了。明确一点,我们需要返回的是我们用最多k个station所能构造出的最小的最大距离。 + +于是我们判断一下需要我们额外加的stations数目是否小于等于k: +- 若是,且当前最大距离小于10^-6则返回当前最大距离 +- 若不是,则继续追加stations数目,继续让最大距离变小 + +```python +class Solution(object): + def minmaxGasDist(self, stations, K): + """ + :type stations: List[int] + :type K: int + :rtype: float + """ + def possible(D): + return sum(int((stations[i+1] - stations[i]) / D) + for i in xrange(len(stations) - 1)) <= K + + l, r = 0, 10**8 + while r - l > 1e-6: + mid = (l + r) / 2.0 + if possible(mid): + r = mid + else: + l = mid + return l +``` From 06eb97c0fea601bdd43dd7c332d21051d7ae0868 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Mon, 30 Jul 2018 20:03:53 +0800 Subject: [PATCH 0688/2496] Create 1.md --- images/Project cornerstone/1.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 images/Project cornerstone/1.md diff --git a/images/Project cornerstone/1.md b/images/Project cornerstone/1.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/images/Project cornerstone/1.md @@ -0,0 +1 @@ + From d0966e0f833a017cdbdd8e5a8fd81761a8a9b4f9 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Mon, 30 Jul 2018 20:05:07 +0800 Subject: [PATCH 0689/2496] Add files via upload --- .../3221532952133_.pic_hd.jpg | Bin 0 -> 361236 bytes .../3231532952152_.pic_hd.jpg | Bin 0 -> 199265 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/Project cornerstone/3221532952133_.pic_hd.jpg create mode 100644 images/Project cornerstone/3231532952152_.pic_hd.jpg diff --git a/images/Project cornerstone/3221532952133_.pic_hd.jpg b/images/Project cornerstone/3221532952133_.pic_hd.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1d256984b49d092142bfaa38fa803c377d6011c6 GIT binary patch literal 361236 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

        ab6bUu!ZJ;OuPYjs(3}6+c=IeDo zRv(m0u^1<;tlGRk`#5Pr^7-4ihB>bL?o82fOK2gg*LMb}oeX&uVhIy58!uA(Ge19A z-ObOvxp`A6CPe=EFw)7VWjYO*AeKnUBz7YO5)Qktb$2tuTJKLR<9#ERW|i?W3$s@x zm5r-@_DfaJdigLTDB%vi@V!NR?>t)%sL8YlNW;Xle!Z}#)WB&H=urw;4KgSzHF9i; zHFr?kdfJsw@4+Jffk-x}ncL%Lbv2^~GBeOdVX|C+i%Nc!-|N02PVruf$63JuCQ-@H zr?wK-^VzuN=nfB>!NYl<{JP{nMPqqcRfB$o;ypf}d-p_?#p%P9wy~9@#I;EHDTQ7d@x_ z3bj?&wr|aEt%Ea;V#l2FB4JJjPfAS3B9m#WOFZ4+v&J4YeMA^Atnh`OTEnuz;;f}U z@+Vc6PHa|ey|510?UTMddT@pIvX3o*+u8~sZ`Sx=DYqT|$8>kp!IdhTW-89dZx~)aQ%X6yOuy;iC=_vg-hx3!4=cD*57&!vB@>!u0d?l2nW-DIRLX5a9SA>nYS#<`^-(%Au%QJ2# zZl3!e(?b=&s5S24h-y@&7pGGo$6AcH7WNETx)D{6e46t4BtxHtbiG$o>RMvwxUbCP z(s{E;SjB~Lf;lci=AyA+e7d$gRQs=&7v&#Sfp(Xg18k?P$Rm^}(j6&PIJ0wW%R{^q z&X|&Zc$|i%pKan`|JZ+UB0tXo0j8tMbn5qL5zU7MG|1n8`z3}O%2J9x00Ok$f zu&SX3lBYW(KeTk@aET~td{FDw;p_8Ew#HNbcmfHHz(YkhBSaw2LqT<)yrnc- z;x=o;Umhe$ST=>ZR)h#b!W4&OPCi)`bIZ{%__pgbsgVfU`E^j8R&Tn{0=3A2EL5E7 z#kGkqsFrDa5*Ydn8N5$c})ZczIc zkFQw&#qEU+^AMbCn zygK@*HDZ6Bf0A7h?w_}C@tGs*j3dh}iJ2U^)2nc*d=ow2VJin1D~2>NveqYmp*od= z_o>f`>FJPq@XOz>)FKzMQp>Xu?cv^rS^+(y=4HO7zE)FK8Jkg)5EL6y6gdvAo8H2Z zE$;*Tr~V~)0$%iBDB6hlP&~d(8FNdnzzZdZeb=YioWbS63@f)w*BJ)0qoDYiCL$`0 z9!1j)mjWfDxjJP303ERFKVM|F7S4mR;(1NIwYGSG5GwcHs+@3J@haQAlp+A4kf7F4 zVo8`SRsAL$>J|MW?BWMyFD09~c|#dXG0S4_d^G3v&sWw1ZptmX6I7`eC*!Nq+YHI$ zltl8C=&C+(AOOlgc%>jfJSs}t&dc#$#=GC|jj}|~+=>%5bVYUU#DVJJ{UBV`TkhPqiY z{rAS``iC|6g>{k5!40`#;om}T+CvdZ=qsBK^yd4WXg0_Z{Q0&Ev|HYgMz75Vj0-if zCwt2M4w)^n@)9o!I{Um@-+%MVH&a2rZ@liQlMfSYnE{{I=pvYtil*oR@HdSp$2@yd z{6c;R=Al};rdD%X!q@}*jRxYoZMPTYnQDdUZ&7eSIO*$4Q$Y^lxxQ|xgea@_v6*U3 zX;v-YIL0~Qk}AR|YU;BO$<4+gHm+V<*9#d7_(pt};s|>$DI1*NES3KkFR8oX(AYeo zF*NYk&Rnp$$uj&2*SOXPkw6oi#Zt%T|Hu(wK1A5bTcE5m2DkKe$P(W*ovjvf0_EN( zpSwLcE0ZlIml%$lk=FI^F0URq!^dQ&A~juv-?e;=MTZB~6^ik4MRD^5-4?Rc*3=^hJuDq%*|+ zxyg-ht5@6}>+;B*+Ln(Ee>Z>UyZ$p45AFXlzzVt2XCai=Q^;!w1AwR3AwOIBlI%ig z&aonEqGJkwCUxlz#4L6P2v#fZCa}Q=?lt`aVxcEY!PJXI2H>fG3(9c%yLQML#v5W=;_EuGC{J$Kx_i4c(Tv%9&pZ%1=DHRH=L`dw{q^(+~@5_@+15kL5 zA#m9E{VQNcTfYyngQ8C(Q2uq^wntloJz64tMr?hKmkgj|;KwLjzv~GQ6|D**%eypTo5xS7##C-q zz$&uhf9=%W=&4mOe7@pQGa^J2`eaoE%poOlL*%yjnbbz3nA}lOM}I zi)S8?&yvN(fDN#4c#^?+Y86c#!AE^V5PNkDPNDo`chRE2tRX;{9er4@0LL$1 z!E`|ZlhF$I+Un|B(m{J0?`QK*3Cad0w@l7oDUV?~&!l*|4_CE0OT>y$IlJ)wEJIPBdx?1pe@@T7tT!T#y- z&UTy5A^4Xoq=UB(0*dN^>e>8+cdBw+p%tnxQBuJvs+|AOwW^!_9v);_q7hWHMRKad zi(?4m{bcM+eF0_tUu^j(Oiw`Goe8wUDG`H2AXwf|PE8)5UOuCHQ&Yb{anVi5sxZ2$ z=){2sR9(A<67jC;@47-%SjqEkUmLJui~QHQ6&nSdMqW*X)5wa{WCd}BVOL; ze7}4~E-(3y(e~o4>n$>ZTnX;S0wl{Nbf-0rjqn{1^1p{^So63xC$GMC2C~0?g3fL4=bdQU)lcaAE(y9sU+OV0XTWkL zfwuxn`&#TTo$=0mB?hcxz>jdHRxDM;Ac4zvY&hal_QoA*4!qLm82mCsTdNOu>7_ez z%o_ZTV@rAE=w{ppSyO`uer#084R{y!EJLcXhNv8j^L7)hdFAR8`C-LE{~ND-p8iO7 zri1j;-CwIQj!RhCHr4+u$J9$+eGSwMvVda;8Pi>r92z(mj_!33?(=Qe>tRY|Eui+8_)hlhJKE9eAAsS|AtFK zPHgvw6YKbQCK%H_wiTYOW|}R+@T629O!!>y(ME;SbbLE5G>(>%&;8~0nw+WAZ$dvc zs{P^RmrLvu(;%i zLJyc&qD6o+=~hb(3H}0k#tnL0P4XysNt{w`@PC5!-{}bon=p;=%e_^1Rf|TBvY`Udj-O zl^L7e!n{?gjsEn&L&D7O>1tdr$}o#Q&KSi@U7#isz&z9tFtin)+}mbWJam!*jup9S zT#Guu`w3Ss_M@9yS4NDJ8QGVafYWD=hhfc0F#;<8ND^wlV61~q9!WI!QN73Hi<#E3R+3Q~|+FSiY?ZmckRt-T?(P9iCM94`U*29-4uH$kIFde>BR5cGd zr};QQ`D2u$n6s&yh$2^_*e?;xofu@BLpB0RH6x(Y@aIBM@ov|$SCmB_YIgm@-G2PO zsOekUV&C~-p5;wA#iHu|rx>sb)(gx*h2K2EVgbkkt2fT0y)@pvF#PtQgkY*ki_4`v zjBDM!So zvD&NB@4ojUo5NfCaH>63vq5guctStEg!-mSBsae1#w`a;9+`ywM-p6mye0_Xc{$Vd z8x}G$<8C^pF=VWgSNUfnqwU!#;V9_#%FE*edx@OAO6>o!HY8zBp`P%F0A|MY5LlE} zVlbY+8)F4myggE?Ypq=KF6&_SQSsl!>Y z2?y*?MnT=#P5dS0FX;p4<|O}iNbpQ};X1N`E<(f?EdXBp&~a`Q*tD{@2@oZXjk6_` zLx=cWZ~ewwtJ~<8>yKPO%b48H|JoBYy;3#1>U7fPagw}mB|zAT(+8D>%fNZ?#=bXt zC-Icx#<7Ubkv9@BwZGLSr{AP0?mJM<{BFQ9vJ0_lwpJEI=fn0?r5|*NlJii1eU}+o2Rr>(+%(07s#=V=)ilv&U5uj= zl$O(WteXr^Fk#`1y|5>*Wp+GqHZ~u&>|~XM+fpdeR10DRb}_4(er3GA2}oE>>=Iv} zoi+b)`iExiVbI(KXtE4k0HZR<8XF2`Aa_&&FMV^8hBTmVEbVMAFAj8EM(9)Xz?6h9goAb$J(>i` z%`{UOU^Ik=Rg(J-2?n}T-C2Y|l0r40vxt*=AHeCU~%yKES z%gT0L$V30?-V@uwXQBWCDR&>s^$*Rdb9%6j30JLY%!QD9y+f+c8FRT>y~=O~hXW}V9NVPXxS&x(%EPa99i~7R23_xl zHNK{}B#nNQmzCJdqJ2NT4~&SJfv9%s9>s|I9=4mT>c7<$7fq|Phidj|L#>x5sbQ}Du3nF3%|MmR+?BIG>~U&kD>;#QQwy~0P_EJ$FV*eMIIf*A-R zEJ*y;$_p0(7V(1X+?c>bF8bcdN7P~w;}Yo=p1Xczb~0F1 z;-Sk)HiXZh4tDY$E?e2xk}SKM*;ZTl?G5yFA`Prb+fY-{*)&f7PvoeLsD zB;6>|U3w|B)Q`#jM~!CUaz5rPvHsG+(oE5ICdhEaS?Vb5&H{24%-?Ya5l~&7-aU2f zhdWFxuH|jY!YGp(8WzaSh!KhFLhsnliAi6{J>e-l)uu|x2NbCx)HgtK6Qc-FA4#>3 zwG|PY5*n~#2vIWj1zih98Fp|S-GRX#FJv6OvEsaViJ?+0KE-CWsr=B@8IY%Sy{ z*A}^}Z%pAL6{Hf-v*}%7k+AweS6|;7TYt;1?%m!SD1Uf3Ctl9;_@GMeBxkE|4D1KN zahi|23sat1!gOA;PV9-z{`gM(`U)igu|xhua*wir0Y_z+mnSM6L+jVt>9x#Z` zLI5SF#uiw<7>-|oCls8bZjsz6pU5Yati`|62p;lvy95f%(ao5z_LY8ZU4%(fjj>*t zQDGyqZB&5C_i`u5d0L-cka^XCK9EbQce_pbf*L>iH z-uj?GkA2_=n68Dg{hG1a?7w}_TIer(UtlqnF&GZ%693PKxma4DGZFI5cEy_eUv_SM zE?CbWIpoeUz`Snb;TL)B%roXHW8m(YN_DrG0LqCkTIg4DZc~El=C+bQ+mJd;|Hql+ zG#%zRR$1-A(-Ry=_}+VT7huvK8;39iQjqhaVAd|bgQFD7>gOm z(LSBASw=$=x{BY15Z!>}_M3q`+5P?r2J4f~(bPFfHA1iyuLsRFek@;~{-OO`dD$t5 z<1Fz>*yUwoVX=oymRxE_UBwEzAKJuzza z=a7}y!3Hh&e2HmpG>?%k(YO~pJW2Ytu0Dg~>~uJo2(BSom76 z6_~#Xon+hbx^dmjod`(;3o#Vvx2d2&qU43gzx6Mkoz^(Y_SVO4^~NJU3t!C0Z!3G7 zKlnB8At5zf%;U0YvEqZ=zgDdfNC*VJ_*+~gSbetsiN7*u<>S*PcsrWmex z)A0$MkWCxnD*_#FJX=H`e)&5h^iOx>`wsQeF4miQ%wf4&3m6-8DpIDdo}gGG-ssUH1QJ@`>wHx z5BrB}pkUc4RU#{U+7kKrUTs4Kjbc)zRvO$?uGzg3~|=yS@ZZW=Q%ha9dWL@;x5j#)u>d@AA68 z>gziHU9?q9)3hYC%*bLn0`txR&fny9^?)r?`b*{F6FKw0OQEZ+PHPhZBhAv={t;KQF;wLbhhN2+vA0Kg(KVe)& ztagr758(Z_f<*ahsn~XFiXPRP2<+bj=w=WpC}h^ljV#%FlC!gj9&QZW{eRv*PcP^N zmKR}0dqh{FVv3*;ZxS|9$^S97ZEw-~l7;Z!%e(nK6>nsAlgteIviyQCzH`XST@J{+ zdyEja+@TxU2~@~O11E{>uQm`sl~y5-oFoVQk4aG+MHkGz1>$OB7Xx1pZyb2Osl0ui z-s?=ABy|%LV^B~|I1aK{5YO{Uwqx8hzkJPF*JY?dP-WT6W8hInMpF>${VeI}G(-px za|~gOO)Y@P_RWhl6!+{u-M65pr2Vj|-G`!o|BNsEv6jog4Df4@vi%IZc2-9obEa%a zAfZ<`!{*hKd|dmO&lG;Op(X3?uK=`KtywX0-au>&;RV>h!bzoVv94MVru_?>Q)|z> zZfm?i99Ug_SVe?{hSNHcVq~xGcHi&ElOMn{O^y6>>Mnw2f{)J{#c(O4GrxYm`}*u( zjw2DuZ>l8Ood`-c5L!Se8NyT(cHsW<6V8q{!AGKVH`;pTLc*Ar2#Ws$AZ z!T#1DsvC`<59X*q-1y>SqmjCrgsLyngmQHcWqP~+GQ46T;b!`flowNFpzexL5xW0H z=ttCo#WUJ49y0D)KPh&3&qz3Pd<1s4iNW6e)hDuQbHp9~xvnkJza-k%@8Rm9UiLka z8*u~Qxo0Z(C@W;mG6G~atgop>zlvq}Pw14XIaN_;{^z})?3?16Pl1J$gB3wFzC)VI zL(|sk26Qzw{pI0BX5*MB)3-7g7ciHedOemckB{JC{=o9^RQRx6HAy7hK$9_ioytau zuTQZcTPG=3KIyP@7bs~f3*Pa%a-?PNVxzKZ@#O0(6u2>GIX53z-lN zG-J9VX=ihorcQUAG!S`+|4#u94f6AP{?|12x9hypedTZFqnTRCrs-Ti1M9ug9+6am z^Bra#>&DYaH9`uxPzn2v!`W{tI?H;`)w%R(e)mjeJmCu{ylxa4qnp}aO?9GOScj4n z`wPxd+sjf$gc0}N?}S*s%lqjP6|(?qoH`17S8}ouY}@mBFtxu{as6O9slrLSxp!7W z#bY?Cz94&VpwRZs>EVGXE(`AP`SkU;otz%UZu(tCy%V8 zb=R2>1v8RNRT&KKS!b#&gM)``-B}=%dGg0aIEcD6F%0)N?#JND&bTDn4)!nK3~*!?XBz%-%~q=OiI3gq;?i9E zOvLaHy;;345p&hK%d5}Aum#5j7inDK_s#N%TK!n@hc0q0`PigNrNZ|KZlVP%D;7ot z3y;~+hbG3ARB$(L1c2sR<=m@Hehe?XRMPNT$oKQ7@S==FqXEq<`H%OaI1YILaT_?D zAs+r^iBUp?Dbh6OdJSZA|Hov7GGK3`d1iX@B)JYg)g=*J3i5q){;S5Qxn!PKiX~oM z3WV_|@HVP;b2p;E`u%FyMjgC8*#4*N!OvThCSG@c;Au6ZB3HiPtniqB=~qwMm(uWk zXy$|Pdl$E`$xj@YPp{gk%{4M_y!s4|4+Ayi&>zB+@PMJkD+wIMmZT9>;WGgKCs|VV z41kniwLx3b$C6;&Apz8*nyfq0^#yxs4T1{{hxhQ|ea@|R^1Sh{;!}NDY(!TeXi4ch zSTCk0bZB;*l+i=T=ssN7Ons}X=D0Cw7W(n+kS|(uQ0Fw?6e<$ zo>+PK`_+C&)3f^EqrFI(3+f+5qHR$m@XsS6gCl|hWW>9jVE{XlbS%}};l~=IZr}~v zO_x|D1ndy`fc;1czV0w#AB{^lCd)Bos2LyUJ1|Q(dVUCWUp-|AVqVamerAPkm$=UK z{2Bzp_yam?AcJ^B>W|&uNp!ZRH1xfxG>ZuCKnOD)a!M#5M&uqh%f`#m9OmwKvP|&1 zJnXCOR(l&9Am-%wC>Bspcd~xrL0fXhb$8`iI|V6gILuP4AjifD3SA%g_nMdSEXe=z zsnWYERF_2J@w^L_Ln+TXiyK;Q>d%1YEfyF3ZNF;EbO=zdEyB-*=TVNSy-SjjgNhsJ zJWBjd?5}lu)i?OxKakQYFXM>v*IsE+O#q)_Tw@GF>OG5*BL6BX>C)t&qIsjH&{56Y zUw6ga3m$}OuId-UNUyoq1l=b(&e7$`!1)LEfu!L18cq~9J0!_Q&Z)W^BhTr3ysr3G zGpK+lK)m&N`}r}WnsgwdMA%-h`kK>1AHxpWL{+c;jnu&4YgX`04)nLGvwMub8PtAs zg&%SZ!fBud#Y!R+fjNW7*jAfeNFj8%^v{}zN)0yqPH%Bi-K8+4O#}NsUzwS^g(Try z5K_((PY+g<)g9&E>^H#Mt)fTwEM`bu;&0K`(nBv^{8k8!|TH0x563)+_fG zcIdXcr1^z*W6hW5(M!|pEE^H&hTYvl*dH5ZUf|B&z4n5O#LZ=xa5m}r&}EHdKq=mR zu4!|Rd}(1pBl&Wh@>dxdrtv}q$6zWND!|Bi|8H@$tcU!ZC&8abjShi=^I?=yZa zTMJ5l!FC|jPnU)Raq>~5NCe*)Lu8g(K6m%qH&<0h##pkV-T%eidqy?cy?cW}5RhJ_ z69fd5rWEPzQJRQ=igY8=iGUy_Kp;r(RX|XB6$GS94ZR9Tml_BlT@t|-$ zdEWn8?^$Qgnlf2CECsUubCo`oq&!T49{LL-Fo-<Ed_ihWPs>?Ta4pDQ)~sz|+JC*MNVI^)XrB?`Dh#)4Dwmw8MgLoxR`B ze9g~Fl(Tq81oAwubK$`Cx84U#;w-b61^fdLeKpWc=3YC={%*;Hajf*&B5zjRX=&v8 z+K5$zx>IJ3sW96I9m!O0h$w7o^W@lSLw5Oa7|ahSAJfeawEH6+yzJ@MA~?p~mF- zP>F>)Ef3k4TpFTqwx;SVQNB#zF6ytSOwHMVE1$&dJ6Z08KDwtvqiH2@sqSx3DUf%* z$N`+vWq}mXB#=qS;+!T1;bnm=? zvbK7dO_4b@No#w$qYT@;$yKAQ=_FbsI^*HypEnb18_)7+Cs48GJl_dBg_a#WNh+Xk zo{F(9IKtNcb)G1G)XHXiTXxAa<4w8QPDG|B6YW()o?gW*M3eJ-to$8PQYaHq1zQ%i zQ~tgRGFWl&*fBEKQUT}N`f5rlclIoF(SnbnPY$X^F$r&sg12$Zp~Tk55wT+ zQ4HBkN?IoonrQjv*r!ZiBxm}!-0aK#;(YY%^@(e%q#Lx=KU?3aHv3kRLGR$*aR_AY zv;&e1VgJx6m(S2bdh;{#i$e>6yPj}|8g)eQ57cG2!ztNIQx~+0aPXob8e(XA>*6#y zu~RW8aJ7o7gKO)VUcnKh6+kq2v?M}W?RJ_sa zOFP<5+xoo8%Ak7Z9vaF7p2rF=P9schCp^T(j!qD9E4$Tgd4>|b)za{j^Mae9gUcbf z8Un*%?&B=(^(Vu1w?UAuZ=-zI9Z=rfwQtFnDysGuQH^0Ao16&u^QzZ}UlbBo-igM4 zR&(N}IIAEJth3=yF`+}hHl_w37l)lTk2Q@tIy`*TzB*c!rW^DPT+wsBGW3f9Aa6f5 zg(fd*ULb~$-jc?&$_M@@4Fw5N^ zzMtv-=7UmG{BHU?yZQWcrCI&O+MRj#`!Cw(*TCgcV^vnkpzVw=ba?SCuj8wmDX|3& zkO34wQM98yU0TUG^_SS?m|xisbr`y>JPlY)^7_kl_!n8xfDO_rO0daIouZtm)q-~@ zJ1AUnS8bk0kIHHH#N9DU6JnC19{GB%y8GhX0U(D1r~FPef|_0E6pPwu#lbC~!GOTl z=Z#N{qm^`hUW^Mp))ft_s!pfTH0Hm`AQE-&PDX)(UGZ$w!v$RXVsYCPuXlxuQq96z z5_rj|cbO|3;Zi`cf6j4<4YhwOD5<}YC->VqXTB9rjFizW3iT*DRSL*8ys<|&KX9-8 zOFf_*b{}969p>|>X8z1Wj&m)i>Wb%leCp*)wOi}tK-8-M{J{__l)xf7*xDzcziEn( zb1QLPF`Pg0lQ`ZAw*PE&yfEX zu_m+QlF01y)Y>cSWtnlT1DcPYa?*S@x~1mAse^|8$I;f)xM{Xw-X_GuBguMa_jTUv z>FTKoUJRGv_JOE|wHREpl|G3ln%Az8T7HJfy*5uak=4+aGnmvqOv{hpDQE&m`Z9t6 z@e(k)>lW?CoZ`N?(M;I2*UJq0BCqD-M=ZRzqbNUC0=U(bWpQXLm-0TdUl# z7%=6iP)nC@)H(#(j&%Drb|%}5J?=4IOXdt-EyiYgyMG9IS0Wiac0O#d{Oj@Qj?J`kvstL4iWQy^AY}Ht()p#(wxO(-h>H`8qb3s18P=FntS1tOn+tM6?dVw zl=_$xp3vfVnUB>lG$s)Pyh+Eo`{%eA^*-vZSAPk?N_{w3(uRk8conZeq?$)y`6swf zr1Dx{6v%F0pG23j>f35X4An3p3%a&QAHeY zecT3X7G>qS))%Z-z28Bk=9}zrzXj`n6h{K8$>kMM{%>SpG&^kS!Q2^4e1Z9mJ=Ew# zT7Be=gos*#%f78wVy6=}1&us=|98pe*t@pgtR+uElqQSB!8avo!r{5BnaYF2M!f zvnZ;K)?WVh-BN!&Qjf>+3bLJ*GGrn3n$Y>1&sBNwd-bd}U?=h5mfE^%+YZ#u`{uiJ z4_`ib9EvD9MsbEp0$z(+M+hwa@Dtj=?HNynyuY~D(U+t0itK9tYE@=TD=>vZaR3r7 z!yLm*3SL9(JN|6kN(rCdLo`gbVQz1Fy!r$?Q#q1)DwEc9I#SxGHeyaWE+Stq%J?~m z?l=7==hQI?6TG>QgjuS8=Gq?c1kxi`Uy24fyd#8 z$Idp@D5-bt9zSrcwE@8vr~*Lzg7rjKP21?olnB_L%KTfOE1yml6;1> zGQKUZjvgP-KI%;S9Qs zJQpV6O93smadM*1wp%Q}JBxUqXAf9Ip@QJKv&f;tL#slb{T$Oetvt96L6FFfMMZ15 zoUjww@oSs!6<~fUCn95O%abxvKWV9asGx365_`8pHZ*@^PATU&8?nE7?ae68qgz^Y zdA2=BQrtt;ZI7u{L#%ANP6P}A=n53@Cz+a30PKZvH>!Mo>HE{pX>mr!@1JkC>uEdw ze)ZcSje|d|xHD!r0@qGTIDSqH2;4&9t-3FSA8^Y`{{*4j9;JP3ljm_v(ekqrd&-?O zqR%-8qq$E4>PC(>*T@2{`E)Vpx>q&jSsu57)uLM4qgCwkwj`rpShk?MZNdhQeU#bo z0F0p-aU8*z@~YEe0}rqasqA!LhMun0Oq`+RQ!7i{MEyWR2_1kbisVwsgR08RppWlk zPQ)+&Mw~TE`hNG-dw}c`-Q4v+sudUkwTvaKSO2+wBp~DvUcj`C-HC~lTK-{Sb)q8UIALsS3jB820kR1)7+B&+>O-p+NCL^4u3sW$VCrJRCzqM-Xu!Q4f@9d;S%jc{5)-^%bC-L!3 z-hQEV63gEwB-T;rW^#aPy>i?2^ld1HIQ0t9gb%&g)rL1NAwI%X(fT2ytuwpJp6_** zb*PF&QF7BAa>PuVF47Yq@H<+(nmhmu1hV1gzY2HitZ#c-5s>K^uEO`3vV7E0Pvs9N z-*^vt<}fJ8KdWxPS!2-`G#Bbw@L_qvO zQUT`+Kk09OlyItx%lYo&;`-I`hIwEh`6zA@R6Tn02F%OD>`xH7*6C1u`(oZ_S7dmYWEt?AH;BaV z^6XOe4AKJ?(Jg~t!srr}Hf+2DYuuKTT8b{#rwN}D%hJWQe{gF1k6Ah*+Kw& z{a5HTvf*cUQpm>D=}uS0H&;V$dL6&vb7k#)XCxY%(DpV`$};$8)tEQSPT!-~Gdu6v zYG>SuEkS3~2kPqc?^|$QXPPS*i&t>P&4L(Si+%z{cT*Bw{>WUT{e%;#cSA z^nvYq(RUe;G%YH)RSoPR`O+ZP;=zndx>|zAGxU)7?Nfcuy^rDd1W{6xKB_JvxumMb zBy?l=HEJFabCEBvA|M4?jWkE&=q`Dj0|0LDN^G}r&A=Bt>`F6t3ExcT@uM8nPprWU0tgnv}C= z5^PtIGtYnW#c0bbPMk@qH^?(tW<9?UNXOxOp&NqX%&dC_RAYCwzI?B~D$v zbrJW4m|C;=9Wo(tL+SG9lV4Vs9OzyqSJV zeK1JA@}m({srk&Re)@stAR7AU-}0btZMSCckDGh^Y;KV;%FZ`lCkN-t5*YDXI&JuA zENbYNzxPD76)gSRj(gl=b!oBSIND=aS*D7Qv=-{2{&YZ^>8>;wB^f5 zr?EH3OR+Sl)Pu3fVy`u+hBpJQKj78rFlCWg(mVBltr{*|BDU`6^gZz}M1m&&bd#ip zr+~9>t5UAV+%HB-x5bCnRl_2x%qnt}7pZ*fV%2BQsN*FHnUlMf$!i6T!#&Jg$bKa6 zfprur;j%y*jm{oaWw68$MLQrHouD??6!3n`%=mT>4aZ=K zT19$+{t?C;2BT|vU-(;C{JwQTaY7yV4s5~`Z0oTTR_4TX#@9qp!M~dmbJVEZ(md^9 zc+*aS=d073vkXvL*Wz}j_vzxm$x;lik<R8_oLwX z;i>3`4ZrXIlyQXTV;W1}-SdFskS#lOce1KaYJvtvcNHmA7f z8y?fG)7pMd-7TH^))oa%n3iMdY}0SAXLDuEaVJ+Eq>)Zse-Wo6}MLd(+(yB^K;qlNPlzI!kDe)+plp{mJMJs6TVt8}H zcq~z8E6;s(*xtcD@MhL`WxJAA`MbZbvyVS8P3>r~18K0Eka7_YDRBk$EsfX?ZM;>f zYY>sl)V*+defUqfG+i9D|lt>py?|_Ue$?cZGo& z(I%I8^Q0{{DW9U>G3y#k3zW;9?1cM7al9*fZmgf#4C77%r86qX(f?iu15W8Ii#i~#YGhPys51< zSz-yNa~+hfBld+>Map2C_dJ_ScL@NHI$IEr56Kq zIVIBflhn`Hr}1t_+XQ}Ht2TfgO;o5}sgZhe@L=hyB|gkDQW|0Z?e%J6!<82tGFv~wmye7MXA0aVZ;Y3ct74m|n)}rRceNFm!8x=)n=6;29lSJQdy^;Nu`m9-NTYOoM z(s*dKo5Y{H)KbBtm%YxFEnpv=1&u9NZ{|$8y z4xxN_C1wy^_Z9MW3+>YD1psK(RXi}-Z#BUEk3a6ebbGn!)wHysUBkG{1fS7)MiLeM zBrev;z7cZ_VCAVc0MZ(7J}m$SouJp9H41FJneOtb?M)(&OV%A(k+g#sB~cXGlo7z< zpMp-a|?a6O6I&w=JM=Vd*&>Ug!_P@d@%i_Z3(GiV&khcz`D7 z#10hM&lx8`e#=uwUD%XOM89h&7kLcA;;9gYW%@9C7=()34Y4t6Xo6i}uSlRGQ$O>qXEMWWxSBvjkJUVvUTsdjzRr7K=b+YB}W?DU`fV=}Ya`j9lp!k1k zCEQZ|b`sLto7t(0FZ_F{%*m$inG^y>B=8wHd^ zPOQlQw7OdP!Vl5|=FuL-_8vK*pW_vO(rHKi$nd(0GUq#Sn;B=NHk=VY3L zJuL2aU=-I&V1(~7E|x9Uqu%1TrDoT>9Ef)mL+ciIl>nbi4Y)VHh#=fw2CJ}Z0c6!6 zR48V4w}5k}%9ePe!)vAK+(HSI1&wWSa@6}58ZFXYkuCW(1QVhGAl^@d(SOu2t+?b> zzMvlL#DA|~3AgO1CL`skK6icEL`3z<0dp2g>g@~A6#m+4aMN(2I^&idbH6lKB$*BN z@J`CZxu2{ugsvd8{<0J+7qxPUvRp(z1DhpF<|KKM%sZ>d{51yWjCpsZ=}_{76(%kBn?ClGfsrm5r9cJno9(#Dj(GV?+rkAAK_ubiw6Y68o)=L=kxud zY0!M;xz19(bp4juGaNM9+|$ zkA^P&r2VPfq-Ml2B;J*md8^H*{&(w9=oP$XiXbHFh z0R+T;G>w{N$>C;}mPXrlg#B*w$4@keNxh*F)FMdZtC+t+2TjRiV7^Xi!PIV{xz0L9 z{GxHamLrz$K0aDM?CikN20vM#j$D^;`O;B1k_{&K!FVc`u~TKFr%JswwT^? z!MbNYg1^ieUuvu}t{sod;mDLv8VOG1IWA4QWUZyCjRgQGe93FbL~!LTlu=RGYV%`D z+eN`2r?8umk5-S5c6v+oNw(CiTfk)b z!m*C+unae`yh|461CS=A)&N^8$d)V870JD_-{^WSR@^S9N=jDdUFV6)OS`qKl~vs7Vn0UI~*=(EcF+E@MV|a zTqk{!4$l)?=W)z8$lA=h^>i$UN5bA9%)`5+qEI$O-^V$1Cz@9~`G8~>-+qx% zI`8POP5Zz?#!()%PiHE18E_9w04}c;>xYKqu zASGKQEnl*l)Z8rs>|Pq4M5hwC7O8HjPH~Fa#xTHvCZih7?Z@_NB{Z*@53#fuEt=Fx zkx>w-Zu|lGJqKTZPy;@|#J-x(a4_cw(Rgq;Yuy6nfkc3VQ=Ujrc9UX5x#6LJ>Rs1H zoaP^*$Dnt?O=r~C>?xkRs?4N3@tJc=}4j zbz~gN`S^rj-U1yKUHkm>+e9Q7d$L2C8vZsBf+8ppjey`Yg{h&*k*LN!54B<5)#}o( z$`MaOPT=F*DI{56$<7VWr#BBIDAy3rQNNY{Hi0J(t)NKa$(^@xiI}xNpm;!W@!UVJ z0&ZHcDfJ%Ht-@5}xp45KazPC2EVdolzl-1}=I7M@BGUIVhWgYDgJMS<#$DXAgqu4!QwhS?GrO44YaP+i{Mc z?_6n~L8QcUT2Zfp3Q@m8W+UukxF3SDC9nx&2$bK^}d zEt9v&%5~L>Q@`)F#vqPfPy7J^uDYig!w_}=&_BfpB#mVOb&pVtSjpz07v15^6X>i? z(fVx>>p*S&s24`5OB*jC*6{0i?1t7dz~Qhdg$-}+b@PU#^h4iX(nPsPzwY*NH@-ID z6L$AF^F@E+w!Z=ef%0#g(*O9-4EP;w4dtm z&@=~<%P<+6j~nG}p@Iz4US-eIPxlvQ>cwk~^o)Z*SHhfBXi{~hL4mcIfMYT)>ix=L z5crj^fSOs82WE9;KkMTJ``K!`sQqg~gq`9^1pLZ-SoG9jdvc6}U#;8p8;`mjV1KU^ zarjjFP%c|nJe?!V*!T6{gBL%xA(yJNrwe-OzRr$m>3Z*$JK0vUbij2kRSxA#NPz9+ z&OD&Yezj(#H^3%W%5R~g%K@^;gdsOfdYNNYd$G(Zp@R5;f%a&WAaP^bJNZ!yXznPy1GD-?^1#s_)^&A}%Uw7Ntv-4ij+C zD%&WaK9oDifbud%5e~EB>?`>aT+5WQ(oU{X5$1lU$-cqsk0nhEi?s(yP)0+d!HioN zkH!8^aLKa%P3YI6EurH~f?f8Dv=i3Q)HUFARG>#SP%v zI<5^OTyUS*yc*YfUUFc)XdGih4`pb7)`GWadQ<4&-d{ez#kZ;xP77Do^#lCu-Fz3m zxEpalm9F!*FKZQzcI}sNHXjvwdOpuVak06%IkV}pzqcrhb^^b5G0+rlb8`S81Y*k6 z;CwuDK1SlT;fwvw%3Y%1$xr>H%3w<5Qz5;1&aJo-+k=JnpMz1I?Rl?#ZhQG+MNAl8 zddP|Tu(p}wYBy+UC^as+O>1BD$quE&C=zQle#Q76=5TK}WuxDUFEB1~bL}q8Y@E%s1=d`Sj`ZIOjWwz5b%d=2T#BBlHvnUUt~wE`-OmCHKph zlcKq!(0R6T9P|+W+k(}T&>*(e93!H*Fs&^Zh(<(0=+r&X^s<*>Q@ufAUA1nNY0D_o z{=%Y#|2|(1>$6(iTW7(=8I!0qB=c_r#6v1d$=H6nvdzYOQp@QpU0J? zh$2|oW4+~`8zUQG`ie+hkas>4{w3zu=33_hf|)2=hIgjVVw4K9dwtnZgefYEO53EZ zHeFisUd)3}3q?)Q8h?G4D9qh-FjJ`4wky_up(Iz7HWvP(>@D}`#JL0|jUA>gTHVz5 z6zw56WudCOY8{omBE9vAAid4=qxQ-vXJ=c<=#ubewm6k}my7Onr+%5;p5~R0t@8@w z_+`EXo62;USkfoQbft?{1_!i43wazAyHA+$TEGN8-fm9`Q)e&2JAe0E5?ywF>)|9) z_sgm%>5|~UV)2}zI-3DjU$}8F>45g?%UO{YcWaPDan3h=VrmRDnn=WP&Hol_`;>Um}%YqnzMcit+JFOHSVbuQR z=b?n6v?}>lG#)~{zXhcbn|h* zpel6|wBmp)26LL1*^GMtU2J`jrZB1E6K`O9MqLWr^20j?Hr2W;Off?-PNi$mR_VY> zBd8a@oZTu?TIwjCAvw5_4O&jcLaRbuoQ_`SN>(YeTz6=uym9d@PhZ5`hD$ssxBd*m zv?s_Hj$Y|s_GrmwTpMV8dG*6Jx^Ztc&nydCkefi8vwFtd!XO7luN#<-%ndMV^q4=nmjWze_6RGipqN^_C{5F;YCwr5CdJaF31O%0J0Hq zH_eon=(WqU7TNua_3qX$?d~+ZHTtTOjArXOO4Evp5pHjH$q`%#>3821S7-2>n(b0% z>5+REF(MqM0^!DU^&(lCD$lg|_gZps1q@g_QLZ$p=?|E9!$Oa#Ja3O^==%AZX>*?g zn&M5&oNip2V65I-j}LAEVN$s4)Uv_OB7>)b*C-`HJ*=sLphb~Qa0GC;*94=CssN1( zRdDo)i(R@&xm(MEPy4xiKkv=IqgYb1()UVcv<`nbqj(NDXUCHd+u<2Fd~a(e3=A9w zXv8aE%)LQc35p1yn0Ga=BDVP~TI059Jcm(rQ;TWphnZJx1MVPG6VTJg;G|GSAXk_f z?Dd|ghtZ5eSC1PIE1lHdN!8J&g$9_;{Uo9F}CDnU48Bv05!({fDpd6R;G_GvY68xHAv8>4Oi^Y0i zc6H?A(5G<~x)O0pQS3sPSaB*#4~q|Tkeqztk6_aa)4ErLE*SQ3Pym1sdNK`Oc2lnc zZNlnW7gz;2`Tl~q&nw#9-&lLH$|=3w|BdB>&V_o*VqJ6HJ^A#I=u{SMp>1AkkmNY| zI-DC1#Wor=e(4qmX#Xp>Zn2ZfxyjSsUJZ6-N}jFhx3nZ#!wqnCriH20#%_8|`=j^Y zy46uF*A9(8cR-7`e1H|ms(zyn82d9NCCvdgc6D~SFJp`(y9VZ_eEhkroZ zRZ9T>L7#8~Z!*9O$N)1_hh#sRt}W_ndP~qZMaZDn2GY70+nhW;6mGtvDWbBN_kEBR zkmNquiNuJLpJElYa!9-5>zsJ@I#<9bCy}hV>V9j+?a9>{q1mD)QvmdnY>+i=q$1)x zi}N313KaY~`OgLr7+8W{-aCDE3QyYlJapXlyX9feODtRrv88~Aiin+`#TH#C!RBG3*Z=8 zrS?WqryQ>a5dVM*$W(topEa8;eiy960shuMMxlDf_hhMJlPiYIflt_2j6BPphAW}H zRK7dJe{;Y2o|M}9 zS_JqT-dgnU{Q2`bEJx8{3yFVfvLs24G$B^GBZ!&$#2eyAnSVfkiIdG0wa9nt>aSe_ zIbtrF{0|)}`|lkp_|Gx?pT;4Y_9@SOo$uEg4Ec?^AJcX+WW1W9{8>T>0LDUV7XS`w zoihLXe}Vs({}rbTUiozL8+eciR3YAkxYwO(b>dIR-0Zl!e?Ub*a9__Y0Aw%$67W9< z>FBNmd2JXm1w6cALhL^@M*!hEjKK61G+2;m3w}SE`vdxYJ>~!25s+tQ`v1c_gRQHH zQzx20D(fH9?$JM6PGF1I`oCt}jq`cPH$)&7^^bln`JWnY@%6PCsUsPPxzj(Oo`T;o z3st~`B}@U|{3E`>|7dylK=Ho{*Z<_A!GZAHLhb^w4oqeHpH;}uMR7(7=8c$Y6mm>WJ%DjfzGE_ZkN#JE0VE^; z5f%S(0sSxaMK9F_CY`c>71jTlCFlP^ScBy>J`kekC-1|!4+|=SUi`=P^Iy%A)Bh>l z{@dmW#MV~Fjed2_;A20F)c5V{l>&z1Vb`#u{PiE|Z}`5T`=~-C7|HuDro^xRuTBXD zAN}hmaS?TuDjetkqTT=hn#y&L59YrMPK)W~-=Npy<}wXp>(W-#_*XIXpIU1VD`lV8 zmgUkzV|UV5k2B5s+Ih}F(Kfc(dD`oHl;&}+!1eeXHLSZ)QEhnHW8SBX~ubkC$U^Fzvi zY8z|*ABJb_f5)9OaUSR@z5zixFcbWC(Xu<4=km0*fF|yyALVUYdftZd4sW{>2A`g= zm-$e&O(fu^qeasc=L?Qn=b9zT+Ix$?Rd{@PpZTrW4c@;>UVh}iFp#RuZxQ^`&%@=? zr;bdaID?C8;gwR_JmSfQpy0Wla5)v~&X$z`XW*j35w_E5vEfC9|2`w2H7p38CF(*w z$6pc^S_bodhGOqk1FxiJKlxqCS$(-_UEcvF-Ov83H9(?v67G$O*t8fJ zC&@m%0a_10wr za((=NH%*nULl^V{Fmtv6K;ZDpStzznky2O#A9X;Bv31`%$=(gb;J{uIDFvcRbfHw7 z*|VmO0z9}-I+)3~9;I$s&=z_daLOsKy!pa6aC(t*vrW>K>DTsxu<9Jy?K#+#qLQNuR*V}8NX zImWmp*>d|fV8ERSunWSObc3#PfXstCjBE&oAH1Gf9e+0~$x@<7n;zn^6r>f}h_5%b zv9n(9lacynhKezLs;X9U8ov2*P~pHmh`imnf! zSW|pz2622p*8ZJ_p(}RVzuFgAPKhEjXlA=zUAg;-?wfPsh~?9#yCN65ltI)qATwQ1AoJkK--dCU_N9AI zw6btpf6dk|{0Nbu&kCP<;7Z=M7l$O z{nd=)^_j3fx9l-83B3EAb zh#rWn8+q(!Kxt&{4gZ`&ku9#;Yv3Eclrz=uK`e;GFVb@Krixl0+6~v zlIIGUJ%Q9O<)7LA<|+THm!{^+(&&656r{fdR<_g?Y!u!NfZAP3 zLSyJG5_}aekEJsT5&rSx`>bhG6SQ@{kgLvFa5ucAYWj*noURb)Zlog4G+h#qJ=Dq{!NmW)yUIQ25qoOuSL40h5t?%_|hfUHUH z7K#&g(xb&569@MQz+OQ0lhx*Z^JFbL^E?H&j9a2tj=ndDk3G;H(rMjMi{t1030@&v zqDe{Jk~y|w#{zSXTcRUxC|AGGjCM2P2SU|CC&+?;u%^pN%0r@b173b}+?8m1via#J zXXeb9a3S9oi=fF;Ipx?YKeA!Bij=1Sgpk8l-BHbE3a>FXr}HWr!QyTa6dCYK6Fhq& zntj{Pvc>`G6UQsB;Gx={e%C1cKJ^WCqv8Wp%kYumCL{vc2uVD1`7~{hA!Wx+9Ig#N ze=yT47A$*<*0wRQPne+Gmnp@h>q!*EClEa0_wd2!lS^=Q0Qw$WgiqN_NpQlH6g0Y< z?R}dvZqgC;Kg=mxPgi$udqhFOJt;w%41@&*)?&*miD-q@-?A8jaKOTW6oh`#Pg!Ow zOKW4nywbJ2o5Iw=3CfR(*y1d?hi)jZFV%gKU8ck(U}TR_n-gjS`6>*}p_ zN-evNW^G@~)H8VKI-5T$S_^o(rL0VBAVnygtUNGwK`Z35&BHmtF<0<;RVkcTR|AH= z+w24*jxW!~>zUq}-q87$+S~Yv0@8qD=`^W=$@W?g$Dcu%*YH)p?!Kx>G5WZI>!|5^ zz_NV-KT1EhMJWmxo9Adsm|J; z#RlR5uXYU2MKQ+SALDDxH~_R49!j24ev4)flOoC&D-^iILpAhHOy|66EkDIeZwF@F zUFzX8)0XltPFL!_2@A%xktzUnHDoN1VhE)%#6%2|**-mP#QHbZuIS%r_E>i+n@_yi z*|5^GmFWa`3InM{pEAB2MqcU$0EC$JGVIB)KOnmAHFV97Dp}1T*rN>gudUUGAaHT276|Mq|+KZE>l2MaS|Q6A{baUH&) z&x1~^oTpq`l8%BpbtK8RS^q)LLlTz zYZ$&^n$3XdP(>mW_Afl-F|dnf;ra*K{k{gCbwTu^4{2^4Xd6}gN^cuP$uZ6JSX{-h z4~HsXknv;{OS~5@7UR+<>82@)kJpU+6J&-drB@V%KB9FP)zdI7|dG_txY1PVeP zIbk&gym0ef7_G3-8?a$?z^m+DE-oPReCg4z;F7sP;?0&38R3Y?*xE(bg6{qRQ_bI` zDxjQVg-y`&J?-Ed#V5hxu#sTFkfk^E2xurRpmhLcOB0pp05v}pC2#qAh>u44& zjR2@A7_-B?+XDy=1#p6eA!gZisBZIXVf>^hZ|NNyxs`Fbz)C~^tBo;FZYGkV2$n=@ zd>z`@MVC~F0Mtrt-H;sW?3A~?$|qhR8h*Z|LC8UQHq#;vW>{1IfFz!As9mTZWua=H zI`&2*qmcA)3N#`SMXPQl9#6FJ^6~OT(tp*jPSS+l=BjFi?o{)5%%mSS1O9rP z=W1A4+$v_c*TZwF7s1-ej83RyMYt^6Jplxmw90Q)R17K(*yl^sCfsrSx@7y>Hj$qJ zjZ_X5A+HoL5d#QNpeWV2c|wbCw^Q28Om1dsboPBoD&m=!+KyhWX&*yfbK^)q>hzJ< z2A4qS5uRGi#79_M+6KK=B$5@bajW)+FzV2n&e{zV=-rf)Z|}21LEj`$A*Fqid!B)g zZmYyQY*r+|4NFFZku$ytgpPpg{8C?RI%Ds)=uo_V0aL{8MgoFqfT6Jyx{IstvLF?9 zzHG8B*u#NiG3ZkK`ZXCx%gk>XlWHOlmYjQgMh72}YT)7oM_6wEuueqdAT;irfUQZ71zDSDFa?=V!Uesj7|6q;}Rh#M5@FlBZsrI27ea$Na6D(|3 zn}W-oL|M46P=!lokW!FOPiO&sgS-cE zwY~j?W)%tg1A6ZD3e_|f2iMs|Ml2^S)WTI5aJ89YMFlZY6ju~g^0@&@eQT|Hz=Uj zK|?BYm@PC4h6+gbu}FDK+%d*cgh$y@^z7U19@_&V>a3*XrVuFldr5`W6jo&Lae|A3 z7jH_dyWX@xl#~7G)elljX?V~JB^6U`O=nUCk@G|7aKT4ZL?;dAWXL-C6@n(#cSO-R zXkq{OyGs^nCwTvJSwrQd(M5+S)52Yz53=|>WV(Ml#vCH?mis889V}o70Xpagkoe&N z_=jlOq&iP^Cp02HU-nBUq?$(TQO-|ux2@)AuHT$@?o~cw;F2b)Y5$ad326TlHuIpj zF@SEHJ+wyc5mu@}r`%?0)8mS0XBOxBKHZyWoVkk7%XrWklgn#yMA3$)RsZdNjR)KRLQ90au0}BSvLe8o zRAsi=sLf^JxHO+LM1!I0**HV-NA8EC0v7|pM=qNJ-biR&ERwwm5dGwh>7AlJSm$eK zY^-me6`r+Mx-ri6wqD3Q;pImCu=x8ref$z2)F(!Ihd81^r;tRl!jw~@+6#_v0v?-h zfj3*h#-O<|qcq%&_f*FQ${pVJyK2N`Vj4P6`IOAI#OCFHPMY!0_Q{{ zIS!Fc*#iPH#*~A+`4Mc^2MuzDjIpt$AM8d~*X<{jx8l#Mah_exvsxYnEA(dFskc4c z*IBYGJY(a^SLJWwK+fI3!XK_dG+pq#f{(%s+cG+?UrFn(-50|Nhxvt;b$wmN4s_R zy|sDsMM<$l?_zwwqlKrWa!rZOmdlN+!YwVgvf|}7`1RkhsnnSRy#s?G2cKvFir9j% z)}iID^{yI7d8wzYS9x$kTw+k>oLjfyCFkY%DmfU4DZJAOxsea9XMg{AzWD-eFU`Q| zMhbxd@gZ{HJ%GE!CQZLI-{x@NYypF7v0u|fZ@b83zTx)g(sWd3S_gKv83eZ@Ttkdv zLKh2u{@T;`LF_)!Lqv+kL%`Z@b=*hcuo~k zZ3<203MA;b5ux45So11o{PpY@5ApOn34k-RMlF8Zb$evalP4aq?CaILeT_;`j}dN0 zkSC95Q4`I!yq1~30x;A-sNf8+vJ#Ty_&znGK3)<^D!pJdn&&@yWo7(bKn46ZDK(T~ z?+>V1zehv9|A{hItZt(q-alx*{qQCf>H0~|$|k4qa%*L2-~;v88*+T25!&D)Eow3^ zdA6VtIY=;xUQjJXvTM>pjl31O&bt5v_j8!%or?pql1|@?Q&THJCk1O!nl7k${2^u* z=S9l(n_9Mbg4fuX;vnkI`yryIt=z4n3;j?^hVe&ZbYI6-ZYy+NFug`~i6hl4Ds=GQ zF{4kw*xe0sBetY(0ia~6BkG81xszDWWkUa=*upm_%XKYbeF2B7{j8*&hs$062YYWC z4rL$z4Nrt3WZ#YKvX#9|CJ9NFN@Sf%vc;h6W5$wQCR_+H38^I6vt;a3N%n1&Srm!M zOv^Z#<$BKRe?M=Y<2jxe_i;Qg?-$DaffwmR;lYF2FB*GdMA-iMr(ua)Sv9ICM@a@OaM+5bs5+J$ zXpcR>x_}bz1Zt>ABAjYalxS9+bn9B{e86$O_R<@j+j14^(QAF6d^)3t1A5SWpNw{4 z>(DT};(fZD6nKye(S`zICci@|q)d40_|CAtoT-!DmAPy49lWZ-Z@=JGh;vjbxe88`|sFez~ z3;2LAN1GW_q2chv0k*<1rO>6?J(5CufgvFRE}#L zgWULhsC-X`nM~iI1yhym?b|tz*d7#;VDK#+yZXomqGN1a%TI*%vWk6nX*g|wZq2*@ z>*`mR#nx5Ptya4EkOxLcVs*51l_VB7Gd%MnG*anaccN4Li(Rn;?uP?hz0STnlDylT zEC6?6|DS{5|NCHQL}5BOuhr-7ZsL}PF4O&RHMY0cU9GfbR*+S)52h5{0>tiZzDdJ{ z0D+YHEfULQ6W8|YEj@9dN(ab&@dK<}pR~-j3!mQX3onvd`bVm{xFaJtZvW#;2gG$$ zY6Lk}z}&wObtD1Dgv`PJl$?jKKQlUqw*hTr8cd-nZpe)RUbgkElUoK&PrW_cW!?nQ zo&@`xt%C#~xZD<4l;XFKB{RSZ1q_*Y=#99+CRw)Lbg%idmwV}N@mU6jn06W3Wy_)n zFw?y1#Xbw4z()(Epr@u_@4i>;gY=BX1~j3&e%P|7B3RxDE$pnVhF1+1c-Y)NCF3;RD-Q2p-sFDxx`Veb`U2?4`+e^NPc|(Blo6?bY=byv1H6F;NaBggf#XE z*4d4gI8poAOFy=4bB9UD(K#D&DK|$Q>(+Ga~6qE?Ylma#nu#w_D zgunJ0=eDe+c16J+$zd98!SzWeql`P_bL z_jqEzyw<%fu$o!I%bKo%Ji>v0ArRvD)9;6uv1X^d664%HH^5R)+$=s%kPWN2DW;ew z-H0SwQtcXEq1-qR*w&QXxAu0^y#cRGKh7i7ydCu4j=Yqxm->9M>yjJ%W8PKXa!4!) zT!xZ};KK?s@N}!0fg)fIX&@fgYZLa|LAdT8C-v60nCih-r?0Gxy?JDCP9;H< z*2waVLy$%9A$$2tx+}NyQU29GaEoGBz1jykb*jf}-nspB&Hq7w(1m>f2g5;V4x&AC zcsn}*b#lCE7@qmSmb^LUTQZP< zlYoUuH@pm5;hUTpJZTebW{Ap-Q}=8t%Q-AnQ}8smNrff&g|S1J$RM??(}w8hp-Y6( z$(4|plQMZ>GOp64f*mrQUKhZij^dg(`D!Ze3Umw02p7}8xUJ$?Fi{6JTf@mYQnhB7 z<>ic%?s?|tcjiVeqNh*c=g-?~ce*j!$(bsLb0DAnA3OsImEe*j*Fal$hLKsyP$0O* zD=uTqlVLj0-oirv!)%77I4bsZLiT;y_Y8j9B?mNQ(Hcmy^ahIQX^wQ?ouO@!V8{5l z=xX#{b){VIl)U%2q^;T3a-m4<%|EZanM0QNP?sfTvDr=HDu!e>KS#rNV%cS+ktWtY zAB^c^Q4t_IiFFMlQ*^wnISh;CJ0E#B#%E)lndxrO7_az@?g=XbZdJ*xH%s-4nB{cVQu- z`e>r~OZ&-%F{q@K6v_}lfJX!mr}POBOy)ob9iEL)*SdVwTsmJ%JZu|0{7!$$y!i8S zY@nRQkI?U;fc7@K3_b$iV}P~Z^rANJaPL8uHhNn57#*J3>upZEOkEB(eS30x_lbAV zRlD%(p662o*L zZ8~A85#@ZNGi|)n{uk9ng?8V#-2(>Ui$&14H=FiOK=Yu$6)5-kX;9h!8jWY10~5%0 z!3n)bemhjzFuA?aYH;-T#r`6Hg5`+=T|#eC3W}!t8o*y6QNjAOQsTl4SCoCRloIy0 zZpiUYtaPc!i|{AfZf7qAs~ybP?c{L@0dlzqmnr;o(NQchcA&8_#7ga?J%|H|)HHlf zYH;mdmLhB$Xbx`Q`AqhhMJVEfMYAvmQT_rMFkQL}*vE+JeQV9%XjhVxYAm#my}VBy zT6u=w>Z3L5PCL`ff%fF`L+G?!xPwYO0IY*2=Y|&X1q| zg_yQtyNyRk#HK-9$IcdkZsP-dz=R0l#W6SD2SOJy6uH-}zpWPTDD|PXjlz0REY%I#89R*3F#{_U56tt=asDnd27eA*bgsT(ZmoCc)A8iOqXG7p4w%-l zP~2IJgp~$&tWSp?o5kgc>+GMGDGL6$*YP5&Swxq~hBq z(%2sUAaaOk1Gn_yHXVIv3|1?XcK4gnh2$E}6P-$YOk&sov#AK&?JvO7i!fMeNuJ2Y z->PHmOCy~8*lpty$n<`q+RSo`b<%lc`?a9sNU_M(b=jsnbWvJ11L-;2dxFw4vD7+B z45<6l5mOi zPDU#~bPb=e-~nw9q}4T`Znl>=Sjn@6b5@7;4rL8nKigbTlTZI3_NzDIsl*$L^x3~n z%G2zF;Ji8yCkDS=K}xIA>7d*GtbXy`N&)L$5Ho-bt09_rJqr0=J38WhXfw6`(etmt zY(rolxY{k~()a0OgJ6>wm;qCuyp=aRYMG=4j@p$v#edRFKMvZc=Q|p&s~09cDn~xQ|fk(CRp7t7N*eONoB~oMm&90?P z;TfPbVy*EBa2Ccj0aEnPGIUNGV)JR=oJ-+_q=9_Zp9+t!J^m~8YXSVl0DLxAf>Q_M zW32Wg15Pk5tyBHV zST3Gyw;7Zu1)83qG0UXxIQm}l)_uRzI5#Z)OESkZ0Q(_df6JLGWj&xG3vKfyWq@u# zi!OegDj0P2Nbu?eKj7%nb1*E1{zFqO>CojB`}TXe3ZHx;(5?ehuOhL3?#H@; z{w$t1k_1L@f|yR2Y21sk2;|F`IU&a!b#4Uwv+X(1PfU(g$K|&p)2pn&o&1|o!z=~X zlgyeKy3`I_z4MNYD`Efq-l?~9-Agv#&Ne98+46XtgL+yT(=;@SB_1vNH`t?&9HvhxR%P2mBgT+(3;APKDG zrRX9rrbwY3<@s-^@qQLReeWt+IZUc&1VrUVM~un8dl)g6+#d+{K$GAS(Fh*yM0e@E zUPXBj@^-8;6bv$(g0753zknXK^NH$FF|hgLzFcUeOTh!0b=c7+Mbs&}dn?5yFTsJn zomO_c-Q^HIlLqcE+RLvGKZV`jM6<@;$QGWk|B#4!cX|iD+(W_Uw_#;G(ev4iC@9Z& zsL-F_1()_B`?M>Srn-ZS4`KdqZr&Te`&9PgqvL0cj`5!s=v@Y}b)i0fwhVIV1Bv>x z3?yB|84pP}JG}T|Y@^p98nIt2MBFCkN4`8|K&*9NsV&)P{g)xLXMydMNX7`+KSM8- z%Z%J~kqmb3kWTQ!hBFNgJ)HGy3|A`C$7f&NZ`pUlqN#(+&o-rlWzACOFs4m_*7LM8 z59P=>nJ8>O42F+m+V3~MXwlEROnmA5T&aZ`jJ6fSJvcO)46@Z33Pa5(3(h0-5tMZs z5J2x7-7~1X9`-ygl&}ZSY)cWIz&-a~Zm(Q?W!rO$H($wIs1<4I#IYc^uqiWdx6 zLyp`JC<@Hn3MfDD)$;7lZ8PuFr@oaHSo|GFnTN9Ug7?;GC+Nn6J~1GmI?lU)MPl;l zLc5ZSL-Wj*)tAQ4XP@)+7A)U;xGUUoSHmo-UojsBs<_)JP4}VVC`;-x>mkV+xI(WY zIN`G=;LF5M&+kZeey|vhDL6l*RU>|4MG%tMxkX@jfW>kPZopfV9~JO+4hf5Ih>Q9c zLd|$1zT*A#u-|9saW|fr5BQ_q5!IdVM%E7Ru~p1deQr#ATibJXbe` z4HSG8hR`~%%M+i$ETghb?htEUWEd7sx8$X%-L>QC!!e$=uDXbFiCo!vv=R^nmx;?? zAUB8VYkJqVICjC?`j3}=bw9fcst*U$f^{p0hTy^Ydk8VKrdcHe%iI7BLeWA?L9fU8 z3+jOz{Cy0*p$oN1I2vE?`~0iipV9@#uF@`)K$Le`#_Ui|LvIqx?FZ&ibdy4mvK3t` zwecoWETr73T%UGn@9G!*t;cWHKbGAjZg+m$r{wT%BUZy5rY ziyT{9P8J3~EW7B5Nz}Wf_0b!8-1Srt@7nf(xK3st;K90qItJ)7N~x8&{5DaAjlJ=& z&0e4eFlOj_sM=#gMRXuZkfbZ}5ae(+5&nfJqHLdH2JB%Tt6&pl4(8)+ie_+SI_O7d%Vays8fMcGJ z_?G*2?>d}!3w$h-Blh3S7gbT7pl@>pgw*|qO+6K2 zUQ`;Vik4fXnz0`k)u{HR13P34@eY^}Ux?dhrLh5C8-M=fT$z>MJePa9^6TeANYO`v z`#K}8MNW#%E`S~g%{3#dcp`>b3(N#)5$}%CFivz@?GG#aFp;HdTLRS} z_*KWhLN7w)!1fV(AB^RYLIvhhb~3FLDh0OYe}RO*IidTPhA*ssER(j*7OPmh#afhw z2(rI(lDW!kRbZ+yu4Vvn7!|yV=ZUNESTJ0hzTQ6X_krXprtTEU`(X+SznE;)wk!BC z@1;xz;fKstb)9WBdKuGhkhy>Qvwgicp!_A^4aO)~T1jWp1UtH}5|DoaHYuPL*u-6g z^Wj6`sW>6@Q50w?Cz^>?GkX&r_Jq#G)osc9W*6@(lnfTR8I3G1{Ym~Rt~-kfBN2a- z0|%S<;x@_H`=*Jx2x&08wL5ibnGg_Z5{{(Rryd%YmtDA5niqVlGK|cTPOL&e2$FdJ$R%m@4)PXsget+A`9wwaxepUqD{Y_ z35cj901f2K4E=W9FZP2Nq4xT@cEjfG;F!)c{P*?lkC9D>vO8Zq(`~={6CB_>;{9c7 zbD567=|Y2Plzwf8XpOfTFOVt>L2ZyHmIauP-lUzGMtOoN$V$UH@2iH}m#FHU;;*li zU(0}H?F6K*t3;O1ga7mqunM|mfIaLj7uq&o99aJhcG6yL#B3+k`@9d1cyNA8o#)(# z*OyM_kypz(!cF6F;AopeEXyP~!CO0K7UlWG`$fTnk*{}BEmQYB7Oldx;BSGhU2vov zhT;qUSuuO2#})}R*rS1NW4hJgxvmQ~0^}zrW3$^3X;r7DZi7`?qr?DOx@9)3x}DKp z%zU63q}G>bb9Bjjx$c9|10G4zKcc^H@_OKdH_%$RrS;LFtDKxRLx?BlR%ZoOC@k>I zn+g}-G1i|P;*#c#lh&A$++l|0H9D1EY#fEhH*xs1|(+xjLrJiL0EGABH1YnGMc zq<;Mv$&BnkL#UufWJqG<%>D;{+_61Ga$6`)blF}jj~4BF)Vtzg`V&~xsrKH3QRw*} z>BWzV^-JG-aZWxK{bUFP7%n5Y`AimwS}8z5NunX}mQG?~0SR&g9?HJR=`b+yRh_&B z(#V>PCJc;T4;=0`)VrTAWqrz_e?NAf$j;+r_Q?gq+d8TnxpVL~zHfwlwr^cr=Ednh ziAiT0g3HfJho{R=kDt!IITjcxu%91d<&&IXxV0~obsb1!1yTcP!qjD&ih)q-nT64nQ)#X^ zm)<_Ci|tI9@-O7ct6z&9?jJi7mfi9tUm$_`LYtR?VLsusVgjJV%jD85u4Kp_Cg<84 zeD0^2pB2_Pj)ZI4dS^x2BY|BXk@Loe370 z-^$lq3c@vA(cWu#p(e_Dee$GXQRy!ZFXL*iXeIjoFyG&*9kuWHpvdg^gP+L;zjW7; zz)|J5nwfMGF+3eDLn(I_9)YR5l0aZE5!_JU%J!kP)6n9sG zl>pc?%NIcK4|{++PH^sEWRwY)^ne>`@bc4MnNIi5)(PO8>F8NkNvwVf-zV!RTO2Wp z1-e|a&I9HbfJh9>(t)xqRC%8G+pD94;a;ImY;0`Jlt#yV{dMsnzn;{mZ_xeQQD!`}@OfX(Hlxy0OYBqB_fB~CP|0P%8BY9O#ORNNDu>p8&*yo{5KpA}? z7Jn1R`~Bq8aV@I;+gUHFqvRcjyB*!pFPm{@wt;7q77Jer1wNYOL-2Dap&dD!aUX^X{DifaOmycAxtojJ9r z%MIRfGpiaam6+!~UI$+ORHy&V=j*6ck9>TN+J)W8&w@a^^bY2wZ6jHl+!?NHRgx%~ zK$CzbqeMgX((EV0*wA_(LcM2+z9LV&hWG_HXt~GkmzIx?;z7L6KwebPTgQ<}1bPCa z5PoTB)n#aK{$yQSV|%+}+_59Gjk*5g4mC$Vc|36b_2O0gUs3Qf$X-zfMHqx(ykzfX z6|58eOWs0wU22)H%uYl#oS>KPZ~f(=Ag~0#?s6EI{_VhsCE#;9s|*?28PSf8U!cR~ z?qy+=O_rmDxAE1k_CWCw^YIL1xzTVF-w+!-W&aO;|G$IZZ_`+ea29!Dt8Nu5{yjDd z^aB3pU~O>AnY9xon-?Sbfy#5b>XEJQUW!;>$Pa~6)bR(Y*wfJuEhi-#K&B~b4kZy4ds^#lHzKcyytn^V*0D`eF#9WaCS|5*4^);uz zAyqrd9WF{!#8y4wcfUIbsqHJY*Gz_=fZs-DCzvOLr*)MK988!V>CA-%V4eo;9r|7A zY`NLfQ&yXf3@G@RPkSrv(+svu17Sy%w3Zqs#n zA~d?rE;r0*tJnq%jA;hcdCcCpBR;^FwI~x?!So_#18|vMWJf>PIdwbs$BK66R3UYb z$xz?Fw3wB*+~+SA%=2KyC#Roo`~y#f(l0danTyJRFE97ve_jv}7K?cnw3gP~c9};@ zv(fW^d_DZ=BR{SNdvQwYf>wuPK2_9|g-zS26ng~SX$$wq_PuiPWVxdhfUeasVHv7c zKU~f)E|e;elD8nARCEE;5`E=?sL}KO z)=z$4u#%no+Mb#?*Oj`au<4c$Mn3zTtJN;HKQ*vF(yxYfAr8l!qx*hp22tFUsW@rG z{-A`jr8`1R_ifwFN|w}1B2t%1RO_T-c&tA~oql|X=E0np<;t^<(M5Cmj8U45Xk0c5 z5f-)M<(^${P&;q5)S|Xa>a!6a?}eQwS@>k^`)3`5z%t8FC%_Oe2ZlLVakPUUN%>#o zezr5fVAM19r_s8o6TYfr)YvSO>q()KuTRVnzui2ME%r^r@ky~=Y=DPKhleVNS|XV_ zQEa38c2 z@MXx)`#P^FxRtC9Z77PheL4)oGK<N4AJ132@^3gl+r+6*BOlsK~+XmZAymcx__-N#U`X`6D5`X$To};NaDgW zuFael@DjA8E~B{I<4OR?XKWjWK(1bRQzLoi)s2*SOPg$d^~;Y8yiX_!(xLaNcu}1jqY2OIIO+fCO(NmeG@Nw_%LB8b!~Qcces-op-VBJ&dRtA&@n z4}{m}XczPFuT=Xy-=7z@i8zKj#%TkyWJG`p=Brs#-;kdcR_b5g8)SJn_1-zz{)oY= zay2`1JzBO1*>qvyGW|FAEE3R~;G{>NhwLO-p5fG3DWi#SA+8W+@XtIu{(9o|Br5dq zvY(f?H-Wz_>|x`8Sh%`N#G#vC!^pqOInux;18EIN(Q`-OQtY$e^?NP-^#|=}oirKQ z<^6(~wKY@V=6Om^buP za}|JSfCgaemd*)f0ws_V8JrwE5DRF@U@^gOqRZ|!<>18sI>M!Vd}XJRt@bZ|m@#a{ zZBD+I6%IRcTk^wh1tul(uSf;Ug8R8UqcRi&@}MG3Fu~ax%l|?SxIc{9c3qsPGR|8N zWkrD2OnM+Y?ll;N{^!+TkG>2A$Ck|glPJ&*j8U{HL8{t~j|;DyKg1LB>-1xhL~=c- zAqsW@PtHyu^aNbSO5cHDXj?jP2}n_DOFX5nG33|SE!@HSymciU^-+lwn;iN_i29ed zR!PT=c4y#VC7tfwnss`{XGhfY&vq0PPnCk!cl$v%D^IjeW8t|C=?W}aZnD+tEYHE|MOu>kI$GkI8Bsw3XlM60CCi11_ygD8hiNr z?-v>$9Mx)Np6hpyx62&jVvY7viuFq)XE8wSpMQGhPs9 z1T@z3Q1+{c6hD1DLnf;oE5X5zdNtNn&i6!{&H*hs3JA>;@=>1W4mn(a$aeB-z9oRP zcrAtp)wU#i6_Zj0drObS!lY+>f+yo^H{`P)2s3x)*N+Yi(mal&e*NYgh1Wxm;AAlY zxRgHm9^fiY*#r;j>_)3JahJWbwlrplq2nI!vd+9tJDNJJX?;jwJP&eW2TrUZBS(E5 zhZB%A36^PG)ei#IFg*-C!O6T6F;TM_vyc5=Up;-%UNIlNnOdFY^Ut*w75;@>tD`7q zkl+es)DKVOc$wgYQFlTqzMxTM&PMDqf`HVE`L#TzP?+Ih26KGVEq&#^TI4R0thIF? zd_&j)#D4ZUh6@eKFn5}RU92UBT=uqZe3N4wEn9pB$=BST^0mkv9_|}BXwFMHi)kld z!+QnD!r_Z6Aza~UnkJq*HK%vT=>7ig^p{i*eHm+Slc>JlEbl8R zP0_)S#fwG%ppI}dHIPXkKwJiBFd4|4iCah1w)%-v(QigJ>fI!M?&D6r`v6g zC0V^|OVwTam|>w-F!=ht$W?o6Z%^O1G^#yYvTyzXt+7uq&P@A>YgTR}<%-)i$o@AV zhaP|2N-)l5H~~&O&WJ%0V^_c8`O!xlkhOk(zQhpelKU}xZ9IRshCb8X=e*Q)#I$Q6 z2VFDzKC)y6F?(>%<$oc9N(RYR1$1y`257gFvfFZ9q*1E$x{OTIZ{3K`)-QJphk~ZH z%g@b>Tb4;^*qu<5n&Zxr+S^M9HfUDjY{S<`Irc5aCD}G#!P$d{L{%$0W9wCHd7^+D zLXdbjVO2Vu?kuVdG!W4HfJZRL)lhtvG#AQPX{g;uc>8rTVn;r#&5RTnU0`*okl#oc zuk-mFdBL9LgPw%)VEmVzyjO*}#s0AjkKuV9f>XMf7x!=2Q2ZGW))dih-RQN78PEMs zk`U2SG>mNm;%jOk5A-A~ATey!=^Wc}KH5p{3&<R3;RSlHA8#SY1fOkguK5?~To)?$CV%DDqQv#1`7*FKpNtWgxI|^1*|0VxkJZNY z(FsYEF&(`0+fY7NgYMM2esNSRG&&|cA5T1+o^;L{0Y!hnNP?6_M;GD|v`UblK2X6B z8sVyRAo$xCvf2hr+n<&HJecYPbFI!AQGG?DrMus-w?Vj|mvF66niT6?+}L0VT9gr< z@)QN5|6cxKw2@FNBcbrtT~0BhE5~#RcA&z{ZdzLp5mf-n1?0Z>?E^?;{L&q;Ji-Uz zh@w=h-?85 zUxM7F*L|k`U=J={^-?(Htnwi@R;Qp=R3X`JMRyns%WfRK z=y6S5aa~;y@@Wopo8v-h8WM#74PZ-A~HrP;~MH#_oH zo_ghO^RPhql3TZqTVTwUD4~ET-Cj-!h-88hSw%n~G*_i9Okvo|ZTsow9;{1ZqZ>@V zHPLJQ9j3LGS5VliX!IHaErrv;=8d>KxUwJ6Ay1@w^c`fx)IIxga+W#vd@=Y;lB(IP zp;?VX^tz54HqNLrGf3c-?v~54|0qIEkE_cT00+@Ugv)>cS6aHJ!IR`S5R6P%4y#T* zhb@h$RjTdWSGpbL%;yhoUJbBi9Q&_lzOL{6FXVjHD>R6@{))l1*mE+YNgR#N$HF)u zV1mfv=8w674JE<}e1_olkm18=!hhdtcVTP%A#n|Q@zm{PBp0-IAF$B?9ACz*jws8~ zzm*OJwb!N%5qpW@o5OQ`6K_+0+C2QG!tS#0i#YBV%W~vSOt4IS*iZ&G1+4|_xOUC= zsRD_1-D&O&$(@)M&(Ccw=Nb=-tw*L?zgKy#l2#6?=R|$D(-?kym|;5f04$MF^_yy* zi3+U`jV(Rq6YQRl&~TObZYpn34*QAsrqQ3#15MTNa15AN1#VtUx|cu>T8g+)TK=<( z>L@HG&Z!nLC>>w}|y%7Bg&*WjixrGjHaPqTjV{{xP zz5I>_X&56qBK!A7=~>a~WW6t#p*h2_y4KzquGj?fq)C*$%DkMC?DgV*`ama^wE12~ zvS>dB&_RImdR@@f5(UR(%mkTx-5;$%24k!mPF__g6dDL|Q`3XwrAL8$q2WT8#g#+A z#;P3rHpozK#bAYBPvc*=(GmyOEP9`-x52yKdR{GBgI6v3_zNj0MiU-l1}xggUCz@3 zhntdDRJuzxF99yAO5PXjD~S%uqieUS4thQ;vAUUY4y5Z1pfP}p5{vEQDYuD&Dav6Hu2>8s3{$? zcd@JuFUhHd$0}cpL`D&UBF;SfPs0Nygx*%s5FWo`GMxA1u-^Q%4O z7DQoHPptQNFQJX+94uM4gYy!Ew}_(TwdNY`6h>%UlL1d<8-~+?ngN!Ya&(&6uBng% z&u$e;1$^v02B(GA_-8n2Tyda+QrbVffIeaXLoyUDb~F5Xy3XD0nL7}j-TLnM@L?ld z_cuZp>(t!;82uhl`E|gmZ65;;7QYU0vfQDSW58eX{fmZoD`QWWD;F-Y(aeRAavZ z#`-9B4q2g;SG(I+IOkfxb=p?-qTlPjt z(r;fpTP-HzJ^12TKjdHpM2Qc51N?4g)*lSfpSneA+a|n6A7Y;=B%SN+?P;6U*O#aL z4dUBe%IqRHzGyplN%i76h9@ke2U?b&*o)V#FdUNU=HiE z;j3>w9H##!zMrT3G+7P`>-)5+imFpTbW;I+`Axw<)6_}GH#YLwaxf?^`5Q|3McZm) zJ^$)Ib;+XaAs6B?1ik`C?X!s26GI(`4i^8-usA_rJB5#m_VLAlKXQfV%wq&G0WJ#X zV;x@rEz_VdIKrOW5jyTE4^iVSd@ok$BjWr~BoYC`44A)U+tNiZGQfx(#?cLhVYFN* zLTuv=#lVDfX~nSZz=;!%i4U$!?0n`zpbb*HU{}R=m{Z@!4=9j#hM_6SIt;_b-aAyd z$c1_N*u`!2-|6!JmBWr`6Y46+oKRg=B#R+x=Y9#$DE!$nTg43be<2t1zZi(5#7bWJ zaM+58D7aGbsAy6oNt^d84uYNm(O6UNxPuLIqcjmIrDmBJK3e!S0DXt}%L2ZCGaS3V88waIr5P0-5ix z+2gi;>id{jT}SGtz1B^8^S3Dq6dh@SfmdTpnNHwTW8AzUfA5OObgwSvrOVS#%*_{0 zb?N2W%%kl?%l~LPpZS`1VnW%M{4WIS3WyG#)Jo|+&Wa9lC&DvthqY~LSM=u|$tO;0 zWT+c#dFDJxDN(PgT}wWd$W&zXf&%lz)op$tkbpkHK%{Q<>V`#!iQeBf)acHq{k$%2 zk-Fi(Jez)9R$bz~)E^S9nyhcPY(0lQxq`Y4X2HS1j5+&}k&Mifw!*W`@72^GUji#@ z&w0$=llry2)y2>yH)3g~&rs(XNSf|b)I~-U_Abjs7&NepL;EVWX0IOG_qz9HVNd*( z&BD(fc<%qH)BoRf`gA#ap3{i=%EaGsk$ z+EQgHXSJ>siFl0jqKDedrfn1cO6~)qsqwEU96VTyBU@0soxo-VMsQ7MJedpf*s|Ra z$5?m6;YpKQgwN~k3H8g-*ggCIlDLxMK%B5(6NGrvNxZ$+$rHq;)xgnluSD}nD^+XC z_qOlU0^)|k`4;KlyWjn4l( z=NB5w$>;I_%Vc;e?263rTX%vxNN+(oJp%)r!;atd1_NrvWP=|6zT)%v_`2S{b)}Yg zQQ|roLo;Ulm}gP&Llbh}m6bpVp}v)_le^{SiNM*Ci^i}?{M|JqGhW6$9Szu z=u+mW)iFSWrM!WcBcz&QvZ~a9MykTL1Y)BPn&;zVw>R_t=s0$Ft=Z-vwceJ;|!VXRhN{i12Zqt%TLbccM?~s>$yJ<{9F@2F7X^aenq9^%Ydb_RV4lf z7QCGV|0?w0m(*63tLf{uJtYnk8SM%d?Qf-ZG;Vy-_peOz*73)cMoyq2ATS9g6b!D# zP)Iqw{$#uiN{~@f7RE3qbmOulF289GdiiJ5*Y&KVPix9YwC87g#XOJA`YgTZQVKCW@U-!{nxu)vAQ-D7+m0?v-XU(z#W}NA_YNUoZ-M;4skkj5V zE~R7c!kHetO8fSIrEBw2U2+jEE~BPEU?YI1PK-chQFrjuVZ=?Yn3Lw3q0rS3@5r^Y z45Io=z^C}ikeS)D&!=JGrBn={VQ`Q_e5PUO4cN4=3XijS&-c)y7*{$`%f z^aDC0L3f8Uz#V`3s70&|c&8jBdJ#gHW+Uf0-5h^GuZ_8^iz<9Z&Qn=~oD`NDdP=^t zKi7~a*h+L-g&~@YRsnJ*&Vc#F--3z@{aG7hD(ZTkr=1V*4Zv>oy==5yxEMgu)SOU3H8FS@ni?+!`-8)MyE%&e*1{_H}X=l01~Bc{NsxHJZZ?i>FJM%e-c}tTSqXrZWb>>hx+bQ^2t`eVgyncW}K;GfzM@EGQM7k6uQiJxPc~G{%MKYB5 zWQRgxt0;@mM=Ke;F244Z^&FUS?eZd_VZ-^wuO&xVh}=^?-hyKH09MU$-oN&=V#aeW z5BgJ|0b>Ps#5cwpvqh7WDN~=_#@|7Hd-g3aAg|6|!*z~!hj|gOrXu-J$LUu102q^W z@aD|Z$)Bo~jX!IW%rtUN&Dgdx`$mF!3c8A&qxkM1l;MH;iL05Thyqa%@@4qDPtD~HXT4nlh3fo9xs3->Cd^3hT&Swyv zyS$thdFRxs0W&4wK}kX0CzVVst*=sFF?1Jf23PYnkVF+FN>F_?;Yz5mS%qPloc^C3 zufs^!I^@2pj*iU6cwAA_^);kbvot{xc<~Ron=CiLjdf(Og-R{_WlTU7?599B<<3-&UkG&pHcv_es0IxBUFdc`)=l zJ|Ftawimp9Zg9aXuC~x)2m~<(V0WADktDf_C|^!RyXTfEhu0kmoYP!r7pfR~9<(54 z4b{}JE0?VsSih%tHv~7Y=fy*j~r~W-> zT5(Ex`E2`iSZ!asWp&}L6y}@D53KVF>yod@u5aRqa0<7F;XyXUq7~we)6h_izK=bl(ln*z!Smg z&qgg^c&4|MCKhr$O~RpZJZq`KU+FbXaO(9t!B6T#oEDf9Lue4%>C&%{p#-K8urNpD z6X2eA(Au89C2b%1?gP%#2!9s?qlt-?<+iBM?-L4WLZ>@Ufo26qPxKj7PzYJkmdh~= z+ea4<{uz&&wD_IZLHO!jn4a@KRY+;kLti85xn^bkc)UoBY1<{=<&3LOZ(dgAr=&K^ zLGs^#e0qvZKFozd0;OKyR2_aFA!`NgOo3T5=3u8N+rk?cf4Fzo7OtFXoXZ>3(U)xw zs`fwjIkzZX?(0H57nBbZwu)Hh{}*+C77z9R$N$44Lbl1i#gHutWz9MyBuOR7I}$rpCi^zl8CzsBqZ)4+^SR#N-~Z&guG@8T-ERMr|4}C$%y`fH zwLG4W$Nd4iGUf=;PE)3o{my1ZzmjC4dxBn&m_gjfo%OcdjLnG7Ayzl3Ey+Z@lg3HT zUqsSs13VF>1@@+j_@H>mGMVs1U46-mIryF{DvsaH`E&ib$1!D344z1RE3{d|%?I>$ zr~~MaQT+3ws^X8m*1WPv_*>GhJ4m?J;+(m=ihIzuCsy6OO2WS zbK<(r^87tTW+j{5(C1*up>NZK)bi?*N`HHynFRLf5om2e)S$i+u$Y`xakzWBpj;2e z-liQ?gra3{aQxG#^xg9Cwy0fG?4Rs)Wq7@zcFS?`4;TyJngOrsxEf|`sS{#|+%YPE z7nYGD<P2)WI zfVvn#@FWWkn1ieS8G#Hb?|-OVro;3g_Q)!w5!3U`_nMCunP54ekz9b_x@97wK6e0@ zqD{-e6d`Y7ujQIQl<_REx!sf}-~Q*q`!n9mOR8?3SHT(QW+@Fl-L6+wy|@3_%g&@l zY+ln75$j#)R)3}AS|p_TrCFU=EKPkmextGyTO}&dL>_rdllg z!3<4ltV~F=wr+7TXXwIF_QTp3>(0f4jT1?-J@p|VN@njCT;T-53FVI(XQi(AgbN~e zY@R09WA{hL(UtH4&!B2d^A}TFV0pDFySFRg>>CD}E=dfza{|h^fQ%A35 ztsZ!V!KmkE;eX!ERUjS7`y@(v#2h&MidP_3Gwu{ZTOQ7K`ph;}f3(kHJ7X@CL3EK> z8G325{65i+1ky^N3kT~|SAe&Oc41oGefF=Yt-t@i(z?+(%fL|ijORWJexF$HSSn)X zg*zet!rC?0zkeX-f<~ntkiY*3D0uIkhruO;9C>;xE56II)qQvC!H%^PA3uGBjI^Gba+n_eX<5FLQ&RKF1E#bq_>%RX=hf}xlk331 z@p;2_xaa^SZfy*sOy@xw+eeV(rvD6P5+~_+{zbmF55yB&F@J?Z zNZJ&o%|@%-8+M3n+eBfx)UB^0>pA(9{~-6s)IwZcN6mY0k&STY?pa@dcN3-r-TZWy*p^Z8F z`%G`P&6F!F@0nY{Ig?zUa)SQp2^0*ed4jd1Ii$zoU)lXFC`|HE@~hX=?ictSzjmv{ ztoQMt;gOBX=?AAfz5uqzptIi$xJyy)f%E7~IoX3W-2V2^WqTWPoBmtpmEo}fe|zcT zEo+xy1{=nJk*q(7VDQ&*V&Ml(@B{<*NM{9B@69UdTEhGE%x`1w%=xWr3W^j~R&h>r%$~QD*J6ka zOmJyi_(=kH^#c0!1@LXBQeg4=vVf^&B2l_Ev2&I2XC)B>>(0G% zlq+DDmvGsnNlu2ep0UuszEm~&eG(Q0`U?e6GguyVol#{1OE36;!S?z;jWumG9h31J z`&Xe zA~(h=*cd!_F8GXc@m<0Z6i%?{A5EwUEWrHt=hwQNh4)XK*$4^k_P zYn}iS30=ZWkU;TsC)f@?klOYf#qGTUC*LnrN$**KPKNq&Ui|*cLfbt5_lNiRTH{OX z9Ud;KQhrN|>AG`Uo_ho`$b6=h0G@Zr+oZS;j$pz&gm-0i**ot~Ybl1a^0mhmLzkZ_ zmEU|tVpG3Q-S}p}p)t2Nmx6-P$I(!*Xn>axu!s8;fl{>U3Cj`D8{JPj-|W?g$$pnO z_T2v03H8U^W{A6F`mNyKCrvco{f9t9^*n&1P6BVrkv7d=WJvY)_vu69q=J4?Zu^(N zB4FA_#x;pc7Z|rz=L4ub03!u{dk*fU%oicBZaJYIa8`Zw*`7zo*EDlS@u7i*D(OZ2 z9g%R+7q6PTV{uX(Ckw}D+LIl~f9aP`GP8)LB-i)!@l|f!YxuE5n(!kw0Nq0ppMU)K@@7d(@IUs&97 z52muWd^y*w8Kf^?W(?EvjbuUE?AY`v z3ihu^fij^53!$R{mWaHIex$4IUwjGWWAD&8D_A1HIwX2v+CLvt{#KuPV+Ka{$SY;?Z|P|7Tx^9k|2!;d?L^dUltiC5ii3 z72Ul-3GW$8>foNs@1lcMjh}h~nJYM4Omi(VY9c*;c7|rC*6ZKr88(@F{0Gs{)Q#l@ zx#b1Ae&mX-T6^QqK*H<=zdREDDp)o;9Nt>-MfA=et5FD2^w_}3oKn_}t4rUzOQ5QN zo+~jy2a5c)zyJbCX<6D2*x4RT9D%RCfD-wC;u_uVb{$`*554S;y}C|u$AhD|I}$G- zkRPX`qY2Q2Btihwk2>3(RtJ>+BvPF@Ij>^zbE=5Y*+`4a)^94?f6NTKc|z9C*$fE4 z>*h%DAnqU0qx=G0-}rT{Tn(OJ)1-}QXo`28)}IIsRx{+g8F1&~r`nIhh4~38h7ew) zIpZ3d#-~7->-9zdiH5HGX9W}d?x+9tyg$`F@(5gBr_5M#PoZl?SH6IT)@ax6r%)Q7 zAT@kOHz3-*%!}f+BFk%8KEkIlY&SEb+1@KLa+cXr4ibzgLdlb1ak>HeDZ#`Ofw_lS zJ-L+Kr-7|W?#GIME{>d|Bz%`P81UYE(({t_s0^g&J|ifn{|6E6fYB@{e{x#O65B;R z%kfJ;Y{Cjd!bhLJ#(XPud47Q4V(uRjGln2%!14#ADg|`sSyBCS35_)+J{0?%6$L@X zk|q14i>ls}k9kDHoXp^|xE& zSF%$NTWH8FY^i>SQg}$aJ&k1fXonO9FJDr9q>X$9%mcx~p}>o8u78AmH!^OQcS<$f z$%6n0YLWQ}c2Sk8H(Bjww(r_Xx&FKUhO0@$XTLXZ?$l-9vwm^<^|O9UyIksTV5njj zv`HZLD%N0$;21G6rQNZpIybm<{*2m)mw!QqTi!N$Bmwhm_*upX8y>JaR-_@P!I4HZ zjGA^*P74LIu@A_Y_?fi0Qm+TKhVDKA+{Jkw-qsImFiU6eXWrcGG`9LDY5>bap8^A} zUXC>OX*!JNG!X)WdOZ+7mDTf9Da8|x{WON=&$Bnu+w2N!G8q1>Q4(|NKgi{yV8j(* zy<1-+SSY=ja<)7+`d#FEo)Xt*aDja$itg26C_jJgWod#dvtsq zFWe>jt=&Pd37mcSf=9>Y zAuOFIKk8~aHK!Olv}wpOaIvO&rIva9rL7xG0zyX53lKUKXcoYKkYnrK&v%g&llj zjbdts1!_{JHO0QUEV}=~2FjXM$m+Z5vr$O2Jg8a@LP4K*wHNvi1ELU3zJq|+0#-eD zQ1cy7iX}}Fq^Srjo~~@={=J1GViOrq;YWD6{j0A>+x$ zVq%yC3<~D|)ybuxt)7Vj?7VN7PNE2i>GW&orhKj{(l`v<)sAl%xm3wZTNLLr=0GP2 z-)8N5n!fkpn3X;R0>tw{IdiISmFw|eMPIw|&sEh*PEjAcOLHze4w_{f%8fH1Y-#o< zx$T_9E^rFA!aXTb52UYGv-s!>X;w=0aTIMWPfBT*-f!Gjw7d72z-_SR(qRSIfS=|M z@SZT1C@wl4T8)<)$ODTGQZJ8{{b+4*)R?{QAXI5|K7;3v!?OV&NFQ0SOF16P0B+u; zPX*)kc_L6SE^kd7XH|elQ~YLz6XCBMrbN~zI5Xqj+Im_x3Eha>BODu|Cbi4J%ra=K z>is94zGiXWZCYJN?1B82X70FID^%mc^oL$Ht%HILbB-@4jo<%4Siox)JPC0I=WDK< zYFE}PWf%S&JD+sJf2*ZlG<+pG0+;t>!aoLUY95?2}M-{FEAKpo{^ zpJB(>}P21`A~Sn=@l#P3qo4YR{TD*wmPk>%htZD?6Zpa%mud z083n9@P(d!*eClpZ~e{$->%5po>*yy(a+9*7|8IXV~~f^rA24L(}XG59(a7t8A3r+ zf0&tjC{dwH=_6`T=}}8GN$pdgt#Ka!E|m*o*y|D?o}!STgH`M zilI7Y?t$V4o;F1|k_y2!kvAcXP?#ZB2LvKA@2ApYRT@whq96A<9lE*+*j99y$H~;cy7+t?D;~a z!zyBMaKlr57bk{xU1dg1h^sVEV7)K_ph!;uKdhrlAnDwX(vuA{lMXBNx@)eMc24r* z$U)KHcTgVkHu&NTM1;Y3A~dP!lOkxU{-qTQ_rPjPVny@c-i9esUw7n{huy4o&`ZN% zg*O~Rsz+BB6}nbMaUQF&B(iTGN|)?c_>5v>XIoWYz-w~Mm}Bcw7++C|}7?HkV{pQTC=bt_) zsC;30jZ`N$k*0{?Hf=W+*P#uFBFI&P4}|yBo~hki?2EscS!xoN8ak*KS#?Nf3k8Fv z>J%M%%MSWqX#M9=U#b$A(50Ez03X0Sex`DwGCGQdCao`4AdZIaYLpttW-Id1w?c01 zaqn4mR~YBG?t$#ifUbQ3Bob^H@dR&l%}p7_-jbPXIR!<|roS>|_J610YM(sx{fBr~Jo(3? z(b0d(;_PBWXLzIF-JV8OiEC*S`;1TSl~g@3tR5Q!+;I5d^>M3XCnVxZL>M9uaRyLQ zEt?;P>O1!Re5N}=b#o7}eiHc(Di2cYT&sT|#5RE_GTIiAO20Z6P=o_Mtfx#}{4p!g zxH}|{En|InUD~4W(f#2KXUzNO;-kj_XK`XUcN5nbUH{&!{~!+Q)y*goq#_Va4)4|| zJPne=>?5L#YR7T|9+$YMuSAL^MM^(Le&74HJXFnbQUZ6y#;-Q$eLierELeb9^JX3*CUuUOeDY9L)ajeyr@M)U4I;f*95REiFnrTNL=>#$IktT z0N7jkx~ip!ng>g3B}*rU?HESyzAH!+s?G*&%KB1ZMW`mBZ#zc0%5Y;r#tDW}~ z(YB+a+{5q+Y4c3QWytsY`ys3hh|AS;x#+s(Y7lFxz4{#OItn@gB8mCscNLYZ9)H_u zzPdEWBX%%MP_6m!+u*VL!$60zz4c>p0KHcFHJW1DzasG!z)-C0(?@U=@lWA5UOesb zmlpkC%)EnvE45$y1_Nnd`_zsS4Z(Pj0UcnHb=wL%bI-6__U zjh7Tvou<|M48X$iRT_khCGnDfQoc^)fD%}#XXK|jae>CrZ@7VNo zBIEgv;*(c&MxbrYj%F=>slBEhOqXmAh~Sbwcl1eDZ!YYLBXZBJJibeM^;jqN*WG@h zIkwd==x#8Gf(8mGWgxh(6u>VI$lcVA#%#V(EEQ$H>!%^DWOQ_F-E7@IuJsOj4w#@o zJH_=+zM|c2$Z|>bW89TVlqb#FetUwkys~+1x??h{{-nxOu(a)m?>O%9*aG_+NZbSq zZo#s`d~=d(FGzB3kewoJe$9TYC|6sTccV(GDYg8!rgI~4Ff6V~OYTz~l>^WNDTJ$B zD0SM!FEwO1O`^<7(=HnGqQ5+VglYFMYo9rwVZQZjL@&NruMB}T1oZ6VvBWS;;2Ppt z-hTWaG)F|1dE1nF<1De&ciR4)OL(0Z_mr&MqeMm)rqDqMpxjq@xsj|%gS7#2Cf^ap8$SC#q8KkNI1T zu(Y5KnF;ixQ5Ps5lJN@#mh3X4%Rn|Yv*k5ETOZ^Uk#_!rve4$MZs_;q8(zbwMSIh1 z{@BH^(ZJ^t`_j7!&DXFBmg|Hil@FErpwvN;n={a#(ZbKWq;o40bTf;LeKlOGjS@LA zs(xip4V!7OTx3N}c3hY}KOOQ_uqUO&OT-J4Y0my;xnu5%ZiS$UJJ;nKFF!h*uYu4; zfx}}BQTM@=(G}Dr znh)(g#)|X;8G)mMU3uYgAxV3Ca?Q0-KY#cK^wv1y7M77ohDo`Pyaib>Z~X(j$u@gU zkFii)t2Jo4zRHZgiqX1;$uw6>txg23p;O?FQF?96lXbT@HVm&Sf(-PTK;K1xK*Z|0 zZ-g(wvmYx8G!Z;|)M||?%&8H76pr(4thMjoG>ANZU?A@1mde=q0JBOh!l{9`%?tFY z)jI#SvLEO=M4y75IUx>VG6{tD<%|XW3;kTXwZ0dA*)Lo|Rb`-+Uv8hLx8_9g-KqbL zRRHmex}rJ(VmYG+{JJ!<(-U#p`PthPol*+ty+dVj3f@zpOPK=PG|fWy~T z?b_Vax%$mg$vZgL)rI}LCwcnpi%8wMhKRq*{#*ZkTTT0~8J&ZMM#>V;KiIhV?(U$l z#9NLvNVJ(#IK`5Pi$SqRsO%4{@~GdR4Dr>t@h#rTRyxP3@#_2J%VW}M5%-Oy51yVf zEwcHBYmn>O7oypb%Mz4P=T>a(fTm8T^EDLxZ1M6ceDus{@*vi;<=|j9EwfR~(A}AJ zKsH7b#ete!WdnKiKCPN@N+7ail+!iy@aD|pvZ)4Em;4ilQug=; zW2YE40!juP4Z^#jr+v_8=~6xuUaia-us4ChN;iacthw(CgojDq51Oz9Y;0-s^nN`HCdEg)DCW|N)wducn3f46X5@DgS10ss6>jZ4 z7#b1_5G2g)8Lusl2?5<(QZl3TI_{}Il>)LZu~9_>A&IR;8O^TV9?aT@=!FXE^?Jap zauw+WR9518;i*m%OuOO|t-|)9fpLCi{hh3jtdD|D-#_%4EfcY7&1DVnB#Z zrj^`KA9Pu4-ZTT-9|ON$aR8#CGW2GuV^Qo53tm0F;b&>L##ay!mh2x!<$BPQ$s9_24LsvEzEmznqHchgOB;?im-p>-5ztcn|EHRTu^8} zm%0(03{LWV(a%6y@1kIL2-z1eNk*jo3E*Ch{`4S4L*o=e&A34{1bY=<2Kko^q2W)y z==xG%Rwwz$K-bUop(`}~+MHQ#*>>gnj}|Wkube$rB-q|we|~fWu2~AEWm25681$DM zmK%TJC+fCywe*GmAdH{`A{`IC-3p>(rh1(OCQu>~$&<5+wtp}D`u-)$D9Al)kA6>A zQS_p5OrKCekHlHu9k>|aOYBG@r!9gn&E|}Z_iSl zvoAtNVT8)oPD#%Sd z-)w$WQ6Qw*)1w6(XPHj1?28A+=ztEl)jDVrN(&gCv(8;-NzoM~M0_r8%r_=)j(@RF z$}tn(ib}nrGc&`+C-L}ud}Q@gj%)bd?#kpNmmYs6hRs+5$uT zhm5t!_c9+MTrtUmR~n3XwATr^c{r8nSN$&h;7e(D#T1*SpBz=;Kt=3I%;JH`l6QYp^{tBJ3Hgf$IY$4KD6es7C&K7>~GaLlHaP z6`5St+t7sl)P21!Fq|P)9Jcl?qHFLUl-dY(-vy+>>dG)3{1F=FUJcl@_&&}$$2L=l zTcH*xX@xQRh$n*w={U3(`w&VE^hgGtBvF6 zFh65u9Tl1pXLJfGU&>ae-c%scaw~Q19Ah#-8~{yfUpg+*d;xa~l$tZw&d;1k9;R;J zZEPfeewv6^s`7YoKFMPDwDkjPEvu;~{Wl~|1td8mq2O*Gj|A@>0rd3uG`~rIq~fOx z`sdxe2;0Xp=zrc42Wys8qo}z#9E`377TAOUHkC+g%D1k^f0`+$Tff*=`!8{G)=T`2 z6kTL{|CaXY#;Xs-#^8w8o5N}_31zBp*$m0`ybXhTI-x|Z#+wznkOVm zaQ_}iN4qPE5}Qce?~$Isn@Y=SAgWvAE~j9R>iLt{#rwa7KYV?1^;I@E=>gL(;Y-%m z1}wb@DEtwQ2k8gMRMGr_tfwpIfWH*p`*D4EkIDqwkTZ%&ei{>K%z5r}H^1KJJ8gcg zq01$&dJKl@zB;92D@@>X$`*tI1u4X=t?FwGzTa?4Y+y*XFL0ok_t z*z@OpGQ4&UOn+R9I7Cc=V^8M*DDr$%j=dOr_jtbf$f7Ldc}L4j9#O!-!)sME*7PmZ zA)m^B@=6Y{!?MB%vw3Pl2SXCqlxKr9-he%y^^s+amk=*cWi)NRgIWO$WP5Pxv)Zl9 zg_I_@36nw;qHC9GpGQ@^5gO9#iMh>@sj8t8mU`jpsdpzO>KM6e;6PDoS9^I+JGuyn zx}Q24c)m|4(yt^Rf%$2Lz_a(VcK{F99^WzM5q!o`C*E*;9qCHe8%zHiq0|8d?gF;P2ea3>gj0d-7o_$f|>p_l!HZu4_hVxmlh zS7gHt@dj8L&TDLbis}H4_>(~2gMiPhIFyq3;<wIQqbNX)K>^CG&fAicx)q-1M2o zD68nukIUC;IX{mNg-e)rZF9!jOgpEss{d0&U_~^0u)u|XKeeNLR|RMiAtlYvmp?S7 zc6&5&>CU9KM;W~ubfCPo`JwlJ0w4Sbs{`m~IKd8iAklJ$E=Kd7=@4G9vpeFo^`_og z8VFRP259A(-V^m^f7X9G+6*B^iw3yCKeRQaq3Q#93QXGfD69VL@RDez|kwEL#J6;UMcjh*DTVX@#+Y6ti}Te}d_MG5SZO5I|P@!_pvg5?1z;08LubnN0qW zB_-ZSufzCDHq!Cc*)-6X#8g3c%<@TJho^LC&M~({DHWF+`l9keD@mJO-=@ZRq~kY& z5A&b6{zTXU)r7=8Tmp_o_X?Qjyw*OUmY>cwB-V`Ji~h8=T>sZh6RHB4eA7PpoaeI1 zueWztVrbIK;0!_$*lCVM69mZA8$!Yd#8R3ku4W3pR*XAU^;h9FNdmzEybzWN#V}m? zBJ3d%>^QL3b*x46AS?G(zktKgUdp`Q+S{q^!2zyr663@i9Z`FG8T|WO!)ay=%o>zf z^DF+^h;(=jy61ldJFCz2&(rP%kSt)`vw}I6McUeZVRLdpH>dh8`6p;}K~8ajm&TWL zj)?T0abSQ-hzvEqZ$Gkg>vWlc3~b?0YGdfAD{d#qBlV~r%M&* z%4uZU@ns4nX16mJe%YK)(>yd<%24X#{Z~>Bgk&Be#;$(O;2>0gp#m94Q-vkA%Tz4- z;7z;qOb((=cK1YWe@Qgot?yw=y5AVYs>G}{3W>z_<1nx@9kTQ}SY22#S+tkxBu7ar z_`ECdGMtQB^V<5Df3lPpUr_QgnM==PzrL#Mfw_l^MC!?n)g7o$0uAM4b&rp9hd6 z70>rM=!Uv(GERqCU02r2SImw_$b=g0APW44^=b1*PR@G&5oVA5d(FwHSX~ z$)m__t#MZSF^_-7DUIzB?lwJ$SjF!$YTHRtI|F$H^hKVkKauKpx;&lLFRlk(9ulTQ zvx2DPr9nn>pIffO1?bq@fjfwn4xY(hA(m`jt%?Mzz(?+W0g^`9t9(9~*uad80sh~b zBr~#TKU@S%BDy{x7tCPV;ZR+_(unjsf|+KbW}Y5|k{e8cgCh6zcWbQm=I^k)_6Duo z(D8A33+#J_J4Zz=5@SlJkuKQIIj~1A%a>KKV1u8$u}(%(d25Sj`KgYN%M&& zu>xMsQw>raMPequHr>((n_>i3g2FdU<8U$1sy_ubx8~|A^n#6B(~d2tAEj;Ki2_i* z@o(?fGlZTD4;wN)F|1_!4UNS@-2e-6To;d=a+LtyEMIXLz z)VwG3jw6@*e{=e?8t;FUthpCm$qlu{%OaBhd;G{#S`i{@Nq+8wI|sm zB}A0bxhj>6v&}}}cqdcKT#u2?_QBQj^egSTZdb8(Uy)7qq9<{T@YbJwPn9tpOsFaC zf%tZoBAPrfj^oJc$>T3AC|@)#w)Ytd4Q294u+AZ5yyEbKaG9!aflKx`Y!miGtO8At zECZu-!;svy+`YqNYop@_IFihQ1ijIF|d|{2KGQ+h1YbL+GKO}y ziJ+Xo=(HN)b78pS!zUAvuHs$teKw~5<`)T-m@chX?aty_;M(~UN6sC9$7BL!M8&kk z>WHtQ_G2XW2NQdhC6ntJhjxpR-lup)jgnl$mL6(3Za-oq;^w3J5IiC9I6*t~b5N`U z^e^u0RQb4vmQ9C@+NykDUzu59o0f6SQJbejPhkfowhIV6<_0N8t5IGl45S`yyco^_zUe6_1!;L_2DD!)=A+X&|)IkdTW;SXv@6JN5vtl zCGUFF!`$I3D%DPA5^1mY7X#KorKoOy?=KO`@0B`A#31}J?~H}M)%t`V-AMJ(|9!o! zbRhcmzC%+i65L!)GbZ-ise$!6?S5;%>Fj->qPv%O@S#M$p@bg-1hH zh0z`b=IhEN267oO3|D=9g$wYN=_8NlF|X>EFLedEb67urT=O!Xc{z~-*$rXdkJD#b z_5mGTr3GZ(b*GP^#FS-o!(--#$VeTBrLUvif*Cp9?5aZ2kFWJ+o|4>ESX*VHAamOU7Yg=mHjo5=YH} z6$7r`MMy9YS3=Vw^ELV?2S`nguC!1y_oQ#Mce@-6`(50nXlJ4h?SAirXX`HT8++W) zRsOVtJ{$6L^@aHPxlTWjn6$i6=QDXri^oW%_DEVhUrTE9W%E0(T&fPhzK&)@ciT`# z){BjUDW1gm;pJUl;gvkcOa`i-hV0PMBL^1zlN;6}k&ni3%QR-dq8$0C5%`NHEJk6^ z+0Junb6&euXMC#e@`dMnJdcKt-UZBuCE#yVztmMd)}}9@PyNLx-vq8u(x&=Rr_y$% zqviT%s{_N`-M;hF@)v_--V~?5x;9=W1hM%+f}q4A3VoZ=0U%pJbPo$5(Y3c$yIYcj zo#Az8qP5^R{bkYg)exO4hgu}3kJM#XddA-}^r{o6J#Rb(6S9Qx&V8W>RgmJkK&g9B zIQj?r;$_5BMeVC4VXY>UpX1xcf(TI|1C1#0S~>v zN@4j|^X2pr>Taq{^syh318~Bg(N{%A<{Blh_s@xQwoc{H9}kY(_ngD-^4HeXC0_jX zPW1x&TQ}Iv|9``w(aO}9KvWgY7JP1F357xtQZw!5C5{jA4I{4!Jm2E)w_U7ZFD#M& zcZa1fTw@jX2fm<82=5(BK=bobFc9H@5qPI+iTy7cHp;DIwgqgR)Q zgj))li>7$&NwXn4Wm8x>VGSmj&tBTo=Y4%&x5GRWSYki3Z#oL`hd2vAB5)wfF0-Ji~zd&b;&eR^PTro$A$Qm?x_X5DO0>~Y|gd8CpVbV-r0=irSBb5EZ3~l zK7w`tQ!ruh>-EaTS5ET+XZsibzKMLT?+|Zn^E07KKK8G=XX@;1JN@a!oaB{^SsdsI@Pa&XXew^~J?3l>JEd*@4gj?9Ps2kG!FI00SPp8Eo*F$7mANooM! z2X0~Mf)R;#D6(bhv8{NSnSZ^N=k#4FUY(K%x*udIR7wj5LXRDQss0BfvN`d4KKZaa z;k#Oa%*6ZY{f=32%PZsG+cfwVo;9EC`ig;|TxeHLa`mNsVU11w0f{+Sab5e;-9p&p zAFZm;d6~QDkBX!9{uxVR^9rnzR)sM(v$%$)PFOOG+(!i$-4I0^JD`SWZxL+S5;gLE z+lRMT`PMfFdHAIZi>A64__1K`iCROnRloLJI$aJKO-ZP(j>x%se#T$Ti0c{k2kE6L zU+^WTCtefxAzxYM^8R7L-Mj7+Y7EOvGha(zNRHUkHU4z_U#cMLd|?#eKJ9ousifsm zE`Fl-(=~>)cb;01qkU=vc;v&MyhMY?zdpo2Gj9ZfJ}J_l^&U00%KcZ&pDLz5fz9+_#_tuN$n zf<7MDJBh<#Z+=;`LOyApezuUxk>ylJ*{8bB;=IyRQ7kPKdiCi!@N=^nDV~fao@(tV zu2djBtHQsOW<$e}#y{%hS zOor3h_{*14DvgNfn7?Kj*FMjoM6F~e289p4Ye}!&VIH9IR2a{M1kBfU!|{z{J^@t? zI^_=x8}fveHdp~&!k3%>Qn|aBE9juG`~OaZs*DyTjM4a_Lksj8_ES)2weLAx^PgNa zd8BHeDDKnmr1yTBL7=ziEj__}fu4wUh)BL#tC-!(mJnmR0@G=xi*w(?Tztjxjp>(#5d{h4z^Iy>F+C{r%}E7a593V zz6Qtq!}diZ2JoKokN@gK7E`3RqChG_c>L*)m{Uw63DLdcSF8P}(VmX>jwdy0SiBWt zwy1rArb%cCsg%0KIwbSqZ*Qtxv*K`bgj?v?@Y1u?3(|~ZI4|^bx_&;mx3Ez5361Hp z<>1=zE0GA3&p>`XPgfD})~wx>P*zxT%TcK3jj;&stT?`eG&p$&_dOoqYfQwo!jN~XiX$B*CR-2^u#*2u3WIMBlt|mFa zdck}SZlF5FiMN%k*^9s@+RdqnZeh0T@~_93O2+plwYd*xHB4U??l;gYXIz4>6<|63 zS|(!anByye{NRWzBGaL`!i-qI@b=7$OqHH;xaY$r#)&$FCG9TILS9@eiw8GPHK43| z5ePQ^Jvr~-kkeyvLB`eE;M=!rHQljK&ipu2oz-!UK8&jmh;6rd=ksrsq)-7Q8cqC? zh^$Xi^Yx8Tsw7BhY)-n|wKZ9ad7{ns6YigWY5{2p$jJ5J0GnI{cW6P_o>8$OyV_-M zd`7}uuHx{ZTGI{tPWAvTodc<^)lQbVr?)Fgeeu?XEk(dFlSUqe@=>N_sLK{*$xODg3<*T9vFBqkt4gGY=MZi!K@H(fKV-ut? znID_-x7@ND)Ufdh)$cC0T725Qn?W^x(}kxFvkO?hO6C3?z$^g;JBdA&@zq_R6L?Ra z>||dlWlc$FA+iRjov50RSK1x;rpzn3d&V!LZoFn@`Y3x%#ah(Y)!zIhr$d2`Z>53W zSdgFB1~wWJ9!llGIRSz0y*T%6$-7Zex)IAk48yUiZ3*`cTml>@%6rz}m<<@YLpj_- zQyA%dw0}c3(;-(%d(iJ3Z>7|mixp?v+p>{I&+0xowXxOmzeLt)`IOBR;%aOeW3k!$ z;pZpUC;(zm8KEH8+aI1dL3E0hF+F{idL;Jw$1|!+WpYiPD*qw zt42P`#j7RNpNJY~@(WNkt(x`&9$2iZrKJuV-b#P<>xd7+)w4F%gJwgGt}^QCk^hO7 z`>CZf@5DH+-0Z%PQuN0ESBXdGoddz_q%}8c^$;ta55Q6nfNY8-wFQU_)X$`!^%a8? zFdJ>f<`tt{cc1*ueo{P?XYJ*q z_vaI&h1lMqN)B$D4avsn`cmCb-qCc9O_5jXDLHvXJ@$10HNLG@o1RnZH&C{u4U?l7 zjx*Oxzcv2|VzCS-ixM>6QxX=}XF$lj-!EjKr?c7*^)o7?d~Dx3i+I17B`Rz^!#%=_ zdY|uz0#c4I07V1qRRzaJ^ijHOVkcc{y2_78ag6V^(8#Wwub>~;I$wiNW}m@#R;_;r z=Iff4KoiFQ^NB2o61oJ1E1saobJ*J{Rlm2Q<2^iNVuixcPNQSCg4>O7fb&3Zr%B2D)$1os{ z`Wk2{b)?;+^z~v{LZTvMEzc}4H)=l3R1NU`I37#!!{6VI7`YgUY>SD2_NZ2)R&n+E zSjv>c)J8qn%TTpzMYyVT_WfMwi+TBJF(KwF*GF1ZV?J14wjX0$#Q8y=i|f$G$vBcV zS!95O%a51R6(TDiPbipJ7tJ># z&l>(O&J@AY3wvRQ=z;+<>9I)nk{)m0Ds;CbVNflW`sJ1hSde3%kRg>VEMie=W`8l< z&n3ur1n#r!YdVV(rw^fd=t4h4&}j{Npk>|S+Z}_()+e+6@y&`%nUO9RZe^XS64U5k zIBmjO{Y4q>`qlm+rL1!Vb{5D~G$NFBDT>edg~YL6I?N+IHw*9!*KsR0sVNV2V$;s} zeF>8;0f1Tv(_A~Y|0y~Z1wr0wC399~R4FGtu4k{f@^MEXul4O4l8d+N0e`xp_?*=^ z_@2y^l9UzpZWtd%_&2pUltC1Yhd8Me!kIgJsPY9M<`P38C zBINq9!kgn8yhz*aqlFhGXlX#qqLj66kdXZ{%9 z4PW(z%Dw*K>6p*A5-WJ)Uyh zbj}uD^Tsc(J^trsKaLqF{6ydv*Pwk+z~vbIyj7s068Vs#SlUvy^mTLmcf%Q?V5x@^ zA2x^2uegwpZ4A`k^Xxi4u8a8&{0HIf&K=Gx8Aar-ohNG2K_hlCAEC2QpgTpUY~B5`1u*RXcKlEx1}CUWmhTV`lQ2`5t0|tS`spF zNA+zC^6>vBOly%`wzqI>4IESBfGDuo7E7^-_rKI3tn}`mdt!ofo0ZzX=lWLlV?pHx zr|&jj;`-+7mUklke?^RwFZ`c>p)Y>^fAF;;Fj3)MxT6%X2LeZ*eh2k0O1{AO-^~Bb zw5?=?9<-NbngF(LwPy>+_yqWZWSVU6P$rumvm}qq;hCY|{+kcn_3z(QnIDs8Y%p_X z_;ueV$9t7O1T=BU<`QvTAh5yDU+t(mWYEv!>`Cj5@$4q9UF1jMxe>`}K9tZY&LCW! zCHO$NP?Oj*^dc@>TY|!QnoWClEbq@{v6_ zcm7~W5+=fu6bUB~`v{$`yfLc&o5~dIl~8Y&TT8XZn=whEeiyqIg9h7AafYu7!o60( z3EC3g1Ok2vQvpIsDl_E9d!#$9R z#gBZ1GqujNkg~{G8RmDLwXL#t($^MvAx|e)ziU9?wf$77Wlbk}Q$3cUR4fZFIg_sQ zQZ~%|qheptqV~mK0m_nicj2oNTwaX3A_|+U3y0KNAe2JiwsC94tK_~ zg6wmIR>T-JNuTAU6v=W7_tl3jJfg5zbhLh%9i8P{eaIYnX%v^8di2O1oj(-n`1J?l zPTqwoIU*uuk#N|9<&QX0H2xjoYt}K{*Mh!u>+xD-`&R%Qy1Ir{YYOYebz?Q zn6}`CSQ%^#CZnBF3w+edxV*X8UB3w{S9GM1k4L)&vfIx@s90H zHmY!TzRQx4VqdcjWnDy!F?#< z<|tf~-T2tFH8@~npK}c+a zmteRsV}v8J9nR*eChv#r;1AY0S};`fl4$%>RexaBNW=O1=jBIV(|lf~gJjQxy{)I! ztI?5PP*w0Tt zcQ!$}8(43?o2wriv}!t5{cK)h5t&vsf6rOqGWP?W`EFObMS*6%zo4Y01r(B+T-*Zw zD;KJ9SkS43mnFRRhoD9KfdeG$a0Bp&7U;VONkpJ~QEnQv^z$xirW*ytzv@^f#FjtP zJZK(E4&MX+zjX@*8(CZ5clMB4osFZrQ=yi)DPB-E{6;hsun7ZY#S$+t9z-@{B>j5N z6+9Yiw1)2HXPbp;!@ligNb&XmokcZ_icA{#(>~-g`Cv*VQ7Db>Hvy8Pa&m9p8Q2iG zf5FB8DYA_6Oe6NM;zsEqoNzB>vQrj-NZi6c&KhXutIVjP+&ypVx=$Cr#ORIg6MLkn*k2TLo~9b{-&?X2omyVLo&!5uZ1= zV00ty2{1!;0!2o3Jwtqys^o^>v#ed3qBePH@_}Y&v;}JdL+-(TY?BygU>kYQf#$?p z5Q(v%(-41~;6WaPG|0q5x**rupWmvj8gvoa*SrWm{K52Kqec5OXF*KAhdx7#I>qth1oO1EfK7iKuz zd~xs8iO%$+Iwda>;tGazf3ZhD>*A;An#j+mz5CRpM#lAQ-?3v>G!e0OGb6?HYV5T^ z$wkU6P`x&^hVYm?7jli1+sXVE#v&!sfYm9co1bsuHt9e~W@ISJeV2UoN$YedO6x?QS+&|#L*lYkG`(-<55?3B3rL4IeZ zwwcvVtN1qwM@LrBPkK0CBCfj=nj8CLjp{w0RmPeatz!LW--Ln&K{8m85iAz z+hK~M&KeF$pW2?B1YtG#ceO)2VZAdz0~2zLj{;)x3@}ocs1C-Nkb%Ac45RN2KpZYq zwV~Stb@J@`HMsMrTi`y@{ybGC@^=`|Tt`EYu5Js%&?UI&N9D5`Cu~OS-D4_$Eo*Ga zk7d`pv^+TvHny)v&fiKKhpj%>#D@~!5ev>EaY z4lXTlZ(8&eT2?2b%|h|xV7k!n8w$f z{G0CpSqS|b7rNBlozGZOR?uEE0OJd}234M00QxCRoj347z1)Ql>*EZcn>N(7$SU8o zXPyvLn0^tu*nI=&?tBLhU;jc}E1tH%U(o`a5z+qC5qtSPdze85Q7t7c|PZg_* zxS)VIR|d2<3yAB&>{lzC$gaDg8+DLaT;ne@Xz5l^SDv-~fN6j$k&PoLRL&UWm<1xq z7Qof+!tu8idu*(pH%#YasFP4BCr(JSjNV_h6?)zG-<-BQF&6z%Q>P&feGZV{jiXf7 z`(=0`3n@Hrq!&3y+9+Q-yUmG z4&8{{`yVJapK%Hyv9-Rmj{Ao zftzzcmBg)nDfqS3(Ad}KJRg$|n&mXFCZ}CnVFmleqe3;(3Su$q2v&4N>A^YXZ>R9v zPVPCVezB#^eRjaX;)%bLeo( z@h9Bh`(1pCNL??9AEhr_o@%rGj|=~q$AKU0)u5UZ!E(lV%oxplbI?iaRs6M0b1DCg z@C7K?Nsl2bw)|DF<9GAry+G)wr;8uAAzidr4R5I24~>sZ+Eze3R3b zcV<})f3OJKx(J)`@G={@)SCJm+|CrUQ%@{ct=6ryf}91%F84?#w|=bR+q3QL#cz|X_X8h9wKmx-7e3P**8}?U^bI*hq3@g* z8G2&HiYT<%o=|ABkL}vt!HoZ`+za8K_PKi0$j6oDapUpv$4=kKp+O)F{=p~0X2ywT zjPAUGp}I4MmU_GVh?DCi-R$o=-=q9dCe=@OZWjlCsBb7JbG9tWt9DM$8c&s5S%N%F z?H1p585E2(<=Up=oxAuS7Ye|rO{BD*%`{}&1$S3{Rhf$aBX_l#%kq62+upLuiNlWTZ|$@dfleoa%JE?BZNTEd!QX(@c<-6gd!-Na z=Xcmr7saaO2fFw%5w?RQt`+KDSPxr>A4- z`h9QpLboiXVl)42;a79|;$By~&&r;-DWvx+i+n5AX3s8l;nw+4r;!?bd9P>Lx?6mR zxr4`9Nn;>_W5$^>r6WOHtf1)C|9SVH*3O=-KIJ!5IFe|HiB*o&{v?t3{ZVT8p&8%w zU1#B!Kp3gt1@aM|q%8ZMt`ZSh>Mnh@{H1#1wPp&Z1ygc&?`@&j=KssV<3Int|LyA; z3ut(Q24pFb1o*AB3t+E|Z$H7fmvfYRILcd%U?X|#pMHH6D$L|{{hjUummejQm)Xn| zeb9__Oa8eN-5Hi2J@*4Y8me)WYS<^=Lj6)2xH52z_ynwo|MAb*pOMKE20wnz{<-#$ zqsg;GY~$Dc5GAIE)lPzxCV8oo?IFGpRe=( z?`QTgrx01pV2sB-1A5x0u_x$UZFaQ_*YrhMaAz#ojF&l&%=vHDEv z+1mJ<<}@^&!cd`7FG%mk=ADhik2Ce`<2|vb9o{IQB|z_j!CP5j>8qNm-eCut+Tup| zpIy50g4)?N-hJ>%plJb76XWea*2!O8&WvTz!i77YdN8AXy%T;epSq17c*lF|O3)Vm zD2TmHCsy!%-4?OiWX7Fv7RKXZzGh+5DtJTkS8ym-KJ5!rnJB1kfq%13GnO$*258N-S|LuG;mv}h9yY-6(pRKEdps%p< z1GY4zbeNr?0XpNrr)1e#Ay;wkF6s5Ej9`|5^*&2KtK70`O-iS&!a%l(D#Kj38$mu~ z?ZPMr9VA2JUxrv~Q$*n8QC%!WxK_pynNf%$~Sr z;~(^N&TUz{F-KH}E+He!xhXw)bLAHh^-+RA8Xri7WHG?JK87REVd7x)JJH(h)|`F) z{NWkFrDa2rT26~DRp%g{MjBJ(7=KoCgOt(93zW>RYupBaZ*^pOe0XoOr7M{|MM6SK znl>)zbNGw1U>&iu{sgM-3uJby6a) zqwk$HADUDGLx-Y?UmL~X)N|B;z~gb*oq!77;w_9k-w{PF1l=uxsnE#!{EuUczXh(Git zK8>L4Z0eUsM^^D~>$S93IZQr1>+pWs(C8AU9H-khlKb#=L~`g$jgzmui5jM)xO*@F z#m27|fQBK~2RQ>1laP$8-*;^pF~oWmtLjvjo3DbUT2$%kntXq9jT$t3S)vaXB4`rX z@T%zJYyPSIYswgn7!;pZ@5A=kHNumbs-x;}dau*<=9L|Ee6Ak+%ICkHqI{R)1dzZm z0tL)^qX>fVPDUpmRy1}S&_9z^a~_PqF7MR@`S`K-6+L=bz9m^JlrBnF+egXrg3{J| z1H8zC)5q^3-8fOD;TmH2i9W=Oppv>ypad1FiqO+M_vkl)9#`FdFCX8EV!Ya|Q7`;sZTG@1RJ6_X zS-s@=yBBVhE{uT}0%RJwJU%rrfVqP+sqtVHW_oO?>M+D6%iJV|w9A`_g#P`G7QG|; z%c#?jQ+*1gnRMQT+K}En77aSU>VP^5s*Z7k7&c>k8Z2$d$?q?{<@VWp`M2WzSH2Vd z4&pD0o09%7N8obg)z-*j>}a3LaTmSZyfI!Ia7?iSoI+yVGcD{=_EaU34qQa+df&Ws z=k=;&VNOx-u-Ekq4e$n9Gwy@vn}!btkVEDo zK`&8;g_3)fTJN53B`q7^Ug0lej=MFeXWLn^GS*o7@nSTeknzvh)4rIHPY9#>fYbsC z!cSJGWf{!o#U%9_7?8EfV!d(D&M8SK7)TJFwqeq<%XkPKtOSlVvEyG!oet^Vs-u~K zoT|~+2SGHa#&`+c!~4z{_{IvHQcY1Y6O|Xu#NK)}#6|tOl0^~pJ;8wS=KYQG)Yf=H zR5yHS5a)qc1vvBA?Fh2O-o-$%Q(ZrMbvY`!#?7Aa@QqL_Yr-!|hXCXcmwxz0DfqG) z1)%MMTn|yUT;fu*LHV~Uzw-2v@HnY*yT|jgR+I6f(Tlxka811EET2(=)EPnzb;ZMg zCiHh>MxsfgOn56t9&%q5as~EkDa!mt?!Xeo?0__Fa6WC=s{V+;=Y`ym<+Yo5BnFsU zOF{yJ2=PKFRp`@HquBY8<%jjtqB9L0%JX};m$)ToMP@39(g3Z%G0ph|!cQNMB|IlO zW6cgMkOJ(xxxAQHnB3HAo47Us4GRky!I$OYO#6g>owF{Xj;9#v4@7T*{tmpstk*b! zQV**O6n+EUCO+Qfdp$kuIwJL_;xQY=EEg&|Y{`MA=M&!vMGp9&??2%!{Hg}CzcHG+ zPj#JPeb?{e@W3qOrd*PYfh;M7?L~wTlPa<9w$4hPc-lUs!3V!fpd~(-1(0nM2%2Ry zJwojrR37hLgf~63p>dx-ej{(wvLZkDX++nxI+zS6mB3tq$?|LS4aX5=7R(>OzNb^% zKk??RROF$C=%`S-NiNE**zO~n>*31!ZDH}>UDU<|tB{#BZs4@xGC;ZXk!P?P)s_>z z7Y|>yUqle-Zd`>crg1sQ{n)wsG{c@6U4s{eBy@5EUB3(@9*gzvn{Ne>nlk=bI75RM zvs-#u=T8)$Eq627C4HuH99%V=mc8knWPleSNca=TEcAA`ucWGb*8$47>B;!}8P{*B zXY2Hc2DfM_&a_iaVfkv!ZMuUAAq)&-43FTazymThs$D=_3XchVXgMBLZd?%~_~}*h zz&Fn(^RLjUk*GAE8%e*OQ14CN40TYZ{-ho97}ovN3_Tdx$*~_I4wSA14)Un?akyMw zk88J*UDR50=D!K`-?7@I$Wq71vs57Dt|+od5yh|oy?-$rwG~c~hrVp<#Afu=T(=g< z2vd7Bb$7v3zP88NuZ=>O;S%pF9WKo{ukH?@bjRdoW{3rZ!My&>TJYHrCOl7{t~FMD zJddf>#rd#@mNRRGiTt28_1C+rG=0IS?_K;>8&a&eAHc-ATF8VzeMvnwR)7s}*5`XZ zIb3u)~ESzEqe-R=q((=>m98C^P;QT2%lcGoWIW6I|e|IJL`h1h;RF*hswpHry9l4Ef|a z4Yzdy0j*9@%@`x%d;r#PrI7F#DoDx&rkhAmY8Ny~)iMPaaJNnUnSuh-UG#gir?ofJ zxbE=jj-@cjLW=(w*{B-lp780om>0D*(FtZIKTeLk{<2cXOej2j3G0J+fO__hG)<1JSU$ZWfaPg!(vM3oKsj*}{#Al$&)RYNo_z(mw zVVU-}CGFVTE%gaWzk2%s-yer`Mw){+Jo=J>k@s%(voVEJoC01eD8QNRoFnl47*&c+ zC6?poXIUK~aic4q^PNFJ=={l&Jd>+{@k?lzM^eZ22wVfSXG`}IASNsxZ3`lZP3Kxc zWMMoTzpoKZa!S`aF|0&AklB1A!;g+GCz>{=7V z|1N_v%w~6AXp|J{)~A?tL`l#ZFVQu^c5(1? zf-dn%YVSIW1!4Go*s*GP7q{Tq<<4Lq$#pAX={lPYQg4E57m~GJw|;o< zn+v~Wo(aC2V2Y1K*zojExE1fRAcmznn~O9t*#Wogo87{8GIXrVpQzA~Uf~Z3o*@&k zdU&iIMj+{r!4mZ8UFMa+66cHHvDp*t+b`p*nI8DD-(Zwi^8(xi0k^-oCxrADCzrf7H}<<#DMfg+FPS3DPtQ^c?cNl1+2Lyj4ZJNBuqAm z72xorGd(r1xY(>rit=`=GxB<`aL_n%_GQ*L!tIbruz*LW5HzrZl-7OdTE#x0m6v^ly6ztF_$sx{-7+ zxf-&Y8ytG=nTW5%)|I7ni7*!fGED}-WSPi~SNFrfdQ!OBodIU!H=p>Fc@?cK)$EMr zkxZQ(yK!adF5(yUngfdpq8T2Gp5P(Rla<~VnFU4taNgbxv`&whpZ(6Vs$wY1e=TM z$&@{htqy!bUA01FoNmm+i!Kmvdr+Hyz`-v?SH8Z%az1Slu(O>67a3mbV=!Q~$vZGc z8;YWUNi9ro|C1uGkyfe3h+%Qs;0i-X?YLFqwG z9WYssN`P^G6}nyOt9GV3W+&9A2qOfP8ppD$8^&XjiiR z%zJP>W%KwowMb0$1Tb)2l8Oc6p5b4i%AP4Z*l-|vHq$P5&Xv?GZc7bP4bv*BN7p#v zRsVs6lez_PlrylibQNMOJ_D;Yu#Pd7;e{OmWgMhih z6QFp2gYka}JVb85l2*4AUxU)0(>}^@#))-yml-$;qzD5oC?i^T@8QFK7xJ(Gg%ogO z1U>{Z_6~ow-cPwQd#|l(8L@BD*1IxfebQ|tWUBUAdqTM;74E^vN1nEo%d-Z?>9067 z+wx6G-M#h)&g$Q~alLBbYwgIu__+44oWbw9JJ-Fu?$k!5gaYThD1jNU(kKB$Kb#P} z4B;h|2@f4Kh{XQ6U6O6Fz?o^^oLOIY^*;6O(U8NshaY7o`PE23`fJAsG{m?%d5J7@ zl4=mo3ZembOl?b)<)`KQq|B>X#%lEy2_x^?On&aio(U`^X_E>zND-a%x&(<~q@m2y zthKG+C-`LPk8+arBYwKLyKm$&e#iM9Lu8?DKvBWtBdJ;gq=hy#MiO&XKe+%yl?lW4 ztx34o6iyloIHd3cTf4!u-{Ggh2Q(l893Y$g=cE0fX@$r%)S`$Fc6cGR!r4T2uT@L_ zJ3lR1-oZ%M_Sv4l5MTst6hThx;cW2z5#S#gRPAeR;PMC|%lL~PNa96a?|$ADs_aAO z{OY26m$np6pzwx=wHx})A;zoY%Kg9!?bd^D4u{-^Eu@u_Gpr`5djR`(V2F$g+JcdZ z62+RVM-DXK%6_xZW9a=vms5vb-reLUg%NQR1X7o%0v;WpL_}rt50p1S2iqV#1sb;B zjica=9z@pq#~A9!hSi`h-_y6gSq`7go(WvZjGN#Ut5eLx*})~Rt)}KSF2Z_&KkmK< z-}z67hh%~M_+zH#CtO#BIIcW0cuNX%nNQ@R;zwf+V)38^pUS?ijL!}Bl9eh zcg?Ud{#ITzlpQq@o7Yeiqrr=yWu)8VzcJ%5vtb3Py}IFawk)8B;14gkcxZ+SVNYiuv%t#?Q-agR%h4B_sjO_&%aqk#2KIF ztQyPai-UT_%qGS@6e@lQQ30^NG>inWIY3K@aK`c*9IEyUPJNrcF+II@v*edZ!nEMS zg2zc6GuMx8{{X(kdCYKo#(0F{z>*J74rD_yI%V+w!rk~c0(ANUM^zrKsCWuqYNce& zO=78V4-@5JyDriLL5=eU-U_fRE%1jZ0sb8_cwVNe#`SpWM%+k!1n(v0ymxk@>argo z_kpGKppzadhGjh1$4a0=+K^ImK-H<$G+Yqzw%$tT{L|HJF`+LBqYd@U;RA+Vd5vkS zB^5w|I9PA~I749ph_j?$rzkL_=txP~*qFb25q4E5Okx%8A@Elo9tXi)Y9YJ)M;KKH zXnGTXkp$;M{4iirt74Rj8t&w`c&lhuYgy@KYn1icMxa40$X4?tVdC_XvGT+{Oh)1| zZjMw9cdViEKLtd8WHx_r*F{t5t4bh3tuinS0H#4WXsy!I-b7a>q}b`MEb^FpNgP6= zU>q9UF7R5Pq+UKoK;cq|s**=aDw+klHTD>Ky3qxyJ(bOQk|!4B!vmq8pyUD~#T$%G zz>SavEJo<9hzr1QXEYJ);FPoGnEShn_<53g9uQ?A3C?&%Tpr#8^BniV_>%Rm01KzN zr%YtQY?gn9L0wRyEq3Zf{Q8h6VaRIB9ig?p($YS3Gt z&$Rk0G^biMej4~RblbJ7{0&f!2Qw%Sh8=l);qw`&nWuVZhAT?BMpzFiL8E$!Qc+Xy zF2&5=f3&zm8HUuLyYNO>%$D9pawbDIi0)F#3o-%z=&ult8W=-SB5IQ|h_a}O%j8MR zk5K1v)p7EIle%TRk~80=9&UR-ZzM;IQ+kw^GNBZR}W9aTP4 ziHYC0Bjm2SY$h!V;6CHgK%NG{41OeX5;XQZ)uyFHXDy{{2XNP4ejN>vX#K9{s+<1n z$>}f~#qkPf|33I_8Z2`Liquyj`<)3RT(@Hy!9k{!1_ALx>U7 zh13RfGzNxBJMo@aIl`0h7Y$*z9rfOi#(hyMp9$Q0_$*31fD7FLwL%)l!kI!OVcmKm z>~G;rWbU_My6S^=naW=JlEQZxjNV-OUq*_VK~MCp17k@dr0?L(MGfF{Ud%x;k`yO2 z0r$|y*o-h>7G-hf8U8nc&$$Uxng(^WJOZ6hZ>@PEBh7f^6Ua9^OrRruXq+~*&82vSr%9HRny^@ z)SeP_fe-a=2p3Tb<6G!hyw@Bk6IET9OZaudW_f+mwqg6Ix! z#>#xyY{XwrRVWpkscu>uc6)Q4s_QbbrfnGY3!%uooCP|9J2=6d1eRcEzfiE9G4C4w z&1sLBE&r^KmG6|BqyA{Gki%A%TX9i}8cGKkVRGDvvV$I0CtF^|w?E~<-aMieiWfi6-c zEWykX6en%ehbzptC*WN4p&nfH9?Lk zUV~H{R)LmAo5j`9r39h6(gPsCSny&usfhuEb8T7Q=3sAu4FeaLFqa!=SK*(y)*ZWI z>zp1IWR9Kv8^8ZaUGv5ts(8mfqGH7!x4?mbH>^ZncuV4o;>}*FmRU(TW*Qb@=XIaM2%Y zogg@CEi75OW%}klRXp$E&;-|z60-A>Q?BA9S=4{KPh~se4F(qZ2cLqK`kkd1D-k`k z9`=!<&AWLO#Gp!}b{m`epn*Fgugf^%95MbynrFPd>0w=C?n{uQ@XP*0+4CQsi*HJo zDr!&L_|GvjsP%9SiAC#GylDW{yfn++JPIt1T1|Y%C#S2VB(Ap+zsaO5!%LphxC~He z^Lm)A-U7^oo1ii0qUGQcJueE1VTUL0yhHW*x@ze0vK9NSK>G_VF&3n$!P(X^#bR+l zH>}K%^tR&WdzzxUoK@A+F{kPXENlbP=fR1u>9ysA@c8@nH^0Fd*N?E^uDtPEYKVNz z_VYSTS17}a6fxXeFcQSK&)e?+>OKZLQK|T5bqDEA}=EYZbN&z+?wrLv%dDr)h zzmGcNKDH)u)Q55Lu`uzOpM1|p6GESqS9DNJXzi^>0c(X8%W09(s}L7Z=u#^UXrxI- z0`)5@AJWAX@3=DPjeCyErrIt;E)nm;;^0i}4jXWG3+SDW$$J9yd(0!}FqcTvpl5rw zw-8K+8-FG)M=IYtpVQVWu6^QB{<~8a-@UO;fiE?{l*SaN&%2qfp?0NdYL-y3bKJUe z$}hW+Mxf`ZA8akbE_snp_7vt3#gX;Ji?(;neRwKZ`3kpNR7Vfbul+&&6i5hE$f+UE zfN2`WOxatSoQ{N@RvgTGTTKA2!%E?eKQ*sNMGgDv1{+avuiInnnJl?xgjDTg!Yddb zTqS;=wJW}eX)fQth^#N#Re6CpDh^<8%JE>%GKhL7Xx=rBT9r*2?{vt(b>W?=M8>Mq zs%@R0%9_r;t{uzo9`L&xyNGTLKeScFIzETD0YjghI}@t?9#x}7ORIVe6cIOGv%}d; z0iTV9b<2>LqFqZh?kjoDyedBJf>fbmCw-c3%gx`e@8@>x1w6BilK0U1)Pm1Ldf+u7 zD4p0-7sP{t)&vc(ir)%Ku7XS4?>1QOD|2{qKhzH+fj&+}O>iPy(gVq5S@SLHuP<@r zNEW1<(ekzxk;Yeh#pSLr76&pO^s?+|sN(B4Y!rpGr~bST((4|1@WwgqQ!vL}0StFN z0XUR~maswO0jneuj}$~)Kh+nZ-itEsU#B8UG&W`TD@wb2Sh+Rkv<5Uk|GIGy&)hZf zOml*3{IaJlJ*kLDfm&z2k5p}Q)9npx+|n4kQsXKWzxh@C8y#9|kwwm*OU-P;vNWdM zkn!*ps>;e3^N}pq3Lu^iD-Y-2e_R^CJ{%K2rqg)iH=yEi&joF>-hUjI%hNc$fqxoY zw3p>G>u2h>?iQ*0VUpPWj)~Yys?O){iO_d`=N-66z{O5XJGAE+)Mr15@AVOuZ7B0h z`&1^`?%6$5MYFA-;SKok3DtZc3#{*cvf6`q%)1_$B8~>+p3R|YPYuNDzC?}R(FqiI z^o#UWL)r=uhpEVXbeHt;E??Y@lRQ8FAy98Lm8NrBRh9FNRC4kV6|Nen>V^ITrAVN` zgew!o@^uh=GtOV0+@1apbV2XpGhCb7J~#@YB#Ys#kd^%43|r?T=^CQ3Z~DBiC)ZJ_ zxLm&wFEXh12Hl6R$q+rFA}PO}7As?w*MnoW-Q`|w%}`MJeCb-|3y0W4M{3Y!n3mnw zmn>>QxW`lPku^Zfa4o`+;8Kr>(HoU~bU?U&K&xP+vf-FtvCb=%52V#ju<+K^f~&_e z($ZDMpXlTtM&4n|-M9uhtw=F4WaXItxoLV6Hb0EY z;(DANex*lA;5M>0IrTYI55K1s^(^kL+i6Ya8TG-K- zLa9qQ$Ol>u6v5))^cpva+B5HgfjECtbT7YposN}kd3T*PQ(w{Zm#m-6Lr3yA564~h zTE{)>rKNYUFfL*sK#&I#EKYuQ?Bf}PwUs%&cJWE?13Sl)IZpbHqBk32#!&P5s1bazBU8Ztxd0gWaTnr`{N^%9oR>GWdPZx2gU>)th5Uq+27R5VCLSCB^Bb zoLkueJ`BLj@ms|i%2;(yzw}Bf@3zanbAQ0EzQS(rC$1*{?gW>=w-u%gTN35p8ksVw z-ZRRmnsUbg#BlXh7|mBE9R_;naS8BAWftzFlX(Hp8Jpe`s|QlkE0ER&_WMd)YUtF5`IYxX zy*n~+rT^7et{$aT@6NZTmwH!LPTw!Jw5nXF;FW8T5>Bo-)Rruz>eSm&QaTK|PV~Tt z_WQNfV-D&q_e_Q47uN=EwrUSuZo1S}CQ4PVqy!vpo8Vfpf(( z$lye@^+2?-O}_MoibKq?#X4u@AyJ-S0F}aOMCTfk+s`@7Iw7N5J=simL*Ff07>j-t zBkz3cQS^N9%-1mY6f1)k{m{wQ@2d9HTWD?VtJRWaX^xNBxLkSihg`Y7Oa8nIJiw{} zrbM=5+wXfIU55TUqB1_x`Zor7x^2tziWgq-8HHUHw#Uf5W6U8cH-`5MG&=Sf`dJ&R z?Dzh#vRo8~E2i?4T`r_9d1s`1K2cs>h=Wg_0d=6T*7P=&kMPNo#+Lf8p2A*g*uHLa zFGY!5>UWHJj)jL;tA(9RGI_w#hwE!S$)EJbyj#}?D?Cd}BVkVKkqcQGdGB{ptgrWP z~l{YiSQTOtf6uB>h{Bxy* zXE`G6v>0RqM?yny_3pZZEbqX}6UgXdQ1yx(0>EIn8UGbQfJsrV|3GIi=H5@YYb*Xd zf-{gsogvHzH8p1>`DfF1KYVn#bKpyv&6m8wz3u6|g3QwP;Efr*R_aFE##54w9xU4S z%Z{znhg7)X#L^%Yd&(6${`}-2A`kIM6R{7|786LEK8Tkc4JN3F9!1+ZEV z$!i!NOxp*eVY^p#P7p%f&ELkQcC#!JqdpKsDl#O=yVChQ&t36CYCfs@y0^66e=xLir2&Q-8dU=MRTJ1vYDXS>#ZRE?hBX!5VKynV!hVm&^y85?dLtB9Kn;Q;I z4~wIp4w$1se!%g(-sl){e9t%%iyzeH@kzS8s{MUgN#Ks&mjHO^^-lnu&N^@Kn5#L7 z%!ya*0VrB-3w?y_yYUQB@hqgc6ueL%PRcxrUBDcPMhw9Jpm`=X*SKDEc6-p0aXDWMR zq{TeG;b|LDu*;!xCCToabIfl`=Sf`;ntvc)rO$#%LuM1;#&hB)br`vI3AX#f=Z;y5 zxY3llhY5Btto_=Cfd~8EOi5~fuLpHX+non0jN-xxat3xF@$KtpR15KzAqxTwxu``z z8vL`sc_E%d>H%)hq0q7O%+EC_LIYm{-2Yc7aLhV&`)v=T@@w+kR7h``7JWDW<1HnH z16ShDzb&hSPu?-;-mWADrY{%(>Mjpl9Nsygc(++ZFc&GrnHALX^8Oi!=_<|9if2|! zx7AOURE@DPfA{||joRtAU#O@sjg0jEM>U>>eiiYiTA| zCT!Kex_-reKs9GoPIaNc-}&sentBO1lFqF#+o^MK^B<^!pways$QB*lWe*{WQI}-_xYy}?gd*-(iCoF%4^~|}U4Qm@JKCjV=y?CNL z;JFKsO+x1L=-&rrNW7|8clI25?Pi3S@Jamb_S3>*;oXD}wR*j^z@dZPmC_AxRF>P& zFU7#I&(hTA_7R`Sk)3UGXX>}mJqx+KLFNP5B1P$Inooq7K1=+N(FASKRA>t?DY`X8 zId=k%&sE5lcE~FjTh`r4p0rk}CfTc8lKr*KPSn2dbgn81cKWuEs>ys36P_hI7f0nq z%d!^tBwXm0;{8^RDyeP1Gd8{hCZr>e$T!F%Dp6tRR)S>47|ew(O7%&-2iKsg0c#sy zOkoe4x$`!Z8IuF3@I;`>KjBmFouD7ec17HUTzt^)lS9ptXX|eTh3c0c%ppW`mgM*1 zJYx7+XVoaYu`+sX3=$*v03Z@_wK}5&vfC7x zTkrGTid1G{zAU+L=Yc*&DFv?NogPojpb`Lf()~`9pNBg#a_zxrZp6;$|2=Q+ zR%x2>vP5RHeV}5m41mkR*SmR(M!4HsRS3n!seV4Gel-EAvk#LWc#)jTsAdZO*q9XQ z2jL{z6#Bz-6gnkqBPq*m10Ge#>6MMJ_p$_5AE$ZgDtFcJVGVQO5pY*yYKW8mCOGD7 z`SYw$-0#yS;Xc(w;=sp?gFjV_kpd?^Fm~Af{NO*3wzkPoqstF(`5!=0!Z_kWeZ01G zEx2WU=i+1QtHwkM;d9n5bL9^v<4@QLzs$;xT-uuP9Y{93Cu1KexMcEfd3c`mUj^$c zX7<;9m%p}&P5J&)*n1xW4jBuS&Xnng$LHQiU*#v$2cp()n_rq5IOn888oTw;U2K^8 z9qO0Al_x#{>a&|un^^iR1NCFv>!I4JO>7#X=!e8fXkeli^ID?z*od^BOK!LW!HRe< zYj5#wmT!Hb^LceS!?z%Z-%FiGA643TgAR9xyS6$%waveeqZc#`IXMw~zxaxvwNn3q zDVl!y{A@YV8zSnzJSf1{?uq0x>ru(*j+^l)w;H}G1*5#Wl(G4VKK!%moo?RP6PXwZ zbRJ#EPzX0BFHSJq5T5Zo&ajo`hp=VEgyj9$)RPFkF0P%+{9~%rs=A$4*Y!@xbI!L$KBL*jvmMdZ^yfieY_8?+S2M9vJU5RUg~(2$@Phiv-ycOhP;6g zO)-7|C+siO5e1{&yC})9E2>mzg|-Hcd9vl#9P_V!DKpL)a{U8j*E6kusex`r>I_zZ z6sP|W^lkZB!F*x)U zR84>;9DlnIR<*Alz_ib+#A(sDtw<4ZYbHe%Jm1+9GMhP6yFq0e+}LA8{iE6iH9Jh4 z_AHv!Vtv2hTA@0>vT(E6^Mm_>9s6j7LLX#aI9a@Nvb#BJ=5gk$lMpSA=P&IC4MR8W zN^W~q$lPgbQ(|NanG>Kt3x2!*VCv8Z%sTekcSXO*GA{bHP_=a{WxS7dQb^ z=gRJ~eg^qJa}#olzlTiaF`T(Q@3R!av~#ZUwS-M==siraF?`4SeOXY}vFm~Pr+k`H zBpBg=Op1XwqTwm~y?!dfIw;h-X^h+NlMF6<6UUVRN{=<+cuHFrjFtY(5zN^m&hi(g zVs&wt>fKK+vHGL+=E3a2KuvL1}m5=ez}jschXtK)h3rvwggrYxk{ zn)&V#pzB%(Nue-Gd%QROc7mFlH>nYr;9}mgc|;mN+ zhzMc8Qb)JT*9-?-2F96%n}*E}XTerz}U=8x_TgvF`d z^J)%sFJ(&SqW-p5sVeui;`S!f{Y|q02+bLv=u=XCr})0&{IL33hKCEz@g2{Ib3wGK zbfCgieBwL3BbV(To{0)gGOU>;t4eF5tM$*~1AKiS;TjtbzwM!TdS|}rQcXWgtNyd9 z2vaO3jxP@ay;}yLNHpz#j)Hvr!;{1yUDh=05bS*YC+F2``VZecxs;roLkzo5#R_ys zsR6WYCky^1K6QXIu5=g69x1FXd7`H~%J#HIkc+CoG{M{iffQ`=Nc8XrWzb)u~a8PdQT5 z)QD|cC8ku0<&lEf+mXYiku?uHl`rku%4YE_pV8Of&#h-&_%v3h{R7E^ACYRwTsCig zO*L*#`%KVUy)|M%5KL>CEcL7+NT?w^74Ql1Xl{OzPh>>XgHe8ezOjo(0p^G|=*tKea?Tg)En3e%e$D z&X4yYt$*nX42Rgg<>$x1k?uDWPc`Qx`zV->5)L;tnF{Fu-U`i+-EQ^{M`Ot< zqr%>n9_ImE*IZEvpX}r^LHPYg75b%^cQ%9 z8SJ%){Dw-34w7m}bzc%(dq-(q&Ua;=f+wD1b;{5RvyA7&0TPDrcE+-P^|67DAinGs z%Ymxxw~E)-C9^ZHK1Q0A(}24B0b&lI76!Bh5pifKJL`^Yv!8g_yNfF+j>=4$B46b5 zg%5=v3NxF$P(V{R8E5|Fy$$0cQ$y2E30u2V&VQe7pw4 z$im0kT;j z7SxpgSD_ND2Hv-=nZSiq#c4Ax1aE~}=W`AbooxrB4-I+%Qo41|Jnnvz9`b2>Zw%{J zH)W}&1j6TdiGWfsi6~nF@SB=R@|o{7uW;w&%7z(Kd;Qc`55uyw~H!>*8&0N;$* z&HM8w;2)^a(Ahs6a3}RB+&8o2NOCF1=en>qp$vhZh!!)S*Y8PQyYHJpe`EV&NgoM9w9`O(K|!b5FvW6(IQMp^cF#wh~7qw9z<_JbfObR@4ZHk-ph=L&I}0? z?S8NOdDeQLXT4?Z{bBD<`@^+-nYCQ?Jpb+Z9aLk+7XlX=c_8ny3?rut7PDH-Lj^X3 zF~(|um2Jxq<3D5GkV{Wj)oC&I$fLnhLe9Bo*`xk!l87#V=~@eOF#sjYrN+VRdkRGu%bgqVzwvySRGN2{>g@&fTV*6m5xJnvxaxI3N+6;^e zKVImo({U+X^l-EGg(P}W{UjR@Q8v$_D%`}lB?1D9@lILnuUJ&JSwE9dUj>qG!?E?_ z%=){Ubv0_uYsjMr{Y8Ckul@doJku3~9#--Q4`mez!62Ql1xYD8a!Lfu2lyvRD){R& zC3fCw0H~1TDCZ<2m6t9r_rZAAFEA(l0!M+`(+^r2J1}!gb?xDMw5+ywgE$?V`JV|B zaRMs?^S{3e`jbnJ3p9xOwete2Ho5d3-KgfhdcVwm^`HUIEqQX!lGz6^x`Qs4&%Cf& zgDFxSn$jPJzNiO<{$b~1tK=w9jku*VI)Z+K1H%!%MF{Cy?R#KM=0VW9^-y`}gItwz ze|}%OoBKfNp#{sk2F;)snP#OlvaIS7CK)n^P zcHr$N^Tg@%op{RoIRB}cW4{tR1ra+1i4wAtZb=VGbxZyA=m`+U`j-p^M&9yGw}aib zzFKS_rT`%K*-y*ig7Lj?xT)8B`$8BY0P*bQb&o| z7uhSdDhc@pkz9DgRt)EZt~}3oM6Jo{HHP#`{iLT)MKhF`5QF-CsNCY*@4{UM zJLq+=L`P3B720!~W)&Jyztm#~w{6JxUJ1)lwx}y_{zld-fnK}beVU|2m+2I(Mq{X! zD~=;V3-xAGqc%PPhBy~}KB=vSnPnXvYn9pMnd#1vktWmP3CAzEtk4V~07`;|EUj#{ z0PNZ+uLBD|!!)ynbSEz1hJM3D-5yGwx5*dE#G`x!e7`#A&qV3f-MZ>QvJ4&wYaGcU^CgTt{iCp0F2eRr3eu%7se#sj+VOg))lq=eq20cPk-cy z8TWFuP&BNW7xUAeCn3A}la}o8_oU6&zw=61CX3v0SBMgqtAt4n^+LN)S`OJ2o0Oz; zO}OW=5rT%_^athL(P9Vb07#G{<>IA%poyq2^uUCy{>daGCpTBzD~`|S@)|!9*IS~y zXc2N#fp38_G|&R46HI$GQ#9k*-8jyWa{M@8qKK9vf#fxHk`e>2n0s-u$}d>`$S5#L zDUCjLqPL9Du)inHTMe=Ox#f-Gc<*xsRMZQtv5FBT7&NX`P=&fcylZ)2{ZQ?v(^`A- z54;6=f$ew-gbDVxZL>pLdq#o$9p&x<9aUdu+b1VFSr1C{FDB%7kZR}M-;kk}R2{hF zD@aMmW*c4I#*iPWNT+uN_saL+nu+N?vKS1MsOVK*rQ5@{#e?k|qyj6x;95>B(sCEm zqA`oA9{)0gb+$LeFWXi=M;0JN(M}|TOspl5a^i46Z++?#^=jhY#69-SZ~}@~LCOS_ z8Mw1Pz&#>>>l%VdDGBWqxRz*Xo$`#ft9Me>Uh=?SQE$Ubdh(gks@-HkdRrM;cuVPWS`MnD03h=FEdz3N9~O9@uvRx3BU>yR?= zA5h_m72h=jZfA2N!s@OZXTC+B-?sxY7q2I^GwfH-u|wx&)zhTqdGfU$ac)2^ijKcd zR-_MHeDDwGACT61`^$4V%yD8Nf@-?Kk0HU*QQv&hiw`1N@6paz_@}oVM5N@d@$#wD zFw)iM*N@*P;fjpcWZ1U?`Kai~Hyt&Kdvr!xKUe!jV?GZP*oVAI022`=qoITG_=rc2 z+E9vd@xh|N@s6;p0RP$OBuRqrcv=K^`fY!bZf^Bnd%;|QV1KLo!(e#M^INXEme3cP zw^q`6EJSV_3@>vp-^vS2)Ce$=j$e)WKP{R5JLX z@oLzO`0Iz56{Y0<9HCA#0Wn$n*lBGJf=^q@qfdG^JsEjH)IdSzO$%-aDN(EH z@9TjjTUXra^2JfY2#T7!fZ?9&7;Rln#Z1QZO`f>FDRfz&TjrGlBzZs>)=2e^0`|t> zlaA}SuwdF<56I{E5b)Z+{=7O7vYLN%gwByT7oRfI#REf`rU>>fr^btn?7Wcq=f4$R zdv_}of@G2ifjyK;fg1or`b40xLZ6a+op@WK<^smbPdZ-==rSfa{ngcV{M8lN$q(?> zgt{-0p~SR^;u{ejWsdOpQo8I{{Vso7lXhVODYm z-?3e0qL?a;eDULTTC8E{mc^aP{#(X2vo(po+G_kEq9MR+BLOXY$i43mzQNWZQ@=Y1 z!K5b3>KS$&%?-v9@j}BSO)$%klne7f<{2Fvf$HokDdS;=P*|!`DE5Z%kt>Smyq$ix zThX?ZYrd+RI)A!4oSi5jJ!H-|jLg(HGQq5GDb>!`R|p!t%=v5QS<}!!ZBgjj5;OeZ zTbLdRetqf=QJlbTtktcuWY?cw=ncWb2&6_Kxn${@RVKTgzsWT0Pfx~k#N@U$1@*#x zBK#Vz3o$hTiC&#GE}vAz`iXVs%JEGvJ!1EVT?UJgKk+&r!L{9i%oJ&OmdKjh%e)52MK^e zcPe+JYn5n#mBX!1GM(C68%mo(p8xKPaK-!c9{keWwy_%CbUyB<<12R%NV4nbVa<}2 zmmU)+Q?|uEHYD$!2dv#l6JX>Xh-D)-yP{qiM6xWJ4Ey3&|1HQ^bx|oP8nzk7*U0V7QwALoxFc*ke{46K^${g`zw#pzj z73o+c7xJWB$1a+6pz-JTsu^3KW{gD zrZjooW5_<Fq?O+u%c~!iKv%>k%W6I+`D= zfSa@6K-;$(ZS+GER!uuQSk*oDxO<%WRc+mYl(#evfnaf<9gR@H%xzbtl)Q^~@^Z9y zC`OwVY!iCM+RA<=rpJYYqySm(1+jY`i$L(m#XEv^B5u5g$o-A1CuXer;5sNfD0LBE_zh?RFdB-% zk57{WP&D+*2p?Q7I#!_j0$6vQkP|scz`84*(hlW%mnYLi_09475XrHl6*_B!L4oVt zE$sr(;16qRWkaGmRAfK5Uzv;41hKSh;E@x9PBr(R3>O`yj!CcYEGkk0i<%BCofVF?@AB6!JSTQ4CFTKgtp5gOLB|%n4YHnFdH6oaW#F}E)<{#zNw=<282fl z=|XreN;2xb_?IM26aaOwc?;PuZi+38Q}Uy=JDRoi) zJ+F5c9g2aZ>!s5WjX=Huezy1nUBrs7FW1viZe>!nQI~&{s0H|71PU<5O~TiOm${}(GXeD1 zVp9!BoR()GF^o>8^H*S_vb78C#Lm^w_$zSgB(L0jNmM)S<_4>=MiG2Nxf)CMStN3r zOnqLUImtjje~!oSMUP3)Ytax54<$$Ld(VS7da>;U$qA>!yH@7;%zA+tnGM6cob={TzEp4s;% zda8XkGyj|&!!O|0Z%PmAr5N!Zysx`$ari(OhKdzorSCI!YD_L!iP3O^-B-R3KDUYC zkMB0@00nR_-OlGIU>CwW!2u(!q#xpg6{Poa9!}TCQyZJD)RQ3}=eLQ^vXiZq=MHQa29VH4XN4fUS3xi8x6wqJj8 z=1gpJe2rr2>~X?Zak7(BU-qh*EBMsi6i#!c(%VnXkjC6gg(r}uClQ*zdSKYe)jV^w zJ@?Hzb)BR!lC1y5gkDiB7pHr{XO)qA1f`S8N|2Bbl?$H~D6VBNK8Idc`tS==9P3w{ z!HzN#=ge4DkEDY&kxt*!|MTFi(mpcM&`2ewFr9N7P%H!iFp+;io0)-iO&=9e6gaJ| zacZsl?2k>NT92kJ*2W0sMk5P#j@MkJ42JKQOChHP4oJxK=MKFD9FC8Q7~sWfi41-f zcgS2t0Li1W>%b01B8-!*sD4x*y2A6)n4iuZTJ99vCO!-6x%FWUwSeUgEs~1MWE+!H8_)iNHStjie^F~f z(U;&AURE71Lo1>H%DshzcT9mHVzOoxCUnMcqjegzI1|aYJ?&y>?bs=lzsp4(H8}D9 z>kzmGHf@Nz02~67mVd3=fmwcx6>-JRVhlbfDDRVj5FA&M2u8r+cjlZPr?|Nh%|v6# z0qA1hyHG8gaL20kyR~xuqF4WJWF51WlLA=l99%I5jO7voHjGzBINwceC#Dl)>_lXd z#W2f-u3c@b$yjwF*BHntI!PG58Ff>J*$8h}+&m&2>b<3%*_`%_72yt#wX5G+roQ6r#<3DW85(Zf1eK_qAWpDLuUxKFXDi|y(W80 zym7^_ClgjxQG$3<7rsC7DueOv+}=a3_l(B)t{MdRqg0m!P1aIG%OoJv4X zCkP(h54j@;u|{iW#)I}!&l+po1XI5DKcJ)(Y zp%)?!t8O15T<6)FF(qO3(kps?70oDkq*I=VGIJ~a8+Ub;p9_br4+f)|$jbA8eCY05 z3kOr~;|iOq^}X{8rqnNWf<^jed&YN+q`2^7qMXaV?q2?UV&>>A{EnhW%;-r`zczm%Mk?vy zD=Bt4XM9d_APFU`FU9BVS3CvHb{#Cc+<+FkA(&?_e?`CqfeRDJe?TS7Q8!end^?e- zbk!kt{t;hb{#Ma+`3tMhxc_E7x=VJL`=e4?~$;&od;)%+NSf{NB&xQ z3mqcqNmaqV3*xIMQ>Z|e^F3duN9hOuq;Z~<`eycW& zMOLMD3m%)UN(+pm#rz=pdD07BEI5z2iFc7>1e~1Mcq0agOp~U;thhk^6sO;N%SJax zN6BG?igf}M!o@1(i2=9JnBRXiytrAq2 z6$E0v3vvZE1B2LK=~sf+oYh^CdCd{M8T{?9E9)?0DQ*g zN?OBq`8<}dZI-K3_$XAXDazz=QH(j@!XlB+5x=@tPdDKIzPvP_0#q&xl$HdBJB1Mp zn35sZ`$N3}GR<8wWF0?!d<^N*besqaYr^j=U%X{9bJu(uBNA?Bo;8ei2mZu5WICU<}}R7C>RD;fvK6WHJg%^0E)}B5AJt`Gt4=w7?t8 zBl=y9r$eOuY$)*FEj{8zrgk$f5hW-zAoR68$s`cAG~it=m#_NS#2{#`!DHz4hhQa0 zJd;n1nBu2EQt`>fi(6s<8(WFX)xf3}0Q)8}QOqAd@91aKN8&(POxJkZp>izl`?K=* zq_48WhVQ<`8I@lX-6Si*!0{XS0gvGc@Rxm;7vb03#V{iyr2uO_^iY445Xs&L?y=~a zqMF)}r6s7W_R}cMts*CQL|-d?w5RL|DK4j%%t&h%?eMtL*@mi5Ojr2(?hjr$4x+|&}NaVGAAWt%RL+LQgx&)piMQP#kK4w6YDyH}a4WCUnk*C|uRDr{# zQG{nS1iWjQXbfw$r8He$Q3{dD3!x=uamzy)(A<3?1$xthWC4&mE?9|)6+lYE zH@Y*vjxekVxs)p8gn61w_13W1dc^VJpY7Zdr`ZFYcM60et_2;ft?f51YY0ff2N;V(3rY4EUJv4M{9;fi&<0CB|dmWy6yCt7@s zM8^WsxBULClgh2C3)AB{(4opdpvUL??vxhc%YSG3a%&)QijG!CC$WKzMdRy0A@9Rd z<+W(OvALKd%FL+;m9{PAmlb4U#)&_dgi-x{+AXXYwC2 zO5K2k@ti)kmX33{2(5i8S5d{_Ee`!Z=N?^X47vP$0HFXhL>6;hzmrT)yyC$QY#els z$i2qpgqhA5RZ9iw6i90Y+JbY)l`_~WR@JrIIYK5m=&$X{?=EP6CoRZ zq+e#FPE=~gMY*R0Nw%ufILf|~1N_2jOM1HQU0Y#US|!TL90)J(B@G_$inm#sKV|l6 z*DctI4JV#t9DHI)hHX1PyZHh*k6ZkU5TR|CN2gaIL^qYuconPJGUpPZN9Q4YPndhT zl09M&QH%So0v9BGmP8nzP=um23QFQIpJ5qaG_-BH+(T9PVyL-s_JuH^mK5u_bKqN8 z*V!KU=E@3_2M&`1GWEL>0FlxREhyBR0gmNup8Zo%`l!-I#xO5LeUQ|_E~J415(!OaTL$i46TczNJ)NO&&hg+H?j&I4sZc}s{e=x|chs%a8k zfy1~$UeeslLTQPT^8nE1b0Rnl_ItMB80hv?Qtw=N)G6-Gv8T_#)6aFz{@>BgmuuXZ- zx#N}V)arE_MYvO(Z0yj1#Sp+T(OuX$_nMM3$=~zXpTda_WT?0J(YB^~)i+QJbb(N+ znt6@Fc|S2^{%3h`>Yf1FxrR!=K2z45v@&>-UGwa*Q=Vo~M>-w}*Kr;r1EG{)@^DpE zkfQASz|Hcm>OX5)l9Ft)IU`!HM3p7t%NRL%amEAAdqC%k@&wRgp!T||hi+($05PmY zB_Mf9xu}CNX+L>e8V|1SA8gILY}w?hK=f%I&7< z!tzF30~|RyBjkRpjhmC53*DEZudy+^vFRdvXM6;;>bB*9J5HfSjR0^nrIh zk0cGS9~^EuuedvrTnS4uUl??L$vqW*AUNRa`x+13Wt<pR(nYdc(`bp(WaX^NRVYNFbNnx7N>=CQC4uh+0XSVMSj6;jSNecO;lL$w30&oP&6_OLkZ9@3AA*KVKqDP(q~elfH#cDr`=gOQl0=)W?>( zw%E5J|E>rHckYqqovi}z@+i*w%HP7liVVT~6})tU&c*@pD@kDeGR||@MKZ-X^4HT_ zht>F)vg3Q=s{p&c@3?DsRY5QiB^HP~3i!0Q>>mfzieRR;#E$lMRH_6|N?*nC&GJ7e z-Q+I?k@r@;AleqXrY;#2#1a86>(X25Q(j>5Y@2==+a2Ax*H_|y8h5J{edJ7JS$r79 zFXIEhIxH8BXa6d(cJWcjxpk^fewrjl6&N7#`k5rF5n;`5$Q_($?{X(lU~^QhoBkt2 z^}LBGd%T{Qrm2pd!!~;spA*!7XGtz&fA@c!l4dX*KY;T9)}lowP?dWo<};5N$p?b@;VGcN9=7Xx?cRwQ}Pk)*vcOq)+qy3Zjp^?i~}IKWQb z_63A5pc=E#4F-5!Hz5j-cRPix%da)C>!Ija533~3_VJ2$-Y==C5--{tmLNp1*JJJC z0TBT8SgB+F8$!#kcm-MkOB|;yT1_Z0Hyd(mnlLWpbbpjd57(D;0;HSoy*7Ukq2|(# z3Q$0ghZhKqyEcj9oQ4KT7J*Po+0Ngvi^ts3jdDCtzYwWcBTi**xO%jUvf#2`50 z_AwSZ5FgIQ^W&SsTrtl380NBl_6Ew$ief+VHhdqZ=t@2CVLcPmg({A%4D8h|z-epN z%w34y)RK_Et9%sK72f3`8hxdIwUw8SOrYPPjM)TgTV?@z0&HIEm$`+>sv6TzvI%T$ z>2NnAZ<$o(CI5@bj9V%M&n$o+WXBm`$;Xz=%?JF*`n9>-#R9zglhpUIbsX%p)*-$J zt41U!-!2&PV+NPyokmP7GWNX~>L=_n#;0Zl!sS1ZD$VRofhaf*0x`#l1WbIbKaV#{ z9A3o4M+8vgib@@FIC8hhtB_u3F8J4(Bk#XV2r7YxuUr-EIcnx=>Jj}(j)MxU#sO0s zgkqtXmFF0Xw8-D1CT|@D)r4#sEoxg5(rG8QhUKiGuQfpnE3a-j)-nNe1KkSHdi zp>aPneO!CR_l9g14enLaXizImaB>M9?VDz+#c1$WulcdoaK*v`zzFKwpxr-(U780{ zBE$oqq>k&1N%%-OXgzqK$vEhiU73)#t@WU@;%hvts#IDQ^6**?@VkTb2huZd*$NF`66qZc=76L;Va?|<`#)YhOKjBjzfu-8(39FH1nd}i!Yo*JyP`kaNYl1 z{_w0rE^M^rOn#w9JC`Y7;*z%yLJ6#_NaLBq%ID6S31*gNRd_rS{C#&nCqPLxcW6hK z;mGsGX|WVc`#Mq0oEM+XX|mCkrwS3tX{05O*PEdbWq#;|#4CMn)eVA4N+5czR~Ru1ZhiU*s) z<9pYI=k6XR-;_&nH&A^a+i|S6sh0kJf2A>oLW}m?g2qn+`NdrjoYu*WkiZ2OAf82R zL3@5Twa?i#naM++HwQixvNi{e92%&C%B4A(X<|;v%{BsNHmJk}SjB&T3SipBj3Irz zo1R!&Jd5trpkNM~Yz?0I#ZD2>0K5S|St5b}UwD`PNdkuq^%~6iI^)s6s_Q;jN`o)C zRgG@W-ta990^ze+#g6;kcmP)#9*xfI;NLMd;jv)bc1C^F93|1s8a!oZmyS8jti{`* zotbU=`cP0;5)BF47+k-*(9TWsmDtPiVdYk0T?6avN1HfTX2x?Q!%gm2+$1WK*(D;E zqFvO*zHqlOmbI~jY}Va(fc2@{mz1Rz{UJA!-k2aAe^IsjrpCH5tAB^iKVayixf_BHv4Y>fWu z&v~Y4z3kma`2NtPnRsi@N<$C2EW0XA`wf9YL-63WSLeXe(=TAgdJCDU_jR&wIeWv* z<5G`8)b^_0*7)AnkcW#~4d!Bgbb_%*3y}y~0!uMW$M1KFwRRZ-CY3CB%|o1c37TB) z8}N{JLS)fyL6$T$zW#&&VT7x}YV-wC1aR$ocT!AWb4_bI!dMPGeB3w_Mmsep?%c^c ztB;|e|Hb7Wszy^J5UV~kA*pZ&YnxmDr=(x3W-4+G+?Z^c{9mN@*Ie1D=#=+};9?x|9En*^ z28TH#NbHbS%cbG+##Vy~BW0(NT(Q~4Ny56%sBcymN^mwxSiq_okZn=@0Zcf&PnVBj z&+ZyK&3%=%j(=CB@`smImk4CkY#31ay0t3Jx2WyQ{3#>HBf@8qG*xa#8O{MJdS{CA zf%crh1YH-&`*yWWvd0?(%MwVzv1HivL}T6ZBu)5(Da{>6uBf1tK_7A=UWM^ZXoMm) z0*2My*a8ol8H=S(fO>$xhYEHS1@y*)`T*99P>Zm|(+7RKehAxgl7)`R z1mvY9u26zsndqyNePqE44jx2<#LxX{X0Jn&$NqM0HuX-@IdpO@1PCCYIgITVXmR5h ziJd1VE04iRl}Y5@>{8$HG{&@evN5vVmX9!iPcHAfPR^PuZsaGg7MDj><55ra#BOn!) z*Dq&Z&mF7XCSs6Bt%m9B+s_vyskVD|b;mci^7v$pmLOEuoahZkhaa#2O00P&)feqn z$4{@RwYbbQpTxA%NV6Xk$-V5PM~MCCq`~P6k?cM{3+05mxe1A^LU|-Laa(yH@^11H zu30;W8gcJ-n~T2(G)MykhA~%4@u-~g4Cp5@hoiB^=|czS6ix%U#i!Q*j*T45$<7kbgY^Q& z93Nt#eUgD-=Ua#g{DZunT=clguiJ;Hr(9H1gJECTq&UZVc97!dVYKgxTB%S0CA^!^ z`^uXxguCk$OSGF#Nr znE2+5Gg^RoJ8sW}KKR5+Nl(9UrbSoMP{9UBW6uWJ#4s1Z-w@&@H?{r{!@8C>D+#{q z<~J&=b)2Q|si)kb)>h9f22YoDXlx$sc7xreDrjD87X=GCBMLA^sQ7*t5(GgzMs0Se zcbzxMFH-Oqn0Dy%*vR+(L0gr|CQ@m3>Or?xo*PU7bC-`(bC>}=C9LXQ0y4F=be1D- z{YATPJl(dm9Q6qG&6Jg;p23k!J(Tw?A{uoPW*X7!veY%yYT4vQJ6KV^ciC{Wur$aX z`?KDTa;O`n66Y$-MGitr;^-BJAa@WCfeeGdVg6R^hnK_87Hy+uGwn>qn7FE_3Gepz z>KM?3w&#Ap7WQp0B&uET8_p6I+x}r7Wgt_tz)jhWS=|_aHg;*i=2{B#3YZP1E`mRv z-$TBc-g20?e-U$)oy)Dv?tf_Dr^7lhTon<1Erf$%sf}@I9@vU48dsBdQ!AM|k~&Rp z{L4?5?nYOL>^KT{+a!(YO5wY7=iI@*jlEJrC}BH`Y<}*xuF^%?yZ!24cYK-{&P*F! zbw9VgU>W!pie_zIXiO;Lx8Fri65)o>-W6zBNUbR@!YuW4;Civ}ED!efH7@oGlDu7* zC@0&|Xse{R(h7YyCl(DRvgFA{Pu^d>K|)iX|8>ctkNiG?PpeN%;1=3PCI2hR{P+UG z-w>a0a&2*C0uO~MFjr&5(;~cx(?*jG{dSAOAN@&^3YBK-yZHFQs2Dzpx;q(n3x-4} z@XSN>=00j}>8F5ru;f^tfkA4nDw&T`2jhNWG}7nfmOJ0sSQq{QIkG~uBYK*0z%wUE zK^qELqD{8rNAn3>?6WVUl zo+cu9vRzQezP^JOv^C#Z{WY_!wfeJMZ>QTd;x2mBYS|CC6Y_Bz;I&0JEM z?=A|R_vfO%HHuj^C#&8Cbmq4Hn|!#~O(8nR4VGJ0_>fl3*>8UW3zDVl#k7$#ny|l& zp^bq{FHeA&M;nNF5K;4TyyuC)u$!DeCixWr#rt-qMyGbBgM;rC5oZQFp z4_#@z%J?<^G-5o8<(oU9O{<~Wrr(Xgif1L8v>c~B>c)AAJNBDRV@rrqRg7F-5+}Jq z@K3h9g)CsK`y7sw$EsSeabp)E{sGnh;SOV`x+&j>tmShXy%&9eF+Ph~paur+?XG~S zxgWXzfKo{Q0o`gM%S&Q=w28Dy48JW1xKC$%s83#4uBfD~e-6~%`ZXwJew5IArq(&C z1!To{dAnQP3t&XNz)@pWUtw~BUtcctcEHBRsF}Y!&9I%2VfdM7>-wbOyuz8;9MSXn zPas(*D|}Sx=Ibpt?!<8BIu_hdX;K+Glu7M7$OZKKAG9R8DqoGrmu+AMt?I09fIi~i z7hM1+HcAl{)AhFN5;)=0d|*U+nD+2ZbLd@@+0Xl<8HF@lH%V=E(Dd8O)rpbgd4FWt z&eRB2Y?hNjKwVeMqvLT#6Xtww1AK&xN-N7!{)45WK5cjUAHn}0r9doz1wN^veMsVj`*>Av?GCi zi~-|;zj^-wZ37(=fJp>YWWz;nG5{R_^dHa&Amad3QbrOG@zK5BSVb65S&LXUL)#fw z25i2eetO=~Z+(8biilSFRqg{_m>|Env)S@S+nHS5&{V)oAR9tds87%g^(Q{mb4@v) z{xWv%+Q|B;$fK5Usfoj+0v5^Q?Fo(LPP!k0?GI70oW1AH(`LKp-sf(0H@~#u^Wwa# zVZS>4|3A(MXe0eUAA5nw*y)%W9||S?@}rq|EO%S2Q;SjZl9?YNm?)-5(oj!7S<7Pl zuob5Bpy?2W*%$=YSfTzS)qxD3MW<`kDlOkP>z?|5e~2YjBc2`_g|kS2#v6>>ZVEB6NmZ0k z87I65Tk}qiLDk+>yk!_YcLaoIivNK4=>cwNqGbwZYcm2!SU;xGFIa)=tq#k)xSuvF z!kTkG3~K2`ZYPjZeRxwKF)1uAoZM&aKf9cgA}dgVjGWJ0I(l1g*jV)1ef7EHV1tvX zj#bX3tmnC#g)CBbS8?-q7flhyy=wrMA7Od64N|dDY~HdCiE8dp@I{R1k-2uqmu{{VMQqh3_^^;UEZ`b zo!KN`NIvR|h)j2Xg$+%#^he1{p2y-KC0)UuLS!pI0rY$VfKV@}9Ls8b)naHIrc2({fw)oqht(X_U(kLNt=Y~?b+n7V>c*bc6{xdKKl_Db<Hiim!uqP6+_(o);NjY*DM0GRmGV1k$t>GHKCd%17hs0CY`xj7jVi05_mRx#|7 zg-rAsaBXN=HI&o+c^*wq zSr}(_Nn$XY?P=99p}X*E0^twQ+ycIGFQFgL=;Q>>gE4d+TUJD-mT(c;wEkO`uEyE= zA0{?yk8~wDeE9QdxlWb1HN=Gg#>ghCeRlwXHM+SMo^0OUJlmj{ZhrIC2j!D*C#BTV z!^ws2=mi3g)dJwePko{~*{*egf|R5_4tS9!Hq08aRP1w}zS|V^DKa`VaRwff;3p!8Zjf7xU!#rU&X4Dn@0Z5kFukN4oVSy*0}PX;&>czD*W##g zNUscQZiLu9g>maQnGc?)$|a3yKjBXQlKMthiz{RGtL}-Cw(1UKDHBMVaQ-OPz~@;1 z_{GOAUZWM?Uyesv{LrG|M}A4~9#-E>fdBNY0(a+7;^r{XXoa>Cz%Q?H;hF>OZ*vq2 ze_Rl5rn!^6^Cqt6%V0#xeIMG*v#2ZnD5S%mGv4Ia$Si~o5JtR%)OUSUU|(ANn?aaX zv}$I)`nQHGsde?P)uZZ!oiR%T%^f5WL__Z-qj7PSuhrlN*@2}H?j;&Z2KU}L`jB$d zlty4SEq~OZD=BTjLjKbz2EMh~71Is{vc6Wflxvd&J0=Zja)MZ?h zb8%|*XPI1%CEUV!W%cySKBF%1`#X#4w;+T- z8%`B-BPUsAKIBzuu{!MMX-)97cBH(G^E-sUoNt0qSNE=;6HV4}rFE&7v?AMHTI)h^ zyIR3s;@^d|OQ%(eVwIC5V-rgEe!L{5e>=CQihW?x0AO~WKn`qI0+YGh6?s&Zsr$E$ByQvpkv_sH$<6@+tsscbu3%@O+|?sW~VRpC9!jR+o!7I zm2%c7qqj}ewrXA^H@ht7lkE1O z@Yk9XsNdo=emc$(!$s+*Y(;37<*q@xzP=AGp@-MZVnzD?rrL{DbQ}pLU)3J@vUnms zgnnPV$?s&uZ44?BiFFadUA55iZzqnYex;gl1plH`Kj13-{yp@OM?ITp@N{P(P|7Ta zktAzN(4NH~P6F>Qpr^?FBsNLEcoXvL%DlBbOm4AgjUZ8_{BL9yX^I>bm{nkRpZ`^T zjp6*Zy!u1lnd7`q&b|-4^k%rq@GIfa!_m!n8iYK~z!B9&zvLgP7q^dAj~GQ82E=kd8b||zTKmA@vjU|gAFTlEzJdENWokE_7XQ zCQ3mB4utUnKqs-TU*>N7zdSQ?t5s;AP$re{lQy#yS&NiRS>}%f*kj=29$snqMJJjL zjRB1BPI}zD6*CONa7(R)hm}a7Y;3M;aZ0o@V?mKnfvlV3G$#p!`9*u-wWH^WxTWI2 zUZQXCcMILEtShCnE=R-Xwl=%A%67A${k)`RZ{V zc_U&=p5npvEnkuzq%L_sKJAiV)FRbj&tBwu(<~3^-)Q)JPKh(U>Sgk($}6vtXc7GB z1R~l#>zs%gn~cxIkNNY0T;Ra;;lsVRlK9*4OLZut=m5HXHt7Z|zg+5N*tLtj4_9K_ zT7S-KQIUccm6c$QYTwKG$;0vgd|q)~#qiFdLwd>9?YW;1e+@j|<%*&;8hgHJTi~iG z=PqM3HLJ%TyGlc);C7QE2PD6Dkg*z3-vS11kX7cErnl!05#J%lUB^p}J5$yErJ=w= z30?lMg=RM1>O0Age&X?KVC?Gi;pv5MHr|f2{K4)%-;U3FX|bCB&6^H#E24Lj-m&#I z7^u%7rqs|Uq{nJe9*weX-n>ufxbR{pgf$6d5#5^$oM?iZf=)pkpjz#fnGCN)&|7=B z@UQ7Mxvj2RIO#v7C~sWsuMB(Z5nFir0a9I>|EgLFB6%&08S0M*vZcC|l88sYe?||= zcs1;W%xgVJl>7VGE=ky2F;&@+=wvI$)v*o7jn1Wl&!B)Zz6<>$ScRp3$pj^z@joCR zH!g=)chv9mXN7pocMzFQ=P!6>cCh_2$%{Ibh+JP+r78a=>@9Oz!a5}8knuPjwf10A zdCF;izPFbv{9c-r=8xB;IndeD4>>St^LG;Bfa7;aNE9Dnd;MPr_|w5kC)q!sF{@i3 z>Nqcg$NqPfN*>txYZM>;KR^B#t5W{&6A;*$T!mmKLO^u82O z29xUbkKAL`H9ynQ(2lxXyd;kTeocc=2R=4H@h^$$$V!Z*H?3}IZh6Td!uTN0+X6XD zI@qqqu*zKXo0UdS^FIxq5r4155NcS-0l)$nZAGWW(lqKX2O40A^;R#{7?Hgm%D5!Y zDzLZa^>Y1BN8x|1(c4$Hh$0)T2mx<6`Y2C{S6wqsrpDS;e@O4KlpV}x7Asx)gjMem7f!B za-OA5se`H4%`l;3rh^@Vlx!k6j%ap1Fy{KD{bug{{T#vBH%Wd@{6x)(4~D*sWF@qH zV!TXLYbD>&QS(qB!>Z-RA_R(XP0%P!!3Iaq=2-5*KSqprjY*=vd0O8+|L^bCov6QH zU0eh<4ISSLM`#QlLW)FY1h81V*KlL`blO_DKz=qlN{vY1B9Rpk}+7Y^} zt%0*6O^hYKPNLy`Ah0So?6#TpHs+%*y_G_1a*P&48N9O2JS>HnT*Yru^Z@Ujg96uy8{D*wZO2HI36|s%_l#@Q* zB*jB1G3yUy+wr0kk3wZHw@Bg0y!|3(V%abnJ$+%|WBm`8zyJ7KzCqGw=PHJd_OuD) z8cqs%&e~QpAsVyQ;JeXl+{vekQpu&~ZOk>ldR}C@$Y)iDt(NGnXp?OPx5b=gcu%8S z_5ev5M;MLKWX49n6}9p0v;qWY=fY*9I_qiQkxu&h`&+|iP{cmb@j}!)NosF}(Erzc z{P$k|dsHc++3NgJlOT9zzl^m(`}FV8l~NM25$+IrPc9!u{0A+QApwu(qhYv0@wJL`W5h2#iQv5Tqtq)D1(XIuY2p% zl$CSaKXpV$#d3Q=q@eGw35o7&$p!I0X%R_@ui8a|a93FEenql+R=Uw%!x{@*M1R`U zqN#89m&A>bZDoS26p-f*uT;-(aD-`KzlE$?hEQZiQBFl!`*uOn2qz7U*r1ofz+Kf@ zdPs$DdwT2F{7|48%`4!eY+pb(^&de{ykX#IuThf|!H?LU+C`3J&-9+ZOX^ZP88EA- zJcl0)Xl7sUR>=qxofUDi2f3YSzL~P31B(6sfS3WjlWn~A^siQIe8{zt8`s&W`(HnG zULmeHxQ5)ir^L$cT6<%^mPuQxMXb$4@E>eUwLVnBdlZ%&7f z<6*9$!Y>?xM$|Dx`_qTz1;zR?k) zM2p^yPJ&4EUZX{rkRW=ZhQa6tqet%q(W8Xu(R=UFdoMEx5oHEpqTTQB{;#$7e)hXh z_Q7-TyeHNyi?wF1-!gSfKhx{yX|x zg4eGpscqs3aL=ko6C%N^@+|O(iwLw~znSoX-L!|6P4w;xfuRBUGbA~0gn8;*z+50R z0v9z&{_Bb-O1#pk()c#P0Kkx{#xF0}7*T7GaDTp z{$00wM3Nc(X#TGzrtqTpJ2nMf2SLkc(X2_w^_k=tqcjSmA3f)ECrssb5C4SUGYA?A zkl(${3*f-Y4CNBV5B2C;4A~*)!w0fny)m-3iDd!iYsq$UIvRV8k8M=HdP&Y{FS8!0 z2Egx@r7!Zo!Y_NgV#*yDZL?g7ZvmxFHKUgSZsB~vsYbnfA9$-7s!8vbvEKiHRH_sH z0iFB^Jk>V+U}lc;bUX~`*0qSqY>E~XXxJp@1s*Rdt5EC^>e5PIG!SZc-9Pd zxXtVU0+`g%R$`w(O>KF6+1OL21eI~s7p9HOyl&$(=*b(AgroZaJ}wy;t^#J7|9~(n z=!Do6$e=~&jJ>qSCXJ`Io#BGT!)22-Gl49TCZDmA^2D-dzz9FT?9J=xXVP&F(}3O} z0&H_FeK-Ajxkqeo;P?<7*gwD!?q`6V+|G+* z<;PB=VM-CE!FI{L49**psJF^x>J8SJl&1aBIz)rVY8usg=)EI#jKcF~Ok8z;7nzEy z4>GdAqSn6jOt8NekJYij=#6?Zj?E+&PWF5&dH&-v`5Q_#(|&roS45_#IQtrx1M*$G zJhj-(k^|qaBmOdn6}6OatLgDtel3WRqu5AVnfH#A+VQV~l3K`cMsY@}+d6UKLxTa2 zu-edVNTj6SXrV0T^Y+^q6ZT$~P~4v@8h`Lu|A>6G@rxIGa_AST{XiqJJ-SvixlH4J z%_456$hcgFu2#!~GGWavkWA)HI$(PK94mw(9|YsWf1rAA5fVuM+K#p&iw}Nbi6g1H zkCcll6nBR}m?`i#dG>&5Rwj(a;V+a0J=RMm2G^e}le^tpiPA9B+H4om!2}}9Un6?a$)X|ejg+70UUb-uTQn?#9ZLzWM z>Ns&bsU!EbUY2}ZX$P9GO{^*=p)Zf2-ftb+=auf2xTGVv?z|voIiRxR^hpQ zU}6k9F@{4ObV!9rSuJ-Y?7>Khe`Q=fYQEZz8y)_7P~H^eKDFh{7E|270aF2^B=i#;->G)I&N8Y$Hz85kyx3FW)4l@U4^aF}Q{Iotwy zv5D10IC%&PeD(a%o5$xPHM~X=iLV5r^fMgks^9BV2mxAL00G3xlnbqD>AV{YC_tRIsGsU z#ji~V*mod|N<&#H<14?JkI^Ml^1tPJCvCmOY&g4eIRL)*ft5Oa(2#MwV#TfBCaNHV zdBQbSBZ$|%h7I`EVXrS-fQ2z#0MLa$tml9GWAh-rwL*93Qo)})TjtdsJ=1s67fu6f zC4~m!cdT$L)X7k#R3|SsX2>`pO!WG%wX}2ISE(pUzNIgAJNQh&;HTU**+Gg`-jIYL zY1onL7K{{odL*Wm!w+fKa#DId3LQ0UYPC*&zR&f#g^A_GUT(=!mrX*XJmcIQ<*xvi zv z2kB#v@wVeI3Bj_&LPwBFdw?ZjY@#hPAf9My@6EAWIbHHRUOcWykARyQ1TibbhWmE0 z+_2xK$r6)R1n@MsC!72=;1hh;k^9q!rPY$l*3n}p);f4DnkF@UpX~VX4>^$UsAM4p zDo8-rM=Xh|-&`VZq^ae7YE#o+l@}t3|q-^|3x|##m=oHq3V=n=ijl<${(H-mbac=k=572Knw_QgpqN zYfPHldlf8o0!W4f4;}#!jxVYfW-n&Abf$SfBQ^CWB$!=9R^=N`g$`d3Vnz7ghlpua z#OL*}_;YR_+3BM9g43XN^ z^(%+>=zH#iUXgQ=_)pa&JsQ-Wk5UkcElAXt9b4u0GCn6dqjHa_GMx75P%4 zs8Y0+b>f}n{L(ysD9;eExRO?hYB3mkiD^usHb~b?tRX6RSiIogyVI-ATP|c}mUjff z5ce5FdgZK?;!pW2UzP8^p1 zu17rZ>Je1o;^X`uZGx@EXfc1vV-w=vP>&BK!DDXh!e4&WZpD-Ft8CfbBz4^nT;iDo z$}~au&HBZg#5^D&E!GC^@BbERIupI-O+uJqBBIZ$msR@Y`DVrZ%FQf)POAC9I5K9u z?ekx=+vBWhQKju=cA+5QV0wfm(x;Pc9QeLW{{eV4ETZ)S=c!!oN@urVMz|~WYDZ+sx>&)u9{4~1DgQk_M&zc zC~Dk$;4*;Xdl1vx_tR0~TBZ3QEqBqN(C`2}t6ln=tIg%#1FRAan83II3izIZe?Z`a zQ7Yq2tvqQB+mXJMWcW&-t0fVqE6DQX&>bk9c{Kq-Vb6I9e-%AEvms!suHhu8^^imNd!2B0JZR8o zV_^@Qa4iO}?z>7WMU76LUh*w!FvT?_=-L1e+d-8XmBSAr|MH6_f)UTd)wF= z^TQifd*U*(r$zsxE14+q9{FR*s-LsZ=kIXg76V`k+4tKlT7yC~nJwXmsZln{%7iI? zgqLmiCHMJL{w0L*LePbG9VcDqrl|*;_3GgbU^)aHMkk_ZaMrA&Rh!xVGJEw!N-Ay( zJ0Wfhst$%!y|jzOiXfW?0I;GtO9M7y8yvY(0_gvLqBBU7eoZg96|VF-hVOlw+t$`u zh;aYUR&ZFZ0A}ru8v{GM#(>}WVF;%V?)i+0p-X*hILJElmd~1 z1TCH0%b%L2&H}MxYq{QRytM|fP=qRg)w`SC;Llxr-2!=leX=f!aZIjV9Y_2no1~X{ zn}4RnMJZm=;MysTA#LgwiqGtdJqBqr4Xy~B(I`9?FDc>KwI~mw_N@n$zUyEiRifaJ z28)b6upxO$I) zgr1Q-`d94xmey1B%i3WwH6>;@VGYo`v<#G(yGCkkca!!vVo ztbX<8^>d;RMQ)n!!#J}~-^AL4!G*fXKPo(ES7L1fbTG!n@?t%he&wgFnUBDJDnF&! ze%1YyH1Wm7itj_{s;meas8F4O9|IknO6ajg?+yOib#KDxpU`h#2#ZqqcM8z*zod3Z z+(g`JTW^Wt&MmQR7XJ=Ew((2Q<=w648#KT_hZU&Jog69A2~V=2MBgc~Xn<(I{LgrI zX?8d313$`hA|$aU-o>Wy+`WN2hIyXGXq8gLV%lqUwj>stkxix}zMfW=<^$+dC(CbN zSf9d*AxbD5VI&O{3+VKQ&iwbXhm=x^!r}v7+gv}o$=`5R;dmeAY@d(~peG>sM(aa9 zWey@eoGMgAjD+kigGS+pCpXVJbFbSt zGC_~yWE>wTUhp&r67u#>u2^or!6g0*{BiB3;x4{gQBKDqHT|{GLUvM09;6xW_w>xZ&^i zEJ7XGcKxlSK4YHC#%{esN#QBUi)=f3mdJ^?4vW{KjVgc(B{OvPEX0j*llsks(MNMjV@#JZ?Av6HXbPAQi?X)UANv^YMR?Kx1c zX5W*1iJNTziB{M-Z)XQ&#n!s6SavF*%UM0^*?O+p0SZ6?A3 z$poP{G9PCtnkpRc(od3~*s&>07doxY4k4d&9rv|3JS##lH#A}JOVNHudMlHzEFJ6p zM-IPC^bt{I#a&K>JBFK=@5A`}jd18>QG zmO(ZGK7Ku}*4^M+yzvKQZYL_yZQUz}owWacU#+4Vw61mUQpNfU`Kg@}-*_@xrCNF; z3R(bNbA^8JG63@}NHc_7 zGmy}s$b{$wRIAzO}8&+UQ&GHjSbu8x1fN-kOY02$+P_d{7)v~ zzuOMeqH-n*^Rgc7Npjtn{2R%cj3MaBi!&#l$r_LcVH3)+5$1LLoJ$VmKTXVHk@Hqb zKk`?nn9sY}wju*W%~jE77f}F^1Y$N808U;oiBUQ58T!xc}uRSYWT23faMbp zvTpUU<;f54_G3NlmLoG&tf0#!YwaQs=SC2lV1qINvj8a9 zA@A1IeIsM1$IL^;`56p|2F0cK4DTDFcTx#9IzJXf_v*Ej8361Li|tKPgg7Q)$btr5 zykoLr@>_#OU09nv`M0BMHB(Ma_Yoj#sqK5x>o0@yj%yggR$?Ap{8p`LF|`i>N882o zeNpf-`AUDr_0BzOu-J5P~8EMn62Rs?IO z-#itfJD=Tt31CA=0YN9qSv2RdSVQWu7DMI)b-eHhl!_&aYwV`!9sQ}RF1BD3C2@GP zt?&S9fzCXTe~ey?6vLZ6aca;c8E1MCa4JGO#Pr#TIHXw$Z@UVs4-~TM7^}PHB_K7| z7u|mE+A&2#Zetq*ubvoFU4Bwt5%&mW>14zH*zC_`#44a?Y-%y&(WC9@@ok->AA*iO z!5h6T6GS*V@|J|Co7d>{ZGygzdnZGz{4&laoNV7eE?We5-qFcv~~M$XHX4T=VAg1 zVfOZ-l=L}P;C62#y2N%qONFpFH!w*jodaXUVe$syJezgrLWOfxLDW@6a+@}E$T_Ko zMM=J)A3=m+0@N-xLxhTXG~`*~jzt4)4zFt(q*yCS{LX&s+jPA*yWOjY^P<`>!F3wg zxNj5IbM=)^ki7O}*3ePKY0|%Uk67NE-5y|I3T%ddUvWVgA6@17URhm~ z*EP;|*~xiB>XcYI%6?(g3JVI%l*<%AkG|TrFPZMU1(vv1Ey1B7Anr)1bE%eg^LaF;gIS?bN?-HI8fhr@_i8RqHH$-nx-k|KcBAkbK$wI8e(66BNeJ1T4RP^6)X79_Btj9n&t}?PuiyV}UHFLd zml8E>3h@MUq3FUGpDXmY^?~|A?wepeQQF`wK-(~KgBmkG=KE4!pw;X(q^kX$fu4!OZZMf&*`g=K!s<^+24e^vS)6 z%JgV`y&~p!!SU_4M3^QNED}M1gpk{_lIdp+m_KO_@9p`@lq`|R=VKyENzBJEJZc?+ zL(tdd2#c1dS!f64k^)3dNUEtB#Fm$EjVwox8;}TZY$1-p>dqZ z$(V+3Hd%dFf~bMgzXClo8z&>9q|Iz7VH|M3;xXTgnegIO86+#T9y$FkzEdqSt5nmR{v^V!WP!3LBJAB4_#QfQ+K zd-5J6L?RdjR$w2C(oE{aFi9?&6e4$LKOejR$*>kyK3|`9HLzV=S@r%aw&}#|FZU1A{b++5_?596Uewh=P-rKS!ebMfW2ElMQS)#pbyxeSwr>7WOD2dBSoaZ`nMc$ja zmw+HfH|Z^OipbLWCPZvEXYAF#3z&sHfT?jh1hY$-zQYZIa4klc^gx!chm57Lap+C6 ztX^}sjQbloUQRP~Kw3AVj<|$#e!`c}_FXXSb21zXqzkmG24kTH?M}YOBUOi@*T_Ee z$U?GEZv(C^eA&cqszhxm2flp>`mCpm?oNFF7e-+~USY0XgtmB+C$Hq!OUr1!H>n1m zYq+@aICx1T&Ms0XWaLaMcZ&h6)3Sc9EVp+Fh1yV>bLj4EZJ)*@DJ&OHDj~Y;e%wg_uML}Tr3q|#E)~-UqMGI5zs>T=Ec;^ zlXD`2gHi37k{Xl9ztMJayxt#{Tz*utzl;|yVRlzt->DE3$XJ2z^#iLKc|L?i8&(2+ zZ4^lI%lCe}H)H452S1UyiWN1_m+6snE^l_8aRuS*-oT0xuWz#jo#ff=JB8i@-q`m%#t&&ON- zbO=H0kvzpZ{)Zi~L-#{DF-{@}8@8B6J{`1HkbEEFS58lAR@eBtIuB-h=*QTD%|TzI zE`x7`d@#n7DDy&}$`3!D91E;IDjp6FPL|vvt$!TiLNBg3M36*2!gGpb)L}62b9)U>`wUF;PAqPaA6eIhC1x@D#sukP_Z-tPx!RCG?4b8+#uTub zD5Yo8VkY^{9)4&YM6}0sX#p^ac4Dyqm&-Z)@_!%Px0UROwc0JlYUnABuyjCoJ_ArF z2h94P;}#6l(B%fRT}J0<$v#!Ri^{`Y3CZQ=&>^;5k+y8|uk9wK8~eG`3k^BK;Cl17 zMy6{j6bzeOx^)FxzKQn%zn@S*JSXH%7|V?a#6SiOTPG@A&g9nH9OR#iJ0uI2eVz*m z`bN6!qJ}Re0kP`5^rpq;CT7S_Wf{g5Qqop z@ockT_(peA8#47+zZ4|a13NPxQ=i}4&Y^DTro|7ai0|Q1#6L4nxE2i@QN~UKRR-7Q zl{Bh8Ej{3)x(PjPEl~VWU=n%(X)9SHKhz{Kc7CTxw^S+(&a3^!30RHTQx)UhQ!)*L zR$~{pVJuLKhv(qnJQ83XUGs<30Ka`s>|u+a-zyUwa;wv4l095sNQAZR?xrnH4dsaf zmuz9T3{WF^>3M;>e+jtY*qaxq#pjqO$qU5Z?EShr5sCe`Q-le;Up7+)T?8GkmRQqO zAyEos04MDk)(ItNqKN^PJTd2g>wlN~s|^`gJvw!^`mh1#;;I!jX*!anA;_IS1kwcE zO=1Eeu%c-1x{`lUdaZn;itY?Xr}v8wUNM!gJNNp@Xu)%=lV7_sC?Aw3>r=E~P{syp!9;ogM#DSWNwvNCcX7!42{yI-LuOSq<@)OKuZs8e4VrI69j42H((VxhGi!fJ zvcDD}0I>joEJNhEXX`(&K)+c<|FSZ#Xq+jkCGnP_iDa30HV#+s1!j3&btMV1_lvPP zPktH&OoCSv58Tw8j%gHA&9rU`yo zI2Ucio7#T25xf?PiH}xf;wjlA;ij=a+v$+Jz5ec|*bS}OR>7iAZL&q?+zk3yFG8<@tyF_&X8Kb-JoSKDkxF87(B zI{G`Wi+n*x`jGKO&9x+gv%U3hwFBeT@XbPimh!;S)>W<-^l)pZK)`v++baHV1!TqV zPF*N;^FnwP=+KrNPL9Hg93&J-&o?RUrAN)T(zOzTN75M5+7w_(Ka zbY)Ctg*iVOF|%wTtN3{Mjija`Gd?#xGe~k6#7u55)5!}bHbl1v2sbPW(rLm!R`QQU zbJC9(;VAG6v6b#nME}jZaHE39{{un|4e)Wm>+`5KrI*r}5W`0|C==L>D#M>O>Co3+ zvn?-1%9+7Eq{Q12ga3eVRQ)P$6z4p&IVOz0s5g4~t&T{*yp!E}LfGC#x3F!YWex(C za`ESYd0oUpCue&9O5Auy`P*f&kIA+RhN>>k3~uiHo;)227tera!eRqBRW=1)u^8Sq za3n)Q^jaTr$SKc%z9P?X|C{*uZ(e#(`-U5RsxqUHk&}_<6XypS0U+bvQ}Oq`l1RCKlpAW0BjG79&g)e zfm}yD{x5nW$x7Wf4iTX@o=7nG*O@~u**wR*pwsRLE_mJP@E1zLcjU^1l7Kz!o_EK1 zYNNbp9k%dV9iaA9hu%0NnZUO#r=3?eg>PrglQ0WI+a=)$RVYRsnOl5S zoKf7jyZ*sOI9$F8CDxPfCB=Ceb;DJqcs7~fdlv;h5<<5=653LmwShF)sGA+l$Fa zJ&Z5x={G%=_gDq7>AXkws6ae~IQmcQif4!htidxebhqBeaHX%T$glAkuDb?44$YOR zpp$C#5~Aq(DMV;=Mci>v{ODJ#Yr>10N+h5cbMSOGSNx?y&Y>Lx>Zz0)*LLI~NO zbvtC1ine&Mh|hYj-E3f^P`9kx+dG}?Xh?*BkcSyZ;FFa>nK!geF3Y87O9gy}WGdes znMpjmtD8N$66m}b$-_M%;eg}sjaH$nMAkc zz7iYWm2H=F00TVcBDfaYw(YOd)5%oRiBX*$_B1gvdj9HJmH;OYl7M`OY%Rd^GO*Xl zWE&PuR#$QZLyw22ze5)&es@f=JChJ7<@kFR(&pL&V$N+4n_=NWRAYvQ0txOO!Atr! z_|bd)!{A~#^#RIJQ zt};h8P2pVaN;{$sFJIu6J8ys6i*L|vjLh(~%la*y9(H5&&0Zov6pLydGgj@Lq|_?f zyeV-@8|1uW`(pSjAt>N6mKgQXyADqG=5AJ7at*4x4 z6$dK-1^v_X$c;628wn2eebzF+L+9Jjn_^!w*f;*^!uD?G-5)o(Al~Sksd)g>b6`Q; zPJrP=y?SPfZPIT{TcG_>?=`ii{E%>RErI;>o}1#D@6K%@y6Hl%VMc5SGdZxXaz{By z(O#@iDWd5dOa9~7`tMf+PEhybbI=y!P9QKH{>z_782I}p@RxprK2J(5Pl1zJjzU7G z%#9jW24k#o$No!GA;?p?X4%yE$T9(Mu&MLrm zMpo4pQ#oF~^|@HD?bB84DS7kzIsFqlthyo~4*-)DLP7Q0zISR@m6YWnJrsHmeDtIl zPfvpW0pTBalI;7YMTxhFSCj6}YLPgK58zp`dsTDE#4->{PJo!Lw^kf(we`GD6=V?n z0H7%zOx8(d0T1oz>ITp> ziL;;ssvZKYe>gsG{dhr=4B zba2=|*|CuXX;u}_woIhRnhbQ(MfB$KCk$*d9d6a8n0CZtZk`pr_;%R-)4tPN9AM{548%eMc{Ob%1gA(?fY1v0!uxaxeo03zN1>kTv_J3G6)bLjS~ESE}`J z*uVU>V^aI+4PMSzKG?NeS;vqB0%$;Bv$pP1(0-=hF#`)JWOdxTtIAE~6xo9d7`zoz zs<@t-_`lT-w~_hbdt04_FjvM=>ehxC>8B(Wm3W{Kay*JTeeIPas{4LC{&eWGfld-^ zI#LTli#6w4nb@NFupvsR!g0I5qnpSOP(%?zgva>T{o>(XH!El0i30$Hls>NxQ^5NJ z3+;S{2`~M6P?JD#0R6f03u~J!f$N1D!g=mvO}}R5Vsc;A=j4!`0!$({axGuO@egQI z91Z?$B-&yFtm7pxGH#aV&kLjY5}%s#Uw@u=u*g^o0}rrD>5J_LXdH?v_rR;Ig?27Nzl zAp^+|{%&HvHsT}fQ>)eLqg>u;W6Q~|4hkN^t@Nya?FRFD@W>Hf5~E-T3(XZ<*z7lF zL+`j9P>KJwjyC#2nP>PmM?dP=HDzs4`#m}fxsh7&!S^DgV94GN+04~6yTY49NncFD z?Bmcw-*_=9T{AM_KJF_>?cRynHH()S%p<>H!ce_50}p1tG5%U6eokp)#x&2RT=nsC zrH?bz^k2lTUEW7locY(L=*@_2ZDr2Sd$~r=j3NiQ(5HF|?I8I-N20Haj-Uyt&ep$M z$>LB>JbTKR``LyUbkN$jwy%c!el3L#b0+!_i0#T#-{u66V);!H`pv=U9aoF)Yh<#K zZQc*(0a`;FJkNhm=a>1iDmPEPA}U_1C*VH1x^JERT!;W5?hb0^A`8!~(}hRk##;@% z_HbiSt-Uz(vY}e4fKMh<^|IfV{ssU~+@Otod1zLsS*+zY)RkPtiF=!v?_WN1ZV|CT zhCYe>1E&3u>9FFES^uifokKRu7%*O7tWa&Qe^3TmD*Wo@@!H+LzaU)8cq)*~bi{5rmhRMl z22^TEgiLprO&i^@3Dd=!G~N zSWcV%AzG1p8Y7VWuH z>l?L8G%}jtW2$aG%Hm169Wr}j4$)5rtkTf1kQ(1FNX3pZM?_}YlUWQd1Y zC*&kkb^kikP%B?YZ6KAYHswS$1HlvA!2|sW0tP+F>OurAS_>J`CsQg$PVm8X#r(xr zM&yR(?uu_&eZ_#%F&)E6<{yX0ySlY+D5XdZyUnQp0BI3+^>xizLnW!1z_IMI;SVDm z5^;V!$B=;2Jcr-=1qHiH=se1RaRs~^!}5_ThdaiEqm<6S#ze(UM)ZFKlBBCNcM@@U zlc4}%4hbQH3#rE_qO0;~Gv1TE7W|;#Obd$>%7(bWw}Z{vb%#joNgh**;^@D52N?U2D?tiU zhpc|c`k@t&-u-P~=MeAnhdg~_zMHC@Dv3`|i9G*d!qQ~NQf}C7@gM+vBOLMpK~<<) zA~uLuyStmID24Miu`VfBc@Ot{wQ@n8NJG^VeZOq-1bI3vIm)I;JV1Pgb1rQyg(?{{ z%IbTREL??iED{==G~kv7t{dtZm*_LRqpU~oKua8Q4Ob#^B(fxuQO`-m{{aEMFUqr)VYfU)Q0s9A%hD{{QAqJtpXofcprpYom%D$NH>n!RbR0j?Z-}Sr-Xv)!LN831 z2;uEx?4tmM$WQgjBk@^9iFJuG_m-Hq+@Ng*(b}7?MQ(J!Wz0E=6S!kvTROqq538vQ z-y8qr7#x$F`xYkf52(WVMarc4eb0)r1Kn<$_aWqLp*jUI!Dq*%*8(?0^MBOms}N6< zMmgy`LVS=>QBwba44I?L6OWf;i zF4p+3e%Z-GV-qIHD#Wtd5|QQWQPSO9vljkb-}9=@Xwxx)c)B44Qdwfm;~)IwO!gEG zuHBkZpKCQ4z_sj}>8NY3F`Ben4*#Xy86QP#<*H+b(3h3g!L zCAk&3T%b#QC1Xd>h{qjc77yXxDj4$=*L-;VprAUWl|Gpv-7Qb$Q2mt}p=@X-2Jnow zz%qO}7^zsoT1w>dY%)%YUQ)1w&nFD6<-49r9+}^&KG1gT8Ib#N>6O-Wk@D6;Ih}Tq zaC(&Ko3)2)xB)>3p(NX4CYE!nsZSw7dVVufmadRg_~L?-q@wQSft3LBH%*q*02>z2 z;8V$Jy@F&%fsppLp|1OP3^&@DGF=QGTsPMH+bEGN$j?IW%z5;>y+{+Kx_@@4MN>iF zIb7#@ZV7$dB$sDU7l!ky#_0G3;ng1d*t*CtaNGK~>^ZyU&if5nkjYYE__Y&WU>Z|d zOYj8DIR=t7mi|2AvN3ZHP9!74cQ@;xc9&TL>=ybxx|T<`CX&7!$TQWVQN(g)obiYC zvl(ACij4FTn<8Vn9r}?5pe<`dI{-kPO9YS&im?{`(y*2DaaIl6hKPww1;L}KA%?a1 zidFr{K1y;#=J9^X#C61DfWcd2$BqP4(;&UZjZIZ>-=V|wPR?x8%@H8y8yE$Vux98Y0t!|K!oXh2LFk15ks|m#@B?4Tw%P>*l5Q>y)$gutks%avJzcr=&t!>KW1PKj~>AHZf%jEVk3BY~a{tab<&@SD! z3QF$^u~~?}ZG_OXTRam^34#!Ct^g7Gr(akS;L||%!CYX5cM73tMO#?17OP1z+5*XE z>0wc#XFDZ>4%I6x$832=G*~YHvo8|0#iz~i{xgUx04CvV&FuCpAu`J8isvMp=zRbglWX+$_X`HuK;!_ghG%onQhMxZ>E8m zcY9JN=Clen3PI(iq%Yy`z46y~nX*F34)<=2Qk)f*uRG_@RjKDPmqVldQY#KCMSp8J zief2OR@P}H3*wYHIAR}{#e;Bz?!(jS02u&^#XmzB{6b`8+}eb7qN>2u0B0^>`!Fwk z>Vgk3U2N0U)T|6Hx|B2%L6!uc!zc$(N4zhzwDpL&X93xlBwfLWAvFR@?O$+k6I(8; zaj+v8^6nK_Y#@>nySr5*6gFn5En~#D$TuTtwy(?v|IE@IW~oEHjYsikKvndiY5$a| zTJ7Mvez%RnD|lIKLmO3mCOBJOVZM_AKyTfq1G~aLHLA{1KbYK~`G%rIB|KegSgt0G zS>)t~W9&T~uAso@RrPT|8qo5m(`|}B9emrK!JeT~So|zpkB}|FA$R7-k6s~;!3`Mz z(bUF>XEAJ9`8xZgfZEDxFES7~#VH4s*ANnZ;ly5^mS(t{oR$59q(dbOhx0Dh{Z_ff zzFUZL^HiSE?D+R6k5QGK`X5DjQ4i|w>pcm6q2XV)k@gA0gshl+9ozH-!h&R21qVJXOx5N^y|AmygkYt-9rIl|V!ZKpEN}^wc`8}dw!fr@N9)S!*Kf7YiSL!9J#@K;6HDTOYDpjfqBM|E02wuo4eHr}+)u{pPeqeo5~ZK) zj7{`|m0ivJsZG7);a#_%?r1WXZ3oh37uka9VZc;~?Rb zdeUF_$Wq5W^PG`y&%ZB~*&?o!1Sx+f`i9}nQlYPoXQRrT>dRf!k=!t9!>?MDN|OJn4ZCMj|nIB{=) zc;1ULgXJ_`Da09QE%VHxXTYuy(674ikH*mskwOs zgg7jZnI4Sf?QPVb^0f9gdB<9xx)$!d%h*--+?e1a;4zqmg|w6F-hK|iKgeADy%<0j zb3|F=t?@IHk0BxO5z8xo5a^QT@K;`C1yNcUl`sBY+TSnv=LSu|B-I*F^ zQYUqB8n{B7i5M^tXi?)9&leF&0LF5E?(MS32IY+#;j+kjnkZuFDhVGM-i4p6KkKyb30?&q>-Z0a^; zF4zOgjMk@5sEZ=wkBuZA@qc35?(l_$%RbA;N+{K#C&Q0Ahl-aTX;^NYI_eEXuCv?9 zCj0O-eJkGC*eXctF(;_L8&kl&(JC9MIFM(2-jXvqdf~Izq;56$DQaHLH|Gnb?_%eF zqSb)h7?>1p(YHZ9!#;%&D(Nd;Qp!o}Z8PL8l^bQAwSxGWJB&U!^}y!LfM?xG*E_%T}i)dKF-b z+VCFTK5IWiL(!*ey%(1h6*Vuun$hDM=si^eDv5)~FZh}d5tr`Q{0RKExrtKVuq3n3 zHSsbrkw^iZ!1;<`#eYE7pw9VYFJHCv5_{MEO#ce6Mhf*^u7}^^MHA>(%9=s`{A$t8 z+Qv4E46FMw?NpydG=WY84cb|sakVnPQ$YrIOx6jl^B?TkwEpFfKOL&0L6_Q)(QVBbZeaJZD0A}^$XFNiCR1o zYD+r=iHM8z9#Dt$0K8ZPH~K`qeY*YryG&U_H`y^IpDsinPQvH@#AbTaAOc*PbzPMd zV$N*{VZiVT^%Y%Y7ZPe3=!{LUXvtLh)<4D-=1rNb-c}SJ;EhKytfMG39=auT#DoOG zaa}tT=5;_G-6-V-=kXin$2X%AiXeK)?kyY(=V@afRUs=X{*{O^fMQCh$`PK!QhY65M>ioWwVT z1=$C1B&#(%8);Q$ggtdOC2>8mcww22i>b#hrq(Pk=m8EjNwtB3pT-J4X|ASKoY z=V)%8^(DTgznn;k!@5Ga6$FF#4~X(>!T{q?WdHZI7uOjE1a8X)u)Oiapu^iYLDXoY z_R;>X8oS8$(GLig?I`@Ll9#hf%LjzVjaB`Wx=8@mmVrZT0^i-@%P0M^nT})i+PDgY zX#mUJauVtH8;zOlz@~e4|9~_m&#HZ}>R%9gQy$RaI{|D6Y2cg8Z4V*GvKn>JD-eoL z2elgY7ee0ys1T~YEEBKL3k&Hq!5*Pw1~wnw_-~O@VBw06HxizEW`AoPojN^)5upUG zz2FyD$|E{)*1h`DJkEOhw(Wtfi@uaCX4TA+Z(3cd^U zsEl7@&i-vW-uh&+EWtIu{X*szret8;(t_#tjc`odIFyMj;CHh15IVe<{Mdu@VD#Fe z@vW&*x#QV3yl2q0MPuUeI*o9a-$%=|p`lIkK&!5Z4KR9sB7HlO9Yb3pIwR{{#vL?7 z#ZmS}i5;&T-!aelV)G;Tfk$;{CvAFftK8w`l(r}Lbh1l+pGM?IL=egQ`@UbPcl97H zue7XoyJ7&0jKT*PEi`=^p@2!vO-FX9;YDj{1=l|37T2no*--EEoItxll+42bmyH() z7BsUtHMGXxQ{dFhbgWFD(f(f5LsqY{f_UF;Nrvu=$9(Qy-}(6004bRNkN(uX|62;` z|IwuSpZ>f5T{FuP+C}_l*prAXj&W^exW8ngY?x@jC-T<;{~UrCsVOT|^5aRi-2Ajb z3hZ&d(#n_1K^<+7H}!w~-e>=t$FBbe9_Rn`$NfL~{gMCkzu0^4peDbzT{H@cih%S^ zP(Ty}q)UyJDk8lJQ4uLIp!5=mh|-I60Rd?OQX(}{BfU!p3B7knsDTvr^L}T}+4Jq$ zbLO4-erL~~v-#rzW=MIma;>%Q`?{}nUqhz=`rr8r`rrND7*2-&VE~n=P8Xhl-jKtH z5)`2m(C*=K?x8fLfV=*%>v*rI`UVvfpe8m;+<-U?kfIL@s8L;ITf!}Cw zw+~jQ!Ys(Ip+Ct5+B?c8Ao)!&MxChITh)gklB+#V-}iK!PjPiRk51Q(({=K6UpU== zPvec#`06yCJdK}E^M%v==rj*K&AU%|hErbUlt(({%}#m3Q=agYCp_f||8bshZ7W4( zvnS4FjSchi*PE>%&sfKcR7+O$Y7FzCb&o**DhB^oF67C`KU~H+EhPUZpRE7g>v;dw z`(rp6Jq6HzbrAngem=uLZW349)QYtXtN>c8*e8Frax0&9oJvV@sT6wA`Ptils!sJ6 z!xi8l_WmrGhy*%~Uwh9$Fq%3C^!B%{<+{!gDI#Shx*fy0ntvr3z~k4ttOU+h!@M6*b2*$`63%-J>6on^!?Lf^i%YmqVL~F-#^WvpQ7&+ zeg8iC{%HdK6n&@Y`}fh;_YaqUPSJOYzJDKm|Fkjt|3A=&5+T&#eVV{D%CdY_D8bRu z#9guPDc`YI6Lz20#%|rCwg%dJ^wHPO@Y?mqYu>nLS(?Q*8NF6+(r#RBvKfKDboIxy zXV?RR0ZhJ!?o-A4QHjh4{f;)t8Z+XM)i2}v*cD_YG{8+s0W&L%+iq65`8`5BtEvQk z9slAMmGX6VyDn++#r`MR2h?ht@Gg#rM4B%GV!Ll9 zQ>&IadfqBp&83bUprHh7aZ7Rgek&vnJ*OK~FX74jm=H2+m?~2Q{d1c(jKlFEZ(?g(4B%N8O$Y~l1->Mp8HetA8HjgICHHfI#BOKKACIX|xJHZnv z>fk97lP_Xio+!Ib9vUYlX{Es1iZT9svMeSkh*$V01vAKx_0ssXz^4w1d{MqWZ(doh zE?fNGxxU!m-p{kuiaXqxoiBpjtxtbEB=#mcqpBi4 zBUw&bO)BQ<Z~vw2;8xkNc(i3USH2r_uER|JfgW2!ueEp5h_A3m}dyDmqwVU=o0jw z2hE~B33|#}I+)f@Z)y*>!r#!}--x1^>wKX1v$~W}tIFiYl3lK60tbk6`s1sODIUI2 z1$mjFi~KiGBDl+dtCkJkBz$mAr9O$?pLdOcz9LK^P5ZIjyfepVZf?ahyH4|tgH{FR zBRL)77P%{iS+>tJLyrn(6I&pxz4(+iy;1CZHuPrkDwj;m zZKJ1}f-@k+7`rn=Cf(qR6j8urmAwhYO)^REhY_M-uY~NfjM>H_Qu=W9H_K=GnjGV7QF~2CneJn8O!3ysNxkAHNhs6(w|Hd^176eF{i`aV#N(J zu`Avz%>FrKyrKBUB*g67PAGc^jr&YpnbqO5U!fvQi~9PzP@Mj2mxxr~*!I}h8OwPZv0&pOf_tfiVS3)h(>Mf_7@SS|xS9rt-%=Wu`G zj<{FSr(((4`Sd0LhD5)-&kVf*%B*)Gl;P**8?A)O2o|`}`$$gG{h_(tL0wI1xdY=# z)j?kc>PLLu5>tMl)N7dCMj)3h}y* z%L}$>kT3hM0XPzztlhM>QP)OWuP2MP__5k!_{x1YwRH(~g)8+}2jd0g*sFcZD?Q-X zb-##T6>L5)xB1uC1^aUYn5xP12ie1_jO{Ndzsqrjiq&Vp+x5dj(=pCRi|+1iR{QBg z7I9e@g*#Dh6`1e3r5^4+;0Jn-5JyBqgeG315&VAY2CzUJO*R#jawHkSx>+FYy|aHA7f_mwsdkQL< zQcaCbd{=zu*LhKg0q^m;WRoMVYWh(f>9u3gc0W0UMF~NErUlQEz_hOTJKO7`kc z-qPtc`G>*JjT>mcGMNUvr$2LtrhN{lz8N;B?KZp*38|I{D9$-*P0C%d&uhA(BH)vf zWc1g6=*PT58%JT@bDoS%VOfs4l=}LR>lF7A$s9NLji};0lnTMt7BAP-^m=fvH6z!d zddQ%iY58%e#Yjqu%;YFJiuQ%5Mmv!osXr@dB#ruNxrWpFtL?={fNtU?n*6B0mfMsWY z2W&}cd~&R}`M~4tS8eL7s3cA5w^G?Wm*>ixZ3aH7{D_Hjul9kc7Hsk4%M_>fuMO!v zddqo^br~?xq6iXvW>eE5eC7mG2Q7yS%V94Z{l_;=dP}9olkVR8V7kl?3@PghYj(co zBh4b9(|IwANmqJlWlhmKR=8Qgt>^x{o)3fvcJNcSyH_%FiZf1~iCy@O-5nzy`o{XK zqIX|x)v~@%ZWw7e*PLU~d)5s6xclEPlNKupJZAIEoD&w@48B;;4y#rT%3bkRNyvmg zE%Ev8{_ADo8FeetUU4@c-H5Yhj*a^?TnSp0qljq3mYZ~dalsTUc<(7f46uIi!Vorn zXj(%2B+Us|IbeB zS}XhBB6kqeH&y#sw9B2wV`@tNNdJ)@$S$Vh|BosEAJg7~z)-xNjB0^KRC0aKdglfE z4m;>KevRyz>9t z!N2a}Kdv3rIbD39E)Stqg3rP}+EZWQ8z0z5&czka>LfF9UeH#_hu*_lG{C$uQ7X22 z5Wja*ZMAIJE;F?K^M8M_-4hTuNfUSYUY6mqeKPjRE&**2rdfLB+jDUt@}?B(hdg)C?P;MA@iKPo2c8JC_kJM_Z# zvQqq0X4NFBI`1RLIM^ShJPN%gq+z^2mBo)!c6?uTEVHy?QVwu|8#2ShS1%JNlD(oC{p`FKM8M-Noo1W8cfPU~3Af(KmfWj#f^_c$pj>RT7w~L?Z z`#tDt9LFx9X|D=UJJUF{iT`e6l+{gD)5$JQhu*gvFhHP74kR{d@C@dFT`Q~w!lVWoP4wa>>0!Sk$fSk|jCtzcBw){i*ZQPH{ zl%<%_0mxF@t8Y1us6B`x###eopFp6Sd5w!7{m9(N`Ri|Dp95XK7X+U2r>jMz3FA&q z7YB`h-L>k)qbW}?2hJxTWJ~(7Vv`+tupS>hQ5lz+A2qr`WAI z*LgvS)3K_%C}wgFWMRq=XoB;%>cSgs-dPHqoaBc6>3sW}=QjT#>*9?4b8@YizDYHa z7DMR1sg^D^OrFN+X8CbB9IArJiM66AGZB^6l$mwzFC%xg*n^&^KmC10L(t^|z0#-w zPP_FO)tvq@jTygH!*a!e>mdEy1b$rfmZ)G@%oQc2b9-IP+t1iP-h-5052X<#Z~^vV zI$_2@-^K$vq8v#<#2HcoS6`?|6OZ#vH5<3`@q0BCy6Dv1PtNqazCL|Xl^YU{kUv+^ zv$n?N_PwjZBdn{YI+FcP#5}ygH2$dM>np|HXes1rYzHhF1~THeM3^*}k*1v869xeeqR?B@fTI;_+Tun;|&I;L1-*kF(~ulaC2( z+Gl@rVC2FdaYVu(UiE8cRTTBaw3Vmyy_%uc@s2&B$ydI2q7QRUK=_SOU8~FUomd6) zpL)>S>&K8yfAN~Uj#(5VL6z?6)@wPviN990t8bniX^Y;<(Ej-QC5U>N$K)GA{3l`A zRxZ;|(xI9yhr1AJ&81S&e2#-{S9w}toIj%GUARl~M*auAAV_)GjtOSLZZ#X_>b;Nf zB_fa=IfU(1AOTtJ9I04uPPKc~Z}0KaxxSv-xOxfNIH|f_ z;0J@bS~z)lMlk6SbQAp){rWrr|DpP;o)UL`E^O~%7_knenoI(K@2z_#YZM)hA zOrsR1MP38P^=b&{5m9H-GqlTs5cO`hM(q5mAS~i~t7wS$rpHyu8#S-TZiNz6!{h6fCl@_ZrePBUBF~#-%c#E0%uip?o-O$$Wl#~g!P-!Z0?uG zBhNg|;;k8_DcM{8BnBM`%~G7p1A0`kLw|=e-Nfn=Elk@kNnT2vwx<4! zpml}=vaF4izz~Hzki;TaS={31z!wn41Wvp>kXzTY*@ev`FMIaSRFAmI#NEpqx4fIe zwbWjz|8zYD&m%2&7C)H(G>2<9R68X>Ie*hVbLtrG1JzFKV7*>FW`R=y;!yM^P0sqE zw{1(AMi(TWVpXI3ohbh~> z^(*5`V@3l}zv_^v=vgR8RTwtSijXW`x4Me1M5k+y?(2vMRj5C_ZKku>+RZzWD6oCy zuJAY3ags6KIAaF-iEt=^+c)<$zEW3+rz94bKLp%SyYtu*0rpqnPk<;t1v)uvX!q=&G%i=D5eZofz-WWLaia~c9gdSAx zDlr633Do1GnozW!H3k}UwWBfx+^aEHjD-@GsN);Y-@5;y4ODVxP1hWc!lGNu>yvQ( z$~3bIa-QjPVhgIggC!%7%7tf7-nE;4qt|Arc2C}O@`vs`^y34z!kTPgnGrOao8ksU z`c*^&n4g%_v?p?wx4^EF=7(y9U&i)=0eR)c7%hGCVBuHF~pjyB9j?}@)*V;DHJ@%bBbq<)klCTh>E~;W z@b%Me(_G5;W*{Il&#cXQX-w&_nwk;gRzu4>f=}-)mP;|^b6zg00n35r?mUPR z98i}?$Z{V$zXbB{@qIL#&bFc|hWnm64`*Ao8IaZ1*nW`|thdna-|z;PO|?ta_kls{ zXi7I2QsJ7{uZ?rjaDDrLYR;~mf1lbnp;p2i*W1kS0g2OvGJC2wS9aMJ+9!BaHY#~F z6UCgiqxc-=m0o@g*buGu6f(OnwP@h1clgZh2{HRv$-S<}QWYi)o5GqN@CwYCwCP5^ z^!1p@HrM?`VyK%fACdiay}EYjv7_E{MMbDaKmSDb&A0@|Z}b7$O-NRXh$s7;Y6Pxn zelaaY#!pmAJrjn#6T@v*{6c3N=0^QzlcihXeo@6ARyCJMp9Vh>axSnVlNp+@>V3pk|I~z#(eV5S4o5d)b|6tcW+a&(Fv$YNBRM!akPB$wNm-$e3ji) zt7RMG(Z#R%FAfXb0s~TVh0f_(dS!LjC{1l1TDWTzKk_qyc^4!>(L6{V%q-2&)D)5) z*+}oE!oAVnH-&^<^y@!AE!muQPq+M4>JNrQ|HCR&9)-7ssQ$g?Dxu6}R-qhv^?;6v zmatXdU**o^XyZDDc2|@B`g|WHO-3UZ0(wtCFCv(M7XGuSVpw3k1UWFy%Xr7aOC2v2 zcLH*aub~9BKuh6;$SblaFs1+a7dux}=)O;?(&OkrzuwGM)ItM`7qMncGnV6W=f$P^ zVN@9AdDWxz-%!E>+dD%Dfg*=v%QbLqY|dck1D`oPsND$X)|cw&mDI${en0A$nBYE> z4@KYXA-kI8LiCflbgrv8PMpR znzQocV(5r#vM>_*b(03=7(b|%{f_ag5OuQ7_xQ?@-f9PmM`cb+{`X|1?Jy+AKIXD# ztTw?6*Yrr23Fyvk>AyAm!CtvQlveN^x0O}9s!gzD;}5z&_nzKs^<1xkjz72?ObC$$ zUnJyYaxeB@t*H9B%i53K zNRt|bFO`Ss50!ryIlN(=Hf6VgsLF`eRS$ji%5jY6omB&15_uSQ6<-UXsi(7N!;Xey z$0SgW5|goy2i{B`6eg-kFDb_`5`P(7R`1r(>!l?sn_}%xK)fd)yF0gr1mQ)irJo_o z*&}|hg7EIwYi(ynL+jI^SG>;G&X*}mSY&7#bG8FGa^|r4zoEd^J-A2a@XEbFD0ZjLo0$B;UY+0LP#xS zev<0R`DMeOgK*oQLsu*AK1SK?=m({0hhAQ_631=KEk7QC zXV#!&iT&Lfi2@~{naDQ&(Lc_Jd*p%~wNPk4@`J1o9AIX(do+0h8x>hZIfN=94A*<$ zRYE`(J%HzW#y+;xd^4OwG^%~=wU|8K{i?wRdiy*T4Hb_`YD5ORdK%(~ea_aewbVmB zCzu#~s5RRlViL7zy;}WecwY&yB&i#53bBA)5d0Mvsi6^918xV1w7$}YfWJUg`aI{ta?#t~a~v|0 z8Wn!P#uOvvIvB6*3OZzT!~NQH93kwx;to{E&J0yE?K;tR3fJi$$sgh1_~6Az1Lkg12}_M_PHHAY4ki=B?J2AhTupP5q1~rlAJQ4r?P7 zRk0=>N7zY^-2oBFC+~nP;DZqvrK~WQRI4&G9pc9{Xfv{<%H#QA@Y%1y4DOt&vX4?d ziztO?Ag9pa4qkXpL^Xj!DQ5{yvtJMEI|%(a`%BRh<-Ja}-jJYNt>FFL>~ z3@VIxOipwq>ozkZo)ScVV45(&ccoLhZl8-M`fiIKkDe1Wfp|48L!@c=FD+!4N0{qn znC(>fXn(Kcni^fJ+-MKax{=qVE4|Jox{Mi{pFdxM*S$L;gW+1u&ms&qjP~Zh+@qQL z$eEJyX-qD}{6MXpcL5z7)(={e)i-S*!TT2xtaIRt*cF|da?w_Qr!<|T-I=5`SkS*X ziaioLWo@*w~=aY~NCm?|QDYZlH?OIjgx^&6kZtZKM33UYo zq~2gMkHzxYLzJb*{@G=@{P*!PpML7#J9)&7k!(JZ>U+Ovy}XU$c@dx1P__A8!8S z@D9X(nwg)_gv)9|G73Bl^fe#i&dX{yb)37d6#V<8>A85*%U|a?3nj4Zb7?4C)^Eu* zE0*#AJ^T}Np4lpwSWde&%i(CuIit7X;YLrDzTPJOYDb9^_|kC&6eWZf0W7gqK5704 z9~f9y8@9BA%F^q*WpYU_Z$on~w-!pUfK;Sbq#sXG%}k{qgwPoJdYC*@V|cv-51jGN zLcal8DI4VS80I=n=Jf7(=NwkBLCb&$dHR?X#YHZ#B!t25OhnC2nu1Bxp92VdFf?~) z?*6pR#$cGe($+R?eXw&{DS0^g;A>^yUP-|!JUhbEvW5KhIZ+o&dxkw4jZFH5M>{F3 zM#2^%Xy>BZdL#3NgH>rw?X8$`N@eQy1?#vT7oR-pmqjWS*%DlBY-;R1Z_rO^_`Oa* zEj=CvrNF}TZp`7SM&sOJqaWV~voiu0J;kmjrSQyKSNcZf_|DF5vOmF10cK@B>JcwW z2E{Te{jY!uSZ*+asKP<#y#B=99-35Vy{T}gV517|;aD{3^!?bqE&iU>=*aZDoxl>j z!940Wx^l!%!E9Ak5GNC(e(n!Chs0 z{LR@tZzy{IcM0F5Zwd6;N^;IY*$IexDfv*3Zkd6~>OrEy%g+{?OgzL)Ds#QuC)K$| zEy8~?H_LS4if^`^uD0AXH(s|!HcYemsUUp&WXQI&JY0|<8A1VVx~*nRysSu{(r0~Zq`kY1cPzwuOUH|5)2`lt z#5E*vWE(IiAJlJA-x1zlO}-#oD6IAUnyHP>jhdWECtKgcN%(^PJD0bWK`4YnJ)tX? zpdd_O&$Y*<2UEt*mYb)ovH2E|gnHTcYcV2*@b z@@1XTDw@f#$=P4qo*vBTT+I1Ue+TD5N~dX-AhNom$Xu`uZ_?UmJ(H*U-126|yrpzY z>)yQ=vqj=|lol_Q6es&jsXbIzUqrTr?mOGCZ^lg~3at8-tY%d5P3;qr(Z`}zoJ4hm z&S?D=#PuPB$83QQEQP3)s>-5W;qkF(c;czTHTj5A)(&V&v2=9HJ9DQEH=K*s5Zp~$ zeS}0*(6>8WH~CXD|GcZpT>nD*0w0|%Wdgb5sJKiZL~(f9U@-=E_+~SIt!x@7F|V}gQ9{XmF+7fpVy!(@4*M<7PiVu{|<~R;ZHoC=OB2 z?M0<`wB!xySE7Map3B=Hk{Ka&b~`j-nwp}7wZ~x1hYLrO*-COQUaJ^l`%9(FaJjHM zwl%w|0c-M&hwUIeWa>H|`APYvc+L!j4iY9iW)n&aV@-nhl@|pFmj1jd5RT~9{VpY) zj6-52{d)1%GvfK|UGKml%V@e2(BrK)3uZKPEGB5uQ$o=!@*`HZGI#FWuiEONVzyr0 z!Ht*l?C8TM7fs=FV6R}FnER0nuk@^9zUB?(KH1VXEf_1u9$inssC>|?3Dfoq3Z1Z@ zuIw^XMe|k6{Myda@5mO4U$^LJb(bCQ=8=E%i8jsKB%ee_sBpq3{w|nvADmVnep6g5 zGijh3jjl_`up58l;Jd?qgq*9lLoGtq1%}dV7~i`e^27v zM|~E^#L)tHk-q;u>Ct4LndE4Va%Mhr6dAKjH;nfGn&7xrgrY@+_Fl zpB6PXPtm4n!w@+(A$y^Us#lO5qm;h%{oY2%@jVs$5JCxfe+!%{m0L?@U-5u|>O}}) zb7HxndlJ0k*fCF3gZJ>Ccwg3J<+sWX9^=o{Vw5A9?Ea`dTlk=M{+zc*GlXjuFqWi6 zdG4A+R=ioijyhH~Aa81#j*@fVh!CTpa-JcOSwqSw7kj9|p*gsvM|tHiH(AFb+Ft% zIsqxa`xL+Mwu|%Wk@c=E2M>c*Ht3B1Zt3En2KX}h3u^@)?IXqQ+S#{zp`a6 zNr0f8*)k`==a6s$g4iVy~b&3UDk z$$U&GvQ&!HUYTrDYk%p3_thy4sv?i)Hy;7vuVegVP;v~L8kXhVZxz_;F=6}QWogAvLM(obR^}qNXH^cr>$F(4#xnl( z_3Bw;)}Q;&zQtw6CmXLNj3b{M%INEVEUthqxlJ=tWIQVnK0uiVHuF8m2}NkVajj-Z z9JOG#S9A?)y(8NneuNV6j{}IfD`Rb}L0&MTou@Ze$8lUA7Zt`!lXN{sOuYQydF_{? z;>Ulee$JZPU>U4Ll@9KQs@#W!@!hTlQp!TYvYB?EqfMl!n#MQ(sAmtWuu6`y2fVk8 z>}GQ}UQlnsDp4Mz{q7azteQ7e4Wq;e_wdk%Kw1DMXu1~ImyZ`{Cl$)lsji%HvG#p4 z{u&*3IXu6Cruy^Si~KIr^gwBBN&=7}Y5z`+uPZm^yHGVSTk2^vV$XIk*!#KLY|J!p z*8RtfTgOsu+pN^}Xrej7vA=xrY}eBY93@92_af`yy=xF&`A$`L6?|-u839P*g?Wj< z+BkXw0t8EYSdsPTt8L?ViWCHd7Q1JUEHgTjpG}334UAPAV5Z&T&C^KYK-gai#&th_uR54*n8QMeXk=&FvI<7%LSnzRmecwe=F( zS>Kr()@<-?mcu}IGR(uI#vYQ`Wif5_Cp+#<%nC-ppJ0h+zfULwUgQBFV=DD)C>jrm z=lFoXBlIc+-@3A3tk%X!!($QzgRoO>knZE_OJ*Qr>yHN`(4UrJI@ZmK)5#-@RyWQS ziM{Yo(EJ_+Q4qWaR2!H({W_21rg+HdwNTlZL?{Ey>N-*8xl1K&h@cVGWZBW^J0gd@ zTrzZHa3%@f9s_@Z)g~rY*N(F5*TyJ^d)aniHJ8KPbD^}l3?jn{PF>=rxyv3NQysn= zLOS<44&2oxQH1q_NCMbKIFxdO7u;G;{}GvMwQ4+QHf{go@7dYSu?4fD{@~rSjMs`S zKGXStHxBX47QiR9ZJcIQRzFu)nNu`gJE(3~{8{u?@%wA-TfbkZ8!L}yde(Q2>f_QX za-sY&*tO23n}&O@Jd;epd9r}~W5eVGbiE2kq|^co`alSbYw*)E!5_{-vVz6s{rRrr zxw_Y04dtWZP88cAqoWGq<3~hwWMebI!L|yQ``4lsb^^LUFqI$;#df8%6TPH1Z5WY- zJNIKwKps?~WFb^E#(w&USM@yd?|OnKnDa|HU3E;>m?hI%kzY#m^Co& z*D`LQKbrk7=I4vrkO0J#ZR$Zj596WxW*g!F#p4tXWuu4@qKx~Iwh_{g(Kw2~i&(^R zi0rhSHZ1H{u-UbrXtbLbqHM(Y`A3`*+W}BRQ>;4-qRQ~o z=hRUB_TF=;N_PzTU=X1~R3a(<9EfM*lu_dTE*UPW?QyAB)Yn}7rS7vddxNh=H(%ON zPY!5d#bn(n33EEmRpnlhn0W?lz)a7_G;w@SeHfm$(cIJCO(1K$=S9J|Mc%F5Z2eAL zXEaEg|7!5^oer=O!Kv9C5>^Yz^~`D-74`b=FoK`7cwEPK(@-kik%51Q;e16-=*>A# z;d_G4XA29Z3UfbPP`>gA5k_Pzvmmio<46xH68ur?#%%CmbF3)(l_;fM{O+-#(PB|h zyp>@NTSD^n)ML1tV=C!`aU4(457l}=tk|K@_`j&*8pG)U^Z%JZ=ZI=Pw+YN+hhda) z!fMa7B(GUr?-xsMGVbp>dSEv2cS|zM`mASfchdT&H9ezxOlI{@&nmriWw({VvD|8# z!MwSxs5k_KXiw=q{`z{n*?S|6euN*OF-OG~ORLd-Ys9z=$W|3e(InUp$a1+5oWuvD zYj~Q5sQ0VB^B6`L{M8TFE=}`4fA4u+-WZkF51xzAYQ3uzC1?v;!ra>zqj@l*#cTbf zvR;xrt;&+<G*%f54RXMh)$=F-DQ1Sbf=Nw~yHOdXM*ko#ZZS$s@0w=BaQX zXq+VLLo;I2YdZbBDP2%b3K!`r!6F9;G-C_D2h2;*I>;v*Vtt#Pk9IXxHc(WJKR&j{ z-1_mL*rfhlfK|xehlXdj{@immkvZr*)mq;mJoE2`Dx3ad|#2k2`{7z1kK zP$;wO<%2dp<5r_<4(r7pGHA>k>m0H?mz2`mj3KhiLdilgb)}&@xP9MLjX&cul=%x< zJ<_d|OJ?`-{d()E28-2RRO9LsnWKz+IEE;J^)`fa`1D4|8D%l>1{vS0uX_nL#gO0w zQ%YH|gUjkDcW*kmIZ1Y2G2G<;$sg|44n`W$scQ|&daCvmm^JxaP#9B&U0d*IIxAY8 zrpkc5U+BcCw6ZZcT9oeLOJ`*CBc?z73&2rCwft3;B3x@wWp~2hoPzf2#C^5R?b4Ji zQWC2)UX+#FUa}E+Wq6eh4eW;@OC3huPBnZza%nBS?(6>Z zT5bhUazkrt-_W1B(8_ja=-Q3FOSjL_N@j5qJq;XuwzqO8MWH$a_2H~`x!nmEf2nI~ zVLZ=8@<3<$&h#1NW!4&e`In?!bbfn$o}weshSZTi0X;FUIG|%4ec$49X>Z+}RHWps zl&qhAE3SrvYdJ^;!cK79ZsNOM8l^X|f9Eng+fGD>pyTa(l;@H68mO<(A#`UXm|^Lq z$cRF}iwLc{7~*Vw)y=3z@BN03QkV8Y3Glb^0pU9wd(VRF4>QXf=e-0(44(D*Dyc@O zM)--|Yb=V@HSCR{2qQbj5lknbpB|x*y|hcm1EHd~)P%8WU*Wg{KQT)79}i7;RW))N zWZ~z(;?a`GLBNYNtGIsopnw3*B4nB3Y{P2r*0YVcT7>W?(3#7XGyPz$w0repv4iKm z&4oA7e@*(067yD)#Y@VFR*h4{P6b_6!9@FgZvPh7p_YLHy+4JPg$Yrm+GU#nrGnO% z@`zEDCA`bChp=HBQnte}bQvDFz@*u-EX%by_CPvg^47!9Xm+FBgbRaoH)yCumL0J~ z?C^=2wqu5kI=p-vg^ExnZI{M_53F*TQ=u_U5GG#k z$vX#2QHy_YVc}ETnUd%jjm~ArK{R1I17SpXFz-Z#ps#^4X(a1x{weu!HyrDp{sKm; zDu;&7l@`MH@HYQ3ufRgz|Fu1bntnQ1lHtD zJ+%JBCIf!-6ogXa%mLf;Jj_SSI#$b7V@FAFq!?Yi=kCpl{9UzFJXi0m#6|$XX9u%8 z2*L##y)EuBo`4cYb?sT)@y}g|9cCs`=9>^(WRN`avMRG3_Izopr8iDBr||JaZFT%E zXR%q7bK&@zEfxb+F@)p@Mc6at_uC#9C-BEwr60&Q4(?mM%aar48N|yD8Co18`c`+l zr9b^vscWsm-}zFlTr#E8apV|7n(kp#D7Fx<{u=e4RR=imMi;91tH zXMbFuXtVh2_Xyh2+IQn!^&K-^YS-%+t-PF1t@;t1dIjeP?N5` zJms6xu`V;VEht80qcCo_MRJ`B9dpQce|(}Dk=K5CJST)bqA7f-R$FgWm>f@$^h7mN zu9sKE&N?+)1iNv%-MA+GJ*tp(XPI4;L+XO<8B@*j_kZ;!Mkj`@TxeL}x@mp$zP?_- zLQI*?2VWtHkhAw7L5jRV zjZp0UWq{h|B)DJL=sx^m+-C5Bak0e%?tCU9eprnZe|1N4h{322Vvh<+Q^LceKKilc zEQe3oyIW1$A8eCTbJfl$ZHZ^o@;$ko_bCkgq+&bq*fI6Tc#4Yth-f=^EKhssRe@ns zMuYM3aqRudgOXd4{EeA6jHv$7pMyhL15;cM;F?E7^j-zUTd{GvoSLEyn^YQytu8y) z6`CLRFM{cjc2R*4Hj?(c+1?;|6LYM&g-SE_qq|F6Zif29o%()}Yvs9q_lrI0dRZ62 zEQPh&IE#4+l8i)*)@N-uM=^T1(_GlqY{vXo@g|vwzbfi~qaUy^ z7T&(r#&!8$yUWHoO*4bm`>ATHO_L5i@;)fT#2F>lhx;$1PDHu(Lp zjMYnptt;tUwv}>jb3f}D?CNg-%!I88u&Y9|CkTEGdqe#Q>0GP4$W_;!Ij^lP z0qQufh1M2`)VBue=jr*0>I2MA;bymOxcch%AcB|TnZ?C& zqPB0-FaT8$n!XAN?BR?)whjEzZFZjb^``pYy&^XGn!2j!NY=AA8o>rvpJv5EpBURj zhGf~tYP)>@Yk}2P=#FC1xn7? zksPBzs*#5D3nmzXwQ=2Ot#XXze1#$z^8 z=O>XZQ>=Z(wMMv_+N=dyc>(G3PH!Klxkt598I*3nNSSsyQQhF3OL*KPDq%#>U#?bTH(%NP!?m(5>>UiMS;q?uJw0Nk&UYbZ7;R?_yf@vnT+r9-Lvm5DS$;{ zVZ_B zmI8w!HHJz1b-`_0zi4C9eOUp{n~&hjzzc;k>;s!_H6$LPJC}O``ou~!v7^X9Cp-=2 zdETuYC)&-9im4y76#eClJ-q9o^mlZ;+(eFnedB9!adtB7cw>X|&>+8aI%xsSRxjtN zK2vD^Bx^ocB5Oca;Z>l{eeCcSd}9p6KXK&s%B17ceKbFQs&@S;xg7I4MNGvBj)0xd zz4hw~cI=UC%fz2HTCV%~H7>m+Em#35nb@MtRI#l|E=pSJ#h)2fEtQ%G3b%RjP)!u~JM=TwJku3H$&x30dtl!gA$+o{n_z+Dx1bv7wQxB(g)0X!|GWzymV zq$z|l%nT(=A=J@m!wsfMZ6b@b%_eS&-NZq|_w2GNVJXcoa@V3;<%A|H1_BuALE;?w#)8%# zXt43d2d!OtXdjjPQ%ZS)vp_VIX+KW!(=CeRD7y zNr$kXi?Hph00&^o5X&vViGtvlFwwdvQ*w%q(YBDSy(Z#hlu%CL%Ckmb>eQ_RhvU3ioxKT=YLjAAIl8lH2)aK@Jjdv_pLZT!f9O3kn_EefN`N-Tlb%$LiSJQ*;3)|Xix4oT<#JQZv*ry|LHi1FC##Afb7%v*BL19MPG&rh17BM zSN7B#XJhVF5q}7`pMc8KNpVsBkOR3WvS30f#$G8b{S3*3pobqdE=?mgs$PjTt{6_6 zx}LhXKeRb=WBallEyqwklN^12_*o6s1NhZ5{>Gd%dBxS7>B41CCN}jLdTuv+bcOK>sMD!5@5o=`Eh(j@N%YeC_$)T<%&x@W zEFC;wychn%U@LQrOL028t{Cz6g^!cE)cV~5G{P@yuGIf_U4_C-?W*PCcDi!@T8z~$ zOUXzI+VmE%Qb8i@2R)DVvJ_>$ZHhWfPDPRv-mkShY87=^aQc5O!1=m7(s|sKG=#vg zSo0pB#W6<`b4*1(tJT^&|0=1bW21g!6C+jW*GfHIMCTxvJLv1Os>7?Hs}alm_sGjn z`=bsE{y=Peh^VmS-Y|&$q6L|iH%Dw)`>YVnr(d{ZS%uI_S5^8-Cr6%Lm1p~>;bOnL1~xzNOT#+ z?=~AH6$Cf^_>uNmdGG`0-5RIsg>xB)+DNNll!8+gyqo!+)cV!}mAd#O1l?+jChhh% z?f0c`1KXx*c0fee<}1&h=2)0Mxr`4}u;`RLTqN@ZJAFA?0QISPnS0j#NG~J?|Kp$H zZKuHhGPl>Z>uO_}Ig5;)_geRefViM#RMXm+;YyOTx?iJcS!R`{(I)q!yZR`?_&;#q zq~XHPwvTK!+EFr?cUZ^`nYaD01dd0=xO3}O)5#`SFl;Ww9GXKrH@zm<_>`a1s?MUd zvaVfK#^#w;-S1|Il+HEMhdk1(0V7%UH;BBi9hReS&H7Mwc)2IKtF&X0hQp}f;axL? z!WOtnJ2mpr86paS$$TP&)IbMHT+9zXzW-}x_ffo}hIUk2hc^gW2yw#_qWC-S&|UPb z@Hc-SOC(O?)|=VdQW#K1%X8|Qj)A<@LA;);2l*%@opl>%24c5PAzri(rgdvMrW-O_ z3$2a0`WQg69GDy-!AnCnLN*|=_h2%Hsw{|Av%1B@ZspRdR>gL&@?5I<{ib=-wwBE- zq8iaF!np5qud2Bbr;WXZvpFs`d}&V-U9Nu1$h(w>X zPR^_=Vc#3`v^Roxn%xuGQ&VTfI2i>{uLj&9pev=)TWyH)eOa*bWO4eoMpeLqZD5+Q zKr#!kWI%|%#=_`)%?TvQMtNlx(oSN0f4Sn?P0Wq^EMe-;{<#N+Khkv<{|W1Wmd%}P z)yJ}4%9NIS2wn$t4O2=omg{bc@xDyuDg8o2CNYAi0$%(v*ExTKfY~=NMZUCSIO}D| zJmu%t9)w$qyv#JXO8UZYfM2l$_8ltU4UErY-#KtM;!@b=5*;CkUUWj}5D5eO7H^80uJ{>7_OBRh`-K0{W!vhjM>jIu*>DJ&yynZOXJb&N!1j8~dh>pS z^-p2Fu%S|E4k|C*S=S&EVm&j?yw)g2{<&#wAuk^dMVCp$qe?(I9s(5r`r^B$NSI0I z!f#HVdc${&IrWP_A4z@NxjXP)c#EK#;L(o`belcS1p9gQ+-&k54vf7~sr3?~-3aWy zxtGG{EvGpNm=zpjA3YD!rM-81XN?l%>`Z=DH1Tt!3tThT$u>dL0riAmRW5QU`ZEYYQ^-IX~)B@@nNk^>t-g)FHFTqs$aY4v~fbe%81WDNZq|G;Iv)8Ng z^zyR#LR|HE92EpX?*pf3zD7*Y7akdlC{?x~g`VIQGhLg-;8IBIn}?Y5RJ1p5Q`L;n z$JW4K3T%IL$#~TUJhkdVo^Nmp+C&Iu>$C+u&Wm^e`Y&|k6a4*ee((QJ$oaik{!mvF zCM&5MW-Q0IRqL+>A`UKu35?1G%;xu%d3eSG4c}`;rF$4gi;wuQ!+CJFm{@hhYn&5m z-{|(rZlKymsn~1X;M4og6VRnhd()^)H;J98ce*;|#r#iO8m5B^7F+(a00@Hh6%dX9 z)_?EcnCDpSvF%31JH z0KT14Fih&)3`e?lNBxdNS2o$?p#+=G>YZOlY-_0 zqteR}XRHFHWd?5dhb0$Jr+_bd0F1AGJ%4rgEy4fgAJV`7O-KG;t?d$?=K6GNJ9HYS zo@6+!9-~?}k0X0jjN;cx6@S^gI%@Sla#!{m(iyVz?VyFlWW&?tE<75bB>Si#=KFEd zn;r!51K*;bsz|0RhS%D@d&NL_TcA8c$V*|Wj_r^~eafy9`MZX>r6I!1v*K4y?dSKJ z`ci(cj|jP(bXlFPYwK5saxxU_?!J2q?C<}R`ttAJ|AKo#_%F{j{BJ>q#DK$rE(Ksh z6A5BH;AFrygu#C}yV6lm00OK16t*0M(hNJr52FClL48}H&h3d1(XJ2>P)_1{#H{%H6HeOszf0qvl7Gls=Rzl^%v~st#-wgHMhp{ zR_h7Rp(E~F1NfB}c~u?!%tV0tkjr=Q-E|(I=yON>k#JeP4H3-ULtx&<#`p+K32AyO zyqx?^cCg%c%)7jcA?FYukLY7^+_wIdNslP*8~8{stt-|dvA8G%@HE( zGejhENN}anv83E~@4ItxfsvTWnB!2aA-c#JSKQ?2-v(0`~ z@cPqYgU`*C(=ePLfEzjZL+Sr96xAL_K)Lp?yR1%am~w$5B+roG{E}UaK%Q=bk~F`~ z18JglQ2OEFW{d{z0mlRniB%gL@kbf(;gc`mjzHY3D2BePjdNPg-eG~d_iJ>ki%m2C z`6Hb-YvL~(QbI>uN%KG7H|maKjzWb&x85bJVe}xDbz6?vbjd2b(?|Og?&>otwaE*~ zDfM3LXZs@syC(~Kb|QEZlUap5hhT86Z|7*V?(BkG_ch$erup-6Q&nSttxV&j^yaboUa0V4C+=&Kf%WFNT*_6GCkGU)~ZnF zrX!7<{zV_rsbg0Yvi+}pY2XacPo^#q0TK_DyKi0cpi#{U;A~AO7%lkKC*%$9-BuM{M3Rey<4Z!EAf4LKP zu=III>F}=IEb7!Z7hZJwhNLHi!THgntOl>jUbgem{HcGE`&Z6p@M>vtroBOy|XcJOgMBkE?P~iu~&!Qy}WaywI zR}d)V5y^|j1$iE3JU=bPPi18|qVx1(eqq8rb`qp%os5y}GPuzXu^|`s4 ziuR|AHEQou@@q%8+}AdmQCUR=Q+ZR|i65e$pf6?iKRZe9O}$S#SQShduc*kMzBuxU zkUR9cf+(%Spy2k%d?U@Rjrmvi8XB+Ymq|~433_f`XJvS>t296?A=fPlOyjm1!1CV`8u<-n1e}j zbW{!BfT#X$cO-Olh;FHiw+JxTjd^)5c|1hn0XvNnS44W7`*nhdy&Ls>Dk`gYF^!j% zA=49*RmJrRpDd5evptR47P%}Et7p8}NXqxYSCrk5mc2kic%ZvL)h0MB0UVb8owN3T zcn{?MG1B*mcAM9fv!yc~orV2^c6sZ*}e4Cfp;Z=n^oKV_S z$xJaW3?CxyimltqCX#R4Slao)VO!^v?#7NLF%J^3@IUD#P9UW%*j|sz4WtW8#jLS_q!81Svdzy7A1sTK8ceIQk6Bj(vtJ7q;k1z(1jRM}+n?yC21IX0l`jRk0VtATA&wg|c# z7N0TSIVhk@%(X4qPv>1>YHz)I8TVK$%${@UiSgGX%}(cx@IPTjZSiZP3$f=AOlZGc z7=l#}^~D=`L%-wN*w%R+{7vax<6zN=1b%$4byS?Ks!H3wjEl(fNUNqpUACuyGn+MWw`=9RF$OIa%xh*MSc_D{sc2 z3^;(pOkoN%_Jb@{TPA&L0BLER;_1zF%SECFr8ad>qhZ9nfj}qr#_)M>_Z|I0YD-I< zs65p0@Xz%}Jen6-XKKZEuFtiE$^=)OR{jQ2rnH!>ANV|li{d7)cwvO=$+P|5rt1}> z;dK?d3U(szu5|oM6)&VToY;#tS?-;nqD{lOW0tuWzU3VA^PXO&_9Es}X4k2sZ=S&j z&%+Si#{AefDF{mnRD~jXh5~l)q`09eM7e&cyw}w2i{iK#ykKMY(2ilQRlW1dTGv%j zO5maWnbniEbQ?(f`_0W}1AxqCM|Lw%`ZIr+gX28q`gqjkgcRiqREUqPOz2G3HTpzi zoB<9+U)4fga!@-ac2APgz^>-{tiD0jl5LTfg`6nBSxg0~iD@`2yL!5_N(b=h4n5X0 zFK0vRHtUUKUM9YnN)QqsRI9!lXUK8$Y5NFilHt^eocJj?+>fo-ib&cvq|iQn^-|Hblx4!Ne1rVSq26`E~I z1Zk#Tw=Q2Ujj(9z6*CCT@7lgz^^i>+z$>@ou$YU!XZLWvSi$oegf`~O09R|oP?uDS zLG)SWA1YXit7Jmpt9RjG4T zZ}E3Q8Vx>f4}yT+nrvmhc73aFrD#Rty@?7+3B6|L?TF~tG!dz%(*0z4D;c%FC+!H# zwLQ(5o*b1Q75qN*kU^v)*xLcm(A?>|T$e8`9suJ87hVI)l$?ly8aPW-NvOv1e+lP< zBWwCwj@H@w4O&WX=1r=$@-gnmC@DNp0ErwLP^R-Q`c}CqGjInpkrgpliDJ6XLG_ph-R8^iN{|#DpsMU#8lU&+Kp=wD?%(S0wV`{h|-GVn< z-GlX`j9V}c${63Sb_QVQ`eeCQa&J;tq^;Yf_&8bD5vukxK#U4zK{(S^0Ek0cPr;Nr zVwHU9)@n^&!z#;rN9)Y|9v%gnyQb~bYF)Rfiyd$te}JB&@w@N;h3)(Q%F)387e1Td zUmgU2zy28eqc4pRn)_+P*Q)iQGObFx zWu{MBf4vpqt}M?wxZ8mSW~-0&39RTZu{H*WZ~jQX8{b+OO&Pkm*qD`*39_xkG=$gs zvcNnvu`W znf9-k_zB@XP#k>QJ>73Z7HkDoKRl|5tZpF}>JqrqGY%g3+oR}NztGSp2wJ1UD5m;_ zD330RG~eldu{>cyms3JN0%>UpU96VQVyaK#U$5D6Iylqu5 zx*<=VwrZo7oeWg%p0Vf<>(QW!vMq=d(}-?8A0#ajH+HJ@88;TgK=Xl#0yX|Q1~8u% zhq(zF3a|?P&K^f)MW{Ud70(WNqxJYZaiEzbG05BWl_yg#IMUsO%50+6@Q$!AEi9vl zYJ7LWsO;gOXq5T#ay3u1k}lW!Bth6|3nG?N8l#?H?Ax`0xrdnv|E69)Sh}!ByQ<*u z2;pSUp#55;Y@5^XRGxDl?HgvyfbnVg=Spm6)rc>`k60Ia8Ks3|p`C4_7^x7miPX0ajK;%X64PF=X|WQv3iquje=&8wwoS!u_j_PWdIjZz zQ`*=O`co3J0w(j<*&nOb94A%i77xr8A{Zs(x2!?hq?^(#pi8QVKi$BxVr$j5!!oJi zT(GL0tC+|SIRE?J!dq-pKLXr?>|tri^tS$g5=cN?S)*a?EFutbbPG7tm<02?O$clE zo8(}Dci-+#UCDj;{I+8!fjy`nnv=XlaOA4{^VDbT<^ce9h=Pc$QFFi;)xi4L`zMAx z6(^%MAK?$OA83mINRDCUo6~*h{Cs^6h&e(AKp)}y(EwALf9?Kvj7qbe%+&{Lcfj2G zy|204?#s_pI$g%CC-(yyd4H3%g<^gCRN%xYA?mkSxzJ)023&COk0O6-F(ZxpgL?ty z1g}Nd3J3{#0$@4Rj(KhR(@+Tf6^6NC#zzSM%#NblgRVexb$(COhUC|PdohBQJF6v( z*uVcHITyGjH(f9+0ZppUovgr9O02JEMx#VTJ2pm?^=#aP`ev5%KK3wqG_dxER5za; zpB(M3%X7E{+4`0F99?p?)$Jqs9?Rj+?`foWO%x1q`~4|xpf;>-IGo(cvSRTyPpDE& zYs8IpcQdzi%HxuJVO2Bux55}J!kMyQEPszIVb{tdOn;!8#9w=yLS9KVqB&NbwXZxO zeY^~)kjGTEJx2gEP7z~Ym_LX$Md2{#!4*dRW)1ZVNxFSA){W1faf|$PbnaLqSXyIl zd*VCT0S9nI$Semy1&_+1{RZ_I|9TM}&}?r|hXB~U34L>E_j z=1}JeAbD}RSRIkD-Ll>0m}HUARwdN@%&O+3rCV~22XVe@ygZ%a8b^hHCZ}kCx4qxf z(c8F|ZXc=fNfS)rrHuhR23tP9ZEZC&1Aa^z*z4+c5_$lL_j!3VfG@Cke9dk;$5hP!3UT_chq{;1FCXN&%&&We}tC1n^*}4yo3V zE%SbweqRvrbioDjr9=+8Z!C@LWIEJfnEr~NfA4X+)@Mep z2Vv1mx6}m)f8SQ&36V_EAq%4r7wrH!s{pKT6l?0C9ESS!k1JvTF~0C2{x2QBC{6=Uf;0F-VW&7~xwbnb7EJuHCCVwp#Q^Syy*)!JP#LBYpsnC_g> zNdpbPR@z)^mE2v{JJA&ZTpIU<))(GW!so%FXF>^HVr26NhdUbbB(36jOBF zPm}=1;#i=8_U4KVwmhb2|wkOvcSj2+5=Zk?z0|+PF=u zL)SAatV7HVqe?N(TC(m}eRHOihkHC{wF>Cf5~(BE;?fxDv_xv9&3QI>-0jX+ylDNT z-DXqj$01M0T=xa(!H)HGG{gjJ*||c6gF*RLmNF_ht#VTq57u2%71ud6Ulv5wY_~lY zQwK?`WlQ7gu-ZQC`_&8JI`V=+?W=)+hdNlW=H)Kq#Enr>)h54IiWITS(477 zE`hM2hei6087JW;dE~?~Wn}5J4}%k}Z!koDu(QhaHe(?E4oQudx=w|Qu7l}ckI&8R zR?*SeCn#AwjPGk=asLcrx!?sUm-=E)(Hg|hveEje+U`ZF zY&9`_+q`f$9eEgw768cK4%{ZU6YHR2C0`qB5NB>BF{2dGMEUVj6+QT?|X>!hoL{+@DlRO$7 zy;7uvEpmCsZ<=Jnf5aMWJKTuk(l7d;A{Y^JX{%iG!#yO zDut+345F_!w_aM$jLa+$-h1h3>DcX39T#8n$h}IMkeBedS+M(t4*sbL7g)LvaAYNe z`9t7ZsBj*`MW!@+nu3nMHe$4Iv*=O&UZZ)=we?*>BZiZ22Cr2HQ(e0VTkDv(cTHPsGIkueJlBC@t5xF<#IS1RqW zeGkDCdaife8&TLkCH_pO8AL6A7(@Y$WPmYs`rJ;`orOsFoENZ7hs<@PfvwUlqsT5E zclET)e^-|$8Y7*$s~ZAH>bkwwD_o2*a*?j2nDz+#)6Kf!j5iImgOvFX9%+`m9h!tV zH94xQ%Z~Wn7Th{iSdR^_1FBh@HYVKDwJq$&u|mm<%b<&JQ*(x{>m5^f9kJ@)UragI zNm@3rvr$4moJ%;Q0mf+Q*wqiP;Iq>Lh4vHf-OO<>87Q>D-GpSoe_LXH#SfRdx%`Rdy%LV&ol zlg-ntDrktSBSXS7(x7Pd5b@aVyJh!zy+>zq z$lh-AmKFrAL>5)FBx5Q(@-6TYjG^BMfT@oLz+Yr@;yTxwTAvCR5+&?vSh_aH{Ybv; z|E0}9nD283B{o6a?>QG(d)!3Sx9bes9tzRVu>z2{5Rw(v3HUqbdUxHbJz8T=4^7{) z2-lZy3u7IZ+?NBCO7JhSsZo%}3vQtSkb3|!kVAD?T7P02={ii@s+p7QxY8}eFJQKNnQxIps?T*DRf&du$~)^6)EqY-VSX(*pc%2FSs z@jc;bD(|JGqcI7P8$#FmykHn0IpD>B7IT#0ieMUYy}q?MMDE8U$wHQT%IgDQxwGKPRl?D4}6Ix%Vf3TH5l&x3~URYshY z!qk&?nb%nJbv?-({`qsm1k!|P#xCa9>I5r|osji7>JNFX|1e>D2HNi86mIAwCP$Fo zE^ZFy=AWxQgxb&%Q(@}m z5Jhb*HqOY*jdMa?j}yGwN!t?zOyHFi)IQ7&QU7OI)N#zySbfxPvEj<@Se~=&m8V85 zfDh@qgGLa;Y_Fsa+cAHc$fjm&d-__=$zaQcOdHc(#i zVIh3i%EZJ3kL>hRe^$JrXacFGGNFHF9Q7*{HJwN#Ud9@If6}4W$)o+6{$1$7g%k5~ zTsY5=9dD%)KUd%iU|XL>JA@OSN8p@OZio%n3x>-$_;^Y?0^gG?OARIj88Z7(5^mH# z7ThsmhFi5@jAK!YvP#|J%dpj+jtXSxp*>GpPnbC0m7gTpm|LQ~%sN3B=)y*DbN_$$ zG-I5K)j;V7zzIuu!__^})n67nZ@e=nP%vL$@iK3e@Y*zY>xsUuAbUwzvCx=Ure(wgP6I1-!x$VICemKxTO;?qE@PO- zA#2;S-JA@*bfDJKaJ}Lb+X{T774iX)TYL=AQX<-faOT$;8@^pa#7V2Rrwssk_e+#Y ztl-D_2I-OW(K^qNH0&%|Du!+!c*A3U+upF&W$W>@Hcp|dQ!ribEeiBJpIpYOwu?!* zK;Ejav?h=ETfWz~G&e}rsL{!E^$W3y1-y-)Dn+-Rq7l8aY$%IZTQ4tLXmP1c1BG?5 z^?8m&@AA;~)blylrKNSA0A(V=$sJ_!8IVm(4<~nE3Tt}+m+%I6i*WN^q!=XWp6HWP zO^d$>E2u;hm`k(t^Mfvcxv%7|+-+9`rR~XruZ=aZ`t1%DV1--?M0+2WxC@+F9P{sy zP`E!KIQ*^qv+e$M4#ZrP)D zTo&pZDdbX?i;?X-&mrEOX*3B3)BL6mZli0)7Kf);OaezaCwu>mUzI!`9z1*&pKZH| zSXl3AldW#TxThB3%!Uj4(Xzr;A|bi#zF%5yY1XR|7!5E-{V9JPK+5p|C~o`e*6(TJ#jOA^L%lOiT&6-_C&NKplq+Vl{6zV?rg$rQRlg z7!qg%^@IgQwJ;L0tetV)vLc+YLM9#GK;bHw`Yh_GR&UIR9k@&E$!FWYj@KJoYhyGS z?x#<2$C2|mZwroX0N{2ek_~L@&$v0@&Mh?&iHH8wO}*S&*wf2unHgd z0F&ixPV8#%2BxpZ7EM+x-$3DM>q2n55S?`k|8q&~F|l)Tob4_$+=Ov7;4Dj|Gn-}H z9IF)RR%mTkyJN1$z!e4bNGyq7F>e4p5+biL(&~4{1c1aV%7+Wl&j|G0+W2vLIIRy; z9~0KqVMhrkGiRSz;x%7s3vyGr)4*7G9q$}7!R2vCJG9{{HC_()^>Vr`o99%5Vrb{U zZo`vDU$TQmzo5geyqiFe#)@#s3dw}C#HMuj`>@Ztskx{pc7II`=1*VMtxoGHnqSjA z=z0ZuMngqLm*Bn;Ck4QEb2%+3#MlkX8@#@4@s6%G9`AEzyHZ4(5XavTQ70$ zM1XM5Kp1(_@fc#doMK6sLr17Z()~qbC-1Jnm)>IG+=Nn?(l> z^$>(@(z~myhZ2jCvJ$lo*(haHe`m(+LgfFaDn--7htv>FjdhM zp3U@2!jIpnGnLgB2X4qr% zn-x#8CceM=^Ok;UT8;s(j5!WG#!D32DY9wMBB-SOZBtNgDM~n3R zVCps@)>@}ZEAn-)Zg@98%ut&^Mj44wmi6rO@oK!_=CeCFhb=S?L=O&pl)9H zLCf-59niYHHETaCRWX);JqrE~y=-k@_&?fi$~@B6#c7?iicdjt&d)i|!v9l`6B%jy zjAT1nh_tKu!@_E~1lf}zGSN1#a7O7_2tiXA3xCd@m(DQU1hss7X#Jw^m~p>NGTH$z zg}FSw;(s&wA*J4SVDR+lzDDx_SqBkq0Krv07iV3O&!pTfw`gM_3Jt7xd1~T7m0}^^ zOH0$>TT1ew{Qjr9rAt6F!abY67GpkqsZ?Roaq-w7^EiR|gr%Rkqw`qBWo?xV*exvG z^7K`SC@WYcYRyf}WRgl2PvR7xGjpAqJcHHTXpjO2@pBOq-yO}jq|;}p3zJ$z$B^J| z?S4D6ez%JQ&nxc7adxgUdh`wKw8khCYM)^W3=XH&7mdai{t4`5EmFIPZ~56{1YdFA zhAvwX9z>J&7*I#J4%8v>JxqCwKims(ZHk?qlth3!hRraaRJ-pTwo|rkZgGp+ptl0Boq;69*^M|_c zS1nSU-yZ9JWG9HxT3cyfTMb3f!<~RGhp0jkY)F5Gzol-#b8l7QKqr??T_{Ou3Adwt8_9K+hbu2@UCgEhvD$=ObOzguF2Xpo>ev?p7l#A^Jx{xC2}cXu6{I z_jN8|vA?E7MDnW|;y0qr7D46~i3IgEl*AvOSC|BuFy!NMi);{ICJM*ghHqgH+=QUI zbbs+{91Y}NUQ|gLK!=^Oqr@q7a(BjF`f0~fb zF)Kez(MYOYAO1HbKa27nnkBqsQ&|5;N2O+pO+@m9$q9 zu(D0ARn!40&n*6)nP)l~5*LWg$ft$1k%K~z*=7aWTHd z8Fg@q`)4=aC9wGy(N+IVPyG+4csK`Ce>dV5?qWT*&k~y*Y+YWLlKYWMN|YQ@#j9z* zn4PvD{u|jOm^ju-jq<%?o4y_PTUDe6I07X+aM(QM^?iyWetYO{{)Pm?^%f{YvT#?O zZ44N>j#02RC(Xp+@5l$Pb~+Xz^F&r=wo;lsR2u>;=M1O(z0`jmFVo+2Udr7>N3`K) zYQ1H8p2^<$mn)n{-ccvFv*%eFY-5SbuiU&B@;*N9IY*3b>@<`CMrwe$3#N1v5*fiv zw>tK66eGk?LIYO)>6Q0oUdJF4SDz4od&BOT1o?>8zrS@acaMyze%xjqoD2sb`#e3_ zB-hzcI%_CHV?ehS)^u)HrNoFojUnMRnOKsXAj3LAW1q`J+tPGx*&UD9KgK2WTCap& zkPB_cx(MS6HDg+mLRd6`+){Um?mb_!HV#`TQ9aJObZ5{BwaEK2V16U+uh!O}2M-(` zKPHM^tO-zbR0F}au9RR3ni!vC6d%^IM@_3|Vfwtud~<%}W5ComQ8D%UaX!Va7lDob zE$mxAM*m-PJYBoun_*v)Cx_D3RXd!{H}5m|7u`G+Aua&vu4D`xHq!6`s80#F5b07(70xA-RJ z^%_JCeRiGM#*J6`@@2Bsu!zI=^$Vy1kf!GOiLgb5r#!l!BI0rv4o1m}^a6iH+nW<< z&{V_Nz@(@`COJ-nf>-y628hSyT+I$~a!=ufu9Wd+82dDoPU)yglvCtFIq5sMP$u~ACUg=;sC)T?L2LB zZ|1-H%`Shm^XPW$E`(%03VHf|kdD6d^Scbrz$G2uLv!TLZYf>_)0xJmo!V>QwiZTX zWQVqh{wt<4ZHn@&6Bv6gwcO8Vc*zZ0CRi}V3 z%F^rG1>;ag*lNG=9SnbmEst-pHS2VJ3(}@z^vOrPGEY(2Usq}K7mu|`t@vZn9i$bw zu9Mkr-@4VHvvxY^K=o<7EHvX2r2Ua9yrwoPBbFeInP5+k3SHlBd#IqU5nzA}HSYnU zO89DPCo7c1MxE_V9eIok{0gwYj|7*1)He+>xWYK1`{v06YWj;_2)O`PK2=mq!855Z zrKIeZ3|%m}b2v_I&D%nR1|XMSt1r>s>0R!bbs#(7K3(pj9b+J z3r}BoVvGIJd@l%oeI@S)<%cuIIj$SWKR*t6Ie@o`4G^<7v;OJ-FzcY9avE|@Lo zCvKirtOaYD$I2=@4RE-N_LG8@aG{-?Ojw=bynWWQ)CD9&*3rJ)+AnQA{dh<_K%`b9HAP<0QO}QDutVaKTplcdf9o1}o{JNIazG~)`ayoUdrL6zxRG@YFLEUf=fK2NIUsipm@>S~ zT)td*h%Z;P7bhhS>=kf6?_2xIdcg|%qjX;58u|j~(DoqZshW72MxH=FMB+9Uyzg zfzy;f5}cH?k!AaUW$L94Y6geYDdg>?wl880R|Ez_6zfAtr!0$<1T$mgkw#V5Y0%qx zyW&>e-F+~7%KIy}WvLl7lDKJevE%nzfmO;{{&7ymhzb}_*UddFNhmt&^Uxt{ama$l z-(5WWL5Zj~>U}bEsz^REG1ly$-Y$6bfswhJ{S=shQUkC^ z&hOdWSWZ9?OmFrU@ue=?P=8(tB=cgo-QUlUmx|ynfj_1OC5Gea2Zrlv7f}{i^|~?z zyE~YydojxR+^d9rCWY@G%_t)-E>U=L%xb5}ohS3INMh^o;^&SxU;4d!x+Sctj39otu@q(l%I@ifN;__W@=dV}Fkvj0YdfLM1KyH?pc!Tf;NXZPlGjgQBb9_T2N4YkJ_N7eN zK5&5~0!GTFk0&+CY)-t7zm)F00>Lz*fNaxt8eINMHNn1BCO3*KG0(NRn#BdhXef3g z_)~3)u>4yp6={Y6xcaz6Bw}GmH40YbOU7Z_-EJ{?oEyP^Y96sxvk)loko*eol91zl z4~9W~c%F6_BJTv|iv9C>Og%|7)kvB0E0CV4Ba%{P#P9%66)BRPz-fB;eW)gb^%2p7hA zmy3k8$`mx5f4dhgTxrkWoJ<=+rXb$CB-f!43LA8Sp+Bhdyup+c=w>!QXcjQO>VwWLm3KxCoCD zmc3~%I^;gg+oW6M7x$N0UpOw!{mlNXL0{H0py)wL6d*d{^4_qUl_;A-gKSB!*D1fS z+2A_m)3)NrSGP;L)E50fZiB~}vjKxwTsNa9AJY0mR;2$5v7$Ra{A9uLlic@te;vqq zwN|mLXc31%QO6z$^E3jD#7e0J`}m+Z#mR?Z_bos8mHh0NCH6w}j?%(>6>!>UBU8i1 zFzXZR1_6r4i=yd#?_b?uyHh36c~9BSVF*p{9Jl30vsuR(pT8*R;xiOO8R zBgzIkqZfm8d}3_B9*IU_N7Zd7>V~P6u)>LMIs4~MCc76Urs?EK&z@bi-@L@vfp zb8d#g#I4Ux+7LO6r`+kp^vfSczV|<4-q3rQAeHjEiY=8=y!$Qbps`F{YvQ>aPQO$M zl2UJAoLlr^Wt5eilE&v!PRg2yBWB-Ek(~R-kTFgOtwD!-aeU>wE_=2bDsmX9!5gO^ zY1!~8tM9qr-53u`EV96Ll?bM#f{8LFterHqyTuIsRqtW}`^ArA8y41c!M~i1Gw}Io za;ri(!4-3=O60J0zq}z;bD`|=kH`ZBgd&mGThdZ1wHz45OH8{z@+>U+=R)@<%kxm> ztyWv*WR;hrzvc-35_U>I-0zn#A+%Z8?z^VwYrqztgF~KVB-P0H`yNuvl0TTAdf1U; z*#wakg)J!Apzx z=OoI`5zlH8jU%rlVTNzVp=>~B-rE=Ly)GE;HgwK|5c_=`?YTi5>o7F8)tZXlYC>r& z2=*E?;^fwL=?!bErc$+Lh1YdN=NAn^6c|rHbZ_)>`W2$CyuXLV=k>D&YlA=}Ai|tm zeo(FJ=w&(7yCr$DQ?40_yYXISo_;_KFA=N8e1ddeJ2vEFjtp#6Q`0LB87D`H82O>9 zf&<#-FR&X3I#+M@1>5RD-eF#sUsWtcN=k_X)SLF^?qCo01QO56p>8M{raiEDMi?$- ze*RQqf8LF4a!Z9j!%cK(Fq|b|`>HIMBN!;`P+Uyst=KtZsU21?sU~6&KjxcBH3JZ( z64a`+7X5rigwCpY89VjSAw_dSdQsH4P>+&ix7VA)8mJrRaBWxpDfNaD%db~t3?pO3 z6xx`-zx(H?5k>VPaL+ap+ujiy+)h(xjwKEI?SRX87<6S`KCz(wQ@XpBDg(D>KS<~w z0XnHrw}QO7`ePZJRUy;USR2Y+~N-Z?)byer%vQxpWPJA)aMxxeTY^B z?nv$cI7DOH_;k%76iSY>D;g}o@vB6>39wjwpgGEmyxzSZR~w_KE+yJ;(|`h=eUmPa z%aKyll}Pn6EMQ~BL@tfz&tx_-)PiC*&ri05aQl#%=(-v&&lG(_8=SEeS<=CeL4L~= zRU~t-A|;AiyB16V%2?*WJ{SD+h#~uS7mG){K&dQKk=)}Csb10hB}e&?Y+-^&mWj_dG};>Hn`0AK?Sdi zTRF;LN*&GS{ZVZ^d)d6x$7h1tAtM^x3llFYnpIxas>IQ_%3uoomvo!qU!v~=J~51h z+1m~yTeZNw?=PO?$%ftQ;0?_3fui% zt-IO_!`Iyz6UwqQghc_6+3E&N$f!3CBf;|#lU4j#;Vujjuw-1K9$B!_V`q?>pXoI9JGb zC*gFkfFU2?7+!)g8@t^YkIrcKwKrp{;gw9J!*0KBNn6S4ooZ`51xaa9uQFNZ_eg@^ z1O1(Jsw!0k7?z@#B5z8Hf4L)b@Hu5u}M|0Pg|Y# zlgFRpr{ml+Z;zhlfv$9(AGN#eruk$l9VP0WSQ7ZkpP4Ct$m8>HeBHl)v$4IksW~IL z@~-w5aNWNVf>{ z8@u4M5pQ+o5OFvJZSbLaNos;^&H|I8XZ4as-}l$v(1QZ*TCu_pBp=c!0Cj2_t3J{(9f#E&!*E=CswLEseqq* zPqoZJ#jJvGgw78S5#GYP=P8WwPhgroarJCT=DDp&=0o4JyMA&2Mv7nH$dIXe&2mCO zPab&uy&i_g6;|uPVVrF?BxdXREtRDA?uzSzhJm{(Y=jPuZnkb+3M#sJA=ZU?wcb)|CELg zwAX@%l)5*S#@Zw3}D`H$X1j|Qs?P)y_zH{C!u z%nn$QrgKW%oBBVfYyckaO4r`a;M`&_JY-`u7y*d9SfV++XtkWY`o7=3N-KOzKPC~tBR zoowcIu6QFbx52lDIZP8{F4TQ5MVFCE7jnR|YO3+9+L{A@^mCZ63Yqrt4&Z6!QEk~s z{lypvCXf6s2NbMukD^tb2@s>Q;!6bhuXr{mDK%*+xZrsm+jMm;M04r z;sD%0X98J5IL{~I!v(>R#{E1F2fz$ykp$%Cq=oL}Oz=wJvSN?{==o7wgz*oZ;+rGb4QSX{7a2KGG2O-WAR(PH5T@{PnhTOD2^>HD}(_TL8k@F2&Jdg@P=> zAx!Q{w3`|sfKRL|V3LUWa>I81VMRiS37(-(&ttaJNj=Ik&05FPxp-+yfxRA;=coy? z5MbWB5m~$VlCoQo^<1>V-IQxTBk1$9+Q1XbH_TR}yz4f2-C~}A+qBX}2@#aL9uPyE zS(NW6)%_Jc8)f-lH<~Z*%;{%irLYjlh?sdO68LD$*C5#NBC&{@0hgWlyz_(JtdsuI zG;Oi|`uVRvu{XM?AF0$6rpH6B|4Q$MjmSgmxE%+E31jSnti(2&bdjhDQzgiZ>g9Lu0^DMeGWG=GZae-em? z;aJV7YT(V>s|4`Q1ChnkvXtot?a{Z26nLLT{%AD5B_Q;!1FXtmlwT}c6V^%90NWiH zZ(vQb;s5iD?J#@8J!A@GB$&oYqpQJ9MRRLcvy*^e!4G>whticCb`( zaGV$rbGGpbPk{j6reENADpJugsa?BNA1j$Z z5Ki|K?qyDh#ZUL=$>@1;4X^BhdvYqzpO|m`x_>f=NTTbjAL2|=0)r$J1vR;3B)dd@&_>5mda{WYKhkeGvJRW!R58xgUDmTViQL zq!qV8#4eKNymuYqzmeV-ci{F&`xQRs>c$nl+t}q#&%$H|cz%5Hc7N5WVD|lq6oq+= z(&!}Dqn=KXn`ljc;U<2rAM?h%kz;c8a6M7r?j3S5Q#s0hZw{llqeb=;D}vCcZU4FA zrik&z_*ijtYgsD z#$$;#7&;T4cwU_lF1}d10I292B624pZ$r2VqWvL2lC%|u?(U0YFM1Und!;~@o*$Yb zfN>5UdPln8=|%PugS!!ysRT>gT-Crti1eOnL(WqRg66!t(?DMiw=(^-J;AG7;d zJ}}&8V2K-v%Zm4eE*CAIh4@09QoRm~EQ~i|Q&Bvc=$L-xJFC*Y z!0+3?&-Q0spg(9w`Q*O_5jXLH;y?n%Y$K9qI$hdJN{&a|P&{;Bk zlx)IveD8{4+Z(u(_T&iz9*&9;|BHJ$?v>&%?3-irUz14Lymz1uZwIYVpXBorrE!vd zd&=UH16=>S{$RS-!6sCgDXjL-E0oE!A}7h$m(p}TOB4i7+%S5neC{;5p@geK%i+Ri zq;J}oa@52$d)`fr{+G1!FL1RPU__C-R0oV!1AM#)d3-`yi6-V!V<$(hud0sfYGUBW zTNyhrn3`n!X*f~o!k}dtf`H;+eV(`6I^@T0PF68Be;%TAo1f&-_7(Ybr&l1dALQFS zm-n&6D*l`9wx~AEome5iL>i@@#2*@isw7JtR(PNCkQrXE>&-_*fzyRN^*G&aU&&eH z6L!AgV1YL_YMMj_eGYwQW6{6* z;4jF%HS&2-yd&dK*rCoK(D6`S`CDl&sWO;^qEi(LCXy5E@s2$q3g7S{=^M}VG5SyD zRAyG;8&T}TPP5VThxN>4x4|s}apx6X%k=}@2hnqfg#7N;;1mCnROCHaqmBNX^k|54 z#&mv($2VL|I8ky%MP-rdac>48ZZ(QJn+fAC8HM2b$H(Qde{7% zQ~E9;PHzLWu%7^Rmd@>&Is<~Q0zRNm2oJK)XLM&$Wt(;fz6gD1L(+xi-#hQ3C&LE& z10^ahL=e=I$0~`Io+Nu~NSDB=rNecOH5VnN2Pq_jn}CZ2bv1n2+y;w<-Xz}rI_Wfx z5Cx)N;D0L0taX1^4z25X-$1{4sL{2;2#1968Nf%c9$W@oAtgHh7#ph!tc=pYX&xr` zE-{SX9BUxN+Or67I)+)iPx~=ICf1jp)c7sP)$5DJs69N-iT!TF6AA5wB>Au3yE(y) zAVe(Ar`wi=5Pu;;fOY5H^~|*V@PuFbyFiAkRhgyCb#CHHLU?4JCb^Sw!!jenh#-m= z=uxLfSYRlLp6CO%LGi{9M_T+7dt9twX;wkq$d?Oy=@V-&NlryaBh~2+kR)EX4y^Vf zxYnWtYbP#5JG`>$Q1-Uy0263%?dbJ?Q!E%_eAE0qqvhJ$@;u5?DNz&d zADg@fhDZj;F=1+P9R>sia{UV}gjeew+S=jI{LL?Gyl&bPGWarr9j!|eSCVPrL4C>_ zaSid3^?<$OBbA7KUd(@H5hpz90M%$c$N>?S2e{}P11_xe-TC4rRCy#?3m)Y7 zE!=&0v*oae*SS1flT)l1r?m1q;XJsrYtcZRk6_%lbeE73SiS6KtS=W;^+O&nbD$wi zQ%|e;SOM_Y*^XnEqiwGdK9)W#CSY}vjpG)Zd-@t)^$nB(_tmxyvK#XB6q?mRz)cg% ziBOrevc*lk>osxv0rO~W$=SB&+%6wi@dSUGqj+Qq!W+^7nHo@KLOsge6KjFsDIge| zA3C{u>aN~U(VWCq@s2H#k@HbCxY{h@PKY70BS$1X6|=#l6@re^S)`FvYbb{fLw zEG-+yY9+|c2m)w?&+(GGYq+5P4&nU%xv8jjBP77u%8bSY`L_H8RhO~6t;##&Q^32l zkJ2Diab6K#$2NLBZ4U0^JNh&>fiEt&yNU&9Aa}KaWD!ahK#=cO|F70BV*)u*?=sDo zk4B@lBb3fPeO3ycxxX}}bhCS}HOn3PX1Z<*Mvc7o8P1GF=Vce4LAlzJ+=?2G);$Mb z>ZAlFtQ)n|Zl3YfTIAirPxl&z+p>&5_ZyxV^W71J)o-2520Evy$UZeM{JHK={S+}E zq9jsQz>uRVj=g^IkT8l)EWA1#?rDSLDe79zLK}?|8cuilhuz!&}U;pgn`&CRK^RcL{xUq5EH6;=*Kx5`2PX4wA!@%&$2|9^`l zso^5n;6vyHl z3w-$*m91vLLXy+|5a?P{!ZKW+flKzZHOKpDjCd5z4g2wzE;+~Qd0OK$QQ+1Z34$DE zG(JzMF1~+Beq8pWXzyHqxsCfT%R$ww?{yh&M4(H#{br%kP?%3bIM7m-2L!l`H=09- z%Pk)U()-joS+GM}>>fgY0$n*_R_0a%p45M|Q}~k$9$$M{zMT^iQ@rG1*|6j3XiuAU zeQ0)`+vs+HW75lVDmj?Ov~SJz%_dv^UmF(&`Ct0d=Z7295ig{x8pG^UXTsdbZ2!Yb zdG94vO@0U)(HtMpXBggztK0L{esR3TjO#6(|L&0FF23sffZ^uz7jrV{8hn~lA%#U- zmdJZ_mOmjg6RTqQ$~cDK;jG5J0dpOt=t~8o=|2Dtxk`6^NlC&}wOcY(^p+&=F}f*F zTJ%NOji$!Nx+u>|v^Kv%ELW7#AF{Z-|1ZpXo!{O)eUbYUe%en}GyTW^DPN>Yqyc%) z$Dsi%;l^V^25#UU9#!GRS~XR{oh8?mJHAx^Y6+Ym8tr2sxl3TOHH<_JtpSt#-Gxsp;L(n~ztQU)M=0_FKJ8 zYJTr(>uJYAG&gOS4hzYj5!PO!>NEm|k)-V}BVd6>T3o_*m00;y$m<2qhYn25HGEQk zLA=KcKx>1Kt@On4C8Xy(vkdJidEsT+^yb^Q{P+AvA42Jmy0G~OyH_5M?zc_UG+5E> zIgDN?UtyMRONa-=B4R(1z)x%FYGZABBNKj66tkEm0_FSka`;YPhw5)R8gow!uB37f zLC3Z?rd9B9v?aAYX@-Slx4{UQt^Yp2?-l<2{Wxk#9oK(ZDW!>q5In_~)aKVLnBHeg zYk!}gp+2$vZ@0udiBnl6%ZArR_KFm)Tc-U&rdBjO_fC5g@f4?Qvi*NB`S>akj6vBK z#H(p2n~n$djJxGOToDEefg^&|tHD8I~n zK#s~YI?E00!d}c?UDx25{C7)WF?DII+zR0tla$+gf%X&=;}0y&u5T33%ydl10~Zv~ zDT~THoRU3Y+&tmBN|u}xlT+kxYfkr&Ah>93&YM$kKB1>14`3|?HkTfv#x&9qy~jUw z)D7hYT6fY;tiIpOTpqOwl~^1+5?Ubgw2<+hZPEoi{eM_(K2SD%ax~JzJs=nzG}+l) z*P8j$%*5FwkK0SLg%&H2n!4#mR`Or}Pkc?{Ul6mOVbm4ZSmQV0DM+i=v4@)4RPem1 zN?P}O&l~$3SU~p^|941(fFVT)6Wl|wo?KIq;R+p3togn|pp*U`l+V}5E>#~5-r$#k6k;<^-fTwxhIU~EM8o~cJ4q&mWQWC!40i~N9oxFD z-mmEUMNT+Nsw8b(_8xP&M#@O~I>iG0cte6i`}Y5yCN*3@{i5%qu^G_9SQBk**^{Y! zE%D=ovBZJW+}hKx&p)=_Gj@PfHrK1Ue|M3zOKjBn)vPUR~5sSipd{a z(7U*))|wqC`%C*I4PEF|MbwsOTpok__KWe*tj zYGah|rHporkq+uWsVMW|z0!~E8fwwOJF{;8d+N1*q(MQs@baH3wqCPtFD`5<@Hu}o zG3EV-@UzDpqts? z=rA>zzNXLylhH62La`%Ou_1oPN^(!|SK-$PD{tmU>l{KKQKuOxh##QGt5MWalVk8m z?D5Z!xa;=`g(X{C-qr97ASU$rA);hL;#D!#cNLb3yn+T#}q8{;#KhUf?!=Ke^cDkOdAOTOzM)koJ$(VjnRe5HTd-Fdtx zdG$`m+AB8HJvk;%8b?uPk2?%Ju3_A^4DNYYDuj#|qx~&^+Tvow?anx?!q$yq`4G3; z>1=qWuuSn6G~Lj7ZX^Wq>*Rt8B}eg+An{M-JH0w3d8#s+6?3-z=ea)kG`t$%PNC$+ zARCD!7y3}ZkVpk4inSQ`L18(vjpKlvR3909P=6M4`X-d&eTdhF4d0&J3gG7(Mi+!q zTjh?xdQVT<8ozxVbf25}`1=cwc?C20m6Q^Ht-xh<2czC6n!dJHWwcG?1Gaj|k>B|4 z1wi?2PuTG4dH$>&nMqCVV*;WC_jB)e1rQWKoVGr&dKQTdp2ZAXFQSb%o zw3+9;4}+3-kAMy*h}#v(?*pK}t`|cC*%LJgf*3o})yxPSY9125CvA0@nk*2Bt=szW z;^y#Uphh{+aW|%)@iNP7s_Nia?~6*$=>sNCAPxM6O>gb@J(w|32pCtBmC*}QU) zfL;Q%m!xD&qA^-BRtR_SmOh3qGy98v5JzL&#$MC#^R>NGogY@wT7S-Bo*gZR4PrV$ zM95b{I98GaT7`}`WDr_VcG$w*dyb8}E5QcHct!m0NZQi#8V{CPecKnk&@l_$6Qy5;ND!46cJ$qO+~De$CsZmNDH|W6zLS5rel*<+6gx&l zdrWiqP<#wlgdh}`te$6?)w0#XS)CpuwF^v)ap{Eu0=b$8K#SrrlD&(Ne!hCAd|WY7 zT_Ts+W}tFz>wuKVMRT*LZDyro2!VB2dEo1v z4Ig{|1hm$#SGS&ZP+k`Q(WmxenMLTvn@;WV%XDO(+q9V*etjXoxlJCaTHZ;!;Ob?B zg17fv2~38%hQ5JH;XcN1=VV3j|B_3t9Y`1Ild=+d{}!b5BBtaez4S|lz%N%*`P45E zDuPSbku8(RhdvOYl4PDr6n_7`y@S(iRPW0HK|7xI7ILzWgh)Krc0%2G-YX%5BL9NV z80lf6-k#)j$FSk81fy8_w$@6wjx`n>3DZGnPd3t#p_k+Q7KLH_7Y1WB)pqI6ng;E| z7a<;`rL-j7h4}3!p_P`XDLD6qEVf3J4bF#r*wceLQi9AZ(~qJ`pwg*0OkPuucWJ~8f*wX zd<80x`!ZLR2iw>hb$q~-OJi{id7JgU(W9V$zbHwnEQ%(*u+1LoQWV z-*}Rs>j1SOH(6pAC?sr}0WaAf5JEu+#V~M~&s{cQwd;U@2ZNU*Txkl99}6oSKad&0 z*)ePxc#>mm;k+RW7ey)b-O)cRf=5<%+Q0T(gh&+0!*gcvF|o4AlyKL_cwuDqx!;?h zeRA(?t6@P=p2$oPcj{IS=xh}2{}JzlngiT90t0wU6@nj`r%zz%{Zh-ug4j6ZR2=s7 z?RL>8pCbzHxMe~zwv*Qb#=ILsO%!X7(VpP?zHM1jrOJ=p^>6Rt@4b#l7Eo}(k_V+8 z$$u+Hhyas$xz}=Zw=`55UjJmGfIXAzc>tBYT&&1Xk1sZCij(lI1X6SPzD(Eoa){~(Or@=+YZ z81ow&3SP2(==!C&|DAlZX-HsKo=6Pj9dG#pJ&1cBRx1kZ(D7GL-0~i4G4KHgUtRxs zezcv{RJR?FdjHPcjKw{SR-mAtQA-Nxm(@c>Mesfd#KA&xbP%QLfvE^hzLFxiVuF?% z-4D$zx99j9j8KlvB10|u-^*dArDWcYQ9DyDk|YQ>yi4cBy=PZk6B~TEm}mN5EZkz( zPzpAiSK6)4DYpVlf5c=8B!O7Ldk@QOi89lwH}S(dZwBR4PZlN68l&&Cn)W?=L+jEd zLMlbUs1OFg;oPkreI4f&9TQjaEl}s-ObNx1LOWOd$#tt6R%krU0g;< z3_hlJ>WUX1oya`@%=C2X6#6`^k2E`Lm|P(@aamGHB*89)!Ew4n4PI|{`OeQPE=Mr7 z5MHXECaNq;aZkxP@op*a=3Y|MVbMz#x6-T?wQi*V7OAYpLzAVaN z@n_U~!LLp1C9iK;I;>;J4x{Ey`J~0wT9Ysr8X*Scu8cCK4kfTPcuhf#xEGdyp7Ek8A^(1tEdgSJFWvQAfh6+jEC0CSX^DIqbd9`mfpJ(`k2!o$2&Txr z!YKWcZYS9FguQ*7zrFs~&DIH54t)uTN^_@s=f>N&-kqw!d#zVukHO8)I$03+OAr=> zz!1rJI0J_FgF`ep?&j(<`Up4k@9aN*ln;gLWehqdQ7D9n5T^U}@G4!Qw5kk2Cy=Tq z?s7b)CUHu-?*4`A|L9h;|9oElm6Mi&L3NsNhTD@RGbCa{qSp58#eR*(D(VpO#Z zxdD$ygOeIPLYbDf*nU4_Q?5d~Q?=D+M10Lu{Miqm%?PnYZq%wPsz-Iu5mg9)IZ^T? z{Fmc}$XmbLe)oTijczxS+q}F-6m>H z9#{~;E2lxCG;Ww=8AGS+wiKNPl^2LR&P|A=*=oL%HfOqhEoz`Ea z=F^H3skAwWq5uc2(bK2X#RE8955w7#(8wvVin0aw7c~NW8OK!Wh_&46aRtr|nm+~f zu01)Ddkg>p#J>ZI#2> zcDzDNm3NcK5KM*9kklc|x6dlY{xvapL_i=3PtH-p`vOT{GV&KIML)`XPNG2XJqM=kp=y zfO2rOvSIH5o7@NhCWBU$4i?5+@c5P~u8$G1X8 z0z_gPg>%HB4_8I0oWHNEtU5gg|GttLQ`N6_yY9ZkG(8&KsNi%PA?}ErDewAv=zK09;W}5petD4VWw0o^pL1q*A_Lq( zI353jVADWOA7Evr=>l*iL4a5e*xyDBpB^FgJlxBMd6rYD_ksdav=EJ&Omi%L|L~rb z5}pm5#1pb{qmS_YrAY#~^+LZ=O|`0brff$-KO%0%Ry+Hh>GwLH@RKK+)83^(?x01iiXKPe_1dxIdZ7AiR}fVu&zaVYfIG@6bQ4kLRg+hh9>g z{4L?Rc9;EWiZnWGu`wLwJy%4?#e4NHaS$wUho^>}k@^!vmvhgmsd_)=1~!;`lvAdE z@>;V0D-A^rl1(tL_)7lS-F&vt1;f7}UC~Xo`zRO)z0j!IZk~sr06qqQ{{ZPdZ|%f```GdR@jlPz?Q&2{6c)3oX-{)_bvF9gWL3^Y|g&~+qUsDysM#AjWh zEY#B?Y*+Vjk%Ee3|1f3dodxF#bp(GsZ3W%Y4R5Fj=)n4o)_d zuS06n2%!gqh(zo*>K|_9m~`Y{n-l8LMV&J1A1S?*)==yw_x$<0Y-N-R!Gmw^t>Lyn zFpp7Wc~#F^yNAAz()XepM$$4BN)vy)9kcsb_#w$7lc02QAAY?%pP^wi254<}270OQ z;E*(>qosPDG9$Oco+o}{D)c&Hp(Xk0LsWDi@i?*0hqdB2`nOb#X-&^tCaco6>;!w9 zAEa6oF8)NJ*1##06dmRG7tNBhub57ssnJs=BFq6(G0?j)H8qH>T~WQ-pbKfiU7y~&m><5=M=CSc;*}7}hLFVfb{`UN5>#F;2~HvOgpjWW zX{F89Aap4VHx_pdByO8+c$qr&g!x* zbafGFcy$?bm3dzS0^YBbZPc=aI{YogTTqENjfeOQk5$i``B(sSc?`Hm9RfF)?z2^l z8OVd+ZO+||y_%aNwuiQ{(0|_AsmnfJhAU8mxl=qKCt0}6C}+Gv4~$jS=aYQr%5ac{ z?})_{g?DqLKX41ur7HK826^9aKjlQ+WZ3nohPOW&yW-u5z_0LcunGxyh^e|vemR?Lg(oV=Bw(AEBWb>Qn1rMRK=6D|jo{3for zB=^9W%})2=^`DF4R=qm#`oYr6{9&l~gSRZME~o&qqZd3Htlw~;&4ADbh2$dK(i>Hk z&(`j2!apbN*rKZDU(6=xvXtfyhiN=#)E)u(EnT06N+N>WCJ{DhL$+jc0`%vhmHyou zbt$oU|{OCd0i1 zQ{j9^+@>cZOS)^3PX@gWH(QYp55&PRi^K5Hr?|_t!NyE;XE(1ZVCv|6a?<*#qZ+`0 zGPt)*6u^s*#{UI9OXh?}>rpja=zSxdtQ}E`@2ftmc%02QAU867{=}L4u+$3usADKGp%@ zLWDhhGXOk{%5cZZ;h@Q(f{8_2U)^yw`8PQ}5578j)sK5sfNdEdEk{WHhV(57UVc)Q zPovB=oe*rG_lc63ALfN`Bu?hzjIq-ZAv|!3VRU{!XEAO$PW4WetK5gFBbA?D28Q5> z22b=vf@4}B=MyT>eh5$r#<&78#dy(PK4yuVfe1rnA_BiRifU6U?k|qI(7kC@Y?3;5n@f#gYR4Lv)~YlBFt}ANKO-%$UNK9ITi)ZZ{?a#C4S3G zFfkzxSB#PW6Sq>q*!q(42A1668>}yfJ|9!Vux-mVnf{}0Qhco`J7_mU_d`$^TrCm7 zj&tB+0(kr(tORe&m-pQ`eTj~lU4|^R?V+jj5SiJVHk&~!zrYRfUR3_|0ibIEC)%C! zfvi8v(sG;YXRG&%H1P(eREQooHJf~(5cxIH24^j$1>|X>UuZ&p{U3RtYZna6O|&BJ zeOol0=@JG7@rZZZueK6MO{}lf=MEZpgRqi)HFP1rcsUFsLn$R-ee6p&S{pB%e@N+yH(V&X z=;XK;`8`(BAWbq9s3rj&A8^63eRF05qtQ#WI9@3M8BVe}8IM)%>x=7hbz8NMaS#n7oJtdw z3CRG%p?|Vr4DQwI6>R@Sk6AX~CFzia_KDPEgWs8h#~^xb){XoI_WlDJ#G^)>Tyj`( zFigJ@Z;&OvRFK+c)qi`5KTI~Rz38RITkAcVBfC@$z5+i0BNPXK1cMb$qH*fsl{JWO z4Cdpd!5qt3Dg*6H&b~N4Kb@v2`5>GZNz00Xqi@ z-85+_H?mJL{pw6mF@zaDIikS}QWNe;6jHXDpY3(O*1xuHCjN3g1c6KHJ20UcTLni9;t}GS1c2>w~f+vsXWPx$#RGD-878Ap-coY1!Px>joa;sxz9;#f&~_ znH&|Wtj)an;#A7?t< z)Og{sSwjtvkYt0q>fu${#w~g)tRDJtE08?+l77pNp5-f;+=9nTO);H+r!x!5!vA=YId-E6|a}65QfHe zIy)z!e3mv{c|2_s_s?p0r;es%ZkXM@J;#27!A_4P@Sd@hW120Zkl*i#=A2t?-|=9RZbJh(FJmvp2#?x1^RT2 zng~0U2>J+SU)bBWjw}qP7SynAK2~^wL`_EQ>#e^a?qA?WA~m5FQvqy`w>t=p>bV$( zYr`tAbnch6&5ShfXDXk?L7xms6{@`Qv2M&qNyg4ec6*U8*~(fD^fA26x+kt^$o$ZY zHbBBs!7tYMHn$K%nRuEuMN9IW@PNhd5Rq-(>%TGzld%tz@=G~cg6G>+S}+;O&uMg| z48OfT7yuGOx7%3M8Ln;+9_gh&X(sr*=JkO1iQgVyeVBBgIT>m6*n7t37Z<1)lTR1& zyMq)rxtz2c!asoV7!hV`ZyVe99fpg);E&S#o{BV2rF`ta5;3zHSC1FPLK^|-Eg2AS zBQ!Y95bI|n&3XS3chP-sq(0RVYxI4I#V)b|a+6TbtMO$zRh^ZJO9*;#VMzcl(dr>y zm6_}5dAH@L6Ei%6DvH({%H>V?vj$f!Mbx^A+iaQaP{*{spbhhX7U6>5b^lKMz4cA}GnX zywZ($v*-?HgmfCjkQx3#Pc>_r>8y6fLPPrS?dZ_{%uUVj-@CaZpf4}KAQkWdJ$#gs z4#3wtCgG3XPW;mr1vYO>YfIg_7##sOID9c0WxDpN*g(d%9$&qWMdzdP!9=eKPvKVF z4|$o*^AEoSbe~UYxyHGeknf2R1YbLrJw`O2lo7_!u($b?lD^3?%pL9SJpDy&QM=wc zJdKqhc83$lxc1^S{Q~~gC|ZNN-@%(v2$c(aH>gaDA=P%K?QQv-f6h;`Jt^`}Zdq%- zUUIkUR3siWc(3ujn_e(Etl0z35BvjwFuUtD7W%G%L_LY_Ca9+DLDz`nu&0pQITanYXFk$Pn_TE(krJuA1eCm)Hp zbOqO^hf!6N8D^dEPOXpcsw#c5+Tltn74*LE>f!Ex3MsNHYD*y{|7l(e0s*&)AhZ7E zSX-e;lqI+a7Bd%Bom%OUc@XMXZc{$UlbGQ2#W(T0g<$Ht@@Q<*>wR13GRjts0Q4sI zCNOpg-1a;p>DKGKg2fzUaOT^MWx|IVOHy9gH1}`&kPBMk0 z^zAKzWhCi5j2sY9z1~(j^7UXob@O%YV}AqNwSTRD&kaE;BP?gE8={&e`uwHwf>ZC^HG~uW6AKv$y zYF3!#K6OrlfjTANs1KdpCwgJ2xaLH&e_iHWYfg}x9OwTF3Q)=LPC{~fs!IVZ?Bv~L zERXcg03UrL4d9scpq)vShU9wQvl@G}UmD9Ozzp|Sf+oD?GbW^ZVr%I2ap~CV))M_P zTY~B2XFO|TomY-rN7K_hr$l()Kh|HlUAdzML0lp74-Xxq>-IToGn%gbQ3`Zy{#lNS~Le?h`{EW`O4V4Em@`3wA+fSDh# z6~tXe5EZ7yk*cS!1hd$u*)VIEMz`5|TKz*#8qbRjkkfHLVy^_gf$F3Wkt7&*TXrVz z5rYc}Uq`*}ys!G)_O&%JKp?d6!){6n=!K%N^%uLOq zwCJ`Edsh0kaXEgOlxT?lX4c;!#w&|Ue(OisFkGwlj;(&y&^uqk{D&ftCdL4wB}t>) zP<6xxc>w}vI>##dBYtWLw{XaAZLk#xea_<|Ra;?xXV9G7ll1 zmQz8L;)2aduUHJp?kBgw=M1E^eA3KhFbDDAh|p)DU_ugRC}@}l#;|Z%zq{$2264%J zJWg(1FXl>%*1QRb_T~AUPyvF+N%XkyL8Lm>3qIRii*HR?Puk)*O_xw8cKSoz{fZ+e z3D6&b=sT3)uL_AoEA;4`vN|at;$n}N6K|V2&85uo*^vKmoEO3W&?I1p?B>Eq!WUM@ zeqK4e!6*E350J)=6bL%egNQ0MdIn}Hu1b2P@*p7}t?UEABMs4WuNYWAUi{-`7Q0fV zj**CD+k>I^c9oGg;gViVr0YQG*YERL?(DP9-8E0i*sOkah#bf43st|65f^Uz!m-`@ zYvrjkDI6bO!evSRyePc3_%q+f)86MqCELL_E;z#Qj@A>_69u}4qsVR)T}UWV5J(IR z1Sk}b8yW~nQ`0$~Qz?Eb`MdG|tGz1$hw|OqV;x(@TGmF4$Ql*Oo{+y}L=j~~#Uv&q z6S5{tG=>lr3dydFCCiLu?Ab;3wM1b?;>|LBumAs?^L^(!=Q`hVI@fo7UvpjNdN0iK z%=6sO^FGi0``y3Wn%1{VAUf!oro;R6qNR)2iuA)e-qcbEff7$I!9T^+!#ylZo zdZ6cH9|D_s^9^r3wfK0{=yI&GcAfZ3#F=z*m}6)iQ&6Fkzr5R z<#yxuX`Dwml?vJfsoKnPS)-m|!>5xPP%#^O8ZctmhuA6uYC`E~qP6O9qpNml$8+I} zusFySImlcUmlIU2TJr})CVZN-xm!_p)zgBCp`A9KOd7lhCJI=kbI(n~!-+Br8~sVP zKHwDOpNf#wBc260osI*oUWjt&^=lf#d*VA?y8^fYu+pJ&6%a-#vY=ip%g)DQ+C%~) z3MB3s#%Z>^ZEVHXSN0cSS!f&SA_4?awieGZ^aGR1WxUJ@Lfsz)h2ge z+J24T=o0^|a;C%fh02T1vI`@AX=%H^5wphWWtAJeME5U+`Z}%(NDBLkGFg1keOBWD&5xry_BG4mQUq0=)uhpuB93#+y zb9)w3LxH~_&Wg`=#7xpm;pB?(y6{83H>)yP=6~u0#^Djfq9#DQ5LQU`AF2FsnZPU9ACMVmG76+8lqqDI zASFE1U1Zy#I$^Khwqbycog;sl29Y9DcydlxdEl^x9#2h8^=m}$i6X@L_l;ox8VrMa z3CR7H(9TWcM54Rea_v}opSH)Doc-h1iEaHH*>tvN_e8M+ z;E(L!^OqdZZjRr_*}1H|QeXV7i7F$vxB=ILa8__Mcpwmn14ncN=Wiv1YgdqZj;xa~ zB+UMr?e8;&k)U=faYd_G53lv4L@vl~!PvIMP=J9;jbeAe6gwd8XcLA^kMF0B?=*5p zUMR<==vGk9=@O?nr}*mlZ0el&g6|)5@1;a(S?QUw9t2n-)sTZ-yHn0rmhpf@$W^11 zBVNLzSwYg~FS`tOzLz25U|Y*dQ(@1O90|VceqWKD#_vq)qNJ|IuIPhBL#41#>)y|? z_pGoOx6}^Y%LBE=L;*lHRFI*>Y_Y1`;3EX9&2%~`Qorh2F2=3yi> z)!&F380ins()XDPn}if85P&w7jro%s0V>L$o(eE1S40bW@WgjR~F)4=#<=c6~=y<_Kum80?s}T z^5{GAbt2?2TnyNp;n;GZriRLd5f(+w+%!#JRU{xP6F$22cFCT)D)%5}94Meeb&);E|+?OO{M{8az%ZYm9q!ZdNzk)b*N5hMR4H)xPVa$71 z2}ouSLjm6WgObf6Tr5Zk(|e8w)4c9Ya(Ez_K^1XCVx$jG5q~wPQLTB5&t%`SztqsoSS7Cg>^L zY55E;Oi=q>`YffTxk8JMC#{}L3COlC2ZMj!QS%5UcJ{dM8muV1=661MV0HW&q z1O_hfkne*RDQOW)f#@zSppBCqZdlUo?sm0OXrp4z}$_GFWIGY?(*k^R%4hPBQ1{gqMQ% zlAZ5tC|%80X`*m#k+*F(Bta)VH9-+vTFsc1<=#^BP9}4JiVN)4jc8tUzv0Mfn4(5R zs*n@{AF$MUCy<;HeL!(7&%^s@rEBsYg_b(XGn=gpXpp-5oCN$_4~h|OFF|Dnb9*P6 zbRpP8n%TLz+O8aQ?D#2D(<8ahRD^}*6b>5qF_qqNrnu5fpuwasEH47*6>c)j3s|?M zy~1t97U?CBEdglp1>XH@T-BIIbKTb0r1M&jNERDBxv>O@2u0o5c5<2O;*U?EhRj-uzK z48{9Dj#bC29M5kR;uB9Ewh5_S6ku4tU}@+f(!rFEFE={Frh8oOH=w%5=;_+`Gzg-Is?ETy&!G{Xg5(+}BF&B+r{ z7CNQQZn>lLDLQG0*NUJqXjxCSq$+s!ertZ?^iiSkx&T%J;J0a?9ZqR(qU_ZOK%C4|;_;j>$;_EC)OjcXBEwE4f}WI?*Wz`sT1P!t;46Kh#K=Su6w$ zu%4d^WS<9nhl~+(o#5k2Nei!*&TY*=`&vIn+{#@WHM_A8T{YIp*5#<*!U<}P8gXB? zsm*n^fkC!*x}2c*a{lto68Tn);9J=OF)CEy?4x4nd*1G7$ek>Ec5uCf1M%m9bt+Ts zp56=>+TOChD+GNZ?gB54>c>w!hY&N`^5dUBz`{{0pzs=WuKV0>2%ZTqr^E6V_NTHW zyA2!iRY)W86~X=Bbb7SqMy;7^NDH$^P*a}>jH3r8Dn?bGqc1wfL@WtD5%X!1pDa*Q z9%?^Bu}Nz5aNS6XDVpRTb&Wy4JkmDtdWr8utsAH4c26`9D`Ewbu$ne+$eKU{YL&o*PWzW34vaw018k|8YrCDb9xnUe~kfUO}m!QIJEd3~9 zPVnQnvM%Is8k_cdy{n?18Fe6Wx1abaTh#r?LV=KRuZs8e7O_JRuUe)k$maTVHn}B0 zXvk%c=XwkU4ZPO{vC*(ktkErQ~6x7u|I7e?YgQXsa!X1c~szl7xYb)Q-}(gYDJv>rrK z7lvpw+kOgkA%)Yp0S`)5J&}j<;>qEOT@%={y5*U#h)37)sN4I`d4<06JoEqx##vl5 z>}h={!F0YHzqoPvNM%VPc z0;ht`*P&={XZGM!zUoM)T4Y_NTT8S5U}n(HmgE@6*RK2aDrq3L8&JGJThDIOr%IhB zm#jaWBD>*kEUDx1^LpZ|NxLbP#tON(1NE#9oNzsuZ3q^Xe$wT?lt#9fqZ;Ph#xy-U^0xi3 z(FbOHrl$A_M`;Nz?u^X}i^xr_(NTc0YsPIU$9sQ)a=5o&>*Z9Z&5>X#+C@;ttJ~0V zwLAq+!lv;>e3G^H!(i0S3;D|!xe*PMsA8i_v7%ypnnA90{+yKfMkIE2>oky8)Hp33 zFff$A3M{5?YG*xE@{*E_Gl@Gj`Kpdd3Lg!*rK1Me?Z^qt=ISFz-Guq;P9^1Xhi13a z(7~@p!RKnU2o=G*{ZX4HSWErTx{aiUM_UHDXey_Rx6Kh#Z2r)b<2pyy#WxxoH1Ke-yyier zj?xj^k}9T@M=Q`8a`e4!F78PdBO&4v4J!A0&x(DUsqqQi6Cgh9e-7};2X-%DO2mzh zsF+26wJAbNbK?tC{jV zrr=Q2`5ryEq>DW_P*)hxT`ALu5&G0UpJL@}){$Nw_3=PQ;`uUTDOT3=VsUSKo*6PL zon|jwo=OYRGM`$G2A86Dd zh!w>+a!D8MCOXZmW=G&O=WgHeOAs3I?5n!F(tbPqgT$=TgfIAHS*95h_b2!sA`3Qy z>}!43UsekZZWwqb+H-7g?};5AJ#X%TQ$4`^o<#$~Tg!x)#an9$PnzGir1hXErPY}1 z2Dj`9mtAhJ$FUzwg|#SW`ZVvx6&rrts~4<(^sELWvEn&skrNNn_W}XCwvJPkBf;cO z_8B-QP(QP{e(r#`c){4y`5zEFN#Pr>5qIMWUfmwiWvQW4@Q4Y%09ls_{s8GuQ~-5~ z^2D+*K8y2VWrg4U1Wsx4is1?aVb@D;eJ1VoJGvl?K~2rd+PY3rZ!QuA*6WB2d*yno zO<2>o&WN8GXvPe=_1G-NmZUx6ZF`U`%u0Ltr}2QXz-~jg zW1z1{@NJto(d!a!D?=72QnK&sx{#QGfUde@q=rk=nqzX(rJ-j^-zlb-zIhP#s^` z{Z5nOPiOU*@tqoT@x1_SGBE=bO<`iDfEX_^;yxg@Pv^xzvWgu7Pw+5gcPE~73h_-n z$|N%n5>d18@L}BI9?I8-TWMT{TkNc){Wu}Qs{#Hq_c+zdaUUXI!~{RQeu0s3$w5PS zcEO(=FrR_#s-w!A0trG-uz8lLC_;u2%cwP5yFzZnk`tHBlpQnoyKiR&7^uxbk7t_e z6nO(g!3=pYSj|pMc%c>f;@UZ%wY9ADTS~9G#76U!JgU+^sXNKclUVGr%}CJJk9e%F zVD;%aXM9TUu+y;yVW$rnCbd4CF^vHiR;Mf5WSPQ&`+3-r6O^ap8I*M+9BNR?g{&6W zR-Bio!R@1Bu~K+i9rnou8+rkVaV`K(59(9Cs1M)DkWwnqypa2tnIlsG%6i(=lc96e z!JXMxTYzD1<8;Z)=d=isk1=^JDz<=aFB{yvKhYblbmazDL=RH}hbgz-X3gm-oZg?9 z(VtO#?f>I@{OFO=5=klj? zZqS@@LOig046KL31J=xdQyu`HY4?`5V#BvwNza2cV1Thd7|t~Cp`A3K9S*G5oGIE6 zC9NEXQwu?^nEv_n{-@*bC(b|Tg;aLx)zV8!$vHrFXW3)-)lDwbr};vj`7osBVD=wb zX#bO3Df(;vr#WUnJBIqZcY$m=7&M|ket|xK{d77!N}iv_r!BhaOygZ91d*lszlgfnfqG3_Qs_R7YcH&In zTGHdSKztLZW?BBmB-HHhTnYihdx=D;o}z$;HMQu^(Ke$%9H73doz z`nHh152v3#=w~kaNt1rQrn3rkE``n@(RnjETS%v8>7+EBivNWI5Y{)xervaWjYIa$ zes%lMIZ$_DQQDk~VF7jxQu7yc;Xj)U|M#xYpPupl3qEKEr-`(mEYLzf@=+ z_S5su=>Yo00QBxB%Vy{R`o#eBv+IP?0rZOj=w~Nz(*g900f?R_`b!P?&ptuIehmE^ DBf9K< literal 0 HcmV?d00001 diff --git a/images/Project cornerstone/3231532952152_.pic_hd.jpg b/images/Project cornerstone/3231532952152_.pic_hd.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b104984cda6af12df3441e8da936c25850bd3d46 GIT binary patch literal 199265 zcmeFa2T)Yc_CI)GhMaTGAPSOmPLc#fkSsxR&QTZ`MFGi4KmkD{NtPTWM-d4UB}d7~ z3|8CW8)!IYf`4gkr!PM&_AzD}NAtRnn^fTXgf4)hmCF#N_` zzai-)Q`~GKPy^k0g!f_}r5tv(M)E*YMaAl_zOI_4w(4(1NbXvDdAVVd0)V@RpO3z} zGOLNH87s~jC=DKf18@Me*0#Q0N_X#S|Kj=g{Wt%AE~nGKWd|nse)0Mz`M(2XcJ{uu zpz?P?avM8eTXzuG0RU9o*2~8a0I>GKbdEqjFA!scQUa7dpnxFe{DmF=!jiwR&0qMJ zoRmHW`YIsJ1Mra$T3h=#0s!$ZxmW{i9YH?CaUd4-uyghRaVv=BZJn&`K#T_QO?P)s z5R+U7@pYU3!N>7`U~6lee|TD3JN|?J(giFDR(#9Z*UQcN;qNd1PhQ;J{K5A69XP-% zp_7k>K6t16)o!kyTE8$Mh(CDP+|dOwIfy5nL5==}H=X=73_<*h9%bvR0=6YU4FH&g zcGkDFK+FhYc7InxrGH_0>)%%QiyqS~*vY^cOb7X6diZ$i|BF9nu!q|n?SJu!bF$a` z8^5vlRlNtMgEC+SJ2;m`%=png$^L#q&dev(c|!Kn&sqU)OuTWcVe|Zm^Te zuk^p_^4I?*Gx*FQfV(eLv!J{=3!wZsEV% z^Ox-Ye@l%gh=++sgQtjh{Xcai<{=jQN19){vHlOO|B}n*A5B#LX^;P`?cX`hfE`Gs z^`DfGXOLRR0Hg~t2x)~h0<4e@NE74}r0o~}SN&?g+s*Nx+Vp?7wJWHD^WQXrWr90` z=zr1wt*JGb`>Xz6&j#!>e)d6rpgjUAo?Z`qoE@F~Se3xh+MZR@!fKV*sdU1pxfTf2VPO2fH&I06wJK`uha@ zX7_sv17|~gfCTI*bO19rvs?!?5(dNp89)(G1#SbnfB|3%Sc2{B1h|7z2LdqQF%SvF zg0o{9kO|}h`M_JC0;mBRfmWak=m&;?F<=Uq2W{mmum>Q3Q{Wr}0|N(x2!jHH4ub`Q z3xgL!7()_69zzvF8$%z%6ypJgBZdctKL!lr2}UeN3PvVI9!3d9HAXW=7sepQXN*~l zRg4{sBaEMz5KKZ$N=zoqYnTFD82(!?^sa>NS6io{CC zD#EJA>I3`KSFBTPY;0<5Zfps#ubN`JV25DGVZXwz!tTWWjJ=M1f`fxYhr^2_hog&Q zjpK(CiSrVt9H#?k9Oo+z3YP$v1y>kX4c83U12-Hu9k&#>9d{ge3-=t46psr}8c!F` z4(}meB3=Pr3*IQ+SG;q4GJI})IeY_r7yQTgFYqhz`|ua=j|m6}*a@Tv^az{@9ud4C zct`MoV3ptpAvqxrp$efnp+8{)VKHGR;Vj`X5fRZfB1IxIB0r)8q7tGWq9q~}F$FO{ zu_mz{F`PJyxPf?__!|ix2^WbHi6u!eNjga_$tcM_DIV!HQWa8b(lF92(q_^b(i1WY zG9fZuGIz2#vQn}^vTbr4@@wR({ zFw8MxGV(C$GlnqcGk#(`VPa-dXYyit$<)KN&rHp%$n3)WoVlHOhlPSgp2eBvIZFr2 zE-MwQ5~~~Q3)Ws%1REop2Ae-y9@_}pIXgGIA$vG`75gFwK8GZS1IKfYZVm(|3#Sez zjI)e$jth@VlFNxJgKL26>>Bqq<7-jZ8n110({gKa2XmKkFI*?Ou5jJ^`kU*MH?VI= z-f+F~>c$ukCXX186HgY;C@&_jIIlDBE8fpHv2IG;^tk!v<_sSppAugHUm4#jKQ+HL ze>i_5|2F|n0W*PQfdPR_K`}u$!2-c~A#$PHLg7L!LPx?p!nVR$!jmFIB5ERVktPwO zD6go!XpZO?F$ysqu_&=_u?uktaUbzY@f`_Hi3bwd5;KyNl6NKJBtJ-DNhwRgrCOza zNQ+DRN!Lgp%J9j!%9P4%%W})w%NEG4%dyK@%jLXW

        IC!5d5@1%~7+z6U}9w0MC}0{6`fU0`yOp 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 Date: Tue, 10 Jul 2018 10:16:35 +0800 Subject: [PATCH 0600/2496] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20Sort=20=E6=95=B4?= =?UTF-8?q?=E7=90=86=E4=B8=AD=E7=9A=84=E5=9B=BE=E7=89=87=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Algorithm/Sort/Sort.ipynb | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/Algorithm/Sort/Sort.ipynb b/docs/Algorithm/Sort/Sort.ipynb index d69cb66cd..a38ab891f 100644 --- a/docs/Algorithm/Sort/Sort.ipynb +++ b/docs/Algorithm/Sort/Sort.ipynb @@ -21,7 +21,7 @@ " \n", "### 1.3、动图演示\n", "\n", - "![](../../../images/SortingAlgorithm/BubbleSort.gif)\n", + "![](/images/SortingAlgorithm/BubbleSort_1.gif)\n", "\n", "### 1.4、代码实现" ] @@ -178,7 +178,7 @@ " \n", "### 2.3、动图演示\n", "\n", - "![](../../../images/SortingAlgorithm/InsertSort_1.gif)\n", + "![](/images/SortingAlgorithm/InsertSort_1.gif)\n", "\n", "### 2.4、代码实现\n", "\n", @@ -244,7 +244,7 @@ " \n", "### 3.3、动图演示\n", "\n", - "![](../../../images/SortingAlgorithm/SelectionSort_1.gif)\n", + "![](/images/SortingAlgorithm/SelectionSort_1.gif)\n", "\n", "### 3.4、代码实现\n", "\n", @@ -314,7 +314,7 @@ " \n", "### 4.3、动图演示\n", "\n", - "![](../../../images/SortingAlgorithm/QuickSort_1.gif)\n", + "![](/images/SortingAlgorithm/QuickSort_1.gif)\n", "\n", "### 4.4、代码实现" ] @@ -419,11 +419,11 @@ "\n", "第一趟希尔排序,间隔为4\n", "\n", - "![](../../../images/SortingAlgorithm/ShellSort_2.png)\n", + "![](/images/SortingAlgorithm/ShellSort_2.png)\n", "\n", "第二趟排序:间隔为 2\n", "\n", - "![](../../../images/SortingAlgorithm/ShellSort_3.png)\n", + "![](/images/SortingAlgorithm/ShellSort_3.png)\n", "\n", "第三趟排序,间隔为 1,即 直接插入排序法(InsertSort):\n", "\n", @@ -453,11 +453,11 @@ " \n", "### 5.3、动图演示\n", "\n", - "![](../../../images/SortingAlgorithm/ShellSort_1.gif)\n", + "![](/images/SortingAlgorithm/ShellSort_1.gif)\n", "\n", "再附加一个静态图:\n", "\n", - "![](../../../images/SortingAlgorithm/ShellSort_4.png)\n", + "![](/images/SortingAlgorithm/ShellSort_4.png)\n", "\n", "### 5.4、代码实现" ] @@ -528,7 +528,7 @@ " \n", "### 6.3、动图演示\n", "\n", - "![](../../../images/SortingAlgorithm/MergeSort_1.gif)\n", + "![](/images/SortingAlgorithm/MergeSort_1.gif)\n", "\n", "### 6.4、代码实现\n", "\n", @@ -665,11 +665,11 @@ "\n", "依照其个位数决定将其加入哪个桶中\n", "\n", - "![](../../../images/SortingAlgorithm/RadixSort_2.png)\n", + "![](/images/SortingAlgorithm/RadixSort_2.png)\n", " \n", "### 7.3、动图演示\n", "\n", - "![](../../../images/SortingAlgorithm/RadixSort_1.gif)\n", + "![](/images/SortingAlgorithm/RadixSort_1.gif)\n", "\n", "### 7.4、代码实现\n", "\n", From 29a8c7e61a3d15bdc43da34a7e2fda055fa9bbaa Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Thu, 12 Jul 2018 12:56:26 +0800 Subject: [PATCH 0601/2496] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20=E5=86=92?= =?UTF-8?q?=E6=B3=A1=E6=8E=92=E5=BA=8F=20=E7=9A=84=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Algorithm/Sort/BubbleSort.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/Algorithm/Sort/BubbleSort.py b/docs/Algorithm/Sort/BubbleSort.py index ea31a39c3..c81be6335 100644 --- a/docs/Algorithm/Sort/BubbleSort.py +++ b/docs/Algorithm/Sort/BubbleSort.py @@ -2,17 +2,19 @@ # 冒泡排序 -# 1. 外层循环负责设置冒泡排序进行的次数 -# 2. 内层循环负责前后两两比较,求最大值放到最后 +# 1. 外层循环负责帮忙递减内存循环的次数【len-1, 1】 +# 2. 内层循环负责前后两两比较, index 的取值范围【0, len-2】 len-1-i 次,求最大值放到最后 def bubble_sort(nums): - for i in range(len(nums)-1): - for j in range(len(nums)-i-1): # j为列表下标 + # [1, len-1] + for i in range(1, len(nums)-1): + # [0, len-1-i] + for j in range(len(nums)-i): # j为列表下标 if nums[j] > nums[j+1]: nums[j], nums[j+1] = nums[j+1], nums[j] return nums if __name__ == "__main__": - nums = [5, 1, 9, 3, 2, 7] + nums = [2, 6, 8, 5, 1, 4, 9, 3, 7] bubble_sort(nums) print(nums) From 518ac8ec9cef0336d4ce16ef53a745b3fd554695 Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Thu, 12 Jul 2018 13:34:48 +0800 Subject: [PATCH 0602/2496] =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE=E5=88=B0=20src=20=E4=B8=8B=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Algorithm/Sort/README.md | 14 ++++----- .../Sort => src/py3.x/sort}/BubbleSort.py | 0 .../Sort => src/py3.x/sort}/InsertSort.py | 0 .../Sort => src/py3.x/sort}/MergeSort.py | 0 .../Sort => src/py3.x/sort}/QuickSort.py | 29 +++++++++---------- .../Sort => src/py3.x/sort}/RadixSort.py | 0 .../Sort => src/py3.x/sort}/SelectionSort.py | 0 .../Sort => src/py3.x/sort}/ShellSort.py | 0 8 files changed, 21 insertions(+), 22 deletions(-) rename {docs/Algorithm/Sort => src/py3.x/sort}/BubbleSort.py (100%) rename {docs/Algorithm/Sort => src/py3.x/sort}/InsertSort.py (100%) rename {docs/Algorithm/Sort => src/py3.x/sort}/MergeSort.py (100%) rename {docs/Algorithm/Sort => src/py3.x/sort}/QuickSort.py (58%) rename {docs/Algorithm/Sort => src/py3.x/sort}/RadixSort.py (100%) rename {docs/Algorithm/Sort => src/py3.x/sort}/SelectionSort.py (100%) rename {docs/Algorithm/Sort => src/py3.x/sort}/ShellSort.py (100%) diff --git a/docs/Algorithm/Sort/README.md b/docs/Algorithm/Sort/README.md index d1641a2b7..7f01a8d78 100644 --- a/docs/Algorithm/Sort/README.md +++ b/docs/Algorithm/Sort/README.md @@ -4,10 +4,10 @@ | 名称 | 动图 | 代码 | | --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | [RadixSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/RadixSort.py) | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/src/py3.x/sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/src/py3.x/sort/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/src/py3.x/sort/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/src/py3.x/sort/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/src/py3.x/sort/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/src/py3.x/sort/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | [RadixSort.py](/src/py3.x/sort/RadixSort.py) | diff --git a/docs/Algorithm/Sort/BubbleSort.py b/src/py3.x/sort/BubbleSort.py similarity index 100% rename from docs/Algorithm/Sort/BubbleSort.py rename to src/py3.x/sort/BubbleSort.py diff --git a/docs/Algorithm/Sort/InsertSort.py b/src/py3.x/sort/InsertSort.py similarity index 100% rename from docs/Algorithm/Sort/InsertSort.py rename to src/py3.x/sort/InsertSort.py diff --git a/docs/Algorithm/Sort/MergeSort.py b/src/py3.x/sort/MergeSort.py similarity index 100% rename from docs/Algorithm/Sort/MergeSort.py rename to src/py3.x/sort/MergeSort.py diff --git a/docs/Algorithm/Sort/QuickSort.py b/src/py3.x/sort/QuickSort.py similarity index 58% rename from docs/Algorithm/Sort/QuickSort.py rename to src/py3.x/sort/QuickSort.py index 4a9fb88cf..0d648f7b8 100644 --- a/docs/Algorithm/Sort/QuickSort.py +++ b/src/py3.x/sort/QuickSort.py @@ -2,35 +2,34 @@ # coding:utf8 -from __future__ import print_function -def quick_sort(l, start, end): +def quick_sort(nums, start, end): i = start j = end # 结束排序 if i >= j: return # 保存首个数值 - key = l[i] + key = nums[i] # 一次排序,i和j的值不断的靠拢,然后最终停止,结束一次排序 while i < j: # 和最右边的比较,如果>=key,然后j-1,慢慢的和前一个值比较;如果值key,那么就交换位置 - while i < j and key >= l[i]: - print(key, l[i], '*' * 30) + while i < j and key >= nums[i]: + print(key, nums[i], '*' * 30) i += 1 - l[j] = l[i] - l[i] = key + nums[j] = nums[i] + nums[i] = key # 左边排序 - quick_sort(l, start, j-1) + quick_sort(nums, start, i-1) # 右边排序 - quick_sort(l, i+1, end) + quick_sort(nums, i+1, end) if __name__ == "__main__": - l = [5, 1, 9, 3, 2, 7] - quick_sort(l, 0, len(l) - 1) - print(l) + nums = [2, 6, 8, 5, 1, 4, 9, 3, 7] + quick_sort(nums, 0, len(nums) - 1) + print(nums) diff --git a/docs/Algorithm/Sort/RadixSort.py b/src/py3.x/sort/RadixSort.py similarity index 100% rename from docs/Algorithm/Sort/RadixSort.py rename to src/py3.x/sort/RadixSort.py diff --git a/docs/Algorithm/Sort/SelectionSort.py b/src/py3.x/sort/SelectionSort.py similarity index 100% rename from docs/Algorithm/Sort/SelectionSort.py rename to src/py3.x/sort/SelectionSort.py diff --git a/docs/Algorithm/Sort/ShellSort.py b/src/py3.x/sort/ShellSort.py similarity index 100% rename from docs/Algorithm/Sort/ShellSort.py rename to src/py3.x/sort/ShellSort.py From b5101a0d305cad264a062def725861fb54894c0d Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Thu, 12 Jul 2018 13:50:02 +0800 Subject: [PATCH 0603/2496] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=92=8C=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/py3.x/sort/BubbleSort.py | 2 +- src/py3.x/sort/MergeSort.py | 29 ++++++++++++++--------------- src/py3.x/sort/QuickSort.py | 2 +- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/src/py3.x/sort/BubbleSort.py b/src/py3.x/sort/BubbleSort.py index c81be6335..e3aeba83d 100644 --- a/src/py3.x/sort/BubbleSort.py +++ b/src/py3.x/sort/BubbleSort.py @@ -17,4 +17,4 @@ def bubble_sort(nums): if __name__ == "__main__": nums = [2, 6, 8, 5, 1, 4, 9, 3, 7] bubble_sort(nums) - print(nums) + print('result:', nums) diff --git a/src/py3.x/sort/MergeSort.py b/src/py3.x/sort/MergeSort.py index 930ba6bd1..44de67ad2 100644 --- a/src/py3.x/sort/MergeSort.py +++ b/src/py3.x/sort/MergeSort.py @@ -1,23 +1,21 @@ # coding: utf-8 -from __future__ import print_function -def MergeSort(lists): - if len(lists) <= 1: - return lists - num = int(len(lists) / 2) +def MergeSort(nums): + if len(nums) <= 1: + return nums + num = int(len(nums)/2) # 从中间,进行数据的拆分, 递归的返回数据进行迭代排序 - left = MergeSort(lists[:num]) - right = MergeSort(lists[num:]) - print(left) - print("*" * 20) - print(right) - print("_" * 20) + left = MergeSort(nums[:num]) + right = MergeSort(nums[num:]) + print("left: ", left) + print("right: ", right) + print("-" * 20) return Merge(left, right) def Merge(left, right): - r, l = 0, 0 + l, r = 0, 0 result = [] while l < len(left) and r < len(right): if left[l] < right[r]: @@ -26,11 +24,12 @@ def Merge(left, right): else: result.append(right[r]) r += 1 - result += right[r:] result += left[l:] - print('result:', result) + result += right[r:] return result if __name__ == "__main__": - print(MergeSort([1, 2, 3, 4, 5, 6, 7, 90, 21, 23, 45])) + nums = [2, 6, 8, 5, 1, 4, 9, 3, 7] + nums = MergeSort(nums) + print('result:', nums) diff --git a/src/py3.x/sort/QuickSort.py b/src/py3.x/sort/QuickSort.py index 0d648f7b8..f8753b443 100644 --- a/src/py3.x/sort/QuickSort.py +++ b/src/py3.x/sort/QuickSort.py @@ -32,4 +32,4 @@ def quick_sort(nums, start, end): if __name__ == "__main__": nums = [2, 6, 8, 5, 1, 4, 9, 3, 7] quick_sort(nums, 0, len(nums) - 1) - print(nums) + print('result:', nums) From 64f04b49b4983e17d8b7a2fec5ddf45eabe70c1e Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Tue, 17 Jul 2018 16:26:17 +0800 Subject: [PATCH 0604/2496] =?UTF-8?q?=E6=9B=B4=E6=96=B0=2032.=20longest-va?= =?UTF-8?q?lid-parentheses/description=20=E6=9C=80=E9=95=BF=E6=9C=89?= =?UTF-8?q?=E6=95=88=E6=8B=AC=E5=8F=B7=20=E9=A2=98=E7=9B=AE=E5=92=8C?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../032._longest_valid_parentheses.md | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 docs/Leetcode_Solutions/032._longest_valid_parentheses.md diff --git a/docs/Leetcode_Solutions/032._longest_valid_parentheses.md b/docs/Leetcode_Solutions/032._longest_valid_parentheses.md new file mode 100644 index 000000000..708e401e1 --- /dev/null +++ b/docs/Leetcode_Solutions/032._longest_valid_parentheses.md @@ -0,0 +1,61 @@ +# 32. longest-valid-parentheses/description 最长有效括号 + +**难度: 困难** + +## 刷题内容 + +> 原题连接 + +* https://leetcode.com/problems/longest-valid-parentheses +* https://leetcode-cn.com/problems/longest-valid-parentheses/description + +> 内容描述 + +``` +给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。 + +示例 1: + +输入: "(()" +输出: 2 +解释: 最长有效括号子串为 "()" +示例 2: + +输入: ")()())" +输出: 4 +解释: 最长有效括号子串为 "()()" +``` + +## 解题方案 + +> 思路 1 + +* 动态规划 +* 1.初始化maxSum 数组,进行存储 +* 2.通过循坏,找到 ")", 然后开始寻找左边位置,加入动态规划 +* 如果存在,则返回: `target - 当前数字` 的 index 和 当前值的 index + +```python +class Solution: + def longestValidParentheses(self, s): + """ + :type s: str + :rtype: int + """ + # 学习地址: http://www.cnblogs.com/George1994/p/7531574.html + if len(s) == 0: + return 0 + dp = [0 for i in s] + # i 的区间 【0, len-2】 + for i in range(1, len(s)): + + if s[i] == ")": + # 寻找 左边 ( 未匹配出现的位置 + left = i - 1 - dp[i-1] + if left >= 0 and s[left] == "(": + dp[i] = dp[i-1] + 2 + # 这个是判断 left 前面连续的出现过匹配现象 + if left > 0: + dp[i] += dp[left-1] + return max(dp) +``` From 5a04392c2699f48139ad21309737f63da31fc6fe Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Tue, 17 Jul 2018 17:26:36 +0800 Subject: [PATCH 0605/2496] Update 032._longest_valid_parentheses.md --- .../032._longest_valid_parentheses.md | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/docs/Leetcode_Solutions/032._longest_valid_parentheses.md b/docs/Leetcode_Solutions/032._longest_valid_parentheses.md index 708e401e1..bbe71c169 100644 --- a/docs/Leetcode_Solutions/032._longest_valid_parentheses.md +++ b/docs/Leetcode_Solutions/032._longest_valid_parentheses.md @@ -30,32 +30,28 @@ > 思路 1 -* 动态规划 -* 1.初始化maxSum 数组,进行存储 -* 2.通过循坏,找到 ")", 然后开始寻找左边位置,加入动态规划 -* 如果存在,则返回: `target - 当前数字` 的 index 和 当前值的 index +* 动态规划,参考[banananana](http://www.cnblogs.com/George1994/p/7531574.html) +1. 用一个```dp```数组来存放以每个```index```为结尾的最长有效括号子串长度,例如:```dp[3] = 2```代表以```index为3```结尾的最长有效括号子串长度为```2``` +2. 很明显```dp[i]```和```dp[i-1]```之间是有关系的 +- 当```dp[i] == ‘(’```时,```dp[i]```显然为```0```, 由于我们初始化dp的时候就全部设为0了,所以这种情况压根不用写 +- 当```dp[i] == ')'```时, 如果在```dp[i-1]```的所表示的最长有效括号子串之前还有一个```'('```与```s[i]```对应,那么```dp[i] = dp[i-1] + 2```, 并且还可以继续往前追溯(如果前面还能连起来的话) ```python -class Solution: +class Solution(object): def longestValidParentheses(self, s): """ :type s: str :rtype: int """ - # 学习地址: http://www.cnblogs.com/George1994/p/7531574.html if len(s) == 0: return 0 - dp = [0 for i in s] - # i 的区间 【0, len-2】 + dp = [0 for i in range(len(s))] for i in range(1, len(s)): - - if s[i] == ")": - # 寻找 左边 ( 未匹配出现的位置 + if s[i] == ')': left = i - 1 - dp[i-1] - if left >= 0 and s[left] == "(": + if left >= 0 and s[left] == '(': dp[i] = dp[i-1] + 2 - # 这个是判断 left 前面连续的出现过匹配现象 - if left > 0: + if left > 0: # 这个是判断 left 前面是否能与后面继续连起来 dp[i] += dp[left-1] return max(dp) ``` From 18866ae8dd614bcbec9c5a812d888acb79d08b2e Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Tue, 17 Jul 2018 19:18:23 +0800 Subject: [PATCH 0606/2496] Update 032._longest_valid_parentheses.md --- docs/Leetcode_Solutions/032._longest_valid_parentheses.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Leetcode_Solutions/032._longest_valid_parentheses.md b/docs/Leetcode_Solutions/032._longest_valid_parentheses.md index bbe71c169..dd25b5247 100644 --- a/docs/Leetcode_Solutions/032._longest_valid_parentheses.md +++ b/docs/Leetcode_Solutions/032._longest_valid_parentheses.md @@ -1,4 +1,4 @@ -# 32. longest-valid-parentheses/description 最长有效括号 +# 32. longest-valid-parentheses 最长有效括号 **难度: 困难** From c1716f3dd53c6a8da0cd469e1f91831085691e4e Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Tue, 17 Jul 2018 20:06:22 +0800 Subject: [PATCH 0607/2496] Create 611._Valid_Triangle_Number.md --- .../611._Valid_Triangle_Number.md | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 docs/Leetcode_Solutions/611._Valid_Triangle_Number.md diff --git a/docs/Leetcode_Solutions/611._Valid_Triangle_Number.md b/docs/Leetcode_Solutions/611._Valid_Triangle_Number.md new file mode 100644 index 000000000..f17d298e2 --- /dev/null +++ b/docs/Leetcode_Solutions/611._Valid_Triangle_Number.md @@ -0,0 +1,102 @@ +# 611. Valid Triangle Number 有效三角形的个数 + +**难度: 中等** + +## 刷题内容 + +> 原题连接 + +* https://leetcode.com/problems/valid-triangle-number/description/ +* https://leetcode-cn.com/problems/valid-triangle-number/description/ + +> 内容描述 + +``` +给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。 + +示例 1: + +输入: [2,2,3,4] +输出: 3 +解释: +有效的组合是: +2,3,4 (使用第一个 2) +2,3,4 (使用第二个 2) +2,2,3 +注意: + +数组长度不超过1000。 +数组里整数的范围为 [0, 1000]。 +``` + +## 解题方案 + +> 思路 1 + +明确一点,三角形三边为a, b, c,那么何时满足可以组成一个三角形呢? +要同时满足以下3点: +1. a + b > c +2. a + c > b +3. b + c > a + +首先对数组逆向排序,固定第一个数字,我们发现```nums[i] >= nums[j] >= nums[k]```, +所以我们现在只需要保证```nums[j] + nums[k] > nums[i]```即可, +因为```nums[i] + nums[j] > nums[k]```和```nums[i] + nums[k] > nums[j]```是肯定的 + +后面开始二分,分两种情况: +- 如果```nums[j] + nums[k] > nums[i]```,那么我们只需要将```j += 1```使得比较式前面变小继续判断, +并且```res += k - j```,因为组合```i, j, [j+1...k]```都可以满足比较式,我们需要全部加起来,后面不会再次判断了 +- 如果```nums[j] + nums[k] <= nums[i]```,那么我们只需要将```k -= 1```使得比较式前面变大继续判断是否满足比较式 + + +```python +class Solution(object): + def triangleNumber(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + nums = sorted(nums)[::-1] + res = 0 + for i in range(len(nums)-2): + j, k = i + 1, len(nums) - 1 + while j < k: + if nums[k] + nums[j] > nums[i]: + res += k - j + j += 1 + else: + k -= 1 + return res +``` +这里真的我遇到了两次坑,首先如果我们排序用的是正向排序的话,那么我们需要做的是固定最后一个数,否则会出现(假如固定第一个数): +- 等式满足,我们将```j -= 1``,那么就有可能漏掉了一种情况,就是原本组合```i, j, [j+1...k-1]```可以满足,但是我们这里没有加上 +- 等式满足,我们将```k += 1``,那么就有可能漏掉了一种情况,就是原本组合```i, [j+1...k-1], k```可以满足,但是我们这里没有加上 + +所以二分法真的没有那么简单,我们需要充分根据实际场景去改变我们的固定位置和前后更新方向 + +这里也给出正向排序的代码: + + +```python +class Solution(object): + def triangleNumber(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + nums.sort() + res = 0 + for k in range(len(nums)-1, 1, -1): + i, j = 0, k - 1 + while i < j: + if nums[i] + nums[j] > nums[k]: + res += j - i + j -= 1 + + else: + i += 1 + return res +``` + + + From cc3fffab11cc866f14e3ad89950e6f1d93aeb518 Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Tue, 17 Jul 2018 21:35:40 +0800 Subject: [PATCH 0608/2496] =?UTF-8?q?=E6=9B=B4=E6=96=B0=EF=BC=9A=2062.=20u?= =?UTF-8?q?nique=20paths=20=E4=B8=8D=E5=90=8C=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Leetcode_Solutions/062._unique_paths.md | 75 ++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 docs/Leetcode_Solutions/062._unique_paths.md diff --git a/docs/Leetcode_Solutions/062._unique_paths.md b/docs/Leetcode_Solutions/062._unique_paths.md new file mode 100644 index 000000000..2fe544062 --- /dev/null +++ b/docs/Leetcode_Solutions/062._unique_paths.md @@ -0,0 +1,75 @@ +# 62. unique paths 不同路径 + +**难度: 中等** + +## 刷题内容 + +> 原题连接 + +* https://leetcode.com/problems/unique-paths +* https://leetcode-cn.com/problems/unique-paths/description + +> 内容描述 + +``` +一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 + +机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 + +问总共有多少条不同的路径? +``` + +![](https://leetcode-cn.com/static/images/problemset/robot_maze.png) + +``` +例如,上图是一个7 x 3 的网格。有多少可能的路径? + +说明:m 和 n 的值均不超过 100。 + +> 示例 1: + +输入: m = 3, n = 2 +输出: 3 +解释: +从左上角开始,总共有 3 条路径可以到达右下角。 +1. 向右 -> 向右 -> 向下 +2. 向右 -> 向下 -> 向右 +3. 向下 -> 向右 -> 向右 + +> 示例 2: + +输入: m = 7, n = 3 +输出: 28 +``` + +## 解题方案 + +> 思路 1 + +| | | | +| - | - | - | +| 1 | 1 | 1 | +| 1 | 2 | 3 | +| 1 | 3 | 6 | +| 1 | 4 | 10 | +| 1 | 5 | 15 | +| 1 | 6 | 21 | +| 1 | 7 | 28 | + +```python +class Solution: + def uniquePaths(self, m, n): + """ + :type m: int + :type n: int + :rtype: int + """ + if m < 1 or n < 1: + return 0 + dp = [0] *n + dp[0] = 1 + for i in range(0,m): + for j in range(1,n): + dp[j] += dp[j-1] + return dp[n-1] +``` From bb0efb3f1b3621b0e549a46ac5c0c7710030b40d Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Tue, 17 Jul 2018 21:54:07 +0800 Subject: [PATCH 0609/2496] Update 062._unique_paths.md --- docs/Leetcode_Solutions/062._unique_paths.md | 34 ++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/docs/Leetcode_Solutions/062._unique_paths.md b/docs/Leetcode_Solutions/062._unique_paths.md index 2fe544062..95f300a46 100644 --- a/docs/Leetcode_Solutions/062._unique_paths.md +++ b/docs/Leetcode_Solutions/062._unique_paths.md @@ -73,3 +73,37 @@ class Solution: dp[j] += dp[j-1] return dp[n-1] ``` + +> 思路 2 + +这道题我一看到就觉得这不就是排列组合吗,一共走m+n-2步, 其中m-1步是向右边走,所以不就是从m+n-2中选m-1个的问题吗,阶乘问题,so easy! 妈妈 +再也不用担心我的学习!! + +```python +class Solution(object): + def uniquePaths(self, m, n): + """ + :type m: int + :type n: int + :rtype: int + """ + def factorial(num): + res = 1 + for i in range(1, num+1): + res *= i + return res + return factorial(m+n-2)/factorial(n-1)/factorial(m-1) +``` + + + + + + + + + + + + + From 8e76e9559f33072bfbffd5ff0bbdb4fcfe551b07 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Tue, 17 Jul 2018 23:48:12 +0800 Subject: [PATCH 0610/2496] Update 062._unique_paths.md --- docs/Leetcode_Solutions/062._unique_paths.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Leetcode_Solutions/062._unique_paths.md b/docs/Leetcode_Solutions/062._unique_paths.md index 95f300a46..759ada816 100644 --- a/docs/Leetcode_Solutions/062._unique_paths.md +++ b/docs/Leetcode_Solutions/062._unique_paths.md @@ -77,7 +77,7 @@ class Solution: > 思路 2 这道题我一看到就觉得这不就是排列组合吗,一共走m+n-2步, 其中m-1步是向右边走,所以不就是从m+n-2中选m-1个的问题吗,阶乘问题,so easy! 妈妈 -再也不用担心我的学习!! +再也不用担心我的学习!!这个方法```beats 99.97%``` ```python class Solution(object): @@ -94,7 +94,7 @@ class Solution(object): return res return factorial(m+n-2)/factorial(n-1)/factorial(m-1) ``` - +另外补充一句,我发现math模块里面自带factorial函数,只要import math之后调用即可, From c787bd5671f75722a948189a3ab4e7d8f325a8fe Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 18 Jul 2018 00:40:37 +0800 Subject: [PATCH 0611/2496] Create 386._Lexicographical_Numbers.md --- .../386._Lexicographical_Numbers.md | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 docs/Leetcode_Solutions/386._Lexicographical_Numbers.md diff --git a/docs/Leetcode_Solutions/386._Lexicographical_Numbers.md b/docs/Leetcode_Solutions/386._Lexicographical_Numbers.md new file mode 100644 index 000000000..beceeab5a --- /dev/null +++ b/docs/Leetcode_Solutions/386._Lexicographical_Numbers.md @@ -0,0 +1,90 @@ +# 386. Lexicographical Numbers 字典序排数 + +**难度: 中等** + +## 刷题内容 + +> 原题连接 + +* https://leetcode.com/problems/lexicographical-numbers/description/ +* https://leetcode-cn.com/problems/lexicographical-numbers/description/ + +> 内容描述 + +``` + +给定一个整数 n, 返回从 1 到 n 的字典顺序。 + +例如, + +给定 n =1 3,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] 。 + +请尽可能的优化算法的时间复杂度和空间复杂度。 输入的数据 n 小于等于 5,000,000。 +``` + +## 解题方案 + +> 思路 1 + +那当然是直接转换成string比较排序啊,多么暴力,简单明了, ```beats 66.87%``` + +- 时间复杂度:O(NlogN) +- 空间复杂度:O(N) +```python +class Solution(object): + def lexicalOrder(self, n): + """ + :type n: int + :rtype: List[int] + """ + return sorted(range(1, n+1), key=lambda x: str(x)) +``` + +> 思路 2 + +其实我们每次只要知道下一个数是啥就行了 +例如对于67这个数, +- 它的下一个数要么是670(如果670 <= n )的话 +- 要么是68(如果68 <= n )的话, 同时还要注意,如果我们例子中n换成200的话,如果当前数字为199,那其实它的下一个数字应该是2而不是200, +所以这里我们要多加一个判断```(cur + 1) % 10 != 0```, 然后对于尾数是9的数字我们要一直除以10让它尾数不是9之后再加1,即```199 --> 2```的过程 +- 要么是7(当然7肯定小于n了,因为67都出现了) + +- 时间复杂度:O(N) +- 空间复杂度:O(1) + +这个方法```beats 94.59%``` + +```python +class Solution(object): + def lexicalOrder(self, n): + """ + :type n: int + :rtype: List[int] + """ + res = [] + cur = 1 + for i in range(n): + res.append(cur) + if (cur * 10 <= n): + cur *= 10 + elif cur + 1 <= n and (cur + 1) % 10 != 0: + cur += 1 + else: + while (cur/10) % 10 == 9: + cur /= 10 + cur = cur / 10 + 1 + return res +``` + + + + + + + + + + + + + From 92536ec1a5893e8578c30813e4d5864476f57582 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 18 Jul 2018 09:01:21 +0800 Subject: [PATCH 0612/2496] Update 105._construct_binary_tree_from_preorder_and_inorder_traversal.md --- ...ree_from_preorder_and_inorder_traversal.md | 110 ++++++------------ 1 file changed, 35 insertions(+), 75 deletions(-) diff --git a/docs/Leetcode_Solutions/105._construct_binary_tree_from_preorder_and_inorder_traversal.md b/docs/Leetcode_Solutions/105._construct_binary_tree_from_preorder_and_inorder_traversal.md index 7ed244dd9..86ecaf853 100644 --- a/docs/Leetcode_Solutions/105._construct_binary_tree_from_preorder_and_inorder_traversal.md +++ b/docs/Leetcode_Solutions/105._construct_binary_tree_from_preorder_and_inorder_traversal.md @@ -1,78 +1,47 @@ -###105. Construct Binary Tree from Preorder and Inorder Traversal +# 105. Construct Binary Tree from Preorder and Inorder Traversal 从前序与中序遍历序列构造二叉树 -题目: - +**难度: 中等** +## 刷题内容 -难度 : Medium +> 原题连接 +* https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/description/ +* https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/description/ -preorder 是 根 -> 左 -> 右 -inorder 是 左 -> 根 -> 右 - +> 内容描述 -首先pre的第一个就是整个树的root, 假设 pre[0] = in[k],那么in的前k-1个就是树的左子树,后面部分就是树的右子树,这样递归来看. +``` +根据一棵树的前序遍历与中序遍历构造二叉树。 -然后递归来看,对于前k-1个又是同样的道理吧。 +注意: +你可以假设树中没有重复的元素。 -然后用递归,写了一颗小树测试,感觉上是对的, +例如,给出 +前序遍历 preorder = [3,9,20,15,7] +中序遍历 inorder = [9,3,15,20,7] +返回如下的二叉树: -``` -class TreeNode(object): - def __init__(self, x): - self.val = x - self.left = None - self.right = None - -nodeA = TreeNode('A') -nodeB = TreeNode('B') -nodeC = TreeNode('C') -nodeD = TreeNode('D') -nodeE = TreeNode('E') -nodeF = TreeNode('F') - -nodeA.left = nodeB -nodeA.right = nodeC -nodeB.left = nodeD -nodeB.right = nodeE -nodeC.left = nodeF - - - # A - # / \ - # B C - # / \ / - # D E F - - -def construct(preorder, inorder): - if preorder == inorder == []: - return None - else: - rootVal = preorder[0] - root = TreeNode(rootVal) - k = inorder.index(rootVal) - if len(preorder) == len(inorder) == 1: - return root - else: - root.left = construct(preorder[1:1+k],inorder[:k]) - root.right = construct(preorder[k+1:],inorder[k+1:]) - return root -root = construct(['A','B','D','E','C','F'],['D','B','E','A','F','C']) - + 3 + / \ + 9 20 + / \ + 15 7 ``` -尝试AC发现,memory limit超,用大一点的数据测试RecursionError: maximum recursion depth exceeded。 +## 解题方案 -根据网上的参考改成偏iteration一点的递归, AC通过 +> 思路 1 -mark一下,为了避免数组的复杂操作,这里直接用左右界和数组的引用来代表一段前序遍历和中序遍历。直接用递归更改list本身不能AC,但是变成这样就可以AC,因为更改数组会拷贝数组带来很多内存和递归上的麻烦,是这样的么? +preorder 是 根 -> 左 -> 右 +inorder 是 左 -> 根 -> 右 -这个技巧还比较常见,就是用原本list的角标,而不去cut list本身 +首先pre的第一个就是整个树的root, 假设 pre[0] = in[k],那么in的前k-1个就是树的左子树,后面部分就是树的右子树,这样递归来看. +然后递归来看,对于前k-1个也是同样的道理 -``` +```python class Solution(object): def buildTree(self, preorder, inorder): """ @@ -80,21 +49,12 @@ class Solution(object): :type inorder: List[int] :rtype: TreeNode """ - def buildTree(preorder, inorder, lp, rp, li, ri): - if lp > rp or li > ri: - return None - - root = TreeNode(preorder[lp]) - k = inorder.index(preorder[lp]) - - # left node - left = buildTree(preorder, inorder, lp+1, lp + k - li, li, k - 1) - right = buildTree(preorder, inorder, lp + k - li + 1, rp, k+1, ri) - - root.left = left - root.right = right - - return root - - return buildTree(preorder, inorder, 0 , len(preorder) - 1, 0, len(inorder) -1) + if not preorder or len(preorder) == 0: + return None + root = TreeNode(preorder[0]) + k = inorder.index(preorder[0]) + root.left = self.buildTree(preorder[1:k+1], inorder[0:k]) + root.right = self.buildTree(preorder[k+1:], inorder[k+1:]) + return root ``` + From 00d795518ce8fd2734cf3d603b47e64c5fd3ae3e Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 18 Jul 2018 09:02:29 +0800 Subject: [PATCH 0613/2496] Update 105._construct_binary_tree_from_preorder_and_inorder_traversal.md --- ...truct_binary_tree_from_preorder_and_inorder_traversal.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/Leetcode_Solutions/105._construct_binary_tree_from_preorder_and_inorder_traversal.md b/docs/Leetcode_Solutions/105._construct_binary_tree_from_preorder_and_inorder_traversal.md index 86ecaf853..d1e482dfe 100644 --- a/docs/Leetcode_Solutions/105._construct_binary_tree_from_preorder_and_inorder_traversal.md +++ b/docs/Leetcode_Solutions/105._construct_binary_tree_from_preorder_and_inorder_traversal.md @@ -34,12 +34,12 @@ > 思路 1 +一句话,看到树🌲就要想到递归 + preorder 是 根 -> 左 -> 右 inorder 是 左 -> 根 -> 右 -首先pre的第一个就是整个树的root, 假设 pre[0] = in[k],那么in的前k-1个就是树的左子树,后面部分就是树的右子树,这样递归来看. - -然后递归来看,对于前k-1个也是同样的道理 +首先pre的第一个就是整个树的root, 假设 preorder[0] = inorder[k],那么inorder的前k-1个就是树的左子树,后面部分就是树的右子树 ```python class Solution(object): From f03401743c26c967dd6da5ddfa74cedee3a9f5fb Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 18 Jul 2018 09:02:51 +0800 Subject: [PATCH 0614/2496] Update 105._construct_binary_tree_from_preorder_and_inorder_traversal.md --- ...nstruct_binary_tree_from_preorder_and_inorder_traversal.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Leetcode_Solutions/105._construct_binary_tree_from_preorder_and_inorder_traversal.md b/docs/Leetcode_Solutions/105._construct_binary_tree_from_preorder_and_inorder_traversal.md index d1e482dfe..441679434 100644 --- a/docs/Leetcode_Solutions/105._construct_binary_tree_from_preorder_and_inorder_traversal.md +++ b/docs/Leetcode_Solutions/105._construct_binary_tree_from_preorder_and_inorder_traversal.md @@ -36,8 +36,8 @@ 一句话,看到树🌲就要想到递归 -preorder 是 根 -> 左 -> 右 -inorder 是 左 -> 根 -> 右 +- preorder 是 根 -> 左 -> 右 +- inorder 是 左 -> 根 -> 右 首先pre的第一个就是整个树的root, 假设 preorder[0] = inorder[k],那么inorder的前k-1个就是树的左子树,后面部分就是树的右子树 From 6c98d182d5f4ac95361dcd0b94082d69e1d8f916 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 18 Jul 2018 09:41:29 +0800 Subject: [PATCH 0615/2496] Create 693._Binary_Number_with_Alternating_Bits.md --- ...93._Binary_Number_with_Alternating_Bits.md | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 docs/Leetcode_Solutions/693._Binary_Number_with_Alternating_Bits.md diff --git a/docs/Leetcode_Solutions/693._Binary_Number_with_Alternating_Bits.md b/docs/Leetcode_Solutions/693._Binary_Number_with_Alternating_Bits.md new file mode 100644 index 000000000..f95ae536e --- /dev/null +++ b/docs/Leetcode_Solutions/693._Binary_Number_with_Alternating_Bits.md @@ -0,0 +1,73 @@ +# 693. Binary Number with Alternating Bits 交替位二进制数 + +**难度: 中等** + +## 刷题内容 + +> 原题连接 + +* https://leetcode.com/problems/binary-number-with-alternating-bits/description/ +* https://leetcode-cn.com/problems/binary-number-with-alternating-bits/description/ + +> 内容描述 + +``` +给定一个正整数,检查他是否为交替位二进制数:换句话说,就是他的二进制数相邻的两个位数永不相等。 + +示例 1: + +输入: 5 +输出: True +解释: +5的二进制数是: 101 +示例 2: + +输入: 7 +输出: False +解释: +7的二进制数是: 111 +示例 3: + +输入: 11 +输出: False +解释: +11的二进制数是: 1011 + 示例 4: + +输入: 10 +输出: True +解释: +10的二进制数是: 1010 +``` + +## 解题方案 + +> 思路 1 + +太简单了,可以一行秒,但是太难看了,还是多写几行吧 + +调用bin函数转换成二进制以后再转换成字符串,注意二进制前面2为是‘0b’,要记得去掉 + +```python +class Solution(object): + def hasAlternatingBits(self, n): + """ + :type n: int + :rtype: bool + """ + tmp = str(bin(n))[2:] + res = [tmp[i] != tmp[i-1] for i in range(1, len(tmp))] + return all(res) +``` + + + + + + + + + + + + From af0ebf585d5ba605246935089fc3f91ddabacf41 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 18 Jul 2018 11:29:46 +0800 Subject: [PATCH 0616/2496] Create 777. Swap_Adjacent_in_LR_String.md --- .../777. Swap_Adjacent_in_LR_String.md | 133 ++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 docs/Leetcode_Solutions/777. Swap_Adjacent_in_LR_String.md diff --git a/docs/Leetcode_Solutions/777. Swap_Adjacent_in_LR_String.md b/docs/Leetcode_Solutions/777. Swap_Adjacent_in_LR_String.md new file mode 100644 index 000000000..af0a30019 --- /dev/null +++ b/docs/Leetcode_Solutions/777. Swap_Adjacent_in_LR_String.md @@ -0,0 +1,133 @@ +# 777. Swap Adjacent in LR String 在LR字符串中交换相邻字符 + +**难度: 中等** + +## 刷题内容 + +> 原题连接 + +* https://leetcode.com/problems/swap-adjacent-in-lr-string/description/ +* https://leetcode-cn.com/problems/swap-adjacent-in-lr-string/description/ + +> 内容描述 + +``` + +在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串(例如"RXXLRXRXL")中进行移动操作。一次移动操作指用一个"LX"替换一个"XL",或者用一个"XR"替换一个"RX"。现给定起始字符串start和结束字符串end,请编写代码,当且仅当存在一系列移动操作使得start可以转换成end时, 返回True。 + +示例 : + +输入: start = "RXXLRXRXL", end = "XRLXXRRLX" +输出: True +解释: +我们可以通过以下几步将start转换成end: +RXXLRXRXL -> +XRXLRXRXL -> +XRLXRXRXL -> +XRLXXRRXL -> +XRLXXRRLX +注意: + +1 <= len(start) = len(end) <= 10000。 +start和end中的字符串仅限于'L', 'R'和'X'。 +``` + +## 解题方案 + +> 思路 1 + +这道题就是一道坑比题,为什么我这么说,题目都说了是 **Adjacent**,然后XL换成LX的情况居然包括"XXXXXLXXXX"到"LXXXXXXXXX", +你说这是 **Adjacent**吗,XL不相邻也可以换,我去nm的,不好意思爆粗口了。 + +先说一下XL必须相邻的解法吧,不能白费我功夫啊。 + +动态规划:dp[i]代表以```index i```结尾的字串是否能够被替换成功,首先dp[0]必须等于False吧,所以我们初始化全部设为False,然后把dp[1]也先判断好 + +那么很显然,对于dp[i]有下面的情况: +1. dp[i-1] == True +- 如果start[i] == end[i],那么dp[i] = True +- 如果start[i] != end[i],那么这里我们不做操作,因为初始化就是False + +2. dp[i-1] == False +- 如果start[i] == end[i],那么dp[i] = False +- 如果start[i] != end[i],那么只有当最后两个字符可以转换且dp[i-2] == True的情况下dp[i]才为True + +最后返回dp[-1] + + +``` +class Solution(object): + def canTransform(self, start, end): + """ + :type start: str + :type end: str + :rtype: bool + """ + if not start or len(start) == 0: + return True + if len(start) == 1: + return False + + dp = [False for i in range(len(start))] + if start[:2] == 'XL' and end[:2] == 'LX' or start[:2] == 'RX' and end[:2] == 'XR' or start[:2] == end[:2]: + dp[1] = True + for i in range(2, len(dp)): + if dp[i-1]: + if start[i] == end[i]: + dp[i] = True + else: + if start[i] == 'L' and start[i-1] == 'X' and end[i] == 'X' and end[i-1] == 'L' and dp[i-2]: + dp[i] = True + if start[i] == 'X' and start[i-1] == 'R' and end[i] == 'R' and end[i-1] == 'X' and dp[i-2]: + dp[i] = True + return dp[-1] +``` +接下来说一下XL可以不相邻的情况吧。 +用```rx``` 和 ```xl```来存储出现了可以替换的可能性,即当start出现X或者R的时候,如果后面又开始出现结尾情况了, +我们就要pop一下对应的```rx``` 和 ```xl```中的一个 + +```python +class Solution(object): + def canTransform(self, start, end): + """ + :type start: str + :type end: str + :rtype: bool + """ + if not start or len(start) == 0 or start == end: + return True + if len(start) == 1: + return False + + xl, rx = [], [] + for i in range(len(start)): + if start[i] == end[i]: + continue + elif start[i] == 'X' and end[i] == 'L': + xl.append('L') + elif start[i] == 'L' and end[i] == 'X': + if not xl: + return False + xl.pop() + elif start[i] == 'R' and end[i] == 'X': + rx.append('R') + elif start[i] == 'X' and end[i] == 'R': + if not rx: + return False + rx.pop() + else: + return False + return not rx and not xl +``` + + + + + + + + + + + + From a554f70db937656bf414a5bf6627301f3fc15f60 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 18 Jul 2018 16:52:48 +0800 Subject: [PATCH 0617/2496] Update 072._edit_distance.md --- docs/Leetcode_Solutions/072._edit_distance.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/Leetcode_Solutions/072._edit_distance.md b/docs/Leetcode_Solutions/072._edit_distance.md index 90f0bc775..3a502d081 100644 --- a/docs/Leetcode_Solutions/072._edit_distance.md +++ b/docs/Leetcode_Solutions/072._edit_distance.md @@ -35,10 +35,13 @@ Hard 简单说,就是这样: -1.delete:dp[i-1][j] + 1 —— 保留了从 word1[0~i-1] 转变到 word2[0~j] 的最优操作次数,因为我们的 word1 的 0~i-1 已经能够转变到 word2 了, +1.delete:dp[i-1][j] + 1 —— 保留了从 word1[0:i-1] 转变到 word2[0:j] 的最优操作次数,因为我们的 word1 的 0~i-1 已经能够转变到 word2 了, 所以我们就直接把 word1 中的最后一个字符删除掉就行了。所以就需要额外进行一个 删除 操作。 -2.insert:dp[i][j-1] + 1 —— 保留了从 word1[0~i] 转变到 word2[0~j-1] 的最优操作次数,因为我们的 word1 的 0~i 只能转变到 word2 的倒数第二位,所以我们就直接在 word1 的末尾添加一个与 word2 的最后一个字符相同的字符就可以了。所以就需要额外进行一个 插入 操作。 -3.replace:dp[i-1][j-1] + 1 —— 保留了从 word1[0~i-1] 转变到 word2[0~j-1] 的最优操作次数,因为我们的 word1 的 0~i-1 只能转变到 word2 的倒数第二位,而 word1 的最后一位与 word2 的最后一位是不同的,所以现在的情况只需要额外的一个 替换 操作即可。 + +2.insert:dp[i][j-1] + 1 —— 保留了从 word1[0:i] 转变到 word2[0:j-1] 的最优操作次数,因为我们的 word1 的 0~i 只能转变到 word2 的倒数第二位,所以我们就直接在 word1 的末尾添加一个与 word2 的最后一个字符相同的字符就可以了。所以就需要额外进行一个 插入 操作。 + +3.replace:dp[i-1][j-1] + 1 —— 保留了从 word1[0:i-1] 转变到 word2[0:j-1] 的最优操作次数,因为我们的 word1 的 0~i-1 只能转变到 word2 的倒数第二位,而 word1 的最后一位与 word2 的最后一位是不同的,所以现在的情况只需要额外的一个 替换 操作即可。 + 无论我们选取上面 3 中操作的哪种操作,我们选其中最小的值就可以了。 参考链接:http://www.cnblogs.com/pandora/archive/2009/12/20/levenshtein_distance.html From ea7281d7702be979544ef4b573f6a61b486de49f Mon Sep 17 00:00:00 2001 From: chenyyx Date: Wed, 18 Jul 2018 18:24:44 +0800 Subject: [PATCH 0618/2496] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20032=20=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../032._longest_valid_parentheses.ipynb | 180 ++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 docs/Leetcode_Solutions/032._longest_valid_parentheses.ipynb diff --git a/docs/Leetcode_Solutions/032._longest_valid_parentheses.ipynb b/docs/Leetcode_Solutions/032._longest_valid_parentheses.ipynb new file mode 100644 index 000000000..56e88640c --- /dev/null +++ b/docs/Leetcode_Solutions/032._longest_valid_parentheses.ipynb @@ -0,0 +1,180 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "# 032.longest-valid-parentheses 最长有效括号\n", + "\n", + "### 难度:Easy\n", + "\n", + "## 刷题内容\n", + "\n", + "> 原题链接\n", + "\n", + " - 中文:https://leetcode-cn.com/problems/longest-valid-parentheses/description\n", + " - 英文:https://leetcode.com/problems/longest-valid-parentheses\n", + " \n", + "> 内容描述\n", + "\n", + "```\n", + "给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。\n", + "\n", + "示例 1:\n", + "输入: \"(()\"\n", + "输出: 2\n", + "解释: 最长有效括号子串为 \"()\"\n", + "\n", + "示例 2:\n", + "输入: \")()())\"\n", + "输出: 4\n", + "解释: 最长有效括号子串为 \"()()\"\n", + "```\n", + "\n", + "## 解题方案\n", + "\n", + "> 思路 1\n", + "\n", + "**注:** 千万注意,这个题上来就坑了一下,题目没有说清楚一种情况,比如 (()) ,这种情况,有效括号子串是 4 ,而不是错误的。\n", + "\n", + "实际上,在看到这个最长有效括号的题目的时候,我就想到了之前我们做的一个题目。LeetCode 20 题,它的解法是如何使用堆栈判断括号序列是否可以成功配对。我们仍然可以将堆栈的思想延续到这里。\n", + "\n", + "每当遇到一个左括号或者是无法成对的右括号,就将它压入栈中,可以成对的括号则从栈中 pop 出。这样栈中剩下的就是无法成对的括号的下标。这时我们可以判断这些下标间的距离来获得最大的成对括号长度。 **在这里,我们需要先遍历一遍字符串,再遍历一下非空的堆栈。一定要注意,这里我们遍历的非空的栈存储的是没有匹配上的括号下标,匹配上的我们都已经做了pop 处理。**" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6\n", + "4\n" + ] + } + ], + "source": [ + "class Solution:\n", + " def longestValidParentheses(self, s):\n", + " \"\"\"\n", + " :type s: str\n", + " :rtype: int\n", + " \"\"\"\n", + " # 创建一个 stack ,用来做 栈 的操作\n", + " stack = []\n", + " # 第一次遍历 s 字符串\n", + " for i in range(len(s)):\n", + " # 如果当前循环到的 字符 是 右括号,那就要 检查一下栈内是否有与之匹配的 左括号\n", + " if s[i] == ')':\n", + " # stack 如果不为空,并且 stack 的栈顶元素存储的下标在 s 字符串中是 左括号\n", + " if stack and s[stack[-1]] == '(':\n", + " # 将栈顶元素 pop 出来,与当前的 右括号 配对\n", + " stack.pop()\n", + " # 直接 continue\n", + " continue\n", + " stack.append(i)\n", + " # 设置 最大长度\n", + " max_length = 0\n", + " # 设置为当前字符串 s 的长度\n", + " next_index = len(s)\n", + " # 遍历 非空的栈\n", + " while stack:\n", + " # 当前的栈顶存储的 s 的下标\n", + " cur_index = stack.pop()\n", + " # 计算下一个有效的最长括号长度\n", + " cur_length = next_index - cur_index - 1\n", + " # 将之与 之前存储的 max_length 比较,留下较大值\n", + " max_length = max(cur_length, max_length)\n", + " # 下一个的有效括号的右索引赋值,接着进入下一次循环,一直到 stack 为空\n", + " next_index = cur_index\n", + " # 遍历到最后的时候,肯定 next_index 即是有效符号的长度,与 max_length 做比较,取较大值\n", + " return max(next_index, max_length)\n", + " \n", + " \n", + "s = Solution()\n", + "print(s.longestValidParentheses(\"()(())\"))\n", + "print(s.longestValidParentheses(\"()()(()\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> 思路 2\n", + "\n", + "使用动态规划(dynamic programming)思想来做这个问题。\n", + "\n", + "下面是 片刻 大佬想出来的,我感觉思想真的超棒。参考链接:http://www.cnblogs.com/George1994/p/7531574.html\n", + "\n", + "1. 用一个 dp 数组来存放以每个 index 为结尾的最长有效括号子串长度,例如:dp[3] = 2 代表以 index 为 3 结尾的最长有效括号子串长度为 2\n", + "2. 很明显,dp[i] 和 dp[i-1] 之间是有关系的。\n", + " - 当 dp[i] 所在的索引 i 在字符串 s 中代表的字符是 \"(\" 时,也就是 s[i] == '(' ,很显然,此时的 dp[i] 与之前的一个关系是 dp[i] = dp[i-1] + 0,也就是不用处理。\n", + " - 当 dp[i] 所在的索引 i 在字符串 s 中代表的字符是 \")\" 时,也就是 s[i] == ')' 时,如果在 dp[i-1] 的所表示的最长有效括号子串之前还有一个 '(' 与 s[i] 对应,那么 dp[i] = dp[i-1] + 2,并且还可以继续往前追溯(如果前面还能连接起来的话)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6\n", + "4\n" + ] + } + ], + "source": [ + "class Solution(object):\n", + " def longestValidParentheses(self, s):\n", + " \"\"\"\n", + " :type s: str\n", + " :rtype: int\n", + " \"\"\"\n", + " if len(s) == 0:\n", + " return 0\n", + " dp = [0 for i in range(len(s))]\n", + " for i in range(1, len(s)):\n", + " if s[i] == ')':\n", + " left = i - 1 - dp[i-1]\n", + " if left >= 0 and s[left] == '(':\n", + " dp[i] = dp[i-1] + 2\n", + " if left > 0: # 这个是判断 left 前面是否能与后面继续连起来\n", + " dp[i] += dp[left-1]\n", + " return max(dp)\n", + "\n", + "s = Solution()\n", + "print(s.longestValidParentheses(\"()(())\"))\n", + "print(s.longestValidParentheses(\"()()(()\"))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 9b3413413177715ff1245e6a342db29cf3961391 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 18 Jul 2018 18:47:50 +0800 Subject: [PATCH 0619/2496] Update 032._longest_valid_parentheses.md --- docs/Leetcode_Solutions/032._longest_valid_parentheses.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Leetcode_Solutions/032._longest_valid_parentheses.md b/docs/Leetcode_Solutions/032._longest_valid_parentheses.md index dd25b5247..ac19c7a1d 100644 --- a/docs/Leetcode_Solutions/032._longest_valid_parentheses.md +++ b/docs/Leetcode_Solutions/032._longest_valid_parentheses.md @@ -33,8 +33,8 @@ * 动态规划,参考[banananana](http://www.cnblogs.com/George1994/p/7531574.html) 1. 用一个```dp```数组来存放以每个```index```为结尾的最长有效括号子串长度,例如:```dp[3] = 2```代表以```index为3```结尾的最长有效括号子串长度为```2``` 2. 很明显```dp[i]```和```dp[i-1]```之间是有关系的 -- 当```dp[i] == ‘(’```时,```dp[i]```显然为```0```, 由于我们初始化dp的时候就全部设为0了,所以这种情况压根不用写 -- 当```dp[i] == ')'```时, 如果在```dp[i-1]```的所表示的最长有效括号子串之前还有一个```'('```与```s[i]```对应,那么```dp[i] = dp[i-1] + 2```, 并且还可以继续往前追溯(如果前面还能连起来的话) +- 当```s[i] == ‘(’```时,```dp[i]```显然为```0```, 由于我们初始化dp的时候就全部设为0了,所以这种情况压根不用写 +- 当```s[i] == ')'```时, 如果在```dp[i-1]```的所表示的最长有效括号子串之前还有一个```'('```与```s[i]```对应,那么```dp[i] = dp[i-1] + 2```, 并且还可以继续往前追溯(如果前面还能连起来的话) ```python class Solution(object): From 1240f2320e53be0d039834469fc69f8c19e2fdb3 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 18 Jul 2018 19:11:38 +0800 Subject: [PATCH 0620/2496] Update 032._longest_valid_parentheses.md --- .../032._longest_valid_parentheses.md | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/docs/Leetcode_Solutions/032._longest_valid_parentheses.md b/docs/Leetcode_Solutions/032._longest_valid_parentheses.md index ac19c7a1d..7042c1767 100644 --- a/docs/Leetcode_Solutions/032._longest_valid_parentheses.md +++ b/docs/Leetcode_Solutions/032._longest_valid_parentheses.md @@ -55,3 +55,33 @@ class Solution(object): dp[i] += dp[left-1] return max(dp) ``` + +> 思路 2 + +每当遇到一个左括号或者是无法成对的右括号,就将它压入栈中,可以成对的括号则从栈中 pop 出。这样栈中剩下的就是无法成对的括号的下标。这时我们可以判断这些下标间的距离来获得最大的成对括号长度。 在这里,我们需要先遍历一遍字符串,再遍历一下非空的堆栈。一定要注意,这里我们遍历的非空的栈存储的是没有匹配上的括号下标,匹配上的我们都已经做了pop 处理。 + + +```python +class Solution(object): + def longestValidParentheses(self, s): + """ + :type s: str + :rtype: int + """ + stack = [] + for i in range(len(s)): + if s[i] == ')': + if stack and s[stack[-1]] == '(': ## 这里要注意,不能想当然地用s[i-1],因为我们有些下标直接continue了没有存到栈中去 + stack.pop() + continue + stack.append(i) + max_length = 0 + next_index = len(s) + while stack: + cur_index = stack.pop() + cur_length = next_index - cur_index - 1 + max_length = max(cur_length, max_length) + next_index = cur_index + return max(next_index, max_length) +``` + From cc4ffb95133f663227d98f2c9a923667a33d19a2 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 19 Jul 2018 11:41:49 +0800 Subject: [PATCH 0621/2496] Create 707._Design_Linked_List.md --- .../707._Design_Linked_List.md | 111 ++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 docs/Leetcode_Solutions/707._Design_Linked_List.md diff --git a/docs/Leetcode_Solutions/707._Design_Linked_List.md b/docs/Leetcode_Solutions/707._Design_Linked_List.md new file mode 100644 index 000000000..7623a50ac --- /dev/null +++ b/docs/Leetcode_Solutions/707._Design_Linked_List.md @@ -0,0 +1,111 @@ +# 707. Design Linked List + +**难度: Easy** + +## 刷题内容 + +> 原题连接 + +* https://leetcode.com/problems/design-linked-list/description/ + +> 内容描述 + +``` +Design your implementation of the linked list. You can choose to use the singly linked list or the doubly linked list. A node in a singly linked list should have two attributes: val and next. val is the value of the current node, and next is a pointer/reference to the next node. If you want to use the doubly linked list, you will need one more attribute prev to indicate the previous node in the linked list. Assume all nodes in the linked list are 0-indexed. + +Implement these functions in your linked list class: + +get(index) : Get the value of the index-th node in the linked list. If the index is invalid, return -1. +addAtHead(val) : Add a node of value val before the first element of the linked list. After the insertion, the new node will be the first node of the linked list. +addAtTail(val) : Append a node of value val to the last element of the linked list. +addAtIndex(index, val) : Add a node of value val before the index-th node in the linked list. If index equals to the length of linked list, the node will be appended to the end of linked list. If index is greater than the length, the node will not be inserted. +deleteAtIndex(index) : Delete the index-th node in the linked list, if the index is valid. +Example: + +MyLinkedList linkedList = new MyLinkedList(); +linkedList.addAtHead(1); +linkedList.addAtTail(3); +linkedList.addAtIndex(1, 2); // linked list becomes 1->2->3 +linkedList.get(1); // returns 2 +linkedList.deleteAtIndex(1); // now the linked list is 1->3 +linkedList.get(1); // returns 3 +Note: + +All values will be in the range of [1, 1000]. +The number of operations will be in the range of [1, 1000]. +Please do not use the built-in LinkedList library. +``` + +## 解题方案 + +> 思路 1 + +用list模拟,太简单了,🙄️🙄️🙄️ + +```python +class MyLinkedList(object): + + def __init__(self): + """ + Initialize your data structure here. + """ + self.lst = [] + + + def get(self, index): + """ + Get the value of the index-th node in the linked list. If the index is invalid, return -1. + :type index: int + :rtype: int + """ + if index > len(self.lst) - 1 or index < 0: + return -1 + return self.lst[index] + + + def addAtHead(self, val): + """ + Add a node of value val before the first element of the linked list. After the insertion, the new node will be the first node of the linked list. + :type val: int + :rtype: void + """ + self.lst.insert(0, val) + + + def addAtTail(self, val): + """ + Append a node of value val to the last element of the linked list. + :type val: int + :rtype: void + """ + self.lst.append(val) + + + def addAtIndex(self, index, val): + """ + Add a node of value val before the index-th node in the linked list. If index equals to the length of linked list, the node will be appended to the end of linked list. If index is greater than the length, the node will not be inserted. + :type index: int + :type val: int + :rtype: void + """ + if index > len(self.lst): + return + elif index == len(self.lst): + self.lst.append(val) + else: + self.lst.insert(index, val) + + + def deleteAtIndex(self, index): + """ + Delete the index-th node in the linked list, if the index is valid. + :type index: int + :rtype: void + """ + if index > len(self.lst) - 1 or index < 0: + return + self.lst.pop(index) +``` + + + From 9bcef366e2bcc25ea177a08f78091303b27911af Mon Sep 17 00:00:00 2001 From: chenyyx Date: Thu, 19 Jul 2018 12:32:02 +0800 Subject: [PATCH 0622/2496] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20062=20=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../062._unique_paths.ipynb | 167 ++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 docs/Leetcode_Solutions/062._unique_paths.ipynb diff --git a/docs/Leetcode_Solutions/062._unique_paths.ipynb b/docs/Leetcode_Solutions/062._unique_paths.ipynb new file mode 100644 index 000000000..372560e09 --- /dev/null +++ b/docs/Leetcode_Solutions/062._unique_paths.ipynb @@ -0,0 +1,167 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 062.unique_paths 不同路径\n", + "\n", + "### 难度:Medium\n", + "\n", + "## 刷题内容\n", + "\n", + "> 原题链接\n", + "\n", + " - 中文:https://leetcode-cn.com/problems/unique-paths/description\n", + " - 英文:https://leetcode.com/problems/unique-paths\n", + " \n", + "> 内容描述\n", + "\n", + "```\n", + "一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。\n", + "\n", + "机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。\n", + "\n", + "问总共有多少条不同的路径?\n", + "\n", + "说明:m 和 n 的值均不超过 100。\n", + "\n", + "示例 1:\n", + "输入: m = 3, n = 2\n", + "输出: 3\n", + "解释:\n", + "从左上角开始,总共有 3 条路径可以到达右下角。\n", + "1. 向右 -> 向右 -> 向下\n", + "2. 向右 -> 向下 -> 向右\n", + "3. 向下 -> 向右 -> 向右\n", + "\n", + "示例 2:\n", + "输入: m = 7, n = 3\n", + "输出: 28\n", + "\n", + "例如,下图是一个3 x 7 的网格。有多少可能的路径?\n", + "```\n", + "\n", + "![](img/robot_maze.png)\n", + "\n", + "## 解决方案\n", + "\n", + "> 思路 1\n", + "\n", + "数学思路。\n", + "\n", + "本质上,这道题就是排列组合,一共走 m + n - 步,其中 m - 1 步是向右边走,所以不就是从 m + n - 2 中选择 m-1 个的问题,阶乘问题,so easy !妈妈再也不用担心我的学习!!!这个方法 beats 99.97% 。\n", + "\n", + "补充一下,math 模块中自带 factorial 函数,只要 import math 之后调用即可。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "28.0\n" + ] + } + ], + "source": [ + "class Solution(object):\n", + " def uniquePaths(self, m, n):\n", + " \"\"\"\n", + " :type m: int\n", + " :type n: int\n", + " :rtype: int\n", + " \"\"\"\n", + " def factorial(num):\n", + " res = 1\n", + " for i in range(1, num+1):\n", + " res *= i\n", + " return res\n", + " return factorial(m+n-2)/factorial(n-1)/factorial(m-1)\n", + " \n", + "s = Solution()\n", + "print(s.uniquePaths(7,3))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "> 思路 2\n", + "\n", + "片刻大佬 想到的这个思想,真的棒!\n", + "\n", + "| | | |\n", + "| - | - | - |\n", + "| 1 | 1 | 1 |\n", + "| 1 | 2 | 3 |\n", + "| 1 | 3 | 6 |\n", + "| 1 | 4 | 10 |\n", + "| 1 | 5 | 15 |\n", + "| 1 | 6 | 21 |\n", + "| 1 | 7 | 28 |" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "28\n" + ] + } + ], + "source": [ + "class Solution:\n", + " def uniquePaths(self, m, n):\n", + " \"\"\"\n", + " :type m: int\n", + " :type n: int\n", + " :rtype: int\n", + " \"\"\"\n", + " if m < 1 or n < 1:\n", + " return 0\n", + " dp = [0] *n\n", + " dp[0] = 1 \n", + " for i in range(0,m):\n", + " for j in range(1,n):\n", + " dp[j] += dp[j-1]\n", + " return dp[n-1]\n", + " \n", + "s = Solution()\n", + "print(s.uniquePaths(7,3))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 7fc41b3297a53c7112ae5c36864e435e78760c7c Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 19 Jul 2018 12:36:41 +0800 Subject: [PATCH 0623/2496] Create 157._Read_N_Characters_Given_Read4.md --- .../157._Read_N_Characters_Given_Read4.md | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 docs/Leetcode_Solutions/157._Read_N_Characters_Given_Read4.md diff --git a/docs/Leetcode_Solutions/157._Read_N_Characters_Given_Read4.md b/docs/Leetcode_Solutions/157._Read_N_Characters_Given_Read4.md new file mode 100644 index 000000000..447051ff7 --- /dev/null +++ b/docs/Leetcode_Solutions/157._Read_N_Characters_Given_Read4.md @@ -0,0 +1,95 @@ +# 157. Read N Characters Given Read4 最长有效括号 + +**难度: Easy** + +## 刷题内容 + +> 原题连接 + +* https://leetcode.com/problems/read-n-characters-given-read4/description/ + +> 内容描述 + +``` +The API: int read4(char *buf) reads 4 characters at a time from a file. + +The return value is the actual number of characters read. For example, it returns 3 if there is only 3 characters left in the file. + +By using the read4 API, implement the function int read(char *buf, int n) that reads n characters from the file. + +Example 1: + +Input: buf = "abc", n = 4 +Output: "abc" +Explanation: The actual number of characters read is 3, which is "abc". +Example 2: + +Input: buf = "abcde", n = 5 +Output: "abcde" +Note: +The read function will only be called once for each test case. +``` + +## 解题方案 + +> 思路 1 + +讨论区有很多人说这道题很sb,给的例子和代码里面的input数据类型不一样,其实我也很懵逼 +然后我看到了这个解释,顿悟 +``` +It took me several hours to understand what the problem is talking about. + +Let's look at the very first sentence of the description, "The API: int read4(char *buf) reads 4 characters at a time from a file." I though this function read a file, which is represented by *buf. But I was wrong. The correct understanding should be like this: this function reads a file, and writes the first 4 characters to *buf, and if there are less than 4 characters to be read, then only the valid number of characters will be read and written to *buf. + +Similarly, the function to be implemented, int read(char buf, int n) that reads n characters from the file, means n characters should be written to *buf. + +Also the examples are very misleading. Let's say example 1, +Input: buf = "abc", n = 4 +Output: "abc" +Explanation: The actual number of characters read is 3, which is "abc". +The input *buf is not "abc". The file to be read is "abc". The input, *buf , should be where the characters are written to. The output, is not the return value of read(buf, 4), but should be the actual characters in *buf after the function is called. And the return value should be an int, which is 3. + +Hope this clarification helps :) +``` + + +总结一下,就是```read4(*read4_buf)```这个函数的意思就是从文件当中读4个字符并将其写入到read4_buf中去,返回值是实际读取到的字符个数,即如果文件中只剩3个(不到4个字符了) +,那么就只写3个字符到read4_buf中去,返回值是3 + +所以我们要实现的read(*buf)函数也是这样,我们要读取n个字符并写入到buf中去并且返回实际读取到的字符个数,如果不够我们就有多少写多少,然后返回实际写入的个数 + + +那么现在我们有两种情况: + +- n大于文件中的字符数,我们检测文件结束并停止读取并返回文件中的字符数。 +- n小于或等于文件中的字符数,当读取足够的字符时返回(即n) + +代码中用eof代表'end of file' + + +```python +class Solution(object): + def read(self, buf, n): + """ + :type buf: Destination buffer (List[str]) + :type n: Maximum number of characters to read (int) + :rtype: The number of characters read (int) + """ + if n == 0 : + return 0 + total_read, eof = 0, False + while not eof: + read4_buf = [''] * 4 + cur_read = read4(read4_buf) + if (cur_read < 4): + eof = True + for i in range(cur_read): + buf[total_read] = read4_buf[i] + total_read += 1 + if total_read == n: + return total_read + return total_read +``` + + + From e9c0fde21522120a37f6fd02cc7e0a4a356e6536 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 19 Jul 2018 16:34:36 +0800 Subject: [PATCH 0624/2496] Create 158._Read_N_Characters_Given_Read4_II_-_Call_multiple_times.md --- ...rs_Given_Read4_II_-_Call_multiple_times.md | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 docs/Leetcode_Solutions/158._Read_N_Characters_Given_Read4_II_-_Call_multiple_times.md diff --git a/docs/Leetcode_Solutions/158._Read_N_Characters_Given_Read4_II_-_Call_multiple_times.md b/docs/Leetcode_Solutions/158._Read_N_Characters_Given_Read4_II_-_Call_multiple_times.md new file mode 100644 index 000000000..bd4c29b2f --- /dev/null +++ b/docs/Leetcode_Solutions/158._Read_N_Characters_Given_Read4_II_-_Call_multiple_times.md @@ -0,0 +1,74 @@ +# 158. Read N Characters Given Read4 II - Call multiple times + +**难度: 困难** + +## 刷题内容 + +> 原题连接 + +* https://leetcode.com/problems/read-n-characters-given-read4-ii-call-multiple-times/description/ + +> 内容描述 + +``` +The API: int read4(char *buf) reads 4 characters at a time from a file. + +The return value is the actual number of characters read. For example, it returns 3 if there is only 3 characters left in the file. + +By using the read4 API, implement the function int read(char *buf, int n) that reads n characters from the file. + +Note: +The read function may be called multiple times. + +Example 1: + +Given buf = "abc" +read("abc", 1) // returns "a" +read("abc", 2); // returns "bc" +read("abc", 1); // returns "" +Example 2: + +Given buf = "abc" +read("abc", 4) // returns "abc" +read("abc", 1); // returns "" +``` + +## 解题方案 + +> 思路 1 + +这个题目的描述就是一坨屎💩,真的,sb。 + +我来总结一下,跟第157题不一样的地方就是,157是就读一次,158是可以读好几次 +例如: +文件是‘abcdefg’ +- 157题就读一次,给一个n就行了。n给1那buf就是‘a’, n给2那buf就是‘ab’ +- 但是158不一样,可以多次read,比如第一次n给1,那buf是‘a’,再read一次,n给2,那'a'已经读过了,所以现在buf是'bc'了, +如果再来个n=3的话,buf就是‘def’, + +总之就是一个test case 中read函数可以调用一次和调用多次的区别 + +```python +class Solution(object): + bp, len, buffer = 0, 0, [''] * 4 ## 定义全局变量 + + def read(self, buf, n): + """ + :type buf: Destination buffer (List[str]) + :type n: Maximum number of characters to read (int) + :rtype: The number of characters read (int) + """ + i = 0 + while i < n: + if self.bp == self.len: ## 这个判断只有在刚开始读或者没得读的时候才成立 + self.bp = 0 + self.len = read4(self.buffer) + if self.len == 0: + break + buf[i] = self.buffer[self.bp] + i += 1 + self.bp += 1 + return i +``` + + From b3bb87a50e5af2a091f01d41e4f07939328c068b Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 19 Jul 2018 16:48:10 +0800 Subject: [PATCH 0625/2496] Create 701._Insert_into_a_Binary_Search_Tree.md --- .../701._Insert_into_a_Binary_Search_Tree.md | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 docs/Leetcode_Solutions/701._Insert_into_a_Binary_Search_Tree.md diff --git a/docs/Leetcode_Solutions/701._Insert_into_a_Binary_Search_Tree.md b/docs/Leetcode_Solutions/701._Insert_into_a_Binary_Search_Tree.md new file mode 100644 index 000000000..f2ecc3946 --- /dev/null +++ b/docs/Leetcode_Solutions/701._Insert_into_a_Binary_Search_Tree.md @@ -0,0 +1,67 @@ +# 701. Insert into a Binary Search Tree + +**难度: 困难** + +## 刷题内容 + +> 原题连接 + +* https://leetcode.com/problems/longest-valid-parentheses + +> 内容描述 + +``` +Given the root node of a binary search tree (BST) and a value to be inserted into the tree, insert the value into the BST. Return the root node of the BST after the insertion. It is guaranteed that the new value does not exist in the original BST. + +Note that there may exist multiple valid ways for the insertion, as long as the tree remains a BST after insertion. You can return any of them. + +For example, + +Given the tree: + 4 + / \ + 2 7 + / \ + 1 3 +And the value to insert: 5 +You can return this binary search tree: + + 4 + / \ + 2 7 + / \ / + 1 3 5 +This tree is also valid: + + 5 + / \ + 2 7 + / \ + 1 3 + \ + 4 +``` + +## 解题方案 + +> 思路 1 + +就一句话,看到树🌲就想到递归,太简单了,30秒敲完答案 + +```python +class Solution(object): + def insertIntoBST(self, root, val): + """ + :type root: TreeNode + :type val: int + :rtype: TreeNode + """ + if not root: + return TreeNode(val) + if val < root.val: + root.left = self.insertIntoBST(root.left, val) + if val > root.val: + root.right = self.insertIntoBST(root.right, val) + return root +``` + From 376aa35fb59c67642115c7bb19028bf7155e83af Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 19 Jul 2018 17:39:46 +0800 Subject: [PATCH 0626/2496] =?UTF-8?q?Create=20=E4=BA=8C=E5=8F=89=E6=A0=91?= =?UTF-8?q?=E7=9A=84=E4=B8=80=E4=BA=9B=E6=93=8D=E4=BD=9C.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...00\344\272\233\346\223\215\344\275\234.md" | 235 ++++++++++++++++++ 1 file changed, 235 insertions(+) create mode 100644 "docs/Leetcode_Solutions/Summarization/\344\272\214\345\217\211\346\240\221\347\232\204\344\270\200\344\272\233\346\223\215\344\275\234.md" diff --git "a/docs/Leetcode_Solutions/Summarization/\344\272\214\345\217\211\346\240\221\347\232\204\344\270\200\344\272\233\346\223\215\344\275\234.md" "b/docs/Leetcode_Solutions/Summarization/\344\272\214\345\217\211\346\240\221\347\232\204\344\270\200\344\272\233\346\223\215\344\275\234.md" new file mode 100644 index 000000000..f425b237a --- /dev/null +++ "b/docs/Leetcode_Solutions/Summarization/\344\272\214\345\217\211\346\240\221\347\232\204\344\270\200\344\272\233\346\223\215\344\275\234.md" @@ -0,0 +1,235 @@ +### 1. 二叉搜索树(BSTree)的概念 + +二叉搜索树又被称为二叉排序树,那么它本身也是一棵二叉树,那么满足以下性质的二叉树就是二叉搜索树,如图: + +- 若左子树不为空,则左子树上所有节点的值都小于根节点的值; +- 若它的右子树不为空,则它的右子树上所有节点的值都大于根节点的值; +- 它的左右子树也要分别是二叉搜索树。 + +### 2. 二叉搜索树的插入 + +- 如果插入值已经存在,则不插,return False +- 如果not root,则返回TreeNode(val) +- 根据与root.val的比较,在左右子树中进行递归操作 + +代码中保证插入的值不存在,也是[leetcode第701题](https://github.com/apachecn/LeetCode/blob/master/docs/Leetcode_Solutions/701._Insert_into_a_Binary_Search_Tree.md)中所gurantee的 +```python +# Definition for a binary tree node. +# class TreeNode(object): +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None + +class Solution(object): + def insertIntoBST(self, root, val): + """ + :type root: TreeNode + :type val: int + :rtype: TreeNode + """ + if not root: + return TreeNode(val) + if val < root.val: + root.left = self.insertIntoBST(root.left, val) + if val > root.val: + root.right = self.insertIntoBST(root.right, val) + return root +``` + +### 3. 二叉搜索树的搜索 + +* 搜索节点 +```java +public TreeNode search(int key) { + TreeNode pNode = root; + while (pNode != null) { + if (key == pNode.key) { + return pNode; + } else if (key > pNode.key) { + pNode = pNode.rchild; + } else if (key < pNode.key) { + pNode = pNode.lchild; + } + } + return null;// 如果没有搜索到结果那么就只能返回空值了 +} +``` + +* 获取最小节点 + +```java +public TreeNode minElemNode(TreeNode node) throws Exception { + if (node == null) { + throw new Exception("此树为空树!"); + } + TreeNode pNode = node; + while (pNode.lchild != null) { + pNode = pNode.lchild; + } + return pNode; +} +``` + +* 获取最大节点 + +```java +public TreeNode maxElemNode(TreeNode node) throws Exception { + if (node == null) { + throw new Exception("此树为空树!"); + } + TreeNode pNode = node; + while (pNode.rchild != null) { + pNode = pNode.rchild; + } + return pNode; +} +``` + +* 获取给定节点在中序遍历下的后续第一个节点(即找到该节点的右子树中的最左孩子) + +```java +public TreeNode successor(TreeNode node) throws Exception { + if (node == null) { + throw new Exception("此树为空树!"); + } + // 分两种情况考虑,此节点是否有右子树 + // 当这个节点有右子树的情况下,那么右子树的最小关键字节点就是这个节点的后续节点 + if (node.rchild != null) { + return minElemNode(node.rchild); + } + + // 当这个节点没有右子树的情况下,即 node.rchild == null + // 如果这个节点是它父节点的左子树的话,那么就说明这个父节点就是后续节点了 + // 难道这里还需要进行两次if语句吗?不需要了,这里用一个while循环就可以了 + TreeNode parentNode = node.parent; + while (parentNode != null && parentNode.rchild == node) { + node = parentNode; + parentNode = parentNode.parent; + } + return parentNode; +} +``` + + +* 获取给定节点在中序遍历下的前趋结点 + +```java +public TreeNode precessor(TreeNode node) throws Exception { + // 查找前趋节点也是分两种情况考虑 + // 如果这个节点存在左子树,那么这个左子树的最大关键字就是这个节点的前趋节点 + if (node.lchild != null) { + return maxElemNode(node.lchild); + } + // 如果这个节点不存在左子树,那么这个节点的父节点 + TreeNode parentNode = node.parent; + while (parentNode != null && parentNode.lchild == node) { + node = parentNode; + parentNode = parentNode.lchild; + } + return parentNode; +} +``` + + + +### 4. 二叉搜索树的删除 + +- 要删除的节点不存在,return False +- 要删除的节点没有子节点,直接删 +- 要删除的节点只有一个子节点(即只有一个左子节点或者一个右子节点),让被删除节点的父亲节点指向其子节点即可 +- 要删除的节点target有两个子节点(即左右均存在),则首先找到该节点的右子树中的最左孩子(也就是右子树中序遍历的第一个节点,分两种情况), +然后将两者互换,再删除target即可 + +```java + // 从二叉树当中删除指定的节点 + public void delete(int key) throws Exception { + TreeNode pNode = search(key); + if (pNode == null) { + throw new Exception("此树中不存在要删除的这个节点!"); + } + + delete(pNode); + } + + private void delete(TreeNode pNode) throws Exception { + // 第一种情况:删除没有子节点的节点 + if (pNode.lchild == null && pNode.rchild == null) { + if (pNode == root) {// 如果是根节点,那么就删除整棵树 + root = null; + } else if (pNode == pNode.parent.lchild) { + // 如果这个节点是父节点的左节点,则将父节点的左节点设为空 + pNode.parent.lchild = null; + } else if (pNode == pNode.parent.rchild) { + // 如果这个节点是父节点的右节点,则将父节点的右节点设为空 + pNode.parent.rchild = null; + } + } + + // 第二种情况: (删除有一个子节点的节点) + // 如果要删除的节点只有右节点 + if (pNode.lchild == null && pNode.rchild != null) { + if (pNode == root) { + root = pNode.rchild; + } else if (pNode == pNode.parent.lchild) { + pNode.parent.lchild = pNode.rchild; + pNode.rchild.parent = pNode.parent; + } else if (pNode == pNode.parent.rchild) { + pNode.parent.rchild = pNode.rchild; + pNode.rchild.parent = pNode.parent; + } + } + // 如果要删除的节点只有左节点 + if (pNode.lchild != null && pNode.rchild == null) { + if (pNode == root) { + root = pNode.lchild; + } else if (pNode == pNode.parent.lchild) { + pNode.parent.lchild = pNode.lchild; + pNode.lchild.parent = pNode.parent; + } else if (pNode == pNode.parent.rchild) { + pNode.parent.rchild = pNode.lchild; + pNode.lchild.parent = pNode.parent; + } + } + + // 第三种情况: (删除有两个子节点的节点,即左右子节点都非空) + + // 方法是用要删除的节点的后续节点代替要删除的节点,并且删除后续节点(删除后续节点的时候需要递归操作) + // 解析:这里要用到的最多也就会发生两次,即后续节点不会再继续递归的删除下一个后续节点了, + // 因为,要删除的节点的后续节点肯定是:要删除的那个节点的右子树的最小关键字,而这个最小关键字肯定不会有左节点; + // 所以,在删除后续节点的时候肯定不会用到(两个节点都非空的判断 ),如有有子节点,肯定就是有一个右节点。 + if (pNode.lchild != null && pNode.rchild != null) { + // 先找出后续节点 + TreeNode successorNode = successor(pNode); + if (pNode == root) { + root.key = successorNode.key; + } else { + pNode.key = successorNode.key;// 赋值,将后续节点的值赋给要删除的那个节点 + } + delete(successorNode);// 递归的删除后续节点 + } + } +``` + + +### 5. 二叉搜索树的遍历 + +前序遍历:[leetcode第144题](https://github.com/apachecn/LeetCode/blob/master/docs/Leetcode_Solutions/144._binary_tree_preorder_traversal.md) + +中序遍历:[leetcode第94题](https://github.com/apachecn/LeetCode/blob/master/docs/Leetcode_Solutions/094._binary_tree_inorder_traversal.md) + +后序遍历:[leetcode第145题](https://github.com/apachecn/LeetCode/blob/master/docs/Leetcode_Solutions/145._binary_tree_postorder_traversal.md) + + + + + + + + + + + + + + From 75b1d9c6996fbcff21f245a9749f0cb9d765e370 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 19 Jul 2018 19:19:08 +0800 Subject: [PATCH 0627/2496] =?UTF-8?q?Update=20=E4=BA=8C=E5=8F=89=E6=A0=91?= =?UTF-8?q?=E7=9A=84=E4=B8=80=E4=BA=9B=E6=93=8D=E4=BD=9C.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...7\232\204\344\270\200\344\272\233\346\223\215\344\275\234.md" | 1 - 1 file changed, 1 deletion(-) diff --git "a/docs/Leetcode_Solutions/Summarization/\344\272\214\345\217\211\346\240\221\347\232\204\344\270\200\344\272\233\346\223\215\344\275\234.md" "b/docs/Leetcode_Solutions/Summarization/\344\272\214\345\217\211\346\240\221\347\232\204\344\270\200\344\272\233\346\223\215\344\275\234.md" index f425b237a..fb474d9d4 100644 --- "a/docs/Leetcode_Solutions/Summarization/\344\272\214\345\217\211\346\240\221\347\232\204\344\270\200\344\272\233\346\223\215\344\275\234.md" +++ "b/docs/Leetcode_Solutions/Summarization/\344\272\214\345\217\211\346\240\221\347\232\204\344\270\200\344\272\233\346\223\215\344\275\234.md" @@ -101,7 +101,6 @@ public TreeNode successor(TreeNode node) throws Exception { // 当这个节点没有右子树的情况下,即 node.rchild == null // 如果这个节点是它父节点的左子树的话,那么就说明这个父节点就是后续节点了 - // 难道这里还需要进行两次if语句吗?不需要了,这里用一个while循环就可以了 TreeNode parentNode = node.parent; while (parentNode != null && parentNode.rchild == node) { node = parentNode; From d187a5abfb90f0debc82e187fee8ba20bd7cf46e Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 19 Jul 2018 19:30:12 +0800 Subject: [PATCH 0628/2496] Update 285._inorder_successor_in_bst.md --- .../285._inorder_successor_in_bst.md | 70 ++++++++++++++----- 1 file changed, 52 insertions(+), 18 deletions(-) diff --git a/docs/Leetcode_Solutions/285._inorder_successor_in_bst.md b/docs/Leetcode_Solutions/285._inorder_successor_in_bst.md index a5a489be9..93f89ef19 100644 --- a/docs/Leetcode_Solutions/285._inorder_successor_in_bst.md +++ b/docs/Leetcode_Solutions/285._inorder_successor_in_bst.md @@ -1,15 +1,50 @@ -###285. Inorder Successor in BST +# 285. Inorder Successor in BST +**难度: 困难** -题目: - +## 刷题内容 +> 原题连接 -难度: -Medium +* https://leetcode.com/problems/inorder-successor-in-bst/description/ -思路: +> 内容描述 +``` + +Given a binary search tree and a node in it, find the in-order successor of that node in the BST. + +Note: If the given node has no in-order successor in the tree, return null. + +Example 1: + +Input: root = [2,1,3], p = 1 + + 2 + / \ +1 3 + +Output: 2 +Example 2: + +Input: root = [5,3,6,2,4,null,null,1], p = 6 + + 5 + / \ + 3 6 + / \ + 2 4 + / +1 + +Output: null +``` + +## 解题方案 + +> 思路 1 + +首先可以去看一下[二叉树的一些操作](https://github.com/apachecn/LeetCode/blob/master/docs/Leetcode_Solutions/Summarization/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E4%B8%80%E4%BA%9B%E6%93%8D%E4%BD%9C.md) BST的特性,对于一个node,它的所有左侧node都比它小,它的所有右侧node都比它大。最小的元素在最左边,最大的元素在最右边。 @@ -44,10 +79,9 @@ function Succ(x) 这里伪码有点不适用是因为我们并没有这个parent指针,当然我们还是有trick方式的,就是我们从root开始走,直到找到这个node p,同时我们记录一路上看到的比p.val大的值,这样最后一个就是它的successor.其中最低的那一个就是他的successor. -AC代码如下: -``` +```python class Solution(object): def inorderSuccessor(self, root, p): """ @@ -55,14 +89,13 @@ class Solution(object): :type p: TreeNode :rtype: TreeNode """ - def minNode(root): - while root.left!= None: - root = root.left - return root - - - def searchP(p, root): - if root == None or root.val == p.val: + def minNode(node): + while node.left: + node = node.left + return node + + def searchP(root, p): + if not root or root.val == p.val: return None else: succ = None @@ -77,5 +110,6 @@ class Solution(object): if p.right: return minNode(p.right) else: - return searchP(p, root) -``` \ No newline at end of file + return searchP(root, p) +``` + From d7a9c9a86dfc71538ca1abc63f806b3b9fc60410 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 19 Jul 2018 19:30:31 +0800 Subject: [PATCH 0629/2496] Update 285._inorder_successor_in_bst.md --- docs/Leetcode_Solutions/285._inorder_successor_in_bst.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Leetcode_Solutions/285._inorder_successor_in_bst.md b/docs/Leetcode_Solutions/285._inorder_successor_in_bst.md index 93f89ef19..aafca56c7 100644 --- a/docs/Leetcode_Solutions/285._inorder_successor_in_bst.md +++ b/docs/Leetcode_Solutions/285._inorder_successor_in_bst.md @@ -1,6 +1,6 @@ # 285. Inorder Successor in BST -**难度: 困难** +**难度: 中等** ## 刷题内容 From 064a0553ed08baada2e9832a40a3fdcdce823af5 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 19 Jul 2018 19:36:24 +0800 Subject: [PATCH 0630/2496] =?UTF-8?q?Update=20=E4=BA=8C=E5=8F=89=E6=A0=91?= =?UTF-8?q?=E7=9A=84=E4=B8=80=E4=BA=9B=E6=93=8D=E4=BD=9C.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...04\344\270\200\344\272\233\346\223\215\344\275\234.md" | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git "a/docs/Leetcode_Solutions/Summarization/\344\272\214\345\217\211\346\240\221\347\232\204\344\270\200\344\272\233\346\223\215\344\275\234.md" "b/docs/Leetcode_Solutions/Summarization/\344\272\214\345\217\211\346\240\221\347\232\204\344\270\200\344\272\233\346\223\215\344\275\234.md" index fb474d9d4..3cc644ed0 100644 --- "a/docs/Leetcode_Solutions/Summarization/\344\272\214\345\217\211\346\240\221\347\232\204\344\270\200\344\272\233\346\223\215\344\275\234.md" +++ "b/docs/Leetcode_Solutions/Summarization/\344\272\214\345\217\211\346\240\221\347\232\204\344\270\200\344\272\233\346\223\215\344\275\234.md" @@ -221,7 +221,15 @@ public TreeNode precessor(TreeNode node) throws Exception { +### References +[数据结构与算法之二叉搜索树插入、查询与删除](https://blog.csdn.net/chenliguan/article/details/52956546) + +[二叉搜索树的插入与删除图解](http://www.cnblogs.com/MrListening/p/5782752.html) + +[二叉树算法删除代码实现](https://blog.csdn.net/tayanxunhua/article/details/11100113) + +[二叉树的Java实现及特点总结](http://www.cnblogs.com/lzq198754/p/5857597.html) From 867ffda417845a14896544cb5ba4cdc483795850 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 19 Jul 2018 19:36:42 +0800 Subject: [PATCH 0631/2496] =?UTF-8?q?Update=20=E4=BA=8C=E5=8F=89=E6=A0=91?= =?UTF-8?q?=E7=9A=84=E4=B8=80=E4=BA=9B=E6=93=8D=E4=BD=9C.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\232\204\344\270\200\344\272\233\346\223\215\344\275\234.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/docs/Leetcode_Solutions/Summarization/\344\272\214\345\217\211\346\240\221\347\232\204\344\270\200\344\272\233\346\223\215\344\275\234.md" "b/docs/Leetcode_Solutions/Summarization/\344\272\214\345\217\211\346\240\221\347\232\204\344\270\200\344\272\233\346\223\215\344\275\234.md" index 3cc644ed0..6acf22d0e 100644 --- "a/docs/Leetcode_Solutions/Summarization/\344\272\214\345\217\211\346\240\221\347\232\204\344\270\200\344\272\233\346\223\215\344\275\234.md" +++ "b/docs/Leetcode_Solutions/Summarization/\344\272\214\345\217\211\346\240\221\347\232\204\344\270\200\344\272\233\346\223\215\344\275\234.md" @@ -221,7 +221,7 @@ public TreeNode precessor(TreeNode node) throws Exception { -### References +## References [数据结构与算法之二叉搜索树插入、查询与删除](https://blog.csdn.net/chenliguan/article/details/52956546) From 22a9d636c81ca1b07aed2d4c72a505e0f48f407d Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 19 Jul 2018 20:07:37 +0800 Subject: [PATCH 0632/2496] Update 145._binary_tree_postorder_traversal.md --- .../145._binary_tree_postorder_traversal.md | 131 ++++++++++++------ 1 file changed, 89 insertions(+), 42 deletions(-) diff --git a/docs/Leetcode_Solutions/145._binary_tree_postorder_traversal.md b/docs/Leetcode_Solutions/145._binary_tree_postorder_traversal.md index 788cfc623..4bf7c22c7 100644 --- a/docs/Leetcode_Solutions/145._binary_tree_postorder_traversal.md +++ b/docs/Leetcode_Solutions/145._binary_tree_postorder_traversal.md @@ -1,67 +1,114 @@ -###145. Binary Tree Postorder Traversal +# 145. Binary Tree Postorder Traversal 二叉树的后序遍历 +**难度: 困难** -题目: +## 刷题内容 - +> 原题连接 +* https://leetcode.com/problems/binary-tree-postorder-traversal/description/ -难度: +> 内容描述 -Hard +``` +给定一个二叉树,返回它的 后序 遍历。 -wikipedia 助你幸福 +示例: -递归版本 +输入: [1,null,2,3] + 1 + \ + 2 + / + 3 -``` -postorder(node) - if (node = null) - return - postorder(node.left) - postorder(node.right) - visit(node) +输出: [3,2,1] +进阶: 递归算法很简单,你可以通过迭代算法完成吗? ``` +## 解题方案 -迭代版本 +> 思路 1 -``` -iterativePostorder(node) - s ← empty stack - lastNodeVisited ← null - while (not s.isEmpty() or node ≠ null) - if (node ≠ null) - s.push(node) - node ← node.left - else - peekNode ← s.peek() - // if right child exists and traversing node - // from left child, then move right - if (peekNode.right ≠ null and lastNodeVisited ≠ peekNode.right) - node ← peekNode.right - else - visit(peekNode) - lastNodeVisited ← s.pop() +递归,so easy + +```python +class Solution(object): + def postorderTraversal(self, root): + """ + :type root: TreeNode + :rtype: List[int] + """ + res = [] + if not root: + return res + + left = self.postorderTraversal(root.left) + right = self.postorderTraversal(root.right) + + if left: + res.extend(left) + if right: + res.extend(right) + + res.append(root.val) + return res ``` +> 思路 2 +也可以先写一下后序遍历的函数,然后一个一个贴上去 -刷进度直接用递归AC +```python +class Solution(object): + def postorderTraversal(self, root): + """ + :type root: TreeNode + :rtype: List[int] + """ + def postOrder(root): + if not root : return + postOrder(root.left) + postOrder(root.right) + res.append(root.val) + + res = [] + postOrder(root) + return res ``` + +> 思路 3 + +迭代 + + +```python class Solution(object): def postorderTraversal(self, root): """ :type root: TreeNode :rtype: List[int] """ - self.result = [] - self.postOrder(root) - return self.result + res = [] + if not root: + return res + + stack1 = [] + stack2 = [] + stack1.append(root) - def postOrder(self, root): - if root == None : return - self.postOrder(root.left) - self.postOrder(root.right) - self.result.append(root.val) -``` \ No newline at end of file + while len(stack1) > 0: + node = stack1.pop() + stack2.append(node) + if node.left: + stack1.append(node.left) + if node.right: + stack1.append(node.right) + + while(len(stack2) > 0): + top = stack2.pop() + res.append(top.val) + return res +``` + + From 4ca1f371334b3939b49a0bc2b518170972d6f159 Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Fri, 20 Jul 2018 12:22:22 +0800 Subject: [PATCH 0633/2496] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20readme=20?= =?UTF-8?q?=E7=BB=84=E7=BB=87=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 92721bdfb..a96cf5ceb 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@ # LeetCode 面试必备 -* 英文官网: https://leetcode.com -* 中文官网: https://leetcode-cn.com +* [ApacheCN 开源组织](https://github.com/apachecn/organization): https://github.com/apachecn/organization -> slogan: **不想装逼的朋友,我们都不想认识** +> **欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远** +* 英文官网: https://leetcode.com +* 中文官网: https://leetcode-cn.com * **LeetCode 刷题群 | ApacheCN【812791932】LeetCode 刷题 | ApacheCN ** * [ApacheCN repo 地址](https://github.com/apachecn/leetcode): https://github.com/apachecn/leetcode @@ -74,22 +75,3 @@ ApacheCN 纯粹出于学习目的与个人兴趣整理的内容。 整理内容只供学习研究参考之用。ApacheCN 保留对此版本内容的署名权及其它相关权利。 - - -## 赞助我们 - -* **ApacheCN 网友捐赠页面:http://www.apachecn.org/organization/664.html** - -![](http://www.apachecn.org/wp-content/uploads/2018/02/%E6%94%AF%E4%BB%98-%E5%BE%AE%E4%BF%A1%E5%92%8C%E6%94%AF%E4%BB%98%E5%AE%9D-1024x591.png) - -## [ApacheCN 组织资源](http://www.apachecn.org/) - -> [kaggle: 机器学习竞赛](https://github.com/apachecn/kaggle) - -| 深度学习 | 机器学习 | 大数据 | 运维工具 | -| --- | --- | --- | --- | -| [TensorFlow R1.2 中文文档](http://cwiki.apachecn.org/pages/viewpage.action?pageId=10030122) | [机器学习实战-教学](https://github.com/apachecn/MachineLearning) | [Spark 2.2.0和2.0.2 中文文档](http://spark.apachecn.org/) | [Zeppelin 0.7.2 中文文档](http://cwiki.apachecn.org/pages/viewpage.action?pageId=10030467) | -| [Pytorch 0.3 中文文档 ](http://pytorch.apachecn.org/cn/0.3.0/) | [Sklearn 0.19 中文文档](http://sklearn.apachecn.org/) | [Storm 1.1.0和1.0.1 中文文档](http://storm.apachecn.org/) | [Kibana 5.2 中文文档](http://cwiki.apachecn.org/pages/viewpage.action?pageId=8159377) | -| | [LightGBM 中文文档](http://lightgbm.apachecn.org/cn/latest) | [Kudu 1.4.0 中文文档](http://cwiki.apachecn.org/pages/viewpage.action?pageId=10813594) | | -| | [XGBoost 中文文档](http://xgboost.apachecn.org/cn/latest) | [Elasticsearch 5.4 中文文档](http://cwiki.apachecn.org/pages/viewpage.action?pageId=4260364) | -| | | [Beam 中文文档](http://beam.apachecn.org/) | From a0f77cf1a61216d43878c19008b7dd140112a760 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 20 Jul 2018 14:26:00 +0800 Subject: [PATCH 0634/2496] Update 144._binary_tree_preorder_traversal.md --- .../144._binary_tree_preorder_traversal.md | 63 +++++++++++++------ 1 file changed, 43 insertions(+), 20 deletions(-) diff --git a/docs/Leetcode_Solutions/144._binary_tree_preorder_traversal.md b/docs/Leetcode_Solutions/144._binary_tree_preorder_traversal.md index 8f5e21689..b81890681 100644 --- a/docs/Leetcode_Solutions/144._binary_tree_preorder_traversal.md +++ b/docs/Leetcode_Solutions/144._binary_tree_preorder_traversal.md @@ -1,15 +1,35 @@ -### 144. Binary Tree Preorder Traversal +# 144. Binary Tree Preorder Traversal +**难度: 中等** -题目: +## 刷题内容 - +> 原题连接 +* https://leetcode.com/problems/binary-tree-preorder-traversal/description/ -难度: +> 内容描述 -Medium +``` +Given a binary tree, return the preorder traversal of its nodes' values. + +Example: + +Input: [1,null,2,3] + 1 + \ + 2 + / + 3 + +Output: [1,2,3] +Follow up: Recursive solution is trivial, could you do it iteratively? +``` + +## 解题方案 + +> 思路 1 -Recursive,瞬秒 +Recursive递归,瞬秒 ```python @@ -30,6 +50,10 @@ class Solution(object): return res ``` +> 思路 2 + +或者我们可以先写一下先序遍历的函数,然后一个一个贴上去 + ```python class Solution(object): def preorderTraversal(self, root): @@ -53,7 +77,7 @@ class Solution(object): ``` -Iterative +Iterative, 迭代 ```python @@ -63,19 +87,18 @@ class Solution(object): :type root: TreeNode :rtype: List[int] """ - if root == None: - return [] res = [] - - stack = [] - stack.append(root) - while stack: - node = stack.pop() - res.append(node.val) - if node.right: - stack.append(node.right) - if node.left: - stack.append(node.left) + if not root: + return res + stack = [] + stack.append(root) + + while(len(stack) > 0): + node = stack.pop() + res.append(node.val) + if node.right: + stack.append(node.right) + if node.left: + stack.append(node.left) return res - ``` From c26cc3e837954b292193b90bda3ea04839243e41 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 20 Jul 2018 14:26:20 +0800 Subject: [PATCH 0635/2496] Update 145._binary_tree_postorder_traversal.md --- .../145._binary_tree_postorder_traversal.md | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/docs/Leetcode_Solutions/145._binary_tree_postorder_traversal.md b/docs/Leetcode_Solutions/145._binary_tree_postorder_traversal.md index 4bf7c22c7..2729d4973 100644 --- a/docs/Leetcode_Solutions/145._binary_tree_postorder_traversal.md +++ b/docs/Leetcode_Solutions/145._binary_tree_postorder_traversal.md @@ -79,7 +79,7 @@ class Solution(object): > 思路 3 -迭代 +迭代, 其实思路就一句话,后序遍历是左右中,因为我们第一个放进去的肯定是中(即root),所以我们逆向思维考虑一下,我们按照中右左的顺序放进去,然后返回res[::-1]就行了。这其实跟[leetcode第144题](https://github.com/apachecn/LeetCode/blob/master/docs/Leetcode_Solutions/144._binary_tree_preorder_traversal.md)是一样的思路 ```python @@ -94,21 +94,17 @@ class Solution(object): return res stack1 = [] - stack2 = [] stack1.append(root) while len(stack1) > 0: node = stack1.pop() - stack2.append(node) + res.append(node.val) if node.left: stack1.append(node.left) if node.right: stack1.append(node.right) - - while(len(stack2) > 0): - top = stack2.pop() - res.append(top.val) - return res + + return res[::-1] ``` From ebe806dadf0b668ed8040eed019f57d418463598 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 20 Jul 2018 14:45:35 +0800 Subject: [PATCH 0636/2496] Update 094._binary_tree_inorder_traversal.md --- .../094._binary_tree_inorder_traversal.md | 92 +++++++++---------- 1 file changed, 43 insertions(+), 49 deletions(-) diff --git a/docs/Leetcode_Solutions/094._binary_tree_inorder_traversal.md b/docs/Leetcode_Solutions/094._binary_tree_inorder_traversal.md index dc288f127..e28063809 100644 --- a/docs/Leetcode_Solutions/094._binary_tree_inorder_traversal.md +++ b/docs/Leetcode_Solutions/094._binary_tree_inorder_traversal.md @@ -1,18 +1,38 @@ -### 94. Binary Tree Inorder Traversal +# 94. Binary Tree Inorder Traversal +**难度: 中等** -题目: - +## 刷题内容 +> 原题连接 -难度: +* https://leetcode.com/problems/binary-tree-inorder-traversal/description/ -Medium +> 内容描述 +``` + +Given a binary tree, return the inorder traversal of its nodes' values. + +Example: + +Input: [1,null,2,3] + 1 + \ + 2 + / + 3 + +Output: [1,3,2] +Follow up: Recursive solution is trivial, could you do it iteratively? +``` -递归版本1⃣️:自己瞬秒的 +## 解题方案 +> 思路 1 +递归,瞬秒 + ```python class Solution(object): @@ -31,8 +51,10 @@ class Solution(object): res.extend(self.inorderTraversal(root.right)) return res ``` +> 思路 2 + +或者我们可以先写一下中序遍历的函数,然后一个一个贴上去 -递归版本2⃣️: ```python class Solution(object): def inorderTraversal(self, root): @@ -40,53 +62,25 @@ class Solution(object): :type root: TreeNode :rtype: List[int] """ - self.lst = [] - self.DFS(root) - return self.lst - - - def DFS(self,root): + if root == None: + return [] + res = [] + self.inorder(root,res) + return res + + + def inorder(self,root,res): if root == None: return - if root.left: - self.DFS(root.left) - self.lst.append(root.val) - if root.right: - self.DFS(root.right) - + self.inorder(root.left,res) + res.append(root.val) + self.inorder(root.right,res) ``` +> 思路 3 -非递归用stack,我听谁讲过 😓 - -// to be done - - -via wikipedia - +迭代 -递归: -``` -inorder(node) - if (node = null) - return - inorder(node.left) - visit(node) - inorder(node.right) -``` - - -非递归,跟之前那个iterator有得一拼,其实好几个题都是在玩这个花样? +```python ``` -iterativeInorder(node) - s ← empty stack - while (not s.isEmpty() or node ≠ null) - if (node ≠ null) - s.push(node) - node ← node.left - else - node ← s.pop() - visit(node) - node ← node.right -``` From a2b0c52a00b8297a198b1f6fd4a4de5a3d87db52 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 20 Jul 2018 15:25:48 +0800 Subject: [PATCH 0637/2496] Update 094._binary_tree_inorder_traversal.md --- .../094._binary_tree_inorder_traversal.md | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/docs/Leetcode_Solutions/094._binary_tree_inorder_traversal.md b/docs/Leetcode_Solutions/094._binary_tree_inorder_traversal.md index e28063809..2b91f1ab8 100644 --- a/docs/Leetcode_Solutions/094._binary_tree_inorder_traversal.md +++ b/docs/Leetcode_Solutions/094._binary_tree_inorder_traversal.md @@ -80,7 +80,29 @@ class Solution(object): 迭代 +先一股脑把左边一条线全部push到底(即走到最左边),然后node最终为None了就开始pop stack了,然后因为pop出来的每一个node都是自己这棵树的root,所以看看它有没有右孩子,没有那肯定继续pop,有的话自然而然右孩子是下一个要被访问的节点。 -```python +```python +class Solution(object): + def inorderTraversal(self, root): + """ + :type root: TreeNode + :rtype: List[int] + """ + res = [] + if not root: + return res + + stack = [] + node = root + while node or (len(stack) > 0): + if node: + stack.append(node) + node = node.left + else: + node = stack.pop() + res.append(node.val) + node = node.right + return res ``` From b2325726a693634265563831f27bde287e5a803a Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 20 Jul 2018 21:01:48 +0800 Subject: [PATCH 0638/2496] Update 102._binary_tree_level_order_traversal.md --- .../102._binary_tree_level_order_traversal.md | 81 ++++++++++++------- 1 file changed, 52 insertions(+), 29 deletions(-) diff --git a/docs/Leetcode_Solutions/102._binary_tree_level_order_traversal.md b/docs/Leetcode_Solutions/102._binary_tree_level_order_traversal.md index 7d4ac4efb..a16135d68 100644 --- a/docs/Leetcode_Solutions/102._binary_tree_level_order_traversal.md +++ b/docs/Leetcode_Solutions/102._binary_tree_level_order_traversal.md @@ -1,15 +1,61 @@ -### 102. Binary Tree Level Order Traversal +# 102. Binary Tree Level Order Traversal +**难度: 中等** -题目: +## 刷题内容 - +> 原题连接 +* https://leetcode.com/problems/binary-tree-level-order-traversal/description/ -难度: +> 内容描述 -Medium +``` +Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level). + +For example: +Given binary tree [3,9,20,null,null,15,7], + 3 + / \ + 9 20 + / \ + 15 7 +return its level order traversal as: +[ + [3], + [9,20], + [15,7] +] +``` + +## 解题方案 + +> 思路 1 + +递归 + +```python +class Solution(object): + def levelOrder(self, root): + """ + :type root: TreeNode + :rtype: List[List[int]] + """ + res = [] + self.recurHelper(root, 0, res) + return res + + def recurHelper(self, root, level, res): + if not root: return + if len(res) < level + 1: + res.append([]) + res[level].append(root.val) + self.recurHelper(root.left, level+1, res) + self.recurHelper(root.right, level+1, res) +``` + +> 思路 2 -第一种做法:利用curLevel和nextLevel来记录,然后按层append. +迭代,利用curLevel和nextLevel来记录,然后按层append. ```python @@ -36,27 +82,4 @@ class Solution(object): ``` -第二种做法:递归 - - -```python -class Solution(object): - def levelOrder(self, root): - """ - :type root: TreeNode - :rtype: List[List[int]] - """ - res = [] - self.iter_order(root, 0, res) - return res - - def iter_order(self, root, level, res): - if not root: return - if len(res) < level + 1: - res.append([]) - res[level].append(root.val) - self.iter_order(root.left, level+1, res) - self.iter_order(root.right, level+1, res) -``` -用递归来记录每一层,需要更加学习,不算easy From dbc1301b1a614030e1e94d01f7e7c373dc711ef4 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 20 Jul 2018 21:02:40 +0800 Subject: [PATCH 0639/2496] =?UTF-8?q?Update=20=E4=BA=8C=E5=8F=89=E6=A0=91?= =?UTF-8?q?=E7=9A=84=E4=B8=80=E4=BA=9B=E6=93=8D=E4=BD=9C.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...232\204\344\270\200\344\272\233\346\223\215\344\275\234.md" | 3 +++ 1 file changed, 3 insertions(+) diff --git "a/docs/Leetcode_Solutions/Summarization/\344\272\214\345\217\211\346\240\221\347\232\204\344\270\200\344\272\233\346\223\215\344\275\234.md" "b/docs/Leetcode_Solutions/Summarization/\344\272\214\345\217\211\346\240\221\347\232\204\344\270\200\344\272\233\346\223\215\344\275\234.md" index 6acf22d0e..54d08ab00 100644 --- "a/docs/Leetcode_Solutions/Summarization/\344\272\214\345\217\211\346\240\221\347\232\204\344\270\200\344\272\233\346\223\215\344\275\234.md" +++ "b/docs/Leetcode_Solutions/Summarization/\344\272\214\345\217\211\346\240\221\347\232\204\344\270\200\344\272\233\346\223\215\344\275\234.md" @@ -220,6 +220,7 @@ public TreeNode precessor(TreeNode node) throws Exception { 后序遍历:[leetcode第145题](https://github.com/apachecn/LeetCode/blob/master/docs/Leetcode_Solutions/145._binary_tree_postorder_traversal.md) +层次遍历:[leetcode第102题](https://github.com/apachecn/LeetCode/blob/master/docs/Leetcode_Solutions/102._binary_tree_level_order_traversal.md) ## References @@ -240,3 +241,5 @@ public TreeNode precessor(TreeNode node) throws Exception { + + From 10140d31872be5b936cc5514114e8bd5735149d0 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 20 Jul 2018 21:42:55 +0800 Subject: [PATCH 0640/2496] Create 117._Populating_Next_Right_Pointers_in_Each_Node_II.md --- ...ing_Next_Right_Pointers_in_Each_Node_II.md | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 docs/Leetcode_Solutions/117._Populating_Next_Right_Pointers_in_Each_Node_II.md diff --git a/docs/Leetcode_Solutions/117._Populating_Next_Right_Pointers_in_Each_Node_II.md b/docs/Leetcode_Solutions/117._Populating_Next_Right_Pointers_in_Each_Node_II.md new file mode 100644 index 000000000..d03c873bf --- /dev/null +++ b/docs/Leetcode_Solutions/117._Populating_Next_Right_Pointers_in_Each_Node_II.md @@ -0,0 +1,74 @@ +# 117. Populating Next Right Pointers in Each Node II +**难度: 中等** + +## 刷题内容 + +> 原题连接 + +* https://leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/description/ + +> 内容描述 + +``` +Given a binary tree + +struct TreeLinkNode { + TreeLinkNode *left; + TreeLinkNode *right; + TreeLinkNode *next; +} +Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to NULL. + +Initially, all next pointers are set to NULL. + +Note: + +You may only use constant extra space. +Recursive approach is fine, implicit stack space does not count as extra space for this problem. +Example: + +Given the following binary tree, + + 1 + / \ + 2 3 + / \ \ +4 5 7 +After calling your function, the tree should look like: + + 1 -> NULL + / \ + 2 -> 3 -> NULL + / \ \ +4-> 5 -> 7 -> NULL +``` + +## 解题方案 + +> 思路 1 + +递归 + +```python +class Solution: + # @param root, a tree link node + # @return nothing + def connect(self, root): + res = [] + self.recurHelper(root, 0, res) + for cur_level in res: + for i in range(len(cur_level)-1): + cur_level[i].next = cur_level[i+1] + + def recurHelper(self, root, level, res): + if not root: return + if len(res) < level + 1: + res.append([]) + res[level].append(root) + self.recurHelper(root.left, level+1, res) + self.recurHelper(root.right, level+1, res) +``` + + + + From 2d630a6764b16f1235d2d4e0d83daddd800060d7 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 20 Jul 2018 21:47:35 +0800 Subject: [PATCH 0641/2496] Update 117._Populating_Next_Right_Pointers_in_Each_Node_II.md --- ...ing_Next_Right_Pointers_in_Each_Node_II.md | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/docs/Leetcode_Solutions/117._Populating_Next_Right_Pointers_in_Each_Node_II.md b/docs/Leetcode_Solutions/117._Populating_Next_Right_Pointers_in_Each_Node_II.md index d03c873bf..5ae8dfa06 100644 --- a/docs/Leetcode_Solutions/117._Populating_Next_Right_Pointers_in_Each_Node_II.md +++ b/docs/Leetcode_Solutions/117._Populating_Next_Right_Pointers_in_Each_Node_II.md @@ -69,6 +69,32 @@ class Solution: self.recurHelper(root.right, level+1, res) ``` +> 思路 2 +迭代版本 + +```python +class Solution: + # @param root, a tree link node + # @return nothing + def connect(self, root): + if not root: + return + res, cur_level = [], [root] + while cur_level: + next_level, tmp_res = [], [] + for node in cur_level: + tmp_res.append(node) + if node.left: + next_level.append(node.left) + if node.right: + next_level.append(node.right) + res.append(tmp_res) + cur_level = next_level + + for cur_level in res: + for i in range(len(cur_level)-1): + cur_level[i].next = cur_level[i+1] +``` From 3625144c0f7f26c3df9f425a2f953d3413b899ce Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 20 Jul 2018 22:23:03 +0800 Subject: [PATCH 0642/2496] Update and rename 270. Closest Binary Search Tree Value.md to 270._Closest_Binary_Search_Tree_Value.md --- .../270. Closest Binary Search Tree Value.md | 66 ---------- .../270._Closest_Binary_Search_Tree_Value.md | 113 ++++++++++++++++++ 2 files changed, 113 insertions(+), 66 deletions(-) delete mode 100644 docs/Leetcode_Solutions/270. Closest Binary Search Tree Value.md create mode 100644 docs/Leetcode_Solutions/270._Closest_Binary_Search_Tree_Value.md diff --git a/docs/Leetcode_Solutions/270. Closest Binary Search Tree Value.md b/docs/Leetcode_Solutions/270. Closest Binary Search Tree Value.md deleted file mode 100644 index b2aafe48a..000000000 --- a/docs/Leetcode_Solutions/270. Closest Binary Search Tree Value.md +++ /dev/null @@ -1,66 +0,0 @@ -### 270. Closest Binary Search Tree Val - -题目: - - - - - -难度 : Easy - -最简单的算法是inorder一遍,得到有序的lst,然后O(N) 寻找最靠近的,但是明显不是很高效。 - -AC代码 - -``` -class Solution(object): - def closestValue(self, root, target): - """ - :type root: TreeNode - :type target: float - :rtype: int - """ - lst = [] - - def inorder(root): - if root: - inorder(root.left) - lst.append(root.val) - inorder(root.right) - - inorder(root) - - close = lst[0] - diff = abs(target - lst[0]) - - for i in lst: - if abs(target - i) < diff: - close = i - diff = abs(target - i ) - - return close -``` - - - -AC代码,跟binary search tree 寻值一样, loop 一遍树来寻找 - - - -``` - -class Solution(object): - def closestValue(self, root, target): - """ - :type root: TreeNode - :type target: float - :rtype: int - """ - close = root.val - - while root: - close = root.val if abs(target - root.val) < abs(target - close) else close - root = root.right if root.val < target else root.left - return close -``` - diff --git a/docs/Leetcode_Solutions/270._Closest_Binary_Search_Tree_Value.md b/docs/Leetcode_Solutions/270._Closest_Binary_Search_Tree_Value.md new file mode 100644 index 000000000..c7f7bff8a --- /dev/null +++ b/docs/Leetcode_Solutions/270._Closest_Binary_Search_Tree_Value.md @@ -0,0 +1,113 @@ +# 270. Closest Binary Search Tree Value +**难度: 简单** + +## 刷题内容 + +> 原题连接 + +* https://leetcode.com/problems/closest-binary-search-tree-value/description/ + +> 内容描述 + +``` +Given a non-empty binary search tree and a target value, find the value in the BST that is closest to the target. + +Note: + +Given target value is a floating point. +You are guaranteed to have only one unique value in the BST that is closest to the target. +Example: + +Input: root = [4,2,5,1,3], target = 3.714286 + + 4 + / \ + 2 5 + / \ +1 3 + +Output: 4 +``` + +## 解题方案 + +> 思路 1 + +来个中序遍历,再判断哪个最close + +```python +class Solution(object): + def closestValue(self, root, target): + """ + :type root: TreeNode + :type target: float + :rtype: int + """ + res, diff = [], [] + self.inorder(root, res) + + for i in res: + diff.append(abs(i-target)) + return res[diff.index(min(diff))] + + def inorder(self, root, res): + if not root: + return + self.inorder(root.left, res) + res.append(root.val) + self.inorder(root.right, res) +``` + +> 思路 2 + +或者可以用更节省空间的方式,只保留一个closet,不断比较 + +```python +class Solution(object): + def closestValue(self, root, target): + """ + :type root: TreeNode + :type target: float + :rtype: int + """ + lst = [] + + def inorder(root): + if root: + inorder(root.left) + lst.append(root.val) + inorder(root.right) + + inorder(root) + + close = lst[0] + diff = abs(target - lst[0]) + + for i in lst: + if abs(target - i) < diff: + close = i + diff = abs(target - i ) + + return close +``` + +> 思路 3 + +AC代码,跟binary search tree 寻值一样, loop 一遍树来寻找 + +```python +class Solution(object): + def closestValue(self, root, target): + """ + :type root: TreeNode + :type target: float + :rtype: int + """ + close = root.val + + while root: + close = root.val if abs(target - root.val) < abs(target - close) else close + root = root.right if root.val < target else root.left + return close +``` + From 3844ab2a7a87a2aad236760aad3bd3d07d073857 Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Sat, 21 Jul 2018 00:16:23 +0800 Subject: [PATCH 0643/2496] =?UTF-8?q?=E6=9B=B4=E6=96=B0=2064.=E6=9C=80?= =?UTF-8?q?=E5=B0=8F=E8=B7=AF=E5=BE=84=E5=92=8C=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=80=9D=E8=B7=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../064._minimum_path_sum.md | 96 ++++++++++--------- 1 file changed, 50 insertions(+), 46 deletions(-) diff --git a/docs/Leetcode_Solutions/064._minimum_path_sum.md b/docs/Leetcode_Solutions/064._minimum_path_sum.md index 591c171b5..6dd5420c5 100644 --- a/docs/Leetcode_Solutions/064._minimum_path_sum.md +++ b/docs/Leetcode_Solutions/064._minimum_path_sum.md @@ -1,58 +1,62 @@ +# 64. Minimum Path Sum 最小路径和 -###64. Minimum Path Sum +**难度: Medium** -题目: - +## 刷题内容 +> 原题连接 -难度: - -Medium - - - -非常明显的DP - -状态转移方程 - -dp[i][j] = gird[i][j] + min(dp[i-1][j], dp[i][j-1]) - - -然后注意一下边界的处理,一开始dp[0][0] = grid[0][0] - -第一行和第一列,之后开始全用状态转移方程 +* https://leetcode.com/problems/minimum-path-sum +* https://leetcode-cn.com/problems/minimum-path-sum/description +> 内容描述 ``` -class Solution(object): - def minPathSum(self, grid): - """ - :type grid: List[List[int]] - :rtype: int - """ - m = len(grid) - n = len(grid[0]) if m else 0 - - dp = [[0 for i in range(n)] for i in range(m)] - - dp[0][0] = grid[0][0] - - # first row - for i in range(1,n): - dp[0][i] = grid[0][i] + dp[0][i-1] +给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 - # first col - for i in range(1,m): - dp[i][0] = grid[i][0] + dp[i-1][0] - - - for i in range(1,m): - for j in range(1,n): - dp[i][j] = grid[i][j] + min(dp[i-1][j], dp[i][j-1]) - - - return dp[m-1][n-1] +说明:每次只能向下或者向右移动一步。 +示例: +输入: +[ + [1,3,1], + [1,5,1], + [4,2,1] +] +输出: 7 +解释: 因为路径 1→3→1→1→1 的总和最小。 +``` +## 解题方案 + +> 思路 1 + +* 经典的动态规划问题,和:72. 编辑距离 类似 + +```python +class Solution: + def minPathSum(self, grid): + """ + :type grid: List[List[int]] + :rtype: int + """ + # import numpy as np + # m, n = np.shape(grid) + m = len(grid) + n = len(grid[0]) + # matR = np.zeros([m, n]) + matR = [[0 for j in i] for i in grid] + for i in range(0, m): + for j in range(0, n): + if i == 0 and j == 0: + matR[0][0] = grid[0][0] + elif i == 0: + matR[i][j] = matR[i][j-1]+grid[i][j] + elif j == 0: + matR[i][j] = matR[i-1][j]+grid[i][j] + else: + matR[i][j] = min(matR[i-1][j]+grid[i][j], matR[i][j-1]+grid[i][j]) + + return matR[i][j] ``` From 8b871349b731cf89a14f0a19816e73b04606a708 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 21 Jul 2018 01:05:01 +0800 Subject: [PATCH 0644/2496] Update 064._minimum_path_sum.md --- .../064._minimum_path_sum.md | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/docs/Leetcode_Solutions/064._minimum_path_sum.md b/docs/Leetcode_Solutions/064._minimum_path_sum.md index 6dd5420c5..fe89255e5 100644 --- a/docs/Leetcode_Solutions/064._minimum_path_sum.md +++ b/docs/Leetcode_Solutions/064._minimum_path_sum.md @@ -35,28 +35,26 @@ * 经典的动态规划问题,和:72. 编辑距离 类似 ```python -class Solution: +class Solution(object): def minPathSum(self, grid): """ :type grid: List[List[int]] :rtype: int """ - # import numpy as np - # m, n = np.shape(grid) - m = len(grid) - n = len(grid[0]) - # matR = np.zeros([m, n]) - matR = [[0 for j in i] for i in grid] - for i in range(0, m): - for j in range(0, n): - if i == 0 and j == 0: - matR[0][0] = grid[0][0] - elif i == 0: - matR[i][j] = matR[i][j-1]+grid[i][j] - elif j == 0: - matR[i][j] = matR[i-1][j]+grid[i][j] + if not grid or len(grid) == 0: + return 0 + row = len(grid) + col = len(grid[0]) if row else 0 + dp = [[0 for j in range(col)] for i in range(row)] + for i in range(row): + for j in range(col): + if i > 0 and j > 0: + dp[i][j] = min(dp[i-1][j]+grid[i][j], dp[i][j-1]+grid[i][j]) + elif i > 0 and j == 0: + dp[i][j] = sum([grid[k][0] for k in range(i+1)]) + elif i == 0 and j > 0: + dp[i][j] = sum([grid[0][k] for k in range(j+1)]) else: - matR[i][j] = min(matR[i-1][j]+grid[i][j], matR[i][j-1]+grid[i][j]) - - return matR[i][j] + dp[i][j] = grid[0][0] + return dp[-1][-1] ``` From 1c8efd168375065aa8aa179a9499561537a58cb8 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 21 Jul 2018 06:31:36 +0800 Subject: [PATCH 0645/2496] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a96cf5ceb..525f31bf8 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,7 @@ 16. https://www.nowcoder.com/ta/coding-interviews?page=1 17. [【小姐姐】刷题博客](https://www.liuchuo.net/about) 18. [公瑾的Github](https://github.com/yuzhoujr/leetcode) +19. [shejie1993](https://shenjie1993.gitbooks.io/leetcode-python/content/096%20Unique%20Binary%20Search%20Trees.html) > Please note, this repository is inspired from [KrisYu](https://github.com/KrisYu/LeetCode-CLRS-Python). However, it has been modified, added and improved to reflect our knowledge, wisdom and effort. From 1d8dc25640056087bfb66bd9968601d482862362 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 21 Jul 2018 06:59:22 +0800 Subject: [PATCH 0646/2496] Update 096._unique_binary_search_trees.md --- .../096._unique_binary_search_trees.md | 55 ++++++++++++------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/docs/Leetcode_Solutions/096._unique_binary_search_trees.md b/docs/Leetcode_Solutions/096._unique_binary_search_trees.md index 2e29cf929..cf9d8c9a7 100644 --- a/docs/Leetcode_Solutions/096._unique_binary_search_trees.md +++ b/docs/Leetcode_Solutions/096._unique_binary_search_trees.md @@ -1,43 +1,56 @@ -###96. Unique Binary Search Trees +# 96. Unique Binary Search Trees +**难度: 中等** +## 刷题内容 +> 原题连接 -题目: - +* https://leetcode.com/problems/unique-binary-search-trees/description/ +> 内容描述 -难度: -Medium +``` +Given n, how many structurally unique BST's (binary search trees) that store values 1 ... n? -思路: +Example: +Input: 3 +Output: 5 +Explanation: +Given n = 3, there are a total of 5 unique BST's: -参照此处hint: + 1 3 3 2 1 + \ / / / \ \ + 3 2 1 1 3 2 + / / \ \ + 2 1 2 3 +``` - +## 解题方案 +> 思路 1 -首先明确n个不等的数它们能构成的二叉搜索树的种类都是相等的. -毫无头绪,对于1...n的bst,可以这样看,k可以作为root,那么1..k-1必定在左边,k+1...n必定在右边,而1...k-1课产生的bst树是dp[k-1],右边产生的数是dp[n-k],所以能生成的树的数量是 dp[k-1]* dp[n-k] +参照此处hint: -dp[n] = sum(dp[k-1]*dp[n-k]),从0到k +https://shenjie1993.gitbooks.io/leetcode-python/096%20Unique%20Binary%20Search%20Trees.html -``` +首先明确n个不等的数它们能构成的二叉搜索树的种类都是相等的。而且1到n都可以作为二叉搜索树的根节点,当k是根节点时,它的左边有k-1个不等的数,它的右边有n-k个不等的数。以k为根节点的二叉搜索树的种类就是左右可能的种类的乘积。用递推式表示就是 h(n) = h(0)*h(n-1) + h(1)*h(n-2) + ... + h(n-1)h(0) (其中n>=2) ,其中h(0)=h(1)=1,因为0个或者1个数能组成的形状都只有一个。从1到n依次算出h(x)的值即可。此外这其实就是一个卡特兰数,可以直接用数学公式计算,不过上面的方法更加直观一些。 + + +```python class Solution(object): def numTrees(self, n): """ :type n: int :rtype: int """ - dp = [ 1 for i in range(n+1)] - - for i in range(2,n+1): - s = 0 - for k in range(i): - s += dp[k]*dp[i-k-1] - dp[i] = s - + dp = [1 for i in range(n+1)] + for i in range(2, n+1): + s = 0 + for k in range(i): + s += dp[k]*dp[i-k-1] + dp[i] = s return dp[-1] -``` \ No newline at end of file +``` From f973a0b9d975e938c912ca0e16d83fc0834f4ef5 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 21 Jul 2018 07:12:23 +0800 Subject: [PATCH 0647/2496] Update 392._is_subsequence.md --- .../Leetcode_Solutions/392._is_subsequence.md | 67 ++++++++++++------- 1 file changed, 42 insertions(+), 25 deletions(-) diff --git a/docs/Leetcode_Solutions/392._is_subsequence.md b/docs/Leetcode_Solutions/392._is_subsequence.md index b7727173b..44c5b8128 100644 --- a/docs/Leetcode_Solutions/392._is_subsequence.md +++ b/docs/Leetcode_Solutions/392._is_subsequence.md @@ -1,17 +1,39 @@ +# 392. Is Subsequence +**难度: 中等** -###392. Is Subsequence +## 刷题内容 +> 原题连接 -题目: - +* https://leetcode.com/problems/is-subsequence/description/ +> 内容描述 -难度: +``` + +Given a string s and a string t, check if s is subsequence of t. + +You may assume that there is only lower case English letters in both s and t. t is potentially a very long (length ~= 500,000) string, and s is a short string (<=100). -Medium +A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (ie, "ace" is a subsequence of "abcde" while "aec" is not). +Example 1: +s = "abc", t = "ahbgdc" -思路 +Return true. + +Example 2: +s = "axc", t = "ahbgdc" + +Return false. + +Follow up: +If there are lots of incoming S, say S1, S2, ... , Sk where k >= 1B, and you want to check one by one to see if T has its subsequence. In this scenario, how would you change your code? +``` + +## 解题方案 + +> 思路 1 follow up question很有意思 @@ -19,9 +41,9 @@ follow up question很有意思 最naive的思路表现形式如下: -超时 +beats 53.74% -``` +```python class Solution(object): def isSubsequence(self, s, t): """ @@ -29,7 +51,7 @@ class Solution(object): :type t: str :rtype: bool """ - if s == "": return True + if s == '': return True for i in xrange(len(t)): if t[i] == s[0]: return self.isSubsequence(s[1:],t[i+1:]) @@ -37,12 +59,12 @@ class Solution(object): return False ``` -因为直接操作string的昂贵以及递归的昂贵 +> 思路 2 -同样的思路 +递归操作以及对字符串的操作太过于昂贵,所以用index来处理,节省了时间和空间 -``` +```python class Solution(object): def isSubsequence(self, s, t): """ @@ -50,20 +72,15 @@ class Solution(object): :type t: str :rtype: bool """ - if s == "" : return True - - ps, pt = 0, 0 - lens, lent = len(s), len(t) - while ps < lens and pt < lent: - if s[ps] == t[pt]: - ps += 1 - pt += 1 - else: - pt += 1 - - return ps >= lens + if s == '': return True + ps, pt = 0, 0 + while ps < len(s) and pt < len(t): + if s[ps] == t[pt]: + ps += 1 + pt += 1 + return ps >= len(s) ``` -AC +精妙绝伦!! From 8dc29da277c8a2c7e5f5d1ae121513e13455e56c Mon Sep 17 00:00:00 2001 From: chenyyx Date: Sat, 21 Jul 2018 12:22:37 +0800 Subject: [PATCH 0648/2496] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20064=20=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../064._minimum_path_sum.ipynb | 160 ++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 docs/Leetcode_Solutions/064._minimum_path_sum.ipynb diff --git a/docs/Leetcode_Solutions/064._minimum_path_sum.ipynb b/docs/Leetcode_Solutions/064._minimum_path_sum.ipynb new file mode 100644 index 000000000..2844c4953 --- /dev/null +++ b/docs/Leetcode_Solutions/064._minimum_path_sum.ipynb @@ -0,0 +1,160 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 064. Minimum Path Sum 最小路径和\n", + "\n", + "### 难度:Medium\n", + "\n", + "## 刷题内容\n", + "\n", + "> 原题链接\n", + "\n", + " - 中文:https://leetcode-cn.com/problems/minimum-path-sum/description\n", + " - 英文:https://leetcode.com/problems/minimum-path-sum\n", + " \n", + "> 内容描述\n", + "\n", + "```\n", + "给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。\n", + "\n", + "说明:每次只能向下或者向右移动一步。\n", + "\n", + "示例:\n", + "\n", + "输入:\n", + "[\n", + " [1,3,1],\n", + " [1,5,1],\n", + " [4,2,1]\n", + "]\n", + "输出: 7\n", + "解释: 因为路径 1→3→1→1→1 的总和最小。\n", + "```\n", + "\n", + "## 解题方案\n", + "\n", + "> 思路 1\n", + "\n", + "使用 动态规划 ,我们考虑到,一个位于 [i][j] 位置的格子,到达它的路径只有 2 条:1 条是从上到下到达这个格子([i-1][j] -> [i][j]),另一条是从左到右到达这个格子([i][j-1] -> [i][j])。我们只需要关注这两条路径中,哪条路径的路径和最小就好了。 另外可以参考 072.编辑距离 。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "7\n" + ] + } + ], + "source": [ + "class Solution:\n", + " def minPathSum(self, grid):\n", + " \"\"\"\n", + " :type grid: List[List[int]]\n", + " :rtype: int\n", + " \"\"\"\n", + " m = len(grid)\n", + " n = len(grid[0])\n", + " dp = grid.copy()\n", + " for i in range(1, n):\n", + " dp[0][i] = dp[0][i-1] + grid[0][i]\n", + " for i in range(1, m):\n", + " dp[i][0] = dp[i-1][0] + grid[i][0]\n", + " for i in range(1, m):\n", + " for j in range(1, n):\n", + " dp[i][j] = min(dp[i][j-1] + grid[i][j], dp[i-1][j] + grid[i][j])\n", + " return dp[m-1][n-1]\n", + " \n", + "s = Solution()\n", + "grid = [\n", + " [1,3,1],\n", + " [1,5,1],\n", + " [4,2,1]\n", + "]\n", + "print(s.minPathSum(grid))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上面的版本是我最初写成的,后来听大佬们说,尽量减少 for 循环的个数。改成下面的最终版本,已经 AC 。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "7\n" + ] + } + ], + "source": [ + "class Solution(object):\n", + " def minPathSum(self, grid):\n", + " \"\"\"\n", + " :type grid: List[List[int]]\n", + " :rtype: int\n", + " \"\"\"\n", + " if not grid or len(grid) == 0:\n", + " return 0\n", + " row = len(grid)\n", + " col = len(grid[0]) if row else 0\n", + " dp = [[0 for j in range(col)] for i in range(row)]\n", + " for i in range(row):\n", + " for j in range(col):\n", + " if i > 0 and j > 0:\n", + " dp[i][j] = min(dp[i-1][j]+grid[i][j], dp[i][j-1]+grid[i][j])\n", + " elif i > 0 and j == 0:\n", + " dp[i][j] = sum([grid[k][0] for k in range(i+1)])\n", + " elif i == 0 and j > 0:\n", + " dp[i][j] = sum([grid[0][k] for k in range(j+1)])\n", + " else:\n", + " dp[i][j] = grid[0][0]\n", + " return dp[-1][-1]\n", + " \n", + "s = Solution()\n", + "grid = [\n", + " [1,3,1],\n", + " [1,5,1],\n", + " [4,2,1]\n", + "]\n", + "print(s.minPathSum(grid))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 15eacbb98979fe346cfdb0996f8de82d56c6db8c Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 21 Jul 2018 20:52:01 +0800 Subject: [PATCH 0649/2496] Create 249._Group_Shifted_Strings.md --- 249._Group_Shifted_Strings.md | 61 +++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 249._Group_Shifted_Strings.md diff --git a/249._Group_Shifted_Strings.md b/249._Group_Shifted_Strings.md new file mode 100644 index 000000000..1ad1c478d --- /dev/null +++ b/249._Group_Shifted_Strings.md @@ -0,0 +1,61 @@ +# 249. Group Shifted Strings +**难度: 中等** + +## 刷题内容 + +> 原题连接 + +* https://leetcode.com/problems/group-shifted-strings/description/ + +> 内容描述 + +``` +Given a string, we can "shift" each of its letter to its successive letter, for example: "abc" -> "bcd". We can keep "shifting" which forms the sequence: + +"abc" -> "bcd" -> ... -> "xyz" +Given a list of strings which contains only lowercase alphabets, group all strings that belong to the same shifting sequence. + +Example: + +Input: ["abc", "bcd", "acef", "xyz", "az", "ba", "a", "z"], +Output: +[ + ["abc","bcd","xyz"], + ["az","ba"], + ["acef"], + ["a","z"] +] +``` + +## 解题方案 + +> 思路 1 + +hash table存储pattern + +```python +class Solution(object): + def groupStrings(self, strings): + """ + :type strings: List[str] + :rtype: List[List[str]] + """ + table = {} + for w in strings: + pattern = '' + for i in range(1, len(w)): + if ord(w[i]) - ord(w[i - 1]) >= 0: + pattern += str(ord(w[i]) - ord(w[i - 1])) + else: + pattern += str(ord(w[i]) - ord(w[i - 1]) + 26) ## 这是为了处理'az'和'ba'的情况 + + if pattern in table: + table[pattern].append(w) + else: + table[pattern] = [w] + return [table[pattern] for pattern in table] +``` + + + + From 9ec179964128d25f8d0f1bedd69af0bd5344a47b Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sun, 22 Jul 2018 22:42:48 +0800 Subject: [PATCH 0650/2496] Create 249._Group_Shifted_Strings.md --- .../249._Group_Shifted_Strings.md | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 docs/Leetcode_Solutions/249._Group_Shifted_Strings.md diff --git a/docs/Leetcode_Solutions/249._Group_Shifted_Strings.md b/docs/Leetcode_Solutions/249._Group_Shifted_Strings.md new file mode 100644 index 000000000..1ad1c478d --- /dev/null +++ b/docs/Leetcode_Solutions/249._Group_Shifted_Strings.md @@ -0,0 +1,61 @@ +# 249. Group Shifted Strings +**难度: 中等** + +## 刷题内容 + +> 原题连接 + +* https://leetcode.com/problems/group-shifted-strings/description/ + +> 内容描述 + +``` +Given a string, we can "shift" each of its letter to its successive letter, for example: "abc" -> "bcd". We can keep "shifting" which forms the sequence: + +"abc" -> "bcd" -> ... -> "xyz" +Given a list of strings which contains only lowercase alphabets, group all strings that belong to the same shifting sequence. + +Example: + +Input: ["abc", "bcd", "acef", "xyz", "az", "ba", "a", "z"], +Output: +[ + ["abc","bcd","xyz"], + ["az","ba"], + ["acef"], + ["a","z"] +] +``` + +## 解题方案 + +> 思路 1 + +hash table存储pattern + +```python +class Solution(object): + def groupStrings(self, strings): + """ + :type strings: List[str] + :rtype: List[List[str]] + """ + table = {} + for w in strings: + pattern = '' + for i in range(1, len(w)): + if ord(w[i]) - ord(w[i - 1]) >= 0: + pattern += str(ord(w[i]) - ord(w[i - 1])) + else: + pattern += str(ord(w[i]) - ord(w[i - 1]) + 26) ## 这是为了处理'az'和'ba'的情况 + + if pattern in table: + table[pattern].append(w) + else: + table[pattern] = [w] + return [table[pattern] for pattern in table] +``` + + + + From f888f0c843f010ad1246558047ead92dcd1fd69a Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sun, 22 Jul 2018 22:43:00 +0800 Subject: [PATCH 0651/2496] Delete 249._Group_Shifted_Strings.md --- 249._Group_Shifted_Strings.md | 61 ----------------------------------- 1 file changed, 61 deletions(-) delete mode 100644 249._Group_Shifted_Strings.md diff --git a/249._Group_Shifted_Strings.md b/249._Group_Shifted_Strings.md deleted file mode 100644 index 1ad1c478d..000000000 --- a/249._Group_Shifted_Strings.md +++ /dev/null @@ -1,61 +0,0 @@ -# 249. Group Shifted Strings -**难度: 中等** - -## 刷题内容 - -> 原题连接 - -* https://leetcode.com/problems/group-shifted-strings/description/ - -> 内容描述 - -``` -Given a string, we can "shift" each of its letter to its successive letter, for example: "abc" -> "bcd". We can keep "shifting" which forms the sequence: - -"abc" -> "bcd" -> ... -> "xyz" -Given a list of strings which contains only lowercase alphabets, group all strings that belong to the same shifting sequence. - -Example: - -Input: ["abc", "bcd", "acef", "xyz", "az", "ba", "a", "z"], -Output: -[ - ["abc","bcd","xyz"], - ["az","ba"], - ["acef"], - ["a","z"] -] -``` - -## 解题方案 - -> 思路 1 - -hash table存储pattern - -```python -class Solution(object): - def groupStrings(self, strings): - """ - :type strings: List[str] - :rtype: List[List[str]] - """ - table = {} - for w in strings: - pattern = '' - for i in range(1, len(w)): - if ord(w[i]) - ord(w[i - 1]) >= 0: - pattern += str(ord(w[i]) - ord(w[i - 1])) - else: - pattern += str(ord(w[i]) - ord(w[i - 1]) + 26) ## 这是为了处理'az'和'ba'的情况 - - if pattern in table: - table[pattern].append(w) - else: - table[pattern] = [w] - return [table[pattern] for pattern in table] -``` - - - - From 3ecaef69f039ae459714d67779451197a43e6d18 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Mon, 23 Jul 2018 14:59:35 +0800 Subject: [PATCH 0652/2496] Create 646._Maximum_Length_of_Pair_Chain.md --- .../646._Maximum_Length_of_Pair_Chain.md | 124 ++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 docs/Leetcode_Solutions/646._Maximum_Length_of_Pair_Chain.md diff --git a/docs/Leetcode_Solutions/646._Maximum_Length_of_Pair_Chain.md b/docs/Leetcode_Solutions/646._Maximum_Length_of_Pair_Chain.md new file mode 100644 index 000000000..0bf23d18f --- /dev/null +++ b/docs/Leetcode_Solutions/646._Maximum_Length_of_Pair_Chain.md @@ -0,0 +1,124 @@ +# 646. Maximum Length of Pair Chain +**难度: 中等** + +## 刷题内容 + +> 原题连接 + +* https://leetcode.com/problems/maximum-length-of-pair-chain/description/ + +> 内容描述 + +``` +You are given n pairs of numbers. In every pair, the first number is always smaller than the second number. + +Now, we define a pair (c, d) can follow another pair (a, b) if and only if b < c. Chain of pairs can be formed in this fashion. + +Given a set of pairs, find the length longest chain which can be formed. You needn't use up all the given pairs. You can select pairs in any order. + +Example 1: +Input: [[1,2], [2,3], [3,4]] +Output: 2 +Explanation: The longest chain is [1,2] -> [3,4] +Note: +The number of given pairs will be in the range [1, 1000]. +``` + +## 解题方案 + +> 思路 1 + +先按照start --> end中的end排序,即```pairs = sorted(pairs, key=lambda x:x[1])``` + +原因在于,你想想看,如果我们已经取得了最长的那一条序列,end最小的那个pair肯定在里面对不对? +如果你说不对,那假设它不在里面,现在max_chain的第一个pair是不是至少可以被end最小的那个pair替代,因为我的end比你更小,你都可以我为什么不可以,甚至如果我的 +start比你的end小的话,我还可以加在你前面呢,这样max_chain岂不是就不是最长的chain了? + +综上所述,我们只要先按照start --> end中的end排序,然后从第一个慢慢向下判断就行,如果不符合就跳过,符合我们就把长度加1,这样最后肯定是对的。 + +AC代码如下: + + +```python +class Solution(object): + def findLongestChain(self, pairs): + """ + :type pairs: List[List[int]] + :rtype: int + """ + if not pairs or len(pairs) == 0: + return 0 + pairs = sorted(pairs, key=lambda x:x[1]) + res, i = 0, -1 + while i + 1 < len(pairs): + res += 1 + i += 1 + cur_end = pairs[i][1] + while i + 1 < len(pairs) and pairs[i+1][0] <= cur_end: + i += 1 + return res +``` + +发现有大佬比我牛p多了,代码更nice + +```python +class Solution(object): + def findLongestChain(self, pairs): + """ + :type pairs: List[List[int]] + :rtype: int + """ + if not pairs or len(pairs) == 0: + return 0 + cur, res = float('-inf'), 0 + for p in sorted(pairs, key=lambda x: x[1]): + if cur < p[0]: cur, res = p[1], res + 1 + return res +``` + + + + +> 思路 2 + +动态规划 + +思路看代码就理解了,不宜多说 + + + +``` +class Solution(object): + def findLongestChain(self, pairs): + """ + :type pairs: List[List[int]] + :rtype: int + """ + if not pairs or len(pairs) == 0: + return 0 + pairs = sorted(pairs, key=lambda x:x[0]) + dp = [1] * len(pairs) + for i in range(1, len(pairs)): + for j in range(i): + dp[i] = max(dp[i], dp[j] + 1 if pairs[i][0] > pairs[j][1] else dp[j]) + return dp[-1] +``` +这样会超时,不知道为啥,然后改了下代码的写法就过了,beats 2.21% 哈哈哈哈哈, 管它呢,过了就行,代码如下: + +``python +class Solution(object): + def findLongestChain(self, pairs): + """ + :type pairs: List[List[int]] + :rtype: int + """ + if not pairs or len(pairs) == 0: + return 0 + pairs = sorted(pairs, key=lambda x:x[0]) + dp = [1] * len(pairs) + for i in range(1, len(pairs)): + dp[i] = max([dp[j] + 1 if pairs[i][0] > pairs[j][1] else dp[j] for j in range(i)]) + return dp[-1] +``` + + From 674f83ddb9fbb7c4764ee3a63955db75695807fd Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Mon, 23 Jul 2018 16:06:01 +0800 Subject: [PATCH 0653/2496] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 525f31bf8..95e7e24cf 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,10 @@ ## 项目贡献者 +> 项目基石 + +* [KrisYu的Github](https://github.com/KrisYu/LeetCode-CLRS-Python) + > 项目发起人 * [@Lisanaaa](https://github.com/Lisanaaa) From 8038f68ac290ab1ed2c102ac0551f5b0aca8852d Mon Sep 17 00:00:00 2001 From: chenyyx Date: Wed, 25 Jul 2018 11:57:53 +0800 Subject: [PATCH 0654/2496] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20010=20=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../010._regular_expression_matching.ipynb | 311 ++++++++++++++++++ 1 file changed, 311 insertions(+) create mode 100644 docs/Leetcode_Solutions/010._regular_expression_matching.ipynb diff --git a/docs/Leetcode_Solutions/010._regular_expression_matching.ipynb b/docs/Leetcode_Solutions/010._regular_expression_matching.ipynb new file mode 100644 index 000000000..8a6af2b6e --- /dev/null +++ b/docs/Leetcode_Solutions/010._regular_expression_matching.ipynb @@ -0,0 +1,311 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 010. Regular Expression Matching 正则表达式匹配\n", + "\n", + "### 难度:Hard\n", + "\n", + "## 刷题内容\n", + "\n", + "> 原题链接\n", + "\n", + " - 中文:https://leetcode-cn.com/problems/two-sum/description\n", + " - 英文:https://leetcode.com/problems/two-sum\n", + "\n", + "> 内容描述\n", + "\n", + "```\n", + "给定一个字符串 (s) 和一个字符模式 (p)。实现支持 '.' 和 '*' 的正则表达式匹配。\n", + "\n", + "'.' 匹配任意单个字符。\n", + "'*' 匹配零个或多个前面的元素。\n", + "匹配应该覆盖整个字符串 (s) ,而不是部分字符串。\n", + "\n", + "说明:\n", + " - s 可能为空,且只包含从 a-z 的小写字母。\n", + " - p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。\n", + "\n", + "示例 1:\n", + "输入:\n", + "s = \"aa\"\n", + "p = \"a\"\n", + "输出: false\n", + "解释: \"a\" 无法匹配 \"aa\" 整个字符串。\n", + "\n", + "示例 2:\n", + "输入:\n", + "s = \"aa\"\n", + "p = \"a*\"\n", + "输出: true\n", + "解释: '*' 代表可匹配零个或多个前面的元素, 即可以匹配 'a' 。因此, 重复 'a' 一次, 字符串可变为 \"aa\"。\n", + "\n", + "示例 3:\n", + "输入:\n", + "s = \"ab\"\n", + "p = \".*\"\n", + "输出: true\n", + "解释: \".*\" 表示可匹配零个或多个('*')任意字符('.')。\n", + "\n", + "示例 4:\n", + "输入:\n", + "s = \"aab\"\n", + "p = \"c*a*b\"\n", + "输出: true\n", + "解释: 'c' 可以不被重复, 'a' 可以被重复一次。因此可以匹配字符串 \"aab\"。\n", + "\n", + "示例 5:\n", + "输入:\n", + "s = \"mississippi\"\n", + "p = \"mis*is*p*.\"\n", + "输出: false\n", + "```\n", + "\n", + "## 解题方案\n", + "\n", + "> 思路 1\n", + "\n", + "暴力法。Lisanaaa 大佬想出来的,不得不赞一个,哈哈哈。之前想暴力法,把脑袋想爆掉了都没想全各种情况。那么,看看他是怎么解的吧。\n", + "\n", + "\".\" 很容易处理。难点就在 \"*\" 身上, \"*\" 是不会单独的,它一定是和前面的 一个字母或者 \".\" 配成一对 出现的。看成一对后是这样子的 \"X*\" ,它的性质是:要么匹配 0 个,要么匹配连续的 \"X\" 。所以尝试暴力法的时候一个 trick 是从后往前匹配。\n", + "\n", + "暴力解法也是可以 AC 的。\n", + "\n", + "下面这样来分情况:\n", + "\n", + " - 如果 s[i] = p[j] 或者 p[j]= . : 往前匹配一位\n", + " - 如果 p[j] = ' * ' , 检查一下,如果这个时候 p[j-1] = . 或者 p[j-1] = s[i] ,那么就往前匹配,如果这样能匹配过,就 return True , 否者我们忽略 'X* ' ,这里注意里面的递推关系。\n", + " - 再处理一下边界情况:\n", + " - s 已经匹配完了, 如果此时 p 还有,那么如果剩下的是 X* 这种可以过,所以需要检查一下\n", + " - p 匹配完毕,如果 s 还有没有匹配的话,那么就 return False" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n" + ] + } + ], + "source": [ + "class Solution(object):\n", + " def isMatch(self, s, p):\n", + " \"\"\"\n", + " :type s: str\n", + " :type p: str\n", + " :rtype: bool\n", + " \"\"\"\n", + " def helper(s, i, p, j):\n", + " if j == -1:\n", + " return i == -1\n", + " if i == -1:\n", + " if p[j] != '*':\n", + " return False\n", + " return helper(s, i, p, j-2)\n", + " if p[j] == '*':\n", + " if p[j-1] == '.' or p[j-1] == s[i]:\n", + " if helper(s, i-1, p, j):\n", + " return True\n", + " return helper(s, i, p, j-2)\n", + " if p[j] == '.' or p[j] == s[i]:\n", + " return helper(s, i-1, p, j-1)\n", + " return False\n", + "\n", + " return helper(s, len(s)-1, p, len(p)-1)\n", + " \n", + "s = 'abc'\n", + "p = 'a*abc'\n", + "ss = Solution()\n", + "print(ss.isMatch(s, p))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> 思路 2\n", + "\n", + "动态规划 解法。\n", + "\n", + "dp 优化,感觉和 edit distance 很像。DP优化待代码化,感觉学DP的一个重点除了递归学好以外,另一点是一定要会画表格。\n", + "\n", + "画一个表格来看一下状况\n", + "\n", + "```\n", + "\t\t\tc\t*\ta\t*\tb\n", + "\t\t0\t1\t2\t3\t4\t5\n", + "\t0\t1\t0\t1\t0\t1\t0\t\t\n", + "a\t1\t0\t0\t0\t1\t1\t0\t\t\t\t\t\n", + "a\t2\t0\t0\t0\t0\t1\t0\t\t\t\t\t\n", + "b\t3\t0\t0\t0\t0\t0\t1\t\t\t\n", + "```\n", + "\n", + "这里有几个取巧/容易出问题的敌方,这里画的表用的是1-based string。一上来,做的事包括:\n", + "\n", + " - 初始化,空字符匹配:dp[0][0] =1\n", + " - 第一行, c * 可以匹配空字符, c * a * 可以匹配空字符, p[j-1] != s[i] ,匹配空字符\n", + " - 然后进入第二行再来看,实际上我们可以看到,如果没有碰到 * 匹配还是很朴素的,但是碰到 * :\n", + " - 1 这个匹配可以从左侧传来,dp[i][j] = dp[i][j-1] ,that is 匹配 1 个\n", + " - 1 也可以有上方传来,这种情况是 p[j-1] = s[i] ,匹配多个 dp[i][j] = dp[i-1][j]\n", + " - 1 这个匹配也可以从间隔一个的左侧传来,that is 也可以有个性的匹配 0 个,如同匹配空字符一样 dp[i][j] = dp[i][j-2] ,但是注意匹配 0 个实际上有两种状况,如果 p[j-1]!=s[i] ,强制匹配 0 个,即使 p[j-1] == s[i] ,我们也可以傲娇的用它来匹配 0 个。\n", + " \n", + "再代码化一点:\n", + "\n", + " - s[i] == p[j] 或者 p[j] == '.' : dp[i][j] = dp[i-1][j-1]\n", + " - p[j] == '*' : 然后分几种情况\n", + " - p[j-1] != s[i] : dp[i][j] = dp[i][j-2] 匹配 0 个的状况\n", + " - p[j-1] == s[i] or p[i-1] == '.':\n", + " - dp[i][j] = dp[i-1][j] 匹配多个 s[i]\n", + " - dp[i][j] = dp[i][j-2] 匹配 0 个\n", + "\n", + "AC 代码,注意一下,因为上表为了表达方便,用的是 1-based string 系统,实际写代码的时候我们心里还是清楚这个 string 还是从 0 开始的,不过也可以尝试往前面添东西来方便。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n" + ] + } + ], + "source": [ + "class Solution(object):\n", + " def isMatch(self, s, p):\n", + " \"\"\"\n", + " :type s: str\n", + " :type p: str\n", + " :rtype: bool\n", + " \"\"\"\n", + " m, n = len(s), len(p)\n", + " dp = [ [0 for i in range(n+1)] for j in range(m+1)]\n", + "\n", + " dp[0][0] = 1\n", + "\n", + " # init the first line\n", + " for i in range(2,n+1):\n", + " if p[i-1] == '*':\n", + " dp[0][i] = dp[0][i-2]\n", + "\n", + " for i in range(1,m+1):\n", + " for j in range(1,n+1):\n", + " if p[j-1] == '*':\n", + " if p[j-2] != s[i-1] and p[j-2] != '.':\n", + " dp[i][j] = dp[i][j-2]\n", + " elif p[j-2] == s[i-1] or p[j-2] == '.':\n", + " dp[i][j] = dp[i-1][j] or dp[i][j-2]\n", + "\n", + " elif s[i-1] == p[j-1] or p[j-1] == '.':\n", + " dp[i][j] = dp[i-1][j-1]\n", + "\n", + " return dp[m][n] == 1 \n", + " \n", + "s = 'abc'\n", + "p = 'a*abc'\n", + "ss = Solution()\n", + "print(ss.isMatch(s, p))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "我做的动态规划和上面大体思路是类似的。\n", + "\n", + "直接说动态转移方程组了,我们首先定义一些变量方便解释,被匹配串为s,模式串为p。状态转移数组 dp[i][j]表示利用 p 的前 j 个字符匹配 s 的前 i 个字符的匹配结果(成功为 true,失败为 false)。\n", + "\n", + " - **s[i] == p[j] || p[j] == '.'** ,那么 dp[i][j] = dp[i-1][j-1] ,也就是既然 s 串的第 i 个字符能和 p 串的第 j 个字符匹配,那么如果 s 串的前 i-1 个字符和 p 串的前 j-1 个字符能匹配则 s 串的前 i 个和 p 串的前 j 个则能匹配,反之不能。\n", + " - **p[j] == '*'** :分情况讨论。\n", + " - **s[i] != p[j-1] && p[j-1] != '.'** ,那么 dp[i][j] = dp[i][j-2] ,也就是 * 号前面的那个字符在匹配的过程当中一个都不使用。\n", + " - **else,那么dp[i][j] = dp[i-1][j] || dp[i][j-1] || dp[i][j-2]**,也就是说要么使用 '*' 号进行匹配( dp[i-1][j] ),要么只使用 '*' 号前面的那个字符匹配,不使用 '*' 匹配( dp[i][j-1] ),要么 '*' 号前面的那个字符在匹配的过程当中一个都不使用( dp[i][j-2] ),只要有一个是 true 则能够匹配。\n", + " \n", + "最后考虑一下边界条件。一开始 i 是从 1 到 len(s) ,j 是 1 到 len(p) 。首先一来就能想到 dp[0][0] 是true,其他都是 false。但是这个边界条件是不够的。比如 isMatch(\"aab\", \"c * a * b\") ,dp[1][3] 应该是从 dp[0][2] 转移过来的,所以需要更多的边界条件,也就是一开始的 * 是能匹配空字符串的。所以我把 i 改到了从 0 开始,并且第二条也添加了 i=0,dp[i][j] = dp[i][j-2] 。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n" + ] + } + ], + "source": [ + "class Solution:\n", + " def isMatch(self, s, p):\n", + " \"\"\"\n", + " :type s: str\n", + " :type p: str\n", + " :rtype: bool\n", + " \"\"\"\n", + " dp = []\n", + " dp = [[False for i in range(len(p)+1)] for j in range(len(s)+1)]\n", + " dp[0][0] = True\n", + "# print(dp)\n", + " for i in range(len(s)+1):\n", + " for j in range(1, len(p)+1):\n", + " if i > 0 and (s[i-1] == p[j-1] or p[j-1] == '.'):\n", + "# print(\"1111111\",i)\n", + "# print(\"2222222\",j)\n", + " dp[i][j] = dp[i-1][j-1]\n", + "# print(\"3333333\",dp[i-1][j-1])\n", + " if p[j-1] == '*':\n", + " if i == 0 or (s[i-1] != p[j-2] and p[j-2] != '.'):\n", + "# print(\"4444444\",i)\n", + "# print(\"5555555\",j)\n", + " dp[i][j] = dp[i][j-2]\n", + "# print(\"6666666\",dp[i][j-2])\n", + " else:\n", + " dp[i][j] = dp[i-1][j] or dp[i][j-1] or dp[i][j-2]\n", + "# print(\"7777777\",i)\n", + "# print(\"8888888\",j)\n", + "# print(dp) \n", + " return dp[len(s)][len(p)]\n", + " \n", + "s = 'aa'\n", + "p = 'a*'\n", + "ss = Solution()\n", + "print(ss.isMatch(s, p))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From f04df71f41f656821ce0c0c54be301bfa9ba58f5 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 25 Jul 2018 16:37:45 +0800 Subject: [PATCH 0655/2496] =?UTF-8?q?Update=20and=20rename=20Binary=20Sear?= =?UTF-8?q?ch=20=E4=B8=8D=E6=98=93=E5=86=99.md=20to=20Binary=20Search.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...h \344\270\215\346\230\223\345\206\231.md" | 91 ------------------- .../Summarization/Binary Search.md | 17 ++++ 2 files changed, 17 insertions(+), 91 deletions(-) delete mode 100644 "docs/Leetcode_Solutions/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" create mode 100644 docs/Leetcode_Solutions/Summarization/Binary Search.md diff --git "a/docs/Leetcode_Solutions/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" "b/docs/Leetcode_Solutions/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" deleted file mode 100644 index bd65c3c65..000000000 --- "a/docs/Leetcode_Solutions/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" +++ /dev/null @@ -1,91 +0,0 @@ -### Binary Search 不易写 - - - -坊间一直有binary search不容易写对的传言,一写还真是||| - -值得注意的是这里的u位置上的元素搜索是不包括的 - -先献上递归版本伪码: - -``` -function Binary_Search(x, A, l, u) - if u < l then - No found error - else - m ← l + [ ( u - l ) / 2 ] //避免溢出 - if A[m] = x then - return m - if x < A[m] then - return Binary-Search(x, A, l, m - 1) - else - return Binary-Search(x, A, m + 1, u) -``` - - - -迭代版本伪码: - - - -``` -function Binary_Search(x, A, l, u) - while l < u do - m ← l + [ ( u - l ) / 2 ] - if A[m] = x then - return m - if x < A[m] then - u ← m - 1 - else - l ← m + 1 - return NIL - -``` - - - - - -或者这样,正确代码 - -```python -def binarySearch(nums, target): - l, r = 0, len(nums) -1 - while l <= r: - mid = l + ((r-l) >> 2) - if nums[mid] > target: - r = mid - 1 - elif nums[mid] < target: - l = mid + 1 - else: - return mid - return -1 -``` - - - - - -这样就不对 - -``` -def binarySearch(nums, target): - l, r = 0, len(nums) - while l < r: - mid = (l+r) / 2 - if nums[mid] == target: - return mid - elif nums[mid] > target: - r = mid - 1 - else: - l = mid + 1 - return -1 - -print binarySearch([1,2,3,4,5,6],1) -// → -1 -``` - - - -之所以binary Search很容易不对,是因为边界状况,所以觉得一上来应当检查边界状况 - diff --git a/docs/Leetcode_Solutions/Summarization/Binary Search.md b/docs/Leetcode_Solutions/Summarization/Binary Search.md new file mode 100644 index 000000000..396bca910 --- /dev/null +++ b/docs/Leetcode_Solutions/Summarization/Binary Search.md @@ -0,0 +1,17 @@ +### Binary Search + + +```python +def binarySearch(nums, target): + l, r = 0, len(nums) -1 + while l <= r: + mid = l + ((r-l) >> 2) + if nums[mid] > target: + r = mid - 1 + elif nums[mid] < target: + l = mid + 1 + else: + return mid + return -1 +``` + From f31567295c6d36014dd558ac249fe20f89fad32e Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 25 Jul 2018 16:55:17 +0800 Subject: [PATCH 0656/2496] =?UTF-8?q?Update=20and=20rename=20tree=5Fsearch?= =?UTF-8?q?=EF=BC=8C=5Fgraph=5Fsearch=EF=BC=8C=5Fdfs,=5Fbfs.md=20to=20DFS?= =?UTF-8?q?=E5=92=8CBFS.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Summarization/DFS\345\222\214BFS.md" | 43 +++++++------------ 1 file changed, 16 insertions(+), 27 deletions(-) rename "docs/Leetcode_Solutions/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" => "docs/Leetcode_Solutions/Summarization/DFS\345\222\214BFS.md" (58%) diff --git "a/docs/Leetcode_Solutions/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" "b/docs/Leetcode_Solutions/Summarization/DFS\345\222\214BFS.md" similarity index 58% rename from "docs/Leetcode_Solutions/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" rename to "docs/Leetcode_Solutions/Summarization/DFS\345\222\214BFS.md" index 656ec8a1f..5fdd97674 100644 --- "a/docs/Leetcode_Solutions/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" +++ "b/docs/Leetcode_Solutions/Summarization/DFS\345\222\214BFS.md" @@ -1,25 +1,6 @@ -# Tree Search, Graph Search, DFS, BFS +# Graph Search,DFS, BFS -其实原本是根本不知道还有tree search的,只知道graph search,原来graph search就是一般我看到的dfs,bfs,有一个结构来记录visited node,这样在寻找邻居的时候,防止已经visit的node再被visit. - - -## Tree Search - -general tree search pseudocode - - -``` -function TREE_SEARCH(problem, strategy) returns a solution, or failure - initialize the search tree using the initial state of problem - loop do - if there are no candidates for expansion then return failure - choose a leaf node for expansion according to strategy - if the node contains a goal state then return the corresponding solution - else expand the node and add the resulting nodes to the search tree - end -``` - ## DFS/BFS @@ -43,7 +24,8 @@ graph = {'A': set(['B', 'C']), 'F': set(['C', 'E'])} ``` ### DFS -The implementation below uses the stack data-structure to build-up and return a set of vertices that are accessible within the subjects connected component. Using Python’s overloading of the subtraction operator to remove items from a set, we are able to add only the unvisited adjacent vertices. + +迭代版本 ```python def dfs(graph, start): # iterative visited, stack = [], [start] @@ -55,7 +37,8 @@ def dfs(graph, start): # iterative return visited print(dfs(graph, 'A')) # ['A', 'C', 'F', 'E', 'B', 'D'] 这只是其中一种答案 ``` -The second implementation provides the same functionality as the first, however, this time we are using the more succinct recursive form. Due to a common Python gotcha with default parameter values being created only once, we are required to create a new visited set on each user invocation. Another Python language detail is that function variables are passed by reference, resulting in the visited mutable set not having to reassigned upon each recursive call. + +递归版本 ```python def dfs(graph, start, visited=None): # recursive if visited is None: @@ -68,7 +51,9 @@ def dfs(graph, start, visited=None): # recursive return visited print(dfs(graph, 'A')) # ['A', 'C', 'F', 'E', 'B', 'D'] 这只是其中一种答案 ``` -We are able to tweak both of the previous implementations to return all possible paths between a start and goal vertex. The implementation below uses the stack data-structure again to iteratively solve the problem, yielding each possible path when we locate the goal. Using a generator allows the user to only compute the desired amount of alternative paths. + + +迭代打印出从出发点到终点的路径 ```python def dfs_paths(graph, start, goal): # iterative stack = [(start, [start])] @@ -81,7 +66,8 @@ def dfs_paths(graph, start, goal): # iterative stack.append((next, path + [next])) print(list(dfs_paths(graph, 'A', 'F'))) # [['A', 'C', 'F'], ['A', 'B', 'E', 'F']] ``` -The implementation below uses the recursive approach calling the ‘yield from’ PEP380 addition to return the invoked located paths. Unfortunately the version of Pygments installed on the server at this time does not include the updated keyword combination. + +递归打印出从出发点到终点的路径 ```python def dfs_paths(graph, start, goal, path=None): # recursive if path is None: @@ -95,7 +81,7 @@ print(list(dfs_paths(graph, 'C', 'F'))) # [['C', 'A', 'B', 'E', 'F'], ['C', 'F'] ### BFS -Similar to the iterative DFS implementation the only alteration required is to remove the next item from the beginning of the list structure instead of the stacks last. +迭代版本 ```python def bfs(graph, start): # iterative visited, queue = [], [start] @@ -107,7 +93,9 @@ def bfs(graph, start): # iterative return visited print(bfs(graph, 'A')) # ['A', 'C', 'B', 'F', 'D', 'E'] ``` -This implementation can again be altered slightly to instead return all possible paths between two vertices, the first of which being one of the shortest such path. + + +返回两点之间的所有路径,第一个一定是最短的 ```python def bfs_paths(graph, start, goal): queue = [(start, [start])] @@ -120,7 +108,8 @@ def bfs_paths(graph, start, goal): queue.append((next, path + [next])) print(list(bfs_paths(graph, 'A', 'F'))) # [['A', 'C', 'F'], ['A', 'B', 'E', 'F']] ``` -Knowing that the shortest path will be returned first from the BFS path generator method we can create a useful method which simply returns the shortest path found or ‘None’ if no path exists. As we are using a generator this in theory should provide similar performance results as just breaking out and returning the first matching path in the BFS implementation. + +知道了这个特性,最短路径就很好搞了 ```python def bfs_paths(graph, start, goal): queue = [(start, [start])] From 45e4b522484f49ec4a1b0c82a60b650d2ffe8e0d Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 25 Jul 2018 17:00:03 +0800 Subject: [PATCH 0657/2496] =?UTF-8?q?Update=20DFS=E5=92=8CBFS.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "docs/Leetcode_Solutions/Summarization/DFS\345\222\214BFS.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/docs/Leetcode_Solutions/Summarization/DFS\345\222\214BFS.md" "b/docs/Leetcode_Solutions/Summarization/DFS\345\222\214BFS.md" index 5fdd97674..6054330dd 100644 --- "a/docs/Leetcode_Solutions/Summarization/DFS\345\222\214BFS.md" +++ "b/docs/Leetcode_Solutions/Summarization/DFS\345\222\214BFS.md" @@ -81,7 +81,7 @@ print(list(dfs_paths(graph, 'C', 'F'))) # [['C', 'A', 'B', 'E', 'F'], ['C', 'F'] ### BFS -迭代版本 +迭代版本,和DFS唯一的区别就是pop(0)而不是pop() ```python def bfs(graph, start): # iterative visited, queue = [], [start] From f1183712119e6c9d4c51b9122b0064a21e76a2ea Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 25 Jul 2018 17:10:23 +0800 Subject: [PATCH 0658/2496] Update 646._Maximum_Length_of_Pair_Chain.md --- docs/Leetcode_Solutions/646._Maximum_Length_of_Pair_Chain.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Leetcode_Solutions/646._Maximum_Length_of_Pair_Chain.md b/docs/Leetcode_Solutions/646._Maximum_Length_of_Pair_Chain.md index 0bf23d18f..379d6cbd5 100644 --- a/docs/Leetcode_Solutions/646._Maximum_Length_of_Pair_Chain.md +++ b/docs/Leetcode_Solutions/646._Maximum_Length_of_Pair_Chain.md @@ -32,7 +32,7 @@ The number of given pairs will be in the range [1, 1000]. 原因在于,你想想看,如果我们已经取得了最长的那一条序列,end最小的那个pair肯定在里面对不对? 如果你说不对,那假设它不在里面,现在max_chain的第一个pair是不是至少可以被end最小的那个pair替代,因为我的end比你更小,你都可以我为什么不可以,甚至如果我的 -start比你的end小的话,我还可以加在你前面呢,这样max_chain岂不是就不是最长的chain了? +end比你的start小的话,我还可以加在你前面呢,这样max_chain岂不是就不是最长的chain了? 综上所述,我们只要先按照start --> end中的end排序,然后从第一个慢慢向下判断就行,如果不符合就跳过,符合我们就把长度加1,这样最后肯定是对的。 From 9eba68acd1471d2e2d610ac46d8f3c65ad731a05 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 25 Jul 2018 17:28:58 +0800 Subject: [PATCH 0659/2496] Update 646._Maximum_Length_of_Pair_Chain.md --- docs/Leetcode_Solutions/646._Maximum_Length_of_Pair_Chain.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Leetcode_Solutions/646._Maximum_Length_of_Pair_Chain.md b/docs/Leetcode_Solutions/646._Maximum_Length_of_Pair_Chain.md index 379d6cbd5..a294701e3 100644 --- a/docs/Leetcode_Solutions/646._Maximum_Length_of_Pair_Chain.md +++ b/docs/Leetcode_Solutions/646._Maximum_Length_of_Pair_Chain.md @@ -105,7 +105,7 @@ class Solution(object): ``` 这样会超时,不知道为啥,然后改了下代码的写法就过了,beats 2.21% 哈哈哈哈哈, 管它呢,过了就行,代码如下: -``python +```python class Solution(object): def findLongestChain(self, pairs): """ From 9c728929f8c207d257d947943fc5c7679325f876 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 25 Jul 2018 18:11:27 +0800 Subject: [PATCH 0660/2496] Create 435._Non-overlapping_Intervals.md --- .../435._Non-overlapping_Intervals.md | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 docs/Leetcode_Solutions/435._Non-overlapping_Intervals.md diff --git a/docs/Leetcode_Solutions/435._Non-overlapping_Intervals.md b/docs/Leetcode_Solutions/435._Non-overlapping_Intervals.md new file mode 100644 index 000000000..b9f6f1dfd --- /dev/null +++ b/docs/Leetcode_Solutions/435._Non-overlapping_Intervals.md @@ -0,0 +1,95 @@ +# 435. Non-overlapping Intervals +**难度: 中等** + +## 刷题内容 + +> 原题连接 + +* https://leetcode.com/problems/non-overlapping-intervals/description/ + +> 内容描述 + +``` +Given a collection of intervals, find the minimum number of intervals you need to remove to make the rest of the intervals non-overlapping. + +Note: +You may assume the interval's end point is always bigger than its start point. +Intervals like [1,2] and [2,3] have borders "touching" but they don't overlap each other. +Example 1: +Input: [ [1,2], [2,3], [3,4], [1,3] ] + +Output: 1 + +Explanation: [1,3] can be removed and the rest of intervals are non-overlapping. +Example 2: +Input: [ [1,2], [1,2], [1,2] ] + +Output: 2 + +Explanation: You need to remove two [1,2] to make the rest of intervals non-overlapping. +Example 3: +Input: [ [1,2], [2,3] ] + +Output: 0 + +Explanation: You don't need to remove any of the intervals since they're already non-overlapping. +``` + +## 解题方案 + +> 思路 1 + +先按照start排序,然后每次如果下一个的start小于前一个的end的时候意味着我们需要删掉一个了,但是我们尽量留下end比较小的那个Interval,具体看代码会比较清晰 + +```python +# Definition for an interval. +# class Interval(object): +# def __init__(self, s=0, e=0): +# self.start = s +# self.end = e + +class Solution(object): + def eraseOverlapIntervals(self, intervals): + """ + :type intervals: List[Interval] + :rtype: int + """ + if not intervals or len(intervals) == 0: + return 0 + res = 0 + intervals = sorted(intervals, key=lambda x:x.start) + cur_end = intervals[0].end + for i in range(1, len(intervals)): + if intervals[i].start < cur_end: #overlap + res += 1 + cur_end = min(intervals[i].end, cur_end) ## 尽量留下end小的Interval + else: + cur_end = intervals[i].end + return res +``` + +> 思路 2 + +又发现有大佬比我牛p多了,代码更nice,跟646题比较像 + +首先按照end排序,我们可以知道的,一旦后面一个Interval的start比前一个的end小的话,这个时候我们就需要删除掉当前的这个Interval, +反之则前面的那些Interval已经成立了,我们只需要更新cur_end为当前Interval的end + + +```python +class Solution(object): + def eraseOverlapIntervals(self, intervals): + """ + :type intervals: List[Interval] + :rtype: int + """ + intervals.sort(key = lambda x: x.end) + res, cur_end = 0, -float("inf") + for i in intervals: + if cur_end > i.start: res += 1 + else: cur_end = i.end + return res +``` + + + From b06bfc58356ff3a2391e1bad285761bde1c75732 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 25 Jul 2018 19:25:59 +0800 Subject: [PATCH 0661/2496] =?UTF-8?q?Create=20=E9=9D=A2=E8=AF=95=E7=A1=AE?= =?UTF-8?q?=E8=AE=A4=E9=A2=98=E7=9B=AE=E7=BB=86=E8=8A=82=E9=97=AE=E9=A2=98?= =?UTF-8?q?.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...233\256\347\273\206\350\212\202\351\227\256\351\242\230.md" | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 "docs/Leetcode_Solutions/Summarization/\351\235\242\350\257\225\347\241\256\350\256\244\351\242\230\347\233\256\347\273\206\350\212\202\351\227\256\351\242\230.md" diff --git "a/docs/Leetcode_Solutions/Summarization/\351\235\242\350\257\225\347\241\256\350\256\244\351\242\230\347\233\256\347\273\206\350\212\202\351\227\256\351\242\230.md" "b/docs/Leetcode_Solutions/Summarization/\351\235\242\350\257\225\347\241\256\350\256\244\351\242\230\347\233\256\347\273\206\350\212\202\351\227\256\351\242\230.md" new file mode 100644 index 000000000..90a8924a2 --- /dev/null +++ "b/docs/Leetcode_Solutions/Summarization/\351\235\242\350\257\225\347\241\256\350\256\244\351\242\230\347\233\256\347\273\206\350\212\202\351\227\256\351\242\230.md" @@ -0,0 +1,3 @@ +1. The length of the given array is positive and will not exceed 20? +2. The sum of elements in the given array will not exceed 1000? +3. The output answer is guaranteed to be fitted in a 32-bit integer? From 44de38bd17af9e2aaa5113a901a485f34949a588 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 26 Jul 2018 00:12:17 +0800 Subject: [PATCH 0662/2496] Update and rename 416. Partition Equal Subset Sum.md to 416._Partition_Equal_Subset_Sum.md --- .../416. Partition Equal Subset Sum.md | 87 ------------------- .../416._Partition_Equal_Subset_Sum.md | 65 ++++++++++++++ 2 files changed, 65 insertions(+), 87 deletions(-) delete mode 100644 docs/Leetcode_Solutions/416. Partition Equal Subset Sum.md create mode 100644 docs/Leetcode_Solutions/416._Partition_Equal_Subset_Sum.md diff --git a/docs/Leetcode_Solutions/416. Partition Equal Subset Sum.md b/docs/Leetcode_Solutions/416. Partition Equal Subset Sum.md deleted file mode 100644 index 1dee2d982..000000000 --- a/docs/Leetcode_Solutions/416. Partition Equal Subset Sum.md +++ /dev/null @@ -1,87 +0,0 @@ -### 416. Partition Equal Subset Sum - - - -题目: - - -难度: - -Medium - -记得算法考试考过证明这个问题是NP的,当时用的是subset sum是NP,然后来证明这个?如果我们能找到一个subset的sum是整个array sum的一半,那么问题解决。subset sum我们又可以继续转化,转成背包问题。 - -值得注意的是,这是subset sum,并不是subarray sum(这个明显要简单一些,因为subarray是连着的). - -subset sum也是有自己的[wikipedia page](https://en.wikipedia.org/wiki/Subset_sum_problem). - - - -当然,这也是一个subset problem,我们当然也可以用subset,加入和不加入,但是worst case O(2^n). - - - -对于subset sum的递推方程式: - -subset(arr,n,s) = subset(arr,n-1,s) or subset(arr, n-1, s- arrp[n-1]) - - - -画表可以开始,第一列全为1,是因为不选全部可以为0 - - - -``` - 0 1 2 3 4 5 6 8 9 10 11 -0 1 0 0 0 0 0 0 0 0 0 0 -1 1 1 0 0 0 0 0 0 0 0 0 -5 1 1 0 0 0 1 1 0 0 0 0 -5 1 1 0 0 0 1 1 0 0 0 1 -``` - - - -所以伪多项式算法写出来 - -AC代码 - - - -``` -class Solution(object): - def canPartition(self, nums): - """ - :type nums: List[int] - :rtype: bool - """ - def subset(nums, s): - dp = [[0 for i in range(s+1) ] for j in range(len(nums)+1)] - - dp[0][0] = 1 - # init the first col - for i in range(len(nums)+1 - dp[i][0] = 1 - - for i in range(1,len(nums)+1): - for j in range(1,s+1): - if dp[i-1][j] == 1: - dp[i][j] = 1 - elif j >= nums[i-1] and dp[i-1][j-nums[i-1]] ==1: - dp[i][j] = 1 - return dp[-1][-1] == 1 - - - - total = sum(nums) - if total % 2 == 1: - return False - else: - half = total / 2 - return subset(nums,half) == 1 - -``` - - - -当然可以小调整,比如一旦发现,提前return等等,但是时间上依旧是后20%,不知道时间上快很多的人是如何做到的||| - diff --git a/docs/Leetcode_Solutions/416._Partition_Equal_Subset_Sum.md b/docs/Leetcode_Solutions/416._Partition_Equal_Subset_Sum.md new file mode 100644 index 000000000..1dd92f5fa --- /dev/null +++ b/docs/Leetcode_Solutions/416._Partition_Equal_Subset_Sum.md @@ -0,0 +1,65 @@ +# 416. Partition Equal Subset Sum +**难度: 中等** + +## 刷题内容 + +> 原题连接 + +* https://leetcode.com/problems/partition-equal-subset-sum/description/ + +> 内容描述 + +``` +Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal. + +Note: +Each of the array element will not exceed 100. +The array size will not exceed 200. +Example 1: + +Input: [1, 5, 11, 5] + +Output: true + +Explanation: The array can be partitioned as [1, 5, 5] and [11]. +Example 2: + +Input: [1, 2, 3, 5] + +Output: false + +Explanation: The array cannot be partitioned into equal sum subsets. +``` + +## 解题方案 + +> 思路 1 + +动态规划 + +dp[i]代表nums中能否找出一个subset的sum等于i,例如dp[0] = True是必然的,因为我们只要取空子集,那么其sum一定为0 + +```python +class Solution(object): + def canPartition(self, nums): + """ + :type nums: List[int] + :rtype: bool + """ + if not nums or len(nums) == 0: + return True + if sum(nums) % 2 != 0: ## 总和必须为偶数,否则肯定无法取两个集合的sum相等 + return False + half_sum = sum(nums)/2 + dp = [False] * (half_sum+1) + dp[0] = True + for i in range(len(nums)): + for j in range(half_sum, nums[i]-1, -1): + dp[j] = dp[j] or dp[j-nums[i]] + print(dp) + return dp[half_sum] +``` + + + + From f2f962ce9936e6198366545025fcb4862cd14c13 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 26 Jul 2018 00:30:11 +0800 Subject: [PATCH 0663/2496] Create 494._Target_Sum.md --- docs/Leetcode_Solutions/494._Target_Sum.md | 112 +++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 docs/Leetcode_Solutions/494._Target_Sum.md diff --git a/docs/Leetcode_Solutions/494._Target_Sum.md b/docs/Leetcode_Solutions/494._Target_Sum.md new file mode 100644 index 000000000..0b4a083ff --- /dev/null +++ b/docs/Leetcode_Solutions/494._Target_Sum.md @@ -0,0 +1,112 @@ +# 494. Target Sum +**难度: 中等** + +## 刷题内容 + +> 原题连接 + +* https://leetcode.com/problems/target-sum/description/ + +> 内容描述 + +``` +You are given a list of non-negative integers, a1, a2, ..., an, and a target, S. Now you have 2 symbols + and -. For each integer, you should choose one from + and - as its new symbol. + +Find out how many ways to assign symbols to make sum of integers equal to target S. + +Example 1: +Input: nums is [1, 1, 1, 1, 1], S is 3. +Output: 5 +Explanation: + +-1+1+1+1+1 = 3 ++1-1+1+1+1 = 3 ++1+1-1+1+1 = 3 ++1+1+1-1+1 = 3 ++1+1+1+1-1 = 3 + +There are 5 ways to assign symbols to make the sum of nums be target 3. +Note: +The length of the given array is positive and will not exceed 20. +The sum of elements in the given array will not exceed 1000. +Your output answer is guaranteed to be fitted in a 32-bit integer. +``` + +## 解题方案 + +> 思路 1 + +递归,findSum(s, start_idx) 函数的意思是从start_index开始向后的子集合能有几种得到s的方法 + +``` +class Solution(object): + def findTargetSumWays(self, nums, S): + """ + :type nums: List[int] + :type S: int + :rtype: int + """ + def findSum(s, start_idx): + if start_idx == len(nums): + return 1 if s == 0 else 0 + return findSum(s+nums[start_idx], start_idx+1) + findSum(s-nums[start_idx], start_idx+1) + return findSum(S, 0) +``` + +但是这样会超时,所以用cache 记一下 + +```python +class Solution(object): + def findTargetSumWays(self, nums, S): + """ + :type nums: List[int] + :type S: int + :rtype: int + """ + def findSum(s, start_idx): + if start_idx == len(nums): + return 1 if s == 0 else 0 + if (s, start_idx) not in cache: + cache[(s, start_idx)] = findSum(s+nums[start_idx], start_idx+1) + findSum(s-nums[start_idx], start_idx+1) + return cache[(s, start_idx)] + + cache = {} + return findSum(S, 0) +``` + +> 思路 2 + +首先我们要找到一个集合 X 的正sum和其补集 Y 的负sum之和为target. +- 则有 sum(X) - sum(Y) = target +- 又有 sum(X) + sum(Y) = sum(nums) +----> 因此由 1 式和 2 式证得:sum(X) = (sum(nums) + target) / 2 + +因此题目就变成了找到了一个subset的正sum为(sum(nums) + target) / 2 + +于是动态规划,利用[leetcode416题](https://github.com/apachecn/LeetCode/blob/master/docs/Leetcode_Solutions/416._Partition_Equal_Subset_Sum.md)的思想 + +但是这次dp[i]代表的是能够找出几个subset的sum等于i, 例如dp[0] = 1是必然的,因为我们只能取空子集,才能得到sum为0 + +```python +class Solution(object): + def findTargetSumWays(self, nums, S): + """ + :type nums: List[int] + :type S: int + :rtype: int + """ + def subsetSum(s): + dp = [0] * (s+1) + dp[0] = 1 + for i in range(len(nums)): + for j in range(s, nums[i]-1, -1): + dp[j] += dp[j-nums[i]] + return dp[-1] + + if sum(nums) < S or (S+sum(nums)) % 2 > 0: + return 0 + return subsetSum((S+sum(nums))/2) +``` + + + From 1e988e548b80cb1d18afda6165de8edda5f9284e Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 26 Jul 2018 00:30:44 +0800 Subject: [PATCH 0664/2496] Update 494._Target_Sum.md --- docs/Leetcode_Solutions/494._Target_Sum.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Leetcode_Solutions/494._Target_Sum.md b/docs/Leetcode_Solutions/494._Target_Sum.md index 0b4a083ff..e9f1a9598 100644 --- a/docs/Leetcode_Solutions/494._Target_Sum.md +++ b/docs/Leetcode_Solutions/494._Target_Sum.md @@ -79,7 +79,7 @@ class Solution(object): 首先我们要找到一个集合 X 的正sum和其补集 Y 的负sum之和为target. - 则有 sum(X) - sum(Y) = target - 又有 sum(X) + sum(Y) = sum(nums) -----> 因此由 1 式和 2 式证得:sum(X) = (sum(nums) + target) / 2 +- ---> 因此由 1 式和 2 式证得:sum(X) = (sum(nums) + target) / 2 因此题目就变成了找到了一个subset的正sum为(sum(nums) + target) / 2 From 36ad11a83c11b4c0cabce5687e2e0bbfc65e312f Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 26 Jul 2018 09:57:28 +0800 Subject: [PATCH 0665/2496] Update 257._binary_tree_paths.md --- .../257._binary_tree_paths.md | 126 ++++++++++++------ 1 file changed, 82 insertions(+), 44 deletions(-) diff --git a/docs/Leetcode_Solutions/257._binary_tree_paths.md b/docs/Leetcode_Solutions/257._binary_tree_paths.md index c0fdea6ed..c1191e275 100644 --- a/docs/Leetcode_Solutions/257._binary_tree_paths.md +++ b/docs/Leetcode_Solutions/257._binary_tree_paths.md @@ -1,45 +1,83 @@ -###257. Binary Tree Paths - -题目: - - - - -难度: - -Easy - - -Tag : tree, DFS - -类似的题目是Path Sum Ⅱ - - -第一眼看起来不像easy题目,然后堵了一下自己写的Path Sum Ⅱ自己的解答 - -同一种花样 - +# 257. Binary Tree Paths +**难度: 简单** + +## 刷题内容 + +> 原题连接 + +* https://leetcode.com/problems/binary-tree-paths/description/ + +> 内容描述 + ``` -class Solution: - # @param {TreeNode} root - # @return {string[]} - def binaryTreePaths(self, root): - if root == None: return [] - result = [] - self.auxTreePaths(root,result,"") - return result - - - def auxTreePaths(self,root,result,curStr): - if root == None: - return - curStr += str(root.val) - if root.left == None and root.right == None: - result.append(curStr) - if root.left: - self.auxTreePaths(root.left,result,curStr + "->") - if root.right: - self.auxTreePaths(root.right,result,curStr + "->") - -``` - +Given a binary tree, return all root-to-leaf paths. + +Note: A leaf is a node with no children. + +Example: + +Input: + + 1 + / \ +2 3 + \ + 5 + +Output: ["1->2->5", "1->3"] + +Explanation: All root-to-leaf paths are: 1->2->5, 1->3 +``` + +## 解题方案 + +> 思路 1 + +递归+DFS + +```python +class Solution(object): + def binaryTreePaths(self, root): + """ + :type root: TreeNode + :rtype: List[str] + """ + def helper(node, cur_path): + if not node.left and not node.right: ## 到leaf了 + res.append(cur_path+[node.val]) + return + if node.left: + helper(node.left, cur_path+[node.val]) + if node.right: + helper(node.right, cur_path+[node.val]) + + res = [] + if not root: + return res + helper(root, []) + + return ['->'.join([str(val) for val in path]) for path in res] +``` +注意一点,很多人可能看到这里有好几次cur_path+[node.val],觉得干嘛不直接写在最开头了,事实是这样做的话cur_path就已经变化了,因为要执行完if node.left才去执行if node.right,此时cur_path就不是原来的cur_path了。 + + + + + + + + + + + + + + + + + + + + + + From 7e8b308970fe79b8af87d7dbd4096eebbc322eff Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 26 Jul 2018 19:07:30 +0800 Subject: [PATCH 0666/2496] Update 006._ZigZag_Conversion.md --- .../006._ZigZag_Conversion.md | 41 ++++++++++++++++--- 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/docs/Leetcode_Solutions/006._ZigZag_Conversion.md b/docs/Leetcode_Solutions/006._ZigZag_Conversion.md index cc7bcbe33..82322de0e 100644 --- a/docs/Leetcode_Solutions/006._ZigZag_Conversion.md +++ b/docs/Leetcode_Solutions/006._ZigZag_Conversion.md @@ -1,15 +1,44 @@ -### 6. ZigZag Conversion +# ### 6. ZigZag Conversion +**难度: 中等** -题目: - +## 刷题内容 +> 原题连接 -难度: +* https://leetcode.com/problems/zigzag-conversion/ -Medium +> 内容描述 +``` +The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility) + +P A H N +A P L S I I G +Y I R +And then read line by line: "PAHNAPLSIIGYIR" + +Write the code that will take a string and make this conversion given a number of rows: + +string convert(string s, int numRows); +Example 1: + +Input: s = "PAYPALISHIRING", numRows = 3 +Output: "PAHNAPLSIIGYIR" +Example 2: + +Input: s = "PAYPALISHIRING", numRows = 4 +Output: "PINALSIGYAHRPI" +Explanation: + +P I N +A L S I G +Y A H R +P I +``` + +## 解题方案 -思路 +> 思路 1 参考大神[pharrellyhy](https://leetcode.com/problems/zigzag-conversion/discuss/3404/Python-O(n)-Solution-in-96ms-(99.43)?page=2)的思路, 纵向思维考虑,```index```从```0```开始,我们要一直***自增***直到```numRows-1```,此后又一直***自减***到```0```,重复执行。 From 9c8c145f17c7d9ac3a62f71bd2004c3781b45a51 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 26 Jul 2018 19:07:49 +0800 Subject: [PATCH 0667/2496] Update 006._ZigZag_Conversion.md --- docs/Leetcode_Solutions/006._ZigZag_Conversion.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Leetcode_Solutions/006._ZigZag_Conversion.md b/docs/Leetcode_Solutions/006._ZigZag_Conversion.md index 82322de0e..c3d0d140b 100644 --- a/docs/Leetcode_Solutions/006._ZigZag_Conversion.md +++ b/docs/Leetcode_Solutions/006._ZigZag_Conversion.md @@ -1,4 +1,4 @@ -# ### 6. ZigZag Conversion +# 6. ZigZag Conversion **难度: 中等** ## 刷题内容 From b05cf6d3c06abb70cb4d52ea98c10113a2e8672c Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 26 Jul 2018 19:16:58 +0800 Subject: [PATCH 0668/2496] Update 006._ZigZag_Conversion.md --- .../006._ZigZag_Conversion.md | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/docs/Leetcode_Solutions/006._ZigZag_Conversion.md b/docs/Leetcode_Solutions/006._ZigZag_Conversion.md index c3d0d140b..6f1f9139e 100644 --- a/docs/Leetcode_Solutions/006._ZigZag_Conversion.md +++ b/docs/Leetcode_Solutions/006._ZigZag_Conversion.md @@ -62,19 +62,17 @@ class Solution(object): """ if numRows == 1 or numRows >= len(s): return s - - L = [''] * numRows - index, step = 0, 1 - + res = [''] * numRows + idx, step = 0, 1 + for x in s: - L[index] += x - if index == 0: + res[idx] += x + if idx == 0: ## 第一行,一直向下走 step = 1 - elif index == numRows -1: + elif idx == numRows - 1: ## 最后一行了,向上走 step = -1 - index += step - - return ''.join(L) + idx += step + return ''.join(res) ``` 假设用我上面给的例子,并且在```L[index] += x```这一行后面打印出index, step, L的值, 输出结果如下: ``` From c1655f85dd12275d11d4a7414bab403025c427eb Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 27 Jul 2018 13:17:34 +0800 Subject: [PATCH 0669/2496] Update 118._pascal's_triangle.md --- .../118._pascal's_triangle.md | 46 +++++++++++++++++-- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/docs/Leetcode_Solutions/118._pascal's_triangle.md b/docs/Leetcode_Solutions/118._pascal's_triangle.md index ec1f9f357..1b2fae69d 100644 --- a/docs/Leetcode_Solutions/118._pascal's_triangle.md +++ b/docs/Leetcode_Solutions/118._pascal's_triangle.md @@ -1,13 +1,36 @@ -### 118. Pascal's Triangle +# 118. Pascal's Triangle +**难度: 简单** -题目: +## 刷题内容 - +> 原题连接 +* https://leetcode.com/problems/pascals-triangle/description/ -难度: +> 内容描述 -Easy +``` +Given a non-negative integer numRows, generate the first numRows of Pascal's triangle. + + +In Pascal's triangle, each number is the sum of the two numbers directly above it. + +Example: + +Input: 5 +Output: +[ + [1], + [1,1], + [1,2,1], + [1,3,3,1], + [1,4,6,4,1] +] +``` + +## 解题方案 + +> 思路 1 高中数学知识,把行数理理清楚就ok @@ -31,5 +54,18 @@ class Solution(object): res.append(tmp) return res ``` +或者可以写得更简单一些,这里谢谢荼靡小兄弟的想法,棒! +```python +class Solution(object): + def generate(self, numRows): + """ + :type numRows: int + :rtype: List[List[int]] + """ + res = [[1]] + for i in range(1, numRows): + res.append(map(lambda x,y:x+y, [0]+res[-1], res[-1]+[0])) + return res[:numRows] +``` From a3bbfb01b849f358653761899d26f2864ff5246c Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 27 Jul 2018 13:19:02 +0800 Subject: [PATCH 0670/2496] Create 118 --- images/118 | 1 + 1 file changed, 1 insertion(+) create mode 100644 images/118 diff --git a/images/118 b/images/118 new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/images/118 @@ -0,0 +1 @@ + From 6864864c040a844abc587f25855cb7b12a25ce1e Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 27 Jul 2018 13:19:49 +0800 Subject: [PATCH 0671/2496] Delete 118 --- images/118 | 1 - 1 file changed, 1 deletion(-) delete mode 100644 images/118 diff --git a/images/118 b/images/118 deleted file mode 100644 index 8b1378917..000000000 --- a/images/118 +++ /dev/null @@ -1 +0,0 @@ - From 2adc11dffdcab1dd0ee94420cff4245ac3f99fef Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 27 Jul 2018 13:20:01 +0800 Subject: [PATCH 0672/2496] Create 1.md --- images/118/1.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 images/118/1.md diff --git a/images/118/1.md b/images/118/1.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/images/118/1.md @@ -0,0 +1 @@ + From f5e3023854f0d7e8dd9c0ed5cc969b93887cc19b Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 27 Jul 2018 13:20:32 +0800 Subject: [PATCH 0673/2496] Add files via upload --- images/118/PascalTriangleAnimated2.gif | Bin 0 -> 28827 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/118/PascalTriangleAnimated2.gif diff --git a/images/118/PascalTriangleAnimated2.gif b/images/118/PascalTriangleAnimated2.gif new file mode 100644 index 0000000000000000000000000000000000000000..c002af436c3938e76b409c7cf9bc5bc6aa554db5 GIT binary patch literal 28827 zcmdSBWmMEr8!tKoNQ^i`cY}0?3?&HCA>AO|-QCQPGjzw$-QC?SBBjzus9=L4p3%2_ z&%Iyny63F3&i7gWy`TN;{p{x#dlZ!wpkkI-z)QdZ0PySAFEAPDZN8n|uU~5A<7Y?b|-J%*jVbJf6Vynu7

        nVF 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�Ketf6+9!Zx+M=$Qp290Hr}KU>fa$djf19@LxXo%L2y; zz%?M%({vhaCt*qe&;}fPI)pIIm4(yzdb-E}P6?L_o(2d!1W;4J0fH8R^9(pMp#2OS z`~wgh+@ydh0E`-NX&#dcXft?xfM$b-&gU`#(+2by6cGT{2Gn|*NQ;1v@E2c$a{_=l zLoh8L{4FK?OS1v%#+jh2!4Zle4){MN4rn%u!32C8&}@LX0j35Z`u``-|7+w~X);;U zfQ@sM$SlI0tmmOVn7Vq^7pIj5SP!^Tr2=(8dUjlGJAYk~D3csFNHex8#)fi?=j}>j zev&*SG(&ZTR_d+bhY<=5$&@#1KWFvC4#(3L>YEaa}bc{oQ&3#ljM2acy;}}QwX`@-m-3p zhG?grE>Yc}lwv6q$!&d(Lj2S(*pB~gqr|5Pz}`=Gv7MkYj8 zsZAc$lACxfzy4jPticN6!m<-Fmc;!1Q?6TQR#xQ1JU=RS;$!I_cEBoWTTdbjw3GOq zM^QXrA%98=(ugx8fK@#7)Xx^LQ7G)n= zrn5e@IA-!@y_{rLA;X5`)I-R9_`o)2+Rv!(U{T&CZZ6(he8RAVFq*_=4KK~r1+_Hi zVntcY&P~`w2+>D2YnU1gzb|(#AUQl_g}($dZFeu^y?3|LWF;8=c1xNC51fFE5>x~BBz2ornDuqti)j3IOqx|; zG2(bX=IOWNlT&vpEGN3|ANcw01SD69Q=P;KnqvaYwbEMcwm8LX>?9+*l0Dz)L5A;G znfl#IJLB6Aa$?3#G3CxW*gHMU`@cDR(09AHuJQW?UiSHoBTjvdPrrlg!Fj)l+kMBG zcXSUXJ92-x&x2G7D?AfU1*moR-=uE^t5?ZeVQF&K%JECZa;0MsI>bs#cYgcYa*gIY?lDo)T@_54=L1+F< zX)C3$d*F@P#8q+jr`<9V@`8;zWDOn>QQ!UiQ_Mt@WFLeuiB0AM@YTSo!!do`FUA`u zuI(cwDD*Sv=2;UhlXt5ROmzGI34}=NJJ;=b(!Ftx`lJYR0~|Cqd7)vX>P;azV!q2D zeZyp%`WZ0j!A*4y(YYp-t4Vu)^u-4C)|QtAycE-{=Tko;+Zdh6H$+g1VrFs2ij?r| z_ehFM$c>hXW5QW&&RccPH{5*2y9d#^m^=?c+;T4ESGc@3*kF2l?If-rfWzddzuAN0 zTP}f1Gi|7@Z}2IV*`hZ_tGO^Q=W^+Y%ZOQbi9%gxtNth}kUsh2J^{wrs2_ut{Q99B z4JBxoaYyvG{viLGJ$UD2euVruEnegHop<0(&P-DWm^$Dx>VEWRPi5dYl0yy9VxBw_ z=Bz|5cVS@y65=VmeDQVZ4&x=vKA9*83mJrF5?8xx+>A`O{TI9P~+4R zx35s}(Py*PT&=%*4Fn^apMQ>MxUC%)E|)KQJ#S*-&U!y-;;Y|7GU1c=Oc(FU_-9~9 zxie}(%8OmtiVef|YbLu&?(HhHpEZc#Hh0ciN{_t!J^H)Xw2%5?kMP^f8L~w``nwi= z(exPj@IEZkq_Ab20LyAPspd`fnu1M*JTd;=7dgxyEg>=pS3x zz@lKSB@OYb2}C0}rq?TRbwkwb;Qb%%4_K(jSoRYN4RJOm@oT6ttjeTiok_kXQL`Kf zQ~fv(@3`K`|>R-mp*YH-gnAffy5hWCUZYRQKk(yP@opVWn~a|myFyKN1YH5QoG zV+5b;O)t^U=GkSBrlft1fGE<;oc>URLpzg}aaKJkzMis^fck@XufunYsz>om!c`=s zG9p9bnXwoY7x)>^De02=>Agm!3NH zVW5H5n7}d;ihW7`n(d)a^}{weBE~c_TY$Z=gU&FEj2#gQCp@e(Y>o)A|3M1lr9T)a zQA&yd2cHAwW|@E+lsn8S@)N^88hI)b_#mfX7K1lcc@XjmRmUkI0_5Bk%VLLg973|i zm@^OgAqrD;3|lC`A~~{B{?V%v#1+rU6v-dKu^1MG%_|u;%6q8Cr$pyD+hqF`p&T&= zQVJKug=d4nh8XIqDF9{(YBa!*;v$lel+QuwICfEt#BsuHqC=HgaIgS&;bLkG5=TgR zU<894g0>V{8XdZpRz!iwNBC3#!Sh9ECL>J9LELe~|J|N|{w;xJFo$n4E=UaZ>CEgpH?BkMPUlaLikT9XOlTmjZzS!h2HE90_J6LMBaN z9}#7Z&`Fy`^5Pup?}+<8PT7dl=Hu8RGx;wO5KDwMvra9_AdQWe%uqklQ%F(UfgP#? zYi&rkgw{Ky(Dob1KMP_mYwVg0Q8Pg*OH4}wL#j*&cqFbO`NFHzDQ_lnj1}Ig5h}ys zYk@g$2BIxaCuxvyVc;Bzp2C8|{R_hPLYOxWH#d+jiO@Jkc%~S&sw(jPfo&8kP&rjX5xS9)7kL!}F$Xq3L#z(v@hDz6 zsn!fh!BJfn0#;-k63fHf^Q{aT&9O{YzrdD75%^X;XHnh@Nh%yfz@^-bfxa=3ac=2g zV9w(})Q3gRHbds&Brl#E%z~|0WbhVrEE>_06faZ{dj(N@IbdM|bt5DzN~5la$O}1D z9U|0LP(4IBvsnMkBTtgODH7H-MQLOxQ1{b4gowhk@;zqJV1Rd_;LvOiB8q}inFyUj zdu2-7CZMJ@X7ryywI!5zM(7re&^!S;7ec8EX__q367I2U^=F6m=o_U}sQ%Cv9`+?r zE|Ob9;?P7ABubjp<{i4@=cNZJuqU^$D;*wqb)IuJ@nr;b7NVY#@Xj*PrxM;QoaQP) z?wf@_@Wr+=Xq1_u^KcY8N_i+nB$`mNM9!RtJc+u$lKv;Yz_ zQCl!&K2g*kL2;7gKk&@I16{;K$XaHo42!HuulZ&q=gyQdpP9FcM>~T9%K`O%61tFs zJe%TGehs{2mv-r4AnMC3&$)f+p(neOCHue#^N}Jc(4h#2uwq`r^FWF%kMzZp%3vao zc&Ceb)GdOlS1F~+M6I?Ij%TzCnPZwlvJ3yjRxYxfRd&QFWhjN#=}Y&yN{ZvuQE{p} z2aR!nt})S4{L;ah=O0JVA3*3AuINE!y`iYSpHg+>eS4^w*p}6vj+L z5+3q}mmkJIOMTzQk`)}--_ayOZ}O?dM0ifqZ0k$=+xvSA6fQ>IJM3}V%*_n-|H)ku&;$PvT<(H7Kg!-}(EF$(+?t-vpF?vaGlOiTZaykex8YOK0 z4q^dQynDlSo$U`gAEk(#xtM~;#EXX<3pV)5>@Jq=`S5ICIE!+I=yAH+LxQN=c=BsE z9auLjyGlgrctn?xq1Z9HH(l%A?0VUCwATF{T*O2+F_E)4{08b%WcEoM`XaLX-dFU= z3dvp~@FGd}#Pi}GXYVFIzx&dYdW3@lOTbMGcRNFeIS2)Z!tp0r6ZiV;x~l?6UgD0P zGpMGBq_(KL-|p$lI#Lvm2I4B4B=p>m6`9bz`Ib$_83~^pj~KH}dapuOf~K}vH4;5} zci^PkL%AGu8>izDSUV%7J=c?QV?AG*9qH%rSe<`fT|~cn8B*r1diC+q)SE>;Y0DJK0$7dSytVp$fKa*2sV5?AW7 zPc2KwG;xwl7iq2tc>|i00@O>8w`=~x3#kuXapa(wyhV(%aHvL12A)MO2k|D*O(I&j zW$LcuVam9Shlu3KAE60HN`F1NviNXmY^j@Qik5h>C*@P9-to8pG`;P5@^-GI9VAT( zKglfH|L#EwX2+D6I!T7?s0!iGLWazBj_i6dmA8p#PO~Z zvCw%DZI$qc5ud(^hbhlVpRqbLnTsm$kK{p!A*0!Yi-d8z)|7UQEaGX0JbWGqMKF=_ zSm=x)vR80>@re_jEYoHG$i16-FY~rr*8c(;0--%GYD*6k?c$(*ypCMvm4yUt8$`c- z=gz%>7_miYtq59sP&h|O_Wd(>`10M}l=s&^L#|wk{4F$6s!#)A&;v5(kj|FItOY~y zIZ%q+%*M|6xgvJP3^FjWlE}7}PQ*qV*5&j7Vv)==cnI@68HS1&wfpcby3iWn#B35`9w70M5!y@s?l`of||p!^8K^yy77< zXqNVYU2hNT?OqyqeCYu=Lwie7LxujgywTg|X%10sav2YW0ZH?PF?Q*4Mo$$CYoO9D z6_XDv!Vn0|`1c&S?%QV@orJ|rsbX}UgR?2x2uO;8b9qbo>%I-G88w97G`ge40 zLFpO6fs39ovtDseDaq%Zt-Wj#kWsMpdVu$XVWIk#iW^UhZ_X}{N+RU(?QOExAA$e;L*+uZ@-K@WhGaECtZGVtn|J0X$>PPZN`f>&A2rxfKqNBGyWqnIpPP$oog+{u z-bw8AtK#Z$WkQ1k)9s5}W#9Im)ev&29Io|9@mEuWXh`NDlcX3U&f0B~1Qkb-cQoKh z$?a%Fv$ho@M}#Qd5$uvOxW6JZ!;&U)JkUfYIC)Tot0rw*@-NZ?=^{qL7l(~!d zUG3he#9KOUdPBxx3Mc7Ro!m2zp+~zXCFs_2c%4s@THgG_2oEU9qWUu+_=(QYB{vVcKfRBPh)ba-V|M z(myB!Hn#)voT2Bx_`&(RDjwc94G5(JkE=#54}$E0@BqjjsBV7i`}!w8t@-iAMYQ3K z-!rDJHN9BBB?dKITyF-*v(b`GAJ6-opm<*^Tv-zoCvUE?u=m@FPc=c=@3-D;e9#@U z@AMJ5h5qKh9$!z0s7hEFvSWSb`u3dO?W!w6y=T3Dn)M{~M9nIv4cliPxii$8z3=(Q z1D5Zf%~@dBFyd^m%Qf-oV?dsbcYfTp@RIlI-G@^i{>cbEzjOBUfO?&4&lhi6G`y+c z&C2GUfd$bO8*YEoOa_!XJhn?^(`WbkYw{%*Vr)-6|J8V@X%zh&ZF>IYV4c^MpT``w z|LW$0tG}%Z6xq0%oiEW5uWN^{E!ws4*Fwbk-f9`u@YDtFl5exsTR|!)QM)-n^_gwk z!_&Nji(LGsWD}!q=!{D*;}+cSc_z(zy-PBFogY$F`_a0@GA!$}`KzB_>#rND?jmk< zZ~6K&stIpl?YEMJ=SE)bc98!R{2K~LVMVvOwJgauH+=ok{YjJO#l?kP=J28=#oc}# z-!fX8H!M9|QuX`;FI%lS!PwigeU9F8c4hpQ@#2ZDcdK?C`|M1Zk34z!<@xf^UoL^m zZ>Zn>IPc0y^Q>S-W*M53HQ!abNjz1_l?@9+8=ipC!IwC!1ic?6PC!v2RQ6kh5WDjB`?!p_EDmXdC zcwkT=74&vr@KAjw)m;jU772IdL=L=~^KuepgX}?O^D9(}SQ@nKF03DTJ)J!OS1RUs z3x@TmAbZfVC$8TLj!BCaCtL2F71AcLw{L6>T}(Cg*rJ@pnG~P4{O%_fX_gS|hqW!= ziI+o4tNU#F<1P1Hs*e5e=dJCGuh+(_>~K`p0Uvm68QIwP{8ME8enbaXyY^n`^FB2z z3A#F}P3^dJ*BlX~DVn%8atS6+?jLYvMc?*%@wMod#p_==k16aI-%ivw(LDs8Vb+vr ztinESbp7?1-t(3)S|1RB-LK5Je2!V$onRZhokQkUKe25S+#K1uT z0*VN@6F|yfh*%H~J_Fi{021I34tx~m|G_~40tzT000D&$@qu~*WEA0F4TTTnh-vSE z0}KjaoB$042ql8QVFaL|02yW46oEKEVF5P>d=&5phgih4(Lo3V( zTS5TR3D8jf&g%>REhI?(+eYAm)A+ZI03r#%G6Cuda8UkLPk?sY096EMaDbjN zt)AcvprHUCgHKEc5WoooUkxk~i5MIbP(!9Qlz;6Lpq>B|1;`=-K5N=U0g;F4TM_~p z1$ZYwI>8w%kVF99iDddn|D&e>)k7j?0igt#9l$;TCJL}mfJy?K6+RF-Ks91od4-CL$*IP$Ck7#VZUU z#Q(3A!UDPp5LSR_G96CC>oM8AyQOmxlEQexZa1f~ff zy+FvRZKfrGTPqf`$s?79@tiwg1e}#b(#@ArXj4m6q-_v6Y5_;(2A|b_vH2ps?c$Q) zOLpbt1=4mIc|I#wK~{Vlzf5N=wOV1Gx8s6?W-n1iUcu$soq8$HZ9{zfeffMW+B=j_ zW;@uJy75SD)iwl9R@}>o`Pjl71YJh6DcoiT(E^b!(DMbh1=1v+aJ_Vv|$ zMmweJqmJco$qk*jtr8o3#uE4TDQ#t9&zD}pKB?7WW%1??imS(A(%e9N?Y$?cvIN!1}trH!E&DXCh0<+aYD-}v&?eJ-Ldg(>T=m#k9G z4F3AuqHuYyW~c&UJtC{}g{^yLK+cwyj=?C!r#|eO_0-ps$#?aVERsG9C43AVwk)dN zt+IUf-ev_G7f!p5@4zPO84tYHLUUjFSN~JQ_jrYnZ7Qu5?KqV2d82!>^!;pes5Nq8 zLhZxC4jBhL%YfjLC!d|5P!rB;%DTeVm6SP3OO1RB1e#fl^>(-b(>95x&?UAs6`_J= z{ssD!zDV|KeXHEX-%tZ!PigY1(_k<_NbD#@2Cwaa!K<@qRfcHFzP)s$ z+L1CPE)-$ztMOXZaiOwoqCCoe*Ao7Q#}_%A=9^Xz-#oY+P5)lJ2;J48G!OH!Jt4y$s7nAz5xlB$L4h8_4R zU%rUv=1n>0pMeUNM~#E)qGJ{RuW?XXetxee%g_MTlBP#$dW{PY1Gk=2LEJ77j~XyJIR@bpx{2UgNN!*sSB zgfGer=zi8$7r{Iy7sj)G#4r|JuoV9Aa zCcmO80K0O-6n~XSSs{&I^zZ78;#(hHFWf6pUR+5`!M*>k-r(hYJK9u3UbIs}SLnQa ze2$Q?{PnMc^3MQuqg0@>o7jV@-hFFl{__FfZ|sO#T)G(+ui&LVHsj7fyxabtj|B3y zmBtt1H5zc)-EOt#ye`PiCTz(2b84%CT;KbSM8hYGTW2X<8}<9uNGj4tOai{Zi)DZI zAFTU+{MVfkYAmGI-w7aV}1nefxRdD$IN>T`+Q(L)-Sx1|n_cx3q!*X8>sl>n=%d2-D$bCi|23}9xo46Tt zd>0YKM2sV^o{hHLlWJq}mRZqoGd=8UcBIz3IoIoDheczDZSdEIsWGja{q`O1+xT8_ z4X&~G#lDnZT5q|=lj81syi*m=B{h|k_nv(El>J`xD!jVBXS>xzvi~(xS?}l<-~B$d zEd2dG@kD)pSJ-6Ze#uCB#l+K@pTp|y{RVdVo4tM#8rkfBU|{Z&A8(%hiF|`tzCSTy z)Mx+Cr&;|L-(UDOxA;_lx_slsGsR+yj}JnBJlnJ3-JYPhk+|xg;?I81Py63{mwx@@ z<2nBfq|I;nkhnVL+49vBi=!+*&zZXSJCyAI>qbyZ&)JJ{u&%#px7xwM?m2NU*Ub5y zYj6Ig#{U33c6{>X!2^@0*Tk<)^ZPYYr1fro9M0JDwC_Ou#DSk`2cN4!jghevBl~|u z#{L@FugHyktwwY%B|do(-%|-;1)=YVq~P@l9Uw^^x(qUI#U!w6uze*_{V2 z_QjbRgPrfu^NQnMrzQw160Y1z&`yho()O8Ph@&*#SpUG}nZ&uBiQj?}u27TC&QEHK zBt@ns+D*nT4c1z&p5WA(RDJ7UmRj=Hpm>kY7|+RQZ|^wYx6z;al5Yit67!>mj8kOn zq1et;HZ|dFQDRShbgyx;Wkc%JroNP-iIgPu)Qyt~>qk;$f>O_LT5S+?Q$Kyg z4$2c|TJ?7qN#Fmh$9B)3SzAC>tR%3qMp_ z8KWkl%oSyQ8_&`Ni!-E$L0Nnk4|;D0YmtZl;nD3WEyV(+eb& zoY!wLJ1BoC7s(;Q5I%iBE#Hm{{qrVmycf{)0v2(2fI^njC}9hcSwt=$tWx31=ZlK` zL~uY!-o~?3zb=>_#DAO0mw@#gLW(8JWyjtEm`DdeI75Kh3X!ke@bdmJ0|^$v1=Gl- z^(@qrpOeOvKgPxOGbnb_l23Jc1A6dAF@MREl~42|e5FXn6ppY7dW6RQ=Kk=545W|% zG7HsRf~G8h47fBO0!k6kJ*Cut>=M8*q!NdsAx2_Z@H{EP6NW1BC|g;pO*O)NpMYb9 zmWpZn2rP|D^Cz(Pb#!|nYDW|f*oUi$`J8lg5su7az{Qiu8u9i93G$X9_?A*c;>%cx zu@osaS4@kR*;!GTIWeAi6=uQqgPinE~)iJe_+}c|d ze=h9<7c+V)`zr!kDn&a)r;IX4Q-McFX-8hBP?)!=$9uD%sgim*Y%r&=jfuGO1oaI^ zOGn^6U|dfGALjzig);Tt8(guMKmLyDP9Vp{;o`G}vS$JIMc5qDN&REaP@R6Aw8cAf07VtynU@JMy>RM#=e*lbCw=Z055LG)U^w z;uKE19fn9Te_VkotU516{rP!BI<`lQ+6i)cy=g%ZI#+PsNd(Y7$%&u@@vxT+sA&g1 z6*{!YAW}0L*~~fDeNJvOOWuG3+cW6_!YV3X-huzWv3DnMG47Aw|F4<3uGy<;(L&`? zY0)+jvR@^YC}R(m$x>Nn8brIU_Ek+JZJZHOBvYt}OhuwF4l1OkEG@R-IAoi1f2Qy~ z=ls6k`~Us@?)&k7-1q#cI@JpW|}&s&68qoo=wA^;(GSq08g z;#j%(+j)32H}8*j{!KQe8Kty*2DK1+NhoC%i!?!8c217C%1^)aFCLRz+@-A`a!O%Y z8)J){*~2Oj%iwwJ3Z2s9Pz%sbM56(ME1pW>P~C87ujEj+h#Vm+@o)(8;t=@|^-)vK zqZKqSjJSwZuwO_pfk@q}B1ISYB01<}2#oc}3F4q;F6EE~w3kg^Dxj1Hp0wVgVqeSC zksv{O2X#0^TXxy1^NIbtph`C7m|$C_7I!4vle>rKB01zV~v89(^pJ%m8$N!5j4Rv&dO5kB|N&1ex{S` z(vPV;GNrEOAd#ZbnYH`^X-%Ig*;PRNVoG7*aGms60hi(joq9z+s3AQ!UP{0@bVU{){>&>dWT+D(Qdgj)|C>YMO73jd5sX+?FJncBYAk`fPeL4GUK`&9u!Hs z5>s%?n%)&<&=%%W9BRnjyN8VsFVeRPX?f`Rw$>dAz`uk>NpMdhqb>>nQ$=ti9b`0MDoC(aL7MhnQiKsUN(r6HA z0oEuA$$M2*V+LJP5Lu+9V3`9&mddEK<4TE=C=KdnB=)rMyxDb;0#Ckd&mVW;-^ILm zsbqydUpH^tP8O_i0|_1^rC{$~9Cl+f%H1TVQFytWzz}$@#Lf{Q#;Y;ZP8UKU22Wp8 zzy2hDuehdJ6hxL%FUV+@O35pr++W2A3u=b8{L)j!EEEIsx1TR7ov2>}2Q;2Lz*x&= z>=ZL7V%iRY+CUB?T*w%}u4G39e+;8bL%Y2klT`$m1P+TTuL>EZn28$ z2VQXYBWt)wuqBkk22Wh^7A9W}XUs<7DX!Eu4m|kn(s@;r82pQIZO zC8jqU4IrD@su}6=zwJ6dPf9cf<3eb~&~>Zo*6Vr@vAFh(9&L|Ec&Oi$yibUfM)Fs2 zDdxf^>BqC-qFvT+{blu?m!@P#DY8mR-6Nzt5Hlu- z&$6K0$2c5^?T(m`(6h^ap7`zt5#j`q0%g^c^l!y8aueA!A1;z0q{y+|Cpr#L6q@-|LCOeA(@u=SACDq+K{1CZ;%YDE(ym9vohZwl9%3p9{a!ZAv&T zLQG_&c^tE-h_p1}weX~0`(5Y&a`;>nIdUn1ib9HyfFeCvvRQtlEA4J?lVqNRqQ;ue z5yOWaEMMR)2e;mn7u>tnO!gDfJ-*#rYz^%YkvqYFBPKa6Cq9m&t9>EQ6|}66qSmLk zO`CD7@oT0bo8~4(+)&0SHY3EE80M1^@wh#M(jg8%&0 zKq4qH%2EkIx&X=+C^5=b@q_&VS9*(EQ1(0ybge59(UTMP_q6mrFPb2r?Bg zb_z~?*4cZ$_K{ce5%Xsrr-bzJ^?j*9z+fawgv9)zMXRaQWSl+@2`)v z84U)ivt;nbn>=!Pn=DU;m#VB_tFB{#hQQ%d?4Bc{_Q+T5_se>^fkcrr^V81R3hq^` z>J9JA*mH0%nM-qIQMRGTE;ePVfPYp1xAC4Vf*rDWd9Nr~8yTT@Ex*koBO*Fs}&FrI-QVW7YRdP$ogrB& zRM3(Y_tG->RYnwz=U;`z+&Vp7(=1~e*@ZFflRcu{#6@UJqVg0rAxSsRdPzm zDe?*E=BYzHo2dNCa^~O|sN*wn5p>|ft&XIUZJDB~$WU6PthH~2JbHCbz{27}gI8U< z2mu`8#8P;OJvaL`FCKqmEqyhp3-4f8?v~N2r3mve*%3cYkx`DZ??;!`t~BH`xO8F? zIgmxSUf)KL(~${pW~s^7uOife`40gcExsHd3DpW|j`B}aQHBqPIx1SI)6D}LN@|i6 z#0s|MUi4(ceDU=qFR#D2DH#9tTE9OOhr^}7ucX5~`3;-yl+_9k(!?OOS6>(}Et&p% zkS%ifflbxcgQ?quh%cumQ*d^In6??EORa9+^Nwg^@~=ps0ZWmAz}9Om(O&$bJF&Mh zQ)LB8*7=A)ew2A9XF9&qpQcf~AlKONAr;rP>!lk`BYI!SwZq0PooCN|`DAYMSy)3R zIdAS)Kid4AQDAF_F+wM5@HC*wS97oUuOj<=*7Uy}lPq}&zg@qyH%4>%Y)Pv*!G)%4 zOA>8!DS}*R8$r;UzI;8AK5?u0yfIlg!D3af=y&5|KBZ^XtszOl$~V4s|EM3RjCCpO zV8_vPt`rC7_&LWy8WU(?6{u4Qw|~$_p>_0_yXYE01Dd~NWofqcr)AE|?C7*h`IIR! z6;2}mhht`FXRn|oG>uCC;QWV1b_{t!`UbbNm_?2iL$&sf26x{x=PRUjl^7e{bVK{x zQQ^z5gCFoD<~Vms|72&qbJ+%gtcnRePPEa>y4I$1$vVq4xd`KEhyPUKQ35(A)h(beu%fw?G^nIYWwG%SYF0NTsm%VIX?2Er(PIBJvO3Ay|2b=(+x^!| z%78&}p5!sPeP+7dHNypXt`2)hLESSu9*>>qxWwV9&fT1CPI>)D=c+6q1Q!5^50M>bc98W_@Yt+z6&`1f*0{V7CR{sC9=l*j*BIa?>UNJU<9SE&zP=S@+#9x z5z|kd{H{VwTwGbA>hht}lDEk3>qUCv+#K29sIhL+mzTk-nNzWzWhKW0)^_$?)ow{M(TW{hhr2vnCraAnC6(^2WkJsOWAAN0a5 zca8RW6a+O*3pm&ktXVTLUXd#U62*L+`i+cjuDNE!8c4^ilT&o|?vlp6_>`tK%T6ti z6{O*|jWth~ba(ATHO6*El`_rBOI(RI?yO$=cu)1-{DsH1Ozt>KEfJxd%@a}0pvqA) z*Py4UB+hD`XnDtnF3l?kBS^`3n)ab_uZkEop&wEs#}?#BNX$<~Lb@u?m|?lAVgR2m zWF3%fUoaP}bL2~s)y!OQV|YtoF2#AGFSqJ!)QexOGi@JAwR72noWrrk!C?!g(w}&F zl_sXe-{4v2ha2!rr9IQ?fB;;32XIie#(>s+PLgqq< zgJjb0W%m0W=8_f7AZ*Z?G0|dN91FYzGLneg6HertJjdh9=EGVi#7?G1!Q$e5Wa;wh zaoT6uvEyg@!Fr!CvWZvx_)e9eaw8VyJqtFz*F$w|CcjV}m1N~sud&vlVPM&rL)X3? zM?6CtG*(MvYg0}jwxW8?eEGDJc+~}l!dSy}Zamt*Zj8n_iD`!<-&VJ0+|E1$feRKt z-rf(khQ`7kcj8T1jtqV%H_gAnHpOibeQU{F=232Z^48uYUv{h^(72D8*ZtnCg7lKv zL@VK8odr&_`>q%)FV|De_^@cpp;068*! z_bmk!r=BjN35L9>$LOoai@uf$@S{#90Noh)v=StQ6^w+ubD6A5FE&M2iUQcrwfP%k_NZ{YW^6y zIC!1JpE*-9r@$dr#aDosbm!(coYch;A9PT-;^kuI9xpu{aG+B%)4gpX{L{;PkRx{o}}6OC$ur zd=#W)mGuL{nBNvv=Iq>@=(J@uBD+~xwST$8vMt_v&lgp!IrkAMJrDE?A*F_iHCWz+(n@^t~AexTT1b}K=Xf25_L!tcPruj%}NOO`oOe!J;4gE#X$w{#t| zpL$8p&MM;DN}tbdQv=RLz1i?=%f83Yrv}M<%0s&gvfjPcxisMOX7}waqSNuGXk_FS4YVc7*^e+%&GP7eAsaYWqt(b+y>i3yS4HHU&Xh| zn#=YI+q4DR-sH^OOXEMhPI*w!OE~S-Xp^yR@7kG9-nMx)PUUaUSf$@Wi*l+5G(Xi5c}5pW7XH zaCDl$mn&olxUvXLJs?{I1he`-#9oy~Uf#}=mQBrjSPH-<3#>zYvt zvFn4q{10)zeA{f@ax~v+h2zqf<2KPcKG(wzlB(KS^3x#Nh=}GAwCV&S2BoI4nw=bq z;vDkMwdVU+&JY zhc^gf)mOSkJk;YS&IeZ(fk)hJoE=geP-u9xnOOh3V!8TPoIr;nM+{1rJV7UhDlZE4 zH9RCoapm+z*o{Soa*{4i(!L!^oX&+ZC>LqYKc+XvM)fjO!`rIsnRfGVSCqz zLCK6jn2;^kD-xP^Iiy#odq_FG(UMMj_WzaXjU)dD8I)B=udY6Ob}6hKo1&sfbuOhYNZqC{QT?pePB87y}IDr%C}HMGlTC zz$mCl2~fZ_L1JJ~MpO#8dtwQA2!w#P0MQ}@Hvsx~Rf|=VVELp`3_SGWdNqIwV*~NOc83G`3Y0l-bSuUm;y6Zh3KDP z%H$E4a_cWJW!0Zy3Tc{0@DG@>^KUSvK?zd|g-V!$E>yx464SZnA24Nfnx5-0Oc9dY z0Zc)^!xZ+vhAEsR+hLgENR0z9<;6dNDK~z?l-GCv22)4?rfgTjl*kd75;Jp>5~hGP zcO^`5{3kFa3cwWD4z^)81DJC0Crp|675i=W?S<06z?9pSKVXVJfGLMNRj$%f;D5lB ztiQpO${#RAaK&g0cra0mwFy$ch9i}9s z_5h|(n`m01VVLsG9Qz4VCjLj5;s#(!?%!aF`855*0H%2VgelYO)#)hZ&oBj^t2zQx zVi!dIgejVTf+?*tA5Xr2hz0oWaQyldt?0 zrgWpNnCcPsUto$6_n*L&$y@#Y3R5JkisXLLVG8R%0aI-M3oym~-+?Kt|E(}(;Xj2bEB{}BDbT+KQ!$Oj-ITm~!+7Ov(8xOqnPZjsst{drs)nB3l21DT%NXfGGn+ z0e~qu#Ri9Mr2l{^t3}8Hse%Y#iXnh0Pk+D^wyLj;h&@ok6ag1@6RX;=f4~$e(Ru`? zNXX-Uz!ZaFn6hI8rpSmpMqrBUA24O>Utx;P2uuaSr$ zM?AogW2Q|D4`}8KxRk{lLPH6$R*poAgOb7bU`3P(0(vkCpO6GCEG_nCV>A&Q#m>7> z!}Au9Z@)kJK1cM@14a3N;X zpn_)%?RSUxjVR?hq*{?e_W+Yn5m^zV#aqPW3Fuw}94-lkVmUAsD4~*bLP=5g10>9P8h)qB3;Sfza^PZkmtkrv4JygDI*S>(k~?hPDK5vu9qh`RU?QN&y$Ke00@w|5tL zHdH{6Wnbi$Yslc05*`C3ZAGiD0+O+Uxkk)zEZFPBrX5#c5H3di!uS(#_?fKaYgOgM zj!M!=WWIZ;T?>yJta?|>OAsQ(-I6Ph)#A6ZWahSgOv=A2g&O^S` zg5VoLG-Ofx3+fVt1bZ1wbSKY6NmeKJ^$hUy3F7_=BeGK7K&GQ@{X{bpLnb*t-aLY}u! z`mT_>hUR!;YLBWYtir23iCKCd$xgD&YA$t|sK#OwZ5{_cAxouLF&sI_STWQWj4U4m zl|Yx{B|I%D%~^a#cVX3_KP`QM%4dIQkCc%wE!d1BxP{6Z7U2(B=n`Fio0PUdsLHuc z{$+Jz>;l0w?+A$;sgje=37|ZT@jWnp44d@r#9fV_D?!Xu7W$@#0j2P)abAKzPw4`v6^*ksP@@B4kWg?wPJ8WSk6c zeWbXk-NN55Mq<#Tm2RTR;?YiyWVlzyeQktnw=_QWuED2K_el{i zl)6i-`t*2e6lkSzZhy_mp>d~LPa@O}@@yW!fYlKU_%;v8HUi2#E+q_wgK+*)DRmx( z>@+}xTThPu#?wF1VK#<#RND++ytCQDEm^{3G$rL zbu+B_YLRfH96C%w7O+y!6sguSZ_J-{d0|xg78dz9bbpBlP$`tna@AGV5T%pOmd+}N zD)?;p!q&DVtaZz&Gs`x&{?S1Iy%Qe}T*e`s5Vadg+Mo5e<9lvya_eAXB#x94#Z@Ws z$s^Kho_Gg6yU6EBXe*?M4~FQoFTrw}8yAAbAT^R4)on8c+pvg0LhwUEG;->J3Y z+ngYVvT0Qylp?0bL_x{;Ep~Zrox#xqHTiP|rmpgX3=Ed6src5UvPPt`EU9dTh`hy{ z392oJ1pHbI={$8eBsp9XMYtSJP@G~fWT1rEB4{w`-m6RZn0+)SF+EQI{t6LIr~3Kl zZ-r}AI#03s%`fpvIh`^o$pdfe%#ra_4lz}8AK=Jilx)L+b?FRkUs}|+_80^42R%N* zhOUdxuVRqg4GPS=uDzl@umGVH6fg|RVgV&sK4yK<^i#)UPJ6@FsX4mow`61`YiNnzNa`Uw`fMhZ4b4G7>8Hh6QMgt)e@{$AdI!t(x4D`KE=j$$+?~<<Z9 zf-hd%hHxa6##dA|O#CjyJN`@T4tYgu5A>Tv z0Si$JYC6KgJ}IWVE?R%sYB_bjst}@TUi3J!wf=Z)QL6jA=d_tZ8dIC-(B9Qi0qtC1 zZePB&Y~^aN!%TZ`p2=LNrW=(3s|51L*^<$g&M3u7A&heYrWhgb88i4`Uc&Y z=@Rj{YsD4su{gICG#yWAuG8#2XmU?N8|+mdYc8%&fi^*0*96is=@BQ#dv}d%i*0UD zCoiiE?VY{HMbKz6UfZkJq18tCBtF;VGv?}y(aE_+<<|pT zN}4Auh-IDNt~a)?K@X>%E_>@o%7SNFo+9lql4(t6s;{@+*v~rF-1dI66@V!l&Uj4i zUIzAsO%^C19bGnywr6%M-dpLk#KAfDUfHHz-N6%Ucnb*OM~c#>;oe%AMicBXXx2q& zu8#OS%--BY3#8@)GdBi05Zg-EIai-r7`~b9y7=J`i4lsMU~c0&*1RY!Nj!5S1+x#Y zOf{b3E*qn9==_p8tNWYx;ET-9&%;S9aj#0uGIj&9DBRLNO#|J?@Nfuuem>xrXocs} zTRk_Z>xfx~=#zM7n@Pn6zK5u?*tPlGxwL!B*7Ft+W$ZV1s(jUrY=}+F#(f@f`xeEz zMdq$7o|s<~Ye=hc7?*6B9XLKYz);?9MK5QBqQnVq$yzbYj;Eu85Z1f=Db#)mU1$42 z^;Mtfo07UAROXbp!SilE(Wc~5(VJ57EIIC2$2uB2uSZNwTfKd{Y>&~cS;D!Wq*5Z? zY)bEu6jrZpz24}jdRa`}qIoLZ)im)FhC|)4@##~Sl|U)JPX}K$OhftZ>r9U4&qy0z zEKCV8&-XZ$kvX?+wDsNqt)etnstn8az2eY$m{+Ar(&omTIoHn&q&RblicvMDhY!1G z1T;f>g>tytCvp4+YAo{*7O%~+BDmnvL0%B#a!tB!4RQ9xf1(Cnn`B#t+W z$BoA}W2{4h`0>H1p3#%EeH|d`INcrKEjKQCw1iRwQH^ySsh1>)o)aq)+av3#n)PX~f7K=$S=H0V3F|-E z=+ey`VyLUQafsiBeUil{5sSSV$9S_4V~&ZY+xu8`C?;X@`zANdeYc6tSUf8*hB?vv z@yZ*5STmTq;N60Q>Lsj%sZ>X5#!v=$-<{;jb)@QZuI4ZmHJEaiq5xiBY_9*qD3V5rz^O(4821=hBTinnJt$^YJYCD@#LZEcu|&?UTrE=Q`?f#&ou% z&|#g5Z^t~-x6RtKZuAihhn_e;E(J!VCv$_tT(s3q(`EB-&@b{>hxs)nD_b2!z77fW z8+sMSew)CFCr;GWG6Hqzq}pmxzva1Qz^DLNJsCQxD%ZklxGJL@Ft(a~>w4uZ$3}ER zdCiKdbsmd@5>7(5uCKVDU7rC3>a>q=1=Vl~hG;mQWGBrHayY>2+5BWs+t z?Ydc-tCh1H+NODFr%tXh7}IfnT~2xB#D0I{M9%GBe?MK60ANaOTVv6OQ>i|@HGTsR zYxbV21hX8gY{#t0iV{`@y|M~=64KtyFHOC!!Jo%i)>(aG%K43(tam(Gdati3=)|vk zw(`%_`fNCH?n3Z8>s=2tI^S%E&-UK8+};w=^sMN>(ZSVkE^i+6eYkjP-SdOiQ9IVH zdHtdNGVkH5sL3b0Q-xFO`o_z#jEJ=#{4MKA+g?W~|xFdPbETe^}5%y%y5&{**YuuCPa;64B8#^#db$fz>+VzM6}srtH+Ek*kT- zp_goT1*PlFd_rm0y|(CsI3v1s{kP9UwOBEGll8(4-$tLm=;m^IFS0Pkz4cAKI=(&s zuGKS3QoWjG4UVgKn$0}gioX_=Hhk{cr z4|11?p}Toq_Kdif1LNcJB}Fzn#pi)hDZAIOR5USa)j?oXVrpoK=j)@fo8+Sz zR5yCU??8@5daNbtW1UZ3YE~Ht6N&c@L&I^D+1tPwk-cl!@JyC4ehDghGWL&94P_kV zK<87lj}B^8Y*O-i$#5KH5<^SyvKvE1)j8 z7>u(dVwhp#?42hlj}2!eCtN*Ow=>Q7lIqT6N2`~I-<~*daPXKLaq{$fYI*hJSL#z6 zO@J%b{1nDLfHjk#>5>C?? z<0z5O?bZ$vm=c08^DEJSjbGPMbiqI3C`Y>9(ru$&Zah6S_AAyy;$q4;O4rA(kC)$E zB9g^AY|Jp`FeUQc{>zci0ZiH4RR7ztIZ=ZvyFa&I+x_9(<*3&o-Cw#X(L-0~?0$Ek z`)i+T^ymARcYmnv{`Mv*`s=ef(VyG96(6rfD}KKmt@zjt5>*mNOF}S_5bY%-X9>Ja zf^3kGgC&%B38?GRj!NifC5$T)<~@nZQ;F((i5gtb(yCWCsn@Wt*L1GeT2?=5L%nuz zy-s|+Zg#!i(fZM6>&INF*S}Y9@U-6Wef?Ot0o7_4XVPF~-(c+AV6v=X{Dub8;0ACC zpLuqJ#nFZdXHWj04pX>VO@1a#>o#1$q5oVtg$U&s+?-+k8K{h8Q+@&!F2n^!MJoFaR78MrK!8A?|H`OBPAFXp8v;fJ02u7AKn0MGpGJkt0m=me z&6JUNiU<;dYzojV07PIcKux49)-Z#Su>n&N3Ndh3MvMx;DuAf~xT0h#5Qeh^fT;kT z0;CE6DoULqLBTITrvRn`yb3TX0H^@LGGbJKSK)w3931pYfHwgbDdMs?Qs8Ekh(!b_ z2?i=6T)>3BGZo-c07{XFAs|(hG(`$2y^0JRH;@{^g^)6;GGbIfIYkC)B0nI?PpJan z$_Q2&kt%?!$iTJz38(;?@*|7_Gzou0ZaujAOKpx-NjKMD5s2MQ$R&!B%8tl2kO6piX!d51XR?NwcM&-K0emtdhRZ3Ai{n_XkY599W1vQ(K?tab z(oC|mKsjX=%VngTLc1bO(bv~l7H70EUWl1(gxq8GXW>|^`oR&PB5FCfh{JX!n&hGs zn!-+tH4Ic(T1`KJie2D3093|HoSAAu!J?6J3Qgb9@jFoY6|8Me_U0(dDFPz$XQ1NM zIL&kGFi_z%s)q~%l?nkUr+ntbY2i%(sL*niK;=F=9RQWpbD6HqKY&W0e!jb&3r9Nl z+LA)j4O6{Y5CAGO9b?t(tQuY_%PH&sTu$LA%PHOhB~U@<>tW2h!$74HlvAwdnGKgy zCf~zAIpvlTsBo0!l+PnT#oBn*kd$N`$&~`2GHD&GFw)8%1}eezv+T1MCz3s!_cP-&CSH=A47LZqc$;WZcuAv`Zsg@Cs3Ir0p%2=(BXcms2LjsMEPgnuS=bnj0vmpol58aTut0fpSXr5%qEM7*I|z z()9jOPC2Qm`(zlXnE$z)@*Sw)cFJqpmG%jK;;NI_)kFP8EI^!3IHk{v>O5fJy}+m&Wh3YmL$*kQBJ}C zR!))s|D&98g=yhv4R+&h{(9lVxwCr}28rVM@mVDV@O4G?tsyT~x2axXg7u!w^PEga z$|;RJ0w|}H{G*&gZXYS9944qp{{mF(WlrNqOL6+oa!U8d$`Flk89yZEdbeV@oWhQd z!ALWN>onBe#IfJYDNH^Fm$6FZpLH%)w~B|$DRX*gk5469o7Q(}6pWNpJoIC}6dR3- z(-Nl#=*x5u_))2cY*SWt;s$eT>aCitUVDmCM&HhDcAhd(C6SY9@Y~RJj^{Rbut#5n zfVH6^D5tvhnT@iX()DiCOpLC(Pyz*do>AntE6XW)H=j!D_fHZa)Q(TLSYG&{kF9;m za!TZL5_=biKILo}G1>EMkq#)Q7>~Z0`~lX-S;>~rXZrdNc=6PmV7=$_-P~I^lgmz= zs$B0;G^yUmBFwD)d|wR8DX%ULzoWav32(C(YM2IO@e1b z>HH3EyR>U3QrL)ld!bOrt*WYOWjUqb5gkQP7<;|F;LC71*mRbBUc6t3C|5#NFJo^!J{N51(Yqnd>DP?~@3N=*$gB^1Zr-?iXObmGo!TDW5YqKq zxtf0ex ztmrD8Gxfom%RCA;`@^$CGhdyF3a&Zs`&;dtOMTm-`FCuS-q&B7GMKXHbpz#(-|Hyf zUhWHu&}Gm0$XqnLDnbz*B{TbDVDaTTDE+kl)9AJG-Vnv>!`)F$2WAc3*SQP@kBxji zsr$?AZi)8n=%{yQ*S_BVNU{lu8gz|#84~^acoabpam6*dHX!;+Qgm$})M&O_k)#jR z>?WE=BOT!s-58o%6f-$O)h&XR9HHSBp{2Y1T}aHetQc}l%s_Sc!+;&)Bz%uqY@6Bc z@g3o2x)B!rF{3)7mxIL~F|6+v*S#`mDm8W*HQHD=Vpd@IoS}&ESjc3D_}0GICPJKH zX#D)<@J|OqJ%@H{>L!#&tvZzde835s<~*{_>+ zhRP@EL{oIq1FKRSOM;S0QqDe4$u}p2RY7gKK`G`DWHdd~4Fo1=B_*jB%pu1Po~j7i zfgyD99xGR*{6j{PPST4h1Zyt+L@57w2aznN^||r0LL>L}r~2RoT{eksK@1l03 zGUB=+o+vr~Q(_P}g?RM&EL#@k=`LuuoaiPe8lX^LM=A&@1c;E;BG^X6)0Qa+?gCFk zDD&}$q|Yvp93tCF_Zf&YP4y_wIQ&pflnXMh4)Hcg5gQp%-6HLH03jG9UZ)1NhGuC> z2{UPAE{8$^B@`Le7M%DpWlu*HWGKs44@1tF6Bro9<5TwX2fWAT85tNn>l4vgMt$Z2 zoxl&w0y936pfradLn-VrK%AV%vk?h1!eDn9;rEVY5Mg;EC4|w)`ttpzdHbWq`}G9^ z(yHCa1D-ZU-X$e99(7r!2kocA;DdS^7j|c>{iY3yGQc!qL=iCu zRJz&J(>M|(2^u#9zSBu?!U-NMsuq{HkWJ|@C4d>9-`4Nz+O>bs1tQCdU~(fYSkC>AXjr+n$B zBYJ5sUk`8qt&P=^db(O*j3j(MVEa4Jw-<|kqe%1%`2%a3t0W^huO&n1Si1We#O%c#Ow-pBD3H5~Vd;x4KOS!#?h;fuOMe{+}hFtzOoU)irxI9c# zqVS+h8R90SOc2q7Sa7*8X#S>RA2vo8!jVv3bu!Nf(3G<$-};L{V<=0GbPAy6a3xJK zeQ+RCPWHv%K8HQo0`el1Se*~Y$Y3KO3NgF4;2>E`m|=V(EdF zpELzOL=-c<#V59}%&T&<00TY} z#CJY_f&zzs7nOY4RcV`B`Ns*wgg~$>XHR-^a{w7-L0{(j7Qt+Uy zz@@O5t8dW4QS!|b{F@ep)mw;$D7AM+T_R4HEQSA=PoB#rS%mNFI?pc@msQL6Pmodq zBA{&&WQDX0meRe2)bU&RJ5KUWN|_7As+5bo{Tw|s`hd|`?)OT2@VV#B^j;8HiB2s6F>KsA3Y8(A-;m|9e(pr^e!wB3@t z7B*tbX^2g$?E>gc04E4jx>KoXqR2BPkc|ko>kP{-xa#sQJir9@3r@dhqM9J;8V z*Dj{Hi&Z`5Qwlye>>eYSWEF84xD<#2TuPyw{DsTEET>#X)g1NDJG=e@QuuZ(hGKx| zDI-2fYgi>>o?m#iFO(XNGmdfhCZXi<@-(gl@sd%7{Aoeb_;0CAkI4jyl!UQ&M97&g z=$S`th>;ZbU68hTGk=W)iS$io}}YC1u-Vf(4UA(tKK+{_J z{Qb?s<)O< z26(`w+z^~!K8ED{D&J`LwZW1O(@jtg3*O10EEZ9MxTL4RrLZ4QnvDoJ-Sm(rJ9fhh z1<24=ioJNiYUR|Ko)?zStXL;fk+Ep+zR`=^q1_UOEnDeQ!bNA7DiWvCXu9aIOWAOg zU5YG{?`=AGEpO_e7nttBDeG9LV4UvAfgM>irAv_^MNr>f^S*2ch9`^UBkGIv?Q-&Y zF?FC0nu!!~`WNo$f0m=@O;eTZdEJodN%Yi*$^-+AxY~i)Z9+B-cU{*k<8PD5flDbF zb}3O<`(`=)rZ=o29;|F1eEeasSx`sdoU)U^ys#H39?3d7w19%7LnxzVAs^(|A}8c* z&@aw=_41KFA%IJ?%~NJmvg&vd*qceBSADv05L6i^pw-9_ngPX;bDAQg9E0vhhSe^6 z&110Wf8>xiL3Ha$Z3H%hIQZJ(_8aarLcK&DDy6L9z%h}~Ih5{*BW_$$r3^`e-oh4d zA68L(AVQwG1Y?mJU%+!QO77Py1?gQhvjz(fKABCM$Gt(pZ_Hy+$_n4*hu)v8kiP2> z)inz1F0tE;1n1fm=Qi{v(1fJRySG9_l&SxoIu z?;#_PnD}WsCb)ZX`>xNV=-R$>i;0Dt^WlXa736J&`{y6}oIEaAHqLsM<2z}5sK_}( z&BoSU;MXv(1=^IGWzJn3D>Ph`KmBSy)|@lO?dEI~E}FW3y8my^r7H(tHqxP&U044@ zImNUUk4400d48O7ig)!diY80X)_CruF?K*QlA$J&ATpx0mX;x8q6j=zh_S(*EKz;^OID_!IoWXK^em zNyv#iL^spDN+0y~K7HxV(937HPk3X_v{U{AF>vcw5(m3yDuL71`8Vug*?M=XW>_RA zkFsDsenKJ{w^j6$rsXzEgd8whQ#32Lv_5&o!Oa!kXC3M->PNf!9Z|EY>dAt}#$mUu zj^)0yK4A)%2F|xg7rVu5cfLc5@aD9Uye�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 U;hlDm!Ul%7Bs_WpRcMc&0m)3B;{X5v literal 0 HcmV?d00001 diff --git a/images/SortingAlgorithm/ShellSort_1.gif b/images/SortingAlgorithm/ShellSort_1.gif new file mode 100644 index 0000000000000000000000000000000000000000..bbb3beacdacfd4a960316efd936dd48484bb927a GIT binary patch literal 1102998 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

      *Wn$s}(ke@Uw0tjyl? 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 literal 0 HcmV?d00001 diff --git a/images/SortingAlgorithm/RadixSort_2.png b/images/SortingAlgorithm/RadixSort_2.png new file mode 100644 index 0000000000000000000000000000000000000000..922e878fae0f8de8f84d8af49074f3a7737c66eb GIT binary patch literal 24350 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 YAJBHE07*qoM6N<$g1px+AOHXW literal 0 HcmV?d00001 diff --git a/images/SortingAlgorithm/SelectionSort_1.gif b/images/SortingAlgorithm/SelectionSort_1.gif new file mode 100644 index 0000000000000000000000000000000000000000..353459bc67b75ab3e31b120b95b656233d378450 GIT binary patch literal 628926 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

    X=q5RrCR^<$ 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

    Jv-3Cy$R|jHNNfYsgzX?J12?)}S0a46PrYe$ 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 diff --git a/docs/Interview/WePay/WePay.md b/docs/Interview/WePay/WePay.md deleted file mode 100644 index 1ca2679b3..000000000 --- a/docs/Interview/WePay/WePay.md +++ /dev/null @@ -1,34 +0,0 @@ -如图,![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/interview%20question/WePay/WePay.jpg) - -就是一个slide windows 的题目 - -```python -inputs = [5,1,2,100,2,2] -def alert(inputs, windowSize, allowedIncrease): - b = [] - tmp = {} - for i in range(len(inputs) - windowSize): - for j in range(i, i+windowSize+1): - if j in tmp.keys(): - if j > len(inputs) - windowSize-1: - tmp.get(j).append(inputs[i+1:i + windowSize+1]) - else: - tmp.get(j).append(inputs[i:i+windowSize]) - else: - print(j,j, i, i+ windowSize) - if j > len(inputs) - windowSize -1: - tmp[j] = [inputs[i+1:i + windowSize+1]] - else: - tmp[j] = [inputs[i:i+windowSize]] - b = [inputs[i:i+windowSize] for i in range(len(inputs)-windowSize)] - print(tmp) - for num in tmp.keys(): - if all(inputs[num] > sum(lis)/windowSize*allowedIncrease for lis in tmp.get(num)): - return True - b = [sum(i)/windowSize for i in b] - for i in range(len(b)): - if any(b[i] > b[j]*allowedIncrease for j in range(i)): - return True - return False -print(alert(inputs,3,1.5)) -``` diff --git a/docs/Interview/WePay/power_number.md b/docs/Interview/WePay/power_number.md deleted file mode 100644 index 6b3ae864e..000000000 --- a/docs/Interview/WePay/power_number.md +++ /dev/null @@ -1,36 +0,0 @@ - - - - - -```python -import heapq -cache = {} -def power_number(index): - if index in cache: - return cache[index] - tmp = set() - for i in range(2, index+3): - for j in range(2, 27): - tmp.add(pow(i, j)) - gene = heapsort(tmp) - tmp_index = 0 - for i in range(index+1): - if tmp_index not in cache: - cache[tmp_index] = next(gene) - else: - next(gene) - if tmp_index == index: - return cache[tmp_index] - tmp_index += 1 - - -def heapsort(iterable): - h = [] - for value in iterable: - heapq.heappush(h, value) - for i in range(len(h)): - yield heapq.heappop(h) - -print(power_number(6500)) -``` diff --git a/docs/Interview/pocketgems/pocketgems.md b/docs/Interview/pocketgems/pocketgems.md deleted file mode 100644 index 0b108c0df..000000000 --- a/docs/Interview/pocketgems/pocketgems.md +++ /dev/null @@ -1,121 +0,0 @@ -## 1. delete and earn -```python -class Solution(object): - def deleteAndEarn(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - dp = [0] * 10001 - for num in nums: - dp[num] += num - for i in range(2, 10001): - dp[i] = max(dp[i]+dp[i-2], dp[i-1]) - return dp[-1] -``` - -## 2. movie ratings - -```python - -cache = {} -class Solution(object): - def movierating(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - if not nums: - return 0 - if len(nums) == 1: - return nums[0] if nums[0] > 0 else 0 - if (1, len(nums)+1) not in cache: - cache[(1, len(nums)+1)] = self.movierating(nums[1:]) - a = self.movierating(nums[1:]) - else: - a = self.movierating(nums[1:]) - if (2, len(nums)+2) not in cache: - cache[(2, len(nums)+2)] = self.movierating(nums[2:]) - b = self.movierating(nums[2:]) - else: - b = self.movierating(nums[2:]) - return max(nums[0]+a, nums[1]+b) - - - -a = Solution() -res = a.movierating([-1,-2,-3,-4,-5]) - -print(res) - -``` - -## 3. roman names -```python -class Solution(object): - def roman2Int(self, s): - lookup = { - 'M': 1000, - 'D': 500, - 'C': 100, - 'L': 50, - 'X': 10, - 'V': 5, - 'I': 1 - } - res = 0 - for i in range(len(s)): - if i > 0 and lookup[s[i]] > lookup[s[i-1]]: - res = res + lookup[s[i]] - 2 * lookup[s[i-1]] - else: - res += lookup[s[i]] - return res - - def royalNames(self, names): - """ - :type nums: List[int] - :rtype: int - """ - for x in range(1, len(names)): - for i in range(len(names)-x): - if names[i].split(' ')[0] > names[i+1].split(' ')[0]: - names[i], names[i+1] = names[i+1], names[i] - elif names[i].split(' ')[0] == names[i+1].split(' ')[0]: - if self.roman2Int(names[i].split(' ')[1]) > self.roman2Int(names[i+1].split(' ')[1]): - names[i], names[i + 1] = names[i + 1], names[i] - return names - -a = Solution() -res = a.royalNames(['Akk IX', 'Ak VIII', 'Louis IX', 'Louis VIII']) -print(res) -``` - - -## 4. wealthy sam time -```python -class Solution(object): - def minMoves(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - res = 0 - minVal = min(nums) - for num in nums: - res += num -minVal - return res -``` - -## 5. design - - - - - - - - - - - - diff --git "a/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" "b/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" deleted file mode 100644 index 0bbf8e888..000000000 --- "a/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" +++ /dev/null @@ -1,426 +0,0 @@ -最近正在面试,最开始因为没有这样准备过,所以总是被问的一脸懵逼,相信很多人跟我有过一样的经历,时间长就是忘了嘛,对不对,无奈。 -怒🔥一上来打算好好整理下,面试前过一遍,岂不是美滋滋! - -# Java基础 -## 1. 面向对象和面向过程的区别 -- 面向过程强调动作,物体本身只是一个属性或者参数,具体为一件事该怎么做。 ```吃.(狗,屎) 吃.(🐶, 💩)``` - - 优点:性能比面向对象高,因为类调用时需要实例化,比较消耗资源;较底层的东西比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。 - - 缺点:没有面向对象易维护、易复用、易扩展 -- 面向对象强调object,动作只是一个函数,具体为一件事该让谁去做。         ```狗.吃(屎) 🐶.吃(💩)``` - - 优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护 - - 缺点:性能比面向过程低 - -## 2. Java的四个基本特性(抽象、封装、继承,多态) -- ***抽象***:就是把现实生活中的某一类东西提取出来,用类或者接口表示。抽象包括两个方面:一个是数据抽象,一个是过程抽象。数据抽象也就是对象的属性。过程抽象是对象的行为特征。 -- ***封装***:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行封装隐藏。封装分为属性的封装和方法的封装。 -    - 1. 安全 -    - 2. 将内外隔离 -    - 3. 便于使用 -    - 4. 提供重复性,具有模块化 -- ***继承***:父类抽取多类事物的共性,不同子类继承父类根据自身条件不同对父类方法进行重载或重写。 -- ***多态***:从某种角度上来说,封装和继承就是为了多态而做准备的。多态采用的方法是动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。多态必须同时满足三个条件: - - 1. 要有继承 - - 2. 要有重写 - - 3. 父类引用指向子类对象 - - 多态其实就是父类提供一个接口,基于同一个接口,使用不同的实例就可以使用不同的功能 - ```java - Father f = new Son(); - ``` -## 3. 重载和重写的区别 -- 重载:发生在同一个类中,方法名必须相同,参数类型、个数或者顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。 -- 重写:发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类;如果父类方法访问修饰符为private则子类中就不是重写。 - -## 4. 构造器Constructor是否可被override -构造器不能被重写,不能用static修饰构造器,只能用public,private,protected这三个权限修饰符,且不能有返回语句。 -1. 构造器与类同名 (构造函数,initilize 函数) -2. 每个类可以有一个以上的构造器 -3. 构造器可以有0个,1个以及多个参数 (无参构造函数,有参构造函数) -4. 构造器没有返回值(与void明显不同,构造器不会返回任何东西,你别无选择。) -5. 构造器总是伴随着new操作符一起调用 -6. 构造器不可被继承 - -## 5. 访问控制符public,protected,private,以及默认的区别 - -| | 任意地方 | 同一个包 | 子类 | 同一个类 | -| :----------------: | :------: | :--: | :--: | :--: | -| Public (接口访问权限) | 🌈 | 🌈 | 🌈 | 🌈 | -| Protected (继承访问权限) | 🌈(需要继承) | 🌈 | 🌈 | 🌈 | -| Default (包访问权限) | | 🌈 | 🌈 | 🌈 | -| Private (类访问权限) | | | | 🌈 | - - -- public(接口访问权限):任何地方都能访问; -- protected(继承访问权限): 介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。在同包内的类及包外的子类能访问; -- default(包访问权限):即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访问。 -- private(类访问权限): 只有在本类中才能访问; -(只限在Java语言中……) - -## 6. 是否可以继承String类 -String类是final类故不可以继承,一切由final修饰过的都不能继承。 - -## 7. String和StringBuffer、StringBuilder的区别 -- 可变性 - -String类中使用字符数组保存字符串,private final char value[],所以string对象是不可变的。 -StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,char[] value, -这两种对象都是可变的。 -- 线程安全性 - -String中的对象是不可变的,也就可以理解为常量,线程安全。 -AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。 -StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是**线程安全**的。 -StringBuilder并没有对方法进行加同步锁,所以是**非线程安全**的。 -- 性能 - -每次对 String 类型进行改变的时候,都会生成一个新的String 对象,然后将指针指向新的String 对象。StringBuffer每次都会对 -StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用StirngBuilder 相比使用 -StringBuffer 仅能获得10%~15% 左右的性能提升,但却要冒多线程不安全的风险。大多数情况下建议使用StirngBuilder。 -综合速度```String < StringBuffer < StirngBuilder``` - -## 8. hashCode和equals方法的关系 - -Java对象的eqauls方法和hashCode方法是这样规定的: - -1. 相等(相同)的对象必须具有相等的哈希码(或者散列码)。 -2. 如果两个对象的hashCode相同,它们并不一定相同。 - -- 关于第一点,相等(相同)的对象必须具有相等的哈希码(或者散列码),为什么? - - 想象一下,假如两个Java对象A和B,A和B相等(eqauls结果为true),但A和B的哈希码不同,则A和B存入HashMap时的哈希码计算得到的HashMap内部数组位置索引可能不同,那么A和B很有可能允许同时存入HashMap,显然相等/相同的元素是不允许同时存入HashMap,HashMap不允许存放重复元素。 - -- 关于第二点,两个对象的hashCode相同,它们并不一定相同 - - 也就是说,不同对象的hashCode可能相同;假如两个Java对象A和B,A和B不相等(eqauls结果为false),但A和B的哈希码相等,将A和B都存入HashMap时会发生哈希冲突,也就是A和B存放在HashMap内部数组的位置索引相同这时HashMap会在该位置建立一个链接表,将A和B串起来放在该位置,显然,该情况不违反HashMap的使用原则,是允许的。当然,哈希冲突越少越好,尽量采用好的哈希算法以避免哈希冲突。 - - **注意⚠️**:在object类中,hashcode()方法是本地方法,返回的是对象的地址值,而object类中的equals()方法比较的也是两个对象的地址值,如果equals()相等,说明两个对象地址值也相等,当然hashcode()也就相等了;在String类中,equals()返回的是两个对象内容的比较,当两个对象内容相等时,Hashcode()方法根据String类的重写代码的分析,也可知道hashcode()返回结果也会相等。以此类推,可以知道Integer、Double等封装类中经过重写的equals()和hashcode()方法也同样适合于这个原则。当然没有经过重写的类,在继承了object类的equals()和hashcode()方法后,也会遵守这个原则。 - - 当集合要添加新的元素时,如果每增加一个元素就检查一次equals方法,那么当元素很多时,后添加到集合中的元素比较的次数就非常多了。也就是说,如果集合中现在已经有1000个元素,那么第1001个元素加入集合时,它就要调用1000次equals方法。这显然会大大降低效率。正确的做法是先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;如果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址。所以这里存在一个冲突解决的问题。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。 - - ## 9. 抽象类和接口的区别 -- 语法层次 - -抽象类和接口分别给出了不同的语法定义。 -- 设计层次 - -抽象层次不同,抽象类是对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。抽象类是自底向上抽象而来的,接口是自顶向下设计出来的。 -- 跨域不同 - -抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is-a" -关系,即父类和派生类在概念本质上应该是相同的。对于接口则不然,并不要求接口的实现者和接口定义在概念本质上是一致的,仅仅是实现了接口定义的契约而已,"like-a" 或者 "can do a"的关系。 - -## 10. 自动装箱与拆箱 -- 装箱:将基本类型用它们对应的引用类型包装起来; -- 拆箱:将包装类型转换为基本数据类型; - -Java使用自动装箱和拆箱机制,节省了常用数值的内存开销和创建对象的开销,提高了效率,由编译器来完成,编译器会在编译期根据语法决定是否进行装箱和拆箱动作。 - -## 11. 什么是泛型、为什么要使用以及类型擦除 -泛型,即“参数化类型”。 -创建集合时就指定集合元素的类型,该集合只能保存其指定类型的元素,避免使用强制类型转换。 -Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会在编译器在编译的时候去掉。这个过程就称为类型擦除。 -类型擦除的主要过程如下: -- 1. 将所有的泛型参数用其最左边界(最顶级的父类型)类型替换。 -- 2. 移除所有的类型参数。 - -```java -public class Test4 { - public static void main(String[] args) { - ArrayList arrayList1=new ArrayList(); - arrayList1.add("abc"); - ArrayList arrayList2=new ArrayList(); - arrayList2.add(123); - System.out.println(arrayList1.getClass()==arrayList2.getClass()); - } -} -``` - -在这个例子中,我们定义了两个ArrayList数组,不过一个是ArrayList泛型类型,只能存储字符串。一个是ArrayList泛型类型,只能存储整形。最后,我们通过arrayList1对象和arrayList2对象的getClass方法获取它们的类的信息,最后发现结果为true。说明泛型类型String和Integer都被擦除掉了,只剩下了**原始类型**。 - -```java -public class Test4 { - public static void main(String[] args) throws IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { - ArrayList arrayList3=new ArrayList(); - arrayList3.add(1);//这样调用add方法只能存储整形,因为泛型类型的实例为Integer - arrayList3.getClass().getMethod("add", Object.class).invoke(arrayList3, "asd"); - for (int i=0;i实例化--->服务--->销毁。 - -**三个方法**: -1. init() -2. service() -3. destroy() - -**八大步骤**: -1. Web Client 向Servlet容器(Tomcat)发出Http请求 -2. Servlet容器接收Web Client的请求 -3. Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中。 -4. Servlet容器创建一个HttpResponse对象 -5. Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给 HttpServlet 对象。 -6. HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息。 -7. HttpServlet调用HttpResponse对象的有关方法,生成响应数据。 -8. Servlet容器把HttpServlet的响应结果传给Web Client。 - - - -## Todo: Fail-fast, rpc, 多线程,线程池,,linkedhashmap,socket,redis原理 -https://www.cnblogs.com/dolphin0520/p/3920373.html - - - - - -# References - -1. https://www.jianshu.com/p/1f1d3193d9e3 -2. https://blog.csdn.net/lonelyroamer/article/details/7868820 -3. https://blog.csdn.net/rmn190/article/details/1492013 From 4034abd22e87d06ce87a3d2f7107c1d3cd22b38c Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 2 Jun 2018 22:42:53 +0800 Subject: [PATCH 0514/2496] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 855e56fd8..ac05000f2 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # Algorithms -## 1. [LeetCode 题解和总结](/docs/Leetcode_Solutions/) +## 1. [LeetCode 题解和总结](/docs/Leetcode_Solutions/Python) -## 2. [算法模版](/docs/Algorithm_Templates/) +## 2. [算法模版](/docs/Algorithm_Templates/Python) ## 推荐的一些LeetCode网站 From c8ba33c5e47f6134b6f3243cab82c1115f21691d Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Mon, 4 Jun 2018 22:59:13 +0800 Subject: [PATCH 0515/2496] Update 046._permutations.md --- .../Python/046._permutations.md | 116 +++--------------- 1 file changed, 17 insertions(+), 99 deletions(-) diff --git a/docs/Leetcode_Solutions/Python/046._permutations.md b/docs/Leetcode_Solutions/Python/046._permutations.md index a79e7c67c..07e337ec3 100644 --- a/docs/Leetcode_Solutions/Python/046._permutations.md +++ b/docs/Leetcode_Solutions/Python/046._permutations.md @@ -1,4 +1,4 @@ -###46. Permutations +### 46. Permutations 题目: @@ -9,115 +9,38 @@ Medium -复习了一下,自己写的容易理解版本: +每次取一个作为prefix, 剩下的继续做permutation,然后连接起来加入res中 -每次调一个放入现有 - -``` -class Solution(object): - def permute(self, nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - self.result = [] - self.recPermute([],nums) - return self.result - - def recPermute(self, sofar, rest): - if rest == []: - self.result.append(sofar) - else: - for i in range(len(rest)): - next = sofar + [rest[i]] - remaining = rest[:i] + rest[i+1:] - self.recPermute(next, remaining) -``` - -交换 - - - -``` +```python class Solution(object): def permute(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ - result = [] - self.helper(nums,0,result) - return result - - def helper(self,nums,begin,result): - n = len(nums) - if begin == n: - tmp = nums[:] - result.append(tmp) - return - - for i in range(begin,n): - nums[begin], nums[i] = nums[i],nums[begin] - self.helper(nums,begin+1,result) - nums[begin],nums[i] = nums[i],nums[begin] - -``` - - - - - - -好像还有一个巧妙的版本 - - -``` -class Solution: - # @param num, a list of integer - # @return a list of lists of integers - def permute(self, num): - if len(num) == 0: return [] - if len(num) == 1: return [num] - res = [] - for i in range(len(num)): - for j in self.permute(num[:i] + num[i+1:]): - res.append([num[i]] + j) - return res -``` - - -更容易理解的写法: - - -``` -class Solution: - # @param num, a list of integer - # @return a list of lists of integers - def permute(self, num): - if len(num) == 0: return [] - if len(num) == 1: return [num] + if len(nums) == 0: + return [] + if len(nums) == 1: + return [nums] res = [] - for i in range(len(num)): - x = num[i] - xs = num[:i] + num[i+1:] - for j in self.permute(xs): - res.append([x] + j) + for i in range(len(nums)): + prefix = nums[i] + rest = nums[:i] + nums[i+1:] + for j in self.permute(rest): + res.append([prefix]+j) return res - ``` -就是一定要有递归的信念❤️ - - - 还有介绍的基本无memory使用的算法: ``` class Solution: - # @param num, a list of integer - # @return a list of lists of integers def permute(self, num): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ if len(num) == 0: yield [] if len(num) == 1: yield [num] res = [] @@ -130,9 +53,4 @@ class Solution: ``` -但是这个yield只是生产generator,要看结果还是要用for in的。 - - - - - +但是这个yield只是生产generator,要看结果还是要用for in 来查看res的。 From b0eb414c8c36454c986c64052984465bf661a506 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Mon, 4 Jun 2018 23:13:39 +0800 Subject: [PATCH 0516/2496] Update 047._permutations_ii.md --- .../Python/047._permutations_ii.md | 30 +++++++------------ 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/docs/Leetcode_Solutions/Python/047._permutations_ii.md b/docs/Leetcode_Solutions/Python/047._permutations_ii.md index 68a3ead84..d61fa7427 100644 --- a/docs/Leetcode_Solutions/Python/047._permutations_ii.md +++ b/docs/Leetcode_Solutions/Python/047._permutations_ii.md @@ -7,35 +7,25 @@ 难度: Medium - - -虽然想到了,但是没有靠自己的力量implement出来,还是比较容易了理解的,因为如果有重复的,那么处理只用处理第一个,就只用把第一个提出来,剩下的管它怎么permute。 - -第二次碰到这个元素就不要再用它了,因为可能出现的组合已经有了。 - - -看代码: -base case 处理掉 -sort一下,设置一个prevNum变量 - 如果碰到过了,就continue,去继续执行下一个 - - -``` +```python class Solution(object): def permuteUnique(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ - if len(nums) == 0: return [] - if len(nums) == 1: return [nums] + if len(nums) == 0: + return [] + if len(nums) == 1: + return [nums] res = [] - nums.sort() for i in range(len(nums)): - if i > 0 and nums[i] == nums[i-1]: continue - for j in self.permuteUnique(nums[:i] + nums[i+1:]): - res.append([nums[i]] + j) + prefix = nums[i] + rest = nums[:i] + nums[i+1:] + for j in self.permuteUnique(rest): + if [prefix]+j not in res: + res.append([prefix]+j) return res ``` From d1eda74baea3c0d79ae92476aded10d0e57157be Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Mon, 4 Jun 2018 23:16:15 +0800 Subject: [PATCH 0517/2496] Update 047._permutations_ii.md --- docs/Leetcode_Solutions/Python/047._permutations_ii.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/Leetcode_Solutions/Python/047._permutations_ii.md b/docs/Leetcode_Solutions/Python/047._permutations_ii.md index d61fa7427..375248125 100644 --- a/docs/Leetcode_Solutions/Python/047._permutations_ii.md +++ b/docs/Leetcode_Solutions/Python/047._permutations_ii.md @@ -1,4 +1,4 @@ -###47. Permutations II +### 47. Permutations II 题目: @@ -7,7 +7,10 @@ 难度: Medium -如果碰到过了,就continue,去继续执行下一个 + +跟第46题一样,就是最后append的时候不一样,只有没有结果里面没有的才加入 + + ```python class Solution(object): def permuteUnique(self, nums): From d76dafad431c64f2821a73a6ad317c07c97edcd7 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Tue, 5 Jun 2018 12:18:44 +0800 Subject: [PATCH 0518/2496] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index ac05000f2..96c424879 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,9 @@ ## 2. [算法模版](/docs/Algorithm_Templates/Python) +## 3. [开发者列表](https://github.com/Lisanaaa) + + ## 推荐的一些LeetCode网站 From 587df1548f759da372d4b73bfc92627ceaa06ecf Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 7 Jun 2018 10:36:44 +0800 Subject: [PATCH 0519/2496] Update 389._find_the_difference.md --- .../Python/389._find_the_difference.md | 38 +++++++------------ 1 file changed, 13 insertions(+), 25 deletions(-) diff --git a/docs/Leetcode_Solutions/Python/389._find_the_difference.md b/docs/Leetcode_Solutions/Python/389._find_the_difference.md index a26bc73ae..864a9af86 100644 --- a/docs/Leetcode_Solutions/Python/389._find_the_difference.md +++ b/docs/Leetcode_Solutions/Python/389._find_the_difference.md @@ -1,5 +1,5 @@ -###389. Find the Difference +### 389. Find the Difference 题目: @@ -10,21 +10,9 @@ Easy +用个字典来记录,把s加进去,把t减掉,最后剩下那个要么个数为1,要么个数为-1 -思路 - -用两个hashmap分别来记录 s 和 t 中char的数量,一旦t[key] > s[key], output - -注意这个好的写法 - - -mapt[char] = mapt.get(char,0) + 1 - -如果mapt[char]不存在,会默认给1 - - - -``` +```python class Solution(object): def findTheDifference(self, s, t): """ @@ -32,16 +20,16 @@ class Solution(object): :type t: str :rtype: str """ - maps = {} - mapt = {} - for char in s: - maps[char] = maps.get(char,0) + 1 - for char in t: - mapt[char] = mapt.get(char,0) + 1 - - for key in mapt: - if mapt[key] - maps.get(key,0) > 0: - return key + res = {} + for i in s: + res[i] = res.get(i, 0) + 1 + for j in t: + res[j] = res.get(j, 0) - 1 + for key in res: + if abs(res[key]) == 1: # 这里用 abs 是因为新增加的那个字母在 s 中可能未出现过 + return key ``` + + From ba58a5014504a29ce7610da1442c21fddd48bf15 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 7 Jun 2018 11:12:44 +0800 Subject: [PATCH 0520/2496] Update 389._find_the_difference.md --- .../Python/389._find_the_difference.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/Leetcode_Solutions/Python/389._find_the_difference.md b/docs/Leetcode_Solutions/Python/389._find_the_difference.md index 864a9af86..9ebaced67 100644 --- a/docs/Leetcode_Solutions/Python/389._find_the_difference.md +++ b/docs/Leetcode_Solutions/Python/389._find_the_difference.md @@ -29,6 +29,18 @@ class Solution(object): if abs(res[key]) == 1: # 这里用 abs 是因为新增加的那个字母在 s 中可能未出现过 return key ``` +还有一个简单的方法 +```python +class Solution(object): + def findTheDifference(self, s, t): + """ + :type s: str + :type t: str + :rtype: str + """ + from collections import Counter + return list((Counter(t) - Counter(s)).keys()).pop() +``` From 5d13892aeda1458781eddb024aaae2e5de2cd1f3 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 7 Jun 2018 23:53:44 +0800 Subject: [PATCH 0521/2496] Update 108._convert_sorted_array_to_binary_search_tree.md --- ...vert_sorted_array_to_binary_search_tree.md | 39 ++++++++----------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/docs/Leetcode_Solutions/Python/108._convert_sorted_array_to_binary_search_tree.md b/docs/Leetcode_Solutions/Python/108._convert_sorted_array_to_binary_search_tree.md index 12705f918..66b21ee1e 100644 --- a/docs/Leetcode_Solutions/Python/108._convert_sorted_array_to_binary_search_tree.md +++ b/docs/Leetcode_Solutions/Python/108._convert_sorted_array_to_binary_search_tree.md @@ -1,4 +1,4 @@ -###108. Convert Sorted Array to Binary Search Tree +### 108. Convert Sorted Array to Binary Search Tree 题目: @@ -13,29 +13,22 @@ Medium 递归 - nums为空,return None -- nums 只有一个, return其为根节点 -- nums 大于一个,nums[n/2]为中间元素,根结点,nums[:mid]为左子树, nums[mid+1:]为右子树 +- nums非空,nums[n/2]为中间元素,根结点,nums[:mid]为左子树, nums[mid+1:]为右子树 -``` +```python class Solution(object): - def sortedArrayToBST(self, nums): - """ - :type nums: List[int] - :rtype: TreeNode - """ - n = len(nums) - - if n == 0 : - return None - if n == 1 : - return TreeNode(nums[0]) - else: - mid = n / 2 - root = TreeNode(nums[mid]) - root.left = self.sortedArrayToBST(nums[:mid]) - root.right = self.sortedArrayToBST(nums[mid+1:]) - return root - - + def sortedArrayToBST(self, nums): + """ + :type nums: List[int] + :rtype: TreeNode + """ + if not nums: + return None + if nums: + mid = len(nums) / 2 + root = TreeNode(nums[mid]) + root.left = self.sortedArrayToBST(nums[:mid]) + root.right = self.sortedArrayToBST(nums[mid+1:]) + return root ``` From d0538b4676daa2394ed9ddec0c6b5c4fde4b49e5 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 8 Jun 2018 00:14:36 +0800 Subject: [PATCH 0522/2496] Update 109._convert_sorted_list_to_binary_search_tree.md --- ...nvert_sorted_list_to_binary_search_tree.md | 44 ++++++++----------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/docs/Leetcode_Solutions/Python/109._convert_sorted_list_to_binary_search_tree.md b/docs/Leetcode_Solutions/Python/109._convert_sorted_list_to_binary_search_tree.md index 4ca36dc47..6858fb528 100644 --- a/docs/Leetcode_Solutions/Python/109._convert_sorted_list_to_binary_search_tree.md +++ b/docs/Leetcode_Solutions/Python/109._convert_sorted_list_to_binary_search_tree.md @@ -1,4 +1,4 @@ -###109. Convert Sorted List to Binary Search Tree +### 109. Convert Sorted List to Binary Search Tree @@ -12,36 +12,30 @@ Medium 思路: -跟解array to binary search tree一样,递归,找到list中间点,把它变成root,左边为左树,右边为右子树 +跟第 108 题一样 -值得注意的是需要找到的是list中间的前一个,所以用一个dummy node,然后反复使用linked list找中点的代码 - -``` +```python class Solution(object): def sortedListToBST(self, head): """ :type head: ListNode :rtype: TreeNode """ - - if head == None: - return None - elif head.next == None: - return TreeNode(head.val) + def sortedArrayToBST(nums): + if not nums: + return None + if nums: + mid = len(nums) / 2 + root = TreeNode(nums[mid]) + root.left = sortedArrayToBST(nums[:mid]) + root.right = sortedArrayToBST(nums[mid+1:]) + return root + if not head: + return None else: - dummy = ListNode(-1) - dummy.next = head - slow, fast = dummy, dummy - while fast.next and fast.next.next: - slow = slow.next - fast = fast.next.next - - # print slow.val - mid = slow.next - slow.next = None - - root = TreeNode(mid.val) - root.left = self.sortedListToBST(head) - root.right = self.sortedListToBST(mid.next) - return root + lst = [] + while head: + lst.append(head.val) + head = head.next + return sortedArrayToBST(lst) ``` From 9c02f5f4285192bb938cb78293f996e32f0459ee Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Mon, 11 Jun 2018 23:08:50 +0800 Subject: [PATCH 0523/2496] Update 217._contains_duplicate.md --- .../Python/217._contains_duplicate.md | 49 +++++-------------- 1 file changed, 13 insertions(+), 36 deletions(-) diff --git a/docs/Leetcode_Solutions/Python/217._contains_duplicate.md b/docs/Leetcode_Solutions/Python/217._contains_duplicate.md index f6c2a2aef..03e9cc544 100644 --- a/docs/Leetcode_Solutions/Python/217._contains_duplicate.md +++ b/docs/Leetcode_Solutions/Python/217._contains_duplicate.md @@ -1,4 +1,4 @@ -###217. Contains Duplicate +### 217. Contains Duplicate 题目: @@ -8,19 +8,23 @@ Easy +怎么可以这么简单。。。。 -我直接sort,然后比较相邻的元素,这样O(n),也是笨办法,居然unlocked a solution,所以来读读解答. - -三个办法: +```python +class Solution(object): + def containsDuplicate(self, nums): + """ + :type nums: List[int] + :rtype: bool + """ + return len(nums) != len(set(nums)) +``` -- linear search O(n^2) -- sort O(n) -- hashtable -我用的sort +或者先 sort 也可以 -``` +```python class Solution(object): def containsDuplicate(self, nums): """ @@ -33,30 +37,3 @@ class Solution(object): return True return False ``` - - - - -看给的Java解法 - - -``` -public boolean containsDuplicate(int[] nums) { - Set set = new HashSet<>(nums.length); - for (int x: nums) { - if (set.contains(x)) return true; - set.add(x); - } - return false; -} -``` - -还有一个取巧的Python解法,我也看到了 - -``` -class Solution(object): - def containsDuplicate(self, nums): - if len(nums) > len(set(nums)): - return True - return False -``` \ No newline at end of file From 45b256b336da009c30056576264268b1c7fae6f1 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Mon, 11 Jun 2018 23:32:12 +0800 Subject: [PATCH 0524/2496] Update 219._contains_duplicate_ii.md --- .../Python/219._contains_duplicate_ii.md | 83 ++++++++++++++----- 1 file changed, 62 insertions(+), 21 deletions(-) diff --git a/docs/Leetcode_Solutions/Python/219._contains_duplicate_ii.md b/docs/Leetcode_Solutions/Python/219._contains_duplicate_ii.md index 8c5868c6f..906f18e13 100644 --- a/docs/Leetcode_Solutions/Python/219._contains_duplicate_ii.md +++ b/docs/Leetcode_Solutions/Python/219._contains_duplicate_ii.md @@ -1,20 +1,61 @@ -###219. Contains Duplicate II - -题目: - - - -难度: - -Easy - - -经过了Contains Duplicate的考验,用hash table(也叫dictionary)来存,这个元素还没出现过,就放hash table,如果出现了,计算相邻距离,小于等于k则return true,否则更新hash table中元素的位置, - - -我用的sort - -``` +### 219. Contains Duplicate II + +题目: + + + +难度: + +Easy + +这道题虽然看似简单,但是我还是经历几次失败 + +第一次我打算用最粗暴的方法来做,直接 Time Limit Exceeded,代码如下: +``` +class Solution(object): + def containsNearbyDuplicate(self, nums, k): + """ + :type nums: List[int] + :type k: int + :rtype: bool + """ + if k == 0: + return False + if k >= len(nums): + return len(nums) != len(set(nums)) + for i in range(len(nums)-k): + for j in range(1, k+1): + if nums[i] == nums[i+j]: + return True + for i in range(len(nums)-k, len(nums)): + for j in range(i+1, len(nums)): + if nums[i] == nums[j]: + return True + return False +``` +然后我打算用第 217 题的方法来一遍,还是报 Time Limit Exceeded 这个错,代码如下L: +``` +class Solution(object): + def containsNearbyDuplicate(self, nums, k): + """ + :type nums: List[int] + :type k: int + :rtype: bool + """ + if k == 0: + return False + if k >= len(nums): + return len(nums) != len(set(nums)) + for i in range(len(nums)-k): + if len(nums[i:i+k+1]) != len(set(nums[i:i+k+1])): + return True + return len(nums[-k:]) != len(set(nums[-k:])) +``` + +终于我想到了用字典来存,这个元素还没出现过,就以 的形式存进字典里,如果 num 再次出现了,计算相邻距离,小于等于 k 则 return true,否则更新字典中元素的位置, + + +```python class Solution(object): def containsNearbyDuplicate(self, nums, k): """ @@ -22,14 +63,14 @@ class Solution(object): :type k: int :rtype: bool """ - if len(nums) < 2 : return False lookup = {} for i in range(len(nums)): if nums[i] not in lookup: lookup[nums[i]] = i else: - if i - lookup[nums[i]] <= k : + if i - lookup[nums[i]] <= k: return True - lookup[nums[i]] = i + else: + lookup[nums[i]] = i return False -``` \ No newline at end of file +``` From a2c7c7f6c0f054f65e15fa207f91bd338438ca21 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Mon, 11 Jun 2018 23:44:57 +0800 Subject: [PATCH 0525/2496] Update 118._pascal's_triangle.md --- .../Python/118._pascal's_triangle.md | 57 +++++++++---------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/docs/Leetcode_Solutions/Python/118._pascal's_triangle.md b/docs/Leetcode_Solutions/Python/118._pascal's_triangle.md index 72e7a44f9..ec1f9f357 100644 --- a/docs/Leetcode_Solutions/Python/118._pascal's_triangle.md +++ b/docs/Leetcode_Solutions/Python/118._pascal's_triangle.md @@ -1,36 +1,35 @@ -###118. Pascal's Triangle - -题目: - - - - -难度: - -Easy - - -高中数学知识,把行数理理清楚就ok - - -``` +### 118. Pascal's Triangle + +题目: + + + + +难度: + +Easy + + +高中数学知识,把行数理理清楚就ok + + +```python class Solution(object): def generate(self, numRows): """ :type numRows: int :rtype: List[List[int]] """ - res = [[1],[1,1]] - if numRows < 3: - return res[:numRows] - for i in range(3, numRows+1): - tmp = [1] * i - for j in range(1,i-1): - tmp[j] = res[i-2][j-1] + res[i-2][j] + if numRows == 0: + return [] + res = [[1]] + for i in range(1, numRows): + tmp = [1] + for j in range(1, i): + tmp.append(res[-1][j-1]+res[-1][j]) + tmp.append(1) res.append(tmp) - return res - - -``` - - + return res +``` + + From d3ff1a8bad7e7f799af20a442456af1fe010440a Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 13 Jun 2018 00:18:55 +0800 Subject: [PATCH 0526/2496] Update and rename 119. Pascal's Triangle II.md to 119. _Pascal's_Triangle_II.md --- .../Python/119. Pascal's Triangle II.md | 59 ------------------- .../Python/119. _Pascal's_Triangle_II.md | 32 ++++++++++ 2 files changed, 32 insertions(+), 59 deletions(-) delete mode 100644 docs/Leetcode_Solutions/Python/119. Pascal's Triangle II.md create mode 100644 docs/Leetcode_Solutions/Python/119. _Pascal's_Triangle_II.md diff --git a/docs/Leetcode_Solutions/Python/119. Pascal's Triangle II.md b/docs/Leetcode_Solutions/Python/119. Pascal's Triangle II.md deleted file mode 100644 index dbf97df9d..000000000 --- a/docs/Leetcode_Solutions/Python/119. Pascal's Triangle II.md +++ /dev/null @@ -1,59 +0,0 @@ -### 119. Pascal's Triangle II - -题目: - - -难度 : Easy - - - -思路: - -高中数学 - - - -这种算法会超时||| - -``` -class Solution(object): - def getRow(self, rowIndex): - """ - :type rowIndex: int - :rtype: List[int] - """ - def combNum(n,k): - if k == 0 or k == n : - return 1 - return combNum(n-1,k-1) + combNum(n-1,k) - res = [] - for i in range(rowIndex + 1): - res.append(combNum(rowIndex,i)) - - return res -``` - - - -用118改的,AC代码 - - - -``` -class Solution(object): - def getRow(self, rowIndex): - """ - :type rowIndex: int - :rtype: List[int] - """ - res = [[1],[1,1]] - if rowIndex < 2: - return res[rowIndex] - for i in range(3, rowIndex+2): - tmp = [1] * i - for j in range(1,i-1): - tmp[j] = res[i-2][j-1] + res[i-2][j] - res.append(tmp) - return res[-1] -``` - diff --git a/docs/Leetcode_Solutions/Python/119. _Pascal's_Triangle_II.md b/docs/Leetcode_Solutions/Python/119. _Pascal's_Triangle_II.md new file mode 100644 index 000000000..5aec2a5b1 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/119. _Pascal's_Triangle_II.md @@ -0,0 +1,32 @@ +### 119. Pascal's Triangle II + +题目: + + +难度 : Easy + + + +思路: + +太简单了,注意一点算数就好 + + +```python +class Solution(object): + def getRow(self, rowIndex): + """ + :type rowIndex: int + :rtype: List[int] + """ + if rowIndex == 0: + return [1] + res = [1] + for i in range(1, rowIndex+1): + tmp = [1] + for j in range(1, i): + tmp.append(res[j-1]+res[j]) + tmp.append(1) + res = tmp + return res +``` From a93701d78a317100228dccd3e72f93b6c657e6dc Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 13 Jun 2018 06:52:19 +0800 Subject: [PATCH 0527/2496] Update 189._rotate_array.md --- .../Python/189._rotate_array.md | 49 +++++++++++++------ 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/docs/Leetcode_Solutions/Python/189._rotate_array.md b/docs/Leetcode_Solutions/Python/189._rotate_array.md index 080a1e581..33ac35e4a 100644 --- a/docs/Leetcode_Solutions/Python/189._rotate_array.md +++ b/docs/Leetcode_Solutions/Python/189._rotate_array.md @@ -1,15 +1,35 @@ -###189. Rotate Array - -题目: - - - -难度 : Easy - - -作弊神奇python大法 - +###189. Rotate Array + +题目: + + + +难度 : Easy + +首先,要知道一点,```k```如果大于```nums```的长度了,那么其实进行 ```k%len(nums)``` 次就行了 + +其次,要注意```k 为0```的情况 + +```python +class Solution(object): + def rotate(self, nums, k): + """ + :type nums: List[int] + :type k: int + :rtype: void Do not return anything, modify nums in-place instead. + """ + k = k % len(nums) + if k != 0: + tmp = nums[-k:] + for j in range(len(nums)-1, k-1, -1): + nums[j] = nums[j-k] + nums[:k] = tmp ``` + + +还有作弊大法,贼🐂批 + +```python class Solution(object): def rotate(self, nums, k): """ @@ -17,7 +37,6 @@ class Solution(object): :type k: int :rtype: void Do not return anything, modify nums in-place instead. """ - n = len(nums) - nums[:] = nums[n-k:] + nums[:n-k] - œ -``` + k %= len(nums) + nums[:] = nums[-k:] + nums[:-k] +``` From e8f04a496ca7da1d54ff4fd91c87e0501c2dafe5 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 13 Jun 2018 06:52:36 +0800 Subject: [PATCH 0528/2496] Update 189._rotate_array.md --- docs/Leetcode_Solutions/Python/189._rotate_array.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Leetcode_Solutions/Python/189._rotate_array.md b/docs/Leetcode_Solutions/Python/189._rotate_array.md index 33ac35e4a..b00de8752 100644 --- a/docs/Leetcode_Solutions/Python/189._rotate_array.md +++ b/docs/Leetcode_Solutions/Python/189._rotate_array.md @@ -6,7 +6,7 @@ 难度 : Easy -首先,要知道一点,```k```如果大于```nums```的长度了,那么其实进行 ```k%len(nums)``` 次就行了 +首先,要知道一点,```k```如果大于```nums```的长度了,那么其实进行 ```k % len(nums)``` 次就行了 其次,要注意```k 为0```的情况 From 972122139023983639b9c1b19ec4b957c6602e97 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 13 Jun 2018 23:35:40 +0800 Subject: [PATCH 0529/2496] Update 024._swap_nodes_in_pairs.md --- .../Python/024._swap_nodes_in_pairs.md | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/docs/Leetcode_Solutions/Python/024._swap_nodes_in_pairs.md b/docs/Leetcode_Solutions/Python/024._swap_nodes_in_pairs.md index 907744af1..8d15e3266 100644 --- a/docs/Leetcode_Solutions/Python/024._swap_nodes_in_pairs.md +++ b/docs/Leetcode_Solutions/Python/024._swap_nodes_in_pairs.md @@ -1,16 +1,33 @@ -###24. Swap Nodes in Pairs +### 24. Swap Nodes in Pairs 题目: -难度 : Easy +难度 : Medium -看了hint,用loop做,每个node关系要弄清楚 +一眼就知道这个用递归做 +```python +class Solution(object): + def swapPairs(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + if not head: + return None + if not head.next: + return head + tmp = head.next + head.next = self.swapPairs(head.next.next) + tmp.next = head + return tmp +``` +或者用loop做,每个node关系要弄清楚, 又是巧用dummy,dummy大法对于nodeList的题目简直无敌!!!🐂批 -``` +```python class Solution(object): def swapPairs(self, head): """ @@ -32,4 +49,4 @@ class Solution(object): next_one.next = next_three cur = next_one return dummy.next -``` \ No newline at end of file +``` From c1a7b0cc002a4192b99dcedecf1c19985b89a04e Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 13 Jun 2018 23:37:45 +0800 Subject: [PATCH 0530/2496] Update 024._swap_nodes_in_pairs.md --- docs/Leetcode_Solutions/Python/024._swap_nodes_in_pairs.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Leetcode_Solutions/Python/024._swap_nodes_in_pairs.md b/docs/Leetcode_Solutions/Python/024._swap_nodes_in_pairs.md index 8d15e3266..fc08296fe 100644 --- a/docs/Leetcode_Solutions/Python/024._swap_nodes_in_pairs.md +++ b/docs/Leetcode_Solutions/Python/024._swap_nodes_in_pairs.md @@ -6,7 +6,7 @@ 难度 : Medium -一眼就知道这个用递归做 +一眼就知道这个用递归做,```beats 96.06%``` ```python class Solution(object): def swapPairs(self, head): @@ -24,7 +24,7 @@ class Solution(object): return tmp ``` -或者用loop做,每个node关系要弄清楚, 又是巧用dummy,dummy大法对于nodeList的题目简直无敌!!!🐂批 +或者用```loop```做,每个```node```关系要弄清楚, 又是巧用```dummy```,```dummy```大法对于```nodeList```的题目简直无敌!!!🐂批, 但是只```beats```了```69.40%``` ```python From 44b643539dbda190765b57692e112d398daa6e07 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 14 Jun 2018 23:56:57 +0800 Subject: [PATCH 0531/2496] Create 124._Binary_Tree_Maximum_Path_Sum.md --- .../124._Binary_Tree_Maximum_Path_Sum.md | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 docs/Leetcode_Solutions/Python/124._Binary_Tree_Maximum_Path_Sum.md diff --git a/docs/Leetcode_Solutions/Python/124._Binary_Tree_Maximum_Path_Sum.md b/docs/Leetcode_Solutions/Python/124._Binary_Tree_Maximum_Path_Sum.md new file mode 100644 index 000000000..d690908af --- /dev/null +++ b/docs/Leetcode_Solutions/Python/124._Binary_Tree_Maximum_Path_Sum.md @@ -0,0 +1,61 @@ +### 1. Two Sum + +题目: + + + +难度: + +Hard + + +思路 + + + +```python +class Solution(object): + + def maxPathSum(self, root): + """ + :type root: TreeNode + :rtype: int + """ + self.global_max = root.val if root else 0 + self.findmax(root) + return self.global_max + + def findmax(self, node): + if not node: + return 0 + left = self.findmax(node.left) + right = self.findmax(node.right) + if left < 0: left = 0 + if right < 0: right = 0 + self.global_max = max(left + right + node.val, self.global_max) + return max(left, right) + node.val +``` + +其实开始的时候我想当然的用了很傻的方法,并且是错误的,因为这样当[-10,9,20,null,null,15,7]的时候我们会取所有的点,返回41,然而我们可以取到42的, +即15+7+20 + +``` +class Solution(object): + def maxPathSum(self, root): + """ + :type root: TreeNode + :rtype: int + """ + if not root: + return 0 + if not root.left and not root.right: + return root.val + if not root.left: + return max(root.val, root.val+self.maxPathSum(root.right)) + if not root.right: + return max(root.val, root.val+self.maxPathSum(root.left)) + return max(root.val, + root.val+self.maxPathSum(root.right), + root.val+self.maxPathSum(root.left), + root.val+self.maxPathSum(root.left)+self.maxPathSum(root.right)) +``` From b585bd1083ba5f7a3494c5c450905a402514c059 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 15 Jun 2018 00:05:51 +0800 Subject: [PATCH 0532/2496] Update 124._Binary_Tree_Maximum_Path_Sum.md --- .../Python/124._Binary_Tree_Maximum_Path_Sum.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/docs/Leetcode_Solutions/Python/124._Binary_Tree_Maximum_Path_Sum.md b/docs/Leetcode_Solutions/Python/124._Binary_Tree_Maximum_Path_Sum.md index d690908af..c805f4feb 100644 --- a/docs/Leetcode_Solutions/Python/124._Binary_Tree_Maximum_Path_Sum.md +++ b/docs/Leetcode_Solutions/Python/124._Binary_Tree_Maximum_Path_Sum.md @@ -28,12 +28,16 @@ class Solution(object): def findmax(self, node): if not node: return 0 - left = self.findmax(node.left) + + left = self.findmax(node.left) + left = left if left > 0 else 0 + right = self.findmax(node.right) - if left < 0: left = 0 - if right < 0: right = 0 - self.global_max = max(left + right + node.val, self.global_max) - return max(left, right) + node.val + right = right if right > 0 else 0 + # 这句是精髓,只要判断出当前这个点作为root的path更长,就更新一下 + self.global_max = max(left + right + node.val, self.global_max) + # 这里是因为sub_path只能为一条边,不然跟上面的root组合起来就不是path了 + return max(left, right) + node.val ``` 其实开始的时候我想当然的用了很傻的方法,并且是错误的,因为这样当[-10,9,20,null,null,15,7]的时候我们会取所有的点,返回41,然而我们可以取到42的, From b209834284178932af7fa877d32de43048a22c9c Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 15 Jun 2018 00:12:30 +0800 Subject: [PATCH 0533/2496] Update 124._Binary_Tree_Maximum_Path_Sum.md --- .../Python/124._Binary_Tree_Maximum_Path_Sum.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Leetcode_Solutions/Python/124._Binary_Tree_Maximum_Path_Sum.md b/docs/Leetcode_Solutions/Python/124._Binary_Tree_Maximum_Path_Sum.md index c805f4feb..459901c21 100644 --- a/docs/Leetcode_Solutions/Python/124._Binary_Tree_Maximum_Path_Sum.md +++ b/docs/Leetcode_Solutions/Python/124._Binary_Tree_Maximum_Path_Sum.md @@ -1,4 +1,4 @@ -### 1. Two Sum +### 124. Binary Tree Maximum Path Sum 题目: From 62429a84ca814756a4b1e4a873e6215dfb4bdfe4 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Tue, 19 Jun 2018 00:10:39 +0800 Subject: [PATCH 0534/2496] Create 361._Bomb_Enemy.md --- .../Python/361._Bomb_Enemy.md | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 docs/Leetcode_Solutions/Python/361._Bomb_Enemy.md diff --git a/docs/Leetcode_Solutions/Python/361._Bomb_Enemy.md b/docs/Leetcode_Solutions/Python/361._Bomb_Enemy.md new file mode 100644 index 000000000..9613db215 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/361._Bomb_Enemy.md @@ -0,0 +1,73 @@ +### 361. Bomb Enemy + +题目: + + + +难度: + +Medium + + +思路 + +1. 首先,从每一行开始,从左到右,计算E的个数,然后一碰到W就将row_hits重置为0,一碰到0就将row_hits赋值给他 +2。 然后,从每一行开始,从右到左,原操作不变,唯一是碰到0的时候加上row_hits而不是直接等于row_hits +3. 接下来,就是跟第二步一样的操作,只不过是变成了从每一列开始,从上到下 +4. 最后也是跟第二步一眼过的操作,只不过是变成了从每一列开始,并且是从下到上,然后就是每一次碰到0不但要加上col_hits的值还要决出max_hits +5. 返回max_hits + + + +```python + if not grid or len(grid) == 0: + return 0 + max_hits = 0 + nums = [[0 for i in range(len(grid[0]))] for j in range(len(grid))] + + for i in range(len(grid)): + row_hits = 0 + for j in range(len(grid[0])): + if grid[i][j] == 'E': + row_hits += 1 + elif grid[i][j] == 'W': + row_hits = 0 + else: + nums[i][j] = row_hits + + for i in range(len(grid)): + row_hits = 0 + for j in range(len(grid[0])-1, -1, -1): + if grid[i][j] == 'E': + row_hits += 1 + elif grid[i][j] == 'W': + row_hits = 0 + else: + nums[i][j] += row_hits + + for i in range(len(grid[0])): + col_hits = 0 + for j in range(len(grid)): + if grid[j][i] == 'E': + col_hits += 1 + elif grid[j][i] == 'W': + col_hits = 0 + else: + nums[j][i] += col_hits + + for i in range(len(grid[0])): + col_hits = 0 + for j in range(len(grid)-1, -1, -1): + if grid[j][i] == 'E': + col_hits +=1 + elif grid[j][i] == 'W': + col_hits = 0 + else: + nums[j][i] += col_hits + max_hits = max(max_hits, nums[j][i]) + + + return max_hits +``` + + From f42f71eac9b039f70e588a646c2d6936d10d5d61 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Tue, 19 Jun 2018 00:11:31 +0800 Subject: [PATCH 0535/2496] Update 361._Bomb_Enemy.md --- docs/Leetcode_Solutions/Python/361._Bomb_Enemy.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Leetcode_Solutions/Python/361._Bomb_Enemy.md b/docs/Leetcode_Solutions/Python/361._Bomb_Enemy.md index 9613db215..84b06716f 100644 --- a/docs/Leetcode_Solutions/Python/361._Bomb_Enemy.md +++ b/docs/Leetcode_Solutions/Python/361._Bomb_Enemy.md @@ -12,9 +12,9 @@ Medium 思路 1. 首先,从每一行开始,从左到右,计算E的个数,然后一碰到W就将row_hits重置为0,一碰到0就将row_hits赋值给他 -2。 然后,从每一行开始,从右到左,原操作不变,唯一是碰到0的时候加上row_hits而不是直接等于row_hits +2. 然后,从每一行开始,从右到左,原操作不变,唯一是碰到0的时候加上row_hits而不是直接等于row_hits 3. 接下来,就是跟第二步一样的操作,只不过是变成了从每一列开始,从上到下 -4. 最后也是跟第二步一眼过的操作,只不过是变成了从每一列开始,并且是从下到上,然后就是每一次碰到0不但要加上col_hits的值还要决出max_hits +4. 最后也是跟第二步一样的操作,只不过是变成了从每一列开始,并且是从下到上,然后就是每一次碰到0不但要加上col_hits的值还要决出max_hits 5. 返回max_hits From 24491adfa6b9df32aafb0d330b7cc5964ce4eba6 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Tue, 19 Jun 2018 00:12:50 +0800 Subject: [PATCH 0536/2496] Update 361._Bomb_Enemy.md --- docs/Leetcode_Solutions/Python/361._Bomb_Enemy.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Leetcode_Solutions/Python/361._Bomb_Enemy.md b/docs/Leetcode_Solutions/Python/361._Bomb_Enemy.md index 84b06716f..8eedf4364 100644 --- a/docs/Leetcode_Solutions/Python/361._Bomb_Enemy.md +++ b/docs/Leetcode_Solutions/Python/361._Bomb_Enemy.md @@ -17,6 +17,7 @@ Medium 4. 最后也是跟第二步一样的操作,只不过是变成了从每一列开始,并且是从下到上,然后就是每一次碰到0不但要加上col_hits的值还要决出max_hits 5. 返回max_hits +时间复杂度是 ```O(m*n) * (m+n)``` ```python From 447a7211414ae4d68fe4921003c300c0f0dc315a Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 20 Jun 2018 00:02:17 +0800 Subject: [PATCH 0537/2496] Update 300._longest_increasing_subsequence.md --- .../300._longest_increasing_subsequence.md | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/docs/Leetcode_Solutions/Python/300._longest_increasing_subsequence.md b/docs/Leetcode_Solutions/Python/300._longest_increasing_subsequence.md index bd1752b9e..9c59ae194 100644 --- a/docs/Leetcode_Solutions/Python/300._longest_increasing_subsequence.md +++ b/docs/Leetcode_Solutions/Python/300._longest_increasing_subsequence.md @@ -1,4 +1,4 @@ -###300. Longest Increasing Subsequence +### 300. Longest Increasing Subsequence 题目: @@ -22,21 +22,20 @@ dp[i] = dp[j] + 1 if num[i] > num[j] else 1 AC 代码 -``` +```python class Solution(object): def lengthOfLIS(self, nums): """ :type nums: List[int] :rtype: int """ - if not nums: return 0 - n = len(nums) - dp = [1 for i in range(n)] - for i in range(1,n): - for j in range(i): - if nums[i] > nums[j] : - dp[i] = max(dp[i],dp[j] + 1) - + if not nums: + return 0 + dp = [1 for i in range(len(nums))] + for i in range(1, len(nums)): + for j in range(i): + if nums[i] > nums[j]: + dp[i] = max(dp[j]+1, dp[i]) return max(dp) ``` From 36a527c9a93948ec4f4c0092de51d86613e63962 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 20 Jun 2018 23:48:39 +0800 Subject: [PATCH 0538/2496] Update 226._invert_binary_tree.md --- .../Python/226._invert_binary_tree.md | 47 +++++++++---------- 1 file changed, 21 insertions(+), 26 deletions(-) diff --git a/docs/Leetcode_Solutions/Python/226._invert_binary_tree.md b/docs/Leetcode_Solutions/Python/226._invert_binary_tree.md index b66918814..56e952fd3 100644 --- a/docs/Leetcode_Solutions/Python/226._invert_binary_tree.md +++ b/docs/Leetcode_Solutions/Python/226._invert_binary_tree.md @@ -1,33 +1,28 @@ -###226. Invert Binary Tree - -题目: - - - -难度: - -Easy - -然后查了一下,有更简单的写法 - - -``` +### 226. Invert Binary Tree + +题目: + + + +难度: + +Easy +典型的递归题 + + +``` class Solution(object): def invertTree(self, root): """ :type root: TreeNode :rtype: TreeNode """ - if root == None: return None - elif root.left == None and root.right == None: return root - else: - leftNode = root.left - rightNode = root.right - root.right = leftNode - root.left = rightNode - self.invertTree(root.left) - self.invertTree(root.right) - return root -``` - + if not root: + return None + self.invertTree(root.left) + self.invertTree(root.right) + root.left, root.right = root.right, root.left + return root +``` + From aef51c8574d79f0d584c48e87462a4a0da06fcfe Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 20 Jun 2018 23:48:52 +0800 Subject: [PATCH 0539/2496] Update 226._invert_binary_tree.md --- docs/Leetcode_Solutions/Python/226._invert_binary_tree.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Leetcode_Solutions/Python/226._invert_binary_tree.md b/docs/Leetcode_Solutions/Python/226._invert_binary_tree.md index 56e952fd3..cb9086968 100644 --- a/docs/Leetcode_Solutions/Python/226._invert_binary_tree.md +++ b/docs/Leetcode_Solutions/Python/226._invert_binary_tree.md @@ -11,7 +11,7 @@ Easy 典型的递归题 -``` +```python class Solution(object): def invertTree(self, root): """ From a4b92ea34329c9c706516e4e81adf25bb09ed07f Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 21 Jun 2018 22:26:36 +0800 Subject: [PATCH 0540/2496] Create 844._Backspace_String_Compare.md --- .../Python/844._Backspace_String_Compare.md | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 docs/Leetcode_Solutions/Python/844._Backspace_String_Compare.md diff --git a/docs/Leetcode_Solutions/Python/844._Backspace_String_Compare.md b/docs/Leetcode_Solutions/Python/844._Backspace_String_Compare.md new file mode 100644 index 000000000..4ddbd8ca1 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/844._Backspace_String_Compare.md @@ -0,0 +1,38 @@ +### 844. Backspace String Compare + +题目: + + + +难度: + +Easy + + +思路 + +就看一下两个字符串变化完之后是不是相等就行了, +- 时间复杂度:O(n) +- 空间复杂度:O(n) + + +```python +class Solution(object): + def backspaceCompare(self, S, T): + """ + :type S: str + :type T: str + :rtype: bool + """ + def afterChange(s): + res = '' + for i in s: + if i == '#': + res = '' if len(res) == 0 else res[:-1] + else: + res += i + return res + return afterChange(S) == afterChange(T) +``` + + From 70b58363b2030e833110857e70959dae01bbe5d2 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 23 Jun 2018 00:11:07 +0800 Subject: [PATCH 0541/2496] Create 179._Largest_Number.md --- .../Python/179._Largest_Number.md | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 docs/Leetcode_Solutions/Python/179._Largest_Number.md diff --git a/docs/Leetcode_Solutions/Python/179._Largest_Number.md b/docs/Leetcode_Solutions/Python/179._Largest_Number.md new file mode 100644 index 000000000..b8f1a63e8 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/179._Largest_Number.md @@ -0,0 +1,51 @@ +### 179. Largest Number + +题目: + + + +难度: + +Medium + + +思路 + +先排序,再合并,若最后为空字符串,则返回'0' + +其中排序思想为字符串的经典比较: +``` + """ + Replacement for built-in funciton cmp that was removed in Python 3 + + Compare the two objects x and y and return an integer according to + the outcome. The return value is negative if x < y, zero if x == y + and strictly positive if x > y. + """ +``` + +```python +class Solution(object): + def largestNumber(self, nums): + """ + :type nums: List[int] + :rtype: str + """ + nums = [str(num) for num in nums] + nums.sort(cmp=lambda x, y: cmp(y+x, x+y)) + return ''.join(num).lstrip('0') if ''.join(num).lstrip('0') else '0' +``` +或者更简单一点 + +```python +class Solution(object): + def largestNumber(self, nums): + """ + :type nums: List[int] + :rtype: str + """ + nums = [str(num) for num in nums] + nums.sort(cmp=lambda x, y: cmp(y+x, x+y)) + return ''.join(num).lstrip('0') or '0' +``` + From 88d6b052228cedaca788aefd721a6dedae867878 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Mon, 25 Jun 2018 21:52:34 +0800 Subject: [PATCH 0542/2496] Add files via upload --- .../Python/Summarization/python_base.py | 1336 +++++++++++++++++ 1 file changed, 1336 insertions(+) create mode 100644 docs/Leetcode_Solutions/Python/Summarization/python_base.py diff --git a/docs/Leetcode_Solutions/Python/Summarization/python_base.py b/docs/Leetcode_Solutions/Python/Summarization/python_base.py new file mode 100644 index 000000000..34ba3a603 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/Summarization/python_base.py @@ -0,0 +1,1336 @@ +# _*_ coding: utf-8 _*_ + +"""类型和运算----类型和运算----类型和运算----类型和运算----类型和运算----类型和运算----类型和运算----类型和运算----类型和运算----类型和运算----类型和运算""" + +#-- 寻求帮助: + dir(obj) # 简单的列出对象obj所包含的方法名称,返回一个字符串列表 + help(obj.func) # 查询obj.func的具体介绍和用法 + +#-- 测试类型的三种方法,推荐第三种 + if type(L) == type([]): + print("L is list") + if type(L) == list: + print("L is list") + if isinstance(L, list): + print("L is list") + +#-- Python数据类型:哈希类型、不可哈希类型 + # 哈希类型,即在原地不能改变的变量类型,不可变类型。可利用hash函数查看其hash值,也可以作为字典的key + "数字类型:int, float, decimal.Decimal, fractions.Fraction, complex" + "字符串类型:str, bytes" + "元组:tuple" + "冻结集合:frozenset" + "布尔类型:True, False" + "None" + # 不可hash类型:原地可变类型:list、dict和set。它们不可以作为字典的key。 + +#-- 数字常量 + 1234, -1234, 0, 999999999 # 整数 + 1.23, 1., 3.14e-10, 4E210, 4.0e+210 # 浮点数 + 0o177, 0x9ff, 0X9FF, 0b101010 # 八进制、十六进制、二进制数字 + 3+4j, 3.0+4.0j, 3J # 复数常量,也可以用complex(real, image)来创建 + hex(I), oct(I), bin(I) # 将十进制数转化为十六进制、八进制、二进制表示的“字符串” + int(string, base) # 将字符串转化为整数,base为进制数 + # 2.x中,有两种整数类型:一般整数(32位)和长整数(无穷精度)。可以用l或L结尾,迫使一般整数成为长整数 + float('inf'), float('-inf'), float('nan') # 无穷大, 无穷小, 非数 + +#-- 数字的表达式操作符 + yield x # 生成器函数发送协议 + lambda args: expression # 生成匿名函数 + x if y else z # 三元选择表达式 + x and y, x or y, not x # 逻辑与、逻辑或、逻辑非 + x in y, x not in y # 成员对象测试 + x is y, x is not y # 对象实体测试 + xy, x>=y, x==y, x!=y # 大小比较,集合子集或超集值相等性操作符 + 1 < a < 3 # Python中允许连续比较 + x|y, x&y, x^y # 位或、位与、位异或 + x<>y # 位操作:x左移、右移y位 + +, -, *, /, //, %, ** # 真除法、floor除法:返回不大于真除法结果的整数值、取余、幂运算 + -x, +x, ~x # 一元减法、识别、按位求补(取反) + x[i], x[i:j:k] # 索引、分片、调用 + int(3.14), float(3) # 强制类型转换 + +#-- 整数可以利用bit_length函数测试所占的位数 + a = 1; a.bit_length() # 1 + a = 1024; a.bit_length() # 11 + +#-- repr和str显示格式的区别 + """ + repr格式:默认的交互模式回显,产生的结果看起来它们就像是代码。 + str格式:打印语句,转化成一种对用户更加友好的格式。 + """ + +#-- 数字相关的模块 + # math模块 + # Decimal模块:小数模块 + import decimal + from decimal import Decimal + Decimal("0.01") + Decimal("0.02") # 返回Decimal("0.03") + decimal.getcontext().prec = 4 # 设置全局精度为4 即小数点后边4位 + # Fraction模块:分数模块 + from fractions import Fraction + x = Fraction(4, 6) # 分数类型 4/6 + x = Fraction("0.25") # 分数类型 1/4 接收字符串类型的参数 + +#-- 集合set + """ + set是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素。 + set支持union(联合), intersection(交), difference(差)和symmetric difference(对称差集)等数学运算。 + set支持x in set, len(set), for x in set。 + set不记录元素位置或者插入点, 因此不支持indexing, slicing, 或其它类序列的操作 + """ + s = set([3,5,9,10]) # 创建一个数值集合,返回{3, 5, 9, 10} + t = set("Hello") # 创建一个唯一字符的集合返回{} + a = t | s; t.union(s) # t 和 s的并集 + b = t & s; t.intersection(s) # t 和 s的交集 + c = t – s; t.difference(s) # 求差集(项在t中, 但不在s中) + d = t ^ s; t.symmetric_difference(s) # 对称差集(项在t或s中, 但不会同时出现在二者中) + t.add('x'); t.remove('H') # 增加/删除一个item + s.update([10,37,42]) # 利用[......]更新s集合 + x in s, x not in s # 集合中是否存在某个值 + s.issubset(t); s <= t # 测试是否 s 中的每一个元素都在 t 中 + s.issuperset(t); s >= t # 测试是否 t 中的每一个元素都在 s 中 + s.copy(); + s.discard(x); # 删除s中x + s.clear() # 清空s + {x**2 for x in [1, 2, 3, 4]} # 集合解析,结果:{16, 1, 4, 9} + {x for x in 'spam'} # 集合解析,结果:{'a', 'p', 's', 'm'} + +#-- 集合frozenset,不可变对象 + """ + set是可变对象,即不存在hash值,不能作为字典的键值。同样的还有list等(tuple是可以作为字典key的) + frozenset是不可变对象,即存在hash值,可作为字典的键值 + frozenset对象没有add、remove等方法,但有union/intersection/difference等方法 + """ + a = set([1, 2, 3]) + b = set() + b.add(a) # error: set是不可哈希类型 + b.add(frozenset(a)) # ok,将set变为frozenset,可哈希 + +#-- 布尔类型bool + type(True) # 返回 + isinstance(False, int) # bool类型属于整型,所以返回True + True == 1; True is 1 # 输出(True, False) + +#-- 动态类型简介 + """ + 变量名通过引用,指向对象。 + Python中的“类型”属于对象,而不是变量,每个对象都包含有头部信息,比如"类型标示符" "引用计数器"等 + """ + #共享引用及在原处修改:对于可变对象,要注意尽量不要共享引用! + #共享引用和相等测试: + L = [1], M = [1], L is M # 返回False + L = M = [1, 2, 3], L is M # 返回True,共享引用 + #增强赋值和共享引用:普通+号会生成新的对象,而增强赋值+=会在原处修改 + L = M = [1, 2] + L = L + [3, 4] # L = [1, 2, 3, 4], M = [1, 2] + L += [3, 4] # L = [1, 2, 3, 4], M = [1, 2, 3, 4] + +#-- 常见字符串常量和表达式 + S = '' # 空字符串 + S = "spam’s" # 双引号和单引号相同 + S = "s\np\ta\x00m" # 转义字符 + S = """spam""" # 三重引号字符串,一般用于函数说明 + S = r'\temp' # Raw字符串,不会进行转义,抑制转义 + S = b'Spam' # Python3中的字节字符串 + S = u'spam' # Python2.6中的Unicode字符串 + s1+s2, s1*3, s[i], s[i:j], len(s) # 字符串操作 + 'a %s parrot' % 'kind' # 字符串格式化表达式 + 'a {1} {0} parrot'.format('kind', 'red')# 字符串格式化方法 + for x in s: print(x) # 字符串迭代,成员关系 + [x*2 for x in s] # 字符串列表解析 + ','.join(['a', 'b', 'c']) # 字符串输出,结果:a,b,c + +#-- 内置str处理函数: + str1 = "stringobject" + str1.upper(); str1.lower(); str1.swapcase(); str1.capitalize(); str1.title() # 全部大写,全部小写、大小写转换,首字母大写,每个单词的首字母都大写 + str1.ljust(width) # 获取固定长度,左对齐,右边不够用空格补齐 + str1.rjust(width) # 获取固定长度,右对齐,左边不够用空格补齐 + str1.center(width) # 获取固定长度,中间对齐,两边不够用空格补齐 + str1.zfill(width) # 获取固定长度,右对齐,左边不足用0补齐 + str1.find('t',start,end) # 查找字符串,可以指定起始及结束位置搜索 + str1.rfind('t') # 从右边开始查找字符串 + str1.count('t') # 查找字符串出现的次数 + #上面所有方法都可用index代替,不同的是使用index查找不到会抛异常,而find返回-1 + str1.replace('old','new') # 替换函数,替换old为new,参数中可以指定maxReplaceTimes,即替换指定次数的old为new + str1.strip(); # 默认删除空白符 + str1.strip('d'); # 删除str1字符串中开头、结尾处,位于 d 删除序列的字符 + str1.lstrip(); + str1.lstrip('d'); # 删除str1字符串中开头处,位于 d 删除序列的字符 + str1.rstrip(); + str1.rstrip('d') # 删除str1字符串中结尾处,位于 d 删除序列的字符 + str1.startswith('start') # 是否以start开头 + str1.endswith('end') # 是否以end结尾 + str1.isalnum(); str1.isalpha(); str1.isdigit(); str1.islower(); str1.isupper() # 判断字符串是否全为字符、数字、小写、大写 + +#-- 三重引号编写多行字符串块,并且在代码折行处嵌入换行字符\n + mantra = """hello world + hello python + hello my friend""" + # mantra为"""hello world \n hello python \n hello my friend""" + +#-- 索引和分片: + S[0], S[len(S)–1], S[-1] # 索引 + S[1:3], S[1:], S[:-1], S[1:10:2] # 分片,第三个参数指定步长,如`S[1:10:2]`是从1位到10位没隔2位获取一个字符。 + +#-- 字符串转换工具: + int('42'), str(42) # 返回(42, '42') + float('4.13'), str(4.13) # 返回(4.13, '4.13') + ord('s'), chr(115) # 返回(115, 's') + int('1001', 2) # 将字符串作为二进制数字,转化为数字,返回9 + bin(13), oct(13), hex(13) # 将整数转化为二进制/八进制/十六进制字符串,返回('0b1101', '015', '0xd') + +#-- 另类字符串连接 + name = "wang" "hong" # 单行,name = "wanghong" + name = "wang" \ + "hong" # 多行,name = "wanghong" + +#-- Python中的字符串格式化实现1--字符串格式化表达式 + """ + 基于C语言的'print'模型,并且在大多数的现有的语言中使用。 + 通用结构:%[(name)][flag][width].[precision]typecode + """ + "this is %d %s bird" % (1, 'dead') # 一般的格式化表达式 + "%s---%s---%s" % (42, 3.14, [1, 2, 3]) # 字符串输出:'42---3.14---[1, 2, 3]' + "%d...%6d...%-6d...%06d" % (1234, 1234, 1234, 1234) # 对齐方式及填充:"1234... 1234...1234 ...001234" + x = 1.23456789 + "%e | %f | %g" % (x, x, x) # 对齐方式:"1.234568e+00 | 1.234568 | 1.23457" + "%6.2f*%-6.2f*%06.2f*%+6.2f" % (x, x, x, x) # 对齐方式:' 1.23*1.23 *001.23* +1.23' + "%(name1)d---%(name2)s" % {"name1":23, "name2":"value2"} # 基于字典的格式化表达式 + "%(name)s is %(age)d" % vars() # vars()函数调用返回一个字典,包含了所有本函数调用时存在的变量 + +#-- Python中的字符串格式化实现2--字符串格式化调用方法 + # 普通调用 + "{0}, {1} and {2}".format('spam', 'ham', 'eggs') # 基于位置的调用 + "{motto} and {pork}".format(motto = 'spam', pork = 'ham') # 基于Key的调用 + "{motto} and {0}".format('ham', motto = 'spam') # 混合调用 + # 添加键 属性 偏移量 (import sys) + "my {1[spam]} runs {0.platform}".format(sys, {'spam':'laptop'}) # 基于位置的键和属性 + "{config[spam]} {sys.platform}".format(sys = sys, config = {'spam':'laptop'}) # 基于Key的键和属性 + "first = {0[0]}, second = {0[1]}".format(['A', 'B', 'C']) # 基于位置的偏移量 + # 具体格式化 + "{0:e}, {1:.3e}, {2:g}".format(3.14159, 3.14159, 3.14159) # 输出'3.141590e+00, 3.142e+00, 3.14159' + "{fieldname:format_spec}".format(......) + # 说明: + """ + fieldname是指定参数的一个数字或关键字, 后边可跟可选的".name"或"[index]"成分引用 + format_spec ::= [[fill]align][sign][#][0][width][,][.precision][type] + fill ::= #填充字符 + align ::= "<" | ">" | "=" | "^" #对齐方式 + sign ::= "+" | "-" | " " #符号说明 + width ::= integer #字符串宽度 + precision ::= integer #浮点数精度 + type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%" + """ + # 例子: + '={0:10} = {1:10}'.format('spam', 123.456) # 输出'=spam = 123.456' + '={0:>10}='.format('test') # 输出'= test=' + '={0:<10}='.format('test') # 输出'=test =' + '={0:^10}='.format('test') # 输出'= test =' + '{0:X}, {1:o}, {2:b}'.format(255, 255, 255) # 输出'FF, 377, 11111111' + 'My name is {0:{1}}.'.format('Fred', 8) # 输出'My name is Fred .' 动态指定参数 + +#-- 常用列表常量和操作 + L = [[1, 2], 'string', {}] # 嵌套列表 + L = list('spam') # 列表初始化 + L = list(range(0, 4)) # 列表初始化 + list(map(ord, 'spam')) # 列表解析 + len(L) # 求列表长度 + L.count(value) # 求列表中某个值的个数 + L.append(obj) # 向列表的尾部添加数据,比如append(2),添加元素2 + L.insert(index, obj) # 向列表的指定index位置添加数据,index及其之后的数据后移 + L.extend(interable) # 通过添加iterable中的元素来扩展列表,比如extend([2]),添加元素2,注意和append的区别 + L.index(value, [start, [stop]]) # 返回列表中值value的第一个索引 + L.pop([index]) # 删除并返回index处的元素,默认为删除并返回最后一个元素 + L.remove(value) # 删除列表中的value值,只删除第一次出现的value的值 + L.reverse() # 反转列表 + L.sort(cmp=None, key=None, reverse=False) # 排序列表 + a = [1, 2, 3], b = a[10:] # 注意,这里不会引发IndexError异常,只会返回一个空的列表[] + a = [], a += [1] # 这里实在原有列表的基础上进行操作,即列表的id没有改变 + a = [], a = a + [1] # 这里最后的a要构建一个新的列表,即a的id发生了变化 + +#-- 用切片来删除序列的某一段 + a = [1, 2, 3, 4, 5, 6, 7] + a[1:4] = [] # a = [1, 5, 6, 7] + a = [0, 1, 2, 3, 4, 5, 6, 7] + del a[::2] # 去除偶数项(偶数索引的),a = [1, 3, 5, 7] + +#-- 常用字典常量和操作 + D = {} + D = {'spam':2, 'tol':{'ham':1}} # 嵌套字典 + D = dict.fromkeys(['s', 'd'], 8) # {'s': 8, 'd': 8} + D = dict(name = 'tom', age = 12) # {'age': 12, 'name': 'tom'} + D = dict([('name', 'tom'), ('age', 12)]) # {'age': 12, 'name': 'tom'} + D = dict(zip(['name', 'age'], ['tom', 12])) # {'age': 12, 'name': 'tom'} + D.keys(); D.values(); D.items() # 字典键、值以及键值对 + D.get(key, default) # get函数 + D.update(D_other) # 合并字典,如果存在相同的键值,D_other的数据会覆盖掉D的数据 + D.pop(key, [D]) # 删除字典中键值为key的项,返回键值为key的值,如果不存在,返回默认值D,否则异常 + D.popitem() # pop字典中随机的一项(一个键值对) + D.setdefault(k[, d]) # 设置D中某一项的默认值。如果k存在,则返回D[k],否则设置D[k]=d,同时返回D[k]。 + del D # 删除字典 + del D['key'] # 删除字典的某一项 + if key in D: if key not in D: # 测试字典键是否存在 + # 字典注意事项:(1)对新索引赋值会添加一项(2)字典键不一定非得是字符串,也可以为任何的不可变对象 + # 不可变对象:调用对象自身的任意方法,也不会改变该对象自身的内容,这些方法会创建新的对象并返回。 + # 字符串、整数、tuple都是不可变对象,dict、set、list都是可变对象 + D[(1,2,3)] = 2 # tuple作为字典的key + +#-- 字典解析 + D = {k:8 for k in ['s', 'd']} # {'s': 8, 'd': 8} + D = {k:v for (k, v) in zip(['name', 'age'], ['tom', 12])} # {'age': 12, 'name': tom} + +#-- 字典的特殊方法__missing__:当查找找不到key时,会执行该方法 + class Dict(dict): + def __missing__(self, key): + self[key] = [] + return self[key] + dct = dict() + dct["foo"].append(1) # 这有点类似于collections.defalutdict + dct["foo"] # [1] + +#-- 元组和列表的唯一区别在于元组是不可变对象,列表是可变对象 + a = [1, 2, 3] # a[1] = 0, OK + a = (1, 2, 3) # a[1] = 0, Error + a = ([1, 2]) # a[0][1] = 0, OK + a = [(1, 2)] # a[0][1] = 0, Error + +#-- 元组的特殊语法: 逗号和圆括号 + D = (12) # 此时D为一个整数 即D = 12 + D = (12, ) # 此时D为一个元组 即D = (12, ) + +#-- 文件基本操作 + output = open(r'C:\spam', 'w') # 打开输出文件,用于写 + input = open('data', 'r') # 打开输入文件,用于读。打开的方式可以为'w', 'r', 'a', 'wb', 'rb', 'ab'等 + fp.read([size]) # size为读取的长度,以byte为单位 + fp.readline([size]) # 读一行,如果定义了size,有可能返回的只是一行的一部分 + fp.readlines([size]) # 把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长。 + fp.readable() # 是否可读 + fp.write(str) # 把str写到文件中,write()并不会在str后加上一个换行符 + fp.writelines(seq) # 把seq的内容全部写到文件中(多行一次性写入) + fp.writeable() # 是否可写 + fp.close() # 关闭文件。 + fp.flush() # 把缓冲区的内容写入硬盘 + fp.fileno() # 返回一个长整型的”文件标签“ + fp.isatty() # 文件是否是一个终端设备文件(unix系统中的) + fp.tell() # 返回文件操作标记的当前位置,以文件的开头为原点 + fp.next() # 返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。 + fp.seek(offset[,whence]) # 将文件打开操作标记移到offset的位置。whence为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。 + fp.seekable() # 是否可以seek + fp.truncate([size]) # 把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。 + for line in open('data'): + print(line) # 使用for语句,比较适用于打开比较大的文件 + with open('data') as file: + print(file.readline()) # 使用with语句,可以保证文件关闭 + with open('data') as file: + lines = file.readlines() # 一次读入文件所有行,并关闭文件 + open('f.txt', encoding = 'latin-1') # Python3.x Unicode文本文件 + open('f.bin', 'rb') # Python3.x 二进制bytes文件 + # 文件对象还有相应的属性:buffer closed encoding errors line_buffering name newlines等 + +#-- 其他 + # Python中的真假值含义:1. 数字如果非零,则为真,0为假。 2. 其他对象如果非空,则为真 + # 通常意义下的类型分类:1. 数字、序列、映射。 2. 可变类型和不可变类型 + + +"""语法和语句----语法和语句----语法和语句----语法和语句----语法和语句----语法和语句----语法和语句----语法和语句----语法和语句----语法和语句----语法和语句""" + +#-- 赋值语句的形式 + spam = 'spam' # 基本形式 + spam, ham = 'spam', 'ham' # 元组赋值形式 + [spam, ham] = ['s', 'h'] # 列表赋值形式 + a, b, c, d = 'abcd' # 序列赋值形式 + a, *b, c = 'spam' # 序列解包形式(Python3.x中才有) + spam = ham = 'no' # 多目标赋值运算,涉及到共享引用 + spam += 42 # 增强赋值,涉及到共享引用 + +#-- 序列赋值 序列解包 + [a, b, c] = (1, 2, 3) # a = 1, b = 2, c = 3 + a, b, c, d = "spam" # a = 's', b = 'p', c = 'a', d = 'm' + a, b, c = range(3) # a = 0, b = 1, c = 2 + a, *b = [1, 2, 3, 4] # a = 1, b = [2, 3, 4] + *a, b = [1, 2, 3, 4] # a = [1, 2, 3], b = 4 + a, *b, c = [1, 2, 3, 4] # a = 1, b = [2, 3], c = 4 + # 带有*时 会优先匹配*之外的变量 如 + a, *b, c = [1, 2] # a = 1, c = 2, b = [] + +#-- print函数原型 + print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False) + # 流的重定向 + print('hello world') # 等于sys.stdout.write('hello world') + temp = sys.stdout # 原有流的保存 + sys.stdout = open('log.log', 'a') # 流的重定向 + print('hello world') # 写入到文件log.log + sys.stdout.close() + sys.stdout = temp # 原有流的复原 + +#-- Python中and或or总是返回对象(左边的对象或右边的对象) 且具有短路求值的特性 + 1 or 2 or 3 # 返回 1 + 1 and 2 and 3 # 返回 3 + +#-- if/else三元表达符(if语句在行内) + A = 1 if X else 2 + A = 1 if X else (2 if Y else 3) + # 也可以使用and-or语句(一条语句实现多个if-else) + a = 6 + result = (a > 20 and "big than 20" or a > 10 and "big than 10" or a > 5 and "big than 5") # 返回"big than 5" + +#-- Python的while语句或者for语句可以带else语句 当然也可以带continue/break/pass语句 + while a > 1: + anything + else: + anything + # else语句会在循环结束后执行,除非在循环中执行了break,同样的还有for语句 + for i in range(5): + anything + else: + anything + +#-- for循环的元组赋值 + for (a, b) in [(1, 2), (3, 4)]: # 最简单的赋值 + for ((a, b), c) in [((1, 2), 3), ((4, 5), 6)]: # 自动解包赋值 + for ((a, b), c) in [((1, 2), 3), ("XY", 6)]: # 自动解包 a = X, b = Y, c = 6 + for (a, *b) in [(1, 2, 3), (4, 5, 6)]: # 自动解包赋值 + +#-- 列表解析语法 + M = [[1,2,3], [4,5,6], [7,8,9]] + res = [sum(row) for row in M] # G = [6, 15, 24] 一般的列表解析 生成一个列表 + res = [c * 2 for c in 'spam'] # ['ss', 'pp', 'aa', 'mm'] + res = [a * b for a in [1, 2] for b in [4, 5]] # 多解析过程 返回[4, 5, 8, 10] + res = [a for a in [1, 2, 3] if a < 2] # 带判断条件的解析过程 + res = [a if a > 0 else 0 for a in [-1, 0, 1]] # 带判断条件的高级解析过程 + # 两个列表同时解析:使用zip函数 + for teama, teamb in zip(["Packers", "49ers"], ["Ravens", "Patriots"]): + print(teama + " vs. " + teamb) + # 带索引的列表解析:使用enumerate函数 + for index, team in enumerate(["Packers", "49ers", "Ravens", "Patriots"]): + print(index, team) # 输出0, Packers \n 1, 49ers \n ...... + +#-- 生成器表达式 + G = (sum(row) for row in M) # 使用小括号可以创建所需结果的生成器generator object + next(G), next(G), next(G) # 输出(6, 15, 24) + G = {sum(row) for row in M} # G = {6, 15, 24} 解析语法还可以生成集合和字典 + G = {i:sum(M[i]) for i in range(3)} # G = {0: 6, 1: 15, 2: 24} + +#-- 文档字符串:出现在Module的开端以及其中函数或类的开端 使用三重引号字符串 + """ + module document + """ + def func(): + """ + function document + """ + print() + class Employee(object): + """ + class document + """ + print() + print(func.__doc__) # 输出函数文档字符串 + print(Employee.__doc__) # 输出类的文档字符串 + +#-- 命名惯例: + """ + 以单一下划线开头的变量名(_X)不会被from module import*等语句导入 + 前后有两个下划线的变量名(__X__)是系统定义的变量名,对解释器有特殊意义 + 以两个下划线开头但不以下划线结尾的变量名(__X)是类的本地(私有)变量 + """ + +#-- 列表解析 in成员关系测试 map sorted zip enumerate内置函数等都使用了迭代协议 + 'first line' in open('test.txt') # in测试 返回True或False + list(map(str.upper, open('t'))) # map内置函数 + sorted(iter([2, 5, 8, 3, 1])) # sorted内置函数 + list(zip([1, 2], [3, 4])) # zip内置函数 [(1, 3), (2, 4)] + +#-- del语句: 手动删除某个变量 + del X + +#-- 获取列表的子表的方法: + x = [1,2,3,4,5,6] + x[:3] # 前3个[1,2,3] + x[1:5] # 中间4个[2,3,4,5] + x[-3:] # 最后3个[4,5,6] + x[::2] # 奇数项[1,3,5] + x[1::2] # 偶数项[2,4,6] + +#-- 手动迭代:iter和next + L = [1, 2] + I = iter(L) # I为L的迭代器 + I.next() # 返回1 + I.next() # 返回2 + I.next() # Error:StopIteration + +#-- Python中的可迭代对象 + """ + 1.range迭代器 + 2.map、zip和filter迭代器 + 3.字典视图迭代器:D.keys()), D.items()等 + 4.文件类型 + """ + + +"""函数语法规则----函数语法规则----函数语法规则----函数语法规则----函数语法规则----函数语法规则----函数语法规则----函数语法规则----函数语法规则----函数语法规则""" + +#-- 函数相关的语句和表达式 + myfunc('spam') # 函数调用 + def myfunc(): # 函数定义 + return None # 函数返回值 + global a # 全局变量 + nonlocal x # 在函数或其他作用域中使用外层(非全局)变量 + yield x # 生成器函数返回 + lambda # 匿名函数 + +#-- Python函数变量名解析:LEGB原则,即: + """ + local(functin) --> encloseing function locals --> global(module) --> build-in(python) + 说明:以下边的函数maker为例 则相对于action而言 X为Local N为Encloseing + """ + +#-- 嵌套函数举例:工厂函数 + def maker(N): + def action(X): + return X ** N + return action + f = maker(2) # pass 2 to N + f(3) # 9, pass 3 to X + +#-- 嵌套函数举例:lambda实例 + def maker(N): + action = (lambda X: X**N) + return action + f = maker(2) # pass 2 to N + f(3) # 9, pass 3 to X + +#-- nonlocal和global语句的区别 + # nonlocal应用于一个嵌套的函数的作用域中的一个名称 例如: + start = 100 + def tester(start): + def nested(label): + nonlocal start # 指定start为tester函数内的local变量 而不是global变量start + print(label, start) + start += 3 + return nested + # global为全局的变量 即def之外的变量 + def tester(start): + def nested(label): + global start # 指定start为global变量start + print(label, start) + start += 3 + return nested + +#-- 函数参数,不可变参数通过“值”传递,可变参数通过“引用”传递 + def f(a, b, c): print(a, b, c) + f(1, 2, 3) # 参数位置匹配 + f(1, c = 3, b = 2) # 参数关键字匹配 + def f(a, b=1, c=2): print(a, b, c) + f(1) # 默认参数匹配 + f(1, 2) # 默认参数匹配 + f(a = 1, c = 3) # 关键字参数和默认参数的混合 + # Keyword-Only参数:出现在*args之后 必须用关键字进行匹配 + def keyOnly(a, *b, c): print('') # c就为keyword-only匹配 必须使用关键字c = value匹配 + def keyOnly(a, *, b, c): ...... # b c为keyword-only匹配 必须使用关键字匹配 + def keyOnly(a, *, b = 1): ...... # b有默认值 或者省略 或者使用关键字参数b = value + +#-- 可变参数匹配: * 和 ** + def f(*args): print(args) # 在元组中收集不匹配的位置参数 + f(1, 2, 3) # 输出(1, 2, 3) + def f(**args): print(args) # 在字典中收集不匹配的关键字参数 + f(a = 1, b = 2) # 输出{'a':1, 'b':2} + def f(a, *b, **c): print(a, b, c) # 两者混合使用 + f(1, 2, 3, x=4, y=5) # 输出1, (2, 3), {'x':4, 'y':5} + +#-- 函数调用时的参数解包: * 和 ** 分别解包元组和字典 + func(1, *(2, 3)) <==> func(1, 2, 3) + func(1, **{'c':3, 'b':2}) <==> func(1, b = 2, c = 3) + func(1, *(2, 3), **{'c':3, 'b':2}) <==> func(1, 2, 3, b = 2, c = 3) + +#-- 函数属性:(自己定义的)函数可以添加属性 + def func():..... + func.count = 1 # 自定义函数添加属性 + print.count = 1 # Error 内置函数不可以添加属性 + +#-- 函数注解: 编写在def头部行 主要用于说明参数范围、参数类型、返回值类型等 + def func(a:'spam', b:(1, 10), c:float) -> int : + print(a, b, c) + func.__annotations__ # {'c':, 'b':(1, 10), 'a':'spam', 'return':} + # 编写注解的同时 还是可以使用函数默认值 并且注解的位置位于=号的前边 + def func(a:'spam'='a', b:(1, 10)=2, c:float=3) -> int : + print(a, b, c) + +#-- 匿名函数:lambda + f = lambda x, y, z : x + y + z # 普通匿名函数,使用方法f(1, 2, 3) + f = lambda x = 1, y = 1: x + y # 带默认参数的lambda函数 + def action(x): # 嵌套lambda函数 + return (lambda y : x + y) + f = lambda: a if xxx() else b # 无参数的lambda函数,使用方法f() + +#-- lambda函数与map filter reduce函数的结合 + list(map((lambda x: x + 1), [1, 2, 3])) # [2, 3, 4] + list(filter((lambda x: x > 0), range(-4, 5))) # [1, 2, 3, 4] + functools.reduce((lambda x, y: x + y), [1, 2, 3]) # 6 + functools.reduce((lambda x, y: x * y), [2, 3, 4]) # 24 + +#-- 生成器函数:yield VS return + def gensquare(N): + for i in range(N): + yield i** 2 # 状态挂起 可以恢复到此时的状态 + for i in gensquare(5): # 使用方法 + print(i, end = ' ') # [0, 1, 4, 9, 16] + x = gensquare(2) # x是一个生成对象 + next(x) # 等同于x.__next__() 返回0 + next(x) # 等同于x.__next__() 返回1 + next(x) # 等同于x.__next__() 抛出异常StopIteration + +#-- 生成器表达式:小括号进行列表解析 + G = (x ** 2 for x in range(3)) # 使用小括号可以创建所需结果的生成器generator object + next(G), next(G), next(G) # 和上述中的生成器函数的返回值一致 + #(1)生成器(生成器函数/生成器表达式)是单个迭代对象 + G = (x ** 2 for x in range(4)) + I1 = iter(G) # 这里实际上iter(G) = G + next(I1) # 输出0 + next(G) # 输出1 + next(I1) # 输出4 + #(2)生成器不保留迭代后的结果 + gen = (i for i in range(4)) + 2 in gen # 返回True + 3 in gen # 返回True + 1 in gen # 返回False,其实检测2的时候,1已经就不在生成器中了,即1已经被迭代过了,同理2、3也不在了 + +#-- 本地变量是静态检测的 + X = 22 # 全局变量X的声明和定义 + def test(): + print(X) # 如果没有下一语句 则该句合法 打印全局变量X + X = 88 # 这一语句使得上一语句非法 因为它使得X变成了本地变量 上一句变成了打印一个未定义的本地变量(局部变量) + if False: # 即使这样的语句 也会把print语句视为非法语句 因为: + X = 88 # Python会无视if语句而仍然声明了局部变量X + def test(): # 改进 + global X # 声明变量X为全局变量 + print(X) # 打印全局变量X + X = 88 # 改变全局变量X + +#-- 函数的默认值是在函数定义的时候实例化的 而不是在调用的时候 例子: + def foo(numbers=[]): # 这里的[]是可变的 + numbers.append(9) + print(numbers) + foo() # first time, like before, [9] + foo() # second time, not like before, [9, 9] + foo() # third time, not like before too, [9, 9, 9] + # 改进: + def foo(numbers=None): + if numbers is None: numbers = [] + numbers.append(9) + print(numbers) + # 另外一个例子 参数的默认值为不可变的: + def foo(count=0): # 这里的0是数字, 是不可变的 + count += 1 + print(count) + foo() # 输出1 + foo() # 还是输出1 + foo(3) # 输出4 + foo() # 还是输出1 + + +"""函数例子----函数例子----函数例子----函数例子----函数例子----函数例子----函数例子----函数例子----函数例子----函数例子----函数例子----函数例子----函数例子""" + + """数学运算类""" + abs(x) # 求绝对值,参数可以是整型,也可以是复数,若参数是复数,则返回复数的模 + complex([real[, imag]]) # 创建一个复数 + divmod(a, b) # 分别取商和余数,注意:整型、浮点型都可以 + float([x]) # 将一个字符串或数转换为浮点数。如果无参数将返回0.0 + int([x[, base]]) # 将一个字符串或浮点数转换为int类型,base表示进制 + long([x[, base]]) # 将一个字符串或浮点数转换为long类型 + pow(x, y) # 返回x的y次幂 + range([start], stop[, step]) # 产生一个序列,默认从0开始 + round(x[, n]) # 四舍五入 + sum(iterable[, start]) # 对集合求和 + oct(x) # 将一个数字转化为8进制字符串 + hex(x) # 将一个数字转换为16进制字符串 + chr(i) # 返回给定int类型对应的ASCII字符 + unichr(i) # 返回给定int类型的unicode + ord(c) # 返回ASCII字符对应的整数 + bin(x) # 将整数x转换为二进制字符串 + bool([x]) # 将x转换为Boolean类型 + + """集合类操作""" + basestring() # str和unicode的超类,不能直接调用,可以用作isinstance判断 + format(value [, format_spec]) # 格式化输出字符串,格式化的参数顺序从0开始,如“I am {0},I like {1}” + enumerate(sequence[, start=0]) # 返回一个可枚举的对象,注意它有第二个参数 + iter(obj[, sentinel]) # 生成一个对象的迭代器,第二个参数表示分隔符 + max(iterable[, args...][key]) # 返回集合中的最大值 + min(iterable[, args...][key]) # 返回集合中的最小值 + dict([arg]) # 创建数据字典 + list([iterable]) # 将一个集合类转换为另外一个集合类 + set() # set对象实例化 + frozenset([iterable]) # 产生一个不可变的set + tuple([iterable]) # 生成一个tuple类型 + str([object]) # 转换为string类型 + sorted(iterable[, cmp[, key[, reverse]]]) # 集合排序 + L = [('b',2),('a',1),('c',3),('d',4)] + sorted(L, key=lambda x: x[1]), reverse=True) # 使用Key参数和reverse参数 + sorted(L, key=lambda x: (x[0], x[1])) # 使用key参数进行多条件排序,即如果x[0]相同,则比较x[1] + + """逻辑判断""" + all(iterable) # 集合中的元素都为真的时候为真,特别的,若为空串返回为True + any(iterable) # 集合中的元素有一个为真的时候为真,特别的,若为空串返回为False + cmp(x, y) # 如果x < y ,返回负数;x == y, 返回0;x > y,返回正数 + + """IO操作""" + file(filename [, mode [, bufsize]]) # file类型的构造函数。 + input([prompt]) # 获取用户输入,推荐使用raw_input,因为该函数将不会捕获用户的错误输入,意思是自行判断类型 + # 在 Built-in Functions 里有一句话是这样写的:Consider using the raw_input() function for general input from users. + raw_input([prompt]) # 设置输入,输入都是作为字符串处理 + open(name[, mode[, buffering]]) # 打开文件,与file有什么不同?推荐使用open + + """其他""" + callable(object) # 检查对象object是否可调用 + classmethod(func) # 用来说明这个func是个类方法 + staticmethod(func) # 用来说明这个func为静态方法 + dir([object]) # 不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。 + help(obj) # 返回obj的帮助信息 + eval(expression) # 计算表达式expression的值,并返回 + exec(str) # 将str作为Python语句执行 + execfile(filename) # 用法类似exec(),不同的是execfile的参数filename为文件名,而exec的参数为字符串。 + filter(function, iterable) # 构造一个序列,等价于[item for item in iterable if function(item)],function返回值为True或False的函数 + list(filter(bool, range(-3, 4)))# 返回[-3, -2, -1, 1, 2, 3], 没有0 + hasattr(object, name) # 判断对象object是否包含名为name的特性 + getattr(object, name [, defalut]) # 获取一个类的属性 + setattr(object, name, value) # 设置属性值 + delattr(object, name) # 删除object对象名为name的属性 + globals() # 返回一个描述当前全局符号表的字典 + hash(object) # 如果对象object为哈希表类型,返回对象object的哈希值 + id(object) # 返回对象的唯一标识,一串数字 + isinstance(object, classinfo) # 判断object是否是class的实例 + isinstance(1, int) # 判断是不是int类型 + isinstance(1, (int, float)) # isinstance的第二个参数接受一个元组类型 + issubclass(class, classinfo) # 判断class是否为classinfo的子类 + locals() # 返回当前的变量列表 + map(function, iterable, ...) # 遍历每个元素,执行function操作 + list(map(abs, range(-3, 4))) # 返回[3, 2, 1, 0, 1, 2, 3] + next(iterator[, default]) # 类似于iterator.next() + property([fget[, fset[, fdel[, doc]]]]) # 属性访问的包装类,设置后可以通过c.x=value等来访问setter和getter + reduce(function, iterable[, initializer]) # 合并操作,从第一个开始是前两个参数,然后是前两个的结果与第三个合并进行处理,以此类推 + def add(x,y):return x + y + reduce(add, range(1, 11)) # 返回55 (注:1+2+3+4+5+6+7+8+9+10 = 55) + reduce(add, range(1, 11), 20) # 返回75 + reload(module) # 重新加载模块 + repr(object) # 将一个对象变幻为可打印的格式 + slice(start, stop[, step]) # 产生分片对象 + type(object) # 返回该object的类型 + vars([object]) # 返回对象的变量名、变量值的字典 + a = Class(); # Class为一个空类 + a.name = 'qi', a.age = 9 + vars(a) # {'name':'qi', 'age':9} + zip([iterable, ...]) # 返回对应数组 + list(zip([1, 2, 3], [4, 5, 6])) # [(1, 4), (2, 5), (3, 6)] + a = [1, 2, 3], b = ["a", "b", "c"] + z = zip(a, b) # 压缩:[(1, "a"), (2, "b"), (3, "c")] + zip(*z) # 解压缩:[(1, 2, 3), ("a", "b", "c")] + unicode(string, encoding, errors) # 将字符串string转化为unicode形式,string为encoded string。 + + +"""模块Moudle----模块Moudle----模块Moudle----模块Moudle----模块Moudle----模块Moudle----模块Moudle----模块Moudle----模块Moudle----模块Moudle----模块Moudle""" + +#-- Python模块搜索路径: + """ + (1)程序的主目录 (2)PYTHONPATH目录 (3)标准链接库目录 (4)任何.pth文件的内容 + """ + +#-- 查看全部的模块搜索路径 + import sys + sys.path + sys.argv # 获得脚本的参数 + sys.builtin_module_names # 查找内建模块 + sys.platform # 返回当前平台 出现如: "win32" "linux" "darwin"等 + sys.modules # 查找已导入的模块 + sys.modules.keys() + sys.stdout # stdout 和 stderr 都是类文件对象,但是它们都是只写的。它们都没有 read 方法,只有 write 方法 + sys.stdout.write("hello") + sys.stderr + sys.stdin + +#-- 模块的使用代码 + import module1, module2 # 导入module1 使用module1.printer() + from module1 import printer # 导入module1中的printer变量 使用printer() + from module1 import * # 导入module1中的全部变量 使用不必添加module1前缀 + +#-- 重载模块reload: 这是一个内置函数 而不是一条语句 + from imp import reload + reload(module) + +#-- 模块的包导入:使用点号(.)而不是路径(dir1\dir2)进行导入 + import dir1.dir2.mod # d导入包(目录)dir1中的包dir2中的mod模块 此时dir1必须在Python可搜索路径中 + from dir1.dir2.mod import * # from语法的包导入 + +#-- __init__.py包文件:每个导入的包中都应该包含这么一个文件 + """ + 该文件可以为空 + 首次进行包导入时 该文件会自动执行 + 高级功能:在该文件中使用__all__列表来定义包(目录)以from*的形式导入时 需要导入什么 + """ + +#-- 包相对导入:使用点号(.) 只能使用from语句 + from . import spam # 导入当前目录下的spam模块(Python2: 当前目录下的模块, 直接导入即可) + from .spam import name # 导入当前目录下的spam模块的name属性(Python2: 当前目录下的模块, 直接导入即可,不用加.) + from .. import spam # 导入当前目录的父目录下的spam模块 + +#-- 包相对导入与普通导入的区别 + from string import * # 这里导入的string模块为sys.path路径上的 而不是本目录下的string模块(如果存在也不是) + from .string import * # 这里导入的string模块为本目录下的(不存在则导入失败) 而不是sys.path路径上的 + +#-- 模块数据隐藏:最小化from*的破坏 + _X # 变量名前加下划线可以防止from*导入时该变量名被复制出去 + __all__ = ['x', 'x1', 'x2'] # 使用__all__列表指定from*时复制出去的变量名(变量名在列表中为字符串形式) + +#-- 可以使用__name__进行模块的单元测试:当模块为顶层执行文件时值为'__main__' 当模块被导入时为模块名 + if __name__ == '__main__': + doSomething + # 模块属性中还有其他属性,例如: + __doc__ # 模块的说明文档 + __file__ # 模块文件的文件名,包括全路径 + __name__ # 主文件或者被导入文件 + __package__ # 模块所在的包 + +#-- import语句from语句的as扩展 + import modulename as name + from modulename import attrname as name + +#-- 得到模块属性的几种方法 假设为了得到name属性的值 + M.name + M.__dict__['name'] + sys.modules['M'].name + getattr(M, 'name') + + +"""类与面向对象----类与面向对象----类与面向对象----类与面向对象----类与面向对象----类与面向对象----类与面向对象----类与面向对象----类与面向对象----类与面向对象""" + +#-- 最普通的类 + class C1(C2, C3): + spam = 42 # 数据属性 + def __init__(self, name): # 函数属性:构造函数 + self.name = name + def __del__(self): # 函数属性:析构函数 + print("goodbey ", self.name) + I1 = C1('bob') + +#-- Python的类没有基于参数的函数重载 + class FirstClass(object): + def test(self, string): + print(string) + def test(self): # 此时类中只有一个test函数 即后者test(self) 它覆盖掉前者带参数的test函数 + print("hello world") + +#-- 子类扩展超类: 尽量调用超类的方法 + class Manager(Person): + def giveRaise(self, percent, bonus = .10): + self.pay = int(self.pay*(1 + percent + bonus)) # 不好的方式 复制粘贴超类代码 + Person.giveRaise(self, percent + bonus) # 好的方式 尽量调用超类方法 + +#-- 类内省工具 + bob = Person('bob') + bob.__class__ # + bob.__class__.__name__ # 'Person' + bob.__dict__ # {'pay':0, 'name':'bob', 'job':'Manager'} + +#-- 返回1中 数据属性spam是属于类 而不是对象 + I1 = C1('bob'); I2 = C2('tom') # 此时I1和I2的spam都为42 但是都是返回的C1的spam属性 + C1.spam = 24 # 此时I1和I2的spam都为24 + I1.spam = 3 # 此时I1新增自有属性spam 值为3 I2和C1的spam还都为24 + +#-- 类方法调用的两种方式 + instance.method(arg...) + class.method(instance, arg...) + +#-- 抽象超类的实现方法 + # (1)某个函数中调用未定义的函数 子类中定义该函数 + def delegate(self): + self.action() # 本类中不定义action函数 所以使用delegate函数时就会出错 + # (2)定义action函数 但是返回异常 + def action(self): + raise NotImplementedError("action must be defined") + # (3)上述的两种方法还都可以定义实例对象 实际上可以利用@装饰器语法生成不能定义的抽象超类 + from abc import ABCMeta, abstractmethod + class Super(metaclass = ABCMeta): + @abstractmethod + def action(self): pass + x = Super() # 返回 TypeError: Can't instantiate abstract class Super with abstract methods action + +#-- # OOP和继承: "is-a"的关系 + class A(B): + pass + a = A() + isinstance(a, B) # 返回True, A是B的子类 a也是B的一种 + # OOP和组合: "has-a"的关系 + pass + # OOP和委托: "包装"对象 在Python中委托通常是以"__getattr__"钩子方法实现的, 这个方法会拦截对不存在属性的读取 + # 包装类(或者称为代理类)可以使用__getattr__把任意读取转发给被包装的对象 + class wrapper(object): + def __init__(self, object): + self.wrapped = object + def __getattr(self, attrname): + print('Trace: ', attrname) + return getattr(self.wrapped, attrname) + # 注:这里使用getattr(X, N)内置函数以变量名字符串N从包装对象X中取出属性 类似于X.__dict__[N] + x = wrapper([1, 2, 3]) + x.append(4) # 返回 "Trace: append" [1, 2, 3, 4] + x = wrapper({'a':1, 'b':2}) + list(x.keys()) # 返回 "Trace: keys" ['a', 'b'] + +#-- 类的伪私有属性:使用__attr + class C1(object): + def __init__(self, name): + self.__name = name # 此时类的__name属性为伪私有属性 原理 它会自动变成self._C1__name = name + def __str__(self): + return 'self.name = %s' % self.__name + I = C1('tom') + print(I) # 返回 self.name = tom + I.__name = 'jeey' # 这里无法访问 __name为伪私有属性 + I._C1__name = 'jeey' # 这里可以修改成功 self.name = jeey + +#-- 类方法是对象:无绑定类方法对象 / 绑定实例方法对象 + class Spam(object): + def doit(self, message): + print(message) + def selfless(message) + print(message) + obj = Spam() + x = obj.doit # 类的绑定方法对象 实例 + 函数 + x('hello world') + x = Spam.doit # 类的无绑定方法对象 类名 + 函数 + x(obj, 'hello world') + x = Spam.selfless # 类的无绑定方法函数 在3.0之前无效 + x('hello world') + +#-- 获取对象信息: 属性和方法 + a = MyObject() + dir(a) # 使用dir函数 + hasattr(a, 'x') # 测试是否有x属性或方法 即a.x是否已经存在 + setattr(a, 'y', 19) # 设置属性或方法 等同于a.y = 19 + getattr(a, 'z', 0) # 获取属性或方法 如果属性不存在 则返回默认值0 + #这里有个小技巧,setattr可以设置一个不能访问到的属性,即只能用getattr获取 + setattr(a, "can't touch", 100) # 这里的属性名带有空格,不能直接访问 + getattr(a, "can't touch", 0) # 但是可以用getattr获取 + +#-- 为类动态绑定属性或方法: MethodType方法 + # 一般创建了一个class的实例后, 可以给该实例绑定任何属性和方法, 这就是动态语言的灵活性 + class Student(object): + pass + s = Student() + s.name = 'Michael' # 动态给实例绑定一个属性 + def set_age(self, age): # 定义一个函数作为实例方法 + self.age = age + from types import MethodType + s.set_age = MethodType(set_age, s) # 给实例绑定一个方法 类的其他实例不受此影响 + s.set_age(25) # 调用实例方法 + Student.set_age = MethodType(set_age, Student) # 为类绑定一个方法 类的所有实例都拥有该方法 + + +"""类的高级话题----类的高级话题----类的高级话题----类的高级话题----类的高级话题----类的高级话题----类的高级话题----类的高级话题----类的高级话题----类的高级话题""" + +#-- 多重继承: "混合类", 搜索方式"从下到上 从左到右 广度优先" + class A(B, C): + pass + +#-- 类的继承和子类的初始化 + # 1.子类定义了__init__方法时,若未显示调用基类__init__方法,python不会帮你调用。 + # 2.子类未定义__init__方法时,python会自动帮你调用首个基类的__init__方法,注意是首个。 + # 3.子类显示调用基类的初始化函数: + class FooParent(object): + def __init__(self, a): + self.parent = 'I\'m the Parent.' + print('Parent:a=' + str(a)) + def bar(self, message): + print(message + ' from Parent') + class FooChild(FooParent): + def __init__(self, a): + FooParent.__init__(self, a) + print('Child:a=' + str(a)) + def bar(self, message): + FooParent.bar(self, message) + print(message + ' from Child') + fooChild = FooChild(10) + fooChild.bar('HelloWorld') + +#-- #实例方法 / 静态方法 / 类方法 + class Methods(object): + def imeth(self, x): print(self, x) # 实例方法:传入的是实例和数据,操作的是实例的属性 + def smeth(x): print(x) # 静态方法:只传入数据 不传入实例,操作的是类的属性而不是实例的属性 + def cmeth(cls, x): print(cls, x) # 类方法:传入的是类对象和数据 + smeth = staticmethod(smeth) # 调用内置函数,也可以使用@staticmethod + cmeth = classmethod(cmeth) # 调用内置函数,也可以使用@classmethod + obj = Methods() + obj.imeth(1) # 实例方法调用 <__main__.Methods object...> 1 + Methods.imeth(obj, 2) # <__main__.Methods object...> 2 + Methods.smeth(3) # 静态方法调用 3 + obj.smeth(4) # 这里可以使用实例进行调用 + Methods.cmeth(5) # 类方法调用 5 + obj.cmeth(6) # 6 + +#-- 函数装饰器:是它后边的函数的运行时的声明 由@符号以及后边紧跟的"元函数"(metafunction)组成 + @staticmethod + def smeth(x): print(x) + # 等同于: + def smeth(x): print(x) + smeth = staticmethod(smeth) + # 同理 + @classmethod + def cmeth(cls, x): print(x) + # 等同于 + def cmeth(cls, x): print(x) + cmeth = classmethod(cmeth) + +#-- 类修饰器:是它后边的类的运行时的声明 由@符号以及后边紧跟的"元函数"(metafunction)组成 + def decorator(aClass):..... + @decorator + class C(object):.... + # 等同于: + class C(object):.... + C = decorator(C) + +#-- 限制class属性: __slots__属性 + class Student(object): + __slots__ = ('name', 'age') # 限制Student及其实例只能拥有name和age属性 + # __slots__属性只对当前类起作用, 对其子类不起作用 + # __slots__属性能够节省内存 + # __slots__属性可以为列表list,或者元组tuple + +#-- 类属性高级话题: @property + # 假设定义了一个类:C,该类必须继承自object类,有一私有变量_x + class C(object): + def __init__(self): + self.__x = None + # 第一种使用属性的方法 + def getx(self): + return self.__x + def setx(self, value): + self.__x = value + def delx(self): + del self.__x + x = property(getx, setx, delx, '') + # property函数原型为property(fget=None,fset=None,fdel=None,doc=None) + # 使用 + c = C() + c.x = 100 # 自动调用setx方法 + y = c.x # 自动调用getx方法 + del c.x # 自动调用delx方法 + # 第二种方法使用属性的方法 + @property + def x(self): + return self.__x + @x.setter + def x(self, value): + self.__x = value + @x.deleter + def x(self): + del self.__x + # 使用 + c = C() + c.x = 100 # 自动调用setter方法 + y = c.x # 自动调用x方法 + del c.x # 自动调用deleter方法 + +#-- 定制类: 重写类的方法 + # (1)__str__方法、__repr__方法: 定制类的输出字符串 + # (2)__iter__方法、next方法: 定制类的可迭代性 + class Fib(object): + def __init__(self): + self.a, self.b = 0, 1 # 初始化两个计数器a,b + def __iter__(self): + return self # 实例本身就是迭代对象,故返回自己 + def next(self): + self.a, self.b = self.b, self.a + self.b + if self.a > 100000: # 退出循环的条件 + raise StopIteration() + return self.a # 返回下一个值 + for n in Fib(): + print(n) # 使用 + # (3)__getitem__方法、__setitem__方法: 定制类的下标操作[] 或者切片操作slice + class Indexer(object): + def __init__(self): + self.data = {} + def __getitem__(self, n): # 定义getitem方法 + print('getitem:', n) + return self.data[n] + def __setitem__(self, key, value): # 定义setitem方法 + print('setitem:key = {0}, value = {1}'.format(key, value)) + self.data[key] = value + test = Indexer() + test[0] = 1; test[3] = '3' # 调用setitem方法 + print(test[0]) # 调用getitem方法 + # (4)__getattr__方法: 定制类的属性操作 + class Student(object): + def __getattr__(self, attr): # 定义当获取类的属性时的返回值 + if attr=='age': + return 25 # 当获取age属性时返回25 + raise AttributeError('object has no attribute: %s' % attr) + # 注意: 只有当属性不存在时 才会调用该方法 且该方法默认返回None 需要在函数最后引发异常 + s = Student() + s.age # s中age属性不存在 故调用__getattr__方法 返回25 + # (5)__call__方法: 定制类的'可调用'性 + class Student(object): + def __call__(self): # 也可以带参数 + print('Calling......') + s = Student() + s() # s变成了可调用的 也可以带参数 + callable(s) # 测试s的可调用性 返回True + # (6)__len__方法:求类的长度 + def __len__(self): + return len(self.data) + +#-- 动态创建类type() + # 一般创建类 需要在代码中提前定义 + class Hello(object): + def hello(self, name='world'): + print('Hello, %s.' % name) + h = Hello() + h.hello() # Hello, world + type(Hello) # Hello是一个type类型 返回 + type(h) # h是一个Hello类型 返回 + # 动态类型语言中 类可以动态创建 type函数可用于创建新类型 + def fn(self, name='world'): # 先定义函数 + print('Hello, %s.' % name) + Hello = type('Hello', (object,), dict(hello=fn)) # 创建Hello类 type原型: type(name, bases, dict) + h = Hello() # 此时的h和上边的h一致 + + +"""异常相关----异常相关----异常相关----异常相关----异常相关----异常相关----异常相关----异常相关----异常相关----异常相关----异常相关----异常相关----异常相关""" + +#-- #捕获异常: + try: + except: # 捕获所有的异常 等同于except Exception: + except name: # 捕获指定的异常 + except name, value: # 捕获指定的异常和额外的数据(实例) + except (name1, name2): + except (name1, name2), value: + except name4 as X: + else: # 如果没有发生异常 + finally: # 总会执行的部分 + # 引发异常: raise子句(raise IndexError) + raise # raise instance of a class, raise IndexError() + raise # make and raise instance of a class, raise IndexError + raise # reraise the most recent exception + +#-- Python3.x中的异常链: raise exception from otherException + except Exception as X: + raise IndexError('Bad') from X + +#-- assert子句: assert , + assert x < 0, 'x must be negative' + +#-- with/as环境管理器:作为常见的try/finally用法模式的替代方案 + with expression [as variable], expression [as variable]: + # 例子: + with open('test.txt') as myfile: + for line in myfile: print(line) + # 等同于: + myfile = open('test.txt') + try: + for line in myfile: print(line) + finally: + myfile.close() + +#-- 用户自定义异常: class Bad(Exception):..... + """ + Exception超类 / except基类即可捕获到其所有子类 + Exception超类有默认的打印消息和状态 当然也可以定制打印显示: + """ + class MyBad(Exception): + def __str__(self): + return '定制的打印消息' + try: + MyBad() + except MyBad as x: + print(x) + +#-- 用户定制异常数据 + class FormatError(Exception): + def __init__(self, line ,file): + self.line = line + self.file = file + try: + raise FormatError(42, 'test.py') + except FormatError as X: + print('Error at ', X.file, X.line) + # 用户定制异常行为(方法):以记录日志为例 + class FormatError(Exception): + logfile = 'formaterror.txt' + def __init__(self, line ,file): + self.line = line + self.file = file + def logger(self): + open(self.logfile, 'a').write('Error at ', self.file, self.line) + try: + raise FormatError(42, 'test.py') + except FormatError as X: + X.logger() + +#-- 关于sys.exc_info:允许一个异常处理器获取对最近引发的异常的访问 + try: + ...... + except: + # 此时sys.exc_info()返回一个元组(type, value, traceback) + # type:正在处理的异常的异常类型 + # value:引发的异常的实例 + # traceback:堆栈信息 + +#-- 异常层次 + BaseException + +-- SystemExit + +-- KeyboardInterrupt + +-- GeneratorExit + +-- Exception + +-- StopIteration + +-- ArithmeticError + +-- AssertionError + +-- AttributeError + +-- BufferError + +-- EOFError + +-- ImportError + +-- LookupError + +-- MemoryError + +-- NameError + +-- OSError + +-- ReferenceError + +-- RuntimeError + +-- SyntaxError + +-- SystemError + +-- TypeError + +-- ValueError + +-- Warning + + +"""Unicode和字节字符串---Unicode和字节字符串----Unicode和字节字符串----Unicode和字节字符串----Unicode和字节字符串----Unicode和字节字符串----Unicode和字节字符串""" + +#-- Python的字符串类型 + """Python2.x""" + # 1.str表示8位文本和二进制数据 + # 2.unicode表示宽字符Unicode文本 + """Python3.x""" + # 1.str表示Unicode文本(8位或者更宽) + # 2.bytes表示不可变的二进制数据 + # 3.bytearray是一种可变的bytes类型 + +#-- 字符编码方法 + """ASCII""" # 一个字节,只包含英文字符,0到127,共128个字符,利用函数可以进行字符和数字的相互转换 + ord('a') # 字符a的ASCII码为97,所以这里返回97 + chr(97) # 和上边的过程相反,返回字符'a' + """Latin-1""" # 一个字节,包含特殊字符,0到255,共256个字符,相当于对ASCII码的扩展 + chr(196) # 返回一个特殊字符:Ä + """Unicode""" # 宽字符,一个字符包含多个字节,一般用于亚洲的字符集,比如中文有好几万字 + """UTF-8""" # 可变字节数,小于128的字符表示为单个字节,128到0X7FF之间的代码转换为两个字节,0X7FF以上的代码转换为3或4个字节 + # 注意:可以看出来,ASCII码是Latin-1和UTF-8的一个子集 + # 注意:utf-8是unicode的一种实现方式,unicode、gbk、gb2312是编码字符集 + +#-- 查看Python中的字符串编码名称,查看系统的编码 + import encodings + help(encoding) + import sys + sys.platform # 'win64' + sys.getdefaultencoding() # 'utf-8' + sys.getdefaultencoding() # 返回当前系统平台的编码类型 + sys.getsizeof(object) # 返回object占有的bytes的大小 + +#-- 源文件字符集编码声明: 添加注释来指定想要的编码形式 从而改变默认值 注释必须出现在脚本的第一行或者第二行 + """说明:其实这里只会检查#和coding:utf-8,其余的字符都是为了美观加上的""" + # _*_ coding: utf-8 _*_ + # coding = utf-8 + +#-- #编码: 字符串 --> 原始字节 #解码: 原始字节 --> 字符串 + +#-- Python3.x中的字符串应用 + s = '...' # 构建一个str对象,不可变对象 + b = b'...' # 构建一个bytes对象,不可变对象 + s[0], b[0] # 返回('.', 113) + s[1:], b[1:] # 返回('..', b'..') + B = B""" + xxxx + yyyy + """ + # B = b'\nxxxx\nyyyy\n' + # 编码,将str字符串转化为其raw bytes形式: + str.encode(encoding = 'utf-8', errors = 'strict') + bytes(str, encoding) + # 编码例子: + S = 'egg' + S.encode() # b'egg' + bytes(S, encoding = 'ascii') # b'egg' + # 解码,将raw bytes字符串转化为str形式: + bytes.decode(encoding = 'utf-8', errors = 'strict') + str(bytes_or_buffer[, encoding[, errors]]) + # 解码例子: + B = b'spam' + B.decode() # 'spam' + str(B) # "b'spam'",不带编码的str调用,结果为打印该bytes对象 + str(B, encoding = 'ascii')# 'spam',带编码的str调用,结果为转化该bytes对象 + +#-- Python2.x的编码问题 + u = u'汉' + print repr(u) # u'\xba\xba' + s = u.encode('UTF-8') + print repr(s) # '\xc2\xba\xc2\xba' + u2 = s.decode('UTF-8') + print repr(u2) # u'\xba\xba' + # 对unicode进行解码是错误的 + s2 = u.decode('UTF-8') # UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128) + # 同样,对str进行编码也是错误的 + u2 = s.encode('UTF-8') # UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128) + +#-- bytes对象 + B = b'abc' + B = bytes('abc', 'ascii') + B = bytes([97, 98, 99]) + B = 'abc'.encode() + # bytes对象的方法调用基本和str类型一致 但:B[0]返回的是ASCII码值97, 而不是b'a' + +#-- #文本文件: 根据Unicode编码来解释文件内容,要么是平台的默认编码,要么是指定的编码类型 + # 二进制文件:表示字节值的整数的一个序列 open('bin.txt', 'rb') + +#-- Unicode文件 + s = 'A\xc4B\xe8C' # s = 'A?BèC' len(s) = 5 + #手动编码 + l = s.encode('latin-1') # l = b'A\xc4B\xe8C' len(l) = 5 + u = s.encode('utf-8') # u = b'A\xc3\x84B\xc3\xa8C' len(u) = 7 + #文件输出编码 + open('latindata', 'w', encoding = 'latin-1').write(s) + l = open('latindata', 'rb').read() # l = b'A\xc4B\xe8C' len(l) = 5 + open('uft8data', 'w', encoding = 'utf-8').write(s) + u = open('uft8data', 'rb').read() # u = b'A\xc3\x84B\xc3\xa8C' len(u) = 7 + #文件输入编码 + s = open('latindata', 'r', encoding = 'latin-1').read() # s = 'A?BèC' len(s) = 5 + s = open('latindata', 'rb').read().decode('latin-1') # s = 'A?BèC' len(s) = 5 + s = open('utf8data', 'r', encoding = 'utf-8').read() # s = 'A?BèC' len(s) = 5 + s = open('utf8data', 'rb').read().decode('utf-8') # s = 'A?BèC' len(s) = 5 + + +"""其他----其他----其他----其他----其他----其他----其他----其他----其他----其他----其他----其他----其他----其他----其他----其他----其他----其他----其他""" + +#-- Python实现任意深度的赋值 例如a[0] = 'value1'; a[1][2] = 'value2'; a[3][4][5] = 'value3' + class MyDict(dict): + def __setitem__(self, key, value): # 该函数不做任何改动 这里只是为了输出 + print('setitem:', key, value, self) + super().__setitem__(key, value) + def __getitem__(self, item): # 主要技巧在该函数 + print('getitem:', item, self) # 输出信息 + # 基本思路: a[1][2]赋值时 需要先取出a[1] 然后给a[1]的[2]赋值 + if item not in self: # 如果a[1]不存在 则需要新建一个dict 并使得a[1] = dict + temp = MyDict() # 新建的dict: temp + super().__setitem__(item, temp) # 赋值a[1] = temp + return temp # 返回temp 使得temp[2] = value有效 + return super().__getitem__(item) # 如果a[1]存在 则直接返回a[1] + # 例子: + test = MyDict() + test[0] = 'test' + print(test[0]) + test[1][2] = 'test1' + print(test[1][2]) + test[1][3] = 'test2' + print(test[1][3]) + +#-- Python中的多维数组 + lists = [0] * 3 # 扩展list,结果为[0, 0, 0] + lists = [[]] * 3 # 多维数组,结果为[[], [], []],但有问题,往下看 + lists[0].append(3) # 期望看到的结果[[3], [], []],实际结果[[3], [3], [3]],原因:list*n操作,是浅拷贝,如何避免?往下看 + lists = [[] for i in range(3)] # 多维数组,结果为[[], [], []] + lists[0].append(3) # 结果为[[3], [], []] + lists[1].append(6) # 结果为[[3], [6], []] + lists[2].append(9) # 结果为[[3], [6], [9]] + lists = [[[] for j in range(4)] for i in range(3)] # 3行4列,且每一个元素为[] From 8b96fc9122734a43b4f695384f67a773d9dac2b6 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Mon, 25 Jun 2018 22:20:55 +0800 Subject: [PATCH 0543/2496] Create 293._Flip_Game.md --- .../Python/293._Flip_Game.md | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 docs/Leetcode_Solutions/Python/293._Flip_Game.md diff --git a/docs/Leetcode_Solutions/Python/293._Flip_Game.md b/docs/Leetcode_Solutions/Python/293._Flip_Game.md new file mode 100644 index 000000000..5ec307b96 --- /dev/null +++ b/docs/Leetcode_Solutions/Python/293._Flip_Game.md @@ -0,0 +1,33 @@ +### 293. Flip Game + +题目: + + + +难度: + +Easy + + +思路 + + + + +```python +class Solution(object): + def generatePossibleNextMoves(self, s): + """ + :type s: str + :rtype: List[str] + """ + res = [] + if not s or len(s) <= 1: + return res + for i in range(len(s)-1): + if s[i] == '+' and s[i+1] == '+': + res.append(s[:i]+'--'+s[i+2:]) + return res +``` + + From c9b04c61621c588adba5d02977d89201d43bcfcc Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Mon, 25 Jun 2018 22:45:49 +0800 Subject: [PATCH 0544/2496] Update 293._Flip_Game.md --- docs/Leetcode_Solutions/Python/293._Flip_Game.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Leetcode_Solutions/Python/293._Flip_Game.md b/docs/Leetcode_Solutions/Python/293._Flip_Game.md index 5ec307b96..14f5226a8 100644 --- a/docs/Leetcode_Solutions/Python/293._Flip_Game.md +++ b/docs/Leetcode_Solutions/Python/293._Flip_Game.md @@ -30,4 +30,5 @@ class Solution(object): return res ``` +这里要注意一个点:s[i+2:] 虽然i+2取不到,但是s[i+2:]就是一个空字符串。 From b6a1d0b2cf4bd5c619417956fb954e998cc3627e Mon Sep 17 00:00:00 2001 From: Haohao Bai <1361046649@qq.com> Date: Tue, 26 Jun 2018 20:00:02 +0800 Subject: [PATCH 0545/2496] Spelling correction --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 96c424879..dff801257 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ ## 推荐的一些LeetCode网站 -1. [KrisYu的GItuhub](https://github.com/KrisYu/LeetCode-CLRS-Python) +1. [KrisYu的Github](https://github.com/KrisYu/LeetCode-CLRS-Python) 2. [kamyu104的Github](https://github.com/kamyu104/LeetCode) 3. [数据结构与算法/leetcode/lintcode题解](https://algorithm.yuanbin.me/zh-hans/) 4. [Leetcode 讨论区](https://discuss.leetcode.com/) From 6adf1a06da045153663cf7b97bf83386f27c9c09 Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Tue, 26 Jun 2018 21:23:50 +0800 Subject: [PATCH 0546/2496] =?UTF-8?q?=E4=BC=98=E5=8C=96=20readme=20?= =?UTF-8?q?=E5=92=8C=20=E6=B7=BB=E5=8A=A0=20=E4=B8=A4=E6=95=B0=E4=B9=8B?= =?UTF-8?q?=E5=92=8C=E7=9A=84=E8=A7=A3=E5=86=B3=E6=80=9D=E8=B7=AF=E4=BA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 38 ++++++++++++++++--- .../Leetcode_Solutions/Python/001._two_sum.md | 35 ++++++++++++++--- 2 files changed, 61 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index dff801257..012b2de48 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,12 @@ # Algorithms +* 英文官网: https://leetcode.com +* 中文官网: https://leetcode-cn.com + ## 1. [LeetCode 题解和总结](/docs/Leetcode_Solutions/Python) ## 2. [算法模版](/docs/Algorithm_Templates/Python) -## 3. [开发者列表](https://github.com/Lisanaaa) - - - ## 推荐的一些LeetCode网站 1. [KrisYu的Github](https://github.com/KrisYu/LeetCode-CLRS-Python) @@ -22,7 +21,34 @@ 10. [小土刀的面试刷题笔记](http://wdxtub.com/interview/14520594642530.html) 11. [nonstriater/Learn-Algorithms](https://github.com/nonstriater/Learn-Algorithms) - ### Please note, this repository is inspired from [KrisYu](https://github.com/KrisYu/LeetCode-CLRS-Python). However, it has been modified, added and improved to reflect our knowledge, wisdom and effort. - - 💪就是干!如果你觉得有帮助请点个star,谢谢! + - 💪 就是干!如果你觉得有帮助请点个star,谢谢! + +## 项目贡献者 + +> 项目创始人 + +* [@Lisanaaa](https://github.com/Lisanaaa) + +> 贡献者(欢迎大家来追加) + +* [@片刻](https://github.com/jiangzhonglian) + +## 免责声明 + +ApacheCN 纯粹出于学习目的与个人兴趣整理的内容。 + +整理内容只供学习研究参考之用。ApacheCN 保留对此版本内容的署名权及其它相关权利。 + +## [ApacheCN 组织资源](http://www.apachecn.org/) + +> [kaggle: 机器学习竞赛](https://github.com/apachecn/kaggle) + +| 深度学习 | 机器学习 | 大数据 | 运维工具 | +| --- | --- | --- | --- | +| [TensorFlow R1.2 中文文档](http://cwiki.apachecn.org/pages/viewpage.action?pageId=10030122) | [机器学习实战-教学](https://github.com/apachecn/MachineLearning) | [Spark 2.2.0和2.0.2 中文文档](http://spark.apachecn.org/) | [Zeppelin 0.7.2 中文文档](http://cwiki.apachecn.org/pages/viewpage.action?pageId=10030467) | +| [Pytorch 0.3 中文文档 ](http://pytorch.apachecn.org/cn/0.3.0/) | [Sklearn 0.19 中文文档](http://sklearn.apachecn.org/) | [Storm 1.1.0和1.0.1 中文文档](http://storm.apachecn.org/) | [Kibana 5.2 中文文档](http://cwiki.apachecn.org/pages/viewpage.action?pageId=8159377) | +| | [LightGBM 中文文档](http://lightgbm.apachecn.org/cn/latest) | [Kudu 1.4.0 中文文档](http://cwiki.apachecn.org/pages/viewpage.action?pageId=10813594) | | +| | [XGBoost 中文文档](http://xgboost.apachecn.org/cn/latest) | [Elasticsearch 5.4 中文文档](http://cwiki.apachecn.org/pages/viewpage.action?pageId=4260364) | +| | | [Beam 中文文档](http://beam.apachecn.org/) | diff --git a/docs/Leetcode_Solutions/Python/001._two_sum.md b/docs/Leetcode_Solutions/Python/001._two_sum.md index 120db871d..f348d46d2 100644 --- a/docs/Leetcode_Solutions/Python/001._two_sum.md +++ b/docs/Leetcode_Solutions/Python/001._two_sum.md @@ -1,15 +1,20 @@ -### 1. Two Sum +# 1. Two Sum 两数之和 -题目: - +## 题目: +* https://leetcode.com/problems/two-sum/ +* https://leetcode-cn.com/problems/two-sum/description/ -难度: +``` +给定 nums = [2, 7, 11, 15], target = 9 -Easy +因为 nums[0] + nums[1] = 2 + 7 = 9 +所以返回 [0, 1] +``` +## 难度: Easy -思路 +> 思路 1 可以用O(n^2) loop @@ -40,4 +45,22 @@ class Solution(object): return [] ``` +> 思路 2 + +通过 差值 判断元素,是否存在 nums,存在就 return +```python +class Solution: + def twoSum(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[int] + """ + for num in nums: + if num < target: + l1_index = nums.index(num) + l2 = target - num + if l2 in nums: + return [l1_index, nums.index(l2)] +``` From 38fd7e67b5a0b4642369cbb9855673ca76d6f318 Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Tue, 26 Jun 2018 21:27:02 +0800 Subject: [PATCH 0547/2496] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 012b2de48..493473c1e 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ ## 项目贡献者 -> 项目创始人 +> 项目发起人 * [@Lisanaaa](https://github.com/Lisanaaa) From d70433e1bd6b98a57ba3909496cb3a8f0449acbe Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Tue, 26 Jun 2018 21:27:43 +0800 Subject: [PATCH 0548/2496] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20readme=20?= =?UTF-8?q?=E6=A0=87=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 493473c1e..96fa2bb51 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Algorithms +# LeetCode 面试必备 * 英文官网: https://leetcode.com * 中文官网: https://leetcode-cn.com From 476644290f78efa87fd389c7b1f20b3074de34e8 Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Tue, 26 Jun 2018 21:38:13 +0800 Subject: [PATCH 0549/2496] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 +++++++-- .../{Python => }/Cipher/README.md | 0 .../{Python => }/Compression/README.md | 0 .../{Python => }/Conversion/README.md | 0 .../{Python => }/Data_Structure/Graph/README.md | 0 .../Data_Structure/HashMap/README.md | 0 .../Data_Structure/HashTable/README.md | 0 .../{Python => }/Data_Structure/Heqp/README.md | 0 .../Data_Structure/LinkedList/README.md | 0 .../Data_Structure/Matrix/README.md | 0 .../{Python => }/Data_Structure/Queue/README.md | 0 .../{Python => }/Data_Structure/README.md | 0 .../{Python => }/Data_Structure/Stack/README.md | 0 .../{Python => }/Data_Structure/Tree/README.md | 0 .../{Python => }/Dynamic_Programming/README.md | 0 .../{Python => }/Hash/README.md | 0 .../{Python => }/Others/NextNodeInOrderTree.md | 0 .../{Python => }/Others/TopKWords.java | 0 .../{Python => }/Others/words.txt | 0 docs/Algorithm_Templates/Python/Sort/README.md | 16 ---------------- docs/Algorithm_Templates/README.md | 5 +++++ .../{Python => }/Search/README.md | 0 .../{Python => }/Sort/BubbleSort.py | 0 .../{Python => }/Sort/InsertSort.py | 0 .../{Python => }/Sort/MergeSort.py | 0 .../{Python => }/Sort/QuickSort.py | 0 .../{Python => Sort}/README.md | 4 +--- .../{Python => }/Sort/RadixSort.py | 0 .../{Python => }/Sort/SelectionSort.py | 0 .../{Python => }/Sort/ShellSort.py | 0 .../{Python => }/Traversals/README.md | 0 .../{Python => }/001._two_sum.md | 0 .../{Python => }/002._add_two_numbers.md | 0 ...st_substring_without_repeating_characters.md | 0 .../004._median_of_two_sorted_arrays.md | 0 .../005._longest_palindromic_substring.md | 0 .../{Python => }/006._ZigZag_Conversion.md | 0 .../{Python => }/007._Reverse_Integer.md | 0 .../008._string_to_integer_(atoi).md | 0 .../{Python => }/009._Palindrome_Number.md | 0 .../010._regular_expression_matching.md | 0 .../011._container_with_most_water.md | 0 .../{Python => }/012._Integer_to_Roman.md | 0 .../{Python => }/013._Roman_to_Integer.md | 0 .../{Python => }/014._longest_common_prefix.md | 0 .../{Python => }/015._3sum.md | 0 .../{Python => }/016._3sum_closest.md | 0 ...17._letter_combinations_of_a_phone_number.md | 0 .../{Python => }/018._4sum.md | 0 .../019._remove_nth_node_from_end_of_list.md | 0 .../{Python => }/020._valid_parentheses.md | 0 .../{Python => }/021._merge_two_sorted_lists.md | 0 .../{Python => }/022._generate_parentheses.md | 0 .../{Python => }/023._merge_k_sorted_lists.md | 0 .../{Python => }/024._swap_nodes_in_pairs.md | 0 .../026._Remove_Duplicates_from_Sorted_Array.md | 0 .../{Python => }/027._Remove_Element.md | 0 .../{Python => }/028._implement_strstr().md | 0 ...Substring_with_Concatenation_of_All_Words.md | 0 .../{Python => }/031._next_permutation.md | 0 .../033._search_in_rotated_sorted_array.md | 0 .../{Python => }/034._Search for a Range.md | 0 .../{Python => }/035._search_insert_position.md | 0 .../{Python => }/038._Count_and_Say.md | 0 .../{Python => }/039._combination_sum.md | 0 .../{Python => }/040._combination_sum_ii.md | 0 .../{Python => }/042._trapping_rain_water.md | 0 .../{Python => }/043._multiply_strings.md | 0 .../{Python => }/044._wildcard_matching.md | 0 .../{Python => }/045._Jump_Game_II.md | 0 .../{Python => }/046._permutations.md | 0 .../{Python => }/047._permutations_ii.md | 0 .../{Python => }/048._rotate_image.md | 0 .../{Python => }/049._group_anagrams_python.md | 0 .../{Python => }/050._pow(x,_n).md | 0 .../{Python => }/051._n-queens.md | 0 .../{Python => }/052._n-queens_ii.md | 0 .../{Python => }/053._maximum_subarray.md | 0 .../{Python => }/054._spiral_matrix.md | 0 .../{Python => }/055._jump_game.md | 0 .../{Python => }/056._Merge_Intervals.md | 0 .../{Python => }/058._length_of_last_word.md | 0 .../{Python => }/059._spiral_matrix_ii.md | 0 .../{Python => }/060._permutation_sequence.md | 0 .../{Python => }/061._rotate_list.md | 0 .../{Python => }/064._minimum_path_sum.md | 0 .../{Python => }/065.unique_paths_ii.md | 0 .../{Python => }/066._plus_one.md | 0 .../{Python => }/067._add_binary.md | 0 .../{Python => }/069._sqrt(x).md | 0 .../{Python => }/070. Climbing Stairs.md | 0 .../{Python => }/072._edit_distance.md | 0 .../{Python => }/073. Set Matrix Zeroes.md | 0 .../{Python => }/074._search_a_2d_matrix.md | 0 .../{Python => }/075._sort_colors.md | 0 .../076._Minimum_Window_Substring.md | 0 .../{Python => }/077._combinations.md | 0 .../{Python => }/078.Subsets .md | 0 .../{Python => }/079._word_search.md | 0 ...82._remove_duplicates_from_sorted_list_ii.md | 0 .../083._remove_duplicates_from_sorted_list.md | 0 .../{Python => }/086._partition_list.md | 0 .../{Python => }/088._merge_sorted_array.md | 0 .../{Python => }/089._gray_code.md | 0 .../{Python => }/090._subsets_ii.md | 0 .../{Python => }/091._decode_ways.md | 0 .../{Python => }/092._reverse_linked_list_ii.md | 0 .../{Python => }/093._restore_ip_addresses.md | 0 .../094._binary_tree_inorder_traversal.md | 0 .../096._unique_binary_search_trees.md | 0 .../098._validate_binary_search_tree.md | 0 .../{Python => }/100._same_tree.md | 0 .../{Python => }/101._symmetric_tree.md | 0 .../102._binary_tree_level_order_traversal.md | 0 ..._binary_tree_zigzag_level_order_traversal.md | 0 .../104._maximum_depth_of_binary_tree.md | 0 ..._tree_from_preorder_and_inorder_traversal.md | 0 ...tree_from_inorder_and_postorder_traversal.md | 0 ...107._binary_tree_level_order_traversal_ii.md | 0 ...onvert_sorted_array_to_binary_search_tree.md | 0 ...convert_sorted_list_to_binary_search_tree.md | 0 .../{Python => }/110._balanced_binary_tree.md | 0 .../111._minimum_depth_of_binary_tree.md | 0 .../{Python => }/112._path_sum.md | 0 .../{Python => }/113._path_sum_ii.md | 0 .../114._flatten_binary_tree_to_linked_list.md | 0 ...pulating_next_right_pointers_in_each_node.md | 0 .../{Python => }/118._pascal's_triangle.md | 0 .../{Python => }/119. _Pascal's_Triangle_II.md | 0 .../{Python => }/120. Triangle.md | 0 .../121._Best_Time_to_Buy_and_Sell_Stock.md | 0 .../124._Binary_Tree_Maximum_Path_Sum.md | 0 .../{Python => }/125._valid_palindrome.md | 0 .../{Python => }/126. Word Ladder II.md | 0 .../{Python => }/127._word_ladder.md | 0 .../128._Longest_Consecutive_Sequence.md | 0 .../129._sum_root_to_leaf_numbers.md | 0 .../{Python => }/130._surrounded_regions.md | 0 .../131._palindrome_partitioning.md | 0 .../{Python => }/133._clone_graph.md | 0 .../{Python => }/136._single_number.md | 0 .../{Python => }/139._word_break.md | 0 .../{Python => }/140._word_break_ii.md | 0 .../{Python => }/141._linked_list_cycle.md | 0 .../{Python => }/142_Linked_List_Cycle_II.md | 0 .../{Python => }/143._reorder_list.md | 0 .../144._binary_tree_preorder_traversal.md | 0 .../145._binary_tree_postorder_traversal.md | 0 .../{Python => }/147._insertion_sort_list.md | 0 .../{Python => }/148._sort_list.md | 0 .../150._evaluate_reverse_polish_notation.md | 0 .../151._reverse_words_in_a_string.md | 0 .../152._maximum_product_subarray.md | 0 ...153._find_minimum_in_rotated_sorted_array.md | 0 .../{Python => }/155._min_stack.md | 0 ...ring_with_At_Most_Two_Distinct_Characters.md | 0 .../160._intersection_of_two_linked_lists.md | 0 .../{Python => }/162._find_peak_element.md | 0 .../165._compare_version_numbers.md | 0 .../166._Fraction_to_Recurring_Decimal.md | 0 .../167._two_sum_ii_-_input_array_is_sorted.md | 0 .../168._excel_sheet_column_title.md | 0 .../{Python => }/169._majority_element.md | 0 .../171._excel_sheet_column_number.md | 0 .../173._binary_search_tree_iterator.md | 0 .../{Python => }/179._Largest_Number.md | 0 .../{Python => }/189._rotate_array.md | 0 .../{Python => }/191._number_of_1_bits.md | 0 .../{Python => }/198._house_robber.md | 0 .../199._binary_tree_right_side_view.md | 0 .../{Python => }/200._number_of_islands.md | 0 .../203._remove_linked_list_elements.md | 0 .../{Python => }/204._count_primes.md | 0 .../{Python => }/205._isomorphic_strings.md | 0 .../{Python => }/206._reverse_linked_list.md | 0 .../{Python => }/207._course_schedule.md | 0 .../208._implement_trie_(prefix_tree).md | 0 .../{Python => }/210._course_schedule_ii.md | 0 ...d and Search Word - Data structure design.md | 0 .../{Python => }/213._house_robber_ii.md | 0 .../{Python => }/216._combination_sum_iii.md | 0 .../{Python => }/217._contains_duplicate.md | 0 .../{Python => }/218._The _Skyline_Problem .md | 0 .../{Python => }/219._contains_duplicate_ii.md | 0 .../{Python => }/221._maximal_square.md | 0 .../222._count_complete_tree_nodes.md | 0 .../{Python => }/223._rectangle_area.md | 0 .../{Python => }/224. Basic Calculator .md | 0 .../225._implement_stack_using_queues.md | 0 .../{Python => }/226._invert_binary_tree.md | 0 .../{Python => }/227._basic_calculator_ii.md | 0 .../{Python => }/228._summary_ranges.md | 0 .../{Python => }/229._majority_element_ii.md | 0 .../230._kth_smallest_element_in_a_bst.md | 0 .../{Python => }/231. _Power_of_Two.md | 0 .../232._implement_queue_using_stacks.md | 0 .../{Python => }/234._palindrome_linked_list.md | 0 ...t_common_ancestor_of_a_binary_search_tree.md | 0 ...._lowest_common_ancestor_of_a_binary_tree.md | 0 .../237._delete_node_in_a_linked_list.md | 0 .../238._product_of_array_except_self.md | 0 .../{Python => }/240._search_a_2d_matrix_ii.md | 0 .../{Python => }/242._valid_anagram.md | 0 .../{Python => }/252. Meeting Rooms.md | 0 ...y_Preorder_Sequence_in_Binary_Search_Tree.md | 0 .../{Python => }/256. Paint House.md | 0 .../{Python => }/257._binary_tree_paths.md | 0 .../{Python => }/258_ Add_Digits.md | 0 .../{Python => }/261. Graph Valid Tree.md | 0 .../{Python => }/263._ugly_number.md | 0 .../{Python => }/264._ugly_number_ii.md | 0 .../{Python => }/265. Paint House II.md | 0 .../{Python => }/266. Palindrome Permutation.md | 0 .../267. Palindrome Permutation II.md | 0 .../{Python => }/268._missing_number.md | 0 .../270. Closest Binary Search Tree Value.md | 0 .../{Python => }/276. Paint Fence.md | 0 .../{Python => }/277. Find the Celebrity.md | 0 .../{Python => }/278._First_Bad _Version.md | 0 .../{Python => }/279._perfect_squares.md | 0 .../{Python => }/280._Wiggle_Sort.md | 0 .../{Python => }/283._move_zeroes.md | 0 .../285._inorder_successor_in_bst.md | 0 .../{Python => }/286. Walls and Gates.md | 0 .../{Python => }/289._game_of_life.md | 0 .../{Python => }/290._word_pattern.md | 0 .../{Python => }/292._nim_game.md | 0 .../{Python => }/293._Flip_Game.md | 0 .../{Python => }/296. Best Meeting Point.md | 0 ... Binary Tree Longest Consecutive Sequence.md | 0 .../{Python => }/299._bulls_and_cows.md | 0 .../300._longest_increasing_subsequence.md | 0 .../303._range_sum_query_-_immutable.md | 0 .../316._Remove_Duplicate_Letters.md | 0 .../{Python => }/319._Bulb_Switcher.md | 0 .../{Python => }/322. Coin Change.md | 0 ...nnected Components in an Undirected Graph.md | 0 .../{Python => }/324._Wiggle_Sort_II.md | 0 .../{Python => }/326._power_of_three.md | 0 .../{Python => }/328._odd_even_linked_list.md | 0 .../334._increasing_triplet_subsequence.md | 0 .../{Python => }/337._house_robber_iii.md | 0 .../{Python => }/338. Counting Bits.md | 0 .../{Python => }/339. Nested List Weight Sum.md | 0 .../341._Flatten_Nested_List_Iterator.md | 0 .../{Python => }/342._Power_of_Four.md | 0 .../{Python => }/344._reverse_string.md | 0 .../345._Reverse_Vowels_of_a_String.md | 0 .../349._intersection_of_two_arrays.md | 0 .../350._intersection_of_two_arrays_ii.md | 0 .../{Python => }/353. Design Snake Game.md | 0 .../{Python => }/361._Bomb_Enemy.md | 0 .../364. Nested List Weight Sum II.md | 0 .../366. Find Leaves of Binary Tree.md | 0 .../{Python => }/367._valid_perfect_square.md | 0 .../{Python => }/369.Plus One Linked List.md | 0 .../{Python => }/371._sum_of_two_integers.md | 0 .../374._Guess_Number_Higher_or_Lower.md | 0 .../{Python => }/377._combination_sum_iv.md | 0 ...._kth_smallest_element_in_a_sorted_matrix.md | 0 .../380. Insert Delete GetRandom O(1).md | 0 ...elete GetRandom O(1) - Duplicates allowed.md | 0 .../382._linked_list_random_node.md | 0 .../{Python => }/383._ransom_note.md | 0 .../{Python => }/384. Shuffle an Array.md | 0 .../387._first_unique_character_in_a_string.md | 0 .../388._Longest_Absolute_File_Path.md | 0 .../{Python => }/389._find_the_difference.md | 0 .../{Python => }/392._is_subsequence.md | 0 .../{Python => }/394._decode_string.md | 0 .../{Python => }/400. Nth Digit.md | 0 .../{Python => }/401._binary_watch.md | 0 .../{Python => }/404._sum_of_left_leaves.md | 0 .../405. Convert a Number to Hexadecimal.md | 0 .../406._Queue_Reconstruction_by_Height.md | 0 .../{Python => }/412._fizz_buzz.md | 0 .../{Python => }/413. Arithmetic Slices.md | 0 .../{Python => }/414._third_maximum_number.md | 0 .../{Python => }/415._add_strings.md | 0 .../416. Partition Equal Subset Sum.md | 0 ...1._Maximum_XOR_of_Two_Numbers_in_an_Array.md | 0 .../{Python => }/422. Valid Word Square.md | 0 .../434._number_of_segments_in_a_string.md | 0 .../{Python => }/437._path_sum_iii.md | 0 .../438._Find_All_Anagrams_in_a_String.md | 0 .../439. Ternary Expression Parser.md | 0 .../{Python => }/441._arranging_coins.md | 0 ..._Find_All_Numbers_Disappeared_in_an_Array.md | 0 .../{Python => }/450. Delete Node in a BST.md | 0 ...53._Minimum_Moves_to_Equal_Array_Elements.md | 0 .../459._Repeated_Substring_Pattern.md | 0 .../{Python => }/461._Hamming Distance.md | 0 .../{Python => }/463._Island_Perimeter.md | 0 ...7._Unique_Substrings_in_Wraparound_String.md | 0 .../{Python => }/469. Convex Polygon.md | 0 .../{Python => }/476._Number_Complement.md | 0 .../{Python => }/477._Total_Hamming_Distance.md | 0 .../{Python => }/485._Max_Consecutive_Ones.md | 0 .../{Python => }/587._Erect_the_Fence .md | 0 .../599._Minimum_Index_Sum_of_Two_Lists.md | 0 .../{Python => }/647._Palindromic_Substrings.md | 0 .../{Python => }/657._Judge_Route_Circle.md | 0 .../{Python => }/665._Non-decreasing_Array.md | 0 .../{Python => }/672._Bulb_Switcher_II.md | 0 .../{Python => }/681._Next_Closest_Time.md | 0 .../{Python => }/682._Baseball_Game.md | 0 .../{Python => }/687._Longest_Univalue_Path.md | 0 .../{Python => }/740._delete_and_earn.md | 0 .../{Python => }/760._Find_Anagram_Mappings.md | 0 .../844._Backspace_String_Compare.md | 0 docs/Leetcode_Solutions/{Python => }/README.md | 0 ...rch \344\270\215\346\230\223\345\206\231.md" | 0 .../Data Structure and Algorthim Review.md | 0 .../Summarization/Dynamic Programming.md | 0 ...rching Algorithms \342\200\223 topcoder.pdf" | Bin ...\213\347\232\204\350\275\254\346\215\242.md" | 0 .../LinkedList\346\212\200\345\267\247.md" | 0 .../Summarization/Maximal Square.pdf | Bin ...\200\345\267\247\347\254\224\350\256\260.py" | 0 .../Range Sum Query 2D - Immutable.pdf | Bin .../Summarization/Recusrion & BackTracking.md | 0 .../backtracking\346\200\235\350\267\257.md" | 0 ...in_a_linked_list\351\227\256\351\242\230.md" | 0 ...\260\347\232\204\346\200\235\350\267\257.md" | 0 .../{Python => }/Summarization/python_base.py | 0 ...\347\232\204\345\220\204\347\247\215pass.md" | 0 .../Summarization/slide_windows_template.md | 0 ...74\214_graph_search\357\274\214_dfs,_bfs.md" | 0 .../\344\275\215\350\277\220\347\256\227.md" | 0 ...\222\345\210\227\347\256\227\346\263\225.md" | 0 .../\345\205\253\346\216\222\345\272\217.md" | 0 ...\206\345\220\210\351\227\256\351\242\230.md" | 0 .../Summarization/\346\200\273\347\273\223.md" | 0 ...\204\345\220\210\351\227\256\351\242\230.md" | 0 .../\351\200\222\345\275\222_recursion.md" | 0 335 files changed, 13 insertions(+), 21 deletions(-) rename docs/Algorithm_Templates/{Python => }/Cipher/README.md (100%) rename docs/Algorithm_Templates/{Python => }/Compression/README.md (100%) rename docs/Algorithm_Templates/{Python => }/Conversion/README.md (100%) rename docs/Algorithm_Templates/{Python => }/Data_Structure/Graph/README.md (100%) rename docs/Algorithm_Templates/{Python => }/Data_Structure/HashMap/README.md (100%) rename docs/Algorithm_Templates/{Python => }/Data_Structure/HashTable/README.md (100%) rename docs/Algorithm_Templates/{Python => }/Data_Structure/Heqp/README.md (100%) rename docs/Algorithm_Templates/{Python => }/Data_Structure/LinkedList/README.md (100%) rename docs/Algorithm_Templates/{Python => }/Data_Structure/Matrix/README.md (100%) rename docs/Algorithm_Templates/{Python => }/Data_Structure/Queue/README.md (100%) rename docs/Algorithm_Templates/{Python => }/Data_Structure/README.md (100%) rename docs/Algorithm_Templates/{Python => }/Data_Structure/Stack/README.md (100%) rename docs/Algorithm_Templates/{Python => }/Data_Structure/Tree/README.md (100%) rename docs/Algorithm_Templates/{Python => }/Dynamic_Programming/README.md (100%) rename docs/Algorithm_Templates/{Python => }/Hash/README.md (100%) rename docs/Algorithm_Templates/{Python => }/Others/NextNodeInOrderTree.md (100%) rename docs/Algorithm_Templates/{Python => }/Others/TopKWords.java (100%) rename docs/Algorithm_Templates/{Python => }/Others/words.txt (100%) delete mode 100644 docs/Algorithm_Templates/Python/Sort/README.md create mode 100644 docs/Algorithm_Templates/README.md rename docs/Algorithm_Templates/{Python => }/Search/README.md (100%) rename docs/Algorithm_Templates/{Python => }/Sort/BubbleSort.py (100%) rename docs/Algorithm_Templates/{Python => }/Sort/InsertSort.py (100%) rename docs/Algorithm_Templates/{Python => }/Sort/MergeSort.py (100%) rename docs/Algorithm_Templates/{Python => }/Sort/QuickSort.py (100%) rename docs/Algorithm_Templates/{Python => Sort}/README.md (94%) rename docs/Algorithm_Templates/{Python => }/Sort/RadixSort.py (100%) rename docs/Algorithm_Templates/{Python => }/Sort/SelectionSort.py (100%) rename docs/Algorithm_Templates/{Python => }/Sort/ShellSort.py (100%) rename docs/Algorithm_Templates/{Python => }/Traversals/README.md (100%) rename docs/Leetcode_Solutions/{Python => }/001._two_sum.md (100%) rename docs/Leetcode_Solutions/{Python => }/002._add_two_numbers.md (100%) rename docs/Leetcode_Solutions/{Python => }/003._longest_substring_without_repeating_characters.md (100%) rename docs/Leetcode_Solutions/{Python => }/004._median_of_two_sorted_arrays.md (100%) rename docs/Leetcode_Solutions/{Python => }/005._longest_palindromic_substring.md (100%) rename docs/Leetcode_Solutions/{Python => }/006._ZigZag_Conversion.md (100%) rename docs/Leetcode_Solutions/{Python => }/007._Reverse_Integer.md (100%) rename docs/Leetcode_Solutions/{Python => }/008._string_to_integer_(atoi).md (100%) rename docs/Leetcode_Solutions/{Python => }/009._Palindrome_Number.md (100%) rename docs/Leetcode_Solutions/{Python => }/010._regular_expression_matching.md (100%) rename docs/Leetcode_Solutions/{Python => }/011._container_with_most_water.md (100%) rename docs/Leetcode_Solutions/{Python => }/012._Integer_to_Roman.md (100%) rename docs/Leetcode_Solutions/{Python => }/013._Roman_to_Integer.md (100%) rename docs/Leetcode_Solutions/{Python => }/014._longest_common_prefix.md (100%) rename docs/Leetcode_Solutions/{Python => }/015._3sum.md (100%) rename docs/Leetcode_Solutions/{Python => }/016._3sum_closest.md (100%) rename docs/Leetcode_Solutions/{Python => }/017._letter_combinations_of_a_phone_number.md (100%) rename docs/Leetcode_Solutions/{Python => }/018._4sum.md (100%) rename docs/Leetcode_Solutions/{Python => }/019._remove_nth_node_from_end_of_list.md (100%) rename docs/Leetcode_Solutions/{Python => }/020._valid_parentheses.md (100%) rename docs/Leetcode_Solutions/{Python => }/021._merge_two_sorted_lists.md (100%) rename docs/Leetcode_Solutions/{Python => }/022._generate_parentheses.md (100%) rename docs/Leetcode_Solutions/{Python => }/023._merge_k_sorted_lists.md (100%) rename docs/Leetcode_Solutions/{Python => }/024._swap_nodes_in_pairs.md (100%) rename docs/Leetcode_Solutions/{Python => }/026._Remove_Duplicates_from_Sorted_Array.md (100%) rename docs/Leetcode_Solutions/{Python => }/027._Remove_Element.md (100%) rename docs/Leetcode_Solutions/{Python => }/028._implement_strstr().md (100%) rename docs/Leetcode_Solutions/{Python => }/030._Substring_with_Concatenation_of_All_Words.md (100%) rename docs/Leetcode_Solutions/{Python => }/031._next_permutation.md (100%) rename docs/Leetcode_Solutions/{Python => }/033._search_in_rotated_sorted_array.md (100%) rename docs/Leetcode_Solutions/{Python => }/034._Search for a Range.md (100%) rename docs/Leetcode_Solutions/{Python => }/035._search_insert_position.md (100%) rename docs/Leetcode_Solutions/{Python => }/038._Count_and_Say.md (100%) rename docs/Leetcode_Solutions/{Python => }/039._combination_sum.md (100%) rename docs/Leetcode_Solutions/{Python => }/040._combination_sum_ii.md (100%) rename docs/Leetcode_Solutions/{Python => }/042._trapping_rain_water.md (100%) rename docs/Leetcode_Solutions/{Python => }/043._multiply_strings.md (100%) rename docs/Leetcode_Solutions/{Python => }/044._wildcard_matching.md (100%) rename docs/Leetcode_Solutions/{Python => }/045._Jump_Game_II.md (100%) rename docs/Leetcode_Solutions/{Python => }/046._permutations.md (100%) rename docs/Leetcode_Solutions/{Python => }/047._permutations_ii.md (100%) rename docs/Leetcode_Solutions/{Python => }/048._rotate_image.md (100%) rename docs/Leetcode_Solutions/{Python => }/049._group_anagrams_python.md (100%) rename docs/Leetcode_Solutions/{Python => }/050._pow(x,_n).md (100%) rename docs/Leetcode_Solutions/{Python => }/051._n-queens.md (100%) rename docs/Leetcode_Solutions/{Python => }/052._n-queens_ii.md (100%) rename docs/Leetcode_Solutions/{Python => }/053._maximum_subarray.md (100%) rename docs/Leetcode_Solutions/{Python => }/054._spiral_matrix.md (100%) rename docs/Leetcode_Solutions/{Python => }/055._jump_game.md (100%) rename docs/Leetcode_Solutions/{Python => }/056._Merge_Intervals.md (100%) rename docs/Leetcode_Solutions/{Python => }/058._length_of_last_word.md (100%) rename docs/Leetcode_Solutions/{Python => }/059._spiral_matrix_ii.md (100%) rename docs/Leetcode_Solutions/{Python => }/060._permutation_sequence.md (100%) rename docs/Leetcode_Solutions/{Python => }/061._rotate_list.md (100%) rename docs/Leetcode_Solutions/{Python => }/064._minimum_path_sum.md (100%) rename docs/Leetcode_Solutions/{Python => }/065.unique_paths_ii.md (100%) rename docs/Leetcode_Solutions/{Python => }/066._plus_one.md (100%) rename docs/Leetcode_Solutions/{Python => }/067._add_binary.md (100%) rename docs/Leetcode_Solutions/{Python => }/069._sqrt(x).md (100%) rename docs/Leetcode_Solutions/{Python => }/070. Climbing Stairs.md (100%) rename docs/Leetcode_Solutions/{Python => }/072._edit_distance.md (100%) rename docs/Leetcode_Solutions/{Python => }/073. Set Matrix Zeroes.md (100%) rename docs/Leetcode_Solutions/{Python => }/074._search_a_2d_matrix.md (100%) rename docs/Leetcode_Solutions/{Python => }/075._sort_colors.md (100%) rename docs/Leetcode_Solutions/{Python => }/076._Minimum_Window_Substring.md (100%) rename docs/Leetcode_Solutions/{Python => }/077._combinations.md (100%) rename docs/Leetcode_Solutions/{Python => }/078.Subsets .md (100%) rename docs/Leetcode_Solutions/{Python => }/079._word_search.md (100%) rename docs/Leetcode_Solutions/{Python => }/082._remove_duplicates_from_sorted_list_ii.md (100%) rename docs/Leetcode_Solutions/{Python => }/083._remove_duplicates_from_sorted_list.md (100%) rename docs/Leetcode_Solutions/{Python => }/086._partition_list.md (100%) rename docs/Leetcode_Solutions/{Python => }/088._merge_sorted_array.md (100%) rename docs/Leetcode_Solutions/{Python => }/089._gray_code.md (100%) rename docs/Leetcode_Solutions/{Python => }/090._subsets_ii.md (100%) rename docs/Leetcode_Solutions/{Python => }/091._decode_ways.md (100%) rename docs/Leetcode_Solutions/{Python => }/092._reverse_linked_list_ii.md (100%) rename docs/Leetcode_Solutions/{Python => }/093._restore_ip_addresses.md (100%) rename docs/Leetcode_Solutions/{Python => }/094._binary_tree_inorder_traversal.md (100%) rename docs/Leetcode_Solutions/{Python => }/096._unique_binary_search_trees.md (100%) rename docs/Leetcode_Solutions/{Python => }/098._validate_binary_search_tree.md (100%) rename docs/Leetcode_Solutions/{Python => }/100._same_tree.md (100%) rename docs/Leetcode_Solutions/{Python => }/101._symmetric_tree.md (100%) rename docs/Leetcode_Solutions/{Python => }/102._binary_tree_level_order_traversal.md (100%) rename docs/Leetcode_Solutions/{Python => }/103._binary_tree_zigzag_level_order_traversal.md (100%) rename docs/Leetcode_Solutions/{Python => }/104._maximum_depth_of_binary_tree.md (100%) rename docs/Leetcode_Solutions/{Python => }/105._construct_binary_tree_from_preorder_and_inorder_traversal.md (100%) rename docs/Leetcode_Solutions/{Python => }/106._construct_binary_tree_from_inorder_and_postorder_traversal.md (100%) rename docs/Leetcode_Solutions/{Python => }/107._binary_tree_level_order_traversal_ii.md (100%) rename docs/Leetcode_Solutions/{Python => }/108._convert_sorted_array_to_binary_search_tree.md (100%) rename docs/Leetcode_Solutions/{Python => }/109._convert_sorted_list_to_binary_search_tree.md (100%) rename docs/Leetcode_Solutions/{Python => }/110._balanced_binary_tree.md (100%) rename docs/Leetcode_Solutions/{Python => }/111._minimum_depth_of_binary_tree.md (100%) rename docs/Leetcode_Solutions/{Python => }/112._path_sum.md (100%) rename docs/Leetcode_Solutions/{Python => }/113._path_sum_ii.md (100%) rename docs/Leetcode_Solutions/{Python => }/114._flatten_binary_tree_to_linked_list.md (100%) rename docs/Leetcode_Solutions/{Python => }/116._populating_next_right_pointers_in_each_node.md (100%) rename docs/Leetcode_Solutions/{Python => }/118._pascal's_triangle.md (100%) rename docs/Leetcode_Solutions/{Python => }/119. _Pascal's_Triangle_II.md (100%) rename docs/Leetcode_Solutions/{Python => }/120. Triangle.md (100%) rename docs/Leetcode_Solutions/{Python => }/121._Best_Time_to_Buy_and_Sell_Stock.md (100%) rename docs/Leetcode_Solutions/{Python => }/124._Binary_Tree_Maximum_Path_Sum.md (100%) rename docs/Leetcode_Solutions/{Python => }/125._valid_palindrome.md (100%) rename docs/Leetcode_Solutions/{Python => }/126. Word Ladder II.md (100%) rename docs/Leetcode_Solutions/{Python => }/127._word_ladder.md (100%) rename docs/Leetcode_Solutions/{Python => }/128._Longest_Consecutive_Sequence.md (100%) rename docs/Leetcode_Solutions/{Python => }/129._sum_root_to_leaf_numbers.md (100%) rename docs/Leetcode_Solutions/{Python => }/130._surrounded_regions.md (100%) rename docs/Leetcode_Solutions/{Python => }/131._palindrome_partitioning.md (100%) rename docs/Leetcode_Solutions/{Python => }/133._clone_graph.md (100%) rename docs/Leetcode_Solutions/{Python => }/136._single_number.md (100%) rename docs/Leetcode_Solutions/{Python => }/139._word_break.md (100%) rename docs/Leetcode_Solutions/{Python => }/140._word_break_ii.md (100%) rename docs/Leetcode_Solutions/{Python => }/141._linked_list_cycle.md (100%) rename docs/Leetcode_Solutions/{Python => }/142_Linked_List_Cycle_II.md (100%) rename docs/Leetcode_Solutions/{Python => }/143._reorder_list.md (100%) rename docs/Leetcode_Solutions/{Python => }/144._binary_tree_preorder_traversal.md (100%) rename docs/Leetcode_Solutions/{Python => }/145._binary_tree_postorder_traversal.md (100%) rename docs/Leetcode_Solutions/{Python => }/147._insertion_sort_list.md (100%) rename docs/Leetcode_Solutions/{Python => }/148._sort_list.md (100%) rename docs/Leetcode_Solutions/{Python => }/150._evaluate_reverse_polish_notation.md (100%) rename docs/Leetcode_Solutions/{Python => }/151._reverse_words_in_a_string.md (100%) rename docs/Leetcode_Solutions/{Python => }/152._maximum_product_subarray.md (100%) rename docs/Leetcode_Solutions/{Python => }/153._find_minimum_in_rotated_sorted_array.md (100%) rename docs/Leetcode_Solutions/{Python => }/155._min_stack.md (100%) rename docs/Leetcode_Solutions/{Python => }/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md (100%) rename docs/Leetcode_Solutions/{Python => }/160._intersection_of_two_linked_lists.md (100%) rename docs/Leetcode_Solutions/{Python => }/162._find_peak_element.md (100%) rename docs/Leetcode_Solutions/{Python => }/165._compare_version_numbers.md (100%) rename docs/Leetcode_Solutions/{Python => }/166._Fraction_to_Recurring_Decimal.md (100%) rename docs/Leetcode_Solutions/{Python => }/167._two_sum_ii_-_input_array_is_sorted.md (100%) rename docs/Leetcode_Solutions/{Python => }/168._excel_sheet_column_title.md (100%) rename docs/Leetcode_Solutions/{Python => }/169._majority_element.md (100%) rename docs/Leetcode_Solutions/{Python => }/171._excel_sheet_column_number.md (100%) rename docs/Leetcode_Solutions/{Python => }/173._binary_search_tree_iterator.md (100%) rename docs/Leetcode_Solutions/{Python => }/179._Largest_Number.md (100%) rename docs/Leetcode_Solutions/{Python => }/189._rotate_array.md (100%) rename docs/Leetcode_Solutions/{Python => }/191._number_of_1_bits.md (100%) rename docs/Leetcode_Solutions/{Python => }/198._house_robber.md (100%) rename docs/Leetcode_Solutions/{Python => }/199._binary_tree_right_side_view.md (100%) rename docs/Leetcode_Solutions/{Python => }/200._number_of_islands.md (100%) rename docs/Leetcode_Solutions/{Python => }/203._remove_linked_list_elements.md (100%) rename docs/Leetcode_Solutions/{Python => }/204._count_primes.md (100%) rename docs/Leetcode_Solutions/{Python => }/205._isomorphic_strings.md (100%) rename docs/Leetcode_Solutions/{Python => }/206._reverse_linked_list.md (100%) rename docs/Leetcode_Solutions/{Python => }/207._course_schedule.md (100%) rename docs/Leetcode_Solutions/{Python => }/208._implement_trie_(prefix_tree).md (100%) rename docs/Leetcode_Solutions/{Python => }/210._course_schedule_ii.md (100%) rename docs/Leetcode_Solutions/{Python => }/211. Add and Search Word - Data structure design.md (100%) rename docs/Leetcode_Solutions/{Python => }/213._house_robber_ii.md (100%) rename docs/Leetcode_Solutions/{Python => }/216._combination_sum_iii.md (100%) rename docs/Leetcode_Solutions/{Python => }/217._contains_duplicate.md (100%) rename docs/Leetcode_Solutions/{Python => }/218._The _Skyline_Problem .md (100%) rename docs/Leetcode_Solutions/{Python => }/219._contains_duplicate_ii.md (100%) rename docs/Leetcode_Solutions/{Python => }/221._maximal_square.md (100%) rename docs/Leetcode_Solutions/{Python => }/222._count_complete_tree_nodes.md (100%) rename docs/Leetcode_Solutions/{Python => }/223._rectangle_area.md (100%) rename docs/Leetcode_Solutions/{Python => }/224. Basic Calculator .md (100%) rename docs/Leetcode_Solutions/{Python => }/225._implement_stack_using_queues.md (100%) rename docs/Leetcode_Solutions/{Python => }/226._invert_binary_tree.md (100%) rename docs/Leetcode_Solutions/{Python => }/227._basic_calculator_ii.md (100%) rename docs/Leetcode_Solutions/{Python => }/228._summary_ranges.md (100%) rename docs/Leetcode_Solutions/{Python => }/229._majority_element_ii.md (100%) rename docs/Leetcode_Solutions/{Python => }/230._kth_smallest_element_in_a_bst.md (100%) rename docs/Leetcode_Solutions/{Python => }/231. _Power_of_Two.md (100%) rename docs/Leetcode_Solutions/{Python => }/232._implement_queue_using_stacks.md (100%) rename docs/Leetcode_Solutions/{Python => }/234._palindrome_linked_list.md (100%) rename docs/Leetcode_Solutions/{Python => }/235._lowest_common_ancestor_of_a_binary_search_tree.md (100%) rename docs/Leetcode_Solutions/{Python => }/236._lowest_common_ancestor_of_a_binary_tree.md (100%) rename docs/Leetcode_Solutions/{Python => }/237._delete_node_in_a_linked_list.md (100%) rename docs/Leetcode_Solutions/{Python => }/238._product_of_array_except_self.md (100%) rename docs/Leetcode_Solutions/{Python => }/240._search_a_2d_matrix_ii.md (100%) rename docs/Leetcode_Solutions/{Python => }/242._valid_anagram.md (100%) rename docs/Leetcode_Solutions/{Python => }/252. Meeting Rooms.md (100%) rename docs/Leetcode_Solutions/{Python => }/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md (100%) rename docs/Leetcode_Solutions/{Python => }/256. Paint House.md (100%) rename docs/Leetcode_Solutions/{Python => }/257._binary_tree_paths.md (100%) rename docs/Leetcode_Solutions/{Python => }/258_ Add_Digits.md (100%) rename docs/Leetcode_Solutions/{Python => }/261. Graph Valid Tree.md (100%) rename docs/Leetcode_Solutions/{Python => }/263._ugly_number.md (100%) rename docs/Leetcode_Solutions/{Python => }/264._ugly_number_ii.md (100%) rename docs/Leetcode_Solutions/{Python => }/265. Paint House II.md (100%) rename docs/Leetcode_Solutions/{Python => }/266. Palindrome Permutation.md (100%) rename docs/Leetcode_Solutions/{Python => }/267. Palindrome Permutation II.md (100%) rename docs/Leetcode_Solutions/{Python => }/268._missing_number.md (100%) rename docs/Leetcode_Solutions/{Python => }/270. Closest Binary Search Tree Value.md (100%) rename docs/Leetcode_Solutions/{Python => }/276. Paint Fence.md (100%) rename docs/Leetcode_Solutions/{Python => }/277. Find the Celebrity.md (100%) rename docs/Leetcode_Solutions/{Python => }/278._First_Bad _Version.md (100%) rename docs/Leetcode_Solutions/{Python => }/279._perfect_squares.md (100%) rename docs/Leetcode_Solutions/{Python => }/280._Wiggle_Sort.md (100%) rename docs/Leetcode_Solutions/{Python => }/283._move_zeroes.md (100%) rename docs/Leetcode_Solutions/{Python => }/285._inorder_successor_in_bst.md (100%) rename docs/Leetcode_Solutions/{Python => }/286. Walls and Gates.md (100%) rename docs/Leetcode_Solutions/{Python => }/289._game_of_life.md (100%) rename docs/Leetcode_Solutions/{Python => }/290._word_pattern.md (100%) rename docs/Leetcode_Solutions/{Python => }/292._nim_game.md (100%) rename docs/Leetcode_Solutions/{Python => }/293._Flip_Game.md (100%) rename docs/Leetcode_Solutions/{Python => }/296. Best Meeting Point.md (100%) rename docs/Leetcode_Solutions/{Python => }/298. Binary Tree Longest Consecutive Sequence.md (100%) rename docs/Leetcode_Solutions/{Python => }/299._bulls_and_cows.md (100%) rename docs/Leetcode_Solutions/{Python => }/300._longest_increasing_subsequence.md (100%) rename docs/Leetcode_Solutions/{Python => }/303._range_sum_query_-_immutable.md (100%) rename docs/Leetcode_Solutions/{Python => }/316._Remove_Duplicate_Letters.md (100%) rename docs/Leetcode_Solutions/{Python => }/319._Bulb_Switcher.md (100%) rename docs/Leetcode_Solutions/{Python => }/322. Coin Change.md (100%) rename docs/Leetcode_Solutions/{Python => }/323. Number of Connected Components in an Undirected Graph.md (100%) rename docs/Leetcode_Solutions/{Python => }/324._Wiggle_Sort_II.md (100%) rename docs/Leetcode_Solutions/{Python => }/326._power_of_three.md (100%) rename docs/Leetcode_Solutions/{Python => }/328._odd_even_linked_list.md (100%) rename docs/Leetcode_Solutions/{Python => }/334._increasing_triplet_subsequence.md (100%) rename docs/Leetcode_Solutions/{Python => }/337._house_robber_iii.md (100%) rename docs/Leetcode_Solutions/{Python => }/338. Counting Bits.md (100%) rename docs/Leetcode_Solutions/{Python => }/339. Nested List Weight Sum.md (100%) rename docs/Leetcode_Solutions/{Python => }/341._Flatten_Nested_List_Iterator.md (100%) rename docs/Leetcode_Solutions/{Python => }/342._Power_of_Four.md (100%) rename docs/Leetcode_Solutions/{Python => }/344._reverse_string.md (100%) rename docs/Leetcode_Solutions/{Python => }/345._Reverse_Vowels_of_a_String.md (100%) rename docs/Leetcode_Solutions/{Python => }/349._intersection_of_two_arrays.md (100%) rename docs/Leetcode_Solutions/{Python => }/350._intersection_of_two_arrays_ii.md (100%) rename docs/Leetcode_Solutions/{Python => }/353. Design Snake Game.md (100%) rename docs/Leetcode_Solutions/{Python => }/361._Bomb_Enemy.md (100%) rename docs/Leetcode_Solutions/{Python => }/364. Nested List Weight Sum II.md (100%) rename docs/Leetcode_Solutions/{Python => }/366. Find Leaves of Binary Tree.md (100%) rename docs/Leetcode_Solutions/{Python => }/367._valid_perfect_square.md (100%) rename docs/Leetcode_Solutions/{Python => }/369.Plus One Linked List.md (100%) rename docs/Leetcode_Solutions/{Python => }/371._sum_of_two_integers.md (100%) rename docs/Leetcode_Solutions/{Python => }/374._Guess_Number_Higher_or_Lower.md (100%) rename docs/Leetcode_Solutions/{Python => }/377._combination_sum_iv.md (100%) rename docs/Leetcode_Solutions/{Python => }/378._kth_smallest_element_in_a_sorted_matrix.md (100%) rename docs/Leetcode_Solutions/{Python => }/380. Insert Delete GetRandom O(1).md (100%) rename docs/Leetcode_Solutions/{Python => }/381. Insert Delete GetRandom O(1) - Duplicates allowed.md (100%) rename docs/Leetcode_Solutions/{Python => }/382._linked_list_random_node.md (100%) rename docs/Leetcode_Solutions/{Python => }/383._ransom_note.md (100%) rename docs/Leetcode_Solutions/{Python => }/384. Shuffle an Array.md (100%) rename docs/Leetcode_Solutions/{Python => }/387._first_unique_character_in_a_string.md (100%) rename docs/Leetcode_Solutions/{Python => }/388._Longest_Absolute_File_Path.md (100%) rename docs/Leetcode_Solutions/{Python => }/389._find_the_difference.md (100%) rename docs/Leetcode_Solutions/{Python => }/392._is_subsequence.md (100%) rename docs/Leetcode_Solutions/{Python => }/394._decode_string.md (100%) rename docs/Leetcode_Solutions/{Python => }/400. Nth Digit.md (100%) rename docs/Leetcode_Solutions/{Python => }/401._binary_watch.md (100%) rename docs/Leetcode_Solutions/{Python => }/404._sum_of_left_leaves.md (100%) rename docs/Leetcode_Solutions/{Python => }/405. Convert a Number to Hexadecimal.md (100%) rename docs/Leetcode_Solutions/{Python => }/406._Queue_Reconstruction_by_Height.md (100%) rename docs/Leetcode_Solutions/{Python => }/412._fizz_buzz.md (100%) rename docs/Leetcode_Solutions/{Python => }/413. Arithmetic Slices.md (100%) rename docs/Leetcode_Solutions/{Python => }/414._third_maximum_number.md (100%) rename docs/Leetcode_Solutions/{Python => }/415._add_strings.md (100%) rename docs/Leetcode_Solutions/{Python => }/416. Partition Equal Subset Sum.md (100%) rename docs/Leetcode_Solutions/{Python => }/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md (100%) rename docs/Leetcode_Solutions/{Python => }/422. Valid Word Square.md (100%) rename docs/Leetcode_Solutions/{Python => }/434._number_of_segments_in_a_string.md (100%) rename docs/Leetcode_Solutions/{Python => }/437._path_sum_iii.md (100%) rename docs/Leetcode_Solutions/{Python => }/438._Find_All_Anagrams_in_a_String.md (100%) rename docs/Leetcode_Solutions/{Python => }/439. Ternary Expression Parser.md (100%) rename docs/Leetcode_Solutions/{Python => }/441._arranging_coins.md (100%) rename docs/Leetcode_Solutions/{Python => }/448._Find_All_Numbers_Disappeared_in_an_Array.md (100%) rename docs/Leetcode_Solutions/{Python => }/450. Delete Node in a BST.md (100%) rename docs/Leetcode_Solutions/{Python => }/453._Minimum_Moves_to_Equal_Array_Elements.md (100%) rename docs/Leetcode_Solutions/{Python => }/459._Repeated_Substring_Pattern.md (100%) rename docs/Leetcode_Solutions/{Python => }/461._Hamming Distance.md (100%) rename docs/Leetcode_Solutions/{Python => }/463._Island_Perimeter.md (100%) rename docs/Leetcode_Solutions/{Python => }/467._Unique_Substrings_in_Wraparound_String.md (100%) rename docs/Leetcode_Solutions/{Python => }/469. Convex Polygon.md (100%) rename docs/Leetcode_Solutions/{Python => }/476._Number_Complement.md (100%) rename docs/Leetcode_Solutions/{Python => }/477._Total_Hamming_Distance.md (100%) rename docs/Leetcode_Solutions/{Python => }/485._Max_Consecutive_Ones.md (100%) rename docs/Leetcode_Solutions/{Python => }/587._Erect_the_Fence .md (100%) rename docs/Leetcode_Solutions/{Python => }/599._Minimum_Index_Sum_of_Two_Lists.md (100%) rename docs/Leetcode_Solutions/{Python => }/647._Palindromic_Substrings.md (100%) rename docs/Leetcode_Solutions/{Python => }/657._Judge_Route_Circle.md (100%) rename docs/Leetcode_Solutions/{Python => }/665._Non-decreasing_Array.md (100%) rename docs/Leetcode_Solutions/{Python => }/672._Bulb_Switcher_II.md (100%) rename docs/Leetcode_Solutions/{Python => }/681._Next_Closest_Time.md (100%) rename docs/Leetcode_Solutions/{Python => }/682._Baseball_Game.md (100%) rename docs/Leetcode_Solutions/{Python => }/687._Longest_Univalue_Path.md (100%) rename docs/Leetcode_Solutions/{Python => }/740._delete_and_earn.md (100%) rename docs/Leetcode_Solutions/{Python => }/760._Find_Anagram_Mappings.md (100%) rename docs/Leetcode_Solutions/{Python => }/844._Backspace_String_Compare.md (100%) rename docs/Leetcode_Solutions/{Python => }/README.md (100%) rename "docs/Leetcode_Solutions/Python/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" => "docs/Leetcode_Solutions/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" (100%) rename docs/Leetcode_Solutions/{Python => }/Summarization/Data Structure and Algorthim Review.md (100%) rename docs/Leetcode_Solutions/{Python => }/Summarization/Dynamic Programming.md (100%) rename "docs/Leetcode_Solutions/Python/Summarization/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" => "docs/Leetcode_Solutions/Summarization/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" (100%) rename "docs/Leetcode_Solutions/Python/Summarization/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" => "docs/Leetcode_Solutions/Summarization/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" (100%) rename "docs/Leetcode_Solutions/Python/Summarization/LinkedList\346\212\200\345\267\247.md" => "docs/Leetcode_Solutions/Summarization/LinkedList\346\212\200\345\267\247.md" (100%) rename docs/Leetcode_Solutions/{Python => }/Summarization/Maximal Square.pdf (100%) rename "docs/Leetcode_Solutions/Python/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" => "docs/Leetcode_Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" (100%) rename docs/Leetcode_Solutions/{Python => }/Summarization/Range Sum Query 2D - Immutable.pdf (100%) rename docs/Leetcode_Solutions/{Python => }/Summarization/Recusrion & BackTracking.md (100%) rename "docs/Leetcode_Solutions/Python/Summarization/backtracking\346\200\235\350\267\257.md" => "docs/Leetcode_Solutions/Summarization/backtracking\346\200\235\350\267\257.md" (100%) rename "docs/Leetcode_Solutions/Python/Summarization/delete_node_in_a_linked_list\351\227\256\351\242\230.md" => "docs/Leetcode_Solutions/Summarization/delete_node_in_a_linked_list\351\227\256\351\242\230.md" (100%) rename "docs/Leetcode_Solutions/Python/Summarization/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" => "docs/Leetcode_Solutions/Summarization/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" (100%) rename docs/Leetcode_Solutions/{Python => }/Summarization/python_base.py (100%) rename "docs/Leetcode_Solutions/Python/Summarization/python\347\232\204\345\220\204\347\247\215pass.md" => "docs/Leetcode_Solutions/Summarization/python\347\232\204\345\220\204\347\247\215pass.md" (100%) rename docs/Leetcode_Solutions/{Python => }/Summarization/slide_windows_template.md (100%) rename "docs/Leetcode_Solutions/Python/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" => "docs/Leetcode_Solutions/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" (100%) rename "docs/Leetcode_Solutions/Python/Summarization/\344\275\215\350\277\220\347\256\227.md" => "docs/Leetcode_Solutions/Summarization/\344\275\215\350\277\220\347\256\227.md" (100%) rename "docs/Leetcode_Solutions/Python/Summarization/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" => "docs/Leetcode_Solutions/Summarization/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" (100%) rename "docs/Leetcode_Solutions/Python/Summarization/\345\205\253\346\216\222\345\272\217.md" => "docs/Leetcode_Solutions/Summarization/\345\205\253\346\216\222\345\272\217.md" (100%) rename "docs/Leetcode_Solutions/Python/Summarization/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" => "docs/Leetcode_Solutions/Summarization/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" (100%) rename "docs/Leetcode_Solutions/Python/Summarization/\346\200\273\347\273\223.md" => "docs/Leetcode_Solutions/Summarization/\346\200\273\347\273\223.md" (100%) rename "docs/Leetcode_Solutions/Python/Summarization/\347\273\204\345\220\210\351\227\256\351\242\230.md" => "docs/Leetcode_Solutions/Summarization/\347\273\204\345\220\210\351\227\256\351\242\230.md" (100%) rename "docs/Leetcode_Solutions/Python/Summarization/\351\200\222\345\275\222_recursion.md" => "docs/Leetcode_Solutions/Summarization/\351\200\222\345\275\222_recursion.md" (100%) diff --git a/README.md b/README.md index 96fa2bb51..c7b773848 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,14 @@ * 英文官网: https://leetcode.com * 中文官网: https://leetcode-cn.com -## 1. [LeetCode 题解和总结](/docs/Leetcode_Solutions/Python) +## 1.LeetCode 习题集合 -## 2. [算法模版](/docs/Algorithm_Templates/Python) +* [LeetCode 习题集合](/docs/Leetcode_Solutions) + +## 2.算法 集合 + +* [算法 集合](/docs/Algorithm) +* [八大排序算法 集合](/docs/Algorithm/Sort) ## 推荐的一些LeetCode网站 diff --git a/docs/Algorithm_Templates/Python/Cipher/README.md b/docs/Algorithm_Templates/Cipher/README.md similarity index 100% rename from docs/Algorithm_Templates/Python/Cipher/README.md rename to docs/Algorithm_Templates/Cipher/README.md diff --git a/docs/Algorithm_Templates/Python/Compression/README.md b/docs/Algorithm_Templates/Compression/README.md similarity index 100% rename from docs/Algorithm_Templates/Python/Compression/README.md rename to docs/Algorithm_Templates/Compression/README.md diff --git a/docs/Algorithm_Templates/Python/Conversion/README.md b/docs/Algorithm_Templates/Conversion/README.md similarity index 100% rename from docs/Algorithm_Templates/Python/Conversion/README.md rename to docs/Algorithm_Templates/Conversion/README.md diff --git a/docs/Algorithm_Templates/Python/Data_Structure/Graph/README.md b/docs/Algorithm_Templates/Data_Structure/Graph/README.md similarity index 100% rename from docs/Algorithm_Templates/Python/Data_Structure/Graph/README.md rename to docs/Algorithm_Templates/Data_Structure/Graph/README.md diff --git a/docs/Algorithm_Templates/Python/Data_Structure/HashMap/README.md b/docs/Algorithm_Templates/Data_Structure/HashMap/README.md similarity index 100% rename from docs/Algorithm_Templates/Python/Data_Structure/HashMap/README.md rename to docs/Algorithm_Templates/Data_Structure/HashMap/README.md diff --git a/docs/Algorithm_Templates/Python/Data_Structure/HashTable/README.md b/docs/Algorithm_Templates/Data_Structure/HashTable/README.md similarity index 100% rename from docs/Algorithm_Templates/Python/Data_Structure/HashTable/README.md rename to docs/Algorithm_Templates/Data_Structure/HashTable/README.md diff --git a/docs/Algorithm_Templates/Python/Data_Structure/Heqp/README.md b/docs/Algorithm_Templates/Data_Structure/Heqp/README.md similarity index 100% rename from docs/Algorithm_Templates/Python/Data_Structure/Heqp/README.md rename to docs/Algorithm_Templates/Data_Structure/Heqp/README.md diff --git a/docs/Algorithm_Templates/Python/Data_Structure/LinkedList/README.md b/docs/Algorithm_Templates/Data_Structure/LinkedList/README.md similarity index 100% rename from docs/Algorithm_Templates/Python/Data_Structure/LinkedList/README.md rename to docs/Algorithm_Templates/Data_Structure/LinkedList/README.md diff --git a/docs/Algorithm_Templates/Python/Data_Structure/Matrix/README.md b/docs/Algorithm_Templates/Data_Structure/Matrix/README.md similarity index 100% rename from docs/Algorithm_Templates/Python/Data_Structure/Matrix/README.md rename to docs/Algorithm_Templates/Data_Structure/Matrix/README.md diff --git a/docs/Algorithm_Templates/Python/Data_Structure/Queue/README.md b/docs/Algorithm_Templates/Data_Structure/Queue/README.md similarity index 100% rename from docs/Algorithm_Templates/Python/Data_Structure/Queue/README.md rename to docs/Algorithm_Templates/Data_Structure/Queue/README.md diff --git a/docs/Algorithm_Templates/Python/Data_Structure/README.md b/docs/Algorithm_Templates/Data_Structure/README.md similarity index 100% rename from docs/Algorithm_Templates/Python/Data_Structure/README.md rename to docs/Algorithm_Templates/Data_Structure/README.md diff --git a/docs/Algorithm_Templates/Python/Data_Structure/Stack/README.md b/docs/Algorithm_Templates/Data_Structure/Stack/README.md similarity index 100% rename from docs/Algorithm_Templates/Python/Data_Structure/Stack/README.md rename to docs/Algorithm_Templates/Data_Structure/Stack/README.md diff --git a/docs/Algorithm_Templates/Python/Data_Structure/Tree/README.md b/docs/Algorithm_Templates/Data_Structure/Tree/README.md similarity index 100% rename from docs/Algorithm_Templates/Python/Data_Structure/Tree/README.md rename to docs/Algorithm_Templates/Data_Structure/Tree/README.md diff --git a/docs/Algorithm_Templates/Python/Dynamic_Programming/README.md b/docs/Algorithm_Templates/Dynamic_Programming/README.md similarity index 100% rename from docs/Algorithm_Templates/Python/Dynamic_Programming/README.md rename to docs/Algorithm_Templates/Dynamic_Programming/README.md diff --git a/docs/Algorithm_Templates/Python/Hash/README.md b/docs/Algorithm_Templates/Hash/README.md similarity index 100% rename from docs/Algorithm_Templates/Python/Hash/README.md rename to docs/Algorithm_Templates/Hash/README.md diff --git a/docs/Algorithm_Templates/Python/Others/NextNodeInOrderTree.md b/docs/Algorithm_Templates/Others/NextNodeInOrderTree.md similarity index 100% rename from docs/Algorithm_Templates/Python/Others/NextNodeInOrderTree.md rename to docs/Algorithm_Templates/Others/NextNodeInOrderTree.md diff --git a/docs/Algorithm_Templates/Python/Others/TopKWords.java b/docs/Algorithm_Templates/Others/TopKWords.java similarity index 100% rename from docs/Algorithm_Templates/Python/Others/TopKWords.java rename to docs/Algorithm_Templates/Others/TopKWords.java diff --git a/docs/Algorithm_Templates/Python/Others/words.txt b/docs/Algorithm_Templates/Others/words.txt similarity index 100% rename from docs/Algorithm_Templates/Python/Others/words.txt rename to docs/Algorithm_Templates/Others/words.txt diff --git a/docs/Algorithm_Templates/Python/Sort/README.md b/docs/Algorithm_Templates/Python/Sort/README.md deleted file mode 100644 index 8e0b4dd33..000000000 --- a/docs/Algorithm_Templates/Python/Sort/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Some algorithm templates for better understanding! - -## 八大排序算法 - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | [RadixSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/RadixSort.py) | - diff --git a/docs/Algorithm_Templates/README.md b/docs/Algorithm_Templates/README.md new file mode 100644 index 000000000..6889eed16 --- /dev/null +++ b/docs/Algorithm_Templates/README.md @@ -0,0 +1,5 @@ +# Some algorithm templates for better understanding! + +> [八大排序算法 集合](/docs/Algorithm/Sort) + +![](/images/SortingAlgorithm/八大排序算法性能.png) diff --git a/docs/Algorithm_Templates/Python/Search/README.md b/docs/Algorithm_Templates/Search/README.md similarity index 100% rename from docs/Algorithm_Templates/Python/Search/README.md rename to docs/Algorithm_Templates/Search/README.md diff --git a/docs/Algorithm_Templates/Python/Sort/BubbleSort.py b/docs/Algorithm_Templates/Sort/BubbleSort.py similarity index 100% rename from docs/Algorithm_Templates/Python/Sort/BubbleSort.py rename to docs/Algorithm_Templates/Sort/BubbleSort.py diff --git a/docs/Algorithm_Templates/Python/Sort/InsertSort.py b/docs/Algorithm_Templates/Sort/InsertSort.py similarity index 100% rename from docs/Algorithm_Templates/Python/Sort/InsertSort.py rename to docs/Algorithm_Templates/Sort/InsertSort.py diff --git a/docs/Algorithm_Templates/Python/Sort/MergeSort.py b/docs/Algorithm_Templates/Sort/MergeSort.py similarity index 100% rename from docs/Algorithm_Templates/Python/Sort/MergeSort.py rename to docs/Algorithm_Templates/Sort/MergeSort.py diff --git a/docs/Algorithm_Templates/Python/Sort/QuickSort.py b/docs/Algorithm_Templates/Sort/QuickSort.py similarity index 100% rename from docs/Algorithm_Templates/Python/Sort/QuickSort.py rename to docs/Algorithm_Templates/Sort/QuickSort.py diff --git a/docs/Algorithm_Templates/Python/README.md b/docs/Algorithm_Templates/Sort/README.md similarity index 94% rename from docs/Algorithm_Templates/Python/README.md rename to docs/Algorithm_Templates/Sort/README.md index 8e0b4dd33..6ff4dc75a 100644 --- a/docs/Algorithm_Templates/Python/README.md +++ b/docs/Algorithm_Templates/Sort/README.md @@ -1,6 +1,4 @@ -# Some algorithm templates for better understanding! - -## 八大排序算法 +# 八大排序算法 ![](/images/SortingAlgorithm/八大排序算法性能.png) diff --git a/docs/Algorithm_Templates/Python/Sort/RadixSort.py b/docs/Algorithm_Templates/Sort/RadixSort.py similarity index 100% rename from docs/Algorithm_Templates/Python/Sort/RadixSort.py rename to docs/Algorithm_Templates/Sort/RadixSort.py diff --git a/docs/Algorithm_Templates/Python/Sort/SelectionSort.py b/docs/Algorithm_Templates/Sort/SelectionSort.py similarity index 100% rename from docs/Algorithm_Templates/Python/Sort/SelectionSort.py rename to docs/Algorithm_Templates/Sort/SelectionSort.py diff --git a/docs/Algorithm_Templates/Python/Sort/ShellSort.py b/docs/Algorithm_Templates/Sort/ShellSort.py similarity index 100% rename from docs/Algorithm_Templates/Python/Sort/ShellSort.py rename to docs/Algorithm_Templates/Sort/ShellSort.py diff --git a/docs/Algorithm_Templates/Python/Traversals/README.md b/docs/Algorithm_Templates/Traversals/README.md similarity index 100% rename from docs/Algorithm_Templates/Python/Traversals/README.md rename to docs/Algorithm_Templates/Traversals/README.md diff --git a/docs/Leetcode_Solutions/Python/001._two_sum.md b/docs/Leetcode_Solutions/001._two_sum.md similarity index 100% rename from docs/Leetcode_Solutions/Python/001._two_sum.md rename to docs/Leetcode_Solutions/001._two_sum.md diff --git a/docs/Leetcode_Solutions/Python/002._add_two_numbers.md b/docs/Leetcode_Solutions/002._add_two_numbers.md similarity index 100% rename from docs/Leetcode_Solutions/Python/002._add_two_numbers.md rename to docs/Leetcode_Solutions/002._add_two_numbers.md diff --git a/docs/Leetcode_Solutions/Python/003._longest_substring_without_repeating_characters.md b/docs/Leetcode_Solutions/003._longest_substring_without_repeating_characters.md similarity index 100% rename from docs/Leetcode_Solutions/Python/003._longest_substring_without_repeating_characters.md rename to docs/Leetcode_Solutions/003._longest_substring_without_repeating_characters.md diff --git a/docs/Leetcode_Solutions/Python/004._median_of_two_sorted_arrays.md b/docs/Leetcode_Solutions/004._median_of_two_sorted_arrays.md similarity index 100% rename from docs/Leetcode_Solutions/Python/004._median_of_two_sorted_arrays.md rename to docs/Leetcode_Solutions/004._median_of_two_sorted_arrays.md diff --git a/docs/Leetcode_Solutions/Python/005._longest_palindromic_substring.md b/docs/Leetcode_Solutions/005._longest_palindromic_substring.md similarity index 100% rename from docs/Leetcode_Solutions/Python/005._longest_palindromic_substring.md rename to docs/Leetcode_Solutions/005._longest_palindromic_substring.md diff --git a/docs/Leetcode_Solutions/Python/006._ZigZag_Conversion.md b/docs/Leetcode_Solutions/006._ZigZag_Conversion.md similarity index 100% rename from docs/Leetcode_Solutions/Python/006._ZigZag_Conversion.md rename to docs/Leetcode_Solutions/006._ZigZag_Conversion.md diff --git a/docs/Leetcode_Solutions/Python/007._Reverse_Integer.md b/docs/Leetcode_Solutions/007._Reverse_Integer.md similarity index 100% rename from docs/Leetcode_Solutions/Python/007._Reverse_Integer.md rename to docs/Leetcode_Solutions/007._Reverse_Integer.md diff --git a/docs/Leetcode_Solutions/Python/008._string_to_integer_(atoi).md b/docs/Leetcode_Solutions/008._string_to_integer_(atoi).md similarity index 100% rename from docs/Leetcode_Solutions/Python/008._string_to_integer_(atoi).md rename to docs/Leetcode_Solutions/008._string_to_integer_(atoi).md diff --git a/docs/Leetcode_Solutions/Python/009._Palindrome_Number.md b/docs/Leetcode_Solutions/009._Palindrome_Number.md similarity index 100% rename from docs/Leetcode_Solutions/Python/009._Palindrome_Number.md rename to docs/Leetcode_Solutions/009._Palindrome_Number.md diff --git a/docs/Leetcode_Solutions/Python/010._regular_expression_matching.md b/docs/Leetcode_Solutions/010._regular_expression_matching.md similarity index 100% rename from docs/Leetcode_Solutions/Python/010._regular_expression_matching.md rename to docs/Leetcode_Solutions/010._regular_expression_matching.md diff --git a/docs/Leetcode_Solutions/Python/011._container_with_most_water.md b/docs/Leetcode_Solutions/011._container_with_most_water.md similarity index 100% rename from docs/Leetcode_Solutions/Python/011._container_with_most_water.md rename to docs/Leetcode_Solutions/011._container_with_most_water.md diff --git a/docs/Leetcode_Solutions/Python/012._Integer_to_Roman.md b/docs/Leetcode_Solutions/012._Integer_to_Roman.md similarity index 100% rename from docs/Leetcode_Solutions/Python/012._Integer_to_Roman.md rename to docs/Leetcode_Solutions/012._Integer_to_Roman.md diff --git a/docs/Leetcode_Solutions/Python/013._Roman_to_Integer.md b/docs/Leetcode_Solutions/013._Roman_to_Integer.md similarity index 100% rename from docs/Leetcode_Solutions/Python/013._Roman_to_Integer.md rename to docs/Leetcode_Solutions/013._Roman_to_Integer.md diff --git a/docs/Leetcode_Solutions/Python/014._longest_common_prefix.md b/docs/Leetcode_Solutions/014._longest_common_prefix.md similarity index 100% rename from docs/Leetcode_Solutions/Python/014._longest_common_prefix.md rename to docs/Leetcode_Solutions/014._longest_common_prefix.md diff --git a/docs/Leetcode_Solutions/Python/015._3sum.md b/docs/Leetcode_Solutions/015._3sum.md similarity index 100% rename from docs/Leetcode_Solutions/Python/015._3sum.md rename to docs/Leetcode_Solutions/015._3sum.md diff --git a/docs/Leetcode_Solutions/Python/016._3sum_closest.md b/docs/Leetcode_Solutions/016._3sum_closest.md similarity index 100% rename from docs/Leetcode_Solutions/Python/016._3sum_closest.md rename to docs/Leetcode_Solutions/016._3sum_closest.md diff --git a/docs/Leetcode_Solutions/Python/017._letter_combinations_of_a_phone_number.md b/docs/Leetcode_Solutions/017._letter_combinations_of_a_phone_number.md similarity index 100% rename from docs/Leetcode_Solutions/Python/017._letter_combinations_of_a_phone_number.md rename to docs/Leetcode_Solutions/017._letter_combinations_of_a_phone_number.md diff --git a/docs/Leetcode_Solutions/Python/018._4sum.md b/docs/Leetcode_Solutions/018._4sum.md similarity index 100% rename from docs/Leetcode_Solutions/Python/018._4sum.md rename to docs/Leetcode_Solutions/018._4sum.md diff --git a/docs/Leetcode_Solutions/Python/019._remove_nth_node_from_end_of_list.md b/docs/Leetcode_Solutions/019._remove_nth_node_from_end_of_list.md similarity index 100% rename from docs/Leetcode_Solutions/Python/019._remove_nth_node_from_end_of_list.md rename to docs/Leetcode_Solutions/019._remove_nth_node_from_end_of_list.md diff --git a/docs/Leetcode_Solutions/Python/020._valid_parentheses.md b/docs/Leetcode_Solutions/020._valid_parentheses.md similarity index 100% rename from docs/Leetcode_Solutions/Python/020._valid_parentheses.md rename to docs/Leetcode_Solutions/020._valid_parentheses.md diff --git a/docs/Leetcode_Solutions/Python/021._merge_two_sorted_lists.md b/docs/Leetcode_Solutions/021._merge_two_sorted_lists.md similarity index 100% rename from docs/Leetcode_Solutions/Python/021._merge_two_sorted_lists.md rename to docs/Leetcode_Solutions/021._merge_two_sorted_lists.md diff --git a/docs/Leetcode_Solutions/Python/022._generate_parentheses.md b/docs/Leetcode_Solutions/022._generate_parentheses.md similarity index 100% rename from docs/Leetcode_Solutions/Python/022._generate_parentheses.md rename to docs/Leetcode_Solutions/022._generate_parentheses.md diff --git a/docs/Leetcode_Solutions/Python/023._merge_k_sorted_lists.md b/docs/Leetcode_Solutions/023._merge_k_sorted_lists.md similarity index 100% rename from docs/Leetcode_Solutions/Python/023._merge_k_sorted_lists.md rename to docs/Leetcode_Solutions/023._merge_k_sorted_lists.md diff --git a/docs/Leetcode_Solutions/Python/024._swap_nodes_in_pairs.md b/docs/Leetcode_Solutions/024._swap_nodes_in_pairs.md similarity index 100% rename from docs/Leetcode_Solutions/Python/024._swap_nodes_in_pairs.md rename to docs/Leetcode_Solutions/024._swap_nodes_in_pairs.md diff --git a/docs/Leetcode_Solutions/Python/026._Remove_Duplicates_from_Sorted_Array.md b/docs/Leetcode_Solutions/026._Remove_Duplicates_from_Sorted_Array.md similarity index 100% rename from docs/Leetcode_Solutions/Python/026._Remove_Duplicates_from_Sorted_Array.md rename to docs/Leetcode_Solutions/026._Remove_Duplicates_from_Sorted_Array.md diff --git a/docs/Leetcode_Solutions/Python/027._Remove_Element.md b/docs/Leetcode_Solutions/027._Remove_Element.md similarity index 100% rename from docs/Leetcode_Solutions/Python/027._Remove_Element.md rename to docs/Leetcode_Solutions/027._Remove_Element.md diff --git a/docs/Leetcode_Solutions/Python/028._implement_strstr().md b/docs/Leetcode_Solutions/028._implement_strstr().md similarity index 100% rename from docs/Leetcode_Solutions/Python/028._implement_strstr().md rename to docs/Leetcode_Solutions/028._implement_strstr().md diff --git a/docs/Leetcode_Solutions/Python/030._Substring_with_Concatenation_of_All_Words.md b/docs/Leetcode_Solutions/030._Substring_with_Concatenation_of_All_Words.md similarity index 100% rename from docs/Leetcode_Solutions/Python/030._Substring_with_Concatenation_of_All_Words.md rename to docs/Leetcode_Solutions/030._Substring_with_Concatenation_of_All_Words.md diff --git a/docs/Leetcode_Solutions/Python/031._next_permutation.md b/docs/Leetcode_Solutions/031._next_permutation.md similarity index 100% rename from docs/Leetcode_Solutions/Python/031._next_permutation.md rename to docs/Leetcode_Solutions/031._next_permutation.md diff --git a/docs/Leetcode_Solutions/Python/033._search_in_rotated_sorted_array.md b/docs/Leetcode_Solutions/033._search_in_rotated_sorted_array.md similarity index 100% rename from docs/Leetcode_Solutions/Python/033._search_in_rotated_sorted_array.md rename to docs/Leetcode_Solutions/033._search_in_rotated_sorted_array.md diff --git a/docs/Leetcode_Solutions/Python/034._Search for a Range.md b/docs/Leetcode_Solutions/034._Search for a Range.md similarity index 100% rename from docs/Leetcode_Solutions/Python/034._Search for a Range.md rename to docs/Leetcode_Solutions/034._Search for a Range.md diff --git a/docs/Leetcode_Solutions/Python/035._search_insert_position.md b/docs/Leetcode_Solutions/035._search_insert_position.md similarity index 100% rename from docs/Leetcode_Solutions/Python/035._search_insert_position.md rename to docs/Leetcode_Solutions/035._search_insert_position.md diff --git a/docs/Leetcode_Solutions/Python/038._Count_and_Say.md b/docs/Leetcode_Solutions/038._Count_and_Say.md similarity index 100% rename from docs/Leetcode_Solutions/Python/038._Count_and_Say.md rename to docs/Leetcode_Solutions/038._Count_and_Say.md diff --git a/docs/Leetcode_Solutions/Python/039._combination_sum.md b/docs/Leetcode_Solutions/039._combination_sum.md similarity index 100% rename from docs/Leetcode_Solutions/Python/039._combination_sum.md rename to docs/Leetcode_Solutions/039._combination_sum.md diff --git a/docs/Leetcode_Solutions/Python/040._combination_sum_ii.md b/docs/Leetcode_Solutions/040._combination_sum_ii.md similarity index 100% rename from docs/Leetcode_Solutions/Python/040._combination_sum_ii.md rename to docs/Leetcode_Solutions/040._combination_sum_ii.md diff --git a/docs/Leetcode_Solutions/Python/042._trapping_rain_water.md b/docs/Leetcode_Solutions/042._trapping_rain_water.md similarity index 100% rename from docs/Leetcode_Solutions/Python/042._trapping_rain_water.md rename to docs/Leetcode_Solutions/042._trapping_rain_water.md diff --git a/docs/Leetcode_Solutions/Python/043._multiply_strings.md b/docs/Leetcode_Solutions/043._multiply_strings.md similarity index 100% rename from docs/Leetcode_Solutions/Python/043._multiply_strings.md rename to docs/Leetcode_Solutions/043._multiply_strings.md diff --git a/docs/Leetcode_Solutions/Python/044._wildcard_matching.md b/docs/Leetcode_Solutions/044._wildcard_matching.md similarity index 100% rename from docs/Leetcode_Solutions/Python/044._wildcard_matching.md rename to docs/Leetcode_Solutions/044._wildcard_matching.md diff --git a/docs/Leetcode_Solutions/Python/045._Jump_Game_II.md b/docs/Leetcode_Solutions/045._Jump_Game_II.md similarity index 100% rename from docs/Leetcode_Solutions/Python/045._Jump_Game_II.md rename to docs/Leetcode_Solutions/045._Jump_Game_II.md diff --git a/docs/Leetcode_Solutions/Python/046._permutations.md b/docs/Leetcode_Solutions/046._permutations.md similarity index 100% rename from docs/Leetcode_Solutions/Python/046._permutations.md rename to docs/Leetcode_Solutions/046._permutations.md diff --git a/docs/Leetcode_Solutions/Python/047._permutations_ii.md b/docs/Leetcode_Solutions/047._permutations_ii.md similarity index 100% rename from docs/Leetcode_Solutions/Python/047._permutations_ii.md rename to docs/Leetcode_Solutions/047._permutations_ii.md diff --git a/docs/Leetcode_Solutions/Python/048._rotate_image.md b/docs/Leetcode_Solutions/048._rotate_image.md similarity index 100% rename from docs/Leetcode_Solutions/Python/048._rotate_image.md rename to docs/Leetcode_Solutions/048._rotate_image.md diff --git a/docs/Leetcode_Solutions/Python/049._group_anagrams_python.md b/docs/Leetcode_Solutions/049._group_anagrams_python.md similarity index 100% rename from docs/Leetcode_Solutions/Python/049._group_anagrams_python.md rename to docs/Leetcode_Solutions/049._group_anagrams_python.md diff --git a/docs/Leetcode_Solutions/Python/050._pow(x,_n).md b/docs/Leetcode_Solutions/050._pow(x,_n).md similarity index 100% rename from docs/Leetcode_Solutions/Python/050._pow(x,_n).md rename to docs/Leetcode_Solutions/050._pow(x,_n).md diff --git a/docs/Leetcode_Solutions/Python/051._n-queens.md b/docs/Leetcode_Solutions/051._n-queens.md similarity index 100% rename from docs/Leetcode_Solutions/Python/051._n-queens.md rename to docs/Leetcode_Solutions/051._n-queens.md diff --git a/docs/Leetcode_Solutions/Python/052._n-queens_ii.md b/docs/Leetcode_Solutions/052._n-queens_ii.md similarity index 100% rename from docs/Leetcode_Solutions/Python/052._n-queens_ii.md rename to docs/Leetcode_Solutions/052._n-queens_ii.md diff --git a/docs/Leetcode_Solutions/Python/053._maximum_subarray.md b/docs/Leetcode_Solutions/053._maximum_subarray.md similarity index 100% rename from docs/Leetcode_Solutions/Python/053._maximum_subarray.md rename to docs/Leetcode_Solutions/053._maximum_subarray.md diff --git a/docs/Leetcode_Solutions/Python/054._spiral_matrix.md b/docs/Leetcode_Solutions/054._spiral_matrix.md similarity index 100% rename from docs/Leetcode_Solutions/Python/054._spiral_matrix.md rename to docs/Leetcode_Solutions/054._spiral_matrix.md diff --git a/docs/Leetcode_Solutions/Python/055._jump_game.md b/docs/Leetcode_Solutions/055._jump_game.md similarity index 100% rename from docs/Leetcode_Solutions/Python/055._jump_game.md rename to docs/Leetcode_Solutions/055._jump_game.md diff --git a/docs/Leetcode_Solutions/Python/056._Merge_Intervals.md b/docs/Leetcode_Solutions/056._Merge_Intervals.md similarity index 100% rename from docs/Leetcode_Solutions/Python/056._Merge_Intervals.md rename to docs/Leetcode_Solutions/056._Merge_Intervals.md diff --git a/docs/Leetcode_Solutions/Python/058._length_of_last_word.md b/docs/Leetcode_Solutions/058._length_of_last_word.md similarity index 100% rename from docs/Leetcode_Solutions/Python/058._length_of_last_word.md rename to docs/Leetcode_Solutions/058._length_of_last_word.md diff --git a/docs/Leetcode_Solutions/Python/059._spiral_matrix_ii.md b/docs/Leetcode_Solutions/059._spiral_matrix_ii.md similarity index 100% rename from docs/Leetcode_Solutions/Python/059._spiral_matrix_ii.md rename to docs/Leetcode_Solutions/059._spiral_matrix_ii.md diff --git a/docs/Leetcode_Solutions/Python/060._permutation_sequence.md b/docs/Leetcode_Solutions/060._permutation_sequence.md similarity index 100% rename from docs/Leetcode_Solutions/Python/060._permutation_sequence.md rename to docs/Leetcode_Solutions/060._permutation_sequence.md diff --git a/docs/Leetcode_Solutions/Python/061._rotate_list.md b/docs/Leetcode_Solutions/061._rotate_list.md similarity index 100% rename from docs/Leetcode_Solutions/Python/061._rotate_list.md rename to docs/Leetcode_Solutions/061._rotate_list.md diff --git a/docs/Leetcode_Solutions/Python/064._minimum_path_sum.md b/docs/Leetcode_Solutions/064._minimum_path_sum.md similarity index 100% rename from docs/Leetcode_Solutions/Python/064._minimum_path_sum.md rename to docs/Leetcode_Solutions/064._minimum_path_sum.md diff --git a/docs/Leetcode_Solutions/Python/065.unique_paths_ii.md b/docs/Leetcode_Solutions/065.unique_paths_ii.md similarity index 100% rename from docs/Leetcode_Solutions/Python/065.unique_paths_ii.md rename to docs/Leetcode_Solutions/065.unique_paths_ii.md diff --git a/docs/Leetcode_Solutions/Python/066._plus_one.md b/docs/Leetcode_Solutions/066._plus_one.md similarity index 100% rename from docs/Leetcode_Solutions/Python/066._plus_one.md rename to docs/Leetcode_Solutions/066._plus_one.md diff --git a/docs/Leetcode_Solutions/Python/067._add_binary.md b/docs/Leetcode_Solutions/067._add_binary.md similarity index 100% rename from docs/Leetcode_Solutions/Python/067._add_binary.md rename to docs/Leetcode_Solutions/067._add_binary.md diff --git a/docs/Leetcode_Solutions/Python/069._sqrt(x).md b/docs/Leetcode_Solutions/069._sqrt(x).md similarity index 100% rename from docs/Leetcode_Solutions/Python/069._sqrt(x).md rename to docs/Leetcode_Solutions/069._sqrt(x).md diff --git a/docs/Leetcode_Solutions/Python/070. Climbing Stairs.md b/docs/Leetcode_Solutions/070. Climbing Stairs.md similarity index 100% rename from docs/Leetcode_Solutions/Python/070. Climbing Stairs.md rename to docs/Leetcode_Solutions/070. Climbing Stairs.md diff --git a/docs/Leetcode_Solutions/Python/072._edit_distance.md b/docs/Leetcode_Solutions/072._edit_distance.md similarity index 100% rename from docs/Leetcode_Solutions/Python/072._edit_distance.md rename to docs/Leetcode_Solutions/072._edit_distance.md diff --git a/docs/Leetcode_Solutions/Python/073. Set Matrix Zeroes.md b/docs/Leetcode_Solutions/073. Set Matrix Zeroes.md similarity index 100% rename from docs/Leetcode_Solutions/Python/073. Set Matrix Zeroes.md rename to docs/Leetcode_Solutions/073. Set Matrix Zeroes.md diff --git a/docs/Leetcode_Solutions/Python/074._search_a_2d_matrix.md b/docs/Leetcode_Solutions/074._search_a_2d_matrix.md similarity index 100% rename from docs/Leetcode_Solutions/Python/074._search_a_2d_matrix.md rename to docs/Leetcode_Solutions/074._search_a_2d_matrix.md diff --git a/docs/Leetcode_Solutions/Python/075._sort_colors.md b/docs/Leetcode_Solutions/075._sort_colors.md similarity index 100% rename from docs/Leetcode_Solutions/Python/075._sort_colors.md rename to docs/Leetcode_Solutions/075._sort_colors.md diff --git a/docs/Leetcode_Solutions/Python/076._Minimum_Window_Substring.md b/docs/Leetcode_Solutions/076._Minimum_Window_Substring.md similarity index 100% rename from docs/Leetcode_Solutions/Python/076._Minimum_Window_Substring.md rename to docs/Leetcode_Solutions/076._Minimum_Window_Substring.md diff --git a/docs/Leetcode_Solutions/Python/077._combinations.md b/docs/Leetcode_Solutions/077._combinations.md similarity index 100% rename from docs/Leetcode_Solutions/Python/077._combinations.md rename to docs/Leetcode_Solutions/077._combinations.md diff --git a/docs/Leetcode_Solutions/Python/078.Subsets .md b/docs/Leetcode_Solutions/078.Subsets .md similarity index 100% rename from docs/Leetcode_Solutions/Python/078.Subsets .md rename to docs/Leetcode_Solutions/078.Subsets .md diff --git a/docs/Leetcode_Solutions/Python/079._word_search.md b/docs/Leetcode_Solutions/079._word_search.md similarity index 100% rename from docs/Leetcode_Solutions/Python/079._word_search.md rename to docs/Leetcode_Solutions/079._word_search.md diff --git a/docs/Leetcode_Solutions/Python/082._remove_duplicates_from_sorted_list_ii.md b/docs/Leetcode_Solutions/082._remove_duplicates_from_sorted_list_ii.md similarity index 100% rename from docs/Leetcode_Solutions/Python/082._remove_duplicates_from_sorted_list_ii.md rename to docs/Leetcode_Solutions/082._remove_duplicates_from_sorted_list_ii.md diff --git a/docs/Leetcode_Solutions/Python/083._remove_duplicates_from_sorted_list.md b/docs/Leetcode_Solutions/083._remove_duplicates_from_sorted_list.md similarity index 100% rename from docs/Leetcode_Solutions/Python/083._remove_duplicates_from_sorted_list.md rename to docs/Leetcode_Solutions/083._remove_duplicates_from_sorted_list.md diff --git a/docs/Leetcode_Solutions/Python/086._partition_list.md b/docs/Leetcode_Solutions/086._partition_list.md similarity index 100% rename from docs/Leetcode_Solutions/Python/086._partition_list.md rename to docs/Leetcode_Solutions/086._partition_list.md diff --git a/docs/Leetcode_Solutions/Python/088._merge_sorted_array.md b/docs/Leetcode_Solutions/088._merge_sorted_array.md similarity index 100% rename from docs/Leetcode_Solutions/Python/088._merge_sorted_array.md rename to docs/Leetcode_Solutions/088._merge_sorted_array.md diff --git a/docs/Leetcode_Solutions/Python/089._gray_code.md b/docs/Leetcode_Solutions/089._gray_code.md similarity index 100% rename from docs/Leetcode_Solutions/Python/089._gray_code.md rename to docs/Leetcode_Solutions/089._gray_code.md diff --git a/docs/Leetcode_Solutions/Python/090._subsets_ii.md b/docs/Leetcode_Solutions/090._subsets_ii.md similarity index 100% rename from docs/Leetcode_Solutions/Python/090._subsets_ii.md rename to docs/Leetcode_Solutions/090._subsets_ii.md diff --git a/docs/Leetcode_Solutions/Python/091._decode_ways.md b/docs/Leetcode_Solutions/091._decode_ways.md similarity index 100% rename from docs/Leetcode_Solutions/Python/091._decode_ways.md rename to docs/Leetcode_Solutions/091._decode_ways.md diff --git a/docs/Leetcode_Solutions/Python/092._reverse_linked_list_ii.md b/docs/Leetcode_Solutions/092._reverse_linked_list_ii.md similarity index 100% rename from docs/Leetcode_Solutions/Python/092._reverse_linked_list_ii.md rename to docs/Leetcode_Solutions/092._reverse_linked_list_ii.md diff --git a/docs/Leetcode_Solutions/Python/093._restore_ip_addresses.md b/docs/Leetcode_Solutions/093._restore_ip_addresses.md similarity index 100% rename from docs/Leetcode_Solutions/Python/093._restore_ip_addresses.md rename to docs/Leetcode_Solutions/093._restore_ip_addresses.md diff --git a/docs/Leetcode_Solutions/Python/094._binary_tree_inorder_traversal.md b/docs/Leetcode_Solutions/094._binary_tree_inorder_traversal.md similarity index 100% rename from docs/Leetcode_Solutions/Python/094._binary_tree_inorder_traversal.md rename to docs/Leetcode_Solutions/094._binary_tree_inorder_traversal.md diff --git a/docs/Leetcode_Solutions/Python/096._unique_binary_search_trees.md b/docs/Leetcode_Solutions/096._unique_binary_search_trees.md similarity index 100% rename from docs/Leetcode_Solutions/Python/096._unique_binary_search_trees.md rename to docs/Leetcode_Solutions/096._unique_binary_search_trees.md diff --git a/docs/Leetcode_Solutions/Python/098._validate_binary_search_tree.md b/docs/Leetcode_Solutions/098._validate_binary_search_tree.md similarity index 100% rename from docs/Leetcode_Solutions/Python/098._validate_binary_search_tree.md rename to docs/Leetcode_Solutions/098._validate_binary_search_tree.md diff --git a/docs/Leetcode_Solutions/Python/100._same_tree.md b/docs/Leetcode_Solutions/100._same_tree.md similarity index 100% rename from docs/Leetcode_Solutions/Python/100._same_tree.md rename to docs/Leetcode_Solutions/100._same_tree.md diff --git a/docs/Leetcode_Solutions/Python/101._symmetric_tree.md b/docs/Leetcode_Solutions/101._symmetric_tree.md similarity index 100% rename from docs/Leetcode_Solutions/Python/101._symmetric_tree.md rename to docs/Leetcode_Solutions/101._symmetric_tree.md diff --git a/docs/Leetcode_Solutions/Python/102._binary_tree_level_order_traversal.md b/docs/Leetcode_Solutions/102._binary_tree_level_order_traversal.md similarity index 100% rename from docs/Leetcode_Solutions/Python/102._binary_tree_level_order_traversal.md rename to docs/Leetcode_Solutions/102._binary_tree_level_order_traversal.md diff --git a/docs/Leetcode_Solutions/Python/103._binary_tree_zigzag_level_order_traversal.md b/docs/Leetcode_Solutions/103._binary_tree_zigzag_level_order_traversal.md similarity index 100% rename from docs/Leetcode_Solutions/Python/103._binary_tree_zigzag_level_order_traversal.md rename to docs/Leetcode_Solutions/103._binary_tree_zigzag_level_order_traversal.md diff --git a/docs/Leetcode_Solutions/Python/104._maximum_depth_of_binary_tree.md b/docs/Leetcode_Solutions/104._maximum_depth_of_binary_tree.md similarity index 100% rename from docs/Leetcode_Solutions/Python/104._maximum_depth_of_binary_tree.md rename to docs/Leetcode_Solutions/104._maximum_depth_of_binary_tree.md diff --git a/docs/Leetcode_Solutions/Python/105._construct_binary_tree_from_preorder_and_inorder_traversal.md b/docs/Leetcode_Solutions/105._construct_binary_tree_from_preorder_and_inorder_traversal.md similarity index 100% rename from docs/Leetcode_Solutions/Python/105._construct_binary_tree_from_preorder_and_inorder_traversal.md rename to docs/Leetcode_Solutions/105._construct_binary_tree_from_preorder_and_inorder_traversal.md diff --git a/docs/Leetcode_Solutions/Python/106._construct_binary_tree_from_inorder_and_postorder_traversal.md b/docs/Leetcode_Solutions/106._construct_binary_tree_from_inorder_and_postorder_traversal.md similarity index 100% rename from docs/Leetcode_Solutions/Python/106._construct_binary_tree_from_inorder_and_postorder_traversal.md rename to docs/Leetcode_Solutions/106._construct_binary_tree_from_inorder_and_postorder_traversal.md diff --git a/docs/Leetcode_Solutions/Python/107._binary_tree_level_order_traversal_ii.md b/docs/Leetcode_Solutions/107._binary_tree_level_order_traversal_ii.md similarity index 100% rename from docs/Leetcode_Solutions/Python/107._binary_tree_level_order_traversal_ii.md rename to docs/Leetcode_Solutions/107._binary_tree_level_order_traversal_ii.md diff --git a/docs/Leetcode_Solutions/Python/108._convert_sorted_array_to_binary_search_tree.md b/docs/Leetcode_Solutions/108._convert_sorted_array_to_binary_search_tree.md similarity index 100% rename from docs/Leetcode_Solutions/Python/108._convert_sorted_array_to_binary_search_tree.md rename to docs/Leetcode_Solutions/108._convert_sorted_array_to_binary_search_tree.md diff --git a/docs/Leetcode_Solutions/Python/109._convert_sorted_list_to_binary_search_tree.md b/docs/Leetcode_Solutions/109._convert_sorted_list_to_binary_search_tree.md similarity index 100% rename from docs/Leetcode_Solutions/Python/109._convert_sorted_list_to_binary_search_tree.md rename to docs/Leetcode_Solutions/109._convert_sorted_list_to_binary_search_tree.md diff --git a/docs/Leetcode_Solutions/Python/110._balanced_binary_tree.md b/docs/Leetcode_Solutions/110._balanced_binary_tree.md similarity index 100% rename from docs/Leetcode_Solutions/Python/110._balanced_binary_tree.md rename to docs/Leetcode_Solutions/110._balanced_binary_tree.md diff --git a/docs/Leetcode_Solutions/Python/111._minimum_depth_of_binary_tree.md b/docs/Leetcode_Solutions/111._minimum_depth_of_binary_tree.md similarity index 100% rename from docs/Leetcode_Solutions/Python/111._minimum_depth_of_binary_tree.md rename to docs/Leetcode_Solutions/111._minimum_depth_of_binary_tree.md diff --git a/docs/Leetcode_Solutions/Python/112._path_sum.md b/docs/Leetcode_Solutions/112._path_sum.md similarity index 100% rename from docs/Leetcode_Solutions/Python/112._path_sum.md rename to docs/Leetcode_Solutions/112._path_sum.md diff --git a/docs/Leetcode_Solutions/Python/113._path_sum_ii.md b/docs/Leetcode_Solutions/113._path_sum_ii.md similarity index 100% rename from docs/Leetcode_Solutions/Python/113._path_sum_ii.md rename to docs/Leetcode_Solutions/113._path_sum_ii.md diff --git a/docs/Leetcode_Solutions/Python/114._flatten_binary_tree_to_linked_list.md b/docs/Leetcode_Solutions/114._flatten_binary_tree_to_linked_list.md similarity index 100% rename from docs/Leetcode_Solutions/Python/114._flatten_binary_tree_to_linked_list.md rename to docs/Leetcode_Solutions/114._flatten_binary_tree_to_linked_list.md diff --git a/docs/Leetcode_Solutions/Python/116._populating_next_right_pointers_in_each_node.md b/docs/Leetcode_Solutions/116._populating_next_right_pointers_in_each_node.md similarity index 100% rename from docs/Leetcode_Solutions/Python/116._populating_next_right_pointers_in_each_node.md rename to docs/Leetcode_Solutions/116._populating_next_right_pointers_in_each_node.md diff --git a/docs/Leetcode_Solutions/Python/118._pascal's_triangle.md b/docs/Leetcode_Solutions/118._pascal's_triangle.md similarity index 100% rename from docs/Leetcode_Solutions/Python/118._pascal's_triangle.md rename to docs/Leetcode_Solutions/118._pascal's_triangle.md diff --git a/docs/Leetcode_Solutions/Python/119. _Pascal's_Triangle_II.md b/docs/Leetcode_Solutions/119. _Pascal's_Triangle_II.md similarity index 100% rename from docs/Leetcode_Solutions/Python/119. _Pascal's_Triangle_II.md rename to docs/Leetcode_Solutions/119. _Pascal's_Triangle_II.md diff --git a/docs/Leetcode_Solutions/Python/120. Triangle.md b/docs/Leetcode_Solutions/120. Triangle.md similarity index 100% rename from docs/Leetcode_Solutions/Python/120. Triangle.md rename to docs/Leetcode_Solutions/120. Triangle.md diff --git a/docs/Leetcode_Solutions/Python/121._Best_Time_to_Buy_and_Sell_Stock.md b/docs/Leetcode_Solutions/121._Best_Time_to_Buy_and_Sell_Stock.md similarity index 100% rename from docs/Leetcode_Solutions/Python/121._Best_Time_to_Buy_and_Sell_Stock.md rename to docs/Leetcode_Solutions/121._Best_Time_to_Buy_and_Sell_Stock.md diff --git a/docs/Leetcode_Solutions/Python/124._Binary_Tree_Maximum_Path_Sum.md b/docs/Leetcode_Solutions/124._Binary_Tree_Maximum_Path_Sum.md similarity index 100% rename from docs/Leetcode_Solutions/Python/124._Binary_Tree_Maximum_Path_Sum.md rename to docs/Leetcode_Solutions/124._Binary_Tree_Maximum_Path_Sum.md diff --git a/docs/Leetcode_Solutions/Python/125._valid_palindrome.md b/docs/Leetcode_Solutions/125._valid_palindrome.md similarity index 100% rename from docs/Leetcode_Solutions/Python/125._valid_palindrome.md rename to docs/Leetcode_Solutions/125._valid_palindrome.md diff --git a/docs/Leetcode_Solutions/Python/126. Word Ladder II.md b/docs/Leetcode_Solutions/126. Word Ladder II.md similarity index 100% rename from docs/Leetcode_Solutions/Python/126. Word Ladder II.md rename to docs/Leetcode_Solutions/126. Word Ladder II.md diff --git a/docs/Leetcode_Solutions/Python/127._word_ladder.md b/docs/Leetcode_Solutions/127._word_ladder.md similarity index 100% rename from docs/Leetcode_Solutions/Python/127._word_ladder.md rename to docs/Leetcode_Solutions/127._word_ladder.md diff --git a/docs/Leetcode_Solutions/Python/128._Longest_Consecutive_Sequence.md b/docs/Leetcode_Solutions/128._Longest_Consecutive_Sequence.md similarity index 100% rename from docs/Leetcode_Solutions/Python/128._Longest_Consecutive_Sequence.md rename to docs/Leetcode_Solutions/128._Longest_Consecutive_Sequence.md diff --git a/docs/Leetcode_Solutions/Python/129._sum_root_to_leaf_numbers.md b/docs/Leetcode_Solutions/129._sum_root_to_leaf_numbers.md similarity index 100% rename from docs/Leetcode_Solutions/Python/129._sum_root_to_leaf_numbers.md rename to docs/Leetcode_Solutions/129._sum_root_to_leaf_numbers.md diff --git a/docs/Leetcode_Solutions/Python/130._surrounded_regions.md b/docs/Leetcode_Solutions/130._surrounded_regions.md similarity index 100% rename from docs/Leetcode_Solutions/Python/130._surrounded_regions.md rename to docs/Leetcode_Solutions/130._surrounded_regions.md diff --git a/docs/Leetcode_Solutions/Python/131._palindrome_partitioning.md b/docs/Leetcode_Solutions/131._palindrome_partitioning.md similarity index 100% rename from docs/Leetcode_Solutions/Python/131._palindrome_partitioning.md rename to docs/Leetcode_Solutions/131._palindrome_partitioning.md diff --git a/docs/Leetcode_Solutions/Python/133._clone_graph.md b/docs/Leetcode_Solutions/133._clone_graph.md similarity index 100% rename from docs/Leetcode_Solutions/Python/133._clone_graph.md rename to docs/Leetcode_Solutions/133._clone_graph.md diff --git a/docs/Leetcode_Solutions/Python/136._single_number.md b/docs/Leetcode_Solutions/136._single_number.md similarity index 100% rename from docs/Leetcode_Solutions/Python/136._single_number.md rename to docs/Leetcode_Solutions/136._single_number.md diff --git a/docs/Leetcode_Solutions/Python/139._word_break.md b/docs/Leetcode_Solutions/139._word_break.md similarity index 100% rename from docs/Leetcode_Solutions/Python/139._word_break.md rename to docs/Leetcode_Solutions/139._word_break.md diff --git a/docs/Leetcode_Solutions/Python/140._word_break_ii.md b/docs/Leetcode_Solutions/140._word_break_ii.md similarity index 100% rename from docs/Leetcode_Solutions/Python/140._word_break_ii.md rename to docs/Leetcode_Solutions/140._word_break_ii.md diff --git a/docs/Leetcode_Solutions/Python/141._linked_list_cycle.md b/docs/Leetcode_Solutions/141._linked_list_cycle.md similarity index 100% rename from docs/Leetcode_Solutions/Python/141._linked_list_cycle.md rename to docs/Leetcode_Solutions/141._linked_list_cycle.md diff --git a/docs/Leetcode_Solutions/Python/142_Linked_List_Cycle_II.md b/docs/Leetcode_Solutions/142_Linked_List_Cycle_II.md similarity index 100% rename from docs/Leetcode_Solutions/Python/142_Linked_List_Cycle_II.md rename to docs/Leetcode_Solutions/142_Linked_List_Cycle_II.md diff --git a/docs/Leetcode_Solutions/Python/143._reorder_list.md b/docs/Leetcode_Solutions/143._reorder_list.md similarity index 100% rename from docs/Leetcode_Solutions/Python/143._reorder_list.md rename to docs/Leetcode_Solutions/143._reorder_list.md diff --git a/docs/Leetcode_Solutions/Python/144._binary_tree_preorder_traversal.md b/docs/Leetcode_Solutions/144._binary_tree_preorder_traversal.md similarity index 100% rename from docs/Leetcode_Solutions/Python/144._binary_tree_preorder_traversal.md rename to docs/Leetcode_Solutions/144._binary_tree_preorder_traversal.md diff --git a/docs/Leetcode_Solutions/Python/145._binary_tree_postorder_traversal.md b/docs/Leetcode_Solutions/145._binary_tree_postorder_traversal.md similarity index 100% rename from docs/Leetcode_Solutions/Python/145._binary_tree_postorder_traversal.md rename to docs/Leetcode_Solutions/145._binary_tree_postorder_traversal.md diff --git a/docs/Leetcode_Solutions/Python/147._insertion_sort_list.md b/docs/Leetcode_Solutions/147._insertion_sort_list.md similarity index 100% rename from docs/Leetcode_Solutions/Python/147._insertion_sort_list.md rename to docs/Leetcode_Solutions/147._insertion_sort_list.md diff --git a/docs/Leetcode_Solutions/Python/148._sort_list.md b/docs/Leetcode_Solutions/148._sort_list.md similarity index 100% rename from docs/Leetcode_Solutions/Python/148._sort_list.md rename to docs/Leetcode_Solutions/148._sort_list.md diff --git a/docs/Leetcode_Solutions/Python/150._evaluate_reverse_polish_notation.md b/docs/Leetcode_Solutions/150._evaluate_reverse_polish_notation.md similarity index 100% rename from docs/Leetcode_Solutions/Python/150._evaluate_reverse_polish_notation.md rename to docs/Leetcode_Solutions/150._evaluate_reverse_polish_notation.md diff --git a/docs/Leetcode_Solutions/Python/151._reverse_words_in_a_string.md b/docs/Leetcode_Solutions/151._reverse_words_in_a_string.md similarity index 100% rename from docs/Leetcode_Solutions/Python/151._reverse_words_in_a_string.md rename to docs/Leetcode_Solutions/151._reverse_words_in_a_string.md diff --git a/docs/Leetcode_Solutions/Python/152._maximum_product_subarray.md b/docs/Leetcode_Solutions/152._maximum_product_subarray.md similarity index 100% rename from docs/Leetcode_Solutions/Python/152._maximum_product_subarray.md rename to docs/Leetcode_Solutions/152._maximum_product_subarray.md diff --git a/docs/Leetcode_Solutions/Python/153._find_minimum_in_rotated_sorted_array.md b/docs/Leetcode_Solutions/153._find_minimum_in_rotated_sorted_array.md similarity index 100% rename from docs/Leetcode_Solutions/Python/153._find_minimum_in_rotated_sorted_array.md rename to docs/Leetcode_Solutions/153._find_minimum_in_rotated_sorted_array.md diff --git a/docs/Leetcode_Solutions/Python/155._min_stack.md b/docs/Leetcode_Solutions/155._min_stack.md similarity index 100% rename from docs/Leetcode_Solutions/Python/155._min_stack.md rename to docs/Leetcode_Solutions/155._min_stack.md diff --git a/docs/Leetcode_Solutions/Python/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md b/docs/Leetcode_Solutions/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md similarity index 100% rename from docs/Leetcode_Solutions/Python/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md rename to docs/Leetcode_Solutions/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md diff --git a/docs/Leetcode_Solutions/Python/160._intersection_of_two_linked_lists.md b/docs/Leetcode_Solutions/160._intersection_of_two_linked_lists.md similarity index 100% rename from docs/Leetcode_Solutions/Python/160._intersection_of_two_linked_lists.md rename to docs/Leetcode_Solutions/160._intersection_of_two_linked_lists.md diff --git a/docs/Leetcode_Solutions/Python/162._find_peak_element.md b/docs/Leetcode_Solutions/162._find_peak_element.md similarity index 100% rename from docs/Leetcode_Solutions/Python/162._find_peak_element.md rename to docs/Leetcode_Solutions/162._find_peak_element.md diff --git a/docs/Leetcode_Solutions/Python/165._compare_version_numbers.md b/docs/Leetcode_Solutions/165._compare_version_numbers.md similarity index 100% rename from docs/Leetcode_Solutions/Python/165._compare_version_numbers.md rename to docs/Leetcode_Solutions/165._compare_version_numbers.md diff --git a/docs/Leetcode_Solutions/Python/166._Fraction_to_Recurring_Decimal.md b/docs/Leetcode_Solutions/166._Fraction_to_Recurring_Decimal.md similarity index 100% rename from docs/Leetcode_Solutions/Python/166._Fraction_to_Recurring_Decimal.md rename to docs/Leetcode_Solutions/166._Fraction_to_Recurring_Decimal.md diff --git a/docs/Leetcode_Solutions/Python/167._two_sum_ii_-_input_array_is_sorted.md b/docs/Leetcode_Solutions/167._two_sum_ii_-_input_array_is_sorted.md similarity index 100% rename from docs/Leetcode_Solutions/Python/167._two_sum_ii_-_input_array_is_sorted.md rename to docs/Leetcode_Solutions/167._two_sum_ii_-_input_array_is_sorted.md diff --git a/docs/Leetcode_Solutions/Python/168._excel_sheet_column_title.md b/docs/Leetcode_Solutions/168._excel_sheet_column_title.md similarity index 100% rename from docs/Leetcode_Solutions/Python/168._excel_sheet_column_title.md rename to docs/Leetcode_Solutions/168._excel_sheet_column_title.md diff --git a/docs/Leetcode_Solutions/Python/169._majority_element.md b/docs/Leetcode_Solutions/169._majority_element.md similarity index 100% rename from docs/Leetcode_Solutions/Python/169._majority_element.md rename to docs/Leetcode_Solutions/169._majority_element.md diff --git a/docs/Leetcode_Solutions/Python/171._excel_sheet_column_number.md b/docs/Leetcode_Solutions/171._excel_sheet_column_number.md similarity index 100% rename from docs/Leetcode_Solutions/Python/171._excel_sheet_column_number.md rename to docs/Leetcode_Solutions/171._excel_sheet_column_number.md diff --git a/docs/Leetcode_Solutions/Python/173._binary_search_tree_iterator.md b/docs/Leetcode_Solutions/173._binary_search_tree_iterator.md similarity index 100% rename from docs/Leetcode_Solutions/Python/173._binary_search_tree_iterator.md rename to docs/Leetcode_Solutions/173._binary_search_tree_iterator.md diff --git a/docs/Leetcode_Solutions/Python/179._Largest_Number.md b/docs/Leetcode_Solutions/179._Largest_Number.md similarity index 100% rename from docs/Leetcode_Solutions/Python/179._Largest_Number.md rename to docs/Leetcode_Solutions/179._Largest_Number.md diff --git a/docs/Leetcode_Solutions/Python/189._rotate_array.md b/docs/Leetcode_Solutions/189._rotate_array.md similarity index 100% rename from docs/Leetcode_Solutions/Python/189._rotate_array.md rename to docs/Leetcode_Solutions/189._rotate_array.md diff --git a/docs/Leetcode_Solutions/Python/191._number_of_1_bits.md b/docs/Leetcode_Solutions/191._number_of_1_bits.md similarity index 100% rename from docs/Leetcode_Solutions/Python/191._number_of_1_bits.md rename to docs/Leetcode_Solutions/191._number_of_1_bits.md diff --git a/docs/Leetcode_Solutions/Python/198._house_robber.md b/docs/Leetcode_Solutions/198._house_robber.md similarity index 100% rename from docs/Leetcode_Solutions/Python/198._house_robber.md rename to docs/Leetcode_Solutions/198._house_robber.md diff --git a/docs/Leetcode_Solutions/Python/199._binary_tree_right_side_view.md b/docs/Leetcode_Solutions/199._binary_tree_right_side_view.md similarity index 100% rename from docs/Leetcode_Solutions/Python/199._binary_tree_right_side_view.md rename to docs/Leetcode_Solutions/199._binary_tree_right_side_view.md diff --git a/docs/Leetcode_Solutions/Python/200._number_of_islands.md b/docs/Leetcode_Solutions/200._number_of_islands.md similarity index 100% rename from docs/Leetcode_Solutions/Python/200._number_of_islands.md rename to docs/Leetcode_Solutions/200._number_of_islands.md diff --git a/docs/Leetcode_Solutions/Python/203._remove_linked_list_elements.md b/docs/Leetcode_Solutions/203._remove_linked_list_elements.md similarity index 100% rename from docs/Leetcode_Solutions/Python/203._remove_linked_list_elements.md rename to docs/Leetcode_Solutions/203._remove_linked_list_elements.md diff --git a/docs/Leetcode_Solutions/Python/204._count_primes.md b/docs/Leetcode_Solutions/204._count_primes.md similarity index 100% rename from docs/Leetcode_Solutions/Python/204._count_primes.md rename to docs/Leetcode_Solutions/204._count_primes.md diff --git a/docs/Leetcode_Solutions/Python/205._isomorphic_strings.md b/docs/Leetcode_Solutions/205._isomorphic_strings.md similarity index 100% rename from docs/Leetcode_Solutions/Python/205._isomorphic_strings.md rename to docs/Leetcode_Solutions/205._isomorphic_strings.md diff --git a/docs/Leetcode_Solutions/Python/206._reverse_linked_list.md b/docs/Leetcode_Solutions/206._reverse_linked_list.md similarity index 100% rename from docs/Leetcode_Solutions/Python/206._reverse_linked_list.md rename to docs/Leetcode_Solutions/206._reverse_linked_list.md diff --git a/docs/Leetcode_Solutions/Python/207._course_schedule.md b/docs/Leetcode_Solutions/207._course_schedule.md similarity index 100% rename from docs/Leetcode_Solutions/Python/207._course_schedule.md rename to docs/Leetcode_Solutions/207._course_schedule.md diff --git a/docs/Leetcode_Solutions/Python/208._implement_trie_(prefix_tree).md b/docs/Leetcode_Solutions/208._implement_trie_(prefix_tree).md similarity index 100% rename from docs/Leetcode_Solutions/Python/208._implement_trie_(prefix_tree).md rename to docs/Leetcode_Solutions/208._implement_trie_(prefix_tree).md diff --git a/docs/Leetcode_Solutions/Python/210._course_schedule_ii.md b/docs/Leetcode_Solutions/210._course_schedule_ii.md similarity index 100% rename from docs/Leetcode_Solutions/Python/210._course_schedule_ii.md rename to docs/Leetcode_Solutions/210._course_schedule_ii.md diff --git a/docs/Leetcode_Solutions/Python/211. Add and Search Word - Data structure design.md b/docs/Leetcode_Solutions/211. Add and Search Word - Data structure design.md similarity index 100% rename from docs/Leetcode_Solutions/Python/211. Add and Search Word - Data structure design.md rename to docs/Leetcode_Solutions/211. Add and Search Word - Data structure design.md diff --git a/docs/Leetcode_Solutions/Python/213._house_robber_ii.md b/docs/Leetcode_Solutions/213._house_robber_ii.md similarity index 100% rename from docs/Leetcode_Solutions/Python/213._house_robber_ii.md rename to docs/Leetcode_Solutions/213._house_robber_ii.md diff --git a/docs/Leetcode_Solutions/Python/216._combination_sum_iii.md b/docs/Leetcode_Solutions/216._combination_sum_iii.md similarity index 100% rename from docs/Leetcode_Solutions/Python/216._combination_sum_iii.md rename to docs/Leetcode_Solutions/216._combination_sum_iii.md diff --git a/docs/Leetcode_Solutions/Python/217._contains_duplicate.md b/docs/Leetcode_Solutions/217._contains_duplicate.md similarity index 100% rename from docs/Leetcode_Solutions/Python/217._contains_duplicate.md rename to docs/Leetcode_Solutions/217._contains_duplicate.md diff --git a/docs/Leetcode_Solutions/Python/218._The _Skyline_Problem .md b/docs/Leetcode_Solutions/218._The _Skyline_Problem .md similarity index 100% rename from docs/Leetcode_Solutions/Python/218._The _Skyline_Problem .md rename to docs/Leetcode_Solutions/218._The _Skyline_Problem .md diff --git a/docs/Leetcode_Solutions/Python/219._contains_duplicate_ii.md b/docs/Leetcode_Solutions/219._contains_duplicate_ii.md similarity index 100% rename from docs/Leetcode_Solutions/Python/219._contains_duplicate_ii.md rename to docs/Leetcode_Solutions/219._contains_duplicate_ii.md diff --git a/docs/Leetcode_Solutions/Python/221._maximal_square.md b/docs/Leetcode_Solutions/221._maximal_square.md similarity index 100% rename from docs/Leetcode_Solutions/Python/221._maximal_square.md rename to docs/Leetcode_Solutions/221._maximal_square.md diff --git a/docs/Leetcode_Solutions/Python/222._count_complete_tree_nodes.md b/docs/Leetcode_Solutions/222._count_complete_tree_nodes.md similarity index 100% rename from docs/Leetcode_Solutions/Python/222._count_complete_tree_nodes.md rename to docs/Leetcode_Solutions/222._count_complete_tree_nodes.md diff --git a/docs/Leetcode_Solutions/Python/223._rectangle_area.md b/docs/Leetcode_Solutions/223._rectangle_area.md similarity index 100% rename from docs/Leetcode_Solutions/Python/223._rectangle_area.md rename to docs/Leetcode_Solutions/223._rectangle_area.md diff --git a/docs/Leetcode_Solutions/Python/224. Basic Calculator .md b/docs/Leetcode_Solutions/224. Basic Calculator .md similarity index 100% rename from docs/Leetcode_Solutions/Python/224. Basic Calculator .md rename to docs/Leetcode_Solutions/224. Basic Calculator .md diff --git a/docs/Leetcode_Solutions/Python/225._implement_stack_using_queues.md b/docs/Leetcode_Solutions/225._implement_stack_using_queues.md similarity index 100% rename from docs/Leetcode_Solutions/Python/225._implement_stack_using_queues.md rename to docs/Leetcode_Solutions/225._implement_stack_using_queues.md diff --git a/docs/Leetcode_Solutions/Python/226._invert_binary_tree.md b/docs/Leetcode_Solutions/226._invert_binary_tree.md similarity index 100% rename from docs/Leetcode_Solutions/Python/226._invert_binary_tree.md rename to docs/Leetcode_Solutions/226._invert_binary_tree.md diff --git a/docs/Leetcode_Solutions/Python/227._basic_calculator_ii.md b/docs/Leetcode_Solutions/227._basic_calculator_ii.md similarity index 100% rename from docs/Leetcode_Solutions/Python/227._basic_calculator_ii.md rename to docs/Leetcode_Solutions/227._basic_calculator_ii.md diff --git a/docs/Leetcode_Solutions/Python/228._summary_ranges.md b/docs/Leetcode_Solutions/228._summary_ranges.md similarity index 100% rename from docs/Leetcode_Solutions/Python/228._summary_ranges.md rename to docs/Leetcode_Solutions/228._summary_ranges.md diff --git a/docs/Leetcode_Solutions/Python/229._majority_element_ii.md b/docs/Leetcode_Solutions/229._majority_element_ii.md similarity index 100% rename from docs/Leetcode_Solutions/Python/229._majority_element_ii.md rename to docs/Leetcode_Solutions/229._majority_element_ii.md diff --git a/docs/Leetcode_Solutions/Python/230._kth_smallest_element_in_a_bst.md b/docs/Leetcode_Solutions/230._kth_smallest_element_in_a_bst.md similarity index 100% rename from docs/Leetcode_Solutions/Python/230._kth_smallest_element_in_a_bst.md rename to docs/Leetcode_Solutions/230._kth_smallest_element_in_a_bst.md diff --git a/docs/Leetcode_Solutions/Python/231. _Power_of_Two.md b/docs/Leetcode_Solutions/231. _Power_of_Two.md similarity index 100% rename from docs/Leetcode_Solutions/Python/231. _Power_of_Two.md rename to docs/Leetcode_Solutions/231. _Power_of_Two.md diff --git a/docs/Leetcode_Solutions/Python/232._implement_queue_using_stacks.md b/docs/Leetcode_Solutions/232._implement_queue_using_stacks.md similarity index 100% rename from docs/Leetcode_Solutions/Python/232._implement_queue_using_stacks.md rename to docs/Leetcode_Solutions/232._implement_queue_using_stacks.md diff --git a/docs/Leetcode_Solutions/Python/234._palindrome_linked_list.md b/docs/Leetcode_Solutions/234._palindrome_linked_list.md similarity index 100% rename from docs/Leetcode_Solutions/Python/234._palindrome_linked_list.md rename to docs/Leetcode_Solutions/234._palindrome_linked_list.md diff --git a/docs/Leetcode_Solutions/Python/235._lowest_common_ancestor_of_a_binary_search_tree.md b/docs/Leetcode_Solutions/235._lowest_common_ancestor_of_a_binary_search_tree.md similarity index 100% rename from docs/Leetcode_Solutions/Python/235._lowest_common_ancestor_of_a_binary_search_tree.md rename to docs/Leetcode_Solutions/235._lowest_common_ancestor_of_a_binary_search_tree.md diff --git a/docs/Leetcode_Solutions/Python/236._lowest_common_ancestor_of_a_binary_tree.md b/docs/Leetcode_Solutions/236._lowest_common_ancestor_of_a_binary_tree.md similarity index 100% rename from docs/Leetcode_Solutions/Python/236._lowest_common_ancestor_of_a_binary_tree.md rename to docs/Leetcode_Solutions/236._lowest_common_ancestor_of_a_binary_tree.md diff --git a/docs/Leetcode_Solutions/Python/237._delete_node_in_a_linked_list.md b/docs/Leetcode_Solutions/237._delete_node_in_a_linked_list.md similarity index 100% rename from docs/Leetcode_Solutions/Python/237._delete_node_in_a_linked_list.md rename to docs/Leetcode_Solutions/237._delete_node_in_a_linked_list.md diff --git a/docs/Leetcode_Solutions/Python/238._product_of_array_except_self.md b/docs/Leetcode_Solutions/238._product_of_array_except_self.md similarity index 100% rename from docs/Leetcode_Solutions/Python/238._product_of_array_except_self.md rename to docs/Leetcode_Solutions/238._product_of_array_except_self.md diff --git a/docs/Leetcode_Solutions/Python/240._search_a_2d_matrix_ii.md b/docs/Leetcode_Solutions/240._search_a_2d_matrix_ii.md similarity index 100% rename from docs/Leetcode_Solutions/Python/240._search_a_2d_matrix_ii.md rename to docs/Leetcode_Solutions/240._search_a_2d_matrix_ii.md diff --git a/docs/Leetcode_Solutions/Python/242._valid_anagram.md b/docs/Leetcode_Solutions/242._valid_anagram.md similarity index 100% rename from docs/Leetcode_Solutions/Python/242._valid_anagram.md rename to docs/Leetcode_Solutions/242._valid_anagram.md diff --git a/docs/Leetcode_Solutions/Python/252. Meeting Rooms.md b/docs/Leetcode_Solutions/252. Meeting Rooms.md similarity index 100% rename from docs/Leetcode_Solutions/Python/252. Meeting Rooms.md rename to docs/Leetcode_Solutions/252. Meeting Rooms.md diff --git a/docs/Leetcode_Solutions/Python/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md b/docs/Leetcode_Solutions/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md similarity index 100% rename from docs/Leetcode_Solutions/Python/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md rename to docs/Leetcode_Solutions/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md diff --git a/docs/Leetcode_Solutions/Python/256. Paint House.md b/docs/Leetcode_Solutions/256. Paint House.md similarity index 100% rename from docs/Leetcode_Solutions/Python/256. Paint House.md rename to docs/Leetcode_Solutions/256. Paint House.md diff --git a/docs/Leetcode_Solutions/Python/257._binary_tree_paths.md b/docs/Leetcode_Solutions/257._binary_tree_paths.md similarity index 100% rename from docs/Leetcode_Solutions/Python/257._binary_tree_paths.md rename to docs/Leetcode_Solutions/257._binary_tree_paths.md diff --git a/docs/Leetcode_Solutions/Python/258_ Add_Digits.md b/docs/Leetcode_Solutions/258_ Add_Digits.md similarity index 100% rename from docs/Leetcode_Solutions/Python/258_ Add_Digits.md rename to docs/Leetcode_Solutions/258_ Add_Digits.md diff --git a/docs/Leetcode_Solutions/Python/261. Graph Valid Tree.md b/docs/Leetcode_Solutions/261. Graph Valid Tree.md similarity index 100% rename from docs/Leetcode_Solutions/Python/261. Graph Valid Tree.md rename to docs/Leetcode_Solutions/261. Graph Valid Tree.md diff --git a/docs/Leetcode_Solutions/Python/263._ugly_number.md b/docs/Leetcode_Solutions/263._ugly_number.md similarity index 100% rename from docs/Leetcode_Solutions/Python/263._ugly_number.md rename to docs/Leetcode_Solutions/263._ugly_number.md diff --git a/docs/Leetcode_Solutions/Python/264._ugly_number_ii.md b/docs/Leetcode_Solutions/264._ugly_number_ii.md similarity index 100% rename from docs/Leetcode_Solutions/Python/264._ugly_number_ii.md rename to docs/Leetcode_Solutions/264._ugly_number_ii.md diff --git a/docs/Leetcode_Solutions/Python/265. Paint House II.md b/docs/Leetcode_Solutions/265. Paint House II.md similarity index 100% rename from docs/Leetcode_Solutions/Python/265. Paint House II.md rename to docs/Leetcode_Solutions/265. Paint House II.md diff --git a/docs/Leetcode_Solutions/Python/266. Palindrome Permutation.md b/docs/Leetcode_Solutions/266. Palindrome Permutation.md similarity index 100% rename from docs/Leetcode_Solutions/Python/266. Palindrome Permutation.md rename to docs/Leetcode_Solutions/266. Palindrome Permutation.md diff --git a/docs/Leetcode_Solutions/Python/267. Palindrome Permutation II.md b/docs/Leetcode_Solutions/267. Palindrome Permutation II.md similarity index 100% rename from docs/Leetcode_Solutions/Python/267. Palindrome Permutation II.md rename to docs/Leetcode_Solutions/267. Palindrome Permutation II.md diff --git a/docs/Leetcode_Solutions/Python/268._missing_number.md b/docs/Leetcode_Solutions/268._missing_number.md similarity index 100% rename from docs/Leetcode_Solutions/Python/268._missing_number.md rename to docs/Leetcode_Solutions/268._missing_number.md diff --git a/docs/Leetcode_Solutions/Python/270. Closest Binary Search Tree Value.md b/docs/Leetcode_Solutions/270. Closest Binary Search Tree Value.md similarity index 100% rename from docs/Leetcode_Solutions/Python/270. Closest Binary Search Tree Value.md rename to docs/Leetcode_Solutions/270. Closest Binary Search Tree Value.md diff --git a/docs/Leetcode_Solutions/Python/276. Paint Fence.md b/docs/Leetcode_Solutions/276. Paint Fence.md similarity index 100% rename from docs/Leetcode_Solutions/Python/276. Paint Fence.md rename to docs/Leetcode_Solutions/276. Paint Fence.md diff --git a/docs/Leetcode_Solutions/Python/277. Find the Celebrity.md b/docs/Leetcode_Solutions/277. Find the Celebrity.md similarity index 100% rename from docs/Leetcode_Solutions/Python/277. Find the Celebrity.md rename to docs/Leetcode_Solutions/277. Find the Celebrity.md diff --git a/docs/Leetcode_Solutions/Python/278._First_Bad _Version.md b/docs/Leetcode_Solutions/278._First_Bad _Version.md similarity index 100% rename from docs/Leetcode_Solutions/Python/278._First_Bad _Version.md rename to docs/Leetcode_Solutions/278._First_Bad _Version.md diff --git a/docs/Leetcode_Solutions/Python/279._perfect_squares.md b/docs/Leetcode_Solutions/279._perfect_squares.md similarity index 100% rename from docs/Leetcode_Solutions/Python/279._perfect_squares.md rename to docs/Leetcode_Solutions/279._perfect_squares.md diff --git a/docs/Leetcode_Solutions/Python/280._Wiggle_Sort.md b/docs/Leetcode_Solutions/280._Wiggle_Sort.md similarity index 100% rename from docs/Leetcode_Solutions/Python/280._Wiggle_Sort.md rename to docs/Leetcode_Solutions/280._Wiggle_Sort.md diff --git a/docs/Leetcode_Solutions/Python/283._move_zeroes.md b/docs/Leetcode_Solutions/283._move_zeroes.md similarity index 100% rename from docs/Leetcode_Solutions/Python/283._move_zeroes.md rename to docs/Leetcode_Solutions/283._move_zeroes.md diff --git a/docs/Leetcode_Solutions/Python/285._inorder_successor_in_bst.md b/docs/Leetcode_Solutions/285._inorder_successor_in_bst.md similarity index 100% rename from docs/Leetcode_Solutions/Python/285._inorder_successor_in_bst.md rename to docs/Leetcode_Solutions/285._inorder_successor_in_bst.md diff --git a/docs/Leetcode_Solutions/Python/286. Walls and Gates.md b/docs/Leetcode_Solutions/286. Walls and Gates.md similarity index 100% rename from docs/Leetcode_Solutions/Python/286. Walls and Gates.md rename to docs/Leetcode_Solutions/286. Walls and Gates.md diff --git a/docs/Leetcode_Solutions/Python/289._game_of_life.md b/docs/Leetcode_Solutions/289._game_of_life.md similarity index 100% rename from docs/Leetcode_Solutions/Python/289._game_of_life.md rename to docs/Leetcode_Solutions/289._game_of_life.md diff --git a/docs/Leetcode_Solutions/Python/290._word_pattern.md b/docs/Leetcode_Solutions/290._word_pattern.md similarity index 100% rename from docs/Leetcode_Solutions/Python/290._word_pattern.md rename to docs/Leetcode_Solutions/290._word_pattern.md diff --git a/docs/Leetcode_Solutions/Python/292._nim_game.md b/docs/Leetcode_Solutions/292._nim_game.md similarity index 100% rename from docs/Leetcode_Solutions/Python/292._nim_game.md rename to docs/Leetcode_Solutions/292._nim_game.md diff --git a/docs/Leetcode_Solutions/Python/293._Flip_Game.md b/docs/Leetcode_Solutions/293._Flip_Game.md similarity index 100% rename from docs/Leetcode_Solutions/Python/293._Flip_Game.md rename to docs/Leetcode_Solutions/293._Flip_Game.md diff --git a/docs/Leetcode_Solutions/Python/296. Best Meeting Point.md b/docs/Leetcode_Solutions/296. Best Meeting Point.md similarity index 100% rename from docs/Leetcode_Solutions/Python/296. Best Meeting Point.md rename to docs/Leetcode_Solutions/296. Best Meeting Point.md diff --git a/docs/Leetcode_Solutions/Python/298. Binary Tree Longest Consecutive Sequence.md b/docs/Leetcode_Solutions/298. Binary Tree Longest Consecutive Sequence.md similarity index 100% rename from docs/Leetcode_Solutions/Python/298. Binary Tree Longest Consecutive Sequence.md rename to docs/Leetcode_Solutions/298. Binary Tree Longest Consecutive Sequence.md diff --git a/docs/Leetcode_Solutions/Python/299._bulls_and_cows.md b/docs/Leetcode_Solutions/299._bulls_and_cows.md similarity index 100% rename from docs/Leetcode_Solutions/Python/299._bulls_and_cows.md rename to docs/Leetcode_Solutions/299._bulls_and_cows.md diff --git a/docs/Leetcode_Solutions/Python/300._longest_increasing_subsequence.md b/docs/Leetcode_Solutions/300._longest_increasing_subsequence.md similarity index 100% rename from docs/Leetcode_Solutions/Python/300._longest_increasing_subsequence.md rename to docs/Leetcode_Solutions/300._longest_increasing_subsequence.md diff --git a/docs/Leetcode_Solutions/Python/303._range_sum_query_-_immutable.md b/docs/Leetcode_Solutions/303._range_sum_query_-_immutable.md similarity index 100% rename from docs/Leetcode_Solutions/Python/303._range_sum_query_-_immutable.md rename to docs/Leetcode_Solutions/303._range_sum_query_-_immutable.md diff --git a/docs/Leetcode_Solutions/Python/316._Remove_Duplicate_Letters.md b/docs/Leetcode_Solutions/316._Remove_Duplicate_Letters.md similarity index 100% rename from docs/Leetcode_Solutions/Python/316._Remove_Duplicate_Letters.md rename to docs/Leetcode_Solutions/316._Remove_Duplicate_Letters.md diff --git a/docs/Leetcode_Solutions/Python/319._Bulb_Switcher.md b/docs/Leetcode_Solutions/319._Bulb_Switcher.md similarity index 100% rename from docs/Leetcode_Solutions/Python/319._Bulb_Switcher.md rename to docs/Leetcode_Solutions/319._Bulb_Switcher.md diff --git a/docs/Leetcode_Solutions/Python/322. Coin Change.md b/docs/Leetcode_Solutions/322. Coin Change.md similarity index 100% rename from docs/Leetcode_Solutions/Python/322. Coin Change.md rename to docs/Leetcode_Solutions/322. Coin Change.md diff --git a/docs/Leetcode_Solutions/Python/323. Number of Connected Components in an Undirected Graph.md b/docs/Leetcode_Solutions/323. Number of Connected Components in an Undirected Graph.md similarity index 100% rename from docs/Leetcode_Solutions/Python/323. Number of Connected Components in an Undirected Graph.md rename to docs/Leetcode_Solutions/323. Number of Connected Components in an Undirected Graph.md diff --git a/docs/Leetcode_Solutions/Python/324._Wiggle_Sort_II.md b/docs/Leetcode_Solutions/324._Wiggle_Sort_II.md similarity index 100% rename from docs/Leetcode_Solutions/Python/324._Wiggle_Sort_II.md rename to docs/Leetcode_Solutions/324._Wiggle_Sort_II.md diff --git a/docs/Leetcode_Solutions/Python/326._power_of_three.md b/docs/Leetcode_Solutions/326._power_of_three.md similarity index 100% rename from docs/Leetcode_Solutions/Python/326._power_of_three.md rename to docs/Leetcode_Solutions/326._power_of_three.md diff --git a/docs/Leetcode_Solutions/Python/328._odd_even_linked_list.md b/docs/Leetcode_Solutions/328._odd_even_linked_list.md similarity index 100% rename from docs/Leetcode_Solutions/Python/328._odd_even_linked_list.md rename to docs/Leetcode_Solutions/328._odd_even_linked_list.md diff --git a/docs/Leetcode_Solutions/Python/334._increasing_triplet_subsequence.md b/docs/Leetcode_Solutions/334._increasing_triplet_subsequence.md similarity index 100% rename from docs/Leetcode_Solutions/Python/334._increasing_triplet_subsequence.md rename to docs/Leetcode_Solutions/334._increasing_triplet_subsequence.md diff --git a/docs/Leetcode_Solutions/Python/337._house_robber_iii.md b/docs/Leetcode_Solutions/337._house_robber_iii.md similarity index 100% rename from docs/Leetcode_Solutions/Python/337._house_robber_iii.md rename to docs/Leetcode_Solutions/337._house_robber_iii.md diff --git a/docs/Leetcode_Solutions/Python/338. Counting Bits.md b/docs/Leetcode_Solutions/338. Counting Bits.md similarity index 100% rename from docs/Leetcode_Solutions/Python/338. Counting Bits.md rename to docs/Leetcode_Solutions/338. Counting Bits.md diff --git a/docs/Leetcode_Solutions/Python/339. Nested List Weight Sum.md b/docs/Leetcode_Solutions/339. Nested List Weight Sum.md similarity index 100% rename from docs/Leetcode_Solutions/Python/339. Nested List Weight Sum.md rename to docs/Leetcode_Solutions/339. Nested List Weight Sum.md diff --git a/docs/Leetcode_Solutions/Python/341._Flatten_Nested_List_Iterator.md b/docs/Leetcode_Solutions/341._Flatten_Nested_List_Iterator.md similarity index 100% rename from docs/Leetcode_Solutions/Python/341._Flatten_Nested_List_Iterator.md rename to docs/Leetcode_Solutions/341._Flatten_Nested_List_Iterator.md diff --git a/docs/Leetcode_Solutions/Python/342._Power_of_Four.md b/docs/Leetcode_Solutions/342._Power_of_Four.md similarity index 100% rename from docs/Leetcode_Solutions/Python/342._Power_of_Four.md rename to docs/Leetcode_Solutions/342._Power_of_Four.md diff --git a/docs/Leetcode_Solutions/Python/344._reverse_string.md b/docs/Leetcode_Solutions/344._reverse_string.md similarity index 100% rename from docs/Leetcode_Solutions/Python/344._reverse_string.md rename to docs/Leetcode_Solutions/344._reverse_string.md diff --git a/docs/Leetcode_Solutions/Python/345._Reverse_Vowels_of_a_String.md b/docs/Leetcode_Solutions/345._Reverse_Vowels_of_a_String.md similarity index 100% rename from docs/Leetcode_Solutions/Python/345._Reverse_Vowels_of_a_String.md rename to docs/Leetcode_Solutions/345._Reverse_Vowels_of_a_String.md diff --git a/docs/Leetcode_Solutions/Python/349._intersection_of_two_arrays.md b/docs/Leetcode_Solutions/349._intersection_of_two_arrays.md similarity index 100% rename from docs/Leetcode_Solutions/Python/349._intersection_of_two_arrays.md rename to docs/Leetcode_Solutions/349._intersection_of_two_arrays.md diff --git a/docs/Leetcode_Solutions/Python/350._intersection_of_two_arrays_ii.md b/docs/Leetcode_Solutions/350._intersection_of_two_arrays_ii.md similarity index 100% rename from docs/Leetcode_Solutions/Python/350._intersection_of_two_arrays_ii.md rename to docs/Leetcode_Solutions/350._intersection_of_two_arrays_ii.md diff --git a/docs/Leetcode_Solutions/Python/353. Design Snake Game.md b/docs/Leetcode_Solutions/353. Design Snake Game.md similarity index 100% rename from docs/Leetcode_Solutions/Python/353. Design Snake Game.md rename to docs/Leetcode_Solutions/353. Design Snake Game.md diff --git a/docs/Leetcode_Solutions/Python/361._Bomb_Enemy.md b/docs/Leetcode_Solutions/361._Bomb_Enemy.md similarity index 100% rename from docs/Leetcode_Solutions/Python/361._Bomb_Enemy.md rename to docs/Leetcode_Solutions/361._Bomb_Enemy.md diff --git a/docs/Leetcode_Solutions/Python/364. Nested List Weight Sum II.md b/docs/Leetcode_Solutions/364. Nested List Weight Sum II.md similarity index 100% rename from docs/Leetcode_Solutions/Python/364. Nested List Weight Sum II.md rename to docs/Leetcode_Solutions/364. Nested List Weight Sum II.md diff --git a/docs/Leetcode_Solutions/Python/366. Find Leaves of Binary Tree.md b/docs/Leetcode_Solutions/366. Find Leaves of Binary Tree.md similarity index 100% rename from docs/Leetcode_Solutions/Python/366. Find Leaves of Binary Tree.md rename to docs/Leetcode_Solutions/366. Find Leaves of Binary Tree.md diff --git a/docs/Leetcode_Solutions/Python/367._valid_perfect_square.md b/docs/Leetcode_Solutions/367._valid_perfect_square.md similarity index 100% rename from docs/Leetcode_Solutions/Python/367._valid_perfect_square.md rename to docs/Leetcode_Solutions/367._valid_perfect_square.md diff --git a/docs/Leetcode_Solutions/Python/369.Plus One Linked List.md b/docs/Leetcode_Solutions/369.Plus One Linked List.md similarity index 100% rename from docs/Leetcode_Solutions/Python/369.Plus One Linked List.md rename to docs/Leetcode_Solutions/369.Plus One Linked List.md diff --git a/docs/Leetcode_Solutions/Python/371._sum_of_two_integers.md b/docs/Leetcode_Solutions/371._sum_of_two_integers.md similarity index 100% rename from docs/Leetcode_Solutions/Python/371._sum_of_two_integers.md rename to docs/Leetcode_Solutions/371._sum_of_two_integers.md diff --git a/docs/Leetcode_Solutions/Python/374._Guess_Number_Higher_or_Lower.md b/docs/Leetcode_Solutions/374._Guess_Number_Higher_or_Lower.md similarity index 100% rename from docs/Leetcode_Solutions/Python/374._Guess_Number_Higher_or_Lower.md rename to docs/Leetcode_Solutions/374._Guess_Number_Higher_or_Lower.md diff --git a/docs/Leetcode_Solutions/Python/377._combination_sum_iv.md b/docs/Leetcode_Solutions/377._combination_sum_iv.md similarity index 100% rename from docs/Leetcode_Solutions/Python/377._combination_sum_iv.md rename to docs/Leetcode_Solutions/377._combination_sum_iv.md diff --git a/docs/Leetcode_Solutions/Python/378._kth_smallest_element_in_a_sorted_matrix.md b/docs/Leetcode_Solutions/378._kth_smallest_element_in_a_sorted_matrix.md similarity index 100% rename from docs/Leetcode_Solutions/Python/378._kth_smallest_element_in_a_sorted_matrix.md rename to docs/Leetcode_Solutions/378._kth_smallest_element_in_a_sorted_matrix.md diff --git a/docs/Leetcode_Solutions/Python/380. Insert Delete GetRandom O(1).md b/docs/Leetcode_Solutions/380. Insert Delete GetRandom O(1).md similarity index 100% rename from docs/Leetcode_Solutions/Python/380. Insert Delete GetRandom O(1).md rename to docs/Leetcode_Solutions/380. Insert Delete GetRandom O(1).md diff --git a/docs/Leetcode_Solutions/Python/381. Insert Delete GetRandom O(1) - Duplicates allowed.md b/docs/Leetcode_Solutions/381. Insert Delete GetRandom O(1) - Duplicates allowed.md similarity index 100% rename from docs/Leetcode_Solutions/Python/381. Insert Delete GetRandom O(1) - Duplicates allowed.md rename to docs/Leetcode_Solutions/381. Insert Delete GetRandom O(1) - Duplicates allowed.md diff --git a/docs/Leetcode_Solutions/Python/382._linked_list_random_node.md b/docs/Leetcode_Solutions/382._linked_list_random_node.md similarity index 100% rename from docs/Leetcode_Solutions/Python/382._linked_list_random_node.md rename to docs/Leetcode_Solutions/382._linked_list_random_node.md diff --git a/docs/Leetcode_Solutions/Python/383._ransom_note.md b/docs/Leetcode_Solutions/383._ransom_note.md similarity index 100% rename from docs/Leetcode_Solutions/Python/383._ransom_note.md rename to docs/Leetcode_Solutions/383._ransom_note.md diff --git a/docs/Leetcode_Solutions/Python/384. Shuffle an Array.md b/docs/Leetcode_Solutions/384. Shuffle an Array.md similarity index 100% rename from docs/Leetcode_Solutions/Python/384. Shuffle an Array.md rename to docs/Leetcode_Solutions/384. Shuffle an Array.md diff --git a/docs/Leetcode_Solutions/Python/387._first_unique_character_in_a_string.md b/docs/Leetcode_Solutions/387._first_unique_character_in_a_string.md similarity index 100% rename from docs/Leetcode_Solutions/Python/387._first_unique_character_in_a_string.md rename to docs/Leetcode_Solutions/387._first_unique_character_in_a_string.md diff --git a/docs/Leetcode_Solutions/Python/388._Longest_Absolute_File_Path.md b/docs/Leetcode_Solutions/388._Longest_Absolute_File_Path.md similarity index 100% rename from docs/Leetcode_Solutions/Python/388._Longest_Absolute_File_Path.md rename to docs/Leetcode_Solutions/388._Longest_Absolute_File_Path.md diff --git a/docs/Leetcode_Solutions/Python/389._find_the_difference.md b/docs/Leetcode_Solutions/389._find_the_difference.md similarity index 100% rename from docs/Leetcode_Solutions/Python/389._find_the_difference.md rename to docs/Leetcode_Solutions/389._find_the_difference.md diff --git a/docs/Leetcode_Solutions/Python/392._is_subsequence.md b/docs/Leetcode_Solutions/392._is_subsequence.md similarity index 100% rename from docs/Leetcode_Solutions/Python/392._is_subsequence.md rename to docs/Leetcode_Solutions/392._is_subsequence.md diff --git a/docs/Leetcode_Solutions/Python/394._decode_string.md b/docs/Leetcode_Solutions/394._decode_string.md similarity index 100% rename from docs/Leetcode_Solutions/Python/394._decode_string.md rename to docs/Leetcode_Solutions/394._decode_string.md diff --git a/docs/Leetcode_Solutions/Python/400. Nth Digit.md b/docs/Leetcode_Solutions/400. Nth Digit.md similarity index 100% rename from docs/Leetcode_Solutions/Python/400. Nth Digit.md rename to docs/Leetcode_Solutions/400. Nth Digit.md diff --git a/docs/Leetcode_Solutions/Python/401._binary_watch.md b/docs/Leetcode_Solutions/401._binary_watch.md similarity index 100% rename from docs/Leetcode_Solutions/Python/401._binary_watch.md rename to docs/Leetcode_Solutions/401._binary_watch.md diff --git a/docs/Leetcode_Solutions/Python/404._sum_of_left_leaves.md b/docs/Leetcode_Solutions/404._sum_of_left_leaves.md similarity index 100% rename from docs/Leetcode_Solutions/Python/404._sum_of_left_leaves.md rename to docs/Leetcode_Solutions/404._sum_of_left_leaves.md diff --git a/docs/Leetcode_Solutions/Python/405. Convert a Number to Hexadecimal.md b/docs/Leetcode_Solutions/405. Convert a Number to Hexadecimal.md similarity index 100% rename from docs/Leetcode_Solutions/Python/405. Convert a Number to Hexadecimal.md rename to docs/Leetcode_Solutions/405. Convert a Number to Hexadecimal.md diff --git a/docs/Leetcode_Solutions/Python/406._Queue_Reconstruction_by_Height.md b/docs/Leetcode_Solutions/406._Queue_Reconstruction_by_Height.md similarity index 100% rename from docs/Leetcode_Solutions/Python/406._Queue_Reconstruction_by_Height.md rename to docs/Leetcode_Solutions/406._Queue_Reconstruction_by_Height.md diff --git a/docs/Leetcode_Solutions/Python/412._fizz_buzz.md b/docs/Leetcode_Solutions/412._fizz_buzz.md similarity index 100% rename from docs/Leetcode_Solutions/Python/412._fizz_buzz.md rename to docs/Leetcode_Solutions/412._fizz_buzz.md diff --git a/docs/Leetcode_Solutions/Python/413. Arithmetic Slices.md b/docs/Leetcode_Solutions/413. Arithmetic Slices.md similarity index 100% rename from docs/Leetcode_Solutions/Python/413. Arithmetic Slices.md rename to docs/Leetcode_Solutions/413. Arithmetic Slices.md diff --git a/docs/Leetcode_Solutions/Python/414._third_maximum_number.md b/docs/Leetcode_Solutions/414._third_maximum_number.md similarity index 100% rename from docs/Leetcode_Solutions/Python/414._third_maximum_number.md rename to docs/Leetcode_Solutions/414._third_maximum_number.md diff --git a/docs/Leetcode_Solutions/Python/415._add_strings.md b/docs/Leetcode_Solutions/415._add_strings.md similarity index 100% rename from docs/Leetcode_Solutions/Python/415._add_strings.md rename to docs/Leetcode_Solutions/415._add_strings.md diff --git a/docs/Leetcode_Solutions/Python/416. Partition Equal Subset Sum.md b/docs/Leetcode_Solutions/416. Partition Equal Subset Sum.md similarity index 100% rename from docs/Leetcode_Solutions/Python/416. Partition Equal Subset Sum.md rename to docs/Leetcode_Solutions/416. Partition Equal Subset Sum.md diff --git a/docs/Leetcode_Solutions/Python/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md b/docs/Leetcode_Solutions/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md similarity index 100% rename from docs/Leetcode_Solutions/Python/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md rename to docs/Leetcode_Solutions/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md diff --git a/docs/Leetcode_Solutions/Python/422. Valid Word Square.md b/docs/Leetcode_Solutions/422. Valid Word Square.md similarity index 100% rename from docs/Leetcode_Solutions/Python/422. Valid Word Square.md rename to docs/Leetcode_Solutions/422. Valid Word Square.md diff --git a/docs/Leetcode_Solutions/Python/434._number_of_segments_in_a_string.md b/docs/Leetcode_Solutions/434._number_of_segments_in_a_string.md similarity index 100% rename from docs/Leetcode_Solutions/Python/434._number_of_segments_in_a_string.md rename to docs/Leetcode_Solutions/434._number_of_segments_in_a_string.md diff --git a/docs/Leetcode_Solutions/Python/437._path_sum_iii.md b/docs/Leetcode_Solutions/437._path_sum_iii.md similarity index 100% rename from docs/Leetcode_Solutions/Python/437._path_sum_iii.md rename to docs/Leetcode_Solutions/437._path_sum_iii.md diff --git a/docs/Leetcode_Solutions/Python/438._Find_All_Anagrams_in_a_String.md b/docs/Leetcode_Solutions/438._Find_All_Anagrams_in_a_String.md similarity index 100% rename from docs/Leetcode_Solutions/Python/438._Find_All_Anagrams_in_a_String.md rename to docs/Leetcode_Solutions/438._Find_All_Anagrams_in_a_String.md diff --git a/docs/Leetcode_Solutions/Python/439. Ternary Expression Parser.md b/docs/Leetcode_Solutions/439. Ternary Expression Parser.md similarity index 100% rename from docs/Leetcode_Solutions/Python/439. Ternary Expression Parser.md rename to docs/Leetcode_Solutions/439. Ternary Expression Parser.md diff --git a/docs/Leetcode_Solutions/Python/441._arranging_coins.md b/docs/Leetcode_Solutions/441._arranging_coins.md similarity index 100% rename from docs/Leetcode_Solutions/Python/441._arranging_coins.md rename to docs/Leetcode_Solutions/441._arranging_coins.md diff --git a/docs/Leetcode_Solutions/Python/448._Find_All_Numbers_Disappeared_in_an_Array.md b/docs/Leetcode_Solutions/448._Find_All_Numbers_Disappeared_in_an_Array.md similarity index 100% rename from docs/Leetcode_Solutions/Python/448._Find_All_Numbers_Disappeared_in_an_Array.md rename to docs/Leetcode_Solutions/448._Find_All_Numbers_Disappeared_in_an_Array.md diff --git a/docs/Leetcode_Solutions/Python/450. Delete Node in a BST.md b/docs/Leetcode_Solutions/450. Delete Node in a BST.md similarity index 100% rename from docs/Leetcode_Solutions/Python/450. Delete Node in a BST.md rename to docs/Leetcode_Solutions/450. Delete Node in a BST.md diff --git a/docs/Leetcode_Solutions/Python/453._Minimum_Moves_to_Equal_Array_Elements.md b/docs/Leetcode_Solutions/453._Minimum_Moves_to_Equal_Array_Elements.md similarity index 100% rename from docs/Leetcode_Solutions/Python/453._Minimum_Moves_to_Equal_Array_Elements.md rename to docs/Leetcode_Solutions/453._Minimum_Moves_to_Equal_Array_Elements.md diff --git a/docs/Leetcode_Solutions/Python/459._Repeated_Substring_Pattern.md b/docs/Leetcode_Solutions/459._Repeated_Substring_Pattern.md similarity index 100% rename from docs/Leetcode_Solutions/Python/459._Repeated_Substring_Pattern.md rename to docs/Leetcode_Solutions/459._Repeated_Substring_Pattern.md diff --git a/docs/Leetcode_Solutions/Python/461._Hamming Distance.md b/docs/Leetcode_Solutions/461._Hamming Distance.md similarity index 100% rename from docs/Leetcode_Solutions/Python/461._Hamming Distance.md rename to docs/Leetcode_Solutions/461._Hamming Distance.md diff --git a/docs/Leetcode_Solutions/Python/463._Island_Perimeter.md b/docs/Leetcode_Solutions/463._Island_Perimeter.md similarity index 100% rename from docs/Leetcode_Solutions/Python/463._Island_Perimeter.md rename to docs/Leetcode_Solutions/463._Island_Perimeter.md diff --git a/docs/Leetcode_Solutions/Python/467._Unique_Substrings_in_Wraparound_String.md b/docs/Leetcode_Solutions/467._Unique_Substrings_in_Wraparound_String.md similarity index 100% rename from docs/Leetcode_Solutions/Python/467._Unique_Substrings_in_Wraparound_String.md rename to docs/Leetcode_Solutions/467._Unique_Substrings_in_Wraparound_String.md diff --git a/docs/Leetcode_Solutions/Python/469. Convex Polygon.md b/docs/Leetcode_Solutions/469. Convex Polygon.md similarity index 100% rename from docs/Leetcode_Solutions/Python/469. Convex Polygon.md rename to docs/Leetcode_Solutions/469. Convex Polygon.md diff --git a/docs/Leetcode_Solutions/Python/476._Number_Complement.md b/docs/Leetcode_Solutions/476._Number_Complement.md similarity index 100% rename from docs/Leetcode_Solutions/Python/476._Number_Complement.md rename to docs/Leetcode_Solutions/476._Number_Complement.md diff --git a/docs/Leetcode_Solutions/Python/477._Total_Hamming_Distance.md b/docs/Leetcode_Solutions/477._Total_Hamming_Distance.md similarity index 100% rename from docs/Leetcode_Solutions/Python/477._Total_Hamming_Distance.md rename to docs/Leetcode_Solutions/477._Total_Hamming_Distance.md diff --git a/docs/Leetcode_Solutions/Python/485._Max_Consecutive_Ones.md b/docs/Leetcode_Solutions/485._Max_Consecutive_Ones.md similarity index 100% rename from docs/Leetcode_Solutions/Python/485._Max_Consecutive_Ones.md rename to docs/Leetcode_Solutions/485._Max_Consecutive_Ones.md diff --git a/docs/Leetcode_Solutions/Python/587._Erect_the_Fence .md b/docs/Leetcode_Solutions/587._Erect_the_Fence .md similarity index 100% rename from docs/Leetcode_Solutions/Python/587._Erect_the_Fence .md rename to docs/Leetcode_Solutions/587._Erect_the_Fence .md diff --git a/docs/Leetcode_Solutions/Python/599._Minimum_Index_Sum_of_Two_Lists.md b/docs/Leetcode_Solutions/599._Minimum_Index_Sum_of_Two_Lists.md similarity index 100% rename from docs/Leetcode_Solutions/Python/599._Minimum_Index_Sum_of_Two_Lists.md rename to docs/Leetcode_Solutions/599._Minimum_Index_Sum_of_Two_Lists.md diff --git a/docs/Leetcode_Solutions/Python/647._Palindromic_Substrings.md b/docs/Leetcode_Solutions/647._Palindromic_Substrings.md similarity index 100% rename from docs/Leetcode_Solutions/Python/647._Palindromic_Substrings.md rename to docs/Leetcode_Solutions/647._Palindromic_Substrings.md diff --git a/docs/Leetcode_Solutions/Python/657._Judge_Route_Circle.md b/docs/Leetcode_Solutions/657._Judge_Route_Circle.md similarity index 100% rename from docs/Leetcode_Solutions/Python/657._Judge_Route_Circle.md rename to docs/Leetcode_Solutions/657._Judge_Route_Circle.md diff --git a/docs/Leetcode_Solutions/Python/665._Non-decreasing_Array.md b/docs/Leetcode_Solutions/665._Non-decreasing_Array.md similarity index 100% rename from docs/Leetcode_Solutions/Python/665._Non-decreasing_Array.md rename to docs/Leetcode_Solutions/665._Non-decreasing_Array.md diff --git a/docs/Leetcode_Solutions/Python/672._Bulb_Switcher_II.md b/docs/Leetcode_Solutions/672._Bulb_Switcher_II.md similarity index 100% rename from docs/Leetcode_Solutions/Python/672._Bulb_Switcher_II.md rename to docs/Leetcode_Solutions/672._Bulb_Switcher_II.md diff --git a/docs/Leetcode_Solutions/Python/681._Next_Closest_Time.md b/docs/Leetcode_Solutions/681._Next_Closest_Time.md similarity index 100% rename from docs/Leetcode_Solutions/Python/681._Next_Closest_Time.md rename to docs/Leetcode_Solutions/681._Next_Closest_Time.md diff --git a/docs/Leetcode_Solutions/Python/682._Baseball_Game.md b/docs/Leetcode_Solutions/682._Baseball_Game.md similarity index 100% rename from docs/Leetcode_Solutions/Python/682._Baseball_Game.md rename to docs/Leetcode_Solutions/682._Baseball_Game.md diff --git a/docs/Leetcode_Solutions/Python/687._Longest_Univalue_Path.md b/docs/Leetcode_Solutions/687._Longest_Univalue_Path.md similarity index 100% rename from docs/Leetcode_Solutions/Python/687._Longest_Univalue_Path.md rename to docs/Leetcode_Solutions/687._Longest_Univalue_Path.md diff --git a/docs/Leetcode_Solutions/Python/740._delete_and_earn.md b/docs/Leetcode_Solutions/740._delete_and_earn.md similarity index 100% rename from docs/Leetcode_Solutions/Python/740._delete_and_earn.md rename to docs/Leetcode_Solutions/740._delete_and_earn.md diff --git a/docs/Leetcode_Solutions/Python/760._Find_Anagram_Mappings.md b/docs/Leetcode_Solutions/760._Find_Anagram_Mappings.md similarity index 100% rename from docs/Leetcode_Solutions/Python/760._Find_Anagram_Mappings.md rename to docs/Leetcode_Solutions/760._Find_Anagram_Mappings.md diff --git a/docs/Leetcode_Solutions/Python/844._Backspace_String_Compare.md b/docs/Leetcode_Solutions/844._Backspace_String_Compare.md similarity index 100% rename from docs/Leetcode_Solutions/Python/844._Backspace_String_Compare.md rename to docs/Leetcode_Solutions/844._Backspace_String_Compare.md diff --git a/docs/Leetcode_Solutions/Python/README.md b/docs/Leetcode_Solutions/README.md similarity index 100% rename from docs/Leetcode_Solutions/Python/README.md rename to docs/Leetcode_Solutions/README.md diff --git "a/docs/Leetcode_Solutions/Python/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" "b/docs/Leetcode_Solutions/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" similarity index 100% rename from "docs/Leetcode_Solutions/Python/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" rename to "docs/Leetcode_Solutions/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" diff --git a/docs/Leetcode_Solutions/Python/Summarization/Data Structure and Algorthim Review.md b/docs/Leetcode_Solutions/Summarization/Data Structure and Algorthim Review.md similarity index 100% rename from docs/Leetcode_Solutions/Python/Summarization/Data Structure and Algorthim Review.md rename to docs/Leetcode_Solutions/Summarization/Data Structure and Algorthim Review.md diff --git a/docs/Leetcode_Solutions/Python/Summarization/Dynamic Programming.md b/docs/Leetcode_Solutions/Summarization/Dynamic Programming.md similarity index 100% rename from docs/Leetcode_Solutions/Python/Summarization/Dynamic Programming.md rename to docs/Leetcode_Solutions/Summarization/Dynamic Programming.md diff --git "a/docs/Leetcode_Solutions/Python/Summarization/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" "b/docs/Leetcode_Solutions/Summarization/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" similarity index 100% rename from "docs/Leetcode_Solutions/Python/Summarization/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" rename to "docs/Leetcode_Solutions/Summarization/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" diff --git "a/docs/Leetcode_Solutions/Python/Summarization/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" "b/docs/Leetcode_Solutions/Summarization/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" similarity index 100% rename from "docs/Leetcode_Solutions/Python/Summarization/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" rename to "docs/Leetcode_Solutions/Summarization/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" diff --git "a/docs/Leetcode_Solutions/Python/Summarization/LinkedList\346\212\200\345\267\247.md" "b/docs/Leetcode_Solutions/Summarization/LinkedList\346\212\200\345\267\247.md" similarity index 100% rename from "docs/Leetcode_Solutions/Python/Summarization/LinkedList\346\212\200\345\267\247.md" rename to "docs/Leetcode_Solutions/Summarization/LinkedList\346\212\200\345\267\247.md" diff --git a/docs/Leetcode_Solutions/Python/Summarization/Maximal Square.pdf b/docs/Leetcode_Solutions/Summarization/Maximal Square.pdf similarity index 100% rename from docs/Leetcode_Solutions/Python/Summarization/Maximal Square.pdf rename to docs/Leetcode_Solutions/Summarization/Maximal Square.pdf diff --git "a/docs/Leetcode_Solutions/Python/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" "b/docs/Leetcode_Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" similarity index 100% rename from "docs/Leetcode_Solutions/Python/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" rename to "docs/Leetcode_Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" diff --git a/docs/Leetcode_Solutions/Python/Summarization/Range Sum Query 2D - Immutable.pdf b/docs/Leetcode_Solutions/Summarization/Range Sum Query 2D - Immutable.pdf similarity index 100% rename from docs/Leetcode_Solutions/Python/Summarization/Range Sum Query 2D - Immutable.pdf rename to docs/Leetcode_Solutions/Summarization/Range Sum Query 2D - Immutable.pdf diff --git a/docs/Leetcode_Solutions/Python/Summarization/Recusrion & BackTracking.md b/docs/Leetcode_Solutions/Summarization/Recusrion & BackTracking.md similarity index 100% rename from docs/Leetcode_Solutions/Python/Summarization/Recusrion & BackTracking.md rename to docs/Leetcode_Solutions/Summarization/Recusrion & BackTracking.md diff --git "a/docs/Leetcode_Solutions/Python/Summarization/backtracking\346\200\235\350\267\257.md" "b/docs/Leetcode_Solutions/Summarization/backtracking\346\200\235\350\267\257.md" similarity index 100% rename from "docs/Leetcode_Solutions/Python/Summarization/backtracking\346\200\235\350\267\257.md" rename to "docs/Leetcode_Solutions/Summarization/backtracking\346\200\235\350\267\257.md" diff --git "a/docs/Leetcode_Solutions/Python/Summarization/delete_node_in_a_linked_list\351\227\256\351\242\230.md" "b/docs/Leetcode_Solutions/Summarization/delete_node_in_a_linked_list\351\227\256\351\242\230.md" similarity index 100% rename from "docs/Leetcode_Solutions/Python/Summarization/delete_node_in_a_linked_list\351\227\256\351\242\230.md" rename to "docs/Leetcode_Solutions/Summarization/delete_node_in_a_linked_list\351\227\256\351\242\230.md" diff --git "a/docs/Leetcode_Solutions/Python/Summarization/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" "b/docs/Leetcode_Solutions/Summarization/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" similarity index 100% rename from "docs/Leetcode_Solutions/Python/Summarization/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" rename to "docs/Leetcode_Solutions/Summarization/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" diff --git a/docs/Leetcode_Solutions/Python/Summarization/python_base.py b/docs/Leetcode_Solutions/Summarization/python_base.py similarity index 100% rename from docs/Leetcode_Solutions/Python/Summarization/python_base.py rename to docs/Leetcode_Solutions/Summarization/python_base.py diff --git "a/docs/Leetcode_Solutions/Python/Summarization/python\347\232\204\345\220\204\347\247\215pass.md" "b/docs/Leetcode_Solutions/Summarization/python\347\232\204\345\220\204\347\247\215pass.md" similarity index 100% rename from "docs/Leetcode_Solutions/Python/Summarization/python\347\232\204\345\220\204\347\247\215pass.md" rename to "docs/Leetcode_Solutions/Summarization/python\347\232\204\345\220\204\347\247\215pass.md" diff --git a/docs/Leetcode_Solutions/Python/Summarization/slide_windows_template.md b/docs/Leetcode_Solutions/Summarization/slide_windows_template.md similarity index 100% rename from docs/Leetcode_Solutions/Python/Summarization/slide_windows_template.md rename to docs/Leetcode_Solutions/Summarization/slide_windows_template.md diff --git "a/docs/Leetcode_Solutions/Python/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" "b/docs/Leetcode_Solutions/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" similarity index 100% rename from "docs/Leetcode_Solutions/Python/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" rename to "docs/Leetcode_Solutions/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" diff --git "a/docs/Leetcode_Solutions/Python/Summarization/\344\275\215\350\277\220\347\256\227.md" "b/docs/Leetcode_Solutions/Summarization/\344\275\215\350\277\220\347\256\227.md" similarity index 100% rename from "docs/Leetcode_Solutions/Python/Summarization/\344\275\215\350\277\220\347\256\227.md" rename to "docs/Leetcode_Solutions/Summarization/\344\275\215\350\277\220\347\256\227.md" diff --git "a/docs/Leetcode_Solutions/Python/Summarization/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" "b/docs/Leetcode_Solutions/Summarization/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" similarity index 100% rename from "docs/Leetcode_Solutions/Python/Summarization/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" rename to "docs/Leetcode_Solutions/Summarization/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" diff --git "a/docs/Leetcode_Solutions/Python/Summarization/\345\205\253\346\216\222\345\272\217.md" "b/docs/Leetcode_Solutions/Summarization/\345\205\253\346\216\222\345\272\217.md" similarity index 100% rename from "docs/Leetcode_Solutions/Python/Summarization/\345\205\253\346\216\222\345\272\217.md" rename to "docs/Leetcode_Solutions/Summarization/\345\205\253\346\216\222\345\272\217.md" diff --git "a/docs/Leetcode_Solutions/Python/Summarization/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" "b/docs/Leetcode_Solutions/Summarization/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" similarity index 100% rename from "docs/Leetcode_Solutions/Python/Summarization/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" rename to "docs/Leetcode_Solutions/Summarization/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" diff --git "a/docs/Leetcode_Solutions/Python/Summarization/\346\200\273\347\273\223.md" "b/docs/Leetcode_Solutions/Summarization/\346\200\273\347\273\223.md" similarity index 100% rename from "docs/Leetcode_Solutions/Python/Summarization/\346\200\273\347\273\223.md" rename to "docs/Leetcode_Solutions/Summarization/\346\200\273\347\273\223.md" diff --git "a/docs/Leetcode_Solutions/Python/Summarization/\347\273\204\345\220\210\351\227\256\351\242\230.md" "b/docs/Leetcode_Solutions/Summarization/\347\273\204\345\220\210\351\227\256\351\242\230.md" similarity index 100% rename from "docs/Leetcode_Solutions/Python/Summarization/\347\273\204\345\220\210\351\227\256\351\242\230.md" rename to "docs/Leetcode_Solutions/Summarization/\347\273\204\345\220\210\351\227\256\351\242\230.md" diff --git "a/docs/Leetcode_Solutions/Python/Summarization/\351\200\222\345\275\222_recursion.md" "b/docs/Leetcode_Solutions/Summarization/\351\200\222\345\275\222_recursion.md" similarity index 100% rename from "docs/Leetcode_Solutions/Python/Summarization/\351\200\222\345\275\222_recursion.md" rename to "docs/Leetcode_Solutions/Summarization/\351\200\222\345\275\222_recursion.md" From d6aa71ffb07b6cd872a78ff6d0430923b708fe5b Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Tue, 26 Jun 2018 21:38:29 +0800 Subject: [PATCH 0550/2496] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E7=A9=BA=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Algorithm_Templates/Sort/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/Algorithm_Templates/Sort/README.md b/docs/Algorithm_Templates/Sort/README.md index 6ff4dc75a..d1641a2b7 100644 --- a/docs/Algorithm_Templates/Sort/README.md +++ b/docs/Algorithm_Templates/Sort/README.md @@ -11,4 +11,3 @@ | 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/ShellSort.py) | | 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/MergeSort.py) | | 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | [RadixSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/RadixSort.py) | - From 78613c468084777159e77ce4c0b12994a8b77bfb Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Tue, 26 Jun 2018 21:40:04 +0800 Subject: [PATCH 0551/2496] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/{Algorithm_Templates => Algorithm}/Cipher/README.md | 0 docs/{Algorithm_Templates => Algorithm}/Compression/README.md | 0 docs/{Algorithm_Templates => Algorithm}/Conversion/README.md | 0 .../Data_Structure/Graph/README.md | 0 .../Data_Structure/HashMap/README.md | 0 .../Data_Structure/HashTable/README.md | 0 .../Data_Structure/Heqp/README.md | 0 .../Data_Structure/LinkedList/README.md | 0 .../Data_Structure/Matrix/README.md | 0 .../Data_Structure/Queue/README.md | 0 docs/{Algorithm_Templates => Algorithm}/Data_Structure/README.md | 0 .../Data_Structure/Stack/README.md | 0 .../Data_Structure/Tree/README.md | 0 .../Dynamic_Programming/README.md | 0 docs/{Algorithm_Templates => Algorithm}/Hash/README.md | 0 .../Others/NextNodeInOrderTree.md | 0 docs/{Algorithm_Templates => Algorithm}/Others/TopKWords.java | 0 docs/{Algorithm_Templates => Algorithm}/Others/words.txt | 0 docs/{Algorithm_Templates => Algorithm}/README.md | 0 docs/{Algorithm_Templates => Algorithm}/Search/README.md | 0 docs/{Algorithm_Templates => Algorithm}/Sort/BubbleSort.py | 0 docs/{Algorithm_Templates => Algorithm}/Sort/InsertSort.py | 0 docs/{Algorithm_Templates => Algorithm}/Sort/MergeSort.py | 0 docs/{Algorithm_Templates => Algorithm}/Sort/QuickSort.py | 0 docs/{Algorithm_Templates => Algorithm}/Sort/README.md | 0 docs/{Algorithm_Templates => Algorithm}/Sort/RadixSort.py | 0 docs/{Algorithm_Templates => Algorithm}/Sort/SelectionSort.py | 0 docs/{Algorithm_Templates => Algorithm}/Sort/ShellSort.py | 0 docs/{Algorithm_Templates => Algorithm}/Traversals/README.md | 0 29 files changed, 0 insertions(+), 0 deletions(-) rename docs/{Algorithm_Templates => Algorithm}/Cipher/README.md (100%) rename docs/{Algorithm_Templates => Algorithm}/Compression/README.md (100%) rename docs/{Algorithm_Templates => Algorithm}/Conversion/README.md (100%) rename docs/{Algorithm_Templates => Algorithm}/Data_Structure/Graph/README.md (100%) rename docs/{Algorithm_Templates => Algorithm}/Data_Structure/HashMap/README.md (100%) rename docs/{Algorithm_Templates => Algorithm}/Data_Structure/HashTable/README.md (100%) rename docs/{Algorithm_Templates => Algorithm}/Data_Structure/Heqp/README.md (100%) rename docs/{Algorithm_Templates => Algorithm}/Data_Structure/LinkedList/README.md (100%) rename docs/{Algorithm_Templates => Algorithm}/Data_Structure/Matrix/README.md (100%) rename docs/{Algorithm_Templates => Algorithm}/Data_Structure/Queue/README.md (100%) rename docs/{Algorithm_Templates => Algorithm}/Data_Structure/README.md (100%) rename docs/{Algorithm_Templates => Algorithm}/Data_Structure/Stack/README.md (100%) rename docs/{Algorithm_Templates => Algorithm}/Data_Structure/Tree/README.md (100%) rename docs/{Algorithm_Templates => Algorithm}/Dynamic_Programming/README.md (100%) rename docs/{Algorithm_Templates => Algorithm}/Hash/README.md (100%) rename docs/{Algorithm_Templates => Algorithm}/Others/NextNodeInOrderTree.md (100%) rename docs/{Algorithm_Templates => Algorithm}/Others/TopKWords.java (100%) rename docs/{Algorithm_Templates => Algorithm}/Others/words.txt (100%) rename docs/{Algorithm_Templates => Algorithm}/README.md (100%) rename docs/{Algorithm_Templates => Algorithm}/Search/README.md (100%) rename docs/{Algorithm_Templates => Algorithm}/Sort/BubbleSort.py (100%) rename docs/{Algorithm_Templates => Algorithm}/Sort/InsertSort.py (100%) rename docs/{Algorithm_Templates => Algorithm}/Sort/MergeSort.py (100%) rename docs/{Algorithm_Templates => Algorithm}/Sort/QuickSort.py (100%) rename docs/{Algorithm_Templates => Algorithm}/Sort/README.md (100%) rename docs/{Algorithm_Templates => Algorithm}/Sort/RadixSort.py (100%) rename docs/{Algorithm_Templates => Algorithm}/Sort/SelectionSort.py (100%) rename docs/{Algorithm_Templates => Algorithm}/Sort/ShellSort.py (100%) rename docs/{Algorithm_Templates => Algorithm}/Traversals/README.md (100%) diff --git a/docs/Algorithm_Templates/Cipher/README.md b/docs/Algorithm/Cipher/README.md similarity index 100% rename from docs/Algorithm_Templates/Cipher/README.md rename to docs/Algorithm/Cipher/README.md diff --git a/docs/Algorithm_Templates/Compression/README.md b/docs/Algorithm/Compression/README.md similarity index 100% rename from docs/Algorithm_Templates/Compression/README.md rename to docs/Algorithm/Compression/README.md diff --git a/docs/Algorithm_Templates/Conversion/README.md b/docs/Algorithm/Conversion/README.md similarity index 100% rename from docs/Algorithm_Templates/Conversion/README.md rename to docs/Algorithm/Conversion/README.md diff --git a/docs/Algorithm_Templates/Data_Structure/Graph/README.md b/docs/Algorithm/Data_Structure/Graph/README.md similarity index 100% rename from docs/Algorithm_Templates/Data_Structure/Graph/README.md rename to docs/Algorithm/Data_Structure/Graph/README.md diff --git a/docs/Algorithm_Templates/Data_Structure/HashMap/README.md b/docs/Algorithm/Data_Structure/HashMap/README.md similarity index 100% rename from docs/Algorithm_Templates/Data_Structure/HashMap/README.md rename to docs/Algorithm/Data_Structure/HashMap/README.md diff --git a/docs/Algorithm_Templates/Data_Structure/HashTable/README.md b/docs/Algorithm/Data_Structure/HashTable/README.md similarity index 100% rename from docs/Algorithm_Templates/Data_Structure/HashTable/README.md rename to docs/Algorithm/Data_Structure/HashTable/README.md diff --git a/docs/Algorithm_Templates/Data_Structure/Heqp/README.md b/docs/Algorithm/Data_Structure/Heqp/README.md similarity index 100% rename from docs/Algorithm_Templates/Data_Structure/Heqp/README.md rename to docs/Algorithm/Data_Structure/Heqp/README.md diff --git a/docs/Algorithm_Templates/Data_Structure/LinkedList/README.md b/docs/Algorithm/Data_Structure/LinkedList/README.md similarity index 100% rename from docs/Algorithm_Templates/Data_Structure/LinkedList/README.md rename to docs/Algorithm/Data_Structure/LinkedList/README.md diff --git a/docs/Algorithm_Templates/Data_Structure/Matrix/README.md b/docs/Algorithm/Data_Structure/Matrix/README.md similarity index 100% rename from docs/Algorithm_Templates/Data_Structure/Matrix/README.md rename to docs/Algorithm/Data_Structure/Matrix/README.md diff --git a/docs/Algorithm_Templates/Data_Structure/Queue/README.md b/docs/Algorithm/Data_Structure/Queue/README.md similarity index 100% rename from docs/Algorithm_Templates/Data_Structure/Queue/README.md rename to docs/Algorithm/Data_Structure/Queue/README.md diff --git a/docs/Algorithm_Templates/Data_Structure/README.md b/docs/Algorithm/Data_Structure/README.md similarity index 100% rename from docs/Algorithm_Templates/Data_Structure/README.md rename to docs/Algorithm/Data_Structure/README.md diff --git a/docs/Algorithm_Templates/Data_Structure/Stack/README.md b/docs/Algorithm/Data_Structure/Stack/README.md similarity index 100% rename from docs/Algorithm_Templates/Data_Structure/Stack/README.md rename to docs/Algorithm/Data_Structure/Stack/README.md diff --git a/docs/Algorithm_Templates/Data_Structure/Tree/README.md b/docs/Algorithm/Data_Structure/Tree/README.md similarity index 100% rename from docs/Algorithm_Templates/Data_Structure/Tree/README.md rename to docs/Algorithm/Data_Structure/Tree/README.md diff --git a/docs/Algorithm_Templates/Dynamic_Programming/README.md b/docs/Algorithm/Dynamic_Programming/README.md similarity index 100% rename from docs/Algorithm_Templates/Dynamic_Programming/README.md rename to docs/Algorithm/Dynamic_Programming/README.md diff --git a/docs/Algorithm_Templates/Hash/README.md b/docs/Algorithm/Hash/README.md similarity index 100% rename from docs/Algorithm_Templates/Hash/README.md rename to docs/Algorithm/Hash/README.md diff --git a/docs/Algorithm_Templates/Others/NextNodeInOrderTree.md b/docs/Algorithm/Others/NextNodeInOrderTree.md similarity index 100% rename from docs/Algorithm_Templates/Others/NextNodeInOrderTree.md rename to docs/Algorithm/Others/NextNodeInOrderTree.md diff --git a/docs/Algorithm_Templates/Others/TopKWords.java b/docs/Algorithm/Others/TopKWords.java similarity index 100% rename from docs/Algorithm_Templates/Others/TopKWords.java rename to docs/Algorithm/Others/TopKWords.java diff --git a/docs/Algorithm_Templates/Others/words.txt b/docs/Algorithm/Others/words.txt similarity index 100% rename from docs/Algorithm_Templates/Others/words.txt rename to docs/Algorithm/Others/words.txt diff --git a/docs/Algorithm_Templates/README.md b/docs/Algorithm/README.md similarity index 100% rename from docs/Algorithm_Templates/README.md rename to docs/Algorithm/README.md diff --git a/docs/Algorithm_Templates/Search/README.md b/docs/Algorithm/Search/README.md similarity index 100% rename from docs/Algorithm_Templates/Search/README.md rename to docs/Algorithm/Search/README.md diff --git a/docs/Algorithm_Templates/Sort/BubbleSort.py b/docs/Algorithm/Sort/BubbleSort.py similarity index 100% rename from docs/Algorithm_Templates/Sort/BubbleSort.py rename to docs/Algorithm/Sort/BubbleSort.py diff --git a/docs/Algorithm_Templates/Sort/InsertSort.py b/docs/Algorithm/Sort/InsertSort.py similarity index 100% rename from docs/Algorithm_Templates/Sort/InsertSort.py rename to docs/Algorithm/Sort/InsertSort.py diff --git a/docs/Algorithm_Templates/Sort/MergeSort.py b/docs/Algorithm/Sort/MergeSort.py similarity index 100% rename from docs/Algorithm_Templates/Sort/MergeSort.py rename to docs/Algorithm/Sort/MergeSort.py diff --git a/docs/Algorithm_Templates/Sort/QuickSort.py b/docs/Algorithm/Sort/QuickSort.py similarity index 100% rename from docs/Algorithm_Templates/Sort/QuickSort.py rename to docs/Algorithm/Sort/QuickSort.py diff --git a/docs/Algorithm_Templates/Sort/README.md b/docs/Algorithm/Sort/README.md similarity index 100% rename from docs/Algorithm_Templates/Sort/README.md rename to docs/Algorithm/Sort/README.md diff --git a/docs/Algorithm_Templates/Sort/RadixSort.py b/docs/Algorithm/Sort/RadixSort.py similarity index 100% rename from docs/Algorithm_Templates/Sort/RadixSort.py rename to docs/Algorithm/Sort/RadixSort.py diff --git a/docs/Algorithm_Templates/Sort/SelectionSort.py b/docs/Algorithm/Sort/SelectionSort.py similarity index 100% rename from docs/Algorithm_Templates/Sort/SelectionSort.py rename to docs/Algorithm/Sort/SelectionSort.py diff --git a/docs/Algorithm_Templates/Sort/ShellSort.py b/docs/Algorithm/Sort/ShellSort.py similarity index 100% rename from docs/Algorithm_Templates/Sort/ShellSort.py rename to docs/Algorithm/Sort/ShellSort.py diff --git a/docs/Algorithm_Templates/Traversals/README.md b/docs/Algorithm/Traversals/README.md similarity index 100% rename from docs/Algorithm_Templates/Traversals/README.md rename to docs/Algorithm/Traversals/README.md From 05400acd2b7fe667dd3655122a17f34059ed0e02 Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Tue, 26 Jun 2018 21:40:50 +0800 Subject: [PATCH 0552/2496] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20readme=20?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index c7b773848..383cb4649 100644 --- a/README.md +++ b/README.md @@ -35,9 +35,11 @@ > 项目发起人 * [@Lisanaaa](https://github.com/Lisanaaa) +* [@片刻](https://github.com/jiangzhonglian) > 贡献者(欢迎大家来追加) +* [@Lisanaaa](https://github.com/Lisanaaa) * [@片刻](https://github.com/jiangzhonglian) ## 免责声明 From 6dc46a5c243b8413533831c83c15ef91d55c4564 Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Tue, 26 Jun 2018 22:07:07 +0800 Subject: [PATCH 0553/2496] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E5=88=9A=E5=88=9A?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E7=9A=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Leetcode_Solutions/001._two_sum.md | 25 +++---------------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/docs/Leetcode_Solutions/001._two_sum.md b/docs/Leetcode_Solutions/001._two_sum.md index f348d46d2..df46049f4 100644 --- a/docs/Leetcode_Solutions/001._two_sum.md +++ b/docs/Leetcode_Solutions/001._two_sum.md @@ -26,8 +26,9 @@ lookup {2:0} [0,1] ``` -一但字典内有了这个 `target - 当前数字`,找到它的index和当前index一起返回。 - +* 建立字典 lookup 存放第一个数字,并存放该数字的 index +* 判断 lookup 种是否存在: `target - 当前数字`, 则表面 当前值和 lookup中的值加和为 target. +* 如果存在,则返回: `target - 当前数字` 的 index 和 当前值的 index ```python class Solution(object): @@ -44,23 +45,3 @@ class Solution(object): lookup[num] = i return [] ``` - -> 思路 2 - -通过 差值 判断元素,是否存在 nums,存在就 return - -```python -class Solution: - def twoSum(self, nums, target): - """ - :type nums: List[int] - :type target: int - :rtype: List[int] - """ - for num in nums: - if num < target: - l1_index = nums.index(num) - l2 = target - num - if l2 in nums: - return [l1_index, nums.index(l2)] -``` From 1fba326929b7c5dbcc134aa74e16295da19cd1c5 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Tue, 26 Jun 2018 23:59:52 +0800 Subject: [PATCH 0554/2496] Create 685._Redundant_Connection_II.md --- .../685._Redundant_Connection_II.md | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 docs/Leetcode_Solutions/685._Redundant_Connection_II.md diff --git a/docs/Leetcode_Solutions/685._Redundant_Connection_II.md b/docs/Leetcode_Solutions/685._Redundant_Connection_II.md new file mode 100644 index 000000000..cd359bcf6 --- /dev/null +++ b/docs/Leetcode_Solutions/685._Redundant_Connection_II.md @@ -0,0 +1,66 @@ +### 685. Redundant Connection II + +题目: + + + +难度 : Hard + + + +我们先定义一下,每条边的第一个点是parent,第二个点是child,例如 2 -> 1 中 node 2 就是 parent,而 node 1 就是 child + +明确这个之后,我们要知道图中有一条边是 invalid 的,去除它之后整个图就变成了一棵树,那么什么情况下一个边会导致树变成图呢: + +1. 如果一个child 在此之前已经有过一个parent了,那么意味着它有两个parent,这在树中肯定是不合法的。 +在代码中体现为```node_parent[child] != child```,这说明在碰到此时的parent之前我们就已经更新过node_parent[child]了,即child之前已经有一个parent了 +2. 如果一个child 的 parent 的 parent(或者一直往上找) 就是 child 本身,那么这意味着有环,这在树中也肯定是不合法的。 +在代码中体现为```find(node_parents, parent) == child```, 这说明child的parent的parent或以上就是child本身,即有环。 +例如 ```1 --> 2 --> 1```或者```1 --> 2 --> 3 --> 1``` + +因此我们可以定义一个列表 node_parent,在最开始的时候,此列表的 index 和 value 一一相等。 + +然后我们对edges进行第一轮遍历(正序遍历),并且用count来计数不合法的边: +- 如果只找到一条不合法的边,那么直接返回它即可 +- 如果有超过一条不合法的边,那么我们就进行第二轮遍历(逆序遍历),返回碰到的第一条不合法的边, +这里是为了节约时间,因为如题意我们要返回的是最后一条出现的边,那么我们逆序就更省时间嘛 + + +```python +class Solution(object): + def findRedundantDirectedConnection(self, edges): + """ + :type edges: List[List[int]] + :rtype: List[int] + """ + + def find(node_parent, parent): + return parent if node_parent[parent] == parent else find(node_parent, node_parent[parent]) + + n, count = len(edges), 0 # Use count to track the number of the invalid edge. + node_parent = [i for i in range(n+1)] + res = [0, 0] + + # 第一轮查找不合法的边 (正序) + for i in range(n): + parent, child = edges[i][0], edges[i][1] + if node_parent[child] != child or find(node_parent, parent) == child: + res = edges[i] + count += 1 + else: + node_parent[child] = parent + if count == 1: # 如果只有一条不合法的边,直接返回 + return res + + # 重置 node_parent 并开始第二轮查找 (逆序) + node_parent = [i for i in range(n+1)] + for i in range(n-1, -1, -1): + parent, child = edges[i][0], edges[i][1] + if node_parent[child] != child or find(node_parent, parent) == child: + return edges[i] + else: + node_parent[child] = parent + return res +``` +这道题感谢[xyzxuyizhen](https://leetcode.com/problems/redundant-connection-ii/discuss/128596/Easy-to-understand-Java-Solution-Union-Find)大佬, +看到他的思路才逃离了我之前的很复杂的想法。 From e6e5a48136a6036015320190dd7e641fa0833e94 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 27 Jun 2018 00:04:53 +0800 Subject: [PATCH 0555/2496] Update 685._Redundant_Connection_II.md --- docs/Leetcode_Solutions/685._Redundant_Connection_II.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Leetcode_Solutions/685._Redundant_Connection_II.md b/docs/Leetcode_Solutions/685._Redundant_Connection_II.md index cd359bcf6..0db1338e3 100644 --- a/docs/Leetcode_Solutions/685._Redundant_Connection_II.md +++ b/docs/Leetcode_Solutions/685._Redundant_Connection_II.md @@ -37,7 +37,7 @@ class Solution(object): def find(node_parent, parent): return parent if node_parent[parent] == parent else find(node_parent, node_parent[parent]) - n, count = len(edges), 0 # Use count to track the number of the invalid edge. + n, count = len(edges), 0 # 用 count 来计数不合法的边 node_parent = [i for i in range(n+1)] res = [0, 0] From 1c89c732a4972127bf7f791bed0b473c2cba410b Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Wed, 27 Jun 2018 11:27:04 +0800 Subject: [PATCH 0556/2496] =?UTF-8?q?=E6=9B=B4=E6=96=B0=2043.=20Multiply?= =?UTF-8?q?=20Strings=20=E5=AD=97=E7=AC=A6=E4=B8=B2=E7=9B=B8=E4=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../043._multiply_strings.md | 48 ++++++++++++------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/docs/Leetcode_Solutions/043._multiply_strings.md b/docs/Leetcode_Solutions/043._multiply_strings.md index 461c8ee91..1d2594946 100644 --- a/docs/Leetcode_Solutions/043._multiply_strings.md +++ b/docs/Leetcode_Solutions/043._multiply_strings.md @@ -1,25 +1,22 @@ -###43. Multiply Strings +# 43. Multiply Strings 字符串相乘 -题目: - +## 题目: +* https://leetcode.com/problems/multiply-strings/> +* https://leetcode-cn.com/problems/multiply-strings/description/ -难度: +## 难度: Medium -Medium - - -思路: +> 思路1 虽然写了一堆similar problems,拿到的时候也算有思路,但是还是觉得很难写 参考了别人的思路: 1. m位的数字乘以n位的数字的结果最大为m+n位: -999*99 < 1000*100 = 100000,最多为3+2 = 5位数。 + * 999*99 < 1000*100 = 100000,最多为3+2 = 5位数。 2. 先将字符串逆序便于从最低位开始计算。 - 觉得这样写才是最容易理解的,看一个具体的🌰: ``` @@ -39,14 +36,9 @@ Medium 这样在全部加起来和做进位处理 5 6 0 8 8 - - ``` - - - -``` +```python class Solution(object): def multiply(self, num1, num2): """ @@ -79,3 +71,27 @@ class Solution(object): i -= 1 return ''.join(str(j) for j in res[:i+1][::-1]) ``` + +> 思路2: + +* 1.将字符串转化为数字 +* 2.然后相乘 + +```python +class Solution(object): + + def str2num(l): + if len(l)<=1: + return int(l[-1]) + return 10**(len(l)-1) * int(l[0]) + Solution.str2num(l[1:]) + + def multiply(self, num1, num2): + """ + :type num1: str + :type num2: str + :rtype: str + """ + n1 = Solution.str2num(num1) + n2 = Solution.str2num(num2) + return str(n1*n2) +``` \ No newline at end of file From c3b4b27d3d660f892de068be47dd3ad13ff5a9e4 Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Wed, 27 Jun 2018 11:27:26 +0800 Subject: [PATCH 0557/2496] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Leetcode_Solutions/043._multiply_strings.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/Leetcode_Solutions/043._multiply_strings.md b/docs/Leetcode_Solutions/043._multiply_strings.md index 1d2594946..9db35b432 100644 --- a/docs/Leetcode_Solutions/043._multiply_strings.md +++ b/docs/Leetcode_Solutions/043._multiply_strings.md @@ -24,7 +24,6 @@ 123 * 456 - 先把每一位拿来相乘:得到 1 2 3 @@ -94,4 +93,4 @@ class Solution(object): n1 = Solution.str2num(num1) n2 = Solution.str2num(num2) return str(n1*n2) -``` \ No newline at end of file +``` From 86d0780651fdc37dda90980c42ff1a03cebdc3cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=9E=E9=BE=99?= Date: Wed, 27 Jun 2018 12:41:53 +0800 Subject: [PATCH 0558/2496] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 383cb4649..c76566673 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ * [算法 集合](/docs/Algorithm) * [八大排序算法 集合](/docs/Algorithm/Sort) +* [Wikipedia: List of Algorithms](https://en.wikipedia.org/wiki/List_of_algorithms) ## 推荐的一些LeetCode网站 @@ -25,6 +26,7 @@ 9. [mitcc的Github](https://github.com/mitcc/AlgoSolutions) 10. [小土刀的面试刷题笔记](http://wdxtub.com/interview/14520594642530.html) 11. [nonstriater/Learn-Algorithms](https://github.com/nonstriater/Learn-Algorithms) +12. [剑指 Offer 题解](https://github.com/gatieme/CodingInterviews) ### Please note, this repository is inspired from [KrisYu](https://github.com/KrisYu/LeetCode-CLRS-Python). However, it has been modified, added and improved to reflect our knowledge, wisdom and effort. From 7a29f78a0afd444a6ca59482e28aa0a3b780212c Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 27 Jun 2018 13:58:45 +0800 Subject: [PATCH 0559/2496] Update 043._multiply_strings.md --- .../043._multiply_strings.md | 86 +++++-------------- 1 file changed, 22 insertions(+), 64 deletions(-) diff --git a/docs/Leetcode_Solutions/043._multiply_strings.md b/docs/Leetcode_Solutions/043._multiply_strings.md index 9db35b432..8da330e7c 100644 --- a/docs/Leetcode_Solutions/043._multiply_strings.md +++ b/docs/Leetcode_Solutions/043._multiply_strings.md @@ -7,9 +7,6 @@ ## 难度: Medium -> 思路1 - -虽然写了一堆similar problems,拿到的时候也算有思路,但是还是觉得很难写 参考了别人的思路: @@ -17,25 +14,7 @@ * 999*99 < 1000*100 = 100000,最多为3+2 = 5位数。 2. 先将字符串逆序便于从最低位开始计算。 -觉得这样写才是最容易理解的,看一个具体的🌰: - -``` -123 * 456 - - 123 - * 456 - -先把每一位拿来相乘:得到 - 1 2 3 - 4 5 6 - - 6 12 18 - 5 10 15 - 4 8 12 -这样在全部加起来和做进位处理 - 5 6 0 8 8 -``` ```python class Solution(object): @@ -45,52 +24,31 @@ class Solution(object): :type num2: str :rtype: str """ - if num1 == '0' or num2 == '0' : return '0' - len1,len2 = len(num1),len(num2) - - num1 = num1[::-1] - num2 = num2[::-1] - # 99 * 99 < 10000, maxmize 4 digit - arr = [0 for i in range(len1 + len2)] - - for i in xrange(len1): - for j in xrange(len2): - arr[i+j] += (ord(num1[i]) - ord('0')) * (ord(num2[j]) - ord('0')) - - - res = [0 for i in range(len1 + len2)] - - for i in range(len(arr)): - res[i] = arr[i] % 10 - if i < len(arr) - 1: - arr[i+1] += arr[i]/10 + lookup = {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9} # 节省查找时间,避免无休止使用ord函数来得到数字 + if num1 == '0' or num2 == '0': + return '0' + num1, num2 = num1[::-1], num2[::-1] - i = len(arr)-1 - if res[i] == 0: - i -= 1 - return ''.join(str(j) for j in res[:i+1][::-1]) + tmp_res = [0 for i in range(len(num1)+len(num2))] + for i in range(len(num1)): + for j in range(len(num2)): + tmp_res[i+j] += lookup[num1[i]] * lookup[num2[j]] + + res = [0 for i in range(len(num1)+len(num2))] + for i in range(len(num1)+len(num2)): + res[i] = tmp_res[i] % 10 + if i < len(num1)+len(num2)-1: + tmp_res[i+1] += tmp_res[i]/10 + return ''.join(str(i) for i in res[::-1]).lstrip('0') 去掉最终结果头部可能存在的‘0’ ``` -> 思路2: - -* 1.将字符串转化为数字 -* 2.然后相乘 - -```python -class Solution(object): +觉得这样写才是最容易理解的,看一个具体的🌰: +``` +input: num1, num2 = '91', '91' +tmp_res = [1,18,81,0] +res = [1,8,2,8] - def str2num(l): - if len(l)<=1: - return int(l[-1]) - return 10**(len(l)-1) * int(l[0]) + Solution.str2num(l[1:]) +最终返回 "8281" - def multiply(self, num1, num2): - """ - :type num1: str - :type num2: str - :rtype: str - """ - n1 = Solution.str2num(num1) - n2 = Solution.str2num(num2) - return str(n1*n2) +要注意最终返回头部可能会有‘0’,所以我们用lstrip去除一下 ``` From 296d27be32836403cfe054fa0a9d220be44bae0e Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 27 Jun 2018 13:59:18 +0800 Subject: [PATCH 0560/2496] Update 043._multiply_strings.md --- docs/Leetcode_Solutions/043._multiply_strings.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Leetcode_Solutions/043._multiply_strings.md b/docs/Leetcode_Solutions/043._multiply_strings.md index 8da330e7c..6dd1e053b 100644 --- a/docs/Leetcode_Solutions/043._multiply_strings.md +++ b/docs/Leetcode_Solutions/043._multiply_strings.md @@ -39,7 +39,7 @@ class Solution(object): res[i] = tmp_res[i] % 10 if i < len(num1)+len(num2)-1: tmp_res[i+1] += tmp_res[i]/10 - return ''.join(str(i) for i in res[::-1]).lstrip('0') 去掉最终结果头部可能存在的‘0’ + return ''.join(str(i) for i in res[::-1]).lstrip('0') # 去掉最终结果头部可能存在的‘0’ ``` 觉得这样写才是最容易理解的,看一个具体的🌰: From 811aa86252d6aa18fe6de487c7cced1bb09451f8 Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Wed, 27 Jun 2018 14:56:33 +0800 Subject: [PATCH 0561/2496] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=9A=207.=20Re?= =?UTF-8?q?verse=20Integer=20=E5=8F=8D=E8=BD=AC=E6=95=B4=E6=95=B0=20?= =?UTF-8?q?=E6=80=9D=E8=B7=AF4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../007._Reverse_Integer.md | 64 +++++++++++++++---- 1 file changed, 53 insertions(+), 11 deletions(-) diff --git a/docs/Leetcode_Solutions/007._Reverse_Integer.md b/docs/Leetcode_Solutions/007._Reverse_Integer.md index f4120c1ea..1b327bf57 100644 --- a/docs/Leetcode_Solutions/007._Reverse_Integer.md +++ b/docs/Leetcode_Solutions/007._Reverse_Integer.md @@ -1,21 +1,42 @@ -### 7. Reverse Integer +# 7. Reverse Integer 反转整数 -题目: - +## 题目 +* https://leetcode.com/problems/Reverse-Integer +* https://leetcode-cn.com/problems/reverse-integer/description/ + +``` +给定一个 32 位有符号整数,将整数中的数字进行反转。 + +> 示例 1: + +输入: 123 +输出: 321 -难度: -Easy +> 示例 2: +输入: -123 +输出: -321 -思路 + +> 示例 3: + +输入: 120 +输出: 21 + +注意: +假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。 +根据这个假设,如果反转后的整数溢出,则返回 0。 +``` + +## 难度: Easy 翻转数字问题需要注意的就是溢出问题,为什么会存在溢出问题呢,我们知道int型的数值范围是 -2147483648~2147483647(负的2的31次方~2的31次方-1), 那么如果我们要翻转 1000000009 这个在范围内的数得到 9000000001,而翻转后的数就超过了范围。 -#### 解法1: -如果输入的是负数,就递归调用原函数,参数变成-x即可 +> 思路1 +如果输入的是负数,就递归调用原函数,参数变成-x即可 ```python class Solution(object): @@ -32,8 +53,11 @@ class Solution(object): x /= 10 return res if res <= 0x7fffffff else 0 ``` -#### 解法2: + +> 思路2 + 按照参数正负号先将其转成字符串,然后再反转,根据是否溢出决定输出0还是反转结果 + ```python class Solution(object): def reverse(self, x): @@ -45,9 +69,10 @@ class Solution(object):        x = 0 if abs(x) > 0x7FFFFFFF else x return x ``` -#### 解法3(StefanPochmann大神): -看这个解法前先看[backticks](https://docs.python.org/2.7/reference/expressions.html#string-conversions) +> 思路3(StefanPochmann大神): + +看这个解法前先看[backticks](https://docs.python.org/2.7/reference/expressions.html#string-conversions) cmp函数在python3.x中用不了了,import operator用gt或者lt吧,或者回归if/else condition爸爸的怀抱吧! ```python @@ -62,4 +87,21 @@ class Solution(object): return s * r * (r < 2 ** 31) ``` +> 思路4 + +* 1.记录符号 +* 2.将数字当字符串处理 +* 3.判断是否阈值区间,进行比较就行 +```python +class Solution: + def reverse(self, x): + """ + :type x: int + :rtype: int + """ + mark = 1 if x>=0 else -1 + x_abs = abs(x) + result = mark * int(''.join(str(x_abs)[::-1])) + return result if -2**31 <= result <= 2**31-1 else 0 +``` From 5299e73c74e10381f9a322fa5ee57c65e17e658b Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Wed, 27 Jun 2018 16:23:55 +0800 Subject: [PATCH 0562/2496] =?UTF-8?q?=E6=9B=B4=E6=96=B0=EF=BC=9A9.=20Palin?= =?UTF-8?q?drome=20Number=20=E5=9B=9E=E6=96=87=E6=95=B0=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=20=E6=80=9D=E8=B7=AF2=EF=BC=8C=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E5=AD=97=E7=AC=A6=E4=B8=B2=E6=9D=A5=E6=AF=94=E8=BE=83=E6=95=B0?= =?UTF-8?q?=E5=AD=97=E5=A4=A7=E5=B0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../009._Palindrome_Number.md | 53 +++++++++++++++++-- 1 file changed, 48 insertions(+), 5 deletions(-) diff --git a/docs/Leetcode_Solutions/009._Palindrome_Number.md b/docs/Leetcode_Solutions/009._Palindrome_Number.md index 8e14084f7..bd97bbd85 100644 --- a/docs/Leetcode_Solutions/009._Palindrome_Number.md +++ b/docs/Leetcode_Solutions/009._Palindrome_Number.md @@ -1,11 +1,35 @@ -### 9. Palindrome Number +# 9. Palindrome Number 回文数 -题目: - +## 题目 -难度: -Medium +* https://leetcode.com/problems/palindrome-number +* https://leetcode-cn.com/problems/palindrome-number/description +``` +判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 + +示例 1: + +输入: 121 +输出: true +示例 2: + +输入: -121 +输出: false +解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 +示例 3: + +输入: 10 +输出: false +解释: 从右向左读, 为 01 。因此它不是一个回文数。 +进阶: + +你能不将整数转为字符串来解决这个问题吗? +``` + +## 难度:Medium + +> 思路1 - 首先负数肯定不是palindrome - 其次如果一个数字是一个正数,并且能被我0整除那它肯定也不是palindrome @@ -29,3 +53,22 @@ class Solution(object): ``` +> 思路2 + +* 排除小于0的数 +* 通过字符串进行反转,对比数字是否相等就行 + +```python +class Solution: + def isPalindrome(self, x): + """ + :type x: int + :rtype: bool + """ + if x < 0: + return False + elif x != int(str(x)[::-1]): + return False + else: + return True +``` From 83444b913aec77715a15d8a22f5a1b7b435d6dca Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Wed, 27 Jun 2018 16:32:23 +0800 Subject: [PATCH 0563/2496] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=B8=80=E4=B8=8B?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Leetcode_Solutions/007._Reverse_Integer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Leetcode_Solutions/007._Reverse_Integer.md b/docs/Leetcode_Solutions/007._Reverse_Integer.md index 1b327bf57..b3a00f61b 100644 --- a/docs/Leetcode_Solutions/007._Reverse_Integer.md +++ b/docs/Leetcode_Solutions/007._Reverse_Integer.md @@ -102,6 +102,6 @@ class Solution: """ mark = 1 if x>=0 else -1 x_abs = abs(x) - result = mark * int(''.join(str(x_abs)[::-1])) + result = mark * int(str(x_abs)[::-1]) return result if -2**31 <= result <= 2**31-1 else 0 ``` From 95447b10a5c9ea7f78d7cadf9da0cd61909aac1b Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Wed, 27 Jun 2018 18:35:48 +0800 Subject: [PATCH 0564/2496] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20readme=20?= =?UTF-8?q?=E6=A8=A1=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 33 ++++++++++++++++++++---- docs/Leetcode_Solutions/001._two_sum.md | 14 +++++++--- images/MainPage/ApacheCN-group.png | Bin 0 -> 1827 bytes 3 files changed, 38 insertions(+), 9 deletions(-) create mode 100644 images/MainPage/ApacheCN-group.png diff --git a/README.md b/README.md index c76566673..47cb8f7de 100644 --- a/README.md +++ b/README.md @@ -3,17 +3,35 @@ * 英文官网: https://leetcode.com * 中文官网: https://leetcode-cn.com -## 1.LeetCode 习题集合 +> slogan: **不想装逼的朋友,我们都不想认识** + +* **LeetCode 刷题群 | ApacheCN【812791932】LeetCode 刷题 | ApacheCN ** +* [ApacheCN repo 地址](https://github.com/apachecn/leetcode): https://github.com/apachecn/leetcode +* **ApacheCN 网友捐赠页面:http://www.apachecn.org/organization/664.html** + +## LeetCode 习题集合 * [LeetCode 习题集合](/docs/Leetcode_Solutions) -## 2.算法 集合 +## 算法 汇总集合 -* [算法 集合](/docs/Algorithm) +* [算法 汇总集合](/docs/Algorithm) * [八大排序算法 集合](/docs/Algorithm/Sort) * [Wikipedia: List of Algorithms](https://en.wikipedia.org/wiki/List_of_algorithms) -## 推荐的一些LeetCode网站 +## 模版要求 + +> 基本要求(提交PR前) + +* 要不:有不一样的思路 +* 要不:优化时间复杂度和空间复杂度 +* 要不:简化代码 + +> **案例模版** + +[模版:1. Two Sum 两数之和](/docs/Leetcode_Solutions/001._two_sum.md) + +## 推荐 LeetCode 网站 1. [KrisYu的Github](https://github.com/KrisYu/LeetCode-CLRS-Python) 2. [kamyu104的Github](https://github.com/kamyu104/LeetCode) @@ -27,8 +45,13 @@ 10. [小土刀的面试刷题笔记](http://wdxtub.com/interview/14520594642530.html) 11. [nonstriater/Learn-Algorithms](https://github.com/nonstriater/Learn-Algorithms) 12. [剑指 Offer 题解](https://github.com/gatieme/CodingInterviews) +13. https://algorithm.yuanbin.me/zh-hans +14. https://github.com/liuchuo/LeetCode +15. https://github.com/anxiangSir/SwordforOffer +16. https://www.nowcoder.com/ta/coding-interviews?page=1 +17. 【小姐姐】刷题博客:https://www.liuchuo.net/about -### Please note, this repository is inspired from [KrisYu](https://github.com/KrisYu/LeetCode-CLRS-Python). However, it has been modified, added and improved to reflect our knowledge, wisdom and effort. +> Please note, this repository is inspired from [KrisYu](https://github.com/KrisYu/LeetCode-CLRS-Python). However, it has been modified, added and improved to reflect our knowledge, wisdom and effort. - 💪 就是干!如果你觉得有帮助请点个star,谢谢! diff --git a/docs/Leetcode_Solutions/001._two_sum.md b/docs/Leetcode_Solutions/001._two_sum.md index df46049f4..973744b90 100644 --- a/docs/Leetcode_Solutions/001._two_sum.md +++ b/docs/Leetcode_Solutions/001._two_sum.md @@ -1,9 +1,15 @@ # 1. Two Sum 两数之和 -## 题目: +**难度: Easy** -* https://leetcode.com/problems/two-sum/ -* https://leetcode-cn.com/problems/two-sum/description/ +## 刷题内容 + +> 原题连接 + +* https://leetcode.com/problems/two-sum +* https://leetcode-cn.com/problems/two-sum/description + +> 内容描述 ``` 给定 nums = [2, 7, 11, 15], target = 9 @@ -12,7 +18,7 @@ 所以返回 [0, 1] ``` -## 难度: Easy +## 解决方案 > 思路 1 diff --git a/images/MainPage/ApacheCN-group.png b/images/MainPage/ApacheCN-group.png new file mode 100644 index 0000000000000000000000000000000000000000..ea93fc51640c1a19cbc62fb42ef48dd8e35dfed8 GIT binary patch literal 1827 zcmV+;2i*9HP)ccWHX`L6qMvsui)$M_HyC&lT$JO+u9?P&%NF5W0brufV1V#vq7EE zY%?1UweMuR>WHVo-RSm#!sN}Hd2V)N(c|qEo8}^v(p_3WqHS8mkZMAZzZs_a!6>g*WT~??ehD2G$f0x zqga{3Fp0m7psrG@+uh9Bb3iu6%+`BSOem`D{{H{Jh*)!zd4;jk)2NSAf1mO7{P5Sn zC7$5i;K~Jw6~bFc}?};%U5?{Ql!v@KP{zZ zRlC34eoH%(U`Q0f_H@SbR=V#xl*nYi@RqyQ6s_>*=IdxLBl6a}Ppi4scJ&($f~!Wlr^X2-qGWHo4C>J`>JkU@6fc6SWIm*BiP>Q z(4vERfM&9NSQ?+`oLx5Q@A@oxt{RNiII!=TuG`tfwY79jKini1j#`!a!*rVI{f=4=5f1>x~(3)38(R5;7Ek_%K6RT#&|Y(sOT6sm#MMVHF7K}*Sf}}Nv})q zUAHxG(`2m-v&b^2G)8v{ZG8dT1E>*Yigq`0!_A(krQoC59#hCfmPuApnI@Ruy|V~; zI7d6+|D2io-S7L~-@WtQ;hdF=PKa{8Tr2jg5 z_R@BAQBgTZL@VWmphN_bQ#>VHx7c0uS4X% z8KMxq{pdnx+b=U1(oH2H~^bqlWEw5|9kv=^4>Y?|g#jeND9rkt(q zQU!IFGfVM1t09NxeRg>$TL@+EepzToTVDMud6Vz90nOY)hwj`wv<;ode#1O1UP&|1 z!-<=Xxg-k-LYeLs+&dS`W^mP^n(^K3xfUen|aYiIR@^?n^p-1YLY->X! zh36GLsFeso105Yh*s-G;qJz~Vc&yB*MPa9Tc2g*fgiw?5Wd_7)i< zm9OEIKWEM?{&)r?$aGBQ8ICC$2X&Y{O?F^3#S2k9QE64@F;5FvCGqg4&EAP|sEIAb zcN=K=f)^_)D&GF7@3Lim|L8^0tePj@g~c^7bezYEFfP}NFm~*%&ci8QF%c(vs|npjw9%IrY$GZtrA&2ZQ_uJKNxx;pb@CV zSx$(Cv`Qr{Q`M~w#N^kD5Gqsrsm?WYYEmjmlm;$(kFyX8H5tC^xEGRSsdfL?mcoQW zsc?Vm)TyPn+$R}mhk_KvgiH<=#mJ~F8aalLTxRn-2~mN0{prJggyHf3pc7V}yYe-7 z5^gUo?ce{=82T78DX~okDvCn4FhLGJsL?3D#Ly?V*7mHerB9y~pz+6tK86f*{d)xk z1^sRW^@HGddpDscJRr-GBn1NXc2IpF5RfFe#(`bchV|S<6VB^QCv{oR90rMPw)1z( R<%<9S002ovPDHLkV1i93(UkxI literal 0 HcmV?d00001 From 37d583018bb0272c57b9811b3ae73c1fd884c882 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 27 Jun 2018 19:37:54 +0800 Subject: [PATCH 0565/2496] Update 009._Palindrome_Number.md --- docs/Leetcode_Solutions/009._Palindrome_Number.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Leetcode_Solutions/009._Palindrome_Number.md b/docs/Leetcode_Solutions/009._Palindrome_Number.md index bd97bbd85..96714ac87 100644 --- a/docs/Leetcode_Solutions/009._Palindrome_Number.md +++ b/docs/Leetcode_Solutions/009._Palindrome_Number.md @@ -29,7 +29,7 @@ ## 难度:Medium -> 思路1 +> 思路1 (满足Follow up) - 首先负数肯定不是palindrome - 其次如果一个数字是一个正数,并且能被我0整除那它肯定也不是palindrome From e5873b67556915718a0ed850ec961c2d4dda2e46 Mon Sep 17 00:00:00 2001 From: chenyyx Date: Wed, 27 Jun 2018 19:59:39 +0800 Subject: [PATCH 0566/2496] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20two=5Fsum=20?= =?UTF-8?q?=E7=9A=84=20solution?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Leetcode_Solutions/001._two_sum.ipynb | 251 +++++++++++++++++++++ 1 file changed, 251 insertions(+) create mode 100644 docs/Leetcode_Solutions/001._two_sum.ipynb diff --git a/docs/Leetcode_Solutions/001._two_sum.ipynb b/docs/Leetcode_Solutions/001._two_sum.ipynb new file mode 100644 index 000000000..c1fc51bf0 --- /dev/null +++ b/docs/Leetcode_Solutions/001._two_sum.ipynb @@ -0,0 +1,251 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 1. Two Sum 两数之和\n", + "\n", + "## 题目:\n", + "\n", + " - https://leetcode.com/problems/two-sum/\n", + " - https://leetcode-cn.com/problems/two-sum/description/\n", + "\n", + "```\n", + "给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。\n", + "\n", + "你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。\n", + "\n", + "> 示例:\n", + "\n", + "给定 nums = [2, 7, 11, 15], target = 9\n", + "\n", + "因为 nums[0] + nums[1] = 2 + 7 = 9\n", + "所以返回 [0, 1]\n", + "```\n", + "\n", + "## 难度:Easy\n", + "\n", + "这个题目略微有点简单,我们只要注意的是,同样的元素不能被重复利用两次。\n", + "\n", + "还有就是思考,是不是我们可以使用一次循环就能够找到这两个数呢?\n", + "\n", + "接下来我们看一下如何解决这个问题。\n", + "\n", + "> 思路 1\n", + "\n", + " - 简单判断一下,是否两个数都在 list 中,以及判断两个数不是重复利用一个元素即可。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, 2]\n" + ] + } + ], + "source": [ + "class Solution(object):\n", + " def twoSum(self, nums, target):\n", + " \"\"\"\n", + " :type nums: List[int]\n", + " :type target: int\n", + " :rtype: List[int]\n", + " \"\"\"\n", + " # 循环名为 nums 的 list\n", + " for num_one in nums:\n", + " # 判断 target 减去 num_one 是否仍在我们的 nums list 中,另一个条件是这两个数不是同一个元素\n", + " if target - num_one in nums and num_one is not target-num_one:\n", + " # 返回两个数对应的 index\n", + " return [nums.index(num_one), nums.index(target - num_one)]\n", + " \n", + "nums = [4, 3, 5, 15]\n", + "target = 8\n", + "s = Solution()\n", + "print(s.twoSum(nums, target))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> 思路 2\n", + "\n", + " - 其实我们上一个解决方案已经是弄的一个 for 循环了,这次我们换一个思路。\n", + " - 可以用 $O(n^2)$ 的循环(lookup)\n", + " - 其实也可以牺牲空间换取时间,异常聪明的 AC 解法\n", + " \n", + "```\n", + " 2 7 11 15\n", + " 不存在 存在之中 \n", + "lookup {2:0} [0, 1]\n", + "```\n", + "大体思路如下:\n", + "\n", + " - 建立字典 lookup 存放第一个数字,并存放该数字的 index\n", + " - 判断 lookup 中是否存在: target - 当前数字, 则表面 当前值和 lookup中的值加和为 target\n", + " - 如果存在,则返回: target - 当前数字 的 index 和 当前值的 index" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, 2]\n" + ] + } + ], + "source": [ + "class Solution(object):\n", + " def twoSum(self, nums, target):\n", + " \"\"\"\n", + " :type nums: List[int]\n", + " :type target: int\n", + " :rtype: List[int]\n", + " \"\"\"\n", + " # 创建 lookup 字典\n", + " lookup = {}\n", + " # 使用 enumerate 语法,返回的是每一个元素及其对应的 index\n", + " for i, num in enumerate(nums):\n", + " if target - num in lookup:\n", + " return [lookup[target - num],i]\n", + " lookup[num] = i\n", + " return []\n", + " \n", + "nums = [4, 3, 5, 15]\n", + "target = 8\n", + "s = Solution()\n", + "print(s.twoSum(nums, target))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> 思路 3\n", + "\n", + " - 对于 dict ,也就是其他语言的 map,判断一个元素在不在容器中,list 要遍历,而 set 和 dict 直接根据哈希算出,不需要遍历\n", + " - 我们可以仿照上面的代码,但是换个简单的写法。\n", + " - 对于字典的这种方式,如果我们只是判断 i 以及 target - i 是不是相等,这样是错误的,如果两个元素相同,但是不是同一个元素,那就会出错了。\n", + " \n", + "比如,我们先看一下错误的版本:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "None\n" + ] + } + ], + "source": [ + "class Solution:\n", + " def twoSum(self, nums, target):\n", + " \"\"\"\n", + " :type nums: List[int]\n", + " :type target: int\n", + " :rtype: List[int]\n", + " \"\"\"\n", + " dict1 = {}\n", + " for k, i in enumerate(nums):\n", + " dict1[i] = k\n", + " if target - i in dict1 and i is not target - i:\n", + " return [dict1[target - i], dict1[i]]\n", + "\n", + "nums = [3, 3]\n", + "target = 6\n", + "s = Solution()\n", + "print(s.twoSum(nums, target))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上面的代码是存在问题的,对于相同的元素 [3, 3], target =6, 就得到了 None ,按理说,应该得到 [0, 1] 的。所以,这地方的判断是错误的。\n", + "\n", + " - 对于字典的那种方式,就只能索引为 key,数据为value,只是这样一来,判断在或者不在,还是多了一层循环\n", + " \n", + "下面的版本是正确的版本:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0, 1]\n" + ] + } + ], + "source": [ + "class Solution:\n", + " def twoSum(self, nums, target):\n", + " \"\"\"\n", + " :type nums: List[int]\n", + " :type target: int\n", + " :rtype: List[int]\n", + " \"\"\"\n", + " for k, i in enumerate(nums):\n", + " if target - i in nums[k + 1:]:\n", + " return [k, nums[k + 1:].index(target - i) + k + 1]\n", + "\n", + "nums = [3, 3]\n", + "target = 6\n", + "s = Solution()\n", + "print(s.twoSum(nums, target)) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 小结\n", + "\n", + "应该还有更加好的解法,大佬们积极贡献自己的解法哈。一起为好的工作,好的未来,加油。" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 65fa953e3e0ae2c6cf9d50e6f752ee88656c06d5 Mon Sep 17 00:00:00 2001 From: cclauss Date: Wed, 27 Jun 2018 14:19:35 +0200 Subject: [PATCH 0567/2496] print() is a function in Python 3 --- docs/Algorithm/Sort/BubbleSort.py | 3 ++- docs/Algorithm/Sort/InsertSort.py | 5 +++-- docs/Algorithm/Sort/MergeSort.py | 13 +++++++------ docs/Algorithm/Sort/QuickSort.py | 7 ++++--- docs/Algorithm/Sort/SelectionSort.py | 5 +++-- docs/Algorithm/Sort/ShellSort.py | 7 ++++--- ...\212\200\345\267\247\347\254\224\350\256\260.py" | 1 + src/py2.x/TreeRecursionIterator.py | 5 +++-- src/py2.x/list2iteration.py | 1 + src/py3.x/TreeRecursionIterator.py | 5 +++-- src/py3.x/list2iteration.py | 1 + 11 files changed, 32 insertions(+), 21 deletions(-) diff --git a/docs/Algorithm/Sort/BubbleSort.py b/docs/Algorithm/Sort/BubbleSort.py index 6e2f23940..37983ab96 100644 --- a/docs/Algorithm/Sort/BubbleSort.py +++ b/docs/Algorithm/Sort/BubbleSort.py @@ -2,6 +2,7 @@ # 冒泡排序 +from __future__ import print_function def bubble_sort(l): length = len(l) # 外层循环 length遍,内层循环少一遍 @@ -16,4 +17,4 @@ def bubble_sort(l): if __name__ == "__main__": l = [5, 1, 9, 3, 2, 7] bubble_sort(l) - print l + print(l) diff --git a/docs/Algorithm/Sort/InsertSort.py b/docs/Algorithm/Sort/InsertSort.py index 09b935114..5f8e3b08d 100644 --- a/docs/Algorithm/Sort/InsertSort.py +++ b/docs/Algorithm/Sort/InsertSort.py @@ -5,13 +5,14 @@ 插入排序的前提是:左边是有序的数列 而冒泡排序:相邻的值进行交换,一共进行n次交换 """ +from __future__ import print_function def insert_sort(l): # 循环 除第一个数字组成的有序数组 以外的数字 for i in range(1, len(l)): # 每一个数字,依次和有序数组进行比较 - print l[:i] + print(l[:i]) for j in range(len(l[:i])): if l[i] < l[j]: l[i], l[j] = l[j], l[i] @@ -19,6 +20,6 @@ def insert_sort(l): if __name__ == "__main__": l = [5, 1, 9, 3, 2, 7] - print l + print(l) insert_sort(l) print("result: " + str(l)) diff --git a/docs/Algorithm/Sort/MergeSort.py b/docs/Algorithm/Sort/MergeSort.py index 1ad19e86d..930ba6bd1 100644 --- a/docs/Algorithm/Sort/MergeSort.py +++ b/docs/Algorithm/Sort/MergeSort.py @@ -1,6 +1,7 @@ # coding: utf-8 +from __future__ import print_function def MergeSort(lists): if len(lists) <= 1: return lists @@ -8,10 +9,10 @@ def MergeSort(lists): # 从中间,进行数据的拆分, 递归的返回数据进行迭代排序 left = MergeSort(lists[:num]) right = MergeSort(lists[num:]) - print left - print "*" * 20 - print right - print "_" * 20 + print(left) + print("*" * 20) + print(right) + print("_" * 20) return Merge(left, right) @@ -27,9 +28,9 @@ def Merge(left, right): r += 1 result += right[r:] result += left[l:] - print 'result:', result + print('result:', result) return result if __name__ == "__main__": - print MergeSort([1, 2, 3, 4, 5, 6, 7, 90, 21, 23, 45]) + print(MergeSort([1, 2, 3, 4, 5, 6, 7, 90, 21, 23, 45])) diff --git a/docs/Algorithm/Sort/QuickSort.py b/docs/Algorithm/Sort/QuickSort.py index acf81118a..4a9fb88cf 100644 --- a/docs/Algorithm/Sort/QuickSort.py +++ b/docs/Algorithm/Sort/QuickSort.py @@ -2,6 +2,7 @@ # coding:utf8 +from __future__ import print_function def quick_sort(l, start, end): i = start j = end @@ -14,12 +15,12 @@ def quick_sort(l, start, end): while i < j: # 和最右边的比较,如果>=key,然后j-1,慢慢的和前一个值比较;如果值key,那么就交换位置 while i < j and key >= l[i]: - print key, l[i], '*' * 30 + print(key, l[i], '*' * 30) i += 1 l[j] = l[i] l[i] = key @@ -32,4 +33,4 @@ def quick_sort(l, start, end): if __name__ == "__main__": l = [5, 1, 9, 3, 2, 7] quick_sort(l, 0, len(l) - 1) - print l + print(l) diff --git a/docs/Algorithm/Sort/SelectionSort.py b/docs/Algorithm/Sort/SelectionSort.py index 98ef64f72..a52a8ef47 100644 --- a/docs/Algorithm/Sort/SelectionSort.py +++ b/docs/Algorithm/Sort/SelectionSort.py @@ -5,6 +5,7 @@ 选择排序的前提是:找到最大值的位置,最后才进行1次交换 而冒泡排序:相邻的值进行交换,一共进行n次交换 """ +from __future__ import print_function def selection_sort(l): @@ -17,12 +18,12 @@ def selection_sort(l): if l[j] > l[index]: index = j l[length], l[index] = l[index], l[length] - print len(l) - length, l + print(len(l) - length, l) length -= 1 if __name__ == "__main__": l = [5, 1, 9, 3, 2, 7] - print l + print(l) selection_sort(l) print("result: " + str(l)) \ No newline at end of file diff --git a/docs/Algorithm/Sort/ShellSort.py b/docs/Algorithm/Sort/ShellSort.py index 9f591a84b..5cd764ec7 100644 --- a/docs/Algorithm/Sort/ShellSort.py +++ b/docs/Algorithm/Sort/ShellSort.py @@ -1,11 +1,12 @@ # coding: utf8 +from __future__ import print_function def insert_sort(l, start, increment): for i in range(start+increment, len(l), increment): for j in range(start, len(l[:i]), increment): if l[i] < l[j]: l[i], l[j] = l[j], l[i] - print increment, '--',l + print(increment, '--',l) return l def shell_sort(l, increment): @@ -20,6 +21,6 @@ def shell_sort(l, increment): if __name__ == "__main__": l = [5, 2, 9, 8, 1, 10, 3, 4, 7] increment = len(l)/3+1 if len(l)%3 else len(l)/3 - print "开始", l + print("开始", l) l = shell_sort(l, increment) - print "结束", l \ No newline at end of file + print("结束", l) \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" "b/docs/Leetcode_Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" index bdd0b3ab5..ed85ca4ee 100644 --- "a/docs/Leetcode_Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" +++ "b/docs/Leetcode_Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" @@ -1,3 +1,4 @@ +from __future__ import print_function # python有无数奇技淫巧和许多人不知道的秘密,这里用简洁的语言一条条表述出来,不断更新, 大家一起贡献! # 1. python 排序 diff --git a/src/py2.x/TreeRecursionIterator.py b/src/py2.x/TreeRecursionIterator.py index ffb4be32f..bf583fc82 100644 --- a/src/py2.x/TreeRecursionIterator.py +++ b/src/py2.x/TreeRecursionIterator.py @@ -1,5 +1,6 @@ # coding:utf8 +from __future__ import print_function class Node(): def __init__(self, value, left=None, right=None): self.value = value @@ -10,7 +11,7 @@ def midRecusion(node): if node is None: return midRecusion(node.left) - print node.value, + print(node.value, end=' ') midRecusion(node.right) def midIterator(node): @@ -21,7 +22,7 @@ def midIterator(node): node = node.left else: node = stack.pop(-1) - print node.value, + print(node.value, end=' ') node = node.right if __name__ == "__main__": diff --git a/src/py2.x/list2iteration.py b/src/py2.x/list2iteration.py index 145fd8335..a4a333f7d 100644 --- a/src/py2.x/list2iteration.py +++ b/src/py2.x/list2iteration.py @@ -4,6 +4,7 @@ 迭代使用的是循环结构。 递归使用的是选择结构。 ''' +from __future__ import print_function # 递归求解 def calculate(l): diff --git a/src/py3.x/TreeRecursionIterator.py b/src/py3.x/TreeRecursionIterator.py index ffb4be32f..bf583fc82 100644 --- a/src/py3.x/TreeRecursionIterator.py +++ b/src/py3.x/TreeRecursionIterator.py @@ -1,5 +1,6 @@ # coding:utf8 +from __future__ import print_function class Node(): def __init__(self, value, left=None, right=None): self.value = value @@ -10,7 +11,7 @@ def midRecusion(node): if node is None: return midRecusion(node.left) - print node.value, + print(node.value, end=' ') midRecusion(node.right) def midIterator(node): @@ -21,7 +22,7 @@ def midIterator(node): node = node.left else: node = stack.pop(-1) - print node.value, + print(node.value, end=' ') node = node.right if __name__ == "__main__": diff --git a/src/py3.x/list2iteration.py b/src/py3.x/list2iteration.py index 145fd8335..a4a333f7d 100644 --- a/src/py3.x/list2iteration.py +++ b/src/py3.x/list2iteration.py @@ -4,6 +4,7 @@ 迭代使用的是循环结构。 递归使用的是选择结构。 ''' +from __future__ import print_function # 递归求解 def calculate(l): From ca642fb555ead496ec9a1065afd596e17f50d1b5 Mon Sep 17 00:00:00 2001 From: cclauss Date: Wed, 27 Jun 2018 14:37:35 +0200 Subject: [PATCH 0568/2496] import heapq --- ...242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" | 3 +++ 1 file changed, 3 insertions(+) diff --git "a/docs/Leetcode_Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" "b/docs/Leetcode_Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" index ed85ca4ee..daf3c1e3e 100644 --- "a/docs/Leetcode_Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" +++ "b/docs/Leetcode_Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" @@ -1,4 +1,7 @@ from __future__ import print_function + +import heapq + # python有无数奇技淫巧和许多人不知道的秘密,这里用简洁的语言一条条表述出来,不断更新, 大家一起贡献! # 1. python 排序 From 9d6226f4abd5f33540478c010379400a14d23338 Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Wed, 27 Jun 2018 23:35:47 +0800 Subject: [PATCH 0569/2496] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B9=A0=E9=A2=98?= =?UTF-8?q?=EF=BC=9A181.=20duplicate-emails=20=E6=9F=A5=E6=89=BE=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E7=9A=84=E7=94=B5=E5=AD=90=E9=82=AE=E7=AE=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../181._duplicate-emails.md | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 docs/Leetcode_Solutions/181._duplicate-emails.md diff --git a/docs/Leetcode_Solutions/181._duplicate-emails.md b/docs/Leetcode_Solutions/181._duplicate-emails.md new file mode 100644 index 000000000..406861602 --- /dev/null +++ b/docs/Leetcode_Solutions/181._duplicate-emails.md @@ -0,0 +1,45 @@ +# 181. duplicate-emails 查找重复的电子邮箱 + +**难度: Easy** + +## 刷题内容 + +> 原题连接 + +* https://leetcode.com/problems/duplicate-emails +* https://leetcode-cn.com/problems/duplicate-emails/description + +> 内容描述 + +``` +编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱。 + +示例: ++----+---------+ +| Id | Email | ++----+---------+ +| 1 | a@b.com | +| 2 | c@d.com | +| 3 | a@b.com | ++----+---------+ + +根据以上输入,你的查询应返回以下结果: ++---------+ +| Email | ++---------+ +| a@b.com | ++---------+ + +说明:所有电子邮箱都是小写字母。 +``` + +## 解决方案 + +> 思路 1 + +```sql +select Email +from Person +group by Email +having count(1)>1 +``` From 977187e9e86e2f020af6c20af6ebf332c361f98a Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Wed, 27 Jun 2018 23:37:46 +0800 Subject: [PATCH 0570/2496] =?UTF-8?q?=E9=87=8D=E5=91=BD=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{181._duplicate-emails.md => 181._duplicate_emails.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/Leetcode_Solutions/{181._duplicate-emails.md => 181._duplicate_emails.md} (100%) diff --git a/docs/Leetcode_Solutions/181._duplicate-emails.md b/docs/Leetcode_Solutions/181._duplicate_emails.md similarity index 100% rename from docs/Leetcode_Solutions/181._duplicate-emails.md rename to docs/Leetcode_Solutions/181._duplicate_emails.md From 1dd1121cb511d9152955c7fe3fc1315513a75156 Mon Sep 17 00:00:00 2001 From: Yu Zhou Date: Wed, 27 Jun 2018 11:58:21 -0700 Subject: [PATCH 0571/2496] =?UTF-8?q?=E4=B8=AA=E4=BA=BA=E7=9A=84=E5=88=B7?= =?UTF-8?q?=E9=A2=98Github=20Repo=E4=BB=A5=E5=8F=8A=E8=A7=86=E9=A2=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 很不要脸的做个自我推广,主要是最近自己刚好要重整一下这个Repo,然后做一些知识点的整合,我希望能够帮助更多的人。 目前正处在刷题阶段,刷题计划再这:https://github.com/yuzhoujr/leetcode/projects/1 谢谢管理员。 --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 47cb8f7de..3bf86ec3f 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,7 @@ 15. https://github.com/anxiangSir/SwordforOffer 16. https://www.nowcoder.com/ta/coding-interviews?page=1 17. 【小姐姐】刷题博客:https://www.liuchuo.net/about +18. [公瑾的Github](https://github.com/yuzhoujr/leetcode) > Please note, this repository is inspired from [KrisYu](https://github.com/KrisYu/LeetCode-CLRS-Python). However, it has been modified, added and improved to reflect our knowledge, wisdom and effort. From 5c902e9b4ddffa97ab531e3515e61c3df2e12ded Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 28 Jun 2018 09:28:51 +0800 Subject: [PATCH 0572/2496] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3bf86ec3f..b980a4591 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ 14. https://github.com/liuchuo/LeetCode 15. https://github.com/anxiangSir/SwordforOffer 16. https://www.nowcoder.com/ta/coding-interviews?page=1 -17. 【小姐姐】刷题博客:https://www.liuchuo.net/about +17. [【小姐姐】刷题博客](https://www.liuchuo.net/about) 18. [公瑾的Github](https://github.com/yuzhoujr/leetcode) > Please note, this repository is inspired from [KrisYu](https://github.com/KrisYu/LeetCode-CLRS-Python). However, it has been modified, added and improved to reflect our knowledge, wisdom and effort. From b5195d6064dcf1904d96f05e8ea1c90c7f18cb5d Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Thu, 28 Jun 2018 13:52:33 +0800 Subject: [PATCH 0573/2496] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=2020=E9=A2=98=20?= =?UTF-8?q?=E6=9C=89=E6=95=88=E7=9A=84=E6=8B=AC=E5=8F=B7=20=E7=9A=84?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Leetcode_Solutions/001._two_sum.md | 2 +- .../020._valid_parentheses.md | 88 +++++++++++++++++-- 2 files changed, 81 insertions(+), 9 deletions(-) diff --git a/docs/Leetcode_Solutions/001._two_sum.md b/docs/Leetcode_Solutions/001._two_sum.md index 973744b90..d9368ff34 100644 --- a/docs/Leetcode_Solutions/001._two_sum.md +++ b/docs/Leetcode_Solutions/001._two_sum.md @@ -18,7 +18,7 @@ 所以返回 [0, 1] ``` -## 解决方案 +## 解题方案 > 思路 1 diff --git a/docs/Leetcode_Solutions/020._valid_parentheses.md b/docs/Leetcode_Solutions/020._valid_parentheses.md index 3b008ac91..2d1da432f 100644 --- a/docs/Leetcode_Solutions/020._valid_parentheses.md +++ b/docs/Leetcode_Solutions/020._valid_parentheses.md @@ -1,16 +1,51 @@ -### 20. Valid Parentheses +# 20. Valid Parentheses -题目: +**难度: Easy** - +## 刷题内容 -难度: +> 原题连接 -Easy +* https://leetcode.com/problems/valid-parentheses +* https://leetcode-cn.com/problems/valid-parentheses/description +> 内容描述 -### 思路: +``` +给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 + +有效字符串需满足: + +左括号必须用相同类型的右括号闭合。 +左括号必须以正确的顺序闭合。 +注意空字符串可被认为是有效字符串。 + +示例 1: + +输入: "()" +输出: true +示例 2: + +输入: "()[]{}" +输出: true +示例 3: + +输入: "(]" +输出: false +示例 4: + +输入: "([)]" +输出: false +示例 5: + +输入: "{[]}" +输出: true +``` + +## 解题方案 + +> 思路 1 因为一共只有三种状况"(" -> ")", "[" -> "]", "{" -> "}". @@ -22,8 +57,6 @@ Easy - 出stack时是否对应 - 最终stack是否为空 - - ```python class Solution(object): def isValid(self, s): @@ -50,3 +83,42 @@ class Solution(object): return stack == [] ``` +> 思路 2 + +* 扩展性和可理解性强 + +```python +class Solution: + def isValid(self, s): + """ + :type s: str + :rtype: bool + """ + if len(s) % 2 == 1: + return False + + index = 0 + stack = [i for i in s] + map1 = {"(": ")", "[": "]", "{": "}"} + + while len(stack) > 0: + # 判断索引是否超过边界 + if index >= len(stack)-1: + return False + + b = stack[index] + e = stack[index+1] + + if b not in map1.keys(): + return False + elif e in map1.keys(): + index += 1 + elif map1[b] == e: + stack.pop(index+1) + stack.pop(index) + index = 0 if index-1<0 else index-1 + else: + return False + + return stack == [] +``` From 17b1f7d6a31623c88baab2cc605bb5c799dcf11b Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Thu, 28 Jun 2018 13:53:11 +0800 Subject: [PATCH 0574/2496] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=AC=A6=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Leetcode_Solutions/020._valid_parentheses.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/Leetcode_Solutions/020._valid_parentheses.md b/docs/Leetcode_Solutions/020._valid_parentheses.md index 2d1da432f..85442a225 100644 --- a/docs/Leetcode_Solutions/020._valid_parentheses.md +++ b/docs/Leetcode_Solutions/020._valid_parentheses.md @@ -1,8 +1,7 @@ -# 20. Valid Parentheses +# 20. Valid Parentheses 有效的括号 **难度: Easy** - ## 刷题内容 > 原题连接 From 55b1fa97bbe1c94472926f3cb1cde324b7a2f504 Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Thu, 28 Jun 2018 14:17:41 +0800 Subject: [PATCH 0575/2496] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=B5=9E=E5=8A=A9?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b980a4591..305a9b2a1 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,6 @@ * **LeetCode 刷题群 | ApacheCN【812791932】LeetCode 刷题 | ApacheCN ** * [ApacheCN repo 地址](https://github.com/apachecn/leetcode): https://github.com/apachecn/leetcode -* **ApacheCN 网友捐赠页面:http://www.apachecn.org/organization/664.html** ## LeetCode 习题集合 @@ -74,6 +73,13 @@ ApacheCN 纯粹出于学习目的与个人兴趣整理的内容。 整理内容只供学习研究参考之用。ApacheCN 保留对此版本内容的署名权及其它相关权利。 + +## 赞助我们 + +* **ApacheCN 网友捐赠页面:http://www.apachecn.org/organization/664.html** + +![](http://www.apachecn.org/wp-content/uploads/2018/02/%E6%94%AF%E4%BB%98-%E5%BE%AE%E4%BF%A1%E5%92%8C%E6%94%AF%E4%BB%98%E5%AE%9D-1024x591.png) + ## [ApacheCN 组织资源](http://www.apachecn.org/) > [kaggle: 机器学习竞赛](https://github.com/apachecn/kaggle) From 0906ca53695c5a6e1e88734565a9ad9dbcbaf3b8 Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Thu, 28 Jun 2018 14:31:26 +0800 Subject: [PATCH 0576/2496] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=A0=87=E9=A2=98?= =?UTF-8?q?=E5=BA=8F=E5=8F=B7=EF=BC=9A=20182.=20duplicate-emails=20?= =?UTF-8?q?=E6=9F=A5=E6=89=BE=E9=87=8D=E5=A4=8D=E7=9A=84=E7=94=B5=E5=AD=90?= =?UTF-8?q?=E9=82=AE=E7=AE=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{181._duplicate_emails.md => 182._duplicate_emails.md} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename docs/Leetcode_Solutions/{181._duplicate_emails.md => 182._duplicate_emails.md} (90%) diff --git a/docs/Leetcode_Solutions/181._duplicate_emails.md b/docs/Leetcode_Solutions/182._duplicate_emails.md similarity index 90% rename from docs/Leetcode_Solutions/181._duplicate_emails.md rename to docs/Leetcode_Solutions/182._duplicate_emails.md index 406861602..d26d8e0a8 100644 --- a/docs/Leetcode_Solutions/181._duplicate_emails.md +++ b/docs/Leetcode_Solutions/182._duplicate_emails.md @@ -1,4 +1,4 @@ -# 181. duplicate-emails 查找重复的电子邮箱 +# 182. duplicate-emails 查找重复的电子邮箱 **难度: Easy** @@ -33,7 +33,7 @@ 说明:所有电子邮箱都是小写字母。 ``` -## 解决方案 +## 解题方案 > 思路 1 From 85fc41368e48ad264a1456ae42bd012b09502a73 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 28 Jun 2018 14:37:47 +0800 Subject: [PATCH 0577/2496] Update 181._duplicate_emails.md --- docs/Leetcode_Solutions/181._duplicate_emails.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/Leetcode_Solutions/181._duplicate_emails.md b/docs/Leetcode_Solutions/181._duplicate_emails.md index 406861602..aec09f5ca 100644 --- a/docs/Leetcode_Solutions/181._duplicate_emails.md +++ b/docs/Leetcode_Solutions/181._duplicate_emails.md @@ -43,3 +43,7 @@ from Person group by Email having count(1)>1 ``` +或者 +```sql +select Email from Person group by Email having count(Email) > 1 +``` From 86f296392bdaf17f4164cb48fbf0f792445d35c2 Mon Sep 17 00:00:00 2001 From: cclauss Date: Thu, 28 Jun 2018 09:42:01 +0200 Subject: [PATCH 0578/2496] =?UTF-8?q?=E4=BD=BF=E7=94=A8Travis=20CI?= =?UTF-8?q?=E5=AF=B9=E6=8B=89=E8=AF=B7=E6=B1=82=E8=BF=9B=E8=A1=8C=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 持续集成将允许我们在合并前对所有请求进行测试。 ApacheCN项目是否使用任何自动化测试系统,如[Travis CI](https://www.travis-ci.com),[Circle CI](https://www.circleci.com),[AppVeyor](http://ci.appveyor.com)? 如果存在Python语法错误或未定义的名称,http://flake8.pycqa.org将标记Travis CI构建。 E901,E999,F821,F822,F823是可以通过SyntaxError,NameError等停止运行时的“showstopper”问题。大多数其他flake8问题仅仅是“样式违规” - 对于可读性很有用,但它们不影响运行时 安全。 因此,该PR建议在整个代码库上对这些测试进行flake8运行。 F821:未定义的名称 F822:__all__中的未定义名称 F823:分配前引用的局部变量名称 E901:SyntaxError或IndentationError E999:SyntaxError - 无法将文件编译到抽象语法树中 --- .travis.yml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..6f611adb6 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,28 @@ +group: travis_latest +language: python +cache: pip +python: + - 2.7 + - 3.7 + #- nightly + #- pypy + #- pypy3 +matrix: + allow_failures: + - python: 2.7 + - python: nightly + - python: pypy + - python: pypy3 +install: + #- pip install -r requirements.txt + - pip install flake8 # pytest # add another testing frameworks later +before_script: + # stop the build if there are Python syntax errors or undefined names + - flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics + # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide + - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics +script: + - true # pytest --capture=sys # add other tests here +notifications: + on_success: change + on_failure: change # `always` will be the setting once code changes slow down From 214c5715d7efbf6382ae5c3077b9a70652959bb3 Mon Sep 17 00:00:00 2001 From: cclauss Date: Thu, 28 Jun 2018 10:10:17 +0200 Subject: [PATCH 0579/2496] Python 3.7 --> 3.6 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 6f611adb6..9e5a6ab0e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,7 @@ language: python cache: pip python: - 2.7 - - 3.7 + - 3.6 #- nightly #- pypy #- pypy3 From 87dae29a74d773f693ac0912eac838d90cf665ec Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Thu, 28 Jun 2018 17:22:32 +0800 Subject: [PATCH 0580/2496] =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=9A53.=20?= =?UTF-8?q?=E6=9C=80=E5=A4=A7=E5=AD=90=E5=BA=8F=E5=92=8C=20=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../053._maximum_subarray.md | 52 +++++++++++-------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/docs/Leetcode_Solutions/053._maximum_subarray.md b/docs/Leetcode_Solutions/053._maximum_subarray.md index e71c549d1..ac95e00fd 100644 --- a/docs/Leetcode_Solutions/053._maximum_subarray.md +++ b/docs/Leetcode_Solutions/053._maximum_subarray.md @@ -1,14 +1,33 @@ -### 53. Maximum Subarray +# 53. Maximum Subarray 最大子序和 -题目: - +**难度: Medium** +## 刷题内容 -难度: -Medium +> 原题连接 +* https://leetcode.com/problems/maximum-subarray +* https://leetcode-cn.com/problems/maximum-subarray/description -思路一: +> 内容描述 + +``` +给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 + +示例: + +输入: [-2,1,-3,4,-1,2,1,-5,4], +输出: 6 +解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 + +进阶: + +如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。 +``` + +## 解题方案 + +> 思路 1 O(N^2) @@ -31,13 +50,11 @@ class Solution(object): return m ``` -思路二: +> 思路 2 -动归 - -ms(i) = max(ms[i-1]+ a[i],a[i]) - -到i处的最大值两个可能,一个是加上a[i],另一个从a[i]起头,重新开始。可以AC +* 动态规划(只关注:当然值 和 当前值+过去的状态,是变好还是变坏,一定是回看容易理解) +* ms(i) = max(ms[i-1]+ a[i],a[i]) +* 到i处的最大值两个可能,一个是加上a[i], 另一个从a[i]起头,重新开始。可以AC ```python class Solution(object): @@ -53,9 +70,7 @@ class Solution(object): return max(maxSum) ``` - -思路三: - +> 思路 3 Kadane’s Algorithm wikipedia可以查到,然后一般的是负的可以还回0,这里需要稍作修改,参考 @@ -93,14 +108,10 @@ class Solution(object): return maxSum ``` - -思路四: - - +> 思路 4 参见clrs 第71页,用divide and conquer,有伪码 - 最大的subarray sum有三个可能,左半段或者右半段,或者跨越左右半段, 速度比较慢,AC代码,复杂度O(NlogN) @@ -142,5 +153,4 @@ class Solution(object): return max(left_sum, right_sum, cross_sum) return find_max_subarray(nums, 0, len(nums)-1) - ``` From b78313c01e479ed1e24e8138c14caf81711f9919 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 28 Jun 2018 18:30:57 +0800 Subject: [PATCH 0581/2496] Update README.md --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 305a9b2a1..38791484e 100644 --- a/README.md +++ b/README.md @@ -20,15 +20,16 @@ ## 模版要求 -> 基本要求(提交PR前) +> 提交PR基本要求(满足任意一种即可) -* 要不:有不一样的思路 -* 要不:优化时间复杂度和空间复杂度 -* 要不:简化代码 +* 1. 不一样的思路 +* 2. 优化时间复杂度和空间复杂度,或者解决题目的Follow up +* 3. 有意义的简化代码 +* 4. 未提交过的题目 > **案例模版** -[模版:1. Two Sum 两数之和](/docs/Leetcode_Solutions/001._two_sum.md) +[模版:007. Reverse Integer 反转整数](/docs/Leetcode_Solutions/007._Reverse_Integer.md) ## 推荐 LeetCode 网站 From b4c88844f104f2fce12e77fc4041f6c883604500 Mon Sep 17 00:00:00 2001 From: chenyyx Date: Fri, 29 Jun 2018 00:04:55 +0800 Subject: [PATCH 0582/2496] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20009,=20020,=2005?= =?UTF-8?q?3,139=20=E7=9A=84=E8=A7=A3=E5=86=B3=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../009._Palindrome_Number.ipynb | 165 ++++++++++ .../020._valid_parentheses.ipynb | 302 ++++++++++++++++++ .../053._maximum_subarray.ipynb | 275 ++++++++++++++++ docs/Leetcode_Solutions/139._word_break.ipynb | 222 +++++++++++++ 4 files changed, 964 insertions(+) create mode 100644 docs/Leetcode_Solutions/009._Palindrome_Number.ipynb create mode 100644 docs/Leetcode_Solutions/020._valid_parentheses.ipynb create mode 100644 docs/Leetcode_Solutions/053._maximum_subarray.ipynb create mode 100644 docs/Leetcode_Solutions/139._word_break.ipynb diff --git a/docs/Leetcode_Solutions/009._Palindrome_Number.ipynb b/docs/Leetcode_Solutions/009._Palindrome_Number.ipynb new file mode 100644 index 000000000..4a643d0f0 --- /dev/null +++ b/docs/Leetcode_Solutions/009._Palindrome_Number.ipynb @@ -0,0 +1,165 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 9.Palindrome Number 回文数\n", + "\n", + "### 难度:Easy\n", + "\n", + "## 刷题内容\n", + "\n", + "> 原题链接\n", + "\n", + " - 中文:https://leetcode-cn.com/problems/palindrome-number/description\n", + " - 英文:https://leetcode.com/problems/palindrome-number\n", + " \n", + "> 内容描述\n", + "\n", + "```\n", + "判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。\n", + "\n", + "示例 1:\n", + "\n", + "输入: 121\n", + "输出: true\n", + "\n", + "示例 2:\n", + "\n", + "输入: -121\n", + "输出: false\n", + "解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。\n", + "\n", + "示例 3:\n", + "\n", + "输入: 10\n", + "输出: false\n", + "解释: 从右向左读, 为 01 。因此它不是一个回文数。\n", + "\n", + "进阶:\n", + "\n", + "你能不将整数转为字符串来解决这个问题吗?\n", + "```\n", + "\n", + "## 解题方案\n", + "\n", + "> 思路 1\n", + "\n", + " - 首先负数肯定不是回文数\n", + " - 通过字符串进行反转,再转化为数字,对比数字是否相等就行" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "False\n", + "True\n" + ] + } + ], + "source": [ + "class Solution:\n", + " def isPalindrome(self, x):\n", + " \"\"\"\n", + " :type x: int\n", + " :rtype: bool\n", + " \"\"\"\n", + " # 如果是负数,肯定不是回文数,排除掉\n", + " if x < 0:\n", + " return False\n", + " # 我们将 数字转为 str ,然后反转,再转化为 int,比较,相等的话,就是回文数,不相等的话,就不是回文数\n", + " elif x != int(str(x)[::-1]):\n", + " return False\n", + " else:\n", + " return True\n", + " \n", + "s = Solution()\n", + "x = 2345\n", + "y = 121\n", + "print(s.isPalindrome(x))\n", + "print(s.isPalindrome(y))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> 思路 2\n", + "\n", + " - 负数一定不是回文数\n", + " - 如果一个数字是正数,并且能被我 0 整除那它肯定也不是 palidrome\n", + " - 这样我们就降低了复杂度" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "False\n", + "True\n" + ] + } + ], + "source": [ + "class Solution:\n", + " def isPalindrome(self, x):\n", + " \"\"\"\n", + " :type x: int\n", + " :rtype: bool\n", + " \"\"\"\n", + " # 处理特殊情况:\n", + " # 1、负数一定不是回文数\n", + " # 2、如果数字的最后一位是 0, 为了让数字是回文数字,则第一位数字也应该是 0,只有 0 满足这种情况\n", + " if x < 0 or (x % 10 == 0 and x is not 0):\n", + " return False\n", + " revertNumber = 0\n", + " while x > revertNumber:\n", + " revertNumber = revertNumber * 10 + x % 10\n", + " x /= 10\n", + " # 当数字长度为奇数时,我们可以通过 revertedNumber/10 去除处于中位的数字。\n", + " # 例如,当输入为 12321 时,在 while 循环的末尾我们可以得到 x = 12,revertedNumber = 123,\n", + " # 由于处于中位的数字不影响回文(它总是与自己相等),所以我们可以简单地将其去除。\n", + " return x == revertNumber or x == revertNumber/10\n", + "\n", + "s = Solution()\n", + "x = 2345\n", + "y = 121\n", + "print(s.isPalindrome(x))\n", + "print(s.isPalindrome(y))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/Leetcode_Solutions/020._valid_parentheses.ipynb b/docs/Leetcode_Solutions/020._valid_parentheses.ipynb new file mode 100644 index 000000000..f665733dc --- /dev/null +++ b/docs/Leetcode_Solutions/020._valid_parentheses.ipynb @@ -0,0 +1,302 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 20. Valid Parentheses 有效的括号\n", + "\n", + "### 难度:Easy\n", + "\n", + "## 刷题内容\n", + "\n", + "> 原题链接\n", + "\n", + " - 中文:https://leetcode-cn.com/problems/valid-parentheses/description\n", + " - 英文:https://leetcode.com/problems/valid-parentheses\n", + " \n", + "> 内容描述\n", + "\n", + "```\n", + "给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。\n", + "\n", + "有效字符串需满足:\n", + "\n", + "1、左括号必须用相同类型的右括号闭合。\n", + "2、左括号必须以正确的顺序闭合。\n", + "\n", + "注意空字符串可被认为是有效字符串。\n", + "\n", + "示例1:\n", + "输入: \"()\"\n", + "输出: true\n", + "\n", + "示例2:\n", + "输入: \"()[]{}\"\n", + "输出: true\n", + "\n", + "示例3:\n", + "输入: \"(]\"\n", + "输出: false\n", + "\n", + "示例4:\n", + "输入: \"([)]\"\n", + "输出: false\n", + "\n", + "示例5:\n", + "输入: \"{[]}\"\n", + "输出: true\n", + "```\n", + "\n", + "## 解题方案\n", + "\n", + "> 思路 1\n", + "\n", + "我们只需要匹配三种情况: \"(\" -> \")\", \"[\" -> \"]\", \"{\" -> \"}\".\n", + "\n", + "但是这里最重要的思想是 栈 。一遇到左括号就入栈,右括号出栈,这样来寻找对应。\n", + "\n", + "需要检查几件事:\n", + "\n", + " - 出现右括号时 stack 里是否还有符号(无论左右)\n", + " - 出 stack 时是否对应\n", + " - 最终 stack 是否为空" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "False\n", + "True\n" + ] + } + ], + "source": [ + "class Solution:\n", + " def isValid(self, s):\n", + " \"\"\"\n", + " :type s: str\n", + " :rtype: bool\n", + " \"\"\"\n", + " LEFT = {'(', '[', '{'} # 左括号\n", + " RIGHT = {')', ']', '}'} # 右括号\n", + " stack = [] # 创建一个栈\n", + " for brackets in s: # 迭代传过来的所有字符串\n", + " if brackets in LEFT: # 如果当前字符在左括号内\n", + " stack.append(brackets) # 把当前左括号入栈\n", + " elif brackets in RIGHT: # 如果是右括号\n", + " if not stack or not 1 <= ord(brackets) - ord(stack[-1]) <= 2:\n", + " # 如果当前栈为空,()]\n", + " # 如果右括号减去左括号的值不是小于等于2大于等于1\n", + " return False # 返回False\n", + " stack.pop() # 删除左括号\n", + " return not stack # 如果栈内没有值则返回True,否则返回False\n", + " \n", + "s = Solution()\n", + "print(s.isValid(\"([[])[]{}\"))\n", + "print(s.isValid(\"([])[]{}\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "与 思路 1 相同,但是更加容易理解的版本:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "False\n", + "True\n" + ] + } + ], + "source": [ + "class Solution(object):\n", + " def isValid(self, s):\n", + " \"\"\"\n", + " :type s: str\n", + " :rtype: bool\n", + " \"\"\"\n", + " leftP = '([{'\n", + " rightP = ')]}'\n", + " stack = []\n", + " for char in s:\n", + " if char in leftP:\n", + " stack.append(char)\n", + " if char in rightP:\n", + " if not stack:\n", + " return False\n", + " tmp = stack.pop()\n", + " if char == ')' and tmp != '(':\n", + " return False\n", + " if char == ']' and tmp != '[':\n", + " return False \n", + " if char == '}' and tmp != '{':\n", + " return False\n", + " return stack == []\n", + " \n", + "s = Solution()\n", + "print(s.isValid(\"([[])[]{}\"))\n", + "print(s.isValid(\"([])[]{}\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> 思路 2\n", + "\n", + " - 扩展性和可理解性更强\n", + " - 使用字典类型来存储对应关系" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "False\n", + "True\n" + ] + } + ], + "source": [ + "class Solution:\n", + " def isValid(self, s):\n", + " \"\"\"\n", + " :type s: str\n", + " :rtype: bool\n", + " \"\"\"\n", + " if len(s) % 2 == 1:\n", + " return False\n", + "\n", + " index = 0\n", + " stack = [i for i in s]\n", + " map1 = {\"(\": \")\", \"[\": \"]\", \"{\": \"}\"}\n", + "\n", + " while len(stack) > 0:\n", + " # 判断索引是否超过边界\n", + " if index >= len(stack)-1:\n", + " return False\n", + " \n", + " b = stack[index]\n", + " e = stack[index+1]\n", + "\n", + " if b not in map1.keys():\n", + " return False\n", + " elif e in map1.keys():\n", + " index += 1\n", + " elif map1[b] == e:\n", + " stack.pop(index+1)\n", + " stack.pop(index)\n", + " index = 0 if index-1<0 else index-1\n", + " else:\n", + " return False\n", + "\n", + " return stack == []\n", + " \n", + "s = Solution()\n", + "print(s.isValid(\"([[])[]{}\"))\n", + "print(s.isValid(\"([])[]{}\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> 思路 3\n", + "\n", + " - 括号匹配,我们可以换用另一种方式\n", + " - 首先,不管它是否符合第一个符号是左括号的要求,我们先把它放到list 中,作为栈,然后一个一个遍历,符合配对顺序就弹出,最终只需要判断是否栈为空就可以了" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "False\n", + "True\n" + ] + } + ], + "source": [ + "l_d = {\n", + " '{': -3,\n", + " '(': -2,\n", + " '[': -1,\n", + " ']': 1,\n", + " ')': 2,\n", + " '}': 3,\n", + "}\n", + " \n", + "class Solution:\n", + " def isValid(self, s):\n", + " l_s = []\n", + " for c_r in s:\n", + " if len(l_s) == 0:\n", + " l_s.append(c_r)\n", + " continue\n", + "\n", + " c_l = l_s[-1]\n", + "\n", + " if l_d[c_l] + l_d[c_r] == 0 and l_d[c_l] < 0:\n", + " l_s.pop()\n", + " else:\n", + " l_s.append(c_r)\n", + "\n", + " if len(l_s) == 0:\n", + " return True\n", + " else:\n", + " return False\n", + " \n", + "s = Solution()\n", + "print(s.isValid(\"([[])[]{}\"))\n", + "print(s.isValid(\"([])[]{}\"))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/Leetcode_Solutions/053._maximum_subarray.ipynb b/docs/Leetcode_Solutions/053._maximum_subarray.ipynb new file mode 100644 index 000000000..1bbb8ab21 --- /dev/null +++ b/docs/Leetcode_Solutions/053._maximum_subarray.ipynb @@ -0,0 +1,275 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 53. Maximum Subarray 最大子序和\n", + "\n", + "### 难度:Medium\n", + "\n", + "## 刷题内容\n", + "\n", + "> 原题链接\n", + "\n", + " - 中文:https://leetcode-cn.com/problems/maximum-subarray/description/\n", + " - 英文:https://leetcode.com/problems/maximum-subarray/\n", + " \n", + "> 内容描述\n", + "\n", + "```\n", + "给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。\n", + "\n", + "示例:\n", + "\n", + "输入: [-2,1,-3,4,-1,2,1,-5,4],\n", + "输出: 6\n", + "解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。\n", + "\n", + "进阶:\n", + "如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。\n", + "```\n", + "\n", + "## 解题方案\n", + "\n", + "> 思路 1\n", + "\n", + " - 可以用 O(N^2) 循环\n", + " - 从i开始,计算i到n,存比较大的sum\n", + " - 会超时,不会 AC" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6\n", + "1\n" + ] + } + ], + "source": [ + "class Solution:\n", + " def maxSubArray(self, nums):\n", + " \"\"\"\n", + " :type nums: List[int]\n", + " :rtype: int\n", + " \"\"\"\n", + " # 设置为无穷小\n", + " ans = float('-inf')\n", + " # 这个循环控制子串的元素个数\n", + " for i in range(1, len(nums)):\n", + " # 这个循环控制子串从原始串的哪个位置开始计算\n", + " for j in range(len(nums)-i):\n", + " big = 0\n", + " big = sum(nums[j : j+i])\n", + " if big > ans:\n", + " ans = big\n", + " return ans\n", + "\n", + "s = Solution()\n", + "nums_1 = [-2,1,-3,4,-1,2,1,-5,4]\n", + "nums_2 = [1, -1]\n", + "print(s.maxSubArray(nums_1))\n", + "print(s.maxSubArray(nums_2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> 思路 2\n", + "\n", + " - 使用动态规划\n", + " - ms(i) = max(ms[i-1] + a[i], a[i])\n", + " - 我们只需要知道,计算到 i 处的最大值的两种可能,一个是加上 a[i],另一个是从 a[i] 开始重新计算子串。\n", + " - 比较 ms[i-1]+a[i] 与 a[i] 的值的大小关系,如果前者小于后者,就说明,前面的子串的最大的和是负数,我们可以抛弃掉,而从 a[i] 处开始起头重新计算子串;如果前者大于后者,说明,前面的子串的最大的和是正数,我们可以加上 a[i] 继续计算。\n", + " - 可以 AC" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6\n", + "1\n" + ] + } + ], + "source": [ + "class Solution(object):\n", + " def maxSubArray(self, nums):\n", + " \"\"\"\n", + " :type nums: List[int]\n", + " :rtype: int\n", + " \"\"\"\n", + " n = len(nums)\n", + " maxSum = [nums[0] for i in range(n)]\n", + " for i in range(1,n):\n", + " \tmaxSum[i] = max(maxSum[i-1] + nums[i], nums[i])\n", + " return max(maxSum)\n", + " \n", + "s = Solution()\n", + "nums_1 = [-2,1,-3,4,-1,2,1,-5,4]\n", + "nums_2 = [1, -1]\n", + "print(s.maxSubArray(nums_1))\n", + "print(s.maxSubArray(nums_2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> 思路 3\n", + "\n", + "Kadane’s Algorithm wikipedia可以查到,然后一般的是负的可以还回0,这里需要稍作修改,参考:\n", + "http://algorithms.tutorialhorizon.com/kadanes-algorithm-maximum-subarray-problem/\n", + "\n", + "```\n", + "start:\n", + " max_so_far = a[0]\n", + " max_ending_here = a[0]\n", + "\n", + "loop i= 1 to n\n", + " (i) max_end_here = Max(arrA[i], max_end_here+a[i]);\n", + " (ii) max_so_far = Max(max_so_far,max_end_here);\n", + "\n", + "return max_so_far\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "AC 代码如下:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "6\n", + "1\n" + ] + } + ], + "source": [ + "class Solution(object):\n", + " def maxSubArray(self, nums):\n", + " \"\"\"\n", + " :type nums: List[int]\n", + " :rtype: int\n", + " \"\"\"\n", + " n = len(nums)\n", + " maxSum , maxEnd = nums[0], nums[0]\n", + " \n", + " for i in range(1,n):\n", + " maxEnd = max(nums[i],maxEnd + nums[i])\n", + " maxSum = max(maxEnd,maxSum)\n", + " return maxSum\n", + " \n", + "s = Solution()\n", + "nums_1 = [-2,1,-3,4,-1,2,1,-5,4]\n", + "nums_2 = [1, -1]\n", + "print(s.maxSubArray(nums_1))\n", + "print(s.maxSubArray(nums_2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> 思路 4\n", + "\n", + "参见clrs 第71页,用divide and conquer,有伪码\n", + "\n", + "最大的 subarray sum 有三个可能,左半段或者右半段,或者跨越左右半段,\n", + "\n", + "速度比较慢,AC代码,复杂度O(NlogN)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "class Solution(object):\n", + " def maxSubArray(self, nums):\n", + " \"\"\"\n", + " :type nums: List[int]\n", + " :rtype: int\n", + " \"\"\"\n", + " def find_max_crossing_subarray(nums, low, mid, high):\n", + " left_sum = float('-inf')\n", + " sum = 0\n", + " for i in xrange(mid,low-1,-1):\n", + " sum = sum + nums[i]\n", + " if sum > left_sum:\n", + " left_sum = sum\n", + "\n", + " right_sum = float('-inf')\n", + " sum = 0\n", + " for j in range(mid+1,high+1):\n", + " sum = sum + nums[j]\n", + " if sum > right_sum:\n", + " right_sum = sum\n", + "\n", + " return left_sum + right_sum\n", + "\n", + " def find_max_subarray(nums,low,high):\n", + " if low == high: \n", + " return nums[low]\n", + " else:\n", + " mid = (low + high) / 2\n", + " left_sum = find_max_subarray(nums, low, mid)\n", + " right_sum = find_max_subarray(nums,mid+1,high)\n", + " cross_sum = find_max_crossing_subarray(nums,low,mid,high)\n", + " # print left_sum, right_sum, cross_sum\n", + " # print mid, low, high\n", + " return max(left_sum, right_sum, cross_sum)\n", + "\n", + " return find_max_subarray(nums, 0, len(nums)-1)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/Leetcode_Solutions/139._word_break.ipynb b/docs/Leetcode_Solutions/139._word_break.ipynb new file mode 100644 index 000000000..ffbac6d1d --- /dev/null +++ b/docs/Leetcode_Solutions/139._word_break.ipynb @@ -0,0 +1,222 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Word Break 单词拆分\n", + "\n", + "### 难度:Medium\n", + "\n", + "## 刷题内容\n", + "\n", + "> 原题链接\n", + "\n", + " - 中文:https://leetcode-cn.com/problems/word-break/description/\n", + " - 英文:https://leetcode.com/problems/word-break/\n", + " \n", + "> 内容描述\n", + "\n", + "```\n", + "给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。\n", + "\n", + "说明:\n", + "\n", + "1、拆分时可以重复使用字典中的单词。\n", + "2、你可以假设字典中没有重复的单词。\n", + "\n", + "示例 1:\n", + "输入: s = \"leetcode\", wordDict = [\"leet\", \"code\"]\n", + "输出: true\n", + "解释: 返回 true 因为 \"leetcode\" 可以被拆分成 \"leet code\"。\n", + "\n", + "示例 2:\n", + "输入: s = \"applepenapple\", wordDict = [\"apple\", \"pen\"]\n", + "输出: true\n", + "解释: 返回 true 因为 \"applepenapple\" 可以被拆分成 \"apple pen apple\"。\n", + " 注意你可以重复使用字典中的单词。\n", + "\n", + "示例 3:\n", + "输入: s = \"catsandog\", wordDict = [\"cats\", \"dog\", \"sand\", \"and\", \"cat\"]\n", + "输出: false\n", + "```\n", + "\n", + "## 解题方案\n", + "\n", + "> 思路 1\n", + "\n", + " - 字符串 S ,它的长度为 N ,如果 S 能够被 字典集合(dict)中的单词拼接而成,那么所要满足的条件为:\n", + " - F(0, N) = F(0, i) && F(i, j) && F(j, N)\n", + " - 这样,如果我们想知道某个子串是否可由 Dict 中的几个单词拼接而成就可以用这样的方式得到结果(满足条件为True,不满足条件为 False)存入到一个 boolean 数组的对应位置上,这样,最后 boolean 数组的最后一位就是 F(0, N) 的值,为 True 表示这个字符串 S 可以由 Dict 中的单词拼接,否则是不行的。\n", + " - AC 代码如下" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n" + ] + } + ], + "source": [ + "class Solution:\n", + " def wordBreak(self, s, wordDict):\n", + " \"\"\"\n", + " :type s: str\n", + " :type wordDict: List[str]\n", + " :rtype: bool\n", + " \"\"\"\n", + " # 参数校验\n", + " if s is None or len(s) < 1 or wordDict is None or len(wordDict) < 1:\n", + " return False\n", + " # 标记是否匹配,match[i] 表示 [0, i-1] 都匹配\n", + " length = len(s)\n", + " match = [False for i in range(length + 1)]\n", + " match[0] = True\n", + " \n", + " for i in range(1, length +1):\n", + " for j in range(i):\n", + " if match[j] and s[j:i] in wordDict:\n", + " match[i] = True\n", + " break\n", + " return match[length]\n", + "\n", + "\n", + "sss = Solution()\n", + "s = \"leetcode\"\n", + "wordDict = [\"leet\", \"code\"]\n", + "print(sss.wordBreak(s, wordDict))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "> 思路 2\n", + "\n", + " - **ok[i] 表示 s[:i] 是不是存在于我们的字典中。**\n", + " - 原理类似于我们上面的 思路 1" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n" + ] + } + ], + "source": [ + "class Solution(object):\n", + " def wordBreak(self, s, wordDict):\n", + " \"\"\"\n", + " :type s: str\n", + " :type wordDict: List[str]\n", + " :rtype: bool\n", + " \"\"\"\n", + " ok = [True]\n", + " for i in range(1, len(s)+1):\n", + " ok += [any(ok[j] and s[j:i] in wordDict for j in range(i))]\n", + " return ok[-1]\n", + " \n", + "sss = Solution()\n", + "s = \"leetcode\"\n", + "wordDict = [\"leet\", \"code\"]\n", + "print(sss.wordBreak(s, wordDict))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "但是往list里面加数据的方法有快有慢,下面是对比:\n", + "\n", + "```python\n", + ">>> from timeit import timeit\n", + ">>> timeit('x.append(1)', 'x = []', number=10000000)\n", + "1.9880003412529277\n", + ">>> timeit('x += 1,', 'x = []', number=10000000)\n", + "1.2676891852971721\n", + ">>> timeit('x += [1]', 'x = []', number=10000000)\n", + "3.361207239950204\n", + "```\n", + "\n", + "因此我们可以将代码直接换成下面的格式:\n", + "\n", + "```python\n", + "ok += any(ok[j] and s[j:i] in wordDict for j in range(i)) # 会报错\n", + "```\n", + "\n", + "但是这样会报错,TypeError: 'bool' object is not iterable,因此bool类型数据不能这样加,别的可以(list类型本身当然要注意哈)\n", + "\n", + "因此在这个例子中我们这样:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n" + ] + } + ], + "source": [ + "class Solution(object):\n", + " def wordBreak(self, s, wordDict):\n", + " \"\"\"\n", + " :type s: str\n", + " :type wordDict: List[str]\n", + " :rtype: bool\n", + " \"\"\"\n", + " ok = [True]\n", + " for i in range(1, len(s)+1):\n", + " ok += any(ok[j] and s[j:i] in wordDict for j in range(i)),\n", + " return ok[-1]\n", + " \n", + "sss = Solution()\n", + "s = \"leetcode\"\n", + "wordDict = [\"leet\", \"code\"]\n", + "print(sss.wordBreak(s, wordDict))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From a64207137a1b3a47b49c0ca1be24536b45360444 Mon Sep 17 00:00:00 2001 From: Joy yx Date: Fri, 29 Jun 2018 00:12:26 +0800 Subject: [PATCH 0583/2496] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20readme=20?= =?UTF-8?q?=E6=96=87=E6=A1=A3=EF=BC=8C=E8=B4=A1=E7=8C=AE=E8=80=85=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=20=E5=B0=8F=E7=91=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 更新 readme 文档,贡献者添加 小瑶 --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 38791484e..92721bdfb 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,7 @@ * [@Lisanaaa](https://github.com/Lisanaaa) * [@片刻](https://github.com/jiangzhonglian) +* [@小瑶](https://github.com/chenyyx) ## 免责声明 From 517306c4c3b88e73ea3d674e3a398222cb1888c4 Mon Sep 17 00:00:00 2001 From: chenyyx Date: Fri, 29 Jun 2018 21:20:26 +0800 Subject: [PATCH 0584/2496] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20002=20=E5=92=8C?= =?UTF-8?q?=20007=20=E8=A7=A3=E5=86=B3=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../002._add_two_numbers.ipynb | 245 ++++++++++++++++++ .../007._Reverse_Integer.ipynb | 168 ++++++++++++ 2 files changed, 413 insertions(+) create mode 100644 docs/Leetcode_Solutions/002._add_two_numbers.ipynb create mode 100644 docs/Leetcode_Solutions/007._Reverse_Integer.ipynb diff --git a/docs/Leetcode_Solutions/002._add_two_numbers.ipynb b/docs/Leetcode_Solutions/002._add_two_numbers.ipynb new file mode 100644 index 000000000..7971d4200 --- /dev/null +++ b/docs/Leetcode_Solutions/002._add_two_numbers.ipynb @@ -0,0 +1,245 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 2.Add Two Numbers\n", + "\n", + "### 难度:Medium\n", + "\n", + "## 刷题内容:\n", + "\n", + "> 原题链接:\n", + "\n", + " - 中文:https://leetcode-cn.com/problems/add-two-numbers/description/\n", + " - 英文:https://leetcode.com/problems/add-two-numbers/\n", + "\n", + "> 内容描述:\n", + "\n", + "给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。\n", + "\n", + "你可以假设除了数字 0 之外,这两个数字都不会以零开头。\n", + "\n", + "示例:\n", + "```\n", + "输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)\n", + "输出:7 -> 0 -> 8\n", + "原因:342 + 465 = 807\n", + "```\n", + "\n", + "## 解法方案\n", + "\n", + "由于两数相加可能会出现进位,所以加法我们谁都会算,但是要着重注意的一点是,要考虑上一位的进位,并且传递给下一位计算时的进位。\n", + "\n", + "> 思路 1\n", + "\n", + "我们先构建一个空的头结点不动,然后尾结点从头结点开始向后不断生成新的结点。遍历两个链表的公共部分,每次相加相应位数字和进位,分配到结果的链表中。公共部分遍历完后再确定长的链表剩余的部分,同样的方式遍历完。\n", + "\n", + " - 需要注意的是遍历时每次都要更新进位,不断计算和时有没有发生进位,以防止之前数据的污染。\n", + " - 对于 python 来说,需要新的变量做游标来遍历两个链表,不能直接用形参,否则我们会修改原链表。\n", + " - 注意最后可能的进位。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "7\n", + "0\n", + "8\n", + "None\n" + ] + } + ], + "source": [ + "# Definition for singly-linked list.\n", + "class ListNode:\n", + " def __init__(self, x):\n", + " self.val = x\n", + " self.next = None\n", + "\n", + "class Solution: \n", + " def addTwoNumbers(self, l1, l2):\n", + " \"\"\"\n", + " :type l1: ListNode\n", + " :type l2: ListNode\n", + " :rtype: ListNode\n", + " \"\"\"\n", + " # 用 p1, p2 赋值为 l1 和 l2 ,以防止我们的操作改变原链表\n", + " p1, p2 = l1, l2\n", + " # 创建一个空链表用来返回结果,分别有头结点和尾结点\n", + " head = ListNode(0)\n", + " tail = head\n", + " # carry 表示进位值\n", + " carry = 0\n", + " # 处理两个链表的公共部分,也就是两个链表都不为空的部分\n", + " while p1 and p2:\n", + " # 计算当前位相加的和\n", + " num = p1.val + p2.val + carry\n", + " # 大于 9 ,应该向前进一位\n", + " if num > 9:\n", + " num -= 10\n", + " carry = 1\n", + " else:\n", + " carry = 0\n", + " # 添加结点\n", + " tail.next = ListNode(num)\n", + " # 尾结点向后移动\n", + " tail = tail.next\n", + " # 移动两条链表的公共部分\n", + " p1 = p1.next\n", + " p2 = p2.next\n", + " # 取长链表剩余的部分,也就是未参与上面计算的部分\n", + " if p2:\n", + " # 如果 p2 较长,将 p2 剩余的部分赋值给 p1 ,我们只需要处理 p1 就行了\n", + " p1 = p2\n", + " # 接下来,处理长链表剩余分部分\n", + " while p1:\n", + " # 最近的一位,我们要考虑一下,是否有进位\n", + " num = p1.val + carry\n", + " if num > 9:\n", + " num -= 10\n", + " carry = 1\n", + " else:\n", + " carry = 0\n", + " # 添加结点\n", + " tail.next = ListNode(num)\n", + " tail = tail.next\n", + " \n", + " # 移动我们处理的链表\n", + " p1 = p1.next\n", + " # 如果最后仍然有进位,我们需要再分配一个结点\n", + " if carry:\n", + " # 创建一个 val 为 1 的 ListNode 结点,然后将 tail 向后移动一位\n", + " tail.next = ListNode(1)\n", + " tail = tail.next\n", + " # 将所有的加和及进位都处理完成了,现在我们将链表收尾\n", + " tail.next = None\n", + " # 将 链表的头结点返回\n", + " return head.next # 去除掉我们初始化为 0 的头结点\n", + "\n", + "la = ListNode(2)\n", + "la.next = ListNode(4)\n", + "la.next.next = ListNode(3)\n", + "\n", + "lb = ListNode(5)\n", + "lb.next = ListNode(6)\n", + "lb.next.next = ListNode(4)\n", + "\n", + "s = Solution()\n", + "ss = s.addTwoNumbers(la, lb)\n", + "print(ss.val)\n", + "print(ss.next.val)\n", + "print(ss.next.next.val)\n", + "print(ss.next.next.next) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "因此,这个地方我们可以考虑使用递归来求解,具体可以分为以下情况:\n", + "\n", + " - 当两个链表均不为空时,计算两个节点值与上一位进位的和 sum,取 sum 的个位数构建新的节点,更新进位为 sum 的十位数,令本节点的 next 指针指向下一位求和返回的节点。\n", + " - 当两个链表其中一个为空时,计算不为空的节点值与上一位进位的和 sum,更新进位为 sum 的十位数。若进位不为 0 ,取 sum 的个位数构建新节点,令本节点的 next 指针指向下一位求和返回的节点,注意只传递不为空的链表;若进位为 0,则直接更新不为空节点的值为 sum,此时此链表之后的所有高位值都不会更新,因此返回此节点。\n", + " - 若两个链表都为空,判断进位是否为 0。若进位为 0,直接返回 NULL;否则构建值为进位值的新节点,并返回此节点。\n", + " \n", + "> 思路 2\n", + "\n", + " - 跟 plus One ,add Binary 玩的同一个花样,但是相对上个思路来说,更加简单和简洁。\n", + " - 使用递归调用简化算法" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "7\n", + "0\n", + "8\n", + "None\n" + ] + } + ], + "source": [ + "# Definition for singly-linked list.\n", + "class ListNode:\n", + " def __init__(self, x):\n", + " self.val = x\n", + " self.next = None\n", + "\n", + "class Solution(object):\n", + " def addTwoNumbers(self, l1, l2):\n", + " \"\"\"\n", + " :type l1: ListNode\n", + " :type l2: ListNode\n", + " :rtype: ListNode\n", + " \"\"\"\n", + " # 特殊情况\n", + " if l1 == None:\n", + " return l2\n", + " if l2 == None:\n", + " return l1\n", + " # 如果 相加 小于 10 ,不需要进位\n", + " if l1.val + l2.val < 10:\n", + " l3 = ListNode(l1.val + l2.val)\n", + " l3.next = self.addTwoNumbers(l1.next, l2.next)\n", + " # 相加大于等于 10,需要进位\n", + " elif l1.val + l2.val >= 10:\n", + " l3 = ListNode(l1.val + l2.val - 10)\n", + " tmp = ListNode(1)\n", + " tmp.next = None\n", + " # 递归调用\n", + " l3.next = self.addTwoNumbers(l1.next, self.addTwoNumbers(l2.next ,tmp))\n", + " return l3\n", + " \n", + "la = ListNode(2)\n", + "la.next = ListNode(4)\n", + "la.next.next = ListNode(3)\n", + "\n", + "lb = ListNode(5)\n", + "lb.next = ListNode(6)\n", + "lb.next.next = ListNode(4)\n", + "\n", + "s = Solution()\n", + "ss = s.addTwoNumbers(la, lb)\n", + "print(ss.val)\n", + "print(ss.next.val)\n", + "print(ss.next.next.val)\n", + "print(ss.next.next.next)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/Leetcode_Solutions/007._Reverse_Integer.ipynb b/docs/Leetcode_Solutions/007._Reverse_Integer.ipynb new file mode 100644 index 000000000..d471473d6 --- /dev/null +++ b/docs/Leetcode_Solutions/007._Reverse_Integer.ipynb @@ -0,0 +1,168 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 7. Reverse Integer 反转整数\n", + "\n", + "### 难度:Easy\n", + "\n", + "## 刷题内容\n", + "\n", + "> 原题链接\n", + "\n", + " - 中文:https://leetcode-cn.com/problems/reverse-integer/description/\n", + " - 英文:https://leetcode.com/problems/Reverse-Integer\n", + " \n", + "> 内容描述\n", + "\n", + "```\n", + "给定一个 32 位有符号整数,将整数中的数字进行反转。\n", + "\n", + "示例 1:\n", + "输入: 123\n", + "输出: 321\n", + "\n", + "示例 2:\n", + "输入: -123\n", + "输出: -321\n", + "\n", + "示例 3:\n", + "输入: 120\n", + "输出: 21\n", + "\n", + "注意:\n", + "假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。\n", + "```\n", + "\n", + "## 解题方案\n", + "\n", + "> 思路 1\n", + "\n", + " - x > 0, flag = 1; x < 0, flag = -1\n", + " - 将 x 转成字符串 s = str(abs(x)),然后再反转字符串 s1 = s[::-1]\n", + " - 字符串再转为整数:x1 = int(s1) * flag\n", + " - 判断是否溢出,将数据返回" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "21\n", + "-654\n" + ] + } + ], + "source": [ + "class Solution:\n", + " def reverse(self, x):\n", + " \"\"\"\n", + " :type x: int\n", + " :rtype: int\n", + " \"\"\"\n", + " # 如果是负数,我们需要注意转化为绝对值\n", + " flag = 1\n", + " x_1 = 0\n", + " if x < 0:\n", + " flag = -1\n", + " x = int(str(abs(x))[::-1])\n", + " x_1 = x * flag\n", + " else:\n", + " flag = 1\n", + " x = int(str(x)[::-1])\n", + " x_1 = x * flag\n", + " if x_1 > 2**31-1 or x_1 < -2**31:\n", + " return 0\n", + " else:\n", + " return x_1\n", + "\n", + "s = Solution()\n", + "x = 120\n", + "y = -456\n", + "print(s.reverse(x))\n", + "print(s.reverse(y))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> 思路 2\n", + "\n", + " - 按照低位摘除,在按高位加上去其实就可以了\n", + " - 利用循环,每次将最后一位取出来(求余),然后将原来的数据除以 10 ,取整,这样就可以每次都得到个位数\n", + " - 按照取第二步,反向操作,取出来一个最后的个位数,然后乘以 10 ,再加上每一次得到的个位数,就实现了反转\n", + " - 注意一个点,python 中对一个数求余时,结果与 求余 的符号相同,比如 5 % 2 = 1, 5 % (-2) = -1" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "21\n", + "-654\n" + ] + } + ], + "source": [ + "class Solution:\n", + " def reverse(self, x):\n", + " \"\"\"\n", + " :type x: int\n", + " :rtype: int\n", + " \"\"\"\n", + " num = 0\n", + " flag = 1\n", + " if x > 0:\n", + " flag = 1\n", + " else:\n", + " flag = -1\n", + " while x != 0:\n", + " num = num * 10 + x % (10 * flag)\n", + " x = int(x / 10)\n", + " if num > 2**31-1 or num < -2**31:\n", + " return 0\n", + " else:\n", + " return num\n", + "s = Solution()\n", + "x = 120\n", + "y = -456\n", + "print(s.reverse(x))\n", + "print(s.reverse(y))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 02719eacfbaa95abcf31a7cc57928f4be08ebfc6 Mon Sep 17 00:00:00 2001 From: chenyyx Date: Mon, 2 Jul 2018 20:18:06 +0800 Subject: [PATCH 0585/2496] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20013=20=E7=9A=84?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../013._Roman_to_Integer.ipynb | 197 ++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 docs/Leetcode_Solutions/013._Roman_to_Integer.ipynb diff --git a/docs/Leetcode_Solutions/013._Roman_to_Integer.ipynb b/docs/Leetcode_Solutions/013._Roman_to_Integer.ipynb new file mode 100644 index 000000000..8ac444f28 --- /dev/null +++ b/docs/Leetcode_Solutions/013._Roman_to_Integer.ipynb @@ -0,0 +1,197 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 013.Roman to Integer\n", + "\n", + "### 难度:Easy\n", + "\n", + "## 刷题内容\n", + "\n", + "> 原题链接\n", + "\n", + " - 英文:https://leetcode.com/problems/roman-to-integer/\n", + " - 中文:https://leetcode-cn.com/problems/roman-to-integer/description/\n", + "\n", + "> 内容描述\n", + "\n", + "```\n", + "罗马数字包含以下七种字符:I, V, X, L,C,D 和 M。\n", + "\n", + "字符 数值\n", + "I 1\n", + "V 5\n", + "X 10\n", + "L 50\n", + "C 100\n", + "D 500\n", + "M 1000\n", + "\n", + "例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。\n", + "\n", + "通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:\n", + "\n", + "I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。\n", + "X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 \n", + "C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。\n", + "\n", + "给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。\n", + "\n", + "示例 1:\n", + "输入: \"III\"\n", + "输出: 3\n", + "\n", + "示例 2:\n", + "输入: \"IV\"\n", + "输出: 4\n", + "\n", + "示例 3:\n", + "输入: \"IX\"\n", + "输出: 9\n", + "\n", + "示例 4:\n", + "输入: \"LVIII\"\n", + "输出: 58\n", + "解释: C = 100, L = 50, XXX = 30, III = 3.\n", + "\n", + "示例 5:\n", + "输入: \"MCMXCIV\"\n", + "输出: 1994\n", + "解释: M = 1000, CM = 900, XC = 90, IV = 4.\n", + "```\n", + "\n", + "## 解题方案\n", + "\n", + "> 思路 1\n", + "\n", + " - 从前向后依次扫描,用一个临时变量记录当前数字。\n", + " - 如果没有出现题目中出现的特殊情况,那我们就可以一直一个一个加下去,这样就能得到正确结果。\n", + " - 特殊情况出现的时候,后一位数字比前一位数字大,而正常情况正好是相反的(后一位数字一定比前一位小),后一位减去前一位即可得到这两位得到的数值,但是要注意一点,我们在这之前已经将前一位进行加和了一次,所以这时候,我们要减去 2 次前一位数字。\n", + " - 其他地方没有太难的部分,以下是 AC 代码。" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1994\n" + ] + } + ], + "source": [ + "class Solution(object):\n", + " def romanToInt(self, s):\n", + " \"\"\"\n", + " :type s: str\n", + " :rtype: int\n", + " \"\"\"\n", + " lookup = {\n", + " 'M': 1000,\n", + " 'D': 500,\n", + " 'C': 100,\n", + " 'L': 50,\n", + " 'X': 10,\n", + " 'V': 5,\n", + " 'I': 1\n", + " }\n", + " res = 0\n", + " for i in range(len(s)):\n", + " if i > 0 and lookup[s[i]] > lookup[s[i-1]]:\n", + " res = res + lookup[s[i]] - 2 * lookup[s[i-1]]\n", + " else:\n", + " res += lookup[s[i]]\n", + " return res\n", + " \n", + "s = Solution()\n", + "string = \"MCMXCIV\"\n", + "print(s.romanToInt(string))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "可以修改一下的地方,我们可以将从字典中取数的逻辑封装到一个函数中,这样也比较优雅。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1994\n" + ] + } + ], + "source": [ + "def getNum(x):\n", + " return {\"I\":1,\n", + " \"V\":5,\n", + " \"X\":10,\n", + " \"L\":50,\n", + " \"C\":100,\n", + " \"D\":500,\n", + " \"M\":1000}.get(x)\n", + "\n", + "class Solution: \n", + " def romanToInt(self, s):\n", + " \"\"\"\n", + " :type s: str\n", + " :rtype: int\n", + " \"\"\"\n", + " Num = {\n", + " 'M': 1000,\n", + " 'D': 500,\n", + " 'C': 100,\n", + " 'L': 50,\n", + " 'X': 10,\n", + " 'V': 5,\n", + " 'I': 1\n", + " }\n", + " result = 0\n", + " for i in range(len(s)):\n", + " if i > 0 and Num[s[i]] > Num[s[i-1]]:\n", + " result = result + Num[s[i]] - 2 * Num[s[i-1]]\n", + " else:\n", + " result += Num[s[i]]\n", + " return result\n", + " \n", + "s = Solution()\n", + "string = \"MCMXCIV\"\n", + "print(s.romanToInt(string))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 53f987613109230630c4b8c12a83b138546da087 Mon Sep 17 00:00:00 2001 From: chenyyx Date: Tue, 3 Jul 2018 00:55:35 +0800 Subject: [PATCH 0586/2496] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20287=20=E7=9A=84?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../287._Find_the_Duplicate_Number.ipynb | 244 ++++++++++++++++++ 1 file changed, 244 insertions(+) create mode 100644 docs/Leetcode_Solutions/287._Find_the_Duplicate_Number.ipynb diff --git a/docs/Leetcode_Solutions/287._Find_the_Duplicate_Number.ipynb b/docs/Leetcode_Solutions/287._Find_the_Duplicate_Number.ipynb new file mode 100644 index 000000000..62e7895dc --- /dev/null +++ b/docs/Leetcode_Solutions/287._Find_the_Duplicate_Number.ipynb @@ -0,0 +1,244 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 287.Find the Duplicate Number 找到重复的数\n", + "\n", + "### 难度:Medium\n", + "\n", + "## 刷题内容\n", + "\n", + "> 原题链接\n", + "\n", + " - 中文:https://leetcode-cn.com/problems/find-the-duplicate-number/description/\n", + " - 英文:https://leetcode.com/problems/find-the-duplicate-number\n", + " \n", + "> 内容描述\n", + "\n", + "```\n", + "给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。\n", + "\n", + "示例 1:\n", + "输入: [1,3,4,2,2]\n", + "输出: 2\n", + "\n", + "示例 2:\n", + "输入: [3,1,3,4,2]\n", + "输出: 3\n", + "\n", + "说明:\n", + "不能更改原数组(假设数组是只读的)。\n", + "只能使用额外的 O(1) 的空间。\n", + "时间复杂度小于 O(n2) 。\n", + "数组中只有一个重复的数字,但它可能不止重复出现一次。\n", + "```\n", + "\n", + "## 解题方案\n", + "\n", + "> 思路 1\n", + "\n", + "实际上,我们在阅读完题目的时候,直观感觉,题目不是很难。但是,在我们看到下面的说明,也就是对我们题目的限制条件的时候,会猛然发现,题目的难度瞬间提升了好多倍。\n", + "\n", + "下面我列出咱们需要注意的点:\n", + " - 包含 n+1 个整数的数组\n", + " - 数组中的数字都在 1 到 n 之间(包括 1 和 n ,但是可以不连续,比如 [1,4,4,3,4])\n", + " - 重复的数字,可以重复很多次,并不限于重复 1 次,2次,3次..\n", + " - 不能更改原数组(这条是最要命的,原本我的想法是,我们可以排序完成之后,再进行二分查找法,碍于这个规定,无法进行)\n", + " - 只能用额外的 O(1) 的空间。(O(1) 空间的意思是不会因数组的长度改变而改变,对应本题就是不管我们的数组多长,我们能用的额外控制只能是 m 这个m 是一个确定的数,不会随着 n 的改变而改变。)\n", + " - 时间的复杂度小于 $O(n^2)$\n", + " \n", + "注意的点差不多就是上面所说的了。\n", + "\n", + "```\n", + "这个思路我们使用 二分查找(binary search)+ 鸽笼原理(Pigeonhole Principle)\n", + "参考维基百科关于鸽笼原理的词条链接:https://en.wikipedia.org/wiki/Pigeonhole_principle\n", + "\n", + "\"不允许修改数组\" 与 \"常数空间复杂度\" 这两个限制条件意味着:禁止排序,并且不能使用 Map 等数据结构\n", + "\n", + "小于 O(n^2) 的运行时间复杂度可以联想到使用二分将其中的一个 n 化简为 log n\n", + "可以参考 LeetCode Discuss:https://leetcode.com/discuss/60830/python-solution-explanation-without-changing-input-array\n", + "\n", + "二分枚举答案范围,使用鸽笼原理进行检验\n", + "\n", + "根据鸽笼原理,给定 n+1 个范围为 [1, n]的整数,其中一定存在数字出现至少两次。\n", + "假设枚举的数字为 n / 2 :\n", + "遍历数组,若数组中不大于 n / 2 的数字个数超过 n / 2 ,则可以确定 [1, n/2] 范围内一定有解,否则可以确定解落在 (n/2, n]范围内。\n", + "```\n", + "\n", + "也可以这样分析一下:\n", + "```\n", + "\n", + "如果n 是5,那么就会有1 2 3 4 5 一共5个数字的可能,而array size 是6,那么其中一个数字肯定会至少出现两次。\n", + "\n", + "如果没有重复的数字,小于等于1的数字 出现的次数 等于 1;\n", + "\n", + "小于等于2的数字 出现的次数 等于 2;\n", + "\n", + "... 同理3;4;5。\n", + "\n", + "如果有重复的数字,如果重复的是1,那么 小于等于1的数字 出现的次数 肯定大于1;\n", + "\n", + "基于这个理论,我们可以在1 2 3 4 5 选出一个 mid, 遍历array来count 小于等于mid 的数字个数 小于等于 它自己mid 还是 大于 mid?\n", + "\n", + "如果count 小于等于mid, 说明 1 到 mid 这些数字 没有重复项, 重复项在 右半边 mid 到n, 所以缩小到右半边继续搜索;\n", + "\n", + "如果count 大于mid, 说明 1 到 mid 这些数字中 有重复项,缩小到 左半边继续搜索。\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3\n" + ] + } + ], + "source": [ + "class Solution(object):\n", + " def findDuplicate(self, nums):\n", + " \"\"\"\n", + " :type nums: List[int]\n", + " :rtype: int\n", + " \"\"\"\n", + " low, high = 1, len(nums) - 1\n", + " while low <= high:\n", + " mid = (low + high) >> 1\n", + " cnt = sum(x <= mid for x in nums)\n", + " if cnt > mid:\n", + " high = mid - 1\n", + " else:\n", + " low = mid + 1\n", + " return low\n", + " \n", + "s = Solution()\n", + "nums = [1,2,3,3]\n", + "print(s.findDuplicate(nums))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "思路 1 的解法是时间复杂度为 $O(nlogn)$ 的解法,思路 2 则是时间复杂度为 $O(n)$ ,但是相对来说,是投机取巧了些。\n", + "> 思路 2\n", + "\n", + "一次遍历统计,另一次遍历输出即可。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3\n" + ] + } + ], + "source": [ + "class Solution(object):\n", + " def findDuplicate(self, nums):\n", + " \"\"\"\n", + " :type nums: List[int]\n", + " :rtype: int\n", + " \"\"\"\n", + " dic = dict()\n", + " for n in nums:\n", + " dic[n] = dic.get(n, 0) + 1\n", + " if dic[n] >= 2:\n", + " return n\n", + "\n", + "s = Solution()\n", + "nums = [1,2,3,3]\n", + "print(s.findDuplicate(nums))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> 思路 3 \n", + "\n", + "思路 3 则是更加完整的 $O(n)$ 的解法,现在我还没有完全搞懂,我先写在下面吧,大佬们可以提前学习了解。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3\n" + ] + } + ], + "source": [ + "class Solution(object):\n", + " def findDuplicate(self, nums):\n", + " # The \"tortoise and hare\" step. We start at the end of the array and try\n", + " # to find an intersection point in the cycle.\n", + " slow = 0\n", + " fast = 0\n", + " \n", + " # Keep advancing 'slow' by one step and 'fast' by two steps until they\n", + " # meet inside the loop.\n", + " while True:\n", + " slow = nums[slow]\n", + " fast = nums[nums[fast]]\n", + " \n", + " if slow == fast:\n", + " break\n", + " \n", + " # Start up another pointer from the end of the array and march it forward\n", + " # until it hits the pointer inside the array.\n", + " finder = 0\n", + " while True:\n", + " slow = nums[slow]\n", + " finder = nums[finder]\n", + " \n", + " # If the two hit, the intersection index is the duplicate element.\n", + " if slow == finder:\n", + " return slow\n", + " \n", + "s = Solution()\n", + "nums = [1,2,3,3]\n", + "print(s.findDuplicate(nums))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From a6a280e5f53e24f53eede5e3fed9282a198dab2c Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Wed, 4 Jul 2018 18:22:46 +0800 Subject: [PATCH 0587/2496] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20=E5=86=92?= =?UTF-8?q?=E6=B3=A1=E6=8E=92=E5=BA=8F=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Algorithm/Sort/BubbleSort.py | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/docs/Algorithm/Sort/BubbleSort.py b/docs/Algorithm/Sort/BubbleSort.py index 37983ab96..ea31a39c3 100644 --- a/docs/Algorithm/Sort/BubbleSort.py +++ b/docs/Algorithm/Sort/BubbleSort.py @@ -2,19 +2,17 @@ # 冒泡排序 -from __future__ import print_function -def bubble_sort(l): - length = len(l) - # 外层循环 length遍,内层循环少一遍 - while length: - for j in range(length - 1): - # 找出最大值,然后交换位置到最后 - if l[j] > l[length - 1]: - l[j], l[length - 1] = l[length - 1], l[j] - length -= 1 +# 1. 外层循环负责设置冒泡排序进行的次数 +# 2. 内层循环负责前后两两比较,求最大值放到最后 +def bubble_sort(nums): + for i in range(len(nums)-1): + for j in range(len(nums)-i-1): # j为列表下标 + if nums[j] > nums[j+1]: + nums[j], nums[j+1] = nums[j+1], nums[j] + return nums if __name__ == "__main__": - l = [5, 1, 9, 3, 2, 7] - bubble_sort(l) - print(l) + nums = [5, 1, 9, 3, 2, 7] + bubble_sort(nums) + print(nums) From a51f9636b65f8f6fb00c523c163671c517a08396 Mon Sep 17 00:00:00 2001 From: chenyyx Date: Fri, 6 Jul 2018 00:56:37 +0800 Subject: [PATCH 0588/2496] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20072=20=E7=9A=84?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../072._edit_distance.ipynb | 209 ++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 docs/Leetcode_Solutions/072._edit_distance.ipynb diff --git a/docs/Leetcode_Solutions/072._edit_distance.ipynb b/docs/Leetcode_Solutions/072._edit_distance.ipynb new file mode 100644 index 000000000..9072c5afa --- /dev/null +++ b/docs/Leetcode_Solutions/072._edit_distance.ipynb @@ -0,0 +1,209 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 072. Edit Distance 编辑距离\n", + "\n", + "### 难度:Hard\n", + "\n", + "## 刷题内容\n", + "\n", + "> 原题链接\n", + "\n", + " - 中文:https://leetcode-cn.com/problems/edit-distance/description/\n", + " - 英文:https://leetcode.com/problems/edit-distance/\n", + " \n", + "> 内容描述\n", + "\n", + "```\n", + "给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。\n", + "\n", + "你可以对一个单词进行如下三种操作:\n", + "\n", + "插入一个字符\n", + "删除一个字符\n", + "替换一个字符\n", + "\n", + "示例 1:\n", + "输入: word1 = \"horse\", word2 = \"ros\"\n", + "输出: 3\n", + "解释: \n", + "horse -> rorse (将 'h' 替换为 'r')\n", + "rorse -> rose (删除 'r')\n", + "rose -> ros (删除 'e')\n", + "\n", + "示例 2:\n", + "输入: word1 = \"intention\", word2 = \"execution\"\n", + "输出: 5\n", + "解释: \n", + "intention -> inention (删除 't')\n", + "inention -> enention (将 'i' 替换为 'e')\n", + "enention -> exention (将 'n' 替换为 'x')\n", + "exention -> exection (将 'n' 替换为 'c')\n", + "exection -> execution (插入 'u')\n", + "```\n", + "\n", + "## 解题方案\n", + "\n", + "这个题目是动态规划的典型例题,在 wikipedia 中是有相应页面介绍的。\n", + "\n", + " - https://en.wikipedia.org/wiki/Edit_distance#Common_algorithm\n", + " - https://en.wikipedia.org/wiki/Levenshtein_distance\n", + "\n", + "> 思路 1\n", + "\n", + " - 使用动态规划\n", + "\n", + "下面我们说说,这个题的思路。具体来描述一下。\n", + "\n", + "我们创建一个 dp[][] 二维数组,表示从 word1 的前 i 个字符(下标为:0~ i-1)到 word2 的前 j 个字符(下标为:0~j-1)的编辑过程中,需要的最少步数,那么:\n", + "\n", + "如果 $word1[i] = word2[j]$ 则 $dp[i][j] = dp[i-1][j-1]$\n", + "\n", + "如果 $word1[i] != word2[j]$ 则 $dp[i][j] = min ( dp[i-1][j] , dp[i][j-1], dp[i-1][j-1] ) + 1$\n", + "\n", + "下面就是我们对上述动态规划过程的解释:\n", + "\n", + "第一个条件比较容易理解,就是说 word1 的下标为 i 的字符 和 word2 的下标为 j 的字符相同,那么这个位置的字符我们不需要进行操作,所以我们只需要关注 word1 和 word2 去除掉相应位置的字符之后的子串的结果即可。\n", + "\n", + "我们下面对第二个条件的三种情况进行重点讲解:\n", + "\n", + "假设 word1 的前 i+1 (下标为 0~i)的子串为 \"abcde\"\n", + "假设 word2 的前 j+1 (下标为 0~j)的子串为 \"abcddgf\"\n", + "现在 word1[i] != word2[j],也就是 'e' != 'f'\n", + "\n", + "那么我们接下来应该怎么做呢?\n", + "\n", + "我们会发现,我们做的三种解释实际上就是把我们题中写到的三种操作模拟在最后一步实现。每种操作都是额外加一的操作。\n", + "\n", + "简单说,就是这样:\n", + " - 1.delete:dp[i-1][j] + 1 —— 保留了从 word1[0~i-1] 转变到 word2[0~j] 的最优操作次数,因为我们的 word1 的 0~i-1 已经能够转变到 word2 了,所以我们就直接把 word1 中的最后一个字符删除掉就行了。所以就需要额外进行一个 删除 操作。\n", + " - 2.insert:dp[i][j-1] + 1 —— 保留了从 word1[0~i] 转变到 word2[0~j-1] 的最优操作次数,因为我们的 word1 的 0~i 只能转变到 word2 的倒数第二位,所以我们就直接在 word1 的末尾添加一个与 word2 的最后一个字符相同的字符就可以了。所以就需要额外进行一个 插入 操作。\n", + " - 3.replace:dp[i-1][j-1] + 1 —— 保留了从 word1[0~i-1] 转变到 word2[0~j-1] 的最优操作次数,因为我们的 word1 的 0~i-1 只能转变到 word2 的倒数第二位,而 word1 的最后一位与 word2 的最后一位是不同的,所以现在的情况只需要额外的一个 替换 操作即可。\n", + "\n", + "\n", + "无论我们选取上面 3 中操作的哪种操作,我们选其中最小的值就可以了。\n", + "\n", + "参考链接:http://www.cnblogs.com/pandora/archive/2009/12/20/levenshtein_distance.html\n", + "\n", + "下面我们看一下代码:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3\n" + ] + } + ], + "source": [ + "class Solution:\n", + " def minDistance(self, word1, word2):\n", + " \"\"\"\n", + " :type word1: str\n", + " :type word2: str\n", + " :rtype: int\n", + " \"\"\"\n", + " # 初始化一个 len(word1)+1 * len(word2)+1 的矩阵\n", + " matrix = [[i+j for j in range(len(word2) + 1)] for i in range(len(word1) + 1)]\n", + " # 辅助理解,matrix 矩阵的样子\n", + " # print(matrix)\n", + " for i in range(1, len(word1)+1):\n", + " for j in range(1,len(word2)+1):\n", + " if word1[i-1] == word2[j-1]:\n", + " d = 0\n", + " else:\n", + " d = 1\n", + " matrix[i][j] = min(matrix[i-1][j]+1, matrix[i][j-1]+1, matrix[i-1][j-1]+d)\n", + "\n", + " return matrix[len(word1)][len(word2)]\n", + " \n", + "s = Solution()\n", + "word1 = 'horse'\n", + "word2 = 'ros'\n", + "print(s.minDistance(word1, word2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上面代码的 matrix 矩阵生成,可能会让大家产生理解误差,我在这个地方的理解也是通过大佬问,我才知道具体是怎么回事的。\n", + "\n", + "下面我们把它打印一下。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "matrix([[0, 1, 2, 3],\n", + " [1, 2, 3, 4],\n", + " [2, 3, 4, 5],\n", + " [3, 4, 5, 6],\n", + " [4, 5, 6, 7],\n", + " [5, 6, 7, 8]])" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import numpy as np\n", + "juzhen = [[i+j for j in range(len(word2) + 1)] for i in range(len(word1) + 1)]\n", + "juzhen = np.mat(juzhen)\n", + "juzhen" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "以 numpy 的样子打印出来,看这样子比较清晰。各行各列对应比较整齐。\n", + "\n", + "我要说明的是:\n", + "\n", + " - 这个 matrix 的 第 1 行(下标为0的行)的 [0, 1, 2, 3] 这个维度的意思,对应的是 dp[i][j] 。也就是说,word1 取前 i 个字符,然后编辑成 word2 时所需要转换的最少步数。因为这里 i = 0,也就是 word1 取 0 个字符,而 j 我们取 0 - 3 个字符的时候,我们从 word1 变换到 word2 的时候所需要经过的最小步数。本质上,就是在 **空的** word1 上进行对应插入 word2 对应的字符就可以变换到 word2 。word2 取几个字符,我们的最小变换次数就是几。也就对应这个维度上的数字。\n", + "\n", + " - 另一个维度上,matrix 的第 1 列(下标为 0 的列),对应的是 [0, 1, 2, 3, 4, 5] 也是对应的 dp[i][j]。只不过我们这里调换了顺序,i 现在不为 0 了,而是 j 为 0 。也就是 word1 取 0~ i 个字符的时候,变换到 word2 的最小步骤数。实际上 word2 是空的,也就是说,我们 word1 有几个字符,我们对应删除几个字符就可以得到 word2 。这就对应着我们的这个列维度上的数字。\n", + " \n", + " - 其他维度,i 和 j 都不为 0 的部分,我们的初始化的数字是没有意义的。我们在迭代过程中会全部都更改一遍。" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 2a3951288ee43974873e1d849bf273215e6a48ef Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 6 Jul 2018 06:14:04 +0800 Subject: [PATCH 0589/2496] Update 072._edit_distance.md --- docs/Leetcode_Solutions/072._edit_distance.md | 32 ++++++------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/docs/Leetcode_Solutions/072._edit_distance.md b/docs/Leetcode_Solutions/072._edit_distance.md index c2720f92b..efca5c2d0 100644 --- a/docs/Leetcode_Solutions/072._edit_distance.md +++ b/docs/Leetcode_Solutions/072._edit_distance.md @@ -1,4 +1,4 @@ -###72. Edit Distance +### 72. Edit Distance 题目: @@ -85,7 +85,7 @@ g 7 7 6 5 4 4 3 AC代码 -``` +```python class Solution(object): def minDistance(self, word1, word2): """ @@ -93,24 +93,12 @@ class Solution(object): :type word2: str :rtype: int """ - m,n = len(word1), len(word2) - dp = [[0 for i in range(m+1)] for j in range(n+1)] - - for i in range(1,m+1): - dp[0][i] = i - - for j in range(1,n+1): - dp[j][0] = j - - for j in range(1,n+1): - for i in range(1,m+1): - cost = 0 if word1[i-1] == word2[j-1] else 1 - dp[j][i] = min(dp[j-1][i] + 1, dp[j][i-1] + 1, dp[j-1][i-1] + cost) - - return dp[n][m] + if len(word1) == 0 or len(word2) == 0: # corner cases + return max(len(word1), len(word2)) + dp = [[i+j for j in range(len(word2)+1)] for i in range(len(word1)+1)] + for i in range(1, len(word1)+1): + for j in range(1, len(word2)+1): + tmp_dist = 0 if word1[i-1] == word2[j-1] else 1 + dp[i][j] = min(dp[i-1][j]+1, dp[i][j-1]+1, dp[i-1][j-1]+tmp_dist) + return dp[-1][-1] ``` - - -貌似还有提升版本,但是比较明显即使有伪码,一开始也出错于下标. - -升级版 to be learned. \ No newline at end of file From f4f8c3c4965a847fc2c68e50ae548721ca94d35a Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 6 Jul 2018 06:21:52 +0800 Subject: [PATCH 0590/2496] Update 072._edit_distance.md --- docs/Leetcode_Solutions/072._edit_distance.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/Leetcode_Solutions/072._edit_distance.md b/docs/Leetcode_Solutions/072._edit_distance.md index efca5c2d0..90f0bc775 100644 --- a/docs/Leetcode_Solutions/072._edit_distance.md +++ b/docs/Leetcode_Solutions/072._edit_distance.md @@ -33,6 +33,17 @@ Hard 上面的就不用解释了,min分别对应:删除、插入、以及替代(1/0取决 word1[i] == word2[j] ),反正也是tabular类型,画表来解决问题。 +简单说,就是这样: + +1.delete:dp[i-1][j] + 1 —— 保留了从 word1[0~i-1] 转变到 word2[0~j] 的最优操作次数,因为我们的 word1 的 0~i-1 已经能够转变到 word2 了, +所以我们就直接把 word1 中的最后一个字符删除掉就行了。所以就需要额外进行一个 删除 操作。 +2.insert:dp[i][j-1] + 1 —— 保留了从 word1[0~i] 转变到 word2[0~j-1] 的最优操作次数,因为我们的 word1 的 0~i 只能转变到 word2 的倒数第二位,所以我们就直接在 word1 的末尾添加一个与 word2 的最后一个字符相同的字符就可以了。所以就需要额外进行一个 插入 操作。 +3.replace:dp[i-1][j-1] + 1 —— 保留了从 word1[0~i-1] 转变到 word2[0~j-1] 的最优操作次数,因为我们的 word1 的 0~i-1 只能转变到 word2 的倒数第二位,而 word1 的最后一位与 word2 的最后一位是不同的,所以现在的情况只需要额外的一个 替换 操作即可。 +无论我们选取上面 3 中操作的哪种操作,我们选其中最小的值就可以了。 + +参考链接:http://www.cnblogs.com/pandora/archive/2009/12/20/levenshtein_distance.html + +***要始终明确一点,```dp[i][j]```的含义是使得```word1的前i字符子串```与```word2的前j字符子串```相等所需要的操作数,这也是为什么我们需要在初始化```dp矩阵```时需要行列数均加上```1```*** 用wikipedia上的伪码改造 From f909292bf20b2e6b1e89fefaf34c441c818e4627 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 6 Jul 2018 06:33:54 +0800 Subject: [PATCH 0591/2496] Update 073. Set Matrix Zeroes.md --- docs/Leetcode_Solutions/073. Set Matrix Zeroes.md | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/docs/Leetcode_Solutions/073. Set Matrix Zeroes.md b/docs/Leetcode_Solutions/073. Set Matrix Zeroes.md index 0b30f99ed..b8d12ccd1 100644 --- a/docs/Leetcode_Solutions/073. Set Matrix Zeroes.md +++ b/docs/Leetcode_Solutions/073. Set Matrix Zeroes.md @@ -15,7 +15,7 @@ Naive AC代码,一看类似那个 game of life,不用extra space,不用O(mn),应该就是用状态转移机了(?),所以还是先naive AC把: -``` +```python class Solution(object): def setZeroes(self, matrix): """ @@ -27,19 +27,14 @@ class Solution(object): matrix[i][m] = 0 for n in range(row): matrix[n][j] = 0 - - + row = len(matrix) col = len(matrix[0]) if row else 0 - - newM = [] - for i in range(row): - newM.append(matrix[i][:]) - - + new_matrix = [matrix[i][:] for i in range(row)] + for i in range(row): for j in range(col): - if newM[i][j] == 0: + if new_matrix[i][j] == 0: setZero(i,j) ``` From c3fa6181ddd69cf5e7d31d8262b88fb44a7267cf Mon Sep 17 00:00:00 2001 From: chenyyx Date: Fri, 6 Jul 2018 09:51:45 +0800 Subject: [PATCH 0592/2496] =?UTF-8?q?=E5=9C=A8=20072=20=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E6=96=B9=E6=A1=88=E4=B8=AD=E6=B7=BB=E5=8A=A0=20=E5=AF=B9?= =?UTF-8?q?=E4=BA=8E=20dp[][]=20=E6=95=B0=E7=BB=84=E7=9A=84=E6=8F=8F?= =?UTF-8?q?=E8=BF=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Leetcode_Solutions/072._edit_distance.ipynb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/Leetcode_Solutions/072._edit_distance.ipynb b/docs/Leetcode_Solutions/072._edit_distance.ipynb index 9072c5afa..9c8a9d1c8 100644 --- a/docs/Leetcode_Solutions/072._edit_distance.ipynb +++ b/docs/Leetcode_Solutions/072._edit_distance.ipynb @@ -58,6 +58,8 @@ "\n", "下面我们说说,这个题的思路。具体来描述一下。\n", "\n", + "要始终明确一点, dp[i][j] 的含义是使得 word1 的前 i 字符子串与 word2 的前 j 字符子串相等所需要的操作数,这也是为什么我们需要在初始化 dp 矩阵时需要行列数均加上 1 。\n", + "\n", "我们创建一个 dp[][] 二维数组,表示从 word1 的前 i 个字符(下标为:0~ i-1)到 word2 的前 j 个字符(下标为:0~j-1)的编辑过程中,需要的最少步数,那么:\n", "\n", "如果 $word1[i] = word2[j]$ 则 $dp[i][j] = dp[i-1][j-1]$\n", From e47f3a32721bbc60e755084f1627677dc0abe67f Mon Sep 17 00:00:00 2001 From: chenyyx Date: Sat, 7 Jul 2018 00:34:07 +0800 Subject: [PATCH 0593/2496] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20005=20=E7=9A=84?= =?UTF-8?q?=E8=A7=A3=E5=86=B3=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../005._longest_palindromic_substring.ipynb | 388 ++++++++++++++++++ 1 file changed, 388 insertions(+) create mode 100644 docs/Leetcode_Solutions/005._longest_palindromic_substring.ipynb diff --git a/docs/Leetcode_Solutions/005._longest_palindromic_substring.ipynb b/docs/Leetcode_Solutions/005._longest_palindromic_substring.ipynb new file mode 100644 index 000000000..f0a71c9d4 --- /dev/null +++ b/docs/Leetcode_Solutions/005._longest_palindromic_substring.ipynb @@ -0,0 +1,388 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 005. Longest Palindromic Substring 最长回文子串\n", + "\n", + "### 难度:Medium\n", + "\n", + "## 刷题内容\n", + "\n", + "> 原题链接\n", + "\n", + " - 中文:https://leetcode-cn.com/problems/longest-palindromic-substring/description/\n", + " - 英文:https://leetcode.com/problems/longest-palindromic-substring/\n", + " \n", + "> 内容描述\n", + "\n", + "```\n", + "给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。\n", + "\n", + "示例 1:\n", + "输入: \"babad\"\n", + "输出: \"bab\"\n", + "注意: \"aba\"也是一个有效答案。\n", + "\n", + "示例 2:\n", + "输入: \"cbbd\"\n", + "输出: \"bb\"\n", + "```\n", + "\n", + "## 解题方案\n", + "\n", + "> 思路 1\n", + "\n", + "如果一个字符串从左向右写和从右向左写是一样的,这样我们就把它叫做回文字符串。如 aba 或者 abba。\n", + "\n", + "首先想到的是一个最笨的方法,就是依次把每一个字符当做回文字符串的中间的那个字符,向两边扩展,找到以该字符为中间字符的回文串的最大长度。但是这需要将回文串长度是奇偶的情况分开来讨论。然后接下来要注意的关键是对边界的把握,确保下标不要越界。当子串已经包含首字符或最后一个字符且此时还是回文串的时候,下标分别会向两边多移一位,需要补回来。\n", + "\n", + "以 abba 这样一个字符串为例来看,abba 中,一共有偶数个字,第 1 位=倒数第 1 位,第 2 位=倒数第 2 位......第 N 位=倒数第 N 位\n", + "\n", + "以 aba 这样一个字符串为例来看,aba 中,一共有奇数个字符,排除掉正中间的那个字符后,第 1 位=倒数第 1 位......第 N 位=倒数第 N 位\n", + "\n", + "所以,假设找到一个长度为 len1 的子串后,我们接下去测试它是否满足,第 1 位=倒数第 1 位,第 2 位=倒数第 2 位......第 N 位=倒数第 N 位,也就是说,去测试从头尾到中点,字符是否逐一对应相等。如果一直进行了 [length/2] 次后,对应字符都相等,即满足第 i 位=倒数第 i 位。那么这个子串必然是palindromic string。并且,很容易知道,无论这个字符串长度为奇数还是偶数,都是 palindromic string,因为奇数位数的字符串相当于满足,第中间位=第中间位。\n", + "\n", + "于是,现在问题转化为能不能找到一个子串,满足,第 1 位=倒数第 1 位(下文叫做候选子串)。如果有,就对剩下的字符做进一步的检查。\n", + "\n", + "我们看一下下面的代码:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cbc\n" + ] + } + ], + "source": [ + "class Solution(object):\n", + " def longestPalindrome(self, s):\n", + " \"\"\"\n", + " :type s: str\n", + " :rtype: str\n", + " \"\"\"\n", + " if not s:\n", + " return\n", + " n = len(s)\n", + " if n == 1:\n", + " return s\n", + " # Left index of the target substring\n", + " l = 0\n", + " # Right index of the target substring\n", + " r = 0\n", + " # Length of the longest palindromic substring for now \n", + " m = 0\n", + " # Length of the current substring\n", + " c = 0\n", + " # Whether the substring contains the first character or last character\n", + " # and is palindromic\n", + " b = True\n", + " # i 设置的是字符串的一个字符\n", + " for i in range(0, n):\n", + " # 奇数情况\n", + " # j 设置的是字符串的 i 字符的左右两边的 j 个字符是不是属于回文串,n-i 限制的是不能超出字符串末尾,i+1 限制的是不能越过字符串的开头\n", + " for j in range(0, min(n - i, i + 1)):\n", + " # 如果 以 i 字符为中央字符的情况,向两边扩展,不相等的话,代表不是回文串,停止继续比较\n", + " if (s[i - j] != s[i + j]):\n", + " b = False\n", + " break\n", + " else:\n", + " # 如果以 i 字符为中心字符向左右扩展 j 个字符是回文串,那么现在回文串的长度设置为 c\n", + " c = 2 * j + 1\n", + " # 判断 c 与 m 的大小,m 记录的是我们目前为止最长的回文串的长度,如果 c > m,那我们最长回文子串设置为 c ,否则仍然是原来的 m\n", + " if (c > m):\n", + " # 设置新的回文子串的左 index,b 是 True 就是等于 1,b 是 False 等于 0\n", + " l = i - j + 1 - b\n", + " # 设置新的回文子串的右 index\n", + " r = i + j + b\n", + " # 将新的最长回文子串赋值给 m\n", + " m = c\n", + " b = True\n", + " # 偶数情况\n", + " # i+1 限制的是不超越字符串的开头,n-i-1 限制的是不超过字符串末尾\n", + " for j in range(0, min(n - i - 1, i + 1)):\n", + " # 偶数情况下,对应位置上是够相等,相等则是回文串,不相等就不是回文串\n", + " if (s[i - j] != s[i + j + 1]):\n", + " b = False\n", + " break\n", + " else:\n", + " c = 2 * j + 2\n", + " if (c > m):\n", + " l = i - j + 1 - b\n", + " r = i + j + 1 + b\n", + " m = c\n", + " b = True\n", + " # 将最终的回文串返回\n", + " return s[l:r]\n", + " \n", + "s = Solution()\n", + "nums = \"acbcd\"\n", + "print(s.longestPalindrome(nums))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "上面是我们的一个参考版本,算是思路很清晰的。下面这个是 Lisanaaa 大佬根据上面版本进行修改的完成版本,总体思路是相同的,大家可以参考下。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cbc\n" + ] + } + ], + "source": [ + "class Solution(object):\n", + " def longestPalindrome(self, s):\n", + " \"\"\"\n", + " :type s: str\n", + " :rtype: str\n", + " \"\"\"\n", + " n = len(s)\n", + "\n", + " m,l,r = 0,0,0\n", + "\n", + " for i in range(n):\n", + " # odd case\n", + " for j in range(min(i+1,n-i)):\n", + " if s[i-j] != s[i+j]:\n", + " break\n", + " if 2*j + 1 > m :\n", + " m = 2 * j + 1\n", + " l = i-j\n", + " r = i+j\n", + "\n", + "\n", + " if i+1 < n and s[i] == s[i+1]:\n", + " for j in range(min(i+1,n-i-1)):\n", + " if s[i-j] != s[i+j+1]:\n", + " break\n", + " if 2 * j + 2 > m :\n", + " m = 2*j +2\n", + " l = i-j\n", + " r = i+j+1\n", + "\n", + "\n", + " return s[l:r+1]\n", + " \n", + "s = Solution()\n", + "nums = \"acbcd\"\n", + "print(s.longestPalindrome(nums))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> 思路 2\n", + "\n", + "很明显的一个动态规划思路。\n", + "\n", + " - 这个问题可以联想我们之前做的动态规划的问题,也就是 72 题,思想是一样的,但是相对于我们的 72 题来说,已经是相当简单了。\n", + " - 一个比较好的想法是 s 和 reverse(s) 共有的最长的 substring 就是 longest palindromic substring,这样我们就把问题转化为求 Longest common substring 问题了。\n", + " - 我们来看一下下面的代码,你就懂得了。\n", + " - 如果还是看不懂,那就去看看我们 72 题的讲解,已经很清楚了。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cbc\n" + ] + } + ], + "source": [ + "class Solution2(object):\n", + " def longestPalindrome(self, s):\n", + " \"\"\"\n", + " :type s: str\n", + " :rtype: str\n", + " \"\"\"\n", + " def lcs(s1, s2):\n", + " m = [[0] * (1 + len(s2)) for i in range(1 + len(s1))]\n", + " longest, x_longest = 0, 0\n", + " for x in range(1, 1 + len(s1)):\n", + " for y in range(1, 1 + len(s2)):\n", + " if s1[x - 1] == s2[y - 1]:\n", + " m[x][y] = m[x - 1][y - 1] + 1\n", + " if m[x][y] > longest:\n", + " longest = m[x][y]\n", + " x_longest = x\n", + " else:\n", + " m[x][y] = 0\n", + " return s1[x_longest - longest: x_longest]\n", + "\n", + " return lcs(s, s[::-1])\n", + " \n", + "s_2 = Solution2()\n", + "nums = \"acbcd\"\n", + "print(s_2.longestPalindrome(nums))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "典型的动态规划问题。\n", + "\n", + "伪码如下:\n", + "\n", + "LCSuff(S1...p, T1...q) = LCS(S1...p1, T1...q-1) if S[p] = T[q] else 0\n", + "\n", + "代码可以参考:\n", + "\n", + "https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Longest_common_substring#Python_2\n", + "\n", + "**但是我们上面的动态规划问题,仍然出现了超时的情况。**\n", + "\n", + "因为我们以为这样s[::-1]已经很快了.\n", + "\n", + "**特别注意:**\n", + "\n", + "这个方法是buggy的,看字符串 abcxgcba ,它 reverse 之后是 abcgxcba ,它们有公共字符串,但是这里面没有回文,修复方式是:\n", + "\n", + "we check if the substring’s indices are the same as the reversed substring’s original indices. If it is, then we attempt to update the longest palindrome found so far; if not, we skip this and find the next candidate.\n", + "\n", + "我觉得的修复方式这样么:\n", + "\n", + "```\n", + "原本 翻转\n", + "ABXYBA ABYXBA\n", + "\n", + "求出来的substring indices是 0:2 但是这个s1[0:2] 和 s2[0:2]一样,所以不行\n", + "同理common substring indices还是s[4:6] 和s2[4:6]一样,不行\n", + "\n", + "而比如ABAD和 DABA\n", + "\n", + "substring indice 一个是0:3, 一个是1:4,这样就没问题\n", + "```\n", + "\n", + "> 思路 3\n", + "\n", + "[Manacher算法,我私下叫马拉车算法,哈哈](https://www.felix021.com/blog/read.php?2040)\n", + "\n", + "Manacher 算法增加两个辅助变量 id 和 mx ,其中 id 表示最大回文子串中心的位置,mx 则为 id+P[id] ,也就是最大回文子串的边界。得到一个很重要的结论:\n", + "\n", + " - 如果 mx > i,那么 P[i] >= Min(P[2 * id - i], mx - i) . 为什么这样说呢,下面解释\n", + "\n", + "下面,令 j = 2 * id - i ,也就是说 j 是 i 关于 id 的对称点。\n", + "\n", + " - 当 mx - i > P[j] 的时候,以 S[j] 为中心的回文子串包含在以 S[id] 为中心的回文子串中,由于 i 和 j 对称,以 S[i] 为中心的回文子串必然包含在以 S[id] 为中心的回文子串中,所以必有 P[i] = P[j] ; \n", + "\n", + " - 当 P[j] >= mx - i 的时候,以 S[j] 为中心的回文子串不一定完全包含于以 S[id] 为中心的回文子串中,但是基于对称性可知,下图中两个绿框所包围的部分是相同的,也就是说以 S[i] 为中心的回文子串,其向右至少会扩张到 mx 的位置,也就是说 P[i] >= mx - i。至于 mx 之后的部分是否对称,再具体匹配。 所以 P[i] >= Min(P[2 * id - i], mx - i),因为以 j 为中心的绘回文子串的左边界可能会比 mx 关于 id 的对称点要大,此时只能证明 P[i]=P[2 * id - i]\n", + "\n", + " - 此外,对于 mx <= i 的情况,因为无法对 P[i] 做更多的假设,只能让 P[i] = 1,然后再去匹配。\n", + "\n", + "在下面的程序中我的 P 数组保存的是,以当前字符为回文子串中心时,该回文子串的长度(不包含当前字符自身)\n", + "\n", + "简单地用一个小例子来解释:原字符串为 'qacbcaw' ,一眼就可以看出来最大回文子串是 'acbca' , 下面是我做的图,累 shi 了!\n", + "\n", + "\n", + "\n", + "所以最终代码中的 max_i 就是字符 'b' 所对应的 index8 ,start 的值就是 (max_i - P[max_i] - 1) / 2 = 1 ,最终输出结果为 s[1:6] ,即‘acbca’" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cbc\n" + ] + } + ], + "source": [ + "class Solution3(object):\n", + " def longestPalindrome(self, s):\n", + " \"\"\"\n", + " :type s: str\n", + " :rtype: str\n", + " \"\"\"\n", + " def preProcess(s):\n", + " if not s:\n", + " return ['^', '&']\n", + " T = ['^']\n", + " for i in s:\n", + " T += ['#', i]\n", + " T += ['#', '$']\n", + " return T\n", + " T = preProcess(s)\n", + " P = [0] * len(T)\n", + " id, mx = 0, 0\n", + " for i in range(1, len(T)-1):\n", + " j = 2 * id - i\n", + " if mx > i:\n", + " P[i] = min(P[j], mx-i)\n", + " else:\n", + " P[i]= 0\n", + " while T[i+P[i]+1] == T[i-P[i]-1]:\n", + " P[i] += 1\n", + " if i + P[i] > mx:\n", + " id, mx = i, i + P[i]\n", + " max_i = P.index(max(P)) #保存的是当前最大回文子串中心位置的index\n", + " start = int((max_i - P[max_i] - 1) / 2)\n", + " res = s[start: start + P[max_i]]\n", + " return res\n", + " \n", + "s_3 = Solution3()\n", + "nums = \"acbcd\"\n", + "print(s_3.longestPalindrome(nums)) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "run code的时候结果会跟expected不一样,但是该input确实2个结果都可以,所以放心地submit吧 还可以转到647题去看一看,也可以用这个算法解" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 45bdd47a26f715db92642b8f63792cdd3ac97f78 Mon Sep 17 00:00:00 2001 From: chenyyx Date: Sat, 7 Jul 2018 13:07:31 +0800 Subject: [PATCH 0594/2496] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20179=20=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../179._Largest_Number.ipynb | 186 ++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 docs/Leetcode_Solutions/179._Largest_Number.ipynb diff --git a/docs/Leetcode_Solutions/179._Largest_Number.ipynb b/docs/Leetcode_Solutions/179._Largest_Number.ipynb new file mode 100644 index 000000000..9ce763484 --- /dev/null +++ b/docs/Leetcode_Solutions/179._Largest_Number.ipynb @@ -0,0 +1,186 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 179.Largest Number 最大数\n", + "\n", + "### 难度:Medium\n", + "\n", + "## 刷题内容\n", + "\n", + "> 原题链接\n", + "\n", + " - 中文:https://leetcode-cn.com/problems/largest-number/description/\n", + " - 英文:https://leetcode.com/problems/largest-number/\n", + "\n", + "> 内容描述\n", + "\n", + "```\n", + "给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。\n", + "\n", + "示例 1:\n", + "输入: [10,2]\n", + "输出: 210\n", + "\n", + "示例 2:\n", + "输入: [3,30,34,5,9]\n", + "输出: 9534330\n", + "说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。\n", + "```\n", + "\n", + "## 解题方案\n", + "\n", + "> 思路 1\n", + "\n", + " - 先排序,后合并,若最后为空字符串,则返回 '0'\n", + "\n", + "其中的排序思想是字符串的经典比较:\n", + "\n", + "【注】:在 Python3 中没有了 cmp,只有 key,我们可以使用 functools.cmp_to_key 去修饰一下。\n", + "\n", + "cmp 函数比较两个对象,如 (x, y),若 x > y,则返回 1,if x == y,return 0,如果 x < y,则返回 -1 。\n", + "\n", + "下面这个是 python2 的解决方案,可以 AC ,但是在我们的 Python3 中就会报如下错误" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "'cmp' is an invalid keyword argument for this function", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 11\u001b[0m \u001b[0ms\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mSolution\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 12\u001b[0m \u001b[0mnums\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;36m10\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m2\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 13\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ms\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlargestNumber\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnums\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;32m\u001b[0m in \u001b[0;36mlargestNumber\u001b[1;34m(self, nums)\u001b[0m\n\u001b[0;32m 6\u001b[0m \"\"\"\n\u001b[0;32m 7\u001b[0m \u001b[0mnums\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mstr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnum\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mnum\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mnums\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 8\u001b[1;33m \u001b[0mnums\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msort\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcmp\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mlambda\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mcmp\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m+\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m+\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 9\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[1;34m''\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnum\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlstrip\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'0'\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;34m''\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnum\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlstrip\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'0'\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32melse\u001b[0m \u001b[1;34m'0'\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 10\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mTypeError\u001b[0m: 'cmp' is an invalid keyword argument for this function" + ] + } + ], + "source": [ + "class Solution(object):\n", + " def largestNumber(self, nums):\n", + " \"\"\"\n", + " :type nums: List[int]\n", + " :rtype: str\n", + " \"\"\"\n", + " nums = [str(num) for num in nums]\n", + " nums.sort(cmp=lambda x, y: cmp(y+x, x+y))\n", + " return ''.join(num).lstrip('0') if ''.join(num).lstrip('0') else '0'\n", + " \n", + "s = Solution()\n", + "nums = [10, 2]\n", + "print(s.largestNumber(nums))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "或者更简单的写法,可以写成下面这样(Python2适用,python3 会报错):" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "'cmp' is an invalid keyword argument for this function", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 11\u001b[0m \u001b[0ms\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mSolution\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 12\u001b[0m \u001b[0mnums\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;36m10\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m2\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 13\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ms\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlargestNumber\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnums\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;32m\u001b[0m in \u001b[0;36mlargestNumber\u001b[1;34m(self, nums)\u001b[0m\n\u001b[0;32m 6\u001b[0m \"\"\"\n\u001b[0;32m 7\u001b[0m \u001b[0mnums\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mstr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnum\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mnum\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mnums\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 8\u001b[1;33m \u001b[0mnums\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msort\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcmp\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mlambda\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mcmp\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m+\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m+\u001b[0m\u001b[0my\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 9\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[1;34m''\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnum\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlstrip\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'0'\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mor\u001b[0m \u001b[1;34m'0'\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 10\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mTypeError\u001b[0m: 'cmp' is an invalid keyword argument for this function" + ] + } + ], + "source": [ + "class Solution(object):\n", + " def largestNumber(self, nums):\n", + " \"\"\"\n", + " :type nums: List[int]\n", + " :rtype: str\n", + " \"\"\"\n", + " nums = [str(num) for num in nums]\n", + " nums.sort(cmp=lambda x, y: cmp(y+x, x+y))\n", + " return ''.join(num).lstrip('0') or '0'\n", + " \n", + "s = Solution()\n", + "nums = [10, 2]\n", + "print(s.largestNumber(nums))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "下面这个解法就是我们在 Python3 中的解法" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "210\n" + ] + } + ], + "source": [ + "from functools import cmp_to_key\n", + "\n", + "# 比较函数\n", + "def compare(a, b):\n", + " return int(b + a) - int(a + b)\n", + "\n", + "class Solution(object):\n", + " def largestNumber(self, nums):\n", + " \"\"\"\n", + " :type nums: List[int]\n", + " :rtype: str\n", + " \"\"\"\n", + " nums = sorted([str(x) for x in nums], key=cmp_to_key(compare))\n", + " return str(int(''.join(nums)))\n", + " \n", + "s = Solution()\n", + "nums = [10, 2]\n", + "print(s.largestNumber(nums))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From f3ca17c3799c9a941719c4f7fbf44390fafe7b1a Mon Sep 17 00:00:00 2001 From: chenyyx Date: Sat, 7 Jul 2018 13:45:24 +0800 Subject: [PATCH 0595/2496] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20242=20=E8=A7=A3?= =?UTF-8?q?=E5=86=B3=E6=96=B9=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../242._valid_anagram.ipynb | 189 ++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 docs/Leetcode_Solutions/242._valid_anagram.ipynb diff --git a/docs/Leetcode_Solutions/242._valid_anagram.ipynb b/docs/Leetcode_Solutions/242._valid_anagram.ipynb new file mode 100644 index 000000000..26218f62d --- /dev/null +++ b/docs/Leetcode_Solutions/242._valid_anagram.ipynb @@ -0,0 +1,189 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 242. Valid Anagram 有效的字母异位词\n", + "\n", + "### 难度:Easy\n", + "\n", + "## 刷题内容\n", + "\n", + "> 原题链接\n", + "\n", + " - 中文:https://leetcode-cn.com/problems/valid-anagram/description/\n", + " - 英文:https://leetcode.com/problems/valid-anagram/\n", + " \n", + "> 内容描述\n", + "\n", + "```\n", + "给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。\n", + "\n", + "示例 1:\n", + "输入: s = \"anagram\", t = \"nagaram\"\n", + "输出: true\n", + "\n", + "示例 2:\n", + "输入: s = \"rat\", t = \"car\"\n", + "输出: false\n", + "\n", + "说明:\n", + "你可以假设字符串只包含小写字母。\n", + "\n", + "进阶:\n", + "如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?\n", + "```\n", + "\n", + "## 解题方案\n", + "\n", + "> 思路 1\n", + "\n", + " - 一行瞬秒!\n", + " - 适用 collections.Counter() 方法" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n" + ] + } + ], + "source": [ + "import collections\n", + "\n", + "class Solution(object):\n", + " def isAnagram(self, s, t):\n", + " \"\"\"\n", + " :type s: str\n", + " :type t: str\n", + " :rtype: bool\n", + " \"\"\"\n", + " return collections.Counter(s) == collections.Counter(t)\n", + " \n", + "s = \"anagram\"\n", + "t = \"nagaram\"\n", + "ss = Solution()\n", + "print(ss.isAnagram(s, t))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "> 思路 2\n", + "\n", + " - 同样是一行瞬秒!\n", + " - 适用 sorted() 函数" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n" + ] + } + ], + "source": [ + "class Solution(object):\n", + " def isAnagram(self, s, t):\n", + " \"\"\"\n", + " :type s: str\n", + " :type t: str\n", + " :rtype: bool\n", + " \"\"\"\n", + " return sorted(s) == sorted(t)\n", + "s = \"anagram\"\n", + "t = \"nagaram\"\n", + "ss = Solution()\n", + "print(ss.isAnagram(s, t))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "> 思路 3\n", + "\n", + " - 用字数统计,因为只可能是 26 个字母" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n" + ] + } + ], + "source": [ + "class Solution(object):\n", + " def isAnagram(self, s, t):\n", + " \"\"\"\n", + " :type s: str\n", + " :type t: str\n", + " :rtype: bool\n", + " \"\"\"\n", + " if len(s) != len(t):\n", + " return False\n", + " \n", + " charCnt = [0] * 26\n", + " \n", + " for i in range(len(s)):\n", + " charCnt[ord(s[i]) - 97] += 1\n", + " charCnt[ord(t[i]) - 97] -= 1 \n", + " \n", + " for cnt in charCnt:\n", + " if cnt != 0:\n", + " return False\n", + " return True\n", + " \n", + "s = \"anagram\"\n", + "t = \"nagaram\"\n", + "ss = Solution()\n", + "print(ss.isAnagram(s, t))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 79c56ddc2029231de95b9a1d852e1eabff32ce3d Mon Sep 17 00:00:00 2001 From: chenyyx Date: Mon, 9 Jul 2018 22:26:17 +0800 Subject: [PATCH 0596/2496] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AF=B9=20?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=20=E7=AE=97=E6=B3=95=E7=9A=84=E6=95=B4?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Algorithm/Sort/Sort.ipynb | 772 +++++++++++++++++++++++++++++++++ 1 file changed, 772 insertions(+) create mode 100644 docs/Algorithm/Sort/Sort.ipynb diff --git a/docs/Algorithm/Sort/Sort.ipynb b/docs/Algorithm/Sort/Sort.ipynb new file mode 100644 index 000000000..df9d362e5 --- /dev/null +++ b/docs/Algorithm/Sort/Sort.ipynb @@ -0,0 +1,772 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 排序算法\n", + "\n", + "## 1、冒泡排序(Bubble Sort)\n", + "\n", + "### 1.1、简介\n", + "\n", + "冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们两个的顺序错误就把它们两个交换。走访数列的工作是重复的,直到最后没有再需要交换,也就是说该数列已经排序完成了。这个算法的名字由来是因为越小的元素会经由交换慢慢 \"浮\" 到数列的顶端。\n", + "\n", + "### 1.2、算法描述\n", + "\n", + " - 比较相邻的元素。如果第一个比第二个大,就交换它们两个;\n", + " - 对每一组相邻元素做相同的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;\n", + " - 针对所有的元素重复以上的步骤,除了最后一个;\n", + " - 重复步骤 1~3 ,直到排序完成。\n", + " \n", + "### 1.3、动图演示\n", + "\n", + "![](img/BubbleSort.gif)\n", + "\n", + "### 1.4、代码实现" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, 2, 3, 5, 7, 9]\n" + ] + } + ], + "source": [ + "def bubble_sort(nums):\n", + " # 外层循环负责设置冒泡排序进行的次数\n", + " for i in range(len(nums)-1):\n", + " # 内层循环负责前后两两比较,求最大值放到最后\n", + " # j 为列表下标\n", + " for j in range(len(nums)-1-i):\n", + " # 如果相互比较的两个数,前一个数比后一个数大\n", + " if nums[j] > nums[j+1]:\n", + " nums[j], nums[j+1] = nums[j+1], nums[j]\n", + " return nums\n", + "\n", + "if __name__ == \"__main__\":\n", + " nums = [5, 1, 9, 3, 2, 7]\n", + " bubble_sort(nums)\n", + " print(nums)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.5、代码优化\n", + "\n", + "#### 1.5.1、优化 1\n", + "\n", + "如果上面代码中,里面一层循环在某次扫描中没有执行交换,则说明此时数组已经全部有序了,无需再进行扫描。因此,我们增加一个标记,每次发生交换,用来标记,如果某次循环完没有标记,则说明已经完成排序。" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, 2, 3, 5, 7, 9]\n" + ] + } + ], + "source": [ + "# 改进版的冒泡排序_1\n", + "def bubble_sort_2(nums):\n", + " # 外层循环负责设置冒泡排序进行的次数\n", + " for i in range(len(nums)-1):\n", + " # 标记是否已经完成排序\n", + " swaped = False\n", + " # 内层循环负责前后两两比较,求最大值放到最后,j 为列表下标\n", + " for j in range(len(nums)-1-i):\n", + " # 如果相互比较的两个数,前一个数比后一个数大\n", + " if nums[j] > nums[j+1]:\n", + " nums[j], nums[j+1] = nums[j+1], nums[j]\n", + " swaped = True\n", + " # 如果上一次扫描没有发生交换,说明数组已经全部都排好序了,那我们就退出循环\n", + " if not swaped:\n", + " break\n", + " return nums\n", + "\n", + "if __name__ == \"__main__\":\n", + " nums = [5, 1, 9, 3, 2, 7]\n", + " bubble_sort_2(nums)\n", + " print(nums)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "#### 1.5.2、优化 2\n", + "\n", + "在我们第一步优化的基础上,我们可以进一步思考:如果 R[0 ~ i] 已是有序区间,上次扫描的区间是 R[i ~ n],记上次扫描时最后一次执行交换的位置为 lastSwapPos,则 lastSwapPos 在 i 与 n 之间,不难发现 R[i ~ lastSwapPos] 区间也是有序的,否则这个区间也会发生变换;所以下次扫描区间就可以由 R[i ~ n] 缩减到 R[lastSwapPos ~ n] 。" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, 2, 3, 5, 7, 9]\n" + ] + } + ], + "source": [ + "# 改进版的冒泡排序_2\n", + "def bubble_sort_3(nums):\n", + " lastSwapPos = 0\n", + " lastSwapPosTemp = 0\n", + " # 外层循环负责设置冒泡排序进行的次数\n", + " for i in range(len(nums)-1):\n", + " lastSwapPos = lastSwapPosTemp\n", + " # 内层循环负责前后两两比较,求最大值放到最后,j 为列表下标\n", + " for j in range(len(nums)-1-i):\n", + " # 如果相互比较的两个数,前一个数比后一个数大\n", + " if nums[j] > nums[j+1]:\n", + " nums[j], nums[j+1] = nums[j+1], nums[j]\n", + " # 记录最后一次发生交换的位置\n", + " lastSwapPosTemp = j\n", + " # 如果上一次扫描没有发生交换,说明数组已经全部都排好序了,那我们就退出循环\n", + " if lastSwapPos == lastSwapPosTemp:\n", + " break\n", + " return nums\n", + "\n", + "if __name__ == \"__main__\":\n", + " nums = [5, 1, 9, 3, 2, 7]\n", + " bubble_sort_3(nums)\n", + " print(nums)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2、插入排序(Insert Sort)\n", + "\n", + "### 2.1、简介\n", + "\n", + "插入排序(insert sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。\n", + "\n", + "### 2.2、算法描述\n", + "\n", + "一般来说,插入排序都采用 in-place 在数组上实现。具体算法描述如下:\n", + "\n", + " - 从第一个元素开始,该元素可以认为已经被排序;\n", + " - 取出下一个元素,在已经排序的元素序列中从后向前扫描;\n", + " - 如果该元素(已排序)大于新元素,将该元素移到下一个位置;\n", + " - 重复步骤 3 ,直到找到已排序的元素小于或者等于新元素的位置;\n", + " - 将新元素插入到该位置后;\n", + " - 重复步骤 2 ~ 5\n", + " \n", + "### 2.3、动图演示\n", + "\n", + "![](img/InsertSort_1.gif)\n", + "\n", + "### 2.4、代码实现\n", + "\n", + "插入排序和冒泡排序的区别在于:\n", + "\n", + " - 插入排序的前提是:左边是有序的数列\n", + " - 冒泡排序:相邻的值进行交换,一共进行 n 次" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[5, 1, 9, 3, 2, 7]\n", + "[5]\n", + "[1, 5]\n", + "[1, 5, 9]\n", + "[1, 3, 5, 9]\n", + "[1, 2, 3, 5, 9]\n", + "result: [1, 2, 3, 5, 7, 9]\n" + ] + } + ], + "source": [ + "def insert_sort(nums):\n", + " # 循环 除第一个数字组成的有序数组 以外的数字\n", + " for i in range(1, len(nums)):\n", + " # 每一个数字,依次和有序数组进行比较\n", + " print(nums[:i])\n", + " for j in range(len(nums[:i])):\n", + " if nums[i] < nums[j]:\n", + " nums[i], nums[j] = nums[j], nums[i]\n", + " \n", + "if __name__ == \"__main__\":\n", + " l = [5, 1, 9, 3, 2, 7]\n", + " print(l)\n", + " insert_sort(l)\n", + " print(\"result: \" + str(l))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3、选择排序(SelectionSort)\n", + "\n", + "### 3.1、简介\n", + "\n", + "选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 \n", + "\n", + "### 3.2、算法描述\n", + "\n", + "n 个记录的直接选择排序可经过 n-1 趟直接选择排序得到有序结果。具体算法描述如下:\n", + "\n", + " - 初始状态:无序区为 R[1 ... n],有序区为空;\n", + " - 第 i 趟排序 (i = 1, 2, 3, ... n-1) 开始时,当前有序区和无序区分别为 R[1 ... i-1] 和 R[i ... n]。该趟排序从当前无序区中 —— 选出关键字最小的记录 R[k],将它与无序区的第 1 个记录 R 交换,使 R[1 ... i] 和 R[i+1 ... n] 分别变为记录个数增加 1 个的新有序区和记录个数减少 1 个的新无序区;\n", + " - n-1 趟结束,数组有序化了。\n", + " \n", + "### 3.3、动图演示\n", + "\n", + "![](img/SelectionSort_1.gif)\n", + "\n", + "### 3.4、代码实现\n", + "\n", + "选择排序和冒泡排序的区别在于:\n", + "\n", + "选择排序的前提是:找到最大值的位置,最后才进行 1 次交换;\n", + "而冒泡排序是:相邻的值进行交换,一共进行 n 次交换" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[5, 1, 9, 3, 2, 7]\n", + "1 [5, 1, 7, 3, 2, 9]\n", + "2 [5, 1, 2, 3, 7, 9]\n", + "3 [3, 1, 2, 5, 7, 9]\n", + "4 [2, 1, 3, 5, 7, 9]\n", + "5 [1, 2, 3, 5, 7, 9]\n", + "result: [1, 2, 3, 5, 7, 9]\n" + ] + } + ], + "source": [ + "def selection_sort(nums):\n", + " length = len(nums) - 1\n", + "\n", + " while length:\n", + " index = length\n", + " # 第一个数字,和后面每一个数字进行对比,找出最大值,放到最后!!\n", + " for j in range(length):\n", + " if nums[j] > nums[index]:\n", + " index = j\n", + " nums[length], nums[index] = nums[index], nums[length]\n", + " print(len(nums) - length, nums)\n", + " length -= 1\n", + " \n", + "if __name__ == \"__main__\":\n", + " nums = [5, 1, 9, 3, 2, 7]\n", + " print(nums)\n", + " selection_sort(nums)\n", + " print(\"result: \" + str(nums))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4、快速排序(Quick Sort)\n", + "\n", + "### 4.1、简介\n", + "\n", + "快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。\n", + "\n", + "### 4.2、算法描述\n", + "\n", + "快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下:\n", + "\n", + " - 从数列中挑出一个元素,称为 \"基准\"(pivot)\n", + " - 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出后,该基准就处于数列的中间位置。这个称为分区(partition)操作;\n", + " - 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。\n", + " \n", + "### 4.3、动图演示\n", + "\n", + "![](img/QuickSort_1.gif)\n", + "\n", + "### 4.4、代码实现" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "5 7 ******************************\n", + "5 2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + "5 1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + "5 9 ******************************\n", + "5 3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + "2 3 ******************************\n", + "2 1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + "9 7 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + "[1, 2, 3, 5, 7, 9]\n" + ] + } + ], + "source": [ + "def quick_sort(nums, start, end):\n", + " i = start\n", + " j = end\n", + " # 结束排序\n", + " if i >= j:\n", + " return\n", + " # 保存首个数值\n", + " key = nums[i]\n", + " # 一次排序,i和j的值不断的靠拢,然后最终停止,结束一次排序\n", + " while i < j:\n", + " # 和最右边的比较,如果值 >=key,然后j-1,慢慢的和前一个值比较;如果值key,那么就交换位置\n", + " while i < j and key >= nums[i]:\n", + " print(key, nums[i], '%' * 30)\n", + " i += 1\n", + " nums[j] = nums[i]\n", + " nums[i] = key\n", + " # 左边排序\n", + " quick_sort(nums, start, j-1)\n", + " # 右边排序\n", + " quick_sort(nums, i+1, end)\n", + "\n", + "\n", + "if __name__ == \"__main__\":\n", + " l = [5, 1, 9, 3, 2, 7]\n", + " quick_sort(l, 0, len(l) - 1)\n", + " print(l)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5、希尔排序(ShellSort)\n", + "\n", + "### 5.1、简介\n", + "\n", + "希尔排序(Shell Sort)也是插入排序的一种。也称为缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。\n", + "\n", + "1959年Shell发明,第一个突破O(n2)的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于,它会 **优先比较距离较远的元素。希尔排序又叫缩小增量排序。**\n", + "\n", + "### 5.2、算法描述\n", + "\n", + "先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,具体算法描述:\n", + "\n", + " - 选择一个增量序列 $t_1, t_2, …, t_k$ ,其中 $t_i>t_j, t_k=1$ ;\n", + " - 按增量序列个数 k,对序列进行 k 趟排序;\n", + " - 每趟排序,根据对应的增量 $t_i$,将待排序列分割成若干长度为 m 的子序列,分别对各子表进行直接插入排序。仅增量因子为 1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。\n", + " \n", + "**补充描述:**\n", + " \n", + "是不是有些不明白呢?那我们用通俗一些的语句来说。\n", + "\n", + "直接插入排序在在本身数量比较少的时候情况下效率很高,如果待排数的数量很多,其效率不是很理想。\n", + "\n", + "  回想一下直接插入排序过程,排序过程中,我们可以设置一条线,左边是排好序的,右边则是一个一个等待排序,\n", + "\n", + "如果最小的那个值在最右边,那么排这个最小值的时候,需要将所有元素向右边移动一位。\n", + "\n", + "  是否能够减少这样的移位呢?\n", + "\n", + "  我们不希望它是一步一步的移动,而是大步大步的移动。希尔排序就被发明出来了,它也是当时打破效率\n", + "\n", + "O(n2)的算法之一。希尔排序算法通过设置一个间隔,对同样间隔的数的集合进行插入排序,此数集合中的元素\n", + "\n", + "移位的长度是以间隔的长度为准,这样就实现了大步位移。但是最后需要对元素集合进行一次直接插入排序,所以\n", + "\n", + "最后的间隔一定是1。\n", + "\n", + "下面举一个例子:\n", + "\n", + "第一趟希尔排序,间隔为4\n", + "\n", + "![](img/ShellSort_2.png)\n", + "\n", + "第二趟排序:间隔为 2\n", + "\n", + "![](img/ShellSort_3.png)\n", + "\n", + "第三趟排序,间隔为 1,即 直接插入排序法(InsertSort):\n", + "\n", + "具体的插入排序过程,这里我们就不再详细说了。\n", + "\n", + "```\n", + "减小间隔:\n", + "\n", + "上面已经演示了以4为初始间隔对包含10个数据项的数组进行排序的情况。对于更大的数组开始的间隔也应该更大。然后间隔不断减小,直到间隔变成1。\n", + "\n", + "举例来说,含有1000个数据项的数组可能先以364为增量,然后以121为增量,以40为增量,以13为增量,以4为增量,最后以 1为增量进行希尔排序。用来形成间隔的数列被称为间隔序列。这里所表示的间隔序列由Knuth提出,此序列是很常用的。数列以逆向形式从1开始,通过递归表达式\n", + "\n", + "h = 3 * b + 1\n", + "\n", + "来产生,初始值为 1 。\n", + "\n", + "在排序算法中,首先在一个短小的循环中使用序列的生成公式来计算出最初的间隔。h值最初被赋为1,然后应用公式h=3*h+1生成序列1,4,13,40,121,364,等等。当间隔大于数组大小的时候,这个过程停止。对于一个含有1000个数据项的数组,序列的第七个数字,1093就太大了。因此,使用序列的第六个数字作为最大的数字来开始这个排序过程,作364-增量排序。然后,每完成一次排序全程的外部循环,用前面提供的此公式倒推式来减小间隔:\n", + "\n", + "h=(h-1)/3\n", + "\n", + "这个倒推的公式生成逆置的序列364,121,40,13,4,1。从364开始,以每一个数字作为增量进行排序。当数组用1-增量排序后,算法结束。\n", + "\n", + "希尔排序比插入排序快很多,它是基于什么原因呢?当h值大的时候,数据项每一趟排序需要移动元素的个数很少,但数据项移动的距离很长。这是非常有效率的。当h减小时,每一趟排序需要移动的元素的个数增多,但是此时数据项已经接近于它们排序后最终的位置,这对于插入排序可以更有效率。正是这两种情况的结合才使希尔排序效率那么高。\n", + "\n", + "注意后期的排序过程不撤销前期排序所做的工作。例如,已经完成了以40-增量的排序的数组,在经过以13-增量的排序后仍然保持了以40-增量的排序的结果。如果不是这样的话,希尔排序就无法实现排序的目的。\n", + "```\n", + " \n", + "### 5.3、动图演示\n", + "\n", + "![](img/ShellSort_1.gif)\n", + "\n", + "再附加一个静态图:\n", + "\n", + "![](img/ShellSort_4.png)\n", + "\n", + "### 5.4、代码实现" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "开始 [5, 2, 9, 8, 1, 10, 3, 4, 7]\n", + "3 -- [3, 2, 9, 5, 1, 10, 8, 4, 7]\n", + "3 -- [3, 1, 9, 5, 2, 10, 8, 4, 7]\n", + "3 -- [3, 1, 7, 5, 2, 9, 8, 4, 10]\n", + "2 -- [2, 1, 3, 5, 7, 9, 8, 4, 10]\n", + "2 -- [2, 1, 3, 4, 7, 5, 8, 9, 10]\n", + "1 -- [1, 2, 3, 4, 5, 7, 8, 9, 10]\n", + "结束 [1, 2, 3, 4, 5, 7, 8, 9, 10]\n" + ] + } + ], + "source": [ + "# 直接插入排序\n", + "def insert_sort(nums, start, increment):\n", + " for i in range(start+increment, len(nums), increment):\n", + " for j in range(start, len(nums[:i]), increment):\n", + " if nums[i] < nums[j]:\n", + " nums[i], nums[j] = nums[j], nums[i]\n", + " print(increment, '--', nums)\n", + " return nums\n", + "\n", + "# 希尔排序\n", + "def shell_sort(nums, increment):\n", + " # 依次进行分层\n", + " while increment:\n", + " # 每一层,都进行n次插入排序\n", + " for i in range(0, increment):\n", + " insert_sort(nums, i, increment)\n", + " increment -= 1\n", + " return nums\n", + "\n", + "if __name__ == \"__main__\":\n", + " l = [5, 2, 9, 8, 1, 10, 3, 4, 7]\n", + " increment = int(len(l)/3)+1 if len(l)%3 else int(len(l)/3)\n", + " print(\"开始\", l)\n", + " l = shell_sort(l, increment)\n", + " print(\"结束\", l)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6、归并排序(MergeSort)\n", + "\n", + "### 6.1、简介\n", + "\n", + "归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。\n", + "\n", + "### 6.2、算法描述\n", + "\n", + " - 把长度为 n 的输入序列分成两个长度为 n/2 的子序列;\n", + " - 对这两个子序列分别采用归并排序;\n", + " - 将两个排序好的子序列合并成一个最终的排序序列。\n", + " \n", + "### 6.3、动图演示\n", + "\n", + "![](img/MergeSort_1.gif)\n", + "\n", + "### 6.4、代码实现\n", + "\n", + "归并排序是一种稳定的排序方法。和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是O(nlogn)的时间复杂度。代价是需要额外的内存空间。" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1]\n", + "********************\n", + "[2]\n", + "____________________\n", + "result: [1, 2]\n", + "[4]\n", + "********************\n", + "[5]\n", + "____________________\n", + "result: [4, 5]\n", + "[3]\n", + "********************\n", + "[4, 5]\n", + "____________________\n", + "result: [3, 4, 5]\n", + "[1, 2]\n", + "********************\n", + "[3, 4, 5]\n", + "____________________\n", + "result: [1, 2, 3, 4, 5]\n", + "[7]\n", + "********************\n", + "[90]\n", + "____________________\n", + "result: [7, 90]\n", + "[6]\n", + "********************\n", + "[7, 90]\n", + "____________________\n", + "result: [6, 7, 90]\n", + "[23]\n", + "********************\n", + "[45]\n", + "____________________\n", + "result: [23, 45]\n", + "[21]\n", + "********************\n", + "[23, 45]\n", + "____________________\n", + "result: [21, 23, 45]\n", + "[6, 7, 90]\n", + "********************\n", + "[21, 23, 45]\n", + "____________________\n", + "result: [6, 7, 21, 23, 45, 90]\n", + "[1, 2, 3, 4, 5]\n", + "********************\n", + "[6, 7, 21, 23, 45, 90]\n", + "____________________\n", + "result: [1, 2, 3, 4, 5, 6, 7, 21, 23, 45, 90]\n", + "[1, 2, 3, 4, 5, 6, 7, 21, 23, 45, 90]\n" + ] + } + ], + "source": [ + "def MergeSort(lists):\n", + " if len(lists) <= 1:\n", + " return lists\n", + " num = int(len(lists) / 2)\n", + " # 从中间,进行数据的拆分, 递归的返回数据进行迭代排序\n", + " left = MergeSort(lists[:num])\n", + " right = MergeSort(lists[num:])\n", + " print(left)\n", + " print(\"*\" * 20)\n", + " print(right)\n", + " print(\"_\" * 20)\n", + " return Merge(left, right)\n", + "\n", + "# 将 2 个已经排好序的子序列合并成一个序列,也就是 2-路归并\n", + "def Merge(left, right):\n", + " r, l = 0, 0\n", + " result = []\n", + " # 这里将两个序列中的每个值都比较一下,最小的放到最左边\n", + " while l < len(left) and r < len(right):\n", + " if left[l] < right[r]:\n", + " result.append(left[l])\n", + " l += 1\n", + " else:\n", + " result.append(right[r])\n", + " r += 1\n", + " result += right[r:]\n", + " result += left[l:]\n", + " print('result:', result)\n", + " # 最终将合并好的完整序列返回\n", + " return result\n", + "\n", + "\n", + "if __name__ == \"__main__\":\n", + " print(MergeSort([1, 2, 3, 4, 5, 6, 7, 90, 21, 23, 45]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 7、基数排序\n", + "\n", + "### 7.1、简介\n", + "\n", + "以十进制为例,基数指的是数的位,如个位,十位百位等。而以十六进制为例,0xB2,就有两个radices(radix的复数)。\n", + "\n", + "基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序。最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。\n", + "\n", + "### 7.2、算法描述\n", + "\n", + " - 取得数组中的最大数,并取得位数;\n", + " - arr 为原始数组,从最低位开始取每个位组成 radix 数组;\n", + " - 对 radix 进行计数排序(利用计数排序适用于小范围数的特点)\n", + " \n", + "**补充描述:**\n", + "\n", + "基数排序不同于其他的排序算法,它不是基于比较的算法。基数排序是一种借助多关键字排序的思想对单逻辑关键字进行排序的方法。它是一种稳定的排序算法。多关键字排序中有两种方法:最高位优先法(MSD)和最低位优先法(LSD)。通常用于对数的排序选择的是最低位优先法,即先对最次位关键字进行排序,再对高一位的关键字进行排序,以此类推。\n", + "\n", + "算法的思想:类似于桶式排序,我们需要给待排序记录准备10个桶,为什么是10个??因为一个数的任何一位上,其数字大小都位于0~9之间,因此采用10个桶,桶的编号分别为0,1,2,3,4...9,对应待排序记录中每个数相应位的数值,基数排序也是因此而得名。我们先根据待排序记录的每个数的个位来决定让其加入哪个桶中。例如:待排序数组为\n", + "\n", + "278 109 63 930 589 184 505 269 8 83\n", + "\n", + "求取每个数的个位数,依次为:8 9 3 0 9 4 5 9 8 3\n", + "\n", + "依照其个位数决定将其加入哪个桶中\n", + "\n", + "![](img/RadixSort_2.png)\n", + " \n", + "### 7.3、动图演示\n", + "\n", + "![](img/RadixSort_1.gif)\n", + "\n", + "### 7.4、代码实现\n", + "\n", + "基数排序基于分别排序,分别收集,所以是稳定的。但基数排序的性能比桶排序要略差,每一次关键字的桶分配都需要 $O(n)$ 的时间复杂度,而且分配之后得到新的关键字序列又需要 $O(n)$ 的时间复杂度。假如待排数据可以分为 $d$ 个关键字,则基数排序的时间复杂度将是 $O(d*2n)$ ,当然 $d$ 要远远小于 $n$ ,因此基本上还是线性级别的。\n", + "\n", + "基数排序的空间复杂度为 $O(n+k)$ ,其中 $k$ 为桶的数量。一般来说 $n>>k$ ,因此额外空间需要大概 $n$ 个左右。" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1, 2, 3, 5, 7, 9]\n" + ] + } + ], + "source": [ + "# ************************基数排序****************************\n", + "# 确定排序的次数\n", + "# 排序的顺序跟序列中最大数的位数相关\n", + "def radix_sort_nums(L):\n", + " maxNum = L[0]\n", + " #寻找序列中的最大数\n", + " for x in L:\n", + " if maxNum < x:\n", + " maxNum = x\n", + " # 确定序列中的最大元素的位数\n", + " times = 0\n", + " while (maxNum > 0):\n", + " maxNum = int((maxNum/10))\n", + " times += 1\n", + " return times\n", + "\n", + "# 找到num从低到高第pos位的数据\n", + "def get_num_pos(num, pos):\n", + " return (int((num/(10**(pos-1))))) % 10\n", + "\n", + "# 基数排序\n", + "def radix_sort(L):\n", + " count = 10 * [None] # 存放各个桶的数据统计个数\n", + " bucket = len(L) * [None] # 暂时存放排序结果\n", + " # 从低位到高位依次执行循环\n", + " for pos in range(1, radix_sort_nums(L)+1):\n", + " # 置空各个桶的数据统计\n", + " for x in range(0, 10):\n", + " count[x] = 0\n", + " # 统计当前该位(个位,十位,百位....)的元素数目\n", + " for x in range(0, len(L)):\n", + " # 统计各个桶将要装进去的元素个数\n", + " j = get_num_pos(int(L[x]), pos)\n", + " count[j] += 1\n", + " # count[i]表示第i个桶的右边界索引\n", + " for x in range(1,10):\n", + " count[x] += count[x-1]\n", + " # 将数据依次装入桶中\n", + " for x in range(len(L)-1, -1, -1):\n", + " # 求出元素第K位的数字\n", + " j = get_num_pos(L[x], pos)\n", + " # 放入对应的桶中,count[j]-1是第j个桶的右边界索引\n", + " bucket[count[j]-1] = L[x]\n", + " # 对应桶的装入数据索引-1\n", + " count[j] -= 1\n", + " # 将已分配好的桶中数据再倒出来,此时已是对应当前位数有序的表\n", + " for x in range(0, len(L)):\n", + " L[x] = bucket[x]\n", + " \n", + "if __name__ == \"__main__\":\n", + " l = [5, 1, 9, 3, 2, 7]\n", + " radix_sort(l)\n", + " print(l)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.3" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From b3a09235b703b42983a7fa0be6d9829c6a3adb55 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Mon, 9 Jul 2018 22:37:27 +0800 Subject: [PATCH 0597/2496] Update 179._Largest_Number.md --- docs/Leetcode_Solutions/179._Largest_Number.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Leetcode_Solutions/179._Largest_Number.md b/docs/Leetcode_Solutions/179._Largest_Number.md index b8f1a63e8..b225dd832 100644 --- a/docs/Leetcode_Solutions/179._Largest_Number.md +++ b/docs/Leetcode_Solutions/179._Largest_Number.md @@ -33,7 +33,7 @@ class Solution(object): """ nums = [str(num) for num in nums] nums.sort(cmp=lambda x, y: cmp(y+x, x+y)) - return ''.join(num).lstrip('0') if ''.join(num).lstrip('0') else '0' + return ''.join(nums).lstrip('0') if ''.join(num).lstrip('0') else '0' ``` 或者更简单一点 @@ -46,6 +46,6 @@ class Solution(object): """ nums = [str(num) for num in nums] nums.sort(cmp=lambda x, y: cmp(y+x, x+y)) - return ''.join(num).lstrip('0') or '0' + return ''.join(nums).lstrip('0') or '0' ``` From 7f7a9c3fb080eac5c1079a2410165a3a40f0b62f Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Mon, 9 Jul 2018 22:38:00 +0800 Subject: [PATCH 0598/2496] Update 179._Largest_Number.md --- docs/Leetcode_Solutions/179._Largest_Number.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Leetcode_Solutions/179._Largest_Number.md b/docs/Leetcode_Solutions/179._Largest_Number.md index b8f1a63e8..b225dd832 100644 --- a/docs/Leetcode_Solutions/179._Largest_Number.md +++ b/docs/Leetcode_Solutions/179._Largest_Number.md @@ -33,7 +33,7 @@ class Solution(object): """ nums = [str(num) for num in nums] nums.sort(cmp=lambda x, y: cmp(y+x, x+y)) - return ''.join(num).lstrip('0') if ''.join(num).lstrip('0') else '0' + return ''.join(nums).lstrip('0') if ''.join(num).lstrip('0') else '0' ``` 或者更简单一点 @@ -46,6 +46,6 @@ class Solution(object): """ nums = [str(num) for num in nums] nums.sort(cmp=lambda x, y: cmp(y+x, x+y)) - return ''.join(num).lstrip('0') or '0' + return ''.join(nums).lstrip('0') or '0' ``` From 933047d42931f69d108b867912c187b2240923ad Mon Sep 17 00:00:00 2001 From: chenyyx Date: Tue, 10 Jul 2018 09:58:55 +0800 Subject: [PATCH 0599/2496] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20Sort=E6=8E=92?= =?UTF-8?q?=E5=BA=8F=E7=AE=97=E6=B3=95=E7=94=A8=E5=88=B0=E7=9A=84=E5=9B=BE?= =?UTF-8?q?=E7=89=87=EF=BC=8C=E4=BB=A5=E5=8F=8A=E4=BF=AE=E6=94=B9=20Sort?= =?UTF-8?q?=20=E7=AE=97=E6=B3=95=E6=95=B4=E7=90=86=E7=9A=84=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Algorithm/Sort/Sort.ipynb | 22 ++++++++++---------- images/SortingAlgorithm/BubbleSort_1.gif | Bin 0 -> 466890 bytes images/SortingAlgorithm/InsertSort_1.gif | Bin 0 -> 404492 bytes images/SortingAlgorithm/MergeSort_1.gif | Bin 0 -> 376572 bytes images/SortingAlgorithm/QuickSort_1.gif | Bin 0 -> 335061 bytes images/SortingAlgorithm/RadixSort_1.gif | Bin 0 -> 199096 bytes images/SortingAlgorithm/RadixSort_2.png | Bin 0 -> 24350 bytes images/SortingAlgorithm/SelectionSort_1.gif | Bin 0 -> 628926 bytes images/SortingAlgorithm/ShellSort_1.gif | Bin 0 -> 1102998 bytes images/SortingAlgorithm/ShellSort_2.png | Bin 0 -> 10310 bytes images/SortingAlgorithm/ShellSort_3.png | Bin 0 -> 7064 bytes images/SortingAlgorithm/ShellSort_4.png | Bin 0 -> 77786 bytes 12 files changed, 11 insertions(+), 11 deletions(-) create mode 100644 images/SortingAlgorithm/BubbleSort_1.gif create mode 100644 images/SortingAlgorithm/InsertSort_1.gif create mode 100644 images/SortingAlgorithm/MergeSort_1.gif create mode 100644 images/SortingAlgorithm/QuickSort_1.gif create mode 100644 images/SortingAlgorithm/RadixSort_1.gif create mode 100644 images/SortingAlgorithm/RadixSort_2.png create mode 100644 images/SortingAlgorithm/SelectionSort_1.gif create mode 100644 images/SortingAlgorithm/ShellSort_1.gif create mode 100644 images/SortingAlgorithm/ShellSort_2.png create mode 100644 images/SortingAlgorithm/ShellSort_3.png create mode 100644 images/SortingAlgorithm/ShellSort_4.png diff --git a/docs/Algorithm/Sort/Sort.ipynb b/docs/Algorithm/Sort/Sort.ipynb index df9d362e5..d69cb66cd 100644 --- a/docs/Algorithm/Sort/Sort.ipynb +++ b/docs/Algorithm/Sort/Sort.ipynb @@ -21,7 +21,7 @@ " \n", "### 1.3、动图演示\n", "\n", - "![](img/BubbleSort.gif)\n", + "![](../../../images/SortingAlgorithm/BubbleSort.gif)\n", "\n", "### 1.4、代码实现" ] @@ -178,7 +178,7 @@ " \n", "### 2.3、动图演示\n", "\n", - "![](img/InsertSort_1.gif)\n", + "![](../../../images/SortingAlgorithm/InsertSort_1.gif)\n", "\n", "### 2.4、代码实现\n", "\n", @@ -244,7 +244,7 @@ " \n", "### 3.3、动图演示\n", "\n", - "![](img/SelectionSort_1.gif)\n", + "![](../../../images/SortingAlgorithm/SelectionSort_1.gif)\n", "\n", "### 3.4、代码实现\n", "\n", @@ -314,7 +314,7 @@ " \n", "### 4.3、动图演示\n", "\n", - "![](img/QuickSort_1.gif)\n", + "![](../../../images/SortingAlgorithm/QuickSort_1.gif)\n", "\n", "### 4.4、代码实现" ] @@ -419,11 +419,11 @@ "\n", "第一趟希尔排序,间隔为4\n", "\n", - "![](img/ShellSort_2.png)\n", + "![](../../../images/SortingAlgorithm/ShellSort_2.png)\n", "\n", "第二趟排序:间隔为 2\n", "\n", - "![](img/ShellSort_3.png)\n", + "![](../../../images/SortingAlgorithm/ShellSort_3.png)\n", "\n", "第三趟排序,间隔为 1,即 直接插入排序法(InsertSort):\n", "\n", @@ -453,11 +453,11 @@ " \n", "### 5.3、动图演示\n", "\n", - "![](img/ShellSort_1.gif)\n", + "![](../../../images/SortingAlgorithm/ShellSort_1.gif)\n", "\n", "再附加一个静态图:\n", "\n", - "![](img/ShellSort_4.png)\n", + "![](../../../images/SortingAlgorithm/ShellSort_4.png)\n", "\n", "### 5.4、代码实现" ] @@ -528,7 +528,7 @@ " \n", "### 6.3、动图演示\n", "\n", - "![](img/MergeSort_1.gif)\n", + "![](../../../images/SortingAlgorithm/MergeSort_1.gif)\n", "\n", "### 6.4、代码实现\n", "\n", @@ -665,11 +665,11 @@ "\n", "依照其个位数决定将其加入哪个桶中\n", "\n", - "![](img/RadixSort_2.png)\n", + "![](../../../images/SortingAlgorithm/RadixSort_2.png)\n", " \n", "### 7.3、动图演示\n", "\n", - "![](img/RadixSort_1.gif)\n", + "![](../../../images/SortingAlgorithm/RadixSort_1.gif)\n", "\n", "### 7.4、代码实现\n", "\n", diff --git a/images/SortingAlgorithm/BubbleSort_1.gif b/images/SortingAlgorithm/BubbleSort_1.gif new file mode 100644 index 0000000000000000000000000000000000000000..9dd0ed47f9afdc0d700fa74976f80a81a513140b GIT binary patch literal 466890 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

    Jv-3Cy$R|jHNNfYsgzX?J12?)}S0a46PrYe$ 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 literal 0 HcmV?d00001 diff --git a/docs/Interview/WePay/WePay.md b/docs/Interview/WePay/WePay.md new file mode 100644 index 000000000..1ca2679b3 --- /dev/null +++ b/docs/Interview/WePay/WePay.md @@ -0,0 +1,34 @@ +如图,![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/interview%20question/WePay/WePay.jpg) + +就是一个slide windows 的题目 + +```python +inputs = [5,1,2,100,2,2] +def alert(inputs, windowSize, allowedIncrease): + b = [] + tmp = {} + for i in range(len(inputs) - windowSize): + for j in range(i, i+windowSize+1): + if j in tmp.keys(): + if j > len(inputs) - windowSize-1: + tmp.get(j).append(inputs[i+1:i + windowSize+1]) + else: + tmp.get(j).append(inputs[i:i+windowSize]) + else: + print(j,j, i, i+ windowSize) + if j > len(inputs) - windowSize -1: + tmp[j] = [inputs[i+1:i + windowSize+1]] + else: + tmp[j] = [inputs[i:i+windowSize]] + b = [inputs[i:i+windowSize] for i in range(len(inputs)-windowSize)] + print(tmp) + for num in tmp.keys(): + if all(inputs[num] > sum(lis)/windowSize*allowedIncrease for lis in tmp.get(num)): + return True + b = [sum(i)/windowSize for i in b] + for i in range(len(b)): + if any(b[i] > b[j]*allowedIncrease for j in range(i)): + return True + return False +print(alert(inputs,3,1.5)) +``` diff --git a/docs/Interview/WePay/power_number.md b/docs/Interview/WePay/power_number.md new file mode 100644 index 000000000..6b3ae864e --- /dev/null +++ b/docs/Interview/WePay/power_number.md @@ -0,0 +1,36 @@ + + + + + +```python +import heapq +cache = {} +def power_number(index): + if index in cache: + return cache[index] + tmp = set() + for i in range(2, index+3): + for j in range(2, 27): + tmp.add(pow(i, j)) + gene = heapsort(tmp) + tmp_index = 0 + for i in range(index+1): + if tmp_index not in cache: + cache[tmp_index] = next(gene) + else: + next(gene) + if tmp_index == index: + return cache[tmp_index] + tmp_index += 1 + + +def heapsort(iterable): + h = [] + for value in iterable: + heapq.heappush(h, value) + for i in range(len(h)): + yield heapq.heappop(h) + +print(power_number(6500)) +``` diff --git a/docs/Interview/pocketgems/pocketgems.md b/docs/Interview/pocketgems/pocketgems.md new file mode 100644 index 000000000..0b108c0df --- /dev/null +++ b/docs/Interview/pocketgems/pocketgems.md @@ -0,0 +1,121 @@ +## 1. delete and earn +```python +class Solution(object): + def deleteAndEarn(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + dp = [0] * 10001 + for num in nums: + dp[num] += num + for i in range(2, 10001): + dp[i] = max(dp[i]+dp[i-2], dp[i-1]) + return dp[-1] +``` + +## 2. movie ratings + +```python + +cache = {} +class Solution(object): + def movierating(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + if not nums: + return 0 + if len(nums) == 1: + return nums[0] if nums[0] > 0 else 0 + if (1, len(nums)+1) not in cache: + cache[(1, len(nums)+1)] = self.movierating(nums[1:]) + a = self.movierating(nums[1:]) + else: + a = self.movierating(nums[1:]) + if (2, len(nums)+2) not in cache: + cache[(2, len(nums)+2)] = self.movierating(nums[2:]) + b = self.movierating(nums[2:]) + else: + b = self.movierating(nums[2:]) + return max(nums[0]+a, nums[1]+b) + + + +a = Solution() +res = a.movierating([-1,-2,-3,-4,-5]) + +print(res) + +``` + +## 3. roman names +```python +class Solution(object): + def roman2Int(self, s): + lookup = { + 'M': 1000, + 'D': 500, + 'C': 100, + 'L': 50, + 'X': 10, + 'V': 5, + 'I': 1 + } + res = 0 + for i in range(len(s)): + if i > 0 and lookup[s[i]] > lookup[s[i-1]]: + res = res + lookup[s[i]] - 2 * lookup[s[i-1]] + else: + res += lookup[s[i]] + return res + + def royalNames(self, names): + """ + :type nums: List[int] + :rtype: int + """ + for x in range(1, len(names)): + for i in range(len(names)-x): + if names[i].split(' ')[0] > names[i+1].split(' ')[0]: + names[i], names[i+1] = names[i+1], names[i] + elif names[i].split(' ')[0] == names[i+1].split(' ')[0]: + if self.roman2Int(names[i].split(' ')[1]) > self.roman2Int(names[i+1].split(' ')[1]): + names[i], names[i + 1] = names[i + 1], names[i] + return names + +a = Solution() +res = a.royalNames(['Akk IX', 'Ak VIII', 'Louis IX', 'Louis VIII']) +print(res) +``` + + +## 4. wealthy sam time +```python +class Solution(object): + def minMoves(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + res = 0 + minVal = min(nums) + for num in nums: + res += num -minVal + return res +``` + +## 5. design + + + + + + + + + + + + diff --git "a/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" "b/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" new file mode 100644 index 000000000..32c443af2 --- /dev/null +++ "b/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" @@ -0,0 +1,246 @@ +最近正在面试,最开始因为没有这样准备过,所以总是被问的一脸懵逼,相信很多人跟我有过一样的经历,时间长就是忘了嘛,对不对,无奈。 +怒🔥一上来打算好好整理下,面试前过一遍,岂不是美滋滋! + +# Java基础 +## 1. 面向对象和面向过程的区别 +- 面向过程强调动作,物体本身只是一个属性或者参数,具体为一件事该怎么做。 ```吃.(狗,屎) 吃.(🐶, 💩)``` + - 优点:性能比面向对象高,因为类调用时需要实例化,比较消耗资源;较底层的东西比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。 + - 缺点:没有面向对象易维护、易复用、易扩展 +- 面向对象强调object,动作只是一个函数,具体为一件事该让谁去做。         ```狗.吃(屎) 🐶.吃(💩)``` + - 优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护 + - 缺点:性能比面向过程低 + +## 2. Java的四个基本特性(抽象、封装、继承,多态) +- ***抽象***:就是把现实生活中的某一类东西提取出来,用类或者接口表示。抽象包括两个方面:一个是数据抽象,一个是过程抽象。数据抽象也就是对象的属性。过程抽象是对象的行为特征。 +- ***封装***:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行封装隐藏。封装分为属性的封装和方法的封装。 +    - 1. 安全 +    - 2. 将内外隔离 +    - 3. 便于使用 +    - 4. 提供重复性,具有模块化 +- ***继承***:父类抽取多类事物的共性,不同子类继承父类根据自身条件不同对父类方法进行重载或重写。 +- ***多态***:从某种角度上来说,封装和继承就是为了多态而做准备的。多态采用的方法是动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。多态必须同时满足三个条件: + - 1. 要有继承 + - 2. 要有重写 + - 3. 父类引用指向子类对象 + + 多态其实就是父类提供一个接口,基于同一个接口,使用不同的实例就可以使用不同的功能 + ```java + Father f = new Son(); + ``` +## 3. 重载和重写的区别 +- 重载:发生在同一个类中,方法名必须相同,参数类型、个数或者顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。 +- 重写:发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类;如果父类方法访问修饰符为private则子类中就不是重写。 + +## 4. 构造器Constructor是否可被override +构造器不能被重写,不能用static修饰构造器,只能用public,private,protected这三个权限修饰符,且不能有返回语句。 +1. 构造器与类同名 (构造函数,initilize 函数) +2. 每个类可以有一个以上的构造器 +3. 构造器可以有0个,1个以及多个参数 (无参构造函数,有参构造函数) +4. 构造器没有返回值(与void明显不同,构造器不会返回任何东西,你别无选择。) +5. 构造器总是伴随着new操作符一起调用 +6. 构造器不可被继承 + +## 5. 访问控制符public,protected,private,以及默认的区别 + +| | 任意地方 | 同一个包 | 子类 | 同一个类 | +| :----------------: | :------: | :--: | :--: | :--: | +| Public (接口访问权限) | 🌈 | 🌈 | 🌈 | 🌈 | +| Protected (继承访问权限) | 🌈(需要继承) | 🌈 | 🌈 | 🌈 | +| Default (包访问权限) | | 🌈 | 🌈 | 🌈 | +| Private (类访问权限) | | | | 🌈 | + + +- public(接口访问权限):任何地方都能访问; +- protected(继承访问权限): 介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。在同包内的类及包外的子类能访问; +- default(包访问权限):即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访问。 +- private(类访问权限): 只有在本类中才能访问; +(只限在Java语言中……) + +## 6. 是否可以继承String类 +String类是final类故不可以继承,一切由final修饰过的都不能继承。 + +## 7. String和StringBuffer、StringBuilder的区别 +- 可变性 + +String类中使用字符数组保存字符串,private final char value[],所以string对象是不可变的。 +StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,char[] value, +这两种对象都是可变的。 +- 线程安全性 + +String中的对象是不可变的,也就可以理解为常量,线程安全。 +AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。 +StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是**线程安全**的。 +StringBuilder并没有对方法进行加同步锁,所以是**非线程安全**的。 +- 性能 + +每次对 String 类型进行改变的时候,都会生成一个新的String 对象,然后将指针指向新的String 对象。StringBuffer每次都会对 +StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用StirngBuilder 相比使用 +StringBuffer 仅能获得10%~15% 左右的性能提升,但却要冒多线程不安全的风险。大多数情况下建议使用StirngBuilder。 +综合速度```String < StringBuffer < StirngBuilder``` + +## 8. hashCode和equals方法的关系 + +Java对象的eqauls方法和hashCode方法是这样规定的: + +1. 相等(相同)的对象必须具有相等的哈希码(或者散列码)。 +2. 如果两个对象的hashCode相同,它们并不一定相同。 + +- 关于第一点,相等(相同)的对象必须具有相等的哈希码(或者散列码),为什么? + + 想象一下,假如两个Java对象A和B,A和B相等(eqauls结果为true),但A和B的哈希码不同,则A和B存入HashMap时的哈希码计算得到的HashMap内部数组位置索引可能不同,那么A和B很有可能允许同时存入HashMap,显然相等/相同的元素是不允许同时存入HashMap,HashMap不允许存放重复元素。 + +- 关于第二点,两个对象的hashCode相同,它们并不一定相同 + + 也就是说,不同对象的hashCode可能相同;假如两个Java对象A和B,A和B不相等(eqauls结果为false),但A和B的哈希码相等,将A和B都存入HashMap时会发生哈希冲突,也就是A和B存放在HashMap内部数组的位置索引相同这时HashMap会在该位置建立一个链接表,将A和B串起来放在该位置,显然,该情况不违反HashMap的使用原则,是允许的。当然,哈希冲突越少越好,尽量采用好的哈希算法以避免哈希冲突。 + + **注意⚠️**:在object类中,hashcode()方法是本地方法,返回的是对象的地址值,而object类中的equals()方法比较的也是两个对象的地址值,如果equals()相等,说明两个对象地址值也相等,当然hashcode()也就相等了;在String类中,equals()返回的是两个对象内容的比较,当两个对象内容相等时,Hashcode()方法根据String类的重写代码的分析,也可知道hashcode()返回结果也会相等。以此类推,可以知道Integer、Double等封装类中经过重写的equals()和hashcode()方法也同样适合于这个原则。当然没有经过重写的类,在继承了object类的equals()和hashcode()方法后,也会遵守这个原则。 + + 当集合要添加新的元素时,如果每增加一个元素就检查一次equals方法,那么当元素很多时,后添加到集合中的元素比较的次数就非常多了。也就是说,如果集合中现在已经有1000个元素,那么第1001个元素加入集合时,它就要调用1000次equals方法。这显然会大大降低效率。正确的做法是先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;如果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址。所以这里存在一个冲突解决的问题。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。 + + ## 9. 抽象类和接口的区别 +- 语法层次 + +抽象类和接口分别给出了不同的语法定义。 +- 设计层次 + +抽象层次不同,抽象类是对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。抽象类是自底向上抽象而来的,接口是自顶向下设计出来的。 +- 跨域不同 + +抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is-a" +关系,即父类和派生类在概念本质上应该是相同的。对于接口则不然,并不要求接口的实现者和接口定义在概念本质上是一致的,仅仅是实现了接口定义的契约而已,"like-a" 或者 "can do a"的关系。 + +## 10. 自动装箱与拆箱 +- 装箱:将基本类型用它们对应的引用类型包装起来; +- 拆箱:将包装类型转换为基本数据类型; + +Java使用自动装箱和拆箱机制,节省了常用数值的内存开销和创建对象的开销,提高了效率,由编译器来完成,编译器会在编译期根据语法决定是否进行装箱和拆箱动作。 + +## 11. 什么是泛型、为什么要使用以及类型擦除 +泛型,即“参数化类型”。 +创建集合时就指定集合元素的类型,该集合只能保存其指定类型的元素,避免使用强制类型转换。 +Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会在编译器在编译的时候去掉。这个过程就称为类型擦除。 +类型擦除的主要过程如下: +- 1. 将所有的泛型参数用其最左边界(最顶级的父类型)类型替换。 +- 2. 移除所有的类型参数。 + +```java +public class Test4 { + public static void main(String[] args) { + ArrayList arrayList1=new ArrayList(); + arrayList1.add("abc"); + ArrayList arrayList2=new ArrayList(); + arrayList2.add(123); + System.out.println(arrayList1.getClass()==arrayList2.getClass()); + } +} +``` + +在这个例子中,我们定义了两个ArrayList数组,不过一个是ArrayList泛型类型,只能存储字符串。一个是ArrayList泛型类型,只能存储整形。最后,我们通过arrayList1对象和arrayList2对象的getClass方法获取它们的类的信息,最后发现结果为true。说明泛型类型String和Integer都被擦除掉了,只剩下了**原始类型**。 + +```java +public class Test4 { + public static void main(String[] args) throws IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { + ArrayList arrayList3=new ArrayList(); + arrayList3.add(1);//这样调用add方法只能存储整形,因为泛型类型的实例为Integer + arrayList3.getClass().getMethod("add", Object.class).invoke(arrayList3, "asd"); + for (int i=0;i Date: Wed, 18 Apr 2018 18:39:27 -0500 Subject: [PATCH 0499/2496] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 452290fe7..7721a76d6 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,10 @@ ## 2. [面试问答](/docs/interview/) * [面试总结](https://github.com/apachecn/LeetCode/blob/master/docs/interview/%E5%BC%80%E5%8F%91%E5%B2%97%E4%BD%8D(Java)%E6%80%BB%E7%BB%93.md) -* [Google 面试题](/docs/interview/Google/Google.md) -* [pocketgems 面试题](/docs/interview/pocketgems/pocketgems.md) -* [WePay 面试题](/docs/interview/WePay/WePay.md) -* [拍拍贷面试题](/docs/interview/拍拍贷/paipaidai.md) +* [Google 面试题](/docs/Interview/Google/Google.md) +* [pocketgems 面试题](/docs/Interview/pocketgems/pocketgems.md) +* [WePay 面试题](/docs/Interview/WePay/WePay.md) +* [PPd面试题](/docs/Interview/拍拍贷/paipaidai.md) ## 3. [算法模版](/docs/Algorithm_Templates/) From fbb98bab463f1c9d8ac9025f01e4c71a87ece823 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 18 Apr 2018 18:40:52 -0500 Subject: [PATCH 0500/2496] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7721a76d6..cb209f235 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,13 @@ ## 1. [LeetCode 题解和总结](/docs/Leetcode_Solutions/) -## 2. [面试问答](/docs/interview/) +## 2. [面试问答](/docs/Interview/) -* [面试总结](https://github.com/apachecn/LeetCode/blob/master/docs/interview/%E5%BC%80%E5%8F%91%E5%B2%97%E4%BD%8D(Java)%E6%80%BB%E7%BB%93.md) +* [面试总结](https://github.com/apachecn/LeetCode/blob/master/docs/Interview/%E5%BC%80%E5%8F%91%E5%B2%97%E4%BD%8D(Java)%E6%80%BB%E7%BB%93.md) * [Google 面试题](/docs/Interview/Google/Google.md) * [pocketgems 面试题](/docs/Interview/pocketgems/pocketgems.md) * [WePay 面试题](/docs/Interview/WePay/WePay.md) -* [PPd面试题](/docs/Interview/拍拍贷/paipaidai.md) +* [PPd面试题](/docs/Interview/PPd/ppd.md) ## 3. [算法模版](/docs/Algorithm_Templates/) From 01b8936fa755f08a9b253be850f237b1108cacae Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 19 Apr 2018 08:20:32 -0500 Subject: [PATCH 0501/2496] Add files via upload --- ...277\347\250\213\350\275\254\346\215\242.jpg" | Bin 0 -> 88220 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "images/\347\272\277\347\250\213\350\275\254\346\215\242.jpg" diff --git "a/images/\347\272\277\347\250\213\350\275\254\346\215\242.jpg" "b/images/\347\272\277\347\250\213\350\275\254\346\215\242.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..7470017e099386aa1be7c97d180c721a9e3aa84d GIT binary patch literal 88220 zcmbTd2UL?mv@RM1q=O*6MJWQ(RC*1FfQW#Ag4BqhG-=WT1fukgfPjJ$I!NywBE5-7 zm(UZ6^n?;3gz(}ycip${UH6<^Z$Ql&&=NY+uz=~{C&9sxb{d#PX|CoMh196 z`U70f1GE5F$jJV^{zoIHB>&g0Qc#dnQeCB@`q!yx=xC^^X{o8GXc=f}>F7y~iiVMi zfu8Z-`+pDlcl*D)NH2P7D(Zh%{C{hg-vP|jWSA>RaxwwH6=pJWX0pp(01yBmqa@At z--Q21BfCOQL3x!lC0aVt1r66o(&5t4cNHk5{zor9B$TlkiUsMu{;Ie7&|C1tG#+B&)q^&Xi%eP(9< z+``h{;nizLCubLLA74LzNI+m%ctm7WbWChY>c_P7j8C64^YRM{i;7FWmDbkPH#9ai zx3qTm^!D`+3=R!XOioSD%>JH3uAl>SYwzjc{N5?0)Q~ckve{zul$p2HU|0&u3 zCKoeFt}CQHprHCE7ugkmQYUAopuBnaDvPEum7UjhfqU<%S??$3)^yPb%9vo-UcMct zWfziN6~_J(?LQ>@em5$e95kz{N@WgNKWAp`u(u$NVR2 zh-;UCH)B!Dj8Jp0TpO@!=2BbnE_Wn+wTf|DU7&S*ByZ?idy-M8U&Fopt4Tj;Hbh@$ zh1PH{H;nbE>8?2L7Go9qTOZ43a94#9#7lSlyle$K+EcA8M(#<(#>YRY1>CPqk%^?r zEW_xpN+xxUMJkI#$^NbM$eY-kX1F-b5GEFi^Bvh(w+hfmiF_E6s0Gjs?(WjbTwi|D)yR*K?;`?|dRH`HJwmtaSV^M`Z{Lr0x=sHqCqq2n~lYaHi%EUOvh4 zhKG0F9uT|%8&s(TNxTcVVP2_|RKHeo!%+z|(|HSTk3B_aC!c#ldU{%mqtw~dlTniL zoao71d`*cB@=u6RoIy)VV!xQgH%mx{oCOr8RUhe()oKyGZc1FK##-51-t1W?jpuK56egSlcP zll}^IiVtoL0p}JNbwv_8qxi`&3OE9O7AubKkI3ByQ>&7@t&Via42=4^=HUC?jI3MQ zFh6Tt3zRM664ZarJ(x8KPgGia1}W6Dh0x#Pf`CJpF{aL)?05t&61&-(L__eKByfOm zV=?V_3yjo(k%`dL%4C~;a#Xw zt8k*6d;|QNC>00NhVYO6KY;~xUGaW z6LhQHzF9R9UnOvncnNR~l8yn@1CwMEWUR3Ru^~W6>eH0XZWt0l54EvVi1MYj#L6wo z@0cL!tn4ZLpKwI*KZV#j?>=K!luT&`&FA+b>fzm^bX`axFh?hwH6*D|U2GC;R6E`Y zTy|DSElfM+sLdY(#dJqYeU+^L6>laUS7FjWw9&}%a#hCSE7MT>MU^c6j5I|WkBbfI9Tu$x~= z(8k9VSwV_>VJzz0__6NHi1rv)k30ySG3Ml?aMz!XwZ;fnVY`=~!V&9K*pSYesno@2 zjE0mgyox|7JQ*(6AyWb+Ssv9`>ngK&t%1eUxP6YH70{m^t5kc!D+h@N0US}j<{8El zKfp-KXD0MO{V6TW&f+j9xv zbIwz-vDd_=$L04A=b9aknNRK2x3vY}BK+cBO)T6Nr#v^PC`jaeaP5MfCt@%2^zCk7 zp9wDJ`2h2yJI({Im19M#9()(giv|2wJywUh@TZ1xCR$yL5R3tRzo2C>?x~T&xls=H6*tnwq%!ZS9yWNs z=ESc$dk-!}ut^6R%)2q>6ZuWgRpd4BN0@+`-;gmw(6CDqk>BcERYFG>zln){&|!@q zF+jGXQ#a9-0bBD`Y+JR?jpv;0ckjI)12}l^^o3YJl5pSgExGup0oXN(PPxj@IZ$=% zQtm38*?CFkSG`laOrdrVmICkpsO3T85|S81r>0EzccUd}O1CvubYeq`v5+Ff5B%lg zRh#&8x&V8P9$0ueMDMY^~!{L7=lUlvLhs=X8PY{VU-EhVW$f`$8)68|Vba`YXow1wA2|TH1avzV z0|xl04lb0cQb8-(FpQ~zI4Uw9Q)h^E?1zQgiWtSfnS6N8qhMTr8asu?2~NMB_xR_1 zy$2L4Ox!BE{(x2X*Fxd(V>2a5fuwPSJ17BI@7Qhho~Yh|DJCgyczOnh%MuWiSgn4; z)}VB#WZ627;pS+3CRx}X%i^L%80#$PHKRtlPqb?8)Q?-GqM{W+e-yi;^t0zK0ZgJ7 z*#IGeFaG`&z9@B>$>vR7;w2yvviSu&8yg7g(t|nr-H;wg3X31e;g^}z1O4Tx@PgOr z_QPTkyoq5IE+G_neY=$kjmJ&gMafulv(9PBqIi9t?=uR@44?HT*12i+ic`dH_aVHr+3y&E~yNWhb{_CPRk%Mc2W9rZYp&?3tOkJ{Ru>O$*aFM3Z z%-h93tzS4W1NS0c$7G7U;1$njQ;qOd>|&c4@T_%vWdh z>*K93%e`Q3p9JLrBP^oF;O0rvo}y%$bc2ml?~uP&{)l3aT*r@>K6JN^W1a0=p2}!3 z10VdB8D+iB_Qd*C>A{BZ3X}=+5;9oyGdK(2r@#n)GoZUYq>(4Wvnwn`0aBdk^ zJ=l0mvUFEjjkN*)UDtVjJH6|s4rFciE|v+Eo`9+AY6`@)cuN*We7Zk>GoUzK*E6|` zRg_!LF?r7TW`d<2-!!wuCrO{N6i%{Gs+o3jRKM>fU_NN|)_cgILGe~6KUN`DGH;b4 zFs(iFS-3eDz>yu?hMjWb+v>e;C&dQ{BA`Gz|^S zxgz1Ur&kkqQuxo^P{<`9X0}KzQAg&dy7fiz2_mMG1s}Bnjs>!ujB2g+A;R1Fq$9Gd z@ct!EuXmo!N=r(f7=Q@x#w(C@ulc_{RWEULgLf*DRt~u@KlO5?|X(99`ztuvO~B z6d4r*=ar5L10_}2lBA%Z1K7LF4|-)3m$@88uyggm@~kvPH$aY;nIJ*Wuxg`WOA8RG z-J1r=GkVba`@@b-6Zhty#nwsqwvgvp=)QSYb!m(ff1a(|C9Zmd!+P{iG_Xg1XZ1Bz zi;}%@QD+?vYo<@yD?i~pgWE@40($Hrz44@fiqO}jEt}Hq{v_x{4&N((dv(`QQ80du zDViWz0ttI`QPysOjzb`2&}#5dxkdK=;n}{CV#pIcSk7}jl>ro`g{ta}RGq|A)3&Dc zjX8hIew@N&ee0`>hH1nf;P+e#1T9oSttsgQ7~_|L8wqwq1tE5i3`ke`OCyv<*(H-_fz;B!O$7@2F`*^mM=aB5gaFF@map38zi$1 z4o=Ujlqp>Kz78p3Yz_%&X;XK^%^dZ(m$d0=Ufpm^{xzFG;JEh(*d*Pz$2j%rcvN2# zGZyO@{pbHPREg3m%6n6J<4Vu5iNgz1FkQpNgY!I>de#*^hIZdzJx9rfu; ze2@BW1XZXla+yKWoz|iU!y}D_+{53uaJ?;FNt!!a^$0^az>#%m|G0J#?#SN_J&oze zhToJw+VB#xjGy(QD{Gs3b+{QL0ylBAf=Ii;?(<$96nQ zoHv&F!Fze;Hu6YdlGedcf54dFCPwiR@UoD9Rn&G?T@X)KWC^9bC{bnbKy|$Ao_vb; z$D9r<-Nb(`1HoN$|5#SGRO0=un<4H}CKAq7(zu+)w4sZ|cx-!$ftz>JP^S#UXaHX4 zxZ8jg=~sRYN0mvFJ6!^3+O1Zq!jdS=+4+U>uL`yE3`#1N3aiEY_>F zxvIAk%;0A-rsR+Xo<2BB-ZjR+zw>!KFq&`r7lU>ic%!ouv15<|qWrR&jsk;9O2Prf&6Iy7QB$*P0M>JT10C%zbMG~h9JYA{34MALP6pl~sj z_=Bg@?jei!{@lfbdlY6pN~G8qSEef^;rdn-%zbONHUaD#6T?<^XB=+MvTyWT>#oPg zhc$7Mt1m4Y8gU8K9mB|-GugkD*~~q+_`T@r|MJu%6Ui29bKlN`4Ur{YLJ1!Zr5Jls zoww<9rP5;8cRh~SK%nB*9RmVFZf-5t!S*y!M(3@o!7U;OTcSwmRh9sVnRK-` zNtuV0IW17WU3tRqek$@N^2&SO59Djb-aeO+*Hsb(V3?{Z^?vGYUagIEespis%MGzZ z_%y|oL}Y+k;$6=*Ll(?I*VMVTl)sUW3 z-)2dyOe#PA4FtZo4#%5x@>~LHV^)$b9@Uqgu?31ubOv0s%Ul9zt$JQyV5=`7f|mf3 zj@zA);MM}{d$41VUb$2O3f>0%v@M#~`2kHUn)mL%>f)}zL&mI&Nn5H*00rt2@DU27 zy9CsblaTM38_BuNfY$gF&WqaVh%|kd0MRo%8%f2eNCy0P-UBSzdvMBpqT;#S9a4fT z`mVEmPc5pdBE%3sumVdY=wiA$Z}g$0shrboIq|dQPU`G3&P@s?1M-E~HobH`kJTeI zOP`zkheUdle#gY)-UkdWBJh)F&pR{}rv%r52KaC3mDvQ=|x z+?b;4AIf<-`+r+jyCD3^O8d~aY2EU+R0DVec>4xWDGiN|a^DFG$yxPD62%}QiDFK0 zjHySYK9;ACNP$%u#fhuDvPSOSdo{J)?IgW@fsvITNV5nfj^e{OVZ!tVq9( zhUPh(PdbnOx7U#;podUt(z;GxWUDfx85FF?)yW9g#~a+Zw^h!0c7Wv0ey3*scbg%F zu@BzKdhpz?ZT-;o?nXRs_H7cTa3zkZD`5@uD_s#}A+$SzKkK|D_w$2;SAwNbn@^gP zM}|~uRVkOu{QRVT=(DTDh{$b?{}jFdC^+NQ^3aDZYXb2i8f3rBOC)VvW6=kw0>&R* z712(K>UdtDF4Q!x&Z-;ihKotT?HEoQX1PgrZ)xW=e_F6w>{=hd>8k{33d|1@$I&2e z!ehMN`2%RM1;MnqxE~yiU?ec*Leys;hl+~**%3CuF7RqMgO_=laynQG;E@V51hg3Ll;ExV8aSEaE3 zeB_7dxb#CbvUIb4T|}7wYx}{1S041>9JB~kB`qU_IBtpP4q62F5E(EBz0147x~oVR z%j$3!mgifR=261GZX7MHrK9HF$bK^}{9y1FnN{Fb)6o236?z|^wSquW;UcDFgTznp zA3X?OCD0qy4Om%r<>Ih*o>Dla?Y4i@H4DqXj>b&f7m+BHmKl_M){{`K7qNQwsk;WI zU9BF`z6Jv4#*=TPJ!I)3+b2a@VqRw$e$7c=ER6W=p72A)fdAxXtikPU&afyHd~Wl5 zwj$>0w^as@E_Id}Rl$lyeOSq#j7+t5q+hPLubc7+iuf|jtno((detb-{dk$Cs#jl9rZ3gC|0misT}?%=e%kDi zYtPrz-}}|Auktli1Otx2+KcVE_Q}3e8ZLB0z-AY0&T2JkcTTF{62M4uC3N2<%c(P- zkOE@w9$cmc;(1)aeXxM+^7=t=R$Y^~J(t`c-=5F*H*NL0EPF_%tBSztxk;osz|I!w z_FTY7%<3%Lejtbd={W`tw@VXgl}P5~6u)x`aJU43F9DOjeL+P@qv0S;LfLk+F%eaa z&sgJ3TB!p6YW}K=HiWf0f13)C-8?VqEV9ae<9B~tn>FD|tZ2@E*RO(TgWp$?;S(+a zV%&JUJ(45sTR!u~j0PR0uqBdxmsHN{{-L$D+(66^4?1 z+W73+6KsUjRbchVK}p*S0sThFl6j)R4Yk3(@2@PhPiQn&vz1Qac=3P*B;9IYV zorx@*g;qlC6^(u%J!f{gC)v>23tq2*!it5aHhNFCLtKah%Y1LtIZ3GgR&lf{ z4R+oD773@2Zoi4LK~O<0F9CCBy;0pkl7j|!{$?TSs*FB!I=zqPTg{YLC*?ROfvMf# zMkB&?1$1$AA0qK**edu6J`W{%y;q%UilF8i^i8)=Pp)BiCNrWyW+6B&63@sz=g#x< z_pJQPA?Zxc4e^9dqz`{ES`=EL|Kk6B@BQ8+J@KccY(znFkEcK1axS_W&3~aMRF%~? z6_4idIVYT7DGnY>H^q5OktlE;P@Jvo6l4BMFc?Ky6jqGq*5A3xkx8M-qzB3E-}_n@vwqGwQ|6- zmFZVi=-lXcTBcrBI&8K%5+wSvq3v9Fq(sJAI5}}H1u_y0X801r9p#fYoBKkKkLr;8 zhP{YLJnEx!#bN4AAwQuHjC$y;6sjgFfjo2zAGJ5iL68(L zvbDIIPp0qeR{rW9o#7WqscRvYAtB;xJP~wM;U*mHj$8V5TN}DRVP&|>@iTq8`1xw0 zQ^n*Asyam}#-z04sv=s1d^R!ci(S^cJGUQJe0sxi}J``xC6=+E?d9JTBJg^SQVlpXIJQV-E-_tg^ZdD9ROL}5DHhBrCFdRBA z9WaS_s})ZRYFH(n&GzXsng0bZxP1FL&t6iBK$7GMhAIEY7}1AV_HT@TI5>{yok-f% z4A0H9jU4WZwrdondL^(X$w->7S5gNAvpqpF{mL7e-P5E@*Ofx4A1xh0Y*#Z7i=`Fi zR{frb{o!BeTMvU<3W>j)sQ6#p%9wV!1c;x9e;eBU>;Uh0Z`^W4K`5JSFEieyn)m&U zjStJ+UGIE_j>jIkGW?r>f}u?k+ePbZix4J=+trm#lt^gw!52uGo|y!s*$Z;sEKeVq~}64~{?Rk&54 zBZeQDZCHIYk6n79o&`?Rz*YUK<(4UqeB?5qE_PlMw`d*AYHT|<_}?*t&!(BqC<~61nR84_*hvK$D9cfCgi) zA5s(aRliWKm2Hd^Lxd*6hSfrp14+>&VwQy97rkuJd5v#wijWe?w=o{`sD03N;z+hM zM(%?QJ`5EcPNW^bY4kPw$T-r<;d8S0&8GJj`%-*t@qRO>EPHlbYzH&!dv0#LZ!|@( zdL37FtY(@-@>>tjx*m$K>=|eu1QFtBPNUF9D-Oq_I%EJAUD;ET_x@b>Gj^O#o7F_( zzf$4<_*@mcqfM2YLoMW1Q`4nr`h6{v6#k)vN?|K`mjJr18)TT%z8}J zD`C=F+sppNytxz!$J@tRASrkQ!mX<({#_gYo6{ zyN%xQA?IJt17j0`croeS6Y<)r0qJlTbFQ&?pVjzx0T-vd_bvg;`rBf<(p7}=!u#&H zxXD4>E)YBssP@Uj5T%;O37J_7Ngh(6V@WRkt>Cg;Om#Q9XVf8KQM}W zbQdn!2`2^llO|Kr4r>zfxax;T){i&WALi*K|1K>}zwwL&GRC@F;nAIvka<*OnO#7> zHkw*?kw>e#HGJMix4?pCJ<_U~XCrdMs%&TTcQ4yJq)@W9XI)`172`_TeS|7%qHfA0 zNm9w%*|+e*cwhelR-yNJXy}G}@$CG7{SPZjR^!KZ+N@8={BF)vg0aM zeA&4aR0Y4^>Vn_-ZcC5-Gyxr}k!s1G-@ZTgW8jnE(Ks#&nN^c8e_idW8fT~`XTNi? zAfRL;&)DE?^)sPHw?KYUOwTxTk*xx~idP|lZre-{E<%K$0>=51mXitN55x&?!3i%r zdc}r>V&#LTZp)I&M7V>TF99;DDn!1rb5+cGh-1KGO(NqZV3nf? zhRrw(BuKuJ39qXQEnd;>nqZTfG{G+Ik};{L5p$d&Y0v(&Z6-`oyF0?jOJYj&P;P*N*V7`S`qy+D>@)jhw8M z?&IsGWIYMm>xp3IW*sKdN(D3^Y{Bbg2GyXBgw-Dzz8%0PI#eE~^YE002a)5E&y zJ-arHP8!3Hy9@VgONV143%q@h1R<#Ix)FOt$4^)1@*Hi9}P&z?fJ!AOk2yISfBd#QrjA4C$F!kZ#C z91lw4uq>ZiEZF;n1>*h2cK2Z$VFW(l=`Cjj;pGQdmmIHwv}EAo)O>pxbcX^l6Y z+r(<>Y3p6sE6&oR{Y$|06np?Ct_MM*DsGp92WyPCE95!HFTbju*hP~HwCLBD9gIsf zZ00^!=S%D^2B`T>zSE#$oucr3%G6&#;lo!tF)r2b?rzz*Tw<)vrbT;O>C=OV=$EXH z@AL>!mhU~#>GwBx5fsTeDNtCo z$#@fM&b8tz2#T7*&R4OL`Ne)?JJc7reehBz&{MrLD!FSj`M~JhT0@-uNxZ^UkWaj$ z($?hJFUr{4&8-G&@4hFww{y@eOS&#``lf_+aEI+sr~LQAeSsqMhtezWNe(r8iM;=62R0tIXo)37 z;u5ZlS9s~kk_~?|8Be6<>i;!gh|iYF_is}bA@UupNZ6kTp@Brce?H={KMC)Tc-IQ^ zfZCJ7z6KP6_vmL%|5W%%pQe^sSE!z|@usrqW`Gt5#4ROHe|JM-MR z_aQ8ydZdu2Bzead&0^BLy-V+~0xWFP>$KqAFa$ME9>p40_Fu>?? zs8&(mMt{mEtGgW{R9fNM=Y83^gT4Ht=y*LGdd}BS!(P#Y$`8%gT9)e8ePBq8G8mU&S4HdU{z1M5kxwqB5_-X+up;uF0r%N9x z-s8se12@FEXgjftF@ljr+#nGgoWGNoQM0jQ#5I?Q)X{T+1wjc@k#1_ZOQ}QB75b_N zz$2=`m7@!IHV6eCEp9_@CtF`*e!oO6{ey8Oka=7AXm2Y_`>`Ykj$2!R&otiRgN0qHSv{MHyC^SzMHFkdn z8+lMAc9gdElF|2N@V!SBQLLa@(QK?KW{QOh3P0xk_r(>pg~B4ZPD)>1*y_;ne$NqF z^Q7+ARQj%(*r7Q%I8;{d7aFh<_`367&hvvURHL2bn%tLr_$Be5F>s?_`{1YQcQF28 zl~8Bj;2IJduntns7r73q*)_gbP8Q*FYSD-#k|K2kP#3%psT2|cFs2Y)GC9%YY#aN>~_=?Jf z0k6y&RlveXRvo{# zd7(%p7Em6MH{|z{3}%zS60{Q4=USmWGGGhBlJe&?9zyBE+;2Ngme1ZdXF9pP zzIG$)$_@RNjl&l{wvYzWpkr+317{a>@hmj?B-t##?eeCqJRE&U;6rlJ&)2q-irg@uM2@mX-s+ z)98t^?|@+*LcLx1+&E+c#z_cX8H?_`iZ`x=GvBDVi?UX396m9@6dcSAzsZg$FzbB)z{f)OW*~BQt zvb4hk0!tRIvH7AF=D(b&u{mwkk zkq1Re1&P#BN?YQPJ7N1@s%`Fm_%x?S!TdCH#)36e>w4-Dv`1*O=&Gm2fM6^lRFjH# z!cDMRHY=FY&HXhWqe!#46N=I+p6qzQ@Dt!d}6Hp>m8De}SdzQ|C-UjrDYLkH0w{38F$wwcDfk zOvDYSw40uETMzJLWyP!l4DB647t!Wg0oSo$Qf*R~N(gXgN%5kjJ&5El6o?Wtuj_vu zSBM)LF4JYdf(tG(@u5uN^dJs+4_JYeoGgPAzk@%jv=bh&o_@Gn|^q=<7@n3qRu99ypii#L*lD_B0YgIb=9F$q^)Jje%cq#0f{`Y znereciHt3b_c(KWq|sb^uIcL5;?+L?x12sjh415wwDLe#_N{SGgC+e9#Olv2*-sWd z)Tzn%e+*d8B_R7Q@!2cZcVypL+ZaRs^u3(e4M;9i5g$r})xIE&8WW$w97t7ls`-S{ znPneB$^1S%P3qb2keT2)^YhzGf6>5oUEEXPQ9o$7!tK;(IH7avuj#r?7;>ylTq^6@ zjp%%;S>9=g&+L(L;R`dhLX9;k1@ic#)NCWKek!F2=J(mGj=zi}PfHDZADOs}#?;62 zatGg_^0;wb{~=4Yu{JCHe;cTiN>be)QgH&Fn!J~IWubL-CG;Ls!=qhRmWKe^(%D-Y z_P+;5zb}T;oHl3}%Mv9`sS z;@%KZewvF4->+t{By)9slAq1Gj~`Rd$_4*!>P?@#3U?(TE*e<|kIunMfa3r$ibbfr zHXykl;RGZhF4hn!y#FfIdpY1We5wg|NZJc#zHk!**~3RD#TSvBT`2)YY3ZVQF_wCT zK8bRUuT1}=1xq0}W-d6TxS6??TJ2aT0BeLw9vmY{C0o{wM?FkUB53#emqJy=rH{$6M%s+SB zJ@v&L;hZk2VNPJ?xgCC07?sl!D<<)MZ~)529z5Fs+#B=-U)MQ%%21-GwwA#nxs-{+ zeQ=kl%zq`>{+8~yP{z_Fz%D5w@SuBauI+IH_F1fRh%lDFumV!|d}2fwgcDw>D_e3o z+FJ5?GX$C|=#(eAT&oMXrBTXzgVF~Yfdb>jLfX7Bx;S`8BYu1Z6ho@^yaZfvBHo*9 zH^vxg#W-?gT;H+v%aTTl%vR)6IQ#YO^RqN!7Dpsvb5&PY`N=N|-Hu^%z6)6_dVfIVn5aIbP*c#q>}%K#F&GriO0gYjJaJV@tz3J@#CQIxAue z)Ci+qh(?fa2byJ|4zA&Oo^<{msrd6`P9Nr2GyO@YX=YX)|ANa9Zx!{j4a@|Ngf}2| z=e#(2Oc_6;tN3m3ZGGGx0~bo`Q_=+O5LI&+M|@6wLrvt^qt4peYPfM)iewqpZ}-a0 zP?6f^Y*(j0TxS{Q)C6yQF$%`x%1@4utAyUd`h8nXkU7^knSu(J*;?ED=9oHRP)5$I z$%V7edLK-9bWVEHG>UogXkL6}x&4zMy>}O-Mu&Ss0+^Y2ZELrRsOa=E}B9BMYGYI=1ceans&if>mNFWRL-cRi%8!Q_#7Hnb5Wc-b^KMo zmtSC9vV0$?f!R#^w*6MW6mpJY%rDlkPqg`|qO^3LLaeg}+dM#<}R%N62*R-gR z2CV>p7#lPI*i#i@D~ct9_x$=wuHS}mmK%Mt6-crbwg$8QA=Zf3O*}Ly9+HImg>xPr zqcz=VkUN-06YasYO+uo3+F0+tB`J&uQc@E7Z1sSbKs)iq7o;o~yZumdv+a6C#CW1u zU*Whf14DUYWRO##5rU-tU&Z@DHN*-Og50&$C_>g_ZeTSrjB+`w{Z$a^ZAPYF8e41b zgootP!tH@#$&P_D*PooohNRE9xUe8kMKGxjuWmCA;UYa(g{#4az*k2fjrGE~I{B<2 zBHshqP*Pt5&#ns@DX#u(aD;fiursbV z`K7=}X%l?L>IjdO>vJgAHy0w^bb}h%Vgbl~$`NzYs>PbhX(PFp9>8oLt7n6>fX0D8 z$sy+3Py>4z=XVGs7Q9#bij(avY-0t93?M(_kE!9=%6+6 z@3Y;JGUqZ!zH;M+q~9X2Z>m;k1DURD-YL0YuyOswafK98ziob`#f&aU(O6%#R^>xU zY;K&)HC8d9c!(lDUWLC=V&b+a&esuJmy!%;%6h~@u*W=U2CvHw?g2| zXUv}AsBUkvrd)jMga?mX{b!43KUhSU&f-DR>03CxOf%Owzj>`7Qn{;S!_wzUr)63+ zQc6P3MjrjR6B~53D-<>3qgQdf_C{P+Am6sO_8y(^tJYJVV9As{Va5V+@Xh$t zy99aV-IaGaFKCwvhG_43I%|$SO8@aCYdV6}_@U-MruJFoi|gO9>z%%Wk+%c*^OH|_ zr!$o{3jq!zMbs}o03vjSNQul84f0Cw?`RRlO*YgrlMSgf;edG#uVC^e3E-mqF&Xb_ zDjn@(vF}c&n`hWEPyc9A!i>_dZ#}>)i{;^7!dSchMu6dyk`G}`s_z2&gUf)uM21O% z)#{$sqv;AsUo}CKP<^X5@#b`^pfZ1xD*BS|G0g8@JbO>6M{(_;9J{s1gcWyt{OtlVeElYCemCKh0O4aj?4XS7e7~ZQSOT3xL=)rS9Q8 zJh)X;YfQiaAMIcB_)prt*3r1tE{JQrXmCe3B+=}23bf<3u%Lch7R*e7dQ;g>D+Q7k z={$oePY{J1_^P-@IXs+;PP|3I9IDs%Ak!+9&krQ$aS3=4i6#B0VD1uNIIT*4&W_jW zx6DYAK3;U~Nnfs;otwFSH3l^pG2QEE!Lq!iAmhw&Z*FkQWAjaYD-XS!dr1F9HL1!k zL3-7Ew+`d_Xfku8hui-hQ3y{h9o5cLTonbq8xZ7$Heh(wBG1h3#re9`X>ZB-rg@9A z(DgC4j^5zSo}_sy1AM}{2}Gf1NdynXa;zT2L$z{T%=!6dpn8`8>NVo4_-$ z5PORR9cdII9%L>&vHIg>aIFq8MR5}t$n~NrfDHv7@o>GU?&RJk-o#5|mRDXi^@2EE ziE3EK_+uN(mo$BujN^Ep;8~;V+#G7MH%#Z$H=*JF|a+ zX^cZBZbe}Z4>$EX8}-ZB$B%s{d=m_<{zTj3bV3K` zt_<3{R@@)vK-N(KJt1MM9ucZ`UR9MhtQZS+_9@ONeh zSN274oh2#i(#g^)TU#n0Dq83y8VRv`}@VlCPY;=n0QQqQfmc zw^bWMjl9Pc>G}ydS8OW8%W~)SzqG?KkAQOy;*K~M{FP=ZINm%{mjvLk2ezd8B1+YZ zuML0Hxu7aW)Z3j`Fu-tCH592t>18*cLKib4Mpkqkn;ji?E=AN&b#`=5pbU$%ko~)A z|2o!ROauPr>&si=Ei8HWHaAwXY0%jaiZ!qIT~+dU5v*=Eu#r^SzOu~Ql{*58QZ?p_ ziay@q3mm2qZb%U`Lm_n@4{?vu*XZ7^f77odXl^!mwNPdER(aJSh#TZMHaGcv0_GM} zp`{Pk$0p{MKp$c$D{%QQTVD-CyE{w}Wg+rG-%gxlF9d!*02R4o83|!ySb|rLP=1yVq&(EeoqkQtBT((u9il{K^zUnWo_hp9*q0AI!V;e( zQ2LG)a7VPWk<}qf&sWtH*I749B*#ZCqpLy*k|-vgoh7!(#N;Z7(ftVFDOLNNjvppN z>ta4f4GgL=m2bx9P9=~D^)g$z~sj61Ws*mJZGjEcx_V>|a;y$)rd6`T&Z*cljAqxvPK`MZ@(2ManbKX#NaE-d&TEQ){wBC zPSwyJ>*-_IHRr&HjPMgRov|m4#Qw>02iE|%y|qNW6sJbjhn5=oKW@LI%(!)NoIL|8 zj7ez+233ujPO0A|#me`I*P)Eq#=_NQ=AFz1^Gt~+Bjq;EOYGCWHVPVgk@jx)aWhCO zE5MWTs67+i=&!PsJG>H94|Ub-?XK9AQ;2VjD@}kWc)20#UrB^zcd&V1Tm{d2{xz27cWwtCqFt`gSX<1( z;562^wSt`R$8ccL!bvSm0~krNvW{>#zUN%P;nWOQ{G>`)DI>arr4{llxMI@ zfs2Ir{q5YiwHGG?UaD43VRY5(+u@o$C9;JOwiWXy45bSWK~=&>2OzJ%{KzGGb|%T{ zd%MfF!8m60@p?oDJ=RdOBderix}n`tJC-HZjZf3qI=LFfj5jW_O!IE+6xH>=w1u>K z_>(@+Q;uV9&RBkH$?lTmX7s6R<32qDQ5tDUra^VWb<^Xrlt^+G9w9RO*8P?3d@c4g zz^O?!0OTczN4~>P*wQ22(Wiq-gxFFzy1v)6bmk-P2W0ZJmtomPXlk*B%vSXz`yd zHgT&TjfIx=MMAO=)Nt45n9?qIybbja%%5(^5|0`HsC0oC`I?h(Y+rlbtDus+^)%Ip za%ovp3BjNG3AKGqJKOas@xf(JM&Ai~{M4H~r3qO8;1@7SDO4HfyVXeyWqXDBi8OR$ z^>44XFxL*5772_aPEQ$EPG@>k&RfUs;OPysz5S}hi63KSC~3zq4Fc8lgG~6_rj&K; zC$q-s%@%~6x1f!Sn%jLIiC3Q@1qz06^FJ|^6J3C5i-QXrk8#=X?pdWniG_WQ2Vu?E z$Xn(B=tFRdPPsYUU7PLWyvMX(l*4=8`XoVS=}|$F39FUbIt=J262SbW=5eZ+`Yz4~ z=oQet_dvHTU=YrTBn~1@yzL8+QammhzO-bVso{$;A3|Fxj0trouD5&^j(}$wYP}fs zg!5cPpahQ9&@&tONVf`T=OCT}U6NV0_~fg1aOGiB6XW@^a8IJVmPlL`b5OkBT2Zxg zjLWVS*5!B*D2~X`0zKY~Gpb1RH30l{aLnT$w@e}FP(g_Sx~!hxe+_f2wWR4iY|0mX z!WdMS);9QdpZE)0ewRArIo2&0X!Ces+iy6b(Sw|dlYYsBi^w2`QPrFKZORpCmwN8c?#p%w% zls9WAvGKi`@@Q=R>ul#dhB=_5_AE1BwOLv@@brY`UiHRje*?FD*p{ zgKpm7S2~_z-O#7c=D0af2X3}z zOnA;!Ity+;n4m3av5DU*Js!q@HmjUL+=5Yd0{FOoRnO)8c{ z8#?rEY6W)2*p^}+K`eck_{5f>fAf@O6dVu&nt8t{c8V;w7+BlgJhIT@)^h%$!%Qw8 z@l=lz-u*g6c0FV^UwnEOE9TWO2I*PiSZ#_~((9wSA}ej5r?vbxyb-HKfWIVo4R>d?g{j+J^VR$Tys&8RRW)uNZTPo4)e5QpnOSce@Z}`d^!-^l{E(HLfqJ_Sk^1 zmVv0{2@;rWQ*zgQJvLdnbLx`JQaefbDWm48Xw{OsDkzg@kUHUI+Q9t=j{?FKwN??c zNZ#6kcj^+M5(vHC@>Bh)PhANk#>3292?=LfgYTfH*tx&FzsVlP5P~Td=rD#`-q9V@ z(08I5RtSBwQx`^m|9N@8f#TpY-B&C9-kx4*Itt%4L=tKX8IlAYJ=7Dri+y??7-$J+ zDDmJ_rj!_=N;lT?r#kt0j;~lUNV2tf{b~A%dvOctFrqa<@N}ms;>rG|T!D@Uo=<7~Zr0`H=?Q3RY8PsD$cy`D6#nlB7I- zL}&U`j}s;~jTgj9p7;K{Z0($>zG8aCoAN77g9|X>rZa0%OlijQz8e@7d8eMnQxV!5 zfpyrr_3c@w6~%+FJ?MkBjoKXJDVg*zCOoa864}Ezw~{0oqvrOo>epJ~kD_dq1Ya+A zxSJ_P?b3lCd=$P%M7>JIaTp62Zya>7Rhv$Aoh@y39W#HJ{@GN#84|w;>NjT)D+tig z-_YWwcXBO?-Hy^+W8sah7Mae|s}*g}gJpi5%6QyAE=NR5CU?C*yATHNHYNwU21Jv$ z1w*M3RMAT}f<)U6y18573RE_?!auO47+ZZfkhUW`Kw}OBtms9a&>j7UfG?`uF^PWN z{KURXFpV#tk?*)TO~xLh?dc=yvSkK)x+Qw=Pj3i!^K_#kq)&gsPARKQgMISAhu%k; zk}kYX@Y&|)@Zta$9+^njqxMFu!pDM5f#2ALtAg8nB+HF5ehpE#5C!(zyrH7QzM~?B zw(U0rt2}9$Ia!4K2p{w%+!3P*h+cjyyvyqydhi7eT0Gs*0P?CrW%@bIhLa=k!)%-NFU7N_1&WO@g^%32u2pvO@htX;u_jW-d!!?~*t(I!t7!CTG*V`(3bIi%FlN~ex!3U1r4KKSDUFFL z+^`n)a_rCoD;HacRZ!Y;@1Nd$I=8VyBaAZO&%dx|8~%O^zgr?Tvtw(_)C@fYxYE2_iB%91zpo z6J@Weu{t;Rpzf%jE1WWDP`nc8O~Asu{Pw!n3{0{3j!f2Fex3vQ6v@w~)7+u)Z)1tRqeUEc zKB{o*S1`Z2AW7&T#BtSQg?%?c^jLw-U!VuYNG2v$vC_id)$x44uI;80Xt_QPU5nkX zwLTV($lH!f-Zbs1iO8qN7!7ss5L}!G z8WQ7TON*^Gt!+cnxz~yac^kO$WR;}Wh&f0NvJcQNCFINAa6_5;ARx;P({LHRs7^Ax z7}REPLpQa;)rJ)tjZ&zRdJ$9~6u@xumAK8#6un}l9yKj_@^wS|qtJ-UTeu;P@a7>* z1nY#6GQreDb+BLwd)FivGQ5vP174zUi>pgRoKuEnv)-mwCUL%0aH{)t$0HwzKe|oC z(*x$rfMTd@A7HRh;yA?9pwEl4O=8Qi@5aw{XUu6*S;+&rCHjmx=KLQmv4qO;8ma4^ z>Sp|1X_Rq9o}M*D@9vyN;Q~?Qor|TL(J_dP!GRi*wRPyU91`*!rv9@7kS;`vf7vd| zTd#flXWTt|(r{zaVjLHwZ((VY9-VVP+dH{~%FOixs5kj8OnV`O)pd;^=PIGDwh>(u zfpk}@wcBLoL+=)MKFdd02AL$WoFKdAoh4X%KR6hhjSN6u;KyQV1XC{9cVDTPG7K{jNvQQ z4ngd~bZ(5XOlnxc68tQl02^rM2AmQit}r-A)7*tMD{+Lzbl&)q<^Nr(VDf%Hmq=xLASKBuLJ^M6rsnL5VC!UyDcTZuEF zidvk*W%vQa1JIQhhNMSFw!4EBJrN4lC|=z+wNQ#I?JrppF_mcWrBC8BG7;)KA$Sb_ z1D@xvxDhy5Q)c<#Q$n(%h=UV6%~ltAiRY6PYX<+OKEb) z4nI%{4>9J&6TE}pAI4}TTuhK+gI>+a1RYunznJkXYHdfhr`t6*Me?|Dn)-7I2?9csDrR6?vM%zeLKwiUBy7C?qlAcrx+GbJ%z_wBaU|rzSmEvu3I2Fl+V6iq z-1cQ?zs-Ia13P6Ltx#x>9*W#Ls{%9+q-L(g%5PERZIYq4sm&$i=ZzXe#S9YFtq`(AI>{iR)TzyCL=hRraogKd8y~1-x_ZSR` zoKPYyDko#@8{JgsDY{ct>6(9~$<^=5Kjf1>eqCWKyHlrlcY4!0j$k7!$tN^e@`2Q# z^2~nR`vB$Q-wa_KzG2wQ?f2UO5G&}|;Bo4vHx=#~wqT8Cz5#R}O0sFccV#gV?^or_ z0nv>%Mkb73(XzyegjoMvOMR3pkz_J!!sozi@Mr_*7y~XjVbd<}#7-ud!zQ_20)))c zU>a%Yve`*h$tgQi&5sE~yqxi(4U+rV`gTD!ZHXuzD!D8lfvh8P&YLLzlgAaCuVJLw z?d&XfpTt1#jYoh&obWwUyK7ykWr&sIJGq+A{~>S{#|meL;>iK!e~`@IJxvO>L?P=PB$(vb_f?z=&#=qH zSM`3Bxdyf{PE2BA(K}=q(^v~aThmS%k#BBI^GsyNi1toCAjz`)p`YQWPa*5)@ABiH z%H7KTwp8g9V`6XQ6P7Y4*QH1{!8yosAb77b-@l7R`*n?Ki|>RDiEhgQiO&li(P4v^ zliz+IwYJ#w$e_OZb7C8_YcnsKGfw;(YO}Al99^w58(L8Z5FVynaCf5)W7E|AT&7!%%!1Y-1SM3=$h3*N`s_%b^2~s>=pB( zfFGHHmWZoXxK%I>+Hxx+8gt#tB;OI~v_;OQ?Osx!CQbu2G)C`Cy^ZP5Sbo(U?vng~ zrKWCkx7LR|mcUy%kvwsLD#XWe_Anz`4zgwkxQX;{w z?w%<-9P!FR+Gs?UP{t!)OWAp(W|f7PKq^VzCrwe$3N6taGPO=bHJBV0B7_cqqpJ0D zzLGDl*O+nFt--zPYn3ORB|fqOG^!Yxba- zxF7pt18!9l^0&E4LgIsna83q{BM=?Aa>)8#a?MTrQHC`mIyBRSHZ8`)J#gNPgT;7S zv&ckWS$U?iFu*p$k12 z0$4@7!gOL8Hxhx&fHpp9&vzo8CT&z8reH{WbbB4u#YIa=tDauy*6uMO({`Hyru^=H zZSnCRb0846NfIv*>Fs4QzhxXn93`Cf@B#O`3U=>?>Ru6_5u=eP5T z3%9x-L8v^UbeknH`kC?{xtiflwvgdY7O>!rI+m`d%{Gc}=2DLhTiCCpwD5ja_^Jdm zkmC?sGIAZj6gucxw6tt)srvm;-haKWXF+U$W0co3@O`Dr9?4PfjfUEdrp6YzAdUq! zap%yM>hcneulWW|z1Xj=s05Ta)u`REQ|- z{iiPZ#HJkd$wJ@1rbKW48p1{FADtQEzNQbw>9a3(JjFMgwRlp$5s}G$A7lCi&RUbb zMRX`ZYq}9MRY(U+_a%pv6}q-|#zTn#`((W*pQpB6!^Q3Wt?H}U8lI$}BIhQhkU4e6 zvtH54)L|){9}14;2aIW;B~?7x`WA#3o4h%mufzpFhV!<)R}cm;&!*!0{bRr4eiw&t z*cXQya{&8gcFgmm*`zf{GtDyA;B+YYPo$Op#3U6l%okmn1PjKz+j@p}ZuY~FY>t$~ zqO|P_mED8OV+`Dv$saYcu!vNHe|rI&xbso)7ux|Z;`UK)Dta{hxPMCky&lB|)P7y3 zr29`0GkyA_ zzu;IlnLC}mSq?uydLfHjD5{T2e0$_&Sktb25SDh0q#gU?s_u6a0)}2WV5);V_Xh^k zgWe$P5=F;)*0LC9i_T#+B*4l2J09pGpmh<{2Z`<*s+Cysz7Ft0B}@%?S0ZghW*U>J z4_NstP#p3yvtl^WU^mW0ui6P{$|!hu(X&yI%Zx#U)9v6F)g0va=>U^01Mpbw7GS0u ziX`2gv@n4Rx3xP9d{a0LziP7slZ<~J7GpVsyz~B0VSq89?D=sc-|FnqUXaXw3xszx zKLb8@Y412z=cu;r5C0*E7ikDq=>5mAon2i8FI}_g2eW?k&zL{6{@Dxt;IyC<8htG6 z@uIDoRrwrP&ut^9s_+A#2Jy&3^k6bxE}5xPwmF0a{s4NoSyF=<9sU|O_BGQIqh2pE zV>#^YZ^MY4VgKL^V!?c)}xTS&SMQKCaKc0@`Boia9?W5pNn+U8Rq8Aj?mQ-H? zwV6OEHKOvkcNLYq9}I7Bc)y&pKxx`%@krQObk&w=$E)(5)hT;5H+h3=HGIe$;Vg%3 zh$GB5z*9*Nc5-k+!PyV-57DO){YY7g3>&8Ud6`vNU3YCJXm1_QikgpfQibUDkB4xf zN5`+5&y%sdnNd#Y>u8)RtSKAVz!fzH{uSdZs&NjTGf9b%xKmMao9>2VRc&ONqN;9t zEwozHV9Il8L{5}uD~h6p={!#3Z-mnnt|7{vp0k>F86Q2~ju@qd{^4t0Z{W120qiT{n_{irY?QChyT{E_HmMn#7W-e}2Hk;o$Nd`~S zN3;i&rc=&3r^cNF;#*iGeNK{3MBKA20fIE7zVO#sL*rzX#~MFrTjHKLgwi{n$K8{U z`!3Ftx@aUtvnTawTw~VZ>s3+One>vj(7-SHre`d?VH58(0sNdhR1^qu`R^`uZm2q$ z^f2JebWBJp*qHsCn-prF?KmO}Uf7cDe%it3maQ|E@h#gl1}9iX>Cn6M>6sUuZad?- zWg7a#R-T2cC7+CkB6;WK?o*x|$5Bjkvdpn1>J-P&xuMwjCl0B#0jGxs^x*m9Ez!kg zGbPQW^={s~%F<2hZbvmwjx9er@>--Td-^bJ^ISY}UD8}s7SiNmCrlpi_;CB9)4|hl z%cgY`4uXpJFRh2;AHgJl%tc3@h>CIRNaD3eUFRw<9~Ctt#_Iz`kFPz9^X_KGJ%3B- z^5m2)K>nf3qmkTy6#~Eio}$*f*NFgYa&ixRabZI?QhL-igbX_K5~y^Ms-9V|(d_!x z!L`R0JBvjK!&&uLg(4^R8CqUSrq=7qA-~tzV5;c&{!YTzQ#B=Z^%$2v(gsgAR#LX( zCIQVkua^S9tg0QGW5RRT83=w5rz0n>=x-BVV+}V%g`cCv2Rjr0d41Znw$VF=lOD3d zKiZs-Z#`~pYo6uRVLGPbU3)h)Q@K-`1l^4bNYX4-Og^SVI{*t3HBiaxg_}HiV#B-e z9zqE{vt@si&pQj!j@Fy1n$eu~n9+%Pglx}ZDQZu6=$iXclBtDPXiCGS@(J{H7858$cLB{^TA*gg50IJhf<2Bw5C#1H&vO{2WGcsZGY zF6?nQ|CTf^E~a7ncZ<{O@|^yr8UT5T2GIF=C`!q-t^N+B*$|Mc#Thh53k&xPa>jE` zUy|<7sq%U>#eYEeKXFQ0axWL18u5$~(f_yxMC`qWkhxy7@(g~*rv6usH?5y|oJscy zS6_DCUg!DOPt=L?qgQ|Z#c9Qc&V^rx@6d18G)}7cBxS4}o(9;4o!N%sg`nqyKz_X~ z748mZAzp@x!?lwF>{O2Z#^LpEX?*0yG->_Ww3oG|7eyJkTY1_vZX|#-vFq{93=^m6~MF|IT!hI&zaeQ>UUQn8{5Y zlXMcLtJdVxRWKM@HvSTEmORkXnFwcj-x&eAe>p+_M$0e2yU*rN~F4g(>a1{yW#kLFP3r9+d4;@+(Y0KLjge@)f<@8zPHoO8pLs{AU{@%`83U zf37?IULm#O&D+sxYgLMJj)P|uq)oJyv3@+g?0a04K8#F9e=tCh#O+7GA;99{cdSdk z&W5e~?Ovz);rL0@*PDN;;4vlNFHh+;udP4M>VF4>57)y0%GwSM$c?l(T?~yZ zoCfDd+1ONM@(&dZdHEw!Z}FmCbBBx6VdZ4{uMcv8cIAbE^!w(Qwq)?`#~l<<*}*pP zSPvZEySCD(%lO2g=W(_)Z!%d!A_AZ0j0cfF_2OI_c}m$Axfw1Kn`0;R()IZxMLK+? zpV9YB5rf6mzX&e;@H+Yn6trP`WQ~zOM7i{fGeB!l`OTcMsMKm`#lZtA zmQRbHOlq+$Ju`Tp=n`BymU=zh?%nNQ3$4IYj$tz69oyp;tT6)NGC)fmFw5QNN%b3z z6}vRal6=6a&~ulwVuwrr$ybo8E2y>^_-4qlpw0CtX+TX?^ZW`EKt}7MtA6}!g&(z| znzH9Wz6vb0MCV-R@eckWXj4w*a(q{aP|lSv#-L zSomkh#veJWGr^6QSL%Nny5>wx{M57j`PQF-o6wx^a@%{CAK$Ku)+ebkH=-y-Rs zV1kKZH_^R%b!hb(l(6WFKmBdC@gUWDqs&)7TV?<{&$u)5#?&w!zy3DOve*7>*?dq) zo3Gv4DgaSWuOx_NyRq7H=uf<{af{f}i>uZd!jxmZ{R$2(8k9Ibc`rd~uh+WNGUD2m zCh8>k+U^ZzJ@STS;>lvsML0psU}V+BPkV*V7*3{HFbf<&ExpbyF^bixfh6gCc}>OT z0GMWS@H<^JBFFDD3z213?5Ey!v<`v*7&`GM4Cdlgg)>JOV}rj>RJhIm8|{YTd^A<-&*P#f+VgT0U=8)W1nP>K6pS0af1#5^W1Y25gAaLT9>{m||ttBmb4p z!-V0%uKX=i-uLMx2aXT!D$Nhk_7e48|LEo>l=mipS)yzD9p@(^aoPpg1R&HIp)!}0 z31|2{BST6`XFl%Wu%pM~M9H?fz{BNes`|E|pKGbISdSzHdU|Z75e|3pCV?qoM^UGs zy)}-R_Y+Levvs{j%!5*|%Cti=dojk@Us8?RiDJCA(#aB;_O-(7c0r{Hb&{V#)rI)j zew#Lx?g%7bAULc;egPp79YXv6Az;Ca?sv#dE6LkHeV?}{_se>g?kzb$#}!4EC?ya_ zruS?0xNI9$1z&y_RMVUaf+r|(&%qt^fD}6>98DoG=b{A9IS+fdNq#HFmiXelpLK6e zhSL8=Cu2e9lRlD?qS>|fc~%xzbDCN%F=^LrUce12PN@UySpfhj;7)Y%VF$00SV!ZH z$MNn#w1Ljcl_(K2=VL~l(2rYQs~@YBF%DOP06eg4yl{$pwb|FviFuOh@O6D2-IBMHQPg5c1I1y1V_1o+Aa2^RU&G@Rsj_Cb5N7s zN0ekej2oFDO~(GUFip#W zvlY_2>TvbtwuKKp-U@`fhoogbgz9L;`)46PO@M_~w-1kg0hIpC_LV^%iq!OLI?) z{TQWXT^z=eA&{t227ELRfXD|%z=79_w6-he<>by(Z9p$9ga2ApBRqMhRjF0{@791z z-?Am0X!XM2GoEBt?6@G)c;;J6N6vV*TtbPNo%`})k%l2(;^2yf?2#;xr;hs5 z!x6Ok`H2!}3eT|@kWbk*?eeq5v31Jjj8Dy+UGq$b=<3JkbFC3A`4aN$UL;KPMsLpq;E75IPJO}@6tO;_&#aE?yj!y{z5i;OV|`HY zxD;rww`bIuv1pWZA?S?W-LKb4Ze=a4GrUc=7*W#{ai#?nW-f?7LR8 z#ZZs3i(y>(UlB5PcB6L{^iC8bW)5!$G&-ee7gW0;Z!CS#hbY?~pqlU>=I%(W>EEKjS$t@leSr_txk;HkNEO~8 zidL_ZS?$O|t+Jk~w`EVIx`ZplurflgdHB&)=^_b)cg|A#ec^Ss{h}IMvRw$k9=~nU zw8rc1Yge;qQCP|9Rr}`Hz05*g`-wx;3Hg^^FF&}5OJeZ`wtlr0E~ z7=}|rqbwb$+s}~e{Nqa;$5+-$zeiByc09-D{An5)2SGXI!3J>znDtPgQcMS8u;2`b zYk~_n{nvjRm3J?) z+U*=_)Klk{dcazIk{;k&ZjsNrq-Cjd&oxs*n>SHT^H17|IaZGr-Yw+~4nRW&AP=fL zp5k;SVJusg2u8Ta9-e*XJ)67sp{K9;oDA7k0CJ}K#39vwHsqIMoTG`E$#c!c?2g)& zjwmyy1nNE~QZAZY7v@tN!5W-ZJ9c3Ukh;iWlJlM?Vhw-uC;B+~o6b%}!ThS!SG6ar z>}@%4%J#cW2PQ%3k36fY*zEGa-?$IhVvK2Dz}4j9fr+d| z(x*ZTEWbcDTZ|w1=+C=@x*c&k1*9I4BRSo|gN>fJn=iqoSHZVYc#e<>Q2iy4l9MOi zi$0X6iV2w$h~r=IDPM<Rjh_i>rRX*8U?VLftC)rP1eILavh8cHu-3ErWP~1Q4iqh^K#7x@4ZTjk*g?(~v@>BU58u*S&Sn^e zyM9}Im&}v zyApX{!SgI(IrxER&j=IZf?P;A-n=vnk{ar`A2OjNjMYO8Us8H+x%5rM%o{ApG<*n% zsRSz!BdOXX1x#lyDzp;fXj1N_449~oFfR2jxPA){FAOx17Wu_s@sz8yDg(y{VU$$=k=IdO4})!FqlrDt$*8C!$a0 zH;)Zo%4W=br2Uvua-5u)v%Yk`nI7E*ReD6lve#@whz#Rzm^&6=(qCs`b9~!XdlL93 zO@&*Nhf*Xhm6b=+e<2CpE&2@#W5Wddxioq+L;AhxwNZwQ>yl654b0}1l_a->Y7t^u zeNF^-p2YpVQAT%0!h*l!oY5;va`5OSHGma5^u`+h8_y}Ox^1k9`!-!A&}w*BFl<8> zvszR;)*ziMMCOpUB~0r-`&6%9i5$P$2_%lgG;(@a6@k`C1A?L3UWQ=`D8>|Rd#Nbiu0o8#MKn4ujAQ>=Ok$6v2u^xJFK)+#*2YY|MIJar7 ztNk%qGoy(x3wN)`;y*K3JLr+)i%ee~wOQ8S^%)UJf=FY;6G9$A>8=v6K^usKCjj)= z-pR3Y&?X)Vd;m;Z^8WRk@ms~i;O>T>&uxpI7yle3|8nA#*!299#b34IvoV7SR6s1; z)!L!ULVVDhQxC(|i=c;W(oD(xL9c(bG>q;^!@_&oc3VXctK(iiR%iJd<@!)_>~bxc zVf<1;^39gxm%`dhmm{_te<;b-IhJ@6!GP81!_&?-E+eS+J(rOj!NEK>%` zyLK(mb61U9ew5S6*nYCZh~c#yBnh|$=Hh^naAP+eoPsmQx&_s^<;&Eg{cFCy;S_G1 zz7&;Itx+wqoe)KCzo=b|YH781ph4=h5QX!b>t(^ag^-q1-Bhs|5CR$71SJKGUM!5I z1Y7uW2FLJSd2>6WC!cdl=Fn4Cqpi)-@{tTt3v%Yqk8Gx_CE+jIEuS5z7Z5lNY$4$C zi0rKMyN;~sbUBSb?{>e@=&w+&7Wqe9oK(!-$+)23sA=Ci$KC!P0!=NRB!M)dn5@E- zA<^Yy`Y;8=TNu@CX9x*?2E^#6cMm3yt=)idLUYuoH|NEU8YsOeHAWlL%pcN{L}oEp z48}5;HP|@bd-lyWK1dCQxDj@@5ySjBKE=57=ks9Afo4cm7m?%UrNp4;O?9uNKZN*jv3@=*m>o7;#tl+<{-o8<~@1kCqR&@ITfu=!fdymYBkXdkFyZ(*CR1M{J^(t zV`d}8UH=?CN*~M9&nwxtp+!+Ul+2#`qJsAw&%i;Q@S}r!>YD7VI%fTY>5C_EKp~Yn zN+t0*7nI2?&`HE@NZVIg3QZ_~_~RZ42Lb1ApfX&l{*(K9O4EVJ^X!a(L&Iuj@Bcb~ zf%;E&oYqJE`joK-x==~InfYP?7BE^-C})jIB=U9A#zrnR={R&kPSHn)+wp?Mx2*5S z$n&yD$>QXPx>BEpHiF%IL+C0y8=Ct(g;AcUmEKKHq60?G2erXx#b~!aTKA;Dge(IA zZ9(o)a^Wl|$y6x12fJuS-g9L6t?s=$`zb0J?3~fL+jCV9zSOu-okB)&i{K|? zba&0Dee!=l1;q;FYh6?vkdA9uB)$scjTDH>D0%rOeiATLr27@N04(FOarA$a+8h1}x;FR|mMU0F>bDq^j^|OPVBE zj)ft2l>J%I(JzB1Ug}f%_u#sh8}LS%7OWozvgy)i`99rN14Cg$KL@MbU9oa&L#8Z| z7OH-hn>E#HNmF0iCvLbg+wQw$2&P02zpzUF?tf`fxNg_Yp1_$dY7}+M5*|e{$U*w_ z7CugCSu8s4`dbl-0Dtse<>YUzw$6QBsfai~tz7^Avw0LdL1dpYoD`Z(;HUQ3mxc71 zJ(c29Tq0Ogj-bsY`s1mKXJq#os{sZ27nh2sU!KjzJp>zan+nX#E#x#2H zV)I}Lzp|dtnCSzZC%dcFCXZhX@QLn3XL=FV%_CwU_Q{bQk8X2|uxh~@wiLtYohqH& z4@4&6!kW}ll1RHJUy4ngQ(k=3tixZLX`P#vH%^zJj0ea#4t&C6FomU4C%>v5e8r@ft_rMk(3HuC7qh@yESgq?MOS@TTdpUmc8 zXMN+vO)NZ=3F(qtkU-yV&{9R8E$zHq2n$RK6Vg!MvHnqTK z?T+CCX6CD=znDLlOd0s=u&RIDsj6(hkPe~8kK;wL!CT8Zdd7eQNfbLhzB0PIm%Wy^ z=_+z6nGiZO|3Rj4=(jnG|BFJQf)fLyQ~VUXdW$|_^G zxA2WTMc`Lh?~Zrs)p~PsI86AyK%Z-4=SSJMz!**dt(=}UbDJ8{H6Xn-cA4?wdw+}S zC!S4XplmfROgBEeV(T4Q&;bCr#^wEq`-MzY+|<8*^Y{Sq4kaNDVFPC95A(5dhsJcT zVyDa=3k3nw>{hODuGY$YOV8hhY91gd(jc4~-ufSWU;OIcI~uhM+w)bE22!`>zUCee z5$(p`7gdaYrCF(`uO`YJ4)iLBj-dUj?}|5H-{CE1W}Y}S^aQ7d>PQqiq)3E6b}P{~ z1q=7tfM$Vx10J*VCkYHGK9C=b1{?ZvT*qIuo9T=f)D3zw)E&&b7K}>8h#sS|r`|cn zk*=*0?eoeib#Ee=_d_J6L}V0s^y}x|ADa-j)weZfxr84u>W>1WwJN?+kiOP@%6=x) zm+^A)ajNm8Qw-$sxbF=67Qub=v56quu_o4HBKAa#H+j=L7TkJiMpH`?aVahtDCTEM z0c~hM=aCi3acD{dHG-YI#7_!+634dqq-$C)?l)=t6g6l}n6E<*`(?G=ix$T#_r0m|Xjc#34HRoN*C)LaiJMmE^<`*D zbFtR&AK|#3~9U@wtS_MN8>nNvN-ud+7X?#9xo0Phg*}YfrkNx|KqEbJ5KP zqp}JwPc1&TQKzc*Jlk$~gg=A`N#^fr z50iJNG})Mm&Rkc5DVb;;CCeROvwZ%+!@~m1rDXy%5QgMINCc+{TDM$ury~b7#(J*S zmN7d}-^b1(o?~-F||sD-0VyJy(G3FFPWO2TRP&ShH0&)jR1TH`OFh@*B}p<{Wzl>1x%^Mu zJN3&==cUEN>zwz7v?>IrhH5xBP=+yn&_K|3t`3TZM3h#`{hqQZ5~tU3N_0ol?QSZ=Mw+sCgV%_ zs53rN=)>ZyFZm)u12r+|eILe(##uziHpYAMvyDdnsE>N9GhXb!cgj)RK)@pA#cLFt z0!-!p=&9!X*F6a>5bB4BwRv2RX-=#nF22p*MdQPEi+_bM$31tHda-BD_rKgxPXzBO zEO#B1pmtHHwoKL!zIxvMpTUsLRnx0jjB!*aibH8j2N3%LId&rotozWbwmK}gfz33JcGbmQhVo65b6-jn5_a7ooA1&lvWv*0x6%!6MbuR)gYGoO!W$JVy zYN{L6gttLgU{I9;MSTiWQq(7(1A?yaiDd&Vd^xTxLo6IV3#}8(?DOzAa9|-;Sfz8$ zFY(2o=5#|DZyU1xXNx9RLzK)aZ<+#iSzJNduV;k0s9gKsTO3xh+Q+(GJ@DhcU$5(l3C7eWD)`=!@Gu=J=ko2EA-;|h5kc8 z15?}5i%+P2RfRK#Q%{$KI;F8Rv_JA}I7~?k!Po@3eAa42_U`mI&vbC$KxiOr~**OLOI*weJW>vE+ty9EgBI|kar%&}t_ zmTW3Y93Lmy8spPT5XYfOP!;YMasJx6cJ}#kzUG4oie|>hvzSj54Y6R`y1_)`+g-pE zXOHnO^oIJv3!xUIV5uUd^_GWe48aD}%p!@2YVpHJc9mV4J=2E)1+vB^Y?f+auZuG ze8W7Us2iXV|cB+#d9X}eE;;EHnrmMkjHkp0Iy@H=0?Eq@P3%Z zOVVKiTE%^8+JeVKadh00P34?);zv>iSS|Ao4(z9X0Bs{r`L^71T?=eoY1 zV+VULHFQe-AajG9TXN?|kq6I+-hWT~-O%36MVD(A!{M9zVf%rajMO)|sEdq>e}D4< z`0HvA>x<#(pSR&?!VtRR1!tQZGox{84!#BM0hn)64U=ZJ8kBvLk*2o?>V^_SvR)d5 zGt;+DL&Uu#0}>PeA+W?8E|*mY4I;?E5R7S$=@Kw=lY^@7AOAPHV^;qf2ZrO~VT}j* zj_-tpkDW|dNYaU3CoE*F;D^@)u^*fen+yHoOnWGfY5q^B@?A_ws*mv7vtM32@|l96 zwU+C>_v?59b+QbU&7jR2^G1Te7oCk z0A~4BAE$~ntyXqp^Ug6wThBn7M#jjNzE4&@`InnXu@Pk%L{?}7-FAEOw_j0v(`67& z26LYhn1xAHS-eSEv}#N|a(w}K*8=^_nX#!ky;TiHMZ+a*nOxF;pzhtEVw$!1_VoFGG%K#d8*G zDJ?S*cAB~GEeD>ZJoo7rerfM5%iaB|b+)YTZGvDryU z4-I~S^bgjtHqxB?oQ^ylJLSt(<`UQoWqj3z6Gg@xK3+6UqK zrTnMB7)JDC_OBLay3ohJF1&{7hleG!yy2<>j7N(KJFRw8bRLc?Wa$zF;IS@gK<`$8 zGsA>~7@)5BBkfMJH~yXvT)jrzOOO{XbtMpfe#Vch8wr-34p4K8HKIjgvpq|*pB2U0 zUVCqkO_3&mKzVy2vz`n19zq!mI^hwMn;hbh#S<~4bifSinT6lwBJ~j8KLT_A4sRMV zOQo30l~BoAYfW2IrQEu0=)O1a<BRhhdY-CMNZmIlZX`;}*6daRv96{RZMXuR&Cdu+&2Kbg<&2NO*=6sq zTH=5ZibpT%+oxEa+IM$8?^Isi6YDeK`3S+-ateT1>4Nz_)m8`wD4v>;Xi_x zvxXel!aBO-&-=&QS2@4n4Rc@X)-Te-Jcbb-9BVg1EJ^i5@r)ImiJRV6=&QvjabSye zk>liugAj*vJ}8WSo5D23@tfo1#wD`1usLCD1|XhBG0Jpif?!k)oRcz)@)8g_ZIpYo z)0HpSrgy-+3g}=`*eQ{l5)hYL;jJ(kjHeCS_((P@Cd4W$hq$DYqWNukjChgUb!M)= z&pSi$Zb#sIx_%QxE9C3xD#8KPMCV~^K{S$_Q zMSdB4@yf9l05iYfTpjFY-(NQcS6eG3Qo%3tqV0~rv+CwnoD5>89lUxB7vN2-nC~oUn>M_&V(JCagUbN_LrkhJLzP20PAnEyN*e ze#$NtxE8PL>;kAX`Fb@rC=0SFkM@j(U7YzwZV%5cnI9{CboI&AistL-V0(Pcyt0DU}zA5^9Bw z8{2-rUzGP~S$A4`mSr@;NuxPsOga-fcw{P&yEXON7~BoUo!mnJ(EDHc9wf7}re!j-zbK&y%-#22XAMV`WtEMVY=B zh5N14D1)xulNW76l5;K_^dZ40VT)OAOs;rj$kVM_Q-c=dHkvY~=2WJ#`Di@%(@Cv+ z*{oyc&jN<*F9|1-s~`6C@5+rbYk55?&V5}jra2KHRUhqsuC7%Vd(9DQd#*>!kYkGM0cKe4_Y! zo!##|-cTC0wZs)?`d$uHU;VlF;%*rgd%T>NZ5rgFW-zbiSHb5iDK_~EyH0(U!y8O^kxx6Q{qSbb=mnpap*dxzQ2NqPN8e5# zmmGWKV_%~1Dw0rj64P^DNvWY~zIu%P6m5uVo<91)c73A%`;1n^hppf^Wq}gaou5ft zZd%}G==0NLw<}v0UZ)?o2V#+@7X5>63YOz|#uL0)7!q*{!*$6RV!j*xoI!KkcDYYYr^U*~+&lMpK1TW;)}bMec9uP(>) zdGLEj2*2#Qfpx^`q`aJDfs#_Fn2t+{Hzyfy?ubG9FkxM2vEGBI_%NC1 zsiZNGn-bOwAq$b+CZljY>Z1p8dGBX=vtBZ9#Gi^OYt%}h8k z3BniS>v5Mjl%x*WaT=i)*$(8=re~k)T8*V>OG^ZOQsUwZ0&^-b?oS6Q=M{vX z)RArPA7^ZeCn2~}%on?qTthTG-?Rkaxo6jPr3dIGhyx@o4+CoH);byj$ay{zoBH#R zFZ~fMcOfFod7Zd4@1>BF!IS*o(aPSCR_k7CAI z1D4^nomOgaz5U=e&(hp+H7WJuzeKY=Z>nJguR$UhCsT|?9JZ<6m68b0(2=G}qn(o| zrD)lA_U?fznH%rAy=z*wJU90H*LyP=GprK5t5RUG?P^4RcYX%99Y5XpL%xsp;lX({ zP=WS8Rfe)j{@`Rm1Qz^T5E?whY?|ap#%2k~%i$`*h7rQmIxFVsZow7yFVN$x@!E}2 zQjK39aYjg+Mi;Yu=jLinH-0K;7?yoBq~Auu)LYMvCOMYfbep2GIV#|2?m>~n`Lo2y zlI27Cl@Kk->z;_uTG<6#lW>Fpr4v9jU0TL#j&bvTvdu z0|_1M8ti{|3fOL1yI8#IESy1N@`dC$<4S$He88Es-_n@-qQGQ@R?fEsX#pA8;1YCF z9+Kwf&E<8^C_+VECe4Pp)N5_2IIjR9*z9Q@j&mWhVxRfje^bAAy#Ddkr1NW9zH;a1 zV!p0Q6P8bVtWj>EMs^lUBT8NU4cekUH#brj4n(CDzFKPq_5wB(PP|tudOFWn&Zzc<~F~! zrrXx^$)=kciy2$DMCS3Zdbve_QHF&}^QrI9`!2*dne3$K?rFrF$5K}RIyZDD9!&d1{S>VkTa|h!`K%84ES@JvHaM2Rz}MaL zC}6oJP`iXD$~!OhuJTR=5JP^`s8F8^62<@6Xfhp|in17v`XioFNP6N9ceAbxa@f(8 zusN6&q`dR9D@i)`)cq&*1np<~WV7N_)^Ina&A&K0!p((ZP*EwSdK);}km*zXQkN7f zvfHkvL;6=(9Veg8F9-Z!tuPlY3CLW3F6hGT2Iy~1Vtidc1x@&>i-MmXJ(!fZ15QgM zzhy%WAd9j$dEtzhbCg%~N+d8h)_qdkXLGtdGo-`_njW9;2kD@vw#eF;c7`lm6nY;G z7p8ri)Mq?PyC27iL)R zCC{8>E=h~30?Wq>&YA!0w%j)bnQJ;Bz8Lj{hgY!ehS`rTUXMV5knGSawqO3QS9zi< z*4iPfljA!nL*A(JUXw-ox4v#5&V{p+W@}2F2aFUqC*R-kkoTG+8D~QWPSZLE-95b@ zCgHkEK}0w#_Y)V)e5{s-%q(y7gw|at=6+lAv<`!9u%$mdr#>o+Svka z$IU0V;AN}dSo<9@4qQY2n*wS}Fk2YqEf#lAOwGl*!Y~-IQ=qV~>|b>`t^HTF@`<-q zL&9Px(+M`2gfQoY=IH37dTM=)Ao%!HOBlVedGukLlF6l{@HO`E3`C22i-HWR+_r}F zf<#bf2^Vc1Ib)U+EQS%+clTe^%t#M>Cyes5E!h>W9J>2OmPf$;yGkN*UiL6xF#OP4 zgIq=JW%3m-=N((EZ@V0J8x5P-dHBc+N&^%79QZWA<G+~ zEk*>YN-RAM)#l1*WaUPB%Lf|GTaB=Pddz0yuKgc%i)Msi$H$};kI=#S6 z?jyqx>o#6=#N8pvX%jH|_|u^;?&uqAGtaFPfA0kK(1{mHs0zN)ZK)4y0Qx2E33e0z z5h!ACIi}xT!2(ysO>~`q_-u>9N0>^8ycEf|5fDJu(+%s>Cpp%s)7_$A8OS+p&MC{H zg3sJX{MB(6y^yee{(Abf*7KA`*u^oUDESqu#`$exVRXtsm>5z7M2! zr{XM9bWmlru+1~J)dS|sT=qyG-cI=JAC&;hSW%v~j`rqEVY!rGT3_zF@vVzSA97uV zUm~%~3VbZWt);mzUYJG+VT6KAc>WIp8et&h2Zz}}GhE)iL4Zgx>iQfwGMygPv*t_m_5^t=&&%1mtiFZItblRW6XncBsc)^6tan~D z88qrd>~#SU1db{1gMsc=l{G{*An+9yvYypButYT8bhi)mAZ;DRyBNo z{2{PI%e52nj;(m6<>I%-;m9AAJDgV^qY3tZ*Y{2R_x&sk)ymwb$={6@ffpi&lDtCi zg~EOF$V~zExmR7(9%$Y@8#a{+sorD@CZHjnDO-JISLQqEeR5`VUiH=GBXxQ)U*AGWvixlNA|Om%;Gpco4HsxL?suN zyP$^M-QAq-wnQv2PIGH8bKashHhw}*@cF*?WO6Fw@)OHDmx*{|ufGJz!WV&ZK8y7V zT4mSW@p2u(mR6kVFQdTWp-|AOck-tp$wW4xSFclVkyC(*TIcp-|A*_BAOX}3|8;_L z=vxqsqXQHCdTv3DUM~8t>GiA6$mnQ!{-Jnsy(L=v#(nz;R7GrW#L=pFOCm@Ar%=Ai%s|mKwbItSr6FqHBr;Pi*|W8d^7zJo~-7(w2DTp&pRu z&4Ds56$fO_9XBN((;`t#155iH=l43!3WT?(2%!*Xkp!Rxd4uaH{^Kq2R0pShy5;Gwp=fb4EwBo2-p?Ed&+@-yRiQ|(`r(`WBC7-i~{ zZOGMjU48o=aAC>tZg|X6%6Cb4FfeB45w?#_#5DSffqwNzCTPvhW~?b2>z#Kr+P!NEXijbCVL=#Zm*c zJ#ar=J`gRtSFvmv@32Ut_dkVsTx4Zjh?a-TLjnmwAZxIHk}YL~h5Nh?X^joBdZK z`>)0OA}ayYHV57MQ_+@EAc6nqaG@gQ1~24IVd%6aOvrk}-u9OZM+L{N|8Su@cqF?Z znk1%61}_C)3=y|;39eX%0_4$fblvOL&fvC_edv8+m20JED4VJud*W(LX*eVvTqtA4}KyPBC#+b(4;ol*piX3V@PMdya!690r#Ty|Q zl69$?c?P^)HLTXM3lK91M>81qU@W(UA9{eeeq})@;2PO=I2)RE1$V!E(DpLL_fpSS zEtzI(yAMxMQTjZXSv1*Y;Y~r$mWSoRbsH)x8t?&=a&TyEosos8qJAG(c*JndgQm(3 z;^g};eRnmACzyGEQ&cQmWsEDB{AdP0!IOrqY!LUjfa&#%fU@BpRR8euJiHpBTaNJ^ zlw&Skl{@^Eq@+evcf{zFq(epELhB@Q=Pjc50HTENhuj6iBIQ2}WC2iy-vsH|U{3$a zJ)Aye5>WS4(8>D5Uz6W>#;@A)k?8zz21O0GTu>dK|ATRvrke)^h`Bq{2I{`Zc;f%g zIPwuC;n0dQk(c4bn*Ruxvs`u~v}D{>BqVjEcyleJ0WR5Dg<+_pGRpI45)SDhE#9fTi4rLXL26eM= zs14TAT4qqTG-+EckT~O(3$JsndvDYeVfVnKJqM|Ap29Hv)bkUwVqU+^`)(t^L97Ds zzMP|YB?;=oWeA6FBHgQ(QM}}}5$}BuAX#<|8KrS96K6BICe`u+weW-1wdpJUVK5`k z9VIlp9a2aY5{gRMf<$klW#Q%hDNLBX?X}uJ&gJmr)8OE0nYPB~-!|UBTULBNG@Ib< zXWCPy+I}KP!d5!iJJB)y%Z?3LNZ2q!8a`jH^YB8P!X@r?wQJK@Ei3i%*gAIyyWMki z65<)+)vXuAN-?Rw5aKag;3Swc$GeSN%J(=EhCxaNL85rpBX;)bKjNg$)EHmYSy>7r z9eDekNL(9!F5+}h%obz}$H|M!XUn$!*!xqz)W0n-Tu&6XXhVV8#u2a+U_^IRq+iB| zDnk(z8hEOQ7f}(j&)eiK7yc30eU(p5fa+yC`Fk_qy41Pdf-ehytuZhM?yUt{cb!fK znuJ=)Y+NQ|vbVu25BgeW+(3jV@u)7#t!^9GEu0csC1bud7Qwx`!s{tJu{Jb?Nx!;t z!Y*taz4vQbKbUW@*{5%M4^_*qypaj6^1a!W1gZv^6@ z%T9l*7e-z`-koF|RUYk8ESJbdyej(r!*hhqst!*_>ao^PskVvB=&v4d&e@znzW$y) zo)|cj7vRJrFN@KR`8%*UAj;5Xs{&B$uDUFP6J_0{)jPi~6fY|4m%Eu@*L9ml-Q}{0 z?!QhqyA@}jw8m!+0VLlMp|D=v=AH!k4bqDZdYlVJa61++5TZQod1{53dIm>}rR>N> zjInexV5PWNwAf~!^T*x^dfl$`tB_jDg;Z-tp9QCb(E<{nL(RJk%Ik+9u|1T^)Soem zE6*bYoBt6|xGv@tCTupxuPSp}cIqk-%KqPzq4yhK!TmHDKRjVKF2bT z3C19}`WHL-e}?DdP>rqSLyNEPA)|JsE+Ez{)yS#9bjt*X24tyv=407@SC6!zp@pFP z^Q>IDzpY!{gs=SYok=e%gWDy+9w|ux#tnEF-r>PrsFd(98nf<&6SCgxVVuC?>|y$$ z{GxFA0nrbwA{K`N%g$>3H67ne|A2u-GWshGPpk~i8B>kkYG(5^1fr$gIEXf`#=Wat zIH+XZP7Ifw2O35R%~pTOISA-{bQWkS&@6d}e1VSRkt`I&M4_d7Va+5bWEBVWrUz)= zL-t2=ASyEpOb!{FQ7?jGo-(4|Uuh*)q&B3fA|@%U-E`HEytsg$eK0iqN$YmF2<;VAE0tz{)-BOX>g7s5U z;hbhJR#e(=|--u=k4x(gwI`K>C&BTvm=OK zk&*A-_VT(0MM5Yu_8vU3fryS{tlo|ja2huv47dXHr{2Bta0K*&gsLMuLcnPKjW=M_Po*ua^dCb%}2YNW)RUTRLDB)sDDsa7i<>&_>EYtm{UVX^66cV zO$wF?=h>%B=@0j!HH`bl*?l3zP#B)V4Oqbt94pIaxTjq)0|7PoK+91Yh*71 z8JKs>64J7NMl;rG$GyCI*jW;AE9S7}=YHA*|Icr`G{UE^AE~u6I0A&rqtY`m(+2cZ zG;r zHN~|&3h+&hSvZ!;E&U~-`m(y+&z`pz@W+ zZhoUrdj#BY*go3l|KQa-rSL^MLf?A6a0mbDI*6kHOaxr+jl#P)f}0ZJ z+N~)@m}3ZijOk2>21kE_JGo%zyi7HFMRz}Z>|SE4J4brdzMrGx@1bA_Ev%QW zOLFIod<_aTT~5WGfmnVac;`cOHw!5&EqaM;7;+68+FJ`q(jsrF?h16awZmUD$dF^n zwBtXAHYz9=2x=&Mr_D$m;+x~+5_n^b!5mP^K9~83UB8*Tw&OV8MDx2|)%f52 z2%HRp9F?3^q7ekEsLODp``m%Zn(S!*@lJUZLg<&2*!0Ri-P>aKc7M3EPI$Y(JCnV& zKdTu;wPj=Dqf8yy9Il{4aCSYAni3Ho1!Mr+pyzKH3vA)Lq`uR_Mih4{RfJdmI8wLU zrPBdWP9JRZ%OW)(^&q;&9M4F3K!7jd?k*)Jb26xxq==+qbDyU+%r^moDp~xScJR72 zz8h|;(yxX{)?v)fRO6TMdKvMEg!S4!I840~8oXT|4KO+O&Ych}R6Kjq$BnW$8@P z8O)(uFZu!vpd(G|uXdqwlQW_4q>1IV9C^d>X5D{adx=X+A6ZE8rw1^V3`f85gMytl zNC4}me29sKMn8nkLRYk=p34WY?e{bxPrk&pYMU457Y0{QOE{*%bo}P?v&)1D@5*h- z3LljfW?zi$gb|RSf#%cC#9f^Dbr2ouybC0b8Xf?UMyuu2>qu8T6(Uz3Sq#+j$m%@W zpG~J`=M7Su(R^8`@WsL3W@=0RL<6<4GnZBV4X=!XCBm9WMb9qj>)k67xUpS5GJVGn zyi9~xh@xyCnGCcwy_?Q4ZEE;6_u$=!msu|phne_3HVo^2W8EQ2Ox#cIb{T&g6~`Ig z#>8s}%743ab>nI%>C@CCI%Ax9#ccTQox_m2Di7%MZ=ul5T^dQXc(%vCf{mVq=h-Hn z5m8BKEJVN0wm74FbEsv!k{5C728zR6FM#7;FNk#sRQ4Cy94v>miZ+jzuR@kbgWNoQ zj9ZjvcxRMnsxwyOxFwfW{YSWZXv0_l!n2DkbZgBdG;E>&#SgwLwM9=qon12SHp#Um z9f|>~3X<`(KtTrulUHGqH_1JYx*XOwrFcb+pdF6H>-^S!aaJ>PXDS<<1=@PPyN2V( zTk8V={hwo2Dhb-pG;Adkk{WqYNfbXRC}(J@LTP!EgfplC%$EpJ95-`eOx92#?Zp)H z7+YBuR$g~bStGD=BZ&AlQ@T!YkUw9{)Ng}QP27|qS!~up6U$R+iTgSgWY{6DcG17V zKEY0$;cp+-Pt{}i&rX)mG*g#vZgNEt+!%V7E->1J5eF`ZcEA{PE8Vh|BbKbz$f~i@ zZ|Jz&>6<=gcnYLN4%xqSdeyzrPl*v?NC@%9ienhI`Tq7I1nEY4A#y8A;OOrQC>nzP(Hje@W4zx>G&pi%nk9|1Aq;Q@pNAqu@5 zH%77T$8}kjIOFM1hdOt*&CCxL7_Mu-2ex`gi;E6;yXhspNw2bkzxQaRPk3uGK8qm0 zF(U!JPUJF2q@P0lS5`Zws`evkmhI;4`5d$bQCn2QJroNox z>#|OX;0a%>{J`6Q+6tSsaau@EPp90X)Tp4bw6&E|yYA1JSm@DZ1!i;`k^*TwX6M3$ zdZQNmK`Q9PR*9AmI|^_n4^h|_$AW+kg$-qsWr<-X)pM?7or=I-fvHa~dXO+Gn2QoD zYNNS6x{IvtAYxV>?G*Dz#b(wj{Y0&2+3)h*UZcHm{@%Kalc^YOX;(jx*5zZO^_Snr zRX2#|K_3UPGLSp4ObA@6f!s=Emf9m5Zq#Z1)*0o2m&~<4{JY|t>xs2WL_X4&D0%r? zOGdHQJ4;EQqOfU^tqicOI}k$G)HmA*UolCjp_OkPB!dGv zlq8381w!r?drC#_qTA-KCVLCF?0or}eI8Lw_|tR|OLGb{*{?0>vH$60Pr!mgxG_cl zQJ3q&XvhFCNU)*v-kxTa0%*bq0I;X9ab~tjyVR1sSK3Bp`Q0 zGAUM~-HNp_RZnpzZ-=9h?&=(SKWrIH6Jmsw453AtMs`Uu3{uAa1>YA@w%pd$8MF~@ zL%wkbXl2`07xA$1AemO*aZkAs+?S$PX(iCfK?RORpwU)*2bPRr#29R@- zDZ?&0*xV^ePO37Wi#)CB_&QiO?Pm))mOSy6du{t;Aw^d5`1e?*Ayd&AtuBvYg|bo3 zBr+;Z13=RyxkmY=67;zOYi>sUODcG$ybhe@bLZh4&-zQ@2FNLHV;qIUH(#0MrMdA& zrllFnN~tA&+N6__t0Z!Gsu&S;2-b)6b-@NVTI+i^C=aj8!h5Jflxm^Hx|urWIQh?O z6mAgn=`<1Ha`UTJJ@kp~VFOKk@7p;&Z4g6BY=MBqi;ZwfM?8mLhWf;mHP|l&yfSvG7@)1 zcN2%HlKGt%T@%#@L1%O$P#yfeYOFH!!60)$dvORcMzYlPT4gSu31|&7bVhfzKrH-5s$T=q zA*FP6*84w97LY4XAwrv0$!V`yTF%@O$^V+ALken9Q4@| z4hK*j ztPv`@eY5_a8$0!)SZVj1pV9>Py1UYgw#;8^<1*7yw3!<1`~glx*}hzSc-LZ--K8<+ zHCAq-65O8>y?z@-c66I>4!p&Rx+%-_T;N`Rku{Pee-*spcpSC*V@UTcBk!e5Y519* z+1P~7x%0idAT%gr2ZA!7i-!Cl+liRsO|xtbhi~x=y<0QIf_8WXIVA}{^E%D>*E@{z zrWLpi0-OthJnq5HPDf+}h{FxwVLaN(!%b_+U{bj8l9NZRtAFaF@Q<3%8!?HO=v51= zr4e_}8jp{B3;AAEHPd6CQyGPYi48}79dJtz{W_T~Y_}4R#nTOL>x{d*J@09s?lQLX z__}gP)fLTTtRtls=uuZ0NFdI6PvComiv>fp`Z@7%|5+>tDvPX>46A>fLVdu(U^L4N zkssaY9M2JyK=?OzvJO8qUTc`iRItl@_>aKEC_PIAuit~?5bvyQ95i^JS2eSwVruq} zAnz@tc&60v=gf>6U1i_@k#qh3^Rs;3#op&O-XRP@diNyB(+#+O`rS#vQqp|^rZZhB z=C@{7ojTK9zF0n>*nu4-`gZ_wd)QyOLs?O-$c-5Or3Bek{d(6%%hUPIs}~2fX;#G= z)bJMi8g92t1k9C^<3q+xE?x>it6y`F!hRoi?^BqJNtq@WBl)L0-W!h z#(xjihhgR0aTBHs{$%3!4;bD?7X{u)ih3{Z?d$6;5zhim(@{=7Ry8&zO4lT~?IxeP zMc)F0?!+@m!tr-NjYa<}R zL96Y@hk)?R4grw{DF39jKN)$MSXM^dm2F#F@cVRm!&wpW{nBPpn|wf2!I6Lfq!uF+ z4}i+=G+aWB3%xX=-g8;f`}J*bVSaJQWoK9r5H|L#p8MQzTw+XDTU3-e@E7)vC1ljo zZmIfxd?|zWWT3bA(z&qQm&>ey%!77FhO8sz(?0^&p4b;#`ap)?#|l;_15}v?La)Vl z1?S>$Q>z?&n*p{oyTe^^>d$d69AK4pWo>4+#A$!w!6+OvBBt8qdi_IS=ScV0PRrb& zmIn0|ZkpO?6QjspB7Zu^-_t5J6^{ujht@Ug^_cwmGfIWuHVt1k80}V)$rgi*F~CQ< zqXt{H{FaKz`UWEjSwXXfAx>`X0WiuL^ z&T#368S?T1Z`*A>|Bz>ge`=Ereta|-(u69!^g{xRU41M_s=J}B8>ODRc}9DrC^41E59v=>N(4Gl->jo7- z#7{JKE^RF@y)eUVe-#U(NRDpcg9ZrHSrW|k=;bsJUFgn1 z+h^B=O*sEGvF+QnRoD$$+D$o;$n`&`-wI1Gqs!uK7no0yQVKL2d~Z)rMDU1x4a|C- z^RqO4YfIKpaQ*N6>b4o&!MXInC*1|u)fo(L?R%}3CvTq5U91g}cnC`a2c5nNk}cEs zwKA0C&K(*tGGtVJ8~U@N+;Diy>i4r28P!O!!8igMEdlL>L^i4Sc0(x!wy zc=}4X@N-saH>PV{sjj8#zdj7!{X6O7mV|)=a#aP)U(rbD&Nmx!bSiQ|t%-Rr#szk% z`tx}NSW)gF>lb>UW!L4vCYI_v!zkx5yH7y4nk=`Sf~mWw(?kXx?oQEG~)!3>)faKC^aL6t*u`+Jx#LS08= zKAl51dIc*s&Q2@Ea{bHt8eWOfeRd+Z%4X6YLYzgfJ|>7)E{X^U*EP)U@-|xPyav_? z`j8s{4@ua8Meu9Efp!x`lWzNsj${rZ=!~rJpO6SLwTk6~%%l7BA#M5jmg5EwNCGWW z!`9iErZf%H-280h)(ndpI(zCAI<0?qHKk1xpZMs}K zyZppB_O8B1WZpgzb>7aOva(MBLT3c_AEF3Y)AiXD3$8#{qeT+|4=VL6`_^3mM0sQn zL5G8(T#$$ZLe{nF7NX(R^cMy{BMeRuOh8=OD_VI zhe%I%?O#y=eb8W_rbl)kLJzhpjDoPqV&I<4A#y131X-y2U>?KrP^43+KRH)+CU2%$ z_B=435}>S;d;?$&_p`Sw*LDBw$OENvHL_Y!Y&?C@_-u=e z{sk)!uhx>Yn|3C%2QoJ$*A$`@rU-tz%6lg@RdNImgqSzMzFE6%fd@B|@SHuFV>-ZA zCD4t^b zk%s`(w^%^$z@?Zb#;ya8*Uf(aK3 z_7JG>AebqYgnpr9g5Ej#W{EANg_;`7`qfJ5y&M#)Kmkh^4adWJw(&t8TI$ZLSW5&( z7yTC?gxQ*z{y>PJJ^eNk$l7wbCYxW&B@CD7=d_Y>C2`qLqwM*7Q`z(+9+w?-hpdfO zlD2jxG@uIrikN5&4UX$^nu_h9{{XCxuQ1@?ZMSZ=6P(KC3R6^akBeO(#oVRhWI0<> z^|)ui7dKzl0FJg~b*{2?!)hFGJ4IMxnoQACgTkS~eE{Pe#)gx{)T0J*MC)`Yne-@B zUYyE~hKR_e9NIcAY|U4Aq ze9OQf+P*)V+zrl}53?2()r(=W zK;rr+vi_L61FM{wreV9eN*oMP+|tZOdnxBP0VsB_o-!fO-M2v!#sqzM#LN)^5<9XH zio`Mx>(7O)dA%vqlDRR_lpkcR-#uVx^-+%Cq2Iu}r!k z<~Jz%OI+=KyH>GbUHh$wI_ypaw5M^8; zoqK(G%PfKekUTtfKp`Kw7s|Kj(q3n~&^>pMtC3H0=lgV;Nb#kOW62bMZ>kE%hN;~= zTG%w$jyU~;ATr2jMamSvdbYKq@gEo=g)URrZ6ESROP5M-W$)W^*=)Ck z8@XOhhQoCak%w-~#%$@jD~j%ajqaDa2~1l|hg|3nsV}N;#M#S6yX& zVBxp%D*e#XZAIr-O?g_P;~_NXo@h*7BTvk`;w658e#jCa^k|Te0}(@4hL@wG>JQ%r zCIk79+ucTL>M8mWi-Yn=>&JmVN8)E5A`8oEBBo`W#cNh-%%yk=A(W6o|~dS$DqTxvJE9O#03IR87@rj5X-l# zJy@qj;Xj~`o<_KxyVH03y9B9BVAX^)_|I9d>s;oJ?7lK%de#2^ zUF)l4RU|y$?ve&$yp4Hdhc=A_)^-k1mfNKcJvw-NTLAu)XJn8W^W8XqLu_a7H7lu> z+3T0_x=Z{uS%H=Q5_5vJu7cpx^70M$Fo-0A_XZJmALBcab?^}~weAI7#1$FYuwAfBXMR7!7sB0}`5!OwB1U$8!9 z?9W3xEU3xf!3Sel+s*Afc~W(J_zO|L<$3F%;4bP0h;MUQ4$CMxcu`uKl#$=DvSPk6 zRAd(oc*pWQ2(M~=x@|cK@bzj*#TtlGZ#z*h3x}IM#YOu%jnw^>N zrdZkEoBV+bgd~LE>z;nATxkWSy+q0Dm0Sdcq@6&(nbMTcZK=Cc*?S^!Sh0}DXj>74 zFlJ|mQw$auT7t3Eo4rusclM2BeU7qnmHRnOfYb=#H4#HKgSpGw)m*QL(g$c1JeH=) z?Y>=Beu@38)Q>#BNkz9dmOOjc zDSJpe&iZwPJ&E03RGm<*|9HyQG*aD5HCfH}oh4J64?ftnZV^Y{-Cd`CpN02rgm4U| z2+MI^8!X2N|aGsCg zukzvAw{F_e*}Nf96llA_ppi)p-1|JP3aFW-DugrmM*kl!yObh|&iWeR+4& zgHC>;#oIbqPnRy8_zuWXV9)cSBvgLoZIu$mk3fp)eKhPUKxi}s70>saWfo7c*Zw02 zfd>iTl*Yex!2qsfhXc=6NC*2pmVyb)diS3T2`EVcfe&ji)&B@GU-ryv{UeaVX^kgfoRauB^}G>uP4YDc zyJnhRTjs#O70N9aG}k)X4RzYD;JGvUkH8N|IaB)IKLhkT$5(K;`TYGJbZS$|wJ=DS zada4rmfTrU2{tbNpEo4VxQLge#8%q?Ci$NkG+V$&QN+PU^!)0b1pcx&J6hMM`k1yL z@8OPs3*qS&g%&@C10XJuxh+sp5mpF}@Y8&-A0#fz=+I)G%^<}R?C&Bb;AbMaV!5gV zfB#1KDV}X>Q#Fyn3e$Iw)oFVw9-y zdtXJFGA42W$Gpse`yTh`u1EwYHjgtvEU?dOw$xb9$ih{pR!?!T1vlSgG;{pgKI-u! z;cz#WZIXWHkbs3Oi9^NAceO5^gPHYZSKPnnc~|y^h-O9~409ThDpXtJ;ynAW_{ ziTI9v^Md<)hVEL0t>%mG3A`fTQA$+}eo)8Uni>cjhGuH``kBdJ8mpx>^Y3Cc;wR>Y zXV2S=9n7~JiHJ$RmztaNYCv~Qlh#-s^g*a(L*)nL@a*V}vfS6zHmBB7_&!rN3SZky zucB{m!TA-)ToV^b_UFEO+0=vN=y#}xR{Ug0D+t4GBA>#rRDDmFVVTn?@2uS*WpWJys`NyDp1 z{ISoU&Qt+N{n9U!`a4Ob@H{D9(S8jg9cG!v5#%@*0fG5$V1SBwcHAiMf)8<93c=Wnb6Q&e(q>2U=(tVd>=b3f?qvL!^XJQ`@&3tJ}s!2{4 z&PgMk_h6x=dJ<-Tb|L=G!Z9^(1!{Qy0yS97(Zko03-d1j_M1IgJ${L4={`(ut*c!Qgi4rZT+PqunKqzz;3wM98&sgDRt0;`*ETGZL8vI^!{;Zpa;2rh0y!E zPGs+-)hp=bQl-^v4x^s7xd%SxbJuOLdbA5x}>{t+k}cbtod!{|u{&Pb>Ep4rzhTeUve@?FNnpvZ!`AGY_ zg&<)vi9%_~lR)5}1gdNP_Z&JlMbd|#@9vsFf82hV>ZM`uaw0*(i?nWUgh@%mBVWZw z2@elRZX2E8|E4-3z}_{@3vbWqc;fEh@I=XvlTt6ACSOFSZ%Ui5`J=l3^J@9b}4_>fL=l zXqBOutdM}ez~2Jejjt0uF?IIssFZ=iMD_=W)YQKkL#73sVu?O8L5kxL%P*Ovy~T0% zhMy=K)=0s9J;`|T zlZS&hM+Lc-?Co^SO&&}d1lK#s2>eFaNbiIGSB5p5*F zy~o-5lW#^qk%);Va!Kqz0_pD*pK#rE#h1Ehrvy^@M34+l189wy#NKddrcd=R`yw8% zxXYGyxSF7O!bf^M0)>>@?K5g9h^7UB<9HpWH|pX!;hiIC=W@z?!Je& zYF&7$6oG9JGGmC>yHo`9Ii7Q4vu(?7d(lu2o{;tz5b4Au<9=9cn`8KD*?Yq`5c%l;LygWeanQ0WNs+J8A>2 zc-g)$+*MI8BnZ9{m|Q-dd`s$xlpr85y4>MWab=P8ac}ucAOEmKN-!;l;l=+(*;_}o zxwh-Rv{)^jSn)uC;z2{9xce*=x8m;Z1&UjXLy+Q0p%5T2&pW@h zzIFCFXP>?H{v+ef7=ba8yiXpv@85M@FL|F(sA%AP5%eJlJ5$4yptt$4wHxGg!vUhd z(Dd4f!>`0)AXYM#o#Gq;0tjIYXRB_S` z?TbLIJ4qSDsI|a{bjDnd-HRvqe_g411-1}^Cp0Ppq$Aa_7)?$esL|?ka{OpHpdJz9 zMc3RtgVuQGR{q0`9Dp|XS=EbJYz@4}rCOHXu1DcAOY$5g#8iIf;_n0oSHILrfR5Ue zt*za;1?u&G{456=0d|#7epHUJZSIc-tm&uODR03FNBnG9adO8q>|{;0V<$!#nD0_X8&l(FJ)O9`PNu>?q=7jPQfcmA@p>W zt4)Qk1SVjk3OaPkIW=4o36Lj&Q27TJKwMz&U<9jcfR}v3pgUQ)QT*&j!m8rXC(NM= zH3Sc2OelxVOKpmyUZl$9JX*ONI7)pJpPPH|Bi<%jh`jDn=JC4&b&h_XN9E?+`TvcP zx8d`fR~u0Txw3SgG&za9>4IX4VHp;GwYIv_~mN?7LM}+v}J?lK@WV;0L{*&W;Y^;-s-VGMVu!4 zXiU?B-4|7S=5_u8R~t|J23JK_*ZlAHzt%>N@==#BkD{FOI;kQ$-Q=#v2P)d76PS_BSite z*b7tSj#BsQJ8zb>p9ees!K*3FV&j)-U)(mKH~YCd>a6cVT|P2-JagSVHA8IbhgBmn z=`dVb-2b>T!sF!>&WD$vr)>u{66Y~9>zlX~0-ji>XIDT!!2?G)OhXOw&+_+ggWt#h z6|}^e|NngsgfDg0Nr{tV6sP7&>A!#DXbiY@A%tMJf6Qz3-FTmX$l@nPq!PLl9-V%> zu9ZO5-zgbGIV{5lOu1K4nLA?T7;W=1q6|mF(tT6k1Zw`mb=H)nF;@5ZreZW6{k#q8 zvQZe3zk3o7i?yU_>J87O0cTeRDe3fdchI_Km;4xMv^-k=9(U-BWf#J4VDj@zmHSYN zCQmWR824}arvRp%Hxev3A83wbWT549d$ZP|5?N|C7F2@zK)oW#k>JPrY0YB1W_+0l z|H-y}DCdIc_xVFKHwxE#+l|x=nmNqK+<|P3J3F1My~-A5+&iJkuqzKH5FAD!7cJ^`eFCG_WOi=kzNu;*I z*eyOnATn;VvGtTmJhX(^d8?L*?)(`v*hHPcuDW@l)wDVGb-y^@*cXe{(Ti_y{A;7l0wV&SXnP~8-QY8So7Mw&Md{v1vdOV{BG+iVsBKXd~AT`a>4lslcoI) zckqCO`7z_@{t+#K{98^elF`@P>iC?~68)t&xeNHeyvb+aAqq4l#C_k`L@*t4U}NpD zpAtaxQt5Au?%rEf0A1)s9{j569yQe#k4sYan?|!@UIqP)@di zL9Qpvalyi-Bk}>?>jm=mReh&n4y}VXus(FR*tu>3&yG(yN@KaH>tPxE`phC(S%0>< zQ=a6IGV?ZQz56~K&E@Xm>Bc=lG^ACK^2!?|)R3fri}lQD-G#ecI1uki#N{WIuXchQHdor+qJcPp#2DC9 zpty{W3dQqgz#Ph;qBSgX*;l7&Ysz|_pw`MlJl;qc)|uP9|)edJL5@YDjU?I ztuiKeudq7}t?~syt}@S5+3F8^OZ+lNd&5jK9KhEMouIX@v!L8l4&t1{1Ccfzpccn>#ey6_;?hco7@Zn-<-M{|1=&+EFI+cK8U z76%&nf4Q<`vFdDyalV!=cnYaJf#}K{XUPk<)0kaoe}yN}f1$@uDXFAZF){*Huw(`0 zf5|ofk!=3YA39^qn(c(@@DNRP1OCN^ID!c3zERvH_uLoIQ8Uk(%Y3}uG*(JB78R!~ zOI0q9I2whOwXMf0AA*P#!lvb4du}STK2r+W3Zb@<^^iR8-?}x5h1L#laH6(%I@igz z_p1SOQK?t^qXtO3sa*c`GVH>PCnkg*{-el)uoCJb?@nrxjiDdRxw#5r5aclDzPKMc$m zmx6_?R*;l8?GtM5F8y#oSFiSn-pV@dt80-cj>dO@_y3n#?B7&|=*ND^DQ&qd_$qoG6G5BbmJhVN_73~!5#cne6CNlB^Lu-cXb3Lh}j->+IQ?(YBL^)~fT3NZwS=D;hT>|UBCOmUmZSU$0(9U*X z_#5NpO~$it(!fPa6x1*lvI?bZN6Sw$drOr65M~Q`1akl7ysI6%Vz7A%{2;N3 zdr;=JsLWA0CV;d<6FBTZ-yue$-MVDOnqhu0U)MLwVjjvLbeDJxSjp2=OyPkQyULAO zZX0TV!}{&$oi#lhm%XY4aS|1^gd|77C}TTrsV2wO5J)7UVU#w5a4MYQgBmDxL`d+w zp9YKeCidzvvMgHO5%%L?=vE-QORvIdB_nl*i5$hfJT#+by})1nzFDJ_AfPmbA@A_9 z#JpGXiS)eh_=iz=?UUe*TycaJz#r_$$Do}n<->dMq3==BJKhaPq}8P*H4`|sSPh!= zy~lPM>#SooKGw%qOVgXyV4sx4^zqatzr-csau(}OTT=dD-A-)=|1FXkhf=luhT33O zNQYaD$mw(Ch4`s5!s}<_8DwLQ(a+*~vp;-&7ao;FVPbC5XZMP9K_9d=5jXCf6Ro(jIH|DFsU#9mG&>dI@g zey7k2)ZuNAzNb9-4<=)+q`|u zEuV&dtI5*NPk6e8T7HZ;%fcA_>p1+!Pm|nzS{+a{rDxOme_%LAFycSX)d2$nzOvOr zr=GBFhZn=n!M_C|2hF}1{XVCWE4Gxsdp~#Er1*Ad%@0`c&7(cHkAw6y+U_*dr?#qW z9CO80IDyj-<|wOFgN!T1>}+~yLlVop3+pGPy~>6!?>`KOSuy&5vGoS+C7Sjl-3IS1 zHIYQ4QGs;6r9YgOJGIK*!N{5;+UpgI1QlsF4xD%u4-Ma_egp|e<&)TqZ>`33oIY4q z+%<2`#2fEW@foIN%$@J?1e0zSbu=bAD_f(;Mty?i=h)j?WA>+xrfi&H@4PB9{p|)S z8Wn`fnO_(h5>}0|N~zPyxF)O`blGNgNOJ3?fwo2MLxG(D^Z$un>3{rN9_bM|(s?v& zo54t7@$_N2_}ItO*rLC?=psKIUoAT=!mN@cojDGnQ2qZr4N}~RL0ffz`t`{%;GtmD zc4tvtjq=p$?arGpMj!4q$L|JJJgzZ`9tgpKVi-AF06;cus0fG=j@-Mc4V2xv2cPnH z0abL@HmN2s-tNw(PB@s^S~-bmoMLshl2_U_&8@rn&oL^;FO7}fKug)NW#!bNqBT9M zHAzPejPZq$hiqs=YPO4|WH6}ms3SPjMs~9KixHJL7oqO7yA*hJplXOK#bhr5^ww7< zg_VMwrNMa-38Y7VVOvVN?q5TjAFUZGxZdOT1 zmITGcTK*VlKYcO}*HqfsYv__A(V#g%UgbG``fL@=BIsNwa03zj@iL^XNyETz6;OYM;J#USk9!}3x+sgF1cd`D5 z(Uc{Q45SQ=g94BT{0u(RdHosouAYa1_JnPkCc1QEfz828o}6S2hUy(N6D4ZHhw1p` zas9@-R~vgSaLwn}!$w*3Qt4?O``ONJLB3_9Qr(NqUB5Ny$z)!h8Se)8EgHuc4|3vi z{s2Yl=J9m=JaN_0&(u|YX<(M}QUW8LgZdlpTCmmSeqA$DoCVpe$R^q5CN%G5eLX@a z2^z5v*NKquV&Y$t9=!t#KXPkXGA@&|UsGmP3sx}{viH_EP;-T6+puhy_@dk1yXS7| z%-1-JD+2S(Y5~I4hgVd>Du+EtZnvMPFVw2|ue}%ASOs)gqayDgVbNl& z7uE*~!}&NyTIS6TX>&3vA#UEDcA%xyVkG-;*SVWJo*f8}HCK|=drAlHWkq9*H5=$z z42?8ctnxZl8GpD??4*?XBGy5PlSLXs^- z%+|}!&T3qZd6!hO_y?Vr0mTBv?kmEhIl_<+)Px8%nZzMq%xdG6A+okmzrtUdsX97e zt@<)^Aq5u*KL0_6I(_&n16>V448l|kjXRr%m0ark=pNd` zT;}D|K+PI+=Z-3=r_lwDEo1KG$F0As;xbxxOxWVSPtc{Cfb`gyV`S&m>0RItr1!<% z@^PEgU34zUM1XdSdtfwiVifKK3Rn?=!sV*uSHF)8mr|W5JHqc*1VgvFyXdM58v|k; z`K_O8M7w6J^}#_un;`EG8qq<-+MkYkn{$hHfwLE0V%P(nQdlR|1Ko07BKG=X#W1>p6K zQSmqgW8^V>zn28ouhqp~6sSDY#kYNqg;qhfbneI+SXY7?(QhMYVd=T-p0smt)L zjskVcc9QJiP}NMwuH;AC**ak5Du4EAcA<3uYPT6M0LQeZHo z@Kff~t>G7MYGYvt13;N6j4T^EeJ&r_OWvhd9LRVlk}J9_5+pWY&hx4_{1D8rjXQqaZm^Dt;VNrmquNF}pm-}ZMImKdhXc=D(uLxcOY3|X9~k>9t= z+Am##cVN{jXywi*nso&ikeGDjg^IfHPhLttDp;k^s1}<$H0?jD;Zy3<^-7*x*l_#Y z_57_$ST4c=P2oIX!Gm(yVIsAF66|P&dly05p!kEz?V8-b0YYl!@NMv*)spYU>T846 zqH)0IQbg}2g>{gJi-x1_HJ@0X($RMAfv5q0`d=8-T-{nyf}5IDxxeEH*dz=86gTF+yy1$6?hm;Gs>vO$%DFo^uq zqg*N^Q`iGLDnM(&TNd1JBxHJI=#wOJO&jqMiX>7X6`c@CmN9G{uYYwh{vNwYA$XQO z;4?<$W0fap?oTtgs-!|s`gm6p^gX}iO521bkIq#*9oGE{2LXw-dzJ*yX-#Brq}Qq5 z>+YrnuWE}G=}MkXKV9d5w&It+evPZy*|L1Z#nw_$6+Hj|yIz}K%!k>PrRZ{K;V3xP z7_s$PWF4%Cd|sCCw50O}Ba5QDE|(yTFx$vW8r{Mjo|g8;<8O>dpYkx|1SSwE>eQ&< z0O`DED8W2#gh^22y|DU|Pldx}W1jXc2PFAT9j&1fYb%q|cXMl%5(ZC+gI}n!wOag* zq1B{?f6ZMjXSDmrA`)*);AiK+CV`hF{$UUO-0I6YGy~z%t!rNCrr9dwS3}~L31_-0 zapEsI7i=%=9dxU-pyr+rc;yK25R5p`eH#EkA49JFfk8-C8;4f5x;A1Z(l#=&$~*<( z-aJa#5ECqAbIbO4VUN3cZENeP$$X1}ZGGMQZStrJ+B-u01H3(YiiyORCr1^jE%J-P zPX5gCXAN2|czqKMcmztk;z9A1CGZ?u+oirR2PN;AP`NSy<20P9ZhBBYly7SqrQ9VX zQi2L{DK|!W#32`MDLv%9H^zuRl?Id&fC84ZPjyVh8i?NE$RS#nh?43fsto(3eXeS^6Ow&M?h{&q zNa#+SACJh}JYEb<>9_asftu9-$w?=p<6UhE=@Ca2c{-FqGCK@Q+#PS9##`^Xkht2! zv-^3nPcB3$C|+cHOyWn%Yhu02RTYT?(ez^&D2l23us0No>EgWXrxh8YlXMkM$ltv@ zke#$-V3JI4lkK~3$O{N^y5_s z=|)a3zk;l3;KvyK0(yMvGY?q-;E2OcqO;_3KgHj(p!GeqH$v(F9AUT$(v_lAf0hi= zW%cr&0*-Eg^B11)Pk|GDK(Q{PTI}W`tY_S{$q~FML}N34vov?208-BM8S-}AOW?8@ zdFviHb5jFI`eC@s9p`1H6s+Zj^GzMK92@dH)r+U&w^BT*2##UnF3rk`f};#^DdL!_ zZK1Wpi{c2HbQ6QUrZ!vs&Je1&%*6dTP15g4-!|U>|?SKuoU?Y1V2GCL?i;Lv%wCz+KO~a zL-CF{v1{@0Z0jhv58;hlnhP#RLKF9l(~-tGZrG5yfc>A&pC_#_{xT(HkB;k6fWZa7 zZ3h~YHrwW6M^pPelG`1N)!Qj}d%DP>@hSYyue=q0R(KdO!>GS8?le$tTO6PMw4eRa zd_%-y#K?Zd}E&ti)Q)Xk*$c^tX<*UQfV)+Gs}0+FXQr zOtr2^`Mj&{s^-i*n<4 z$`FPArPDg(KVIX-L0hWAG>Mm z@=qrjCm*C9T4V_W_OHBQSpQM=>2&XiSy6si>C zr^ENQo}a9ZBp5$W21~&Dje4yBMK68Nvp_B6dAtnGwgC09kfYI+lyX95KryP(q%KBJ zvUUD)OO6o+p@wIE_fdi1?cNn8 z<+7`IgH4jX-gV?40VJ zGEStWIZ#dk%5B!L=)8J?gl0$AKwLz&24XsPY4c9^PI>7vJK#>ojbTEOt$ALCrigv& zAk&%P^K@F(_rIi@jva-o+18VF zUwc9$N>XrG_N^n7eSSZ5!*?M+dHHQFbfJ%pikWc`@TJjM4(5AU?Irr-MzTqy{kC~t zPW)H>Yd&}sfi!WH6h(M3*yg1mLvs^XTj*q~r=Yd*%|WDhx87Fo=&3=M>`o#BT6jT@ z5lVU(%q}n_Kmx7ZA&!ud4hX7pgsU$k3wTp69cX7PO<1_Y+(4{zfV`<$v~nqAbm;a65~r*RklScDBT27MQoz0Omy^LWqhAl-ecIPh zqjU~p25an3c)Bl zX5Vs_VNL63e-DGR#=X#QbJHDZyz1-|p@I~GNR!hn1KUm7VT93XI^tkdj{UwuPH-A2 zJj8@A1FnJ^jdaN6RYGHjj<;9i1^WH@7IWifK3gxyu$NC38=FlAfGEE%SMN@H%A8Z2 z`1t3R2pq|us3J^9-_FQMt{!a?t_}p_AeUp9Bi|q*>PuD?9z#Ar^%Q6A8Z)MZknA1W z@BH4A_$u%URwawH%qj4oyHMjza84IbY=o!{Lkn+RYIJibW$Q&a zu8q%@X1h64EYz2lFrmj=@zX=K;k4cT ziQBCMwI|a=P{p|=jUZKRD#82uKaf*z4RcKOP()AxyroTr%xpNwF5oJ(mQ^H=2MCuY zL7OAzx2Ym!h@IiuaT~%7_a!|f&VWmIKSy*A6TuU&gEpWW;4bQ-s@9&U*4nwSt0{K< zwy8d0@elRvRP3`TlaWusQ4dqWPm%JGUGKKrgDFw91CdwIl$A5}K-mh%%rFbY{f^Ke zW2V)^dvyl~@>sb$>Az^flp!l4m6*yzW!b=&AqlhIjL*Y0x`Hk~a6rTQ<{^J$5C#)X zZ@nvo__GgZR2HtAS|sVwT(@kHaWY+(c}nK2#M-v zOQJv~R5k7}0W3NbaC^xckPMb&Vt@vLkfRYj5>5|d5wgA}i-D3>4=i(CQe!SI4B_cD zbt1oZFTl@!wq#1SwEzpoE!~~)!{{ku;wo%Tl!&Zvg8^l?B_APW6pfbOzGu_w4LEjr z@7yt&P|tUQ|1HlZRM?J^@7s+-TStVbMu3KMY@R$4@MnzGMO&fP;t2mSTO#Ymf)_QnVQJ_`ovr35m|o9~oRdc#s~eTgx-)IeP^u`p}-HF7B&@RAURdpFN_ag~h% z%uDlBTMD?Vm6mK}b<+7E%Nwjw>D(e`_XTDa`20ShO97F+vl)76NwRXhAu^8}E~8qc z35O9{mWJ=HJ2(71lDgk7a=WVcb`#wwvu>sIIMf=$UA6zz@7gl6uC^JP*T|3uy@Z95Uein;1yBkqPeGSk&b z3|!p1$C}P1(6XT(5JLMT`%W}aenCdYd!5NRv5%1h@Xq=)a>T=+r#GKLUA?JPAE727 zN!(}KgGcWas!&53Y3NkkTDAm#gEF>>s4nL9hiKu-E*{HD^fn;K!gn+0mZwo1@ocQ>ARJFn?efD!Zv*yzR~~^JyXBhm#?xgqJN!H< zmo;?BpuHv26mcH)C&%K9j;_;_mDd82r`j#JHZ(WPm!e{m@bb=YGrG5tX@rRkdI!JX z&n|KlLMa&lw{|nipCW7RV>Pt)?zsT&v^yd8hID{-rczgHlooutElU`b@uC0V%_Di> zQ;QttKD+M*#B1_6597plQYf3(2&SkebBps6Ir8~s-x}!wP<-Nf%Rrzk%aiW8nZzA zCBwx${pEg^qU&%34IDB?aR8$Nx_F61Xu5~V`rfw8w@87gH_0g2;F30ZR%=v=W@lkj zcuwGC_QDto4>?IH?{8)NuENaW=|oSc($EalXkde>7g?Ji;4<7d@8bHdrDe{_2U^&@ zzz>pWX@TgZy;rXRk(h~4&d2%kJTxu#l>dML5X}rtyHAChNjsnSsGa|5R~bZ?oRA@lQft~p&HPh0DJe5%F&+I zPD@-zIp$d9#D1vDgm=N(*p*7wEoohtueUc=xbi~Aq*Ft8>J4t993EO1A%233^fX(- zjdc-_;n?YfF$M|(b-9GDSEB0yD&|re8clUw3pSk{7d`Wy*b6!zJ%xFxNQ%^`|I)iO zcVQ?nur3bE{X+cVsr&Ji`&>I9xkED|Hiz_zTcf*V3!u?Wbf{+Y7e|I9=J8^`Wlq{c z)T*r0@ubbQ_SRlXJg(2`aPGY+bTUlK>Q&l15ACgQjqV{1w7>sc43=mnV8Vbh4YkN| zFS4aj&;D^y(R>am{oQY9BReFn^)8zJ>`$b60cV?5NZ4MJLHrF_0ZO{pmQVC*X6WGYdPOVwFcqC;{9mp zw7gc>zm@*x{bT07e&#<|$oU0i!XTFJpdG7=eNqVSIz2pWw2h(d7APRUy{?H3H*5;3 z{w?Eo<4qcf$7SZ=PTkFepDl3DvpZG);-BP408#C{TI>u*Y&dP^Q-?;vG6mlAniCdGR8X z0&kJt?JeD{oiXz|bE469G50-77m>NfHW}}$Qn)ohVV4q+qG=PF5PZ)BFmA4bEFM;9 zK;rAPQ5MkNOIQEYL?lx>r{c<=dBhLz=X=lZ9vlvAd+Us%^)3Z`vLIo5G-|)o_%FLen6F>CuymlRu6fZL81;-_aK>H}z?&o#> z8m|NGK8ndGuV=Rf+JnV!{{ewEUdoVas){HB5-Thl<|NqbtkmQgLcKSiRSwc0=6jzs z%g4$S^0Up@H#Q)H!$ka-BLw(Cjz!H2)niaYbqZSL*1ud^+DPJoU_7(Yk>5{80WLP? z7B-R>zQPnE@~g(hYSAUd-v+CptpXskhL8IsS?rF7RPQA$7bc^q~FB9=8vzbZX6_9J6rRksssQ0i9w@iu4Erg zpJG1As&C`z?|zl!wYuok`|b9TudUbdt$uor^VgCw>^C7|)Pk5;wh2X>iNQaQO(o0i zNnFkVn&V#?$dCUMB_#Ym(xvSEjj=j70Nm~aV1iUZ#FvFxBZ-H!iH~p%n~mM7s=X$D zq=-dX7E>LAd|$YxQ-W3GY@hxjXmTT;zxOuokw$qJpf%@M>zBPITvX`%!Y3Ogctq2V zs>^iTFboX1bq{j_c?f1{CSA4n?3(H5^Rs_;#OXm%{%OKC& z^;)G&*=?(;mb=M(+;n+Oaz>J23Xu`oK|-IrJzE$zmFErc3&uwY8|pk z{5Jlp&tp~mV}dG0Br@_!0F?@ZTgJrn5(M%fu^(6!gj=3(u#;ZmbwB= zq@kixMMroqBh}R>I7G+Dh^;`B-KRZ0r~3ZXXZ^zIde(GhGmmKWb2tUX1P$lP^8Va- z3RqqCPofo%8t*aJqt~7Zzs3BeT zjUFwC`E;^|sQ1aXo-l3Qg9q~nWi%?BZe1Q?IpSo%6{yfv&F+u+?e(p>o_obneH7M} zomh`C6L?k~YZWtS6w8{lZ+d_GarF*E_BK67Mje{nMeMZP)h9AeVV+qlUURSi#@N09 zdJ9JC+y5nD`L~qi|L4l+d8Z5;%6@pJP4YJeATavmHhc@am0!P8T}4kaox_MT?@JE6 zq`PwR`0tN@E%pa5+{*5E-ie}q6A8`jUl=DUcD2pHTcV5G!M^~&+%|-hmqUF{Jg)3} z12@GWhI7;GpKJg>r_74T^Zf@u$2S9;t&abLpMSMYW>5$4^Jfaop--w+QCBQeEY_@hn#ZD05=hFBZw{_9=LX}Lc> zF>4p!e|a_1zv=u&_@s{@EOjO%pZ+P1YK^C^vh7ibq+YJt)E-f8S6trE6@^a>#*`Q- z4LKf@HO2II<0L$ZgSg9^M2YJ`gE9RM3hADA33#{{4BV!im~uQ~1`}!;ANw&M`Cl^N z;9VXr%Q|t)>Dh)FM5ibce0^yU0@@12JMtWbd8jX7#KjTnd*nlZYQ3~l#R|JgNW*Il zBE~^Br96D!r1d7IQ#mId+@x+?gH9RBIXiZI`CzhYdKAeaXp#-~q?jioT z*zYc!QKgPj>9>(Kcxhe)+2tI;!KFU#W6P@Efnh^7gl4=Mc#Io?ocDE$6|nTGMx}Sg z#_tVfTWCrAM|G0)DDJKDwKc0`3nPT(&~4eEK+JV7QI|5zI|#2O+Zf?}zfkS%2`g5< zQaiJ5&*`zxUE0|uA7lPrXJ%5L0U2J6iF0*@pRxpHp%d+5HeO|@f;f{KRzC=j2tjud zI8gXu%B&4KbhoW;9JE9bA8jM7x1^+J#z0QW|ML)JPQ|A-Z81Aynvx>h-@$B2Zy*~VyAgD7~Hb$SwlJ@QU&xxQD8*1DZe{??a`xLEsa>5eq)KXJ* zMng;*X3uHMmukmx#7=6}Aa!&1FyWYRcd*P7Vy)ys~PwlZrSs5a;Dsg^&~8XA)x^ zh3htM;#y0y`wyy4j@jacYhJDHuTxl{-^P@Zs2yl_eRsMdN0~^v6ySMLRJqhB7tf-W z#xh=)%Hx%suFPBQh{3`MhDK%bS<&HL`>g)OZ^ETb2 zrv}Q4IP)tii`t?^uUJ^+K1~01B%08Dq4o|* z=g5W=xIL|S)uppVDu%Nh1L#fu*Q1D`e)xaRzhY_Ok8G=gXm@&q&EA%(nDY%qkAkg5XY791S>uMFIDz8IR-#q^5@v8PP|T4qLg>#$k-eo@0*r`fhCYgYbyuQGFB$`j@o z(=hS@VDs`%*Y@8iFph6*AbT0=U~rk%qTKB&nEqp{kokz=)bp^f3WJFaIO2_P_HS zcn7w%mrOse2XDnUfptacl#%?RBdGR{f8SjClnxd)c_;9>k*_g$eKLM@wsI;MsO=6# zj^vRBO3BYwH*J#SC}}kXGq}`NTXkf3Pk%>Fd{r-hH^$S=9>I6}-`{u-y2N>cdcJk=u;NC}JWB|5LF z`omTTO_=b$j`T)8$$}5AqzrQp`iCU96(pzcfK)~JK%`tTCeLmyWe}336#O-hc0+MX zBs%fQQc_ZW`Q-tnyK^Lm`V#MX6TAqOI?xd{+q^CaA{#E-@O!a_9pi04rT`Ki6!EZ< zR8O`|;L1=lnjcYPMrI+2SBM8XdIw>od9e=+4eg761PBhrDOX0K9mr&-qnnz&zYIT9 z=+HR!ND(cRv$1b){}eSj)}FX1BM4`Z9?8PVtAtRstR#G{=x3PBS+A-Tp%PT*}A>jFC<9 zrl{>m6vT)S0y#xh^`qoYbLwn`tc^mUbJjW@KG6=t7J_qKEZZ*HdP{EAz=2SsCFAJo z=*lj1V~Kh;OWoF&nb#>l1F*ir>ajFG{cScftLnL%-%+1(9T7|hO@#Az+w9~qnXMZ`5Nm_55-01SaXec;d2OChL&zMU6b@AqViFG?Ghao=+fAvY3 zSF+2HgW8X!v|8wdLu>hQy*Zv5{-@pBu=(2H(XeyFXnG7Go@CTJq`V5MeT$eFTC32V zaQ6x+8s1Y`W)`(BH|rv!F5*hDXs%!coV#6LGBfg&QjMRHM}Xok`|0D{mwONOKz5u> zCySpUz~^itNe+8s5(#YgL{0~nQWdps3mpGZ{P^WAm}J^Z#keA%G?UydXG1{{(jQH_ zl>H+_eE*SvdXab1ZMh{rQFz$9Du)?+omlpAY9%t#hF-`-@#`j}h2|;WASkIqEeS8J z-EX)Zv%D>I*01HPMX?+gCX+@aWisR|ebGiB)8g5mZqm7Zz*#8sLUyXL2>fbp(wV0o zB5+dlRzp~jPqrb{j=dx*sOWpbc@-iv77(J+qx?7Z=g#Ej?L6CfsQ*!R#>jZEg#c`G zRU%!umzSMYRWUYxW?;kY-x#KamD@Kqr;uaZ<;D~A-x#v9MatxcWt{&j+0g&{HKQ*p zz|m6n&dd_1%*mtKAD*?|F-`^co^<|vnB8}vUcaw(X>>g~$&~)kc~9GQuv3Os3zkCj zEpFe`c=JrE4w6>>j&*T=_dNeB-|8mR{Q0^9sAe>c0#x~&I-WGszL&~vEaxV;AxFHa zfCo5`SAGr_RQ;D$vhTls0=llp{X2hMVCw?gt7**VAI+Z<O$wVFuPZI_5 zAc78}0yS$PQaE8{pPZ{T-gd<-&Ha$(etu&fTC?ws$&oV1pzLSci+H>F$i?P98W|pX zk%rRVDRXU;z|7BvwZ8!wGd}sJSSSF=wUXiS+sW6)|!;0U?3aob4j090%cEC zz2ifB<^If)2nM{T7VNsozD*F-M*KOnSdnkwG-FjQmq{@r8t*+Ug?lxO1rTajTcS9P zKE8RQ_X;&a9~QrfCu6AMOYt{GzHhC>aRQWnSr{pN)rm4f`fiVOZwowwI>6-$@}Zg9 z*{>H|VA}@J9-OwOw(ufo>}Xk4Y`aOsmIBrmJ<@67wBf z4h%3s1)xM0fqJI4J)Gi>$Q*`=(Lq)Lf9mtU4(i7GIL<u0{}~(gf4F94GD5+HTtI zhTC**6(ZAni^%yF`DVfypw3=e?z>e>I<~V(ufPu^z6vc2-?y~beG0FkJW_kt;%JpY zEI*ZO9pOj$6O_CgqVBnU(AT;c=uif|8(s2OsfQoG>(z26$(`??RjZ~mIc!jinrLT8 z35bsto%h&g0XwS&E24z&-k{)msk)1Qq~&R#JbFlu4DV`}hi9lx)8*Rgv3C?eO6rKT zCbLOpTLeYWYhodYtxuMcySx0t6%*nuarn~3$ZhjxoD7!@#_!z)wE9+%^Wd#{%M%R1 zQ{RE`*&dQMG6^Sn$i_3>wA`pTCvE7KT5N0FhJl#D(I$9-_hcF45P$^G@=^78+7 zH^AAAW8@P5{fNPlV&;gev+p>?@d8J!pSpNGqM1Qi{5uU`en6`kqmK1R$x8A+=Xis6 z3x;nvpizG8R-Z$^BI7KA9{jHqVLS3OM9`b}tL$v%c{A3AD0~+pev>_H> z9Sn`I)frw8)4&m>r9hDM>{pK?Ar+~hAbBQ#+j5A<_c#hX$v%d5QSC)^|9i=7lEL1oybjiYd9a@nW$SNkelMw8IYYFz**9TD*6f@ zWgi|I!|r0qQ^5S50U;I9o9L|g%KNg^BG3nQ?6$+hM+uAEd|bFF3N|@+c@F~qg>Q1P zNdRA4=#|&ANqQGg*P1OC!(4W2g0I}U?;=yW?6Yn%3F*^XwHI>hJD zeoZ%gRi)0WK8vjFGcvKUocwGi<2{o_(>mPBq658Uz_i$VN`}zb&Kul(f=UG1>^OfW zKm1(zMY)n&hSYeQa51#};fFeJ19lM6=lx_phnzHFLE~MI4^@jE-#^S5>6rq;%H+eH z7j@}R#)Y)hkFpne__S+~arM|AWd-MQJ=a?IEag>^+E>xZQU8Q<;iwa}$|D;7uuRLq zzG2ofNL?T5i@GJ`Fc{~e-tYo7Qj__-6W|JLP< zWIsGc8)dTDWIS^I&s)$JXOkxrWegGoW_v~$zJ}nSDf$@sHwLpYm#?MYCC1bX0;Yjv zW83>3=L05UG!%8ZbI0X+nTLTUS~z9tXsb^N(2nu{RL?#{MGBtA^PW+=V9nxU^_tpE zrlH2cGR#8j0Tf^fW&4608CtZnq51xFNJ@SP+!?RpxSRoYJQE3k+J1@qr0x(SW?irs zukJ1&G_WxR=-XaECHb=MreWX4uyVQjtgMWP5vg#>bY$$H$NG=KpfbzDYn%y#x!QEL z-r1T3E@$UYhIUUei+I>XJXDYqWL>(dY`&P~HDA?VbL;rN*-taGg|q)7+p7MT_f=p~Ry3lQS{+~=Kl?%R8h``#Plj`99@=MP50Nc+mKtToqMbJn$3{e{`R@hC>? z698s+9rJs>R ze`w4f0QiiP>?^R43xeG*+N)YxZ^}4g*51RXP_NffrMPOUpZ&>v7Of09*EETtRb0(% z)F(uhD6-Ut=8mE$i`1ZEq;MBmRpqSQ71w{Z46POli#xqYa5RGnOuSQ38|clOHx!rv zuAfdCepWI=wM03->?C{$P^L^jU)+19J2$l1(n79EIBHG!8L3|NzUX$3Iv~emHS%<38-JRJMI zZsYHfM$|ig#O3kT=;v*4yakpG&frYa$Bkie@pts!KU34rpLPw9v#u=d;vmUC_+fGJ zk|Z0$8D}2)JVz_Qc!hKHCi;|>e1-gaze|_WD$;3`vx{<;G_%q!`zo7}1pdTXtwa?X zDD~HWPZ&+(NDJ~y9i?Tv6Y-QrIMY65tiJoJfu4lElf7MB(WBIB+g!tYR)EIJBZt3% z={*J>VL>;(sMg$=J8ydu-#Z94Y6n(!>(IVJ#%TQh_Tv&q%IH<--Ib}|vyc<)*6z&h z!!!gl=1Rf((S7TK%a~ELg7wRCz};a*^FrFy2+heZPQsBukE~$RKtI1!-|CMG&n;dJ zY@Mlnu1cg+@#{hh6LSFlQ|%D3(-&~WgBH+{FUcV2-kVa-N0pTcIbwfk#-S+Z(cFp$ z1j4}XV&kupXNiD^Wg)0WCWqLx^Bu6ET8Twd*o)Uyw$jT0gOFOHT@C(Io@IMsODz|> zmFtB%2GJ@6zoM~l$1P83{OA?)n^N8o`=2{p!Q&;jg-5oxa_YV{ ze6!fR0+n#xCYUx#aTH?Itju2o9SpR0Yv)){C+lv6^n#c%_OkIce2k5Eo5!#`+k3%5 zcO&Ku$1qYNuMJ*|Z`L|3yEqJQ)=0j1eX)JgY4}w=hOtoL@hXaFdh)l$qoyewCoLem zcRVEyzUp$c{Yp*j8IoEhSd<4t-5-`O@}%T~CX#0E$qHL~3C{iuE`qQ9&_q_iY3T|8 zO4{Br2Ss=o=n~1kPPQzZAvtE!F8#tD-%_&IeazTHM)CNf@Y31s)&a?%!-pBd zUt>2ngrvHFbn!gKdmc1_#`j0UZ$jEpZ{}#W)y{z>*NB!IR{2Q&*!!la^i&AB70sI5e!Fu~C67GieK210nPVlu-LXOltnP8TQV= zfY;Q^1)&&^C#7p?<4Q_ID+B!8g}kxU057M6+2Ho<+*po_Y6L%aqeQ1GhBvzbdJT}d zO<**D&~(4`J5?Hx+XaXtnz+Pswq&|aTe9`SOZkiwC&_+}o*>tN+)gKvprENs@bvU< zv1iO`s$24VH!R7ihOxRKUFp)|7b1 z@`BG~YtEEdPrm%JC{j-s6fNX>|Mc9DKQ^LCc!UDN%T7wU1QI&qs-c32mY~lt9|N$Z zza{*peZGxLfk6!2X?yj)5B?=?W@&8a!2Lz*O^?>|JbRW5jPp2h_&jTZJ*(*!`(KV? zv`LH$sMmggyP+7#JQB|C?k5ADpiclAqi(vfvtBbgn^`yMu%9cZhX`VS*=_IFa?yJ6 z56y(?!dxdb<`2y!HCGQ0QXNjul`2P)C*Xq0?&4-YA@c2FZB@p&YO5?L2C=f>*%7z> zv7f#BJ$y?e9*ap14H4rLaKy0|<>twk&hL;5maDTeByLpr_l)_LWJHPt5VGKy@iXQZol6sFn07007fY^6`GY~AX<7Fe=J zK`_6n8#tjME~VwML{xuOC?O~w+t$^EdwEKgAv-3QamMiR82U7O4#&!7#&5>eUQcPq zGR@f19uGy__vl`{&cC>@wTQZX{nj#OVPCV(T{d)5{arnMteVox{OP&1x)*|%$M%?= zNMdy(GFQ?bHDT@j{avM^g=>ddXa|r%fRzNqIU=N+CmMGcSU#OooMJBHG1pTVL0P8WoQhBEw6;;%ijKbhA1y&h_UR zU;W-Urx83teLNlFv)lb{yQcB#zVJ_S0 zq&mUs{M#xQ-3u3e?raLadnWiU`{~ipVeH0(=Kf{A+gzb|5Q55|W3m26OkscyT)SO_I zW)H_RkJACC?$e)NB^#c`0QMXZLKSgiKXI(wFOkVDa71OM>|J1rs|o-{%d)ILwEQ+% z=M4-N4f)!oCPQV;oVnDQudFux6plz7cMSMu$dCH{6r8Gi$%$K!@zCDa-Bsaur%`;x zNEtf6;_elOdfa8$BOOzQq`Q^*%Yx=W|0nNE$PlOw@j66eHH48I`w=FIs|(%RFz|Xv zVhQs%5ClxVzBXnUAemKWyYc6?%Herc*=8TIT^)gIfD)?#11K*RYqGV*2u44+_}3eA_a6kmRk6&eLRjm4 zlOD4)5htcqmb3G{EXE{y3P(?S({*a=7=Z#QhYJx;;uCUS=JtDWRF#*M=}Q;w80+0n z>S4slMswT}q2YljQd?BCqYzKkRdL*Lz?wW4Z307Bk~MP4DnY@LEh=es!8nhH-M@e1 za_Ya-L|9jIGrZu?`{H3<=a8D3t>QO4w&5^`PAV<3lT1B?NXrBZp%KmZF?_+t25>%N zKm@lD$uP1>V)ZDk!~?I+r#a#;d2WoWE=IcUqBZ7}{?8VtfYUQ+H)MKyPzq!~#_X)} z$UJFfa|gI5OdDp%rS!I5(VezHfKg61z{hKKY_&{J6_;hbW81ECy}xO@f^@7tE&74w z0~gF|q6+66M`Z{ZfYPd&;uBB78UPBL7MdiprEhH@v+xkiNu3>ghW1-kV5uxE^6X{1 z9&q?Heu`Dvili&L8h=51M)KN=fV$U?-}%Z@-xasrrSt;4YM^_fP4+Bx)b4cHebZQ6Vz`dDQz!Khex@wsB|ivwPRk7}9CSEjYj1|kTi3m!`Qu>gQ&OyNpwsk^2I@WK=l zY1(mvtS75aid@GNjDqKhQ&ZD=^Gv1ByE=RBW#}U%ZRHQw?a!$y$tsXtf*lwB&`f4D zLl~$6u(0+J@ezM%+B?LhW7oQyb8FmR)O-8iC*_(Y$=}iMNYj24yV)a_xhQ2l6$5>R zs_}Y-aQWr`3TON92+*La5@{;Sb3r&D$8sVk>u*nKtgpxM2gqcf{DeSImny zB9qU~&f1IrPR$CZ|G75|?a>f#vN#x~GOW(AA?6FPXQ&t9cSzcRW(ddnTesPB$XQvo z3`0QIb*zccI_e3MVSDRwE$kU#Ryp;}PW|2A-Ac>Kr#C4sCrwS9a2k@_Dphp6Mz*#+ zKg*5iYDJe<+M2Vr6cf8~_-sB+mCtN)(a>+O>DXni0ocMy%X%9MkGE46mrrPq| z@`a|ZW;Gd767Q16DIDV(0|*x=2qrkIKclKoENFd1sw9sY(ru_TMYF=TosRD%o^fTW zbw7(nmI-vnM#wdDWCN|@)_6k-Ck+L1Qp4V?q*7`{-`dXrlj(1#ijS?3o$=}#UJI$^ z8j1(kIbOF+uuXsa`reQoBzI${QyipjP5n8mMy4eSwWBWV0kA^OBhrP6W0CgxhHJY9 zr?(${p^jI_S|xkP+gi7+C)0YLzn6TA?d=&Stt*mi*fa3+_2jT)J90;ByB+_?Tyv8s znG-k1y#CPU*N-&cpI!>#^;J7OFSc|Fv>eW)&fXk2@0~v<)2Of~A1=}ztl>+_XoV0f zM2WHMN%21Fe8(ZyKJm4DEZ5st8j>m=eZ5R~xpwUP6`MrB@o^qCM>Lk@pbpRRD>SmV z*V9FRbOB2bK|4Uqp3-M}yvtmS-PkSF>dr1c5&o*L+^WTK$?H=$O+&^C`VEK$P|DN> zny~Dj1Q)ok;0@ai?i!HUxhkC5rx6aT^?E%8ZoEHtge~51+uE)1RD2MrjZ)mPOFh0z zZ3WApB&W=8x69H|bjVetJBFc0nOw#&s|Bq=kz^?I%$o`z%*+`EbdRH#beL{Rc@Cw! zo3jQx%yDl)$qRKF`1+YL5bG&Bxryzb4 zO_7>{NPqVrYu5nG&yxCUmU+|XocL0DjO^7xZ?GOvc5Nbbe!LyT=^6-*pGU+5zT;9- z?BIEf8F)M@Z2YPFIM>11ISA%tV;|gInX2<1(iI|ck{WWAq6?NCl7frjC3WGNjwF1? z?E1$2uMwjl(~+_%gBM9}PYDbqlWzS;GL2cJwHrTvNM7&UkNdl1!Fdu}9D0IDk`_b` zl{0$HVlkQ{n=*@&jHl6O6vt)eeM*?#<8+JT_@8h$7;aCQe9ja9RwRvtN-L=6bO=gU z127F?jkut%qhMdKCdfzfBX|^A*jTp6&es!n8GSi?KS#&3zVwOqzvM9C?akXH><`{d z!##a`r?^(%$IvE)?Bl+Yfr<_UwE-=G+ppPm>l?qKTJ6|KX^9B_v76TNO008a{rdVjPNJI5RJ;6anu^)G1?OQX=1`S--tQS8aWE+wjV7Cz zk)uD_P3PzN&tu7V_XsBUNt*3>GnxCub)|Z{^rFVBT$wWE@G@OYvbd03tYdu)w1+te zm*bLsdK?2Pr}hcb3}KW%yGFYc=gdanvtG*)=MYeS>vjYQ0tz5p;x9?r|VH zERD4wLuqRJ6Li`O*a=SWqT-u)BK5}oWjWXOU(_+asDvTfRnU>;cO~j~ybGqSyX{-q z?48A}T_3k!OpKzc0K?{%f~r0YE-CVdrW3)F-#~)g1*A8N5@SOo8p8AjKaTl%+}UT= z(Jc~wZpfrta*~X@f>)K4nikNrfNxx+}OB`3`Mqp za+yqzE2B3yjLPP(B`$4;ZFf~HL|vBwSRuaw!T16oTVkD z%=afy+2MdYEFK*TVgRem$$p1cyJ0W-&z*)H&9w^hWM~g#6pAfk<7sv4Nb;gRULRa0 z>Z+@fEyBBgU)e$aILSKp3F%2Q22SldkoYOJPJ+MT2`2hPv1lxgC)T*Ji6mNg^2s+B zI+a*8ZQG?V^>f2t{+v?P=KHn_t(6!Q^}H%@4x?lQ-Vi_udHs9&=F>wl_IPOYEYH`0 z-AmQmk;ogP@(6YtjpC#-8@ID&i?JCcS?YpMlAe*Id#ayjltk?}FBDGMl~J=FVtMfgdJTI+2rNtb);eIoFF!GcRMa!QBeM?K8k=ir!+|&6atul}$(jOZx$U}BKrq?Bo8&(sQLj9Rv$g-|lDYR9z19`Egz^yoq%>wJE(dY0aY!F;iyjC&|mYQr}TNNFZUW#Jx;>z z0lEzQ<;w^PAYlDnkcJ#dB=oa>Q8L(nvYvuuPpsFEeV<|GK`F~0em$~@o&z67HKv65ME;Z5=W zg}NoMM7`iU)9dU|yJ_1_nRrBjuGF@0MYm_!>@}fpwci4c-2qYxRc)5cHhv#V_Wd*k z>oFab-R<#W1$a`vxEXNYtZ9O@)6u}R$WUwz+qCuC*pST^6DIcAsq|!=%Bf>HC$AD{mlH%}Y$eV!Cz-CN@9^5yntD_GgMgfp#%D%xLsV?fZ`V zPIz(jL*+P6(qTnYXA;fZWB$Ux*L0AhJ-q$;wWlKDa+?GP7`EjxP{k*UbGI9Se_<5m z$dHyvOd6^7mt$kv2K2Rc{_PtpYKpakRVT~(ut&*-p~3V&&K!;R0};Iupb>&?zj{s> zu1*XEk>yAV!L)Iq7uCYtFDZqN@JL8Yjx;t8;sh?mDUh@9$9`&8q8`7$FfAH>GQ3IsE zs|*=zGPtMQ50q^#LU1z2w&5qJeeI~-_}HSgc-f4_?U|)sj`vWNN!tYbcM@B_R(tp> zdN_gwd{Gy{d>RYbN}JZgbt}5M{B16)ri>-Vo_i@?8JF0#g$?;%nfv*4tXc{^Ka-@j zX8k=|74vO$iMSGludO0!W{N(4Y^HDEG-LT_W->xJoasm9ouB=*^(EZe5w2Bn)6oAg zfK6+q-$+Yk&XJh(~v{QOO-)p(bqX{6I1!lkLLi=s`5Z@1kn3R&d5QOQ-`TN zBxu$F99?a#n6)2_S@GJ}{(u#NxJ*?)o2JHFJgLslnKJw~1*oMC+uSdpjHOf0yes?N z__svRulASnCc%RktsBa9KA)TU_>r{4`ze}aSRQAw=zSvS954XSUM7DGOaf3}$Ujiu z`xOlKevi+8z5MzVC_Rt_Id{Jb(X7=Zs?#uG4Wxc=((|=&MdXjH+i^Pyna+i1Z*os^kPUjVgPnfs*R7Nb{v{7Oq&ebQA>i%Fl3{{oG&z_(SE z-^$HA->ZZoOx~Uo5*#50hH8lBygV(*rZFk^T;fqiU14^;(7a&`f(d9m5TM*A?_%lI z9B~A0-D+~;)5-l0GO4orwFNF}*FK+oX4G%?zo?xgC=zd6=3ohS#J;*+Ua+qX1-Vv2 zVcIR(3S`K<7bo*%c?GT!iZd&4Mo;%17m8xPy88bPb!>pOkTjBt&;J%CCEWs?H^Y29w0UM21#$fmhT0O>&my~k0mqWuj0x}9g{g< zO69xEiYAK+iFYUq$E6D0Xt=_s%XzeQy5Lxzvz`y{O$Z^hyQJ0rwmwh;SoqLM?Enx5 zmxk1j!fMOj$^K>~NApy>avO1+6R`G(F*V zU)*zs6(Y@JXYlV+T|X|LKWFkgzf&J zc`I@UTWOxinhVI|xPsy;ax!IRR9hU-s?jU=7E?Nv=TkB>6XB8x_!R1yo4bYYmZrI` z+Kx}d?m;Te6F$QctvYZAmzD+BVT@Qp!SFr$eAWFm=S|#Kj7Sc(noWdX)ycx9i(?=Lp0u@KBswjUzdcDz2r3sSr96Y1Ci6o#sL9~ z%-m=@ty_ht{kx=}U%L20h9EpKwevQvR1R~Rm3;XJEVmX00_ed<-;{s+$eYvlRtYe1^KIxf@EHRqF!PSbqvleeQR z`lw&Og@)UY;C#f5p8L?yC1;|8Vl0XiUooXuo`xonYzM|6Rp0skCsR-KdZ*1E*2#K)mspl<;BgHH=;=_<%n2+xJgKaf`G_ ztV{FLVr%~cp=JnfPLSzWH(ZmH+RVR2Zoq$M=z{FB{#cpAemtEyM>I4%)5|ef2N>60 zTKXXj=(sv$jNF@Q{jmo0x{|hj$xI z@QvZQ7YH0ia5IvPOUAD%0qmsMvXjVrz(|0t%~Q4HHV_SiF>ItSf|to1pAv3^xZ!5% zw^xqus^1`wV>tO~PUX1rd_SF>@yngnSbAa}SiaTOScUUCqo{Jpfr$1gk_+X6!gZD< zFUm$ZX2oD>QA6tIhG>Z?*{-QBpSv8SM|j=q>aN_@Ffky z<*+KVas6&&dIa5`()i8yU9`#J0UmLRgpcE6_UapLO+wuzz(&MHwrY=wBnRW?Zc1 zgj4+RrdF)L13B-v9$SK+Qv!x}&>1G~PwBpiSkN#C#qDmJa<#uJ?>ztUv4caVqL!h_ zM&_Pax!cyAgy+`+Sd8_vZ$C^J9bRI)#k0{cr+y=DCDFz=`DLDB!lUgMj}dPw9M=+j zQx5IN{_a9?iN*#G4E0~>F$#IkNy-cyhtj+@EK*ih_sz!mwc9+myhL{;YCd7)+dtm= zKzi?VR#{T5gHE@Ucj!k6!l{=np|@zfU#+36s%Kbi0ITw~fD14A9~nq&I`!R&%f7j> zb~j+e+*(kT2;lA=9aQneqk>rg9T-lGk(}#L4E6Dag5lRcuuwSk@j;be%*esGQ@?gj z^6<~K1tY_z)co;HulWnry`hCm#_o(~jxQ|;ESF7O0BG@p%0P7RU%m(xa6kkL0$O9W zp4Rns_IJKs{{>s)sNX1uGfj04e-9MCu77R$YqqBk*75H#t--=QgQF_^0cdU%q=hD0QEt|GSHcSo=^XFOD-=k%d1g0~l@gCdGmyu#)EL7Jj?YX)c$Olt22{Qed0vg6k(_Ml<@3BO2zhL>!-wqFSj_` z;od-;*U&zDmgt9o>}P*L?vbHs7SF2d5?1x%LZCpZN9~PHXX+Jb%edW~4AClJPz5&?sIKdpZ0rZ1v){>x+ zvVO;1&@DTgiGDAIxbwZ=lb(JXbvXClSwr&rlXKVpO7~ZTD0&KzNW07F%az1~SVG89 z>`(OmMo^ZhbSTl=yRfA<`3CO~t>yFatE1u4Vz&UN1-#CI`aCTD*Cjp0|rLbraD>BlpB8ZQW+n@~K}d};Gs z=Vg$|#=3haJ%t^*AIu{*@7zpeInh0OL2m~cu@5yAc3xJ%Ia%`GFj;9#ScgUV;KtX4qV*i(=+OKgqcv9d6FsbQR?4AH$Gjx&-fI2OaWaa<-5Ksw^ zbPeejK;Z6D_<@&h0t!6~3Xt`8koV|PqaAg~@dMx}So#tPs))l?h{_HN`9=CBX`IRd zY3`>8$~ zWA$DcIj>m=g2_d={_qf1>^Q}sY|Tz!@R?$4$;pF#Nqv2fKGuL9p)xMRQi|-y}t>YlARO$Q0qBXM!tvc7H72kF0`HTaZQtz+f#B>Sbd+8>%aNcg7y-6ELwf=pIn3%n%5l}5#zhi0IL1WW>EP%Pxo zTAQL&5QbQ_A_H{rh?I5&r40Qsq+8v32hbdx&@KsarT{8SB^JgfZjc@_3IZGgOom+CXvy9Xi}>OkG)}Tzh$e|LN1aAi`+~?wuS~M*GbH8>)#WTULKgeoofB|MXhT& zLAY;C_#V^3Dx~uD^;1)OkcIp1rmzVCpVI5v!l1tJR+#liSmACW9(J%vnwR#5+vCwu zV4>kDeG+{v!5)SBp9w z@S0CIKl;YEQ9*jOm*P?e%p3IHU2DF>CzR|jqBv!CIPK42Y!xNR-HEtZjgC0FXI@`D zE|Jd87zC4kw%pjz@UBEDof&iPcXu=E^cyXSq=rn18+@iK;Ol@}%}Fukth>^7Ss6tc z?Z$c!@J`kCNm(<>T`zcbwcXeIlK0M;uc;cXUzE)<;yfGj4yqF{oR>yRdQ>N_sVf~k zUGl7LEDO3$9U`L^(7RcR!>uTm&GZu+-n|@mWO%>*a;LjL6W6g`a)XQvygf>Kkho;93=(#(>1Ys%Xq0692)1bRR4B85C zU)6wx@t=Ng1krMXlFtsu}N0AE3h^{TvoDo{r%s5}1BNqD6k2AV7q_s(AWH+|q zl3MU**Rg<$7}klYwaE?FvBK_0_tMzh6CEBKJ(r%P3v)SVf9)Ma-`Ju@rnQ^UiBO_C z`-4S)y5@c|7Ou6asLi&itxMWTZ|M)ia)D37>IKZ(kmD3tMrlbMTUmo|W|2DM^1l}S zl~{8hg0AlTRNQ|sY%`M^bLDOM^3%#7)GM_B=Y^B2*0HeiXIrJqigo+kdPRU3heU}y zyF@bWSwNEfXR=UkQdP$)p~lV^;9%`SCefX>U#QEI3$4ftpQLnu=cdboOBnmQZ^_A< zjgitJH}qleGOvcN4L#zwr)rOTXl|Z?*Z|qmS|qn5QCLJI$131F5@IY zXJQ%}0z9hzy8LXa8T~InwZBci0I=rXzw0#-+iCRK2!8f z*K8_PDwjQ+U=1{BQd#B$xmTJIuMr596J>C~nny72{|T!71=hqV|HcZADWFpxpm6>t zNcz9?k#hws_J=0rD-m)MBY5Qx&Ctw+MxZOI4H%9Ag7g4E;%*z{$okXRrNmc(oquTb zv_q^Z=G613qk9Prc;( z*d60D{kQx~9VKht1@DkZ6iM#pepcOu#EaNB6d}$Wa0$?jSwLJHok z0CD|98#j-n%$*>25%iSHz|IdNvl|jU8%h1R+C2OT+aDV1#(J_fG0l)ubHT)0jWjjA zt`fO_Az$Rf=XmccSt2fr=1;o^Yo5emg~!k{L0-Yo1rPbu&6Aml1g_aJ7LP!J2lvLT zV*NoPV8;B~J7f&YDUY7u(-{VfyEiFgNDEG z(<;$bNpYrT#;3%xdmYM^o|tuKo8^I|-_~)7*0pP{RVyi@+7_!>lj$RKr<vQy2*M6>9_%-rMi57Bt+}-QsQ{IF=aR!28A1rsMN|QD;uFeKYxH_kJRC_AD zOrTrgYXC(ap%SqGXMU3LUegHm8Z69!q#e1-Y;Q;$9Yt@p)C1u7II|kmyH|0CfktVb-!v-iVn@shcDJ78L4i)ZN#9(J}e@tp@dh*n(&8Y(mXZ- z2+KnhDIBEyk|(8IrBFLE;yW@evS2;M)quZ__iW8()0N~Y6D(|I(m+`>)(wDyT(T!# zf=^z~%d$~>5iB9%aONs97~sdknaf-Q^DBsbZNIFiUCc!v?{wiBbqhopO=FfOJ|)i! zvsvpUU2}aRPC>O9#$wq*7?mP{sf{(nj+KY-B3f=1uhqw+ngzVtkdQdFl81HO4uhKo zVFuZf;j*3s!d|r63^(+7uI!gsDM)G+586qKHC4W=0W4`f+|uHG3Y)C?tBdrq=yi|# zdcm`sPt%bm237?5!;Ay8SKvuplQ^IeD808|Rzk5N>o1fsK47*-9p;C{uI^?8sh@Y}?Ye3Vbzsnz~6IlKL-rvxS4<=>b4?rWDRN;tWuqZ5j zo;wl_`Mh4Ml8}O%W3!uz_2PvEcJqC^XKxg5Dc0|ZxMd#|t;)Q0>_&Oe;JuDNV zYZ|sdZD(OYta*O38J%iWEpb26U-=zaR#P)q^s26^EqB`meIg_9BBVsSDZTP(vp%iuG-75{HP=Rp$RQH`K{~kx&Nz3vv8-e;cx=mEIN0uG?)N5=zswS z9TRdaj@;xf%K~fK*zB9`1{`$iYDe>CwduKeVfU+}0q;>UaSFp+ zVr-W60Oli!ZFukiaUwcIIm-H_^3IgEgjMt-p%RNJxKt*C{ZLYyR&R5>97CSkcL9o5 z5#TFiL`N@4%hnL*Suu~|S9&Fq0EwTZekyQNLOIoDU-9yNzW;3d^0)I9@9(lj^7Oty z{-KG7ILn@g3k`)_c0=(?@6Mgt*vYWH*_ICFt-0hEuVswA(dsuD6`?I?gOaF#G$6Jz z^-~==B_$QOL%f#tjMqlxhvtkWV4~B(xmy{~)5p>U`$zKQKaR{|4goIhBM@y96Xn*h zn*9PO=Aen4m{2_^gDQ82aPR3eE0TM7(ynl})xYk%0vpYGQ88Vt^Mj`>OA?1}Aq2F) z2xLx7z!lqww*2;=$HI~r@dQuH)O#N}gkNPM1JEzNnT};N5`y6B zDIv&6QMzusA+taVqdRc-+O`XdHh0a#=2j7O@?|RSJ?QAkvYNc6uWC1>ep9SRlW*-k zZKlio=|z<3kt+jTm3DGG`^GWs;?1~6#i<@alCJwGYwOLu`nuvRh<#XNBLFKA&kg}WdU}==b>-I) zGKM(E3o`@)##XOz`%b&7)A8sCjOGF)3aRyRf6R{0mKL91<_uz4_C%92WY7-5#+vXtqFlco z>7WA;O;sel$XY-%kjI<%twO%k?n5~#cZ(+0>mApBRLtDH*+UDjQ#^RCa;e$myrNE$ z_ow4KWVg9_hv$ZQaD|hc5aC}LuAb#v7zL7it6-+kVriK1cXe{exm|ydZiwoz9ZKk=(4f`^}Txcde<_RJaKgI+{6mLE|Drr zuH428CK2!MSCY(|0ikn&Aq6yDM~H~4qWO_;7hiQ-1nG_{(3)kf*W}ICL3K+#|46oM z!)*5IsG9b?MYZf%*nu8)#7h_~LR5+Y-MurLiAwjNLeU!Cwc~zOnQhIo#EMmP zzic9?7TVe$0jY+x^q&Wu?Fcs%Q}FTj4~O>-WiSwuDnVbM38gleLBkm`)ZsE5kerez zUWI$~GHl%|9Ls=VA%%S(v%5OvNxeC-c5qB7tiiI9>+Uq!Cj5Z+=uhCjCW`3tE!g%% z@H}LQ>aNb|zm(rF14Ozadf5#6sUt|lJd{%PV?PiOY{8|$fg+)XVH5yXJ@*G-)B8D8 z9_LobF2`TqawI)~$t`v(mmnmL0Y#Uq5a-tb+za##edqo|Bc;w81Eh+MD4@4|zyuGW z@(UnZTG`;Be{F2I#dB6R0Bf((ROOOZLocD?|6qY8&QIuF+drdSw&NBnjK z5qrQqfD%AK8-j96qGNd;6yI&!(rZ1qJML$iT`>*mdhw5 z+XzZjkQz6If}+x351*`#m;<2Zzn+Eh^bp~$3oy_fv zeNVHjy6K{BM(MH%y$lIJarpYev2m(*ClGYqIXMHk(lA?-HBDL8 zI=e@I*PU`O-vk_qjrE&5ZrjT&mdeEAZ-CFAKSV)3ainxpE+R@+%qBVFN88sQ<& z$%=Nx%~*vM@IPldiDdW0hy$!>5`IRhJwPa}n)p4XjXSB}B`+f<(lm~rR!IEz&lnx4 zkE;{~Vp@)DYz>OX9Vp^V04n6A1S$6W=9ZAEQi9#G&O`Hurd#^9KZh=L#rq_EdaLD} zku?&ptDQ94w>29dQc%RCZll19wTMlWe`s!CyQ8@l(xuv%7QH@tY$g7=-cbBMP6>d& z{z72?^mph?JwHdZV~GapL;2w)0CLX^!b9Q#8F>ivI#@8KN3XVF^qHbN5}t18F2BSz z?vHuMAmaKo?lRcE*dejsD+I&Ayu9Yt_I5`K&U$0Ra@*5j_xDt;*|?Lg z&2(ynA_PN2HwlPnb1ov9@2CmnAX?c&+Kf&LzVnW*>~jQe`DHXBBhpZAsaPD>rLT!U ze}(;cmiwDZx&h?fdSEVUHKjs4)D>@G zZu#c zq9oUo`5YaOA#P3Q#^AK`SX!3@P%YOhXJ4Eb;}02mMi(mqrJr@L;>!w?xzC2NRCQc9 z;0rKYNrWEY7ET}Kl>cu z(bvNyQOI~h_^q67S9w~M-r$>nrGUMYHu0K9YERn9vu$VJv@MU5GIdC>L?agSd3Vj< zeeF=AjKV<#Y-_!UEb}XE0<`-`vIY*t1G})&5r}>zL-D{B$wN-Vl6%bF^~j{VGmU5a zW5lT%HQ8h9TJG>lZ8ce2uh$T_crjc*fk0GR@aj;Pd~kxoNRuSz5*x$^LznILL!nUE^>jD(| z>AA-diUm9czrEcXv(OI76ibp**+=RC;5nvP;;WdhupI%nKK8OGnQ$9pX24XZn^Zrn zY!+u?yQe%k&sHi&=M8m&L&!=vUBrA7mIJOg3mVF>gN9k1XB_s-w=pPkyP@a1J~(wd zynZv<{1(1x^7H37`v)92_d@7$wjhV}ADZMH_+g-pgq>$jP(Sg6QWAo}N*;n@piCDU zfi%wVBo^~THV%Ge9_Zhr1Phi4o3&7-{zaaQ4_8{i_G# z-hGwpqN9sn6JB1N#uOu9{Ict3eLB)H#^yIK+sXC8bXOHU6mLtW{RYj)09mcB*B5S=o z?FzNsUfQEQron2UHoh7bvQ%eyME3VAvH7iH|HejBPlXJYFZ8=T)^2Bg;|OqPdR`Fm z5oFREd^+T3AkZ!#`C`238pWvQ8?i1FqwuWBW45Mf`p#e^>q@M>*xy1JqJ^t50jP}9a?T;dN)5Y$x}Ih z=FJp6@O6C=av*&KH(PaokQ4s$=@o4KxO)d{LgVN{kiV6!XA}L&N1!ACW<7ZWY|!tr z#jq8mf{q{%2V9QqA*{�>PtZ>-k+r+P)e2o(IOpoBRx#h{ao>i=kPXiJZ9q8TV-E>5>l(KXm zc$U`rJgl6!wWHuU?o(an?3mM7_QthCe&KN z{m$K$;e_ramSUU_zkQNb&BEaV<*eC`JED(yN*x(iGc0M%Z}s**6MBlPhf!7M-4(O5 zR;*WR_k2@ZhR8sIdu9h{#Y1$a*+~%7zt4rua*@EuZIOI*F6^d31-9menVHK<3}+If zq+Ig3A5T@-?NaCGXjUN?s*g(ySzM4>;qE~%!8zU+vYZ7B)^<7q8aKEy4isG z@F7|_1!?pmQgU>P)Hqi*HMojTj$LjXF5+1C)%FM>q)*pb5 z`u*?v-~4Q8NH>ZRqggVu&Kue4MKd=y_w#^TNl6e?o#q~G8>^N;;F0>-maHqBtXsYx z6FvNfDvv5^WHNP=uD|JxbsAp;a`PK20JB{Lbpb*|RswVxKSZk_9LVZFTmG#KGnB|u zmF(g*o%gIDKbjVS?g_UA#0o(BC5lm<|7N%U{9f&U{yzWJ5##^(Flh4Y+~Em?!tjUY z1CW|_qJT|oHSHfYYquT%bR5kB?LQ*h;sAD<(J++{M%O}Zarj#Mt&Vt-Yhv9U$0Mw5 z(QIZ$^ZMN7P|bj9qc0=rzo0%GRrl@9{PX@gm+S!2H~&|O*wg<4J^xR%zW;vhzbKCX LKfM+#e Date: Thu, 19 Apr 2018 08:20:52 -0500 Subject: [PATCH 0502/2496] =?UTF-8?q?Update=20=E5=BC=80=E5=8F=91=E5=B2=97?= =?UTF-8?q?=E4=BD=8D(Java)=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" | 4 ++++ 1 file changed, 4 insertions(+) diff --git "a/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" "b/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" index 32c443af2..30d395029 100644 --- "a/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" +++ "b/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" @@ -232,6 +232,10 @@ Error类和Exception类的父类都是throwable类,他们的区别是: ## 23. 多线程的实现方式 继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。 +## 24. 线程的状态转换 +![](https://github.com/apachecn/LeetCode/blob/master/images/%E7%BA%BF%E7%A8%8B%E8%BD%AC%E6%8D%A2.jpg) + + ## Todo: transient, volatile关键字, Fail-fast https://www.cnblogs.com/dolphin0520/p/3920373.html From 8a28bb15100620e0d53a32a970b4ebbb80668d12 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 19 Apr 2018 20:48:21 -0500 Subject: [PATCH 0503/2496] =?UTF-8?q?Update=20=E5=BC=80=E5=8F=91=E5=B2=97?= =?UTF-8?q?=E4=BD=8D(Java)=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\275\215(Java)\346\200\273\347\273\223.md" | 131 +++++++++++++++++- 1 file changed, 129 insertions(+), 2 deletions(-) diff --git "a/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" "b/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" index 30d395029..a179dc666 100644 --- "a/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" +++ "b/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" @@ -235,11 +235,138 @@ Error类和Exception类的父类都是throwable类,他们的区别是: ## 24. 线程的状态转换 ![](https://github.com/apachecn/LeetCode/blob/master/images/%E7%BA%BF%E7%A8%8B%E8%BD%AC%E6%8D%A2.jpg) +## 25. 双重检查单例模式 + 一些人总结出来用来解决特定问题的固定的解决方案。 + +解决一个类在内存中只存在一个对象,想要保证对象的唯一。 +1 为了避免其他程序过多的建立该类对象。禁止其他程序建立该类对象。 +2 为了其他程序可以访问该类对象,在本类中自定义一个对象。 +3 方便其他程序对自定义类的对象的访问,对外提供一些访问方式。 + +单例设计模式的需求 -## Todo: transient, volatile关键字, Fail-fast -https://www.cnblogs.com/dolphin0520/p/3920373.html +代码: +1将构造函数私有化 +2在类中创建一个私有的本类对象 +3提供一个用类名调用的公有方法获取该对象。 +```java +class Single { + + private static Single s = new Single(); // 饿汉式 + + private Single() { + + } + + public static Single getInstance() { + return s; + } +} +``` +懒汉模式 – 通常被称为延迟加载。注意存在线程安全问题. +```java +class Single2 { + private static Single2 s = null; // 懒汉式(线程不安全) + + private Single2() { + } + + public static Single2 getInstance() { + if (s == null) { + s = new Single2(); + } + return s; + } +} +``` + +//但是懒汉单例模式会有线程安全问题,如果,小明先拿到了cpu的使用权,判断了一下s是null,正准备创建一个新的single对象的时候,大明抢到了cpu使用权,然后大明成功创建了一个新的single对象s1,此时小明重新抢回使用权,他不会再重新判断对象是否存在了,而是直接创建一个新的single对象s2,所以这个时候就会有两个single对象被创建了,就不是单例了,所以这就是懒汉单例模式会出现的线程安全问题。怎么解决呢,加一个锁就可以了。 +```java +class Single2 { + private static Single2 s = null; +// 改进懒汉式(线程安全,效率不高,两次判断) + + private Single2() { + + } + + public static Single2 getInstance() { + synchronized("锁"){ + if (s == null) { + s = new Single2(); + } + } + return s; + } +} + +//但是加上锁之后,这个时候每次都要判断一次锁的状态和s的状态,两次判断效率不高,所以怎么解决呢,在外层再加上一层判断,可以大大提高效率。 +class Single2 { + private static Single2 s = null; +// 改进懒汉式(线程安全,效率高,一次判断) + + private Single2() { + + } + + public static Single2 getInstance() { + if (s == null) { + synchronized("锁"){ + if (s == null) { + s = new Single2(); + } + } +} + return s; + } +} + +``` + +## 26. transient关键字 +我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化。 + +然而在实际开发过程中,我们常常会遇到这样的问题,这个类的有些属性需要序列化,而其他属性不需要被序列化,打个比方,如果一个用户有一些敏感信息(如密码,银行卡号等),为了安全起见,不希望在网络操作(主要涉及到序列化操作,本地序列化缓存也适用)中被传输,这些信息对应的变量就可以加上transient关键字。换句话说,这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化。 + +总之,java 的transient关键字为我们提供了便利,你只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。 + +1. 一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。 +2. transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。 +3. 被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。 + +第三点确实没错(一个静态变量不管是否被transient修饰,均不能被序列化),反序列化后类中static型变量username的值为当前JVM中对应static变量的值,这个值是JVM中的不是反序列化得出的 + +我们知道在Java中,对象的序列化可以通过实现两种接口来实现,若实现的是Serializable接口,则所有的序列化将会自动进行,若实现的是Externalizable接口,则没有任何东西可以自动序列化,需要在writeExternal方法中进行手工指定所要序列化的变量,这与是否被transient修饰无关。 + +[原文链接](http://www.cnblogs.com/lanxuezaipiao/p/3369962.html) + +## 27. volatile关键字 + +一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: + +1. 保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。 +2. 禁止进行指令重排序。 + +synchronized关键字是防止多个线程同时执行一段代码,那么就会很影响程序执行效率,而volatile关键字在某些情况下性能要优于synchronized,但是要注意volatile关键字是无法替代synchronized关键字的,因为volatile关键字无法保证操作的原子性。通常来说,使用volatile必须具备以下2个条件: + +1. 对变量的写操作不依赖于当前值 +2. 该变量没有包含在具有其他变量的不变式中 + +实际上,这些条件表明,可以被写入 volatile 变量的这些有效值独立于任何程序的状态,包括变量的当前状态。 +事实上,我的理解就是上面的2个条件需要保证操作是原子性操作,才能保证使用volatile关键字的程序在并发时能够正确执行。 +下面列举几个Java中使用volatile的几个场景: +- 状态标记量 +- double-check(单例模式) +   + +[原文链接](https://www.cnblogs.com/dolphin0520/p/3920373.html) + + +## Todo: Fail-fast +https://www.cnblogs.com/dolphin0520/p/3920373.html +## From b65dd4cc121e1ac3f0ccf49c920da843f3971a5b Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 20 Apr 2018 00:13:35 -0500 Subject: [PATCH 0504/2496] =?UTF-8?q?Update=20=E5=BC=80=E5=8F=91=E5=B2=97?= =?UTF-8?q?=E4=BD=8D(Java)=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...1\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git "a/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" "b/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" index a179dc666..693d0d916 100644 --- "a/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" +++ "b/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" @@ -358,12 +358,13 @@ synchronized关键字是防止多个线程同时执行一段代码,那么就 下面列举几个Java中使用volatile的几个场景: - 状态标记量 - double-check(单例模式) +   [原文链接](https://www.cnblogs.com/dolphin0520/p/3920373.html) -## Todo: Fail-fast +## Todo: Fail-fast, spring ioc, rpc, 多线程,线程池,mybatis #和$的区别,concurrentHashmap,linkedhashmap,socket,redis原理 https://www.cnblogs.com/dolphin0520/p/3920373.html ## From 95fa52c042a019fd1cf25b3afddcc8ca427316e5 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 20 Apr 2018 05:55:26 -0500 Subject: [PATCH 0505/2496] =?UTF-8?q?Update=20=E5=BC=80=E5=8F=91=E5=B2=97?= =?UTF-8?q?=E4=BD=8D(Java)=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\275\215(Java)\346\200\273\347\273\223.md" | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git "a/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" "b/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" index 693d0d916..bece3b49f 100644 --- "a/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" +++ "b/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" @@ -358,12 +358,27 @@ synchronized关键字是防止多个线程同时执行一段代码,那么就 下面列举几个Java中使用volatile的几个场景: - 状态标记量 - double-check(单例模式) - -   [原文链接](https://www.cnblogs.com/dolphin0520/p/3920373.html) +## 28. 强制缓存和协商缓存 +1. 强制缓存是浏览器根据缓存有效期Expires:绝对时间和Cach-Control:max-age:相对时间,来计算内容是否过期,没过期直接使用缓存 +2. 协商缓存是强制缓存阶段判断过期了,再与服务器沟通,让服务器判定资源是否过期,未过期返回304状态码,过期了返回200,响应体里返回相应资源 + +- If-Modified-Since:服务器上次返回的Last-Modified值 +- If-None-Match:服务器上次返回的Etag值 + +- **Q1:**有了Expires为什么还要Cache-Control:max-age? + +Expires返回的是绝对时间,绝对时间有偏差(个人觉得可能时区不一样,服务器返回的时间到了浏览器可能已经是过去两小时的时间了,于是引入max-age相对时间,让浏览器根据自己的时间判定) + +- **Q2:**有了If-Modified-Since为什么还要If-None-Match? + +If-Modified-Since返回的是资源最后修改时间,想象一下打开文件,Ctrl+S保存一下,这文件的修改时间就变了,但是内容并没有变,于是引入If-None-Match,值为服务器上次返回的Etag值,Etag值是对文件内容进行哈希得到的值,内容不变,值不变。将这两个字段发给服务器,让服务器自己判决。 + + + ## Todo: Fail-fast, spring ioc, rpc, 多线程,线程池,mybatis #和$的区别,concurrentHashmap,linkedhashmap,socket,redis原理 https://www.cnblogs.com/dolphin0520/p/3920373.html From bceee63fa798c69307eed737c3f5424cae9a0218 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sun, 22 Apr 2018 23:28:41 -0500 Subject: [PATCH 0506/2496] =?UTF-8?q?Update=20=E5=BC=80=E5=8F=91=E5=B2=97?= =?UTF-8?q?=E4=BD=8D(Java)=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\275\215(Java)\346\200\273\347\273\223.md" | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git "a/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" "b/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" index bece3b49f..aa27680fb 100644 --- "a/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" +++ "b/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" @@ -378,11 +378,43 @@ Expires返回的是绝对时间,绝对时间有偏差(个人觉得可能时 If-Modified-Since返回的是资源最后修改时间,想象一下打开文件,Ctrl+S保存一下,这文件的修改时间就变了,但是内容并没有变,于是引入If-None-Match,值为服务器上次返回的Etag值,Etag值是对文件内容进行哈希得到的值,内容不变,值不变。将这两个字段发给服务器,让服务器自己判决。 +## 29. RESTful API的好处以及与json-rpc的区别 +https://www.zhihu.com/question/28570307 -## Todo: Fail-fast, spring ioc, rpc, 多线程,线程池,mybatis #和$的区别,concurrentHashmap,linkedhashmap,socket,redis原理 +## 30. mybatis #和$的区别 +- ```#{ }``` 被解析为一个参数占位符 ```?```, 到时候根据输入的参数来替换. ```#{ }```的变量的替换是在 DBMS 中 +- ```${ }```仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换. ```${ }``` 的变量的替换阶段是在动态 SQL 解析阶段 + +## 31. Spring IOC 和 AOP +http://www.360doc.com/content/15/0116/21/12385684_441408260.shtml + +简单来说, +- IOC (Inversion of Control)就是将对象引用,创建,销毁等操作交给Spring而不是对象本身 +- AOP (Aspect Oriented Programming)就是将不同类和方法中的相同的模块全部抽离出来单独搞一个模块,以提高复用性。其实就是将那些与业务无关,但却被业务共同调用的逻辑或责任封装起来。 + +## 32. servelet生命周期 +Servlet 生命周期:Servlet 加载--->实例化--->服务--->销毁。 + +三个方法: +1. init() +2. service() +3. destroy() + +八大步骤: +1. Web Client 向Servlet容器(Tomcat)发出Http请求 +2. Servlet容器接收Web Client的请求 +3. Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中。 +4. Servlet容器创建一个HttpResponse对象 +5. Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给 HttpServlet 对象。 +6. HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息。 +7. HttpServlet调用HttpResponse对象的有关方法,生成响应数据。 +8. Servlet容器把HttpServlet的响应结果传给Web Client。 + + +## Todo: Fail-fast, rpc, 多线程,线程池,,linkedhashmap,socket,redis原理 https://www.cnblogs.com/dolphin0520/p/3920373.html -## + From 0c60a13ea6470a1b4c83555abad5f514af4147a3 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sun, 22 Apr 2018 23:29:43 -0500 Subject: [PATCH 0507/2496] =?UTF-8?q?Update=20=E5=BC=80=E5=8F=91=E5=B2=97?= =?UTF-8?q?=E4=BD=8D(Java)=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" "b/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" index aa27680fb..1163c2c5c 100644 --- "a/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" +++ "b/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" @@ -395,12 +395,12 @@ http://www.360doc.com/content/15/0116/21/12385684_441408260.shtml ## 32. servelet生命周期 Servlet 生命周期:Servlet 加载--->实例化--->服务--->销毁。 -三个方法: +**三个方法**: 1. init() 2. service() 3. destroy() -八大步骤: +**八大步骤**: 1. Web Client 向Servlet容器(Tomcat)发出Http请求 2. Servlet容器接收Web Client的请求 3. Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中。 From 8a168d394674dc8c65bcffcc05f84f51b47541c4 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Mon, 23 Apr 2018 14:01:34 -0500 Subject: [PATCH 0508/2496] =?UTF-8?q?Update=20=E5=BC=80=E5=8F=91=E5=B2=97?= =?UTF-8?q?=E4=BD=8D(Java)=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" | 1 + 1 file changed, 1 insertion(+) diff --git "a/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" "b/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" index 1163c2c5c..0bbf8e888 100644 --- "a/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" +++ "b/docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" @@ -411,6 +411,7 @@ Servlet 生命周期:Servlet 加载--->实例化--->服务--->销毁。 8. Servlet容器把HttpServlet的响应结果传给Web Client。 + ## Todo: Fail-fast, rpc, 多线程,线程池,,linkedhashmap,socket,redis原理 https://www.cnblogs.com/dolphin0520/p/3920373.html From 47a2584ef20eee6739e19656311850d73d9e1e98 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 25 Apr 2018 01:22:52 -0500 Subject: [PATCH 0509/2496] Create NextNodeInOrderTree.md --- .../Others/NextNodeInOrderTree.md | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 docs/Algorithm_Templates/Others/NextNodeInOrderTree.md diff --git a/docs/Algorithm_Templates/Others/NextNodeInOrderTree.md b/docs/Algorithm_Templates/Others/NextNodeInOrderTree.md new file mode 100644 index 000000000..28a102486 --- /dev/null +++ b/docs/Algorithm_Templates/Others/NextNodeInOrderTree.md @@ -0,0 +1,45 @@ +``` python + 8 + / + 5 + / \ + 3 6 + / \ \ + 1 4 7 + + +class Node { + Node parent, lc, rc; + int val; +} +``` + +1. 首先判断其自有无右孩子,若有,则取其右子树的最左节点; 若无,则开始2 + + +2. 它是其父亲节点的左孩子,则其父亲节点 + + +2. 它是其父亲节点的右孩子,则从其父亲开始往上追溯到第一个向右的节点,如果没有这个节点或者说没有父亲节点,则无下一个节点,若有则取之 + + +```python +def nextNode(node): + def leftest(node): + while node.lc: + node = node.lc + return node + if node.rc: + return leftest(node.rc) + if not node.parent: + return None + if node == node.parent.lc: + return node.parent + elif node == node.parent.rc: + while node.parent.parent: + if node.parent != node.parent.parent.lc: + node = node.parent + else: + return node.parent.parent + return None +``` From 3bc947ace97e16e9a822631da2927cee2eeff83e Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 26 Apr 2018 02:51:16 -0500 Subject: [PATCH 0510/2496] add java and c++ version --- .../{ => C++}/Cipher/README.md | 0 .../{ => C++}/Compression/README.md | 0 .../{ => C++}/Conversion/README.md | 0 .../{ => C++}/Data_Structure/Graph/README.md | 0 .../Data_Structure/HashMap/README.md | 0 .../Data_Structure/HashTable/README.md | 0 .../{ => C++}/Data_Structure/Heqp/README.md | 0 .../Data_Structure/LinkedList/README.md | 0 .../{ => C++}/Data_Structure/Matrix/README.md | 0 .../{ => C++}/Data_Structure/Queue/README.md | 0 .../{ => C++}/Data_Structure/README.md | 0 .../{ => C++}/Data_Structure/Stack/README.md | 0 .../{ => C++}/Data_Structure/Tree/README.md | 0 .../{ => C++}/Dynamic_Programming/README.md | 0 .../{ => C++}/Hash/README.md | 0 .../{ => C++}/Others/NextNodeInOrderTree.md | 0 .../{ => C++}/Others/TopKWords.java | 0 .../{ => C++}/Others/words.txt | 0 docs/Algorithm_Templates/{ => C++}/README.md | 0 .../{ => C++}/Search/README.md | 0 .../{ => C++}/Sort/BubbleSort.py | 0 .../{ => C++}/Sort/InsertSort.py | 0 .../{ => C++}/Sort/MergeSort.py | 0 .../{ => C++}/Sort/QuickSort.py | 0 .../{ => C++}/Sort/README.md | 0 .../{ => C++}/Sort/RadixSort.py | 0 .../{ => C++}/Sort/SelectionSort.py | 0 .../{ => C++}/Sort/ShellSort.py | 0 .../{ => C++}/Traversals/README.md | 0 .../Algorithm_Templates/Java/Cipher/README.md | 0 .../Java/Compression/README.md | 1 + .../Java/Conversion/README.md | 0 .../Java/Data_Structure/Graph/README.md | 15 + .../Java/Data_Structure/HashMap/README.md | 15 + .../Java/Data_Structure/HashTable/README.md | 15 + .../Java/Data_Structure/Heqp/README.md | 15 + .../Java/Data_Structure/LinkedList/README.md | 15 + .../Java/Data_Structure/Matrix/README.md | 15 + .../Java/Data_Structure/Queue/README.md | 15 + .../Java/Data_Structure/README.md | 1 + .../Java/Data_Structure/Stack/README.md | 15 + .../Java/Data_Structure/Tree/README.md | 15 + .../Java/Dynamic_Programming/README.md | 0 docs/Algorithm_Templates/Java/Hash/README.md | 0 .../Java/Others/NextNodeInOrderTree.md | 45 ++ .../Java/Others/TopKWords.java | 86 ++++ .../Algorithm_Templates/Java/Others/words.txt | 11 + docs/Algorithm_Templates/Java/README.md | 16 + .../Algorithm_Templates/Java/Search/README.md | 0 .../Java/Sort/BubbleSort.py | 19 + .../Java/Sort/InsertSort.py | 24 ++ .../Java/Sort/MergeSort.py | 35 ++ .../Java/Sort/QuickSort.py | 35 ++ docs/Algorithm_Templates/Java/Sort/README.md | 16 + .../Java/Sort/RadixSort.py | 46 +++ .../Java/Sort/SelectionSort.py | 28 ++ .../Java/Sort/ShellSort.py | 25 ++ .../Java/Traversals/README.md | 0 .../Python/Cipher/README.md | 0 .../Python/Compression/README.md | 1 + .../Python/Conversion/README.md | 0 .../Python/Data_Structure/Graph/README.md | 15 + .../Python/Data_Structure/HashMap/README.md | 15 + .../Python/Data_Structure/HashTable/README.md | 15 + .../Python/Data_Structure/Heqp/README.md | 15 + .../Data_Structure/LinkedList/README.md | 15 + .../Python/Data_Structure/Matrix/README.md | 15 + .../Python/Data_Structure/Queue/README.md | 15 + .../Python/Data_Structure/README.md | 1 + .../Python/Data_Structure/Stack/README.md | 15 + .../Python/Data_Structure/Tree/README.md | 15 + .../Python/Dynamic_Programming/README.md | 0 .../Algorithm_Templates/Python/Hash/README.md | 0 .../Python/Others/NextNodeInOrderTree.md | 45 ++ .../Python/Others/TopKWords.java | 86 ++++ .../Python/Others/words.txt | 11 + docs/Algorithm_Templates/Python/README.md | 16 + .../Python/Search/README.md | 0 .../Python/Sort/BubbleSort.py | 19 + .../Python/Sort/InsertSort.py | 24 ++ .../Python/Sort/MergeSort.py | 35 ++ .../Python/Sort/QuickSort.py | 35 ++ .../Algorithm_Templates/Python/Sort/README.md | 16 + .../Python/Sort/RadixSort.py | 46 +++ .../Python/Sort/SelectionSort.py | 28 ++ .../Python/Sort/ShellSort.py | 25 ++ .../Python/Traversals/README.md | 0 ...wo_sum \344\270\212\345\215\2102.49.12.md" | 0 ...umbers \344\270\212\345\215\2102.49.12.md" | 0 ...acters \344\270\212\345\215\2102.49.12.md" | 0 ...arrays \344\270\212\345\215\2102.49.12.md" | 0 ...string \344\270\212\345\215\2102.49.12.md" | 0 ...ersion \344\270\212\345\215\2102.49.12.md" | 0 ...nteger \344\270\212\345\215\2102.49.12.md" | 0 ...(atoi) \344\270\212\345\215\2102.49.12.md" | 0 ...Number \344\270\212\345\215\2102.49.12.md" | 0 ...tching \344\270\212\345\215\2102.49.12.md" | 0 ..._water \344\270\212\345\215\2102.49.12.md" | 0 ..._Roman \344\270\212\345\215\2102.49.12.md" | 0 ...nteger \344\270\212\345\215\2102.49.12.md" | 0 ...prefix \344\270\212\345\215\2102.49.13.md" | 0 ...._3sum \344\270\212\345\215\2102.49.13.md" | 0 ...losest \344\270\212\345\215\2102.49.13.md" | 0 ...number \344\270\212\345\215\2102.49.13.md" | 0 ...._4sum \344\270\212\345\215\2102.49.13.md" | 0 ...f_list \344\270\212\345\215\2102.49.13.md" | 0 ...theses \344\270\212\345\215\2102.49.13.md" | 0 ..._lists \344\270\212\345\215\2102.49.13.md" | 0 ...theses \344\270\212\345\215\2102.49.13.md" | 0 ..._lists \344\270\212\345\215\2102.49.13.md" | 0 ..._pairs \344\270\212\345\215\2102.49.13.md" | 0 ..._Array \344\270\212\345\215\2102.49.13.md" | 0 ...lement \344\270\212\345\215\2102.49.13.md" | 0 ...rstr() \344\270\212\345\215\2102.49.13.md" | 0 ..._Words \344\270\212\345\215\2102.49.13.md" | 0 ...tation \344\270\212\345\215\2102.49.13.md" | 0 ..._array \344\270\212\345\215\2102.49.13.md" | 0 ... Range \344\270\212\345\215\2102.49.13.md" | 0 ...sition \344\270\212\345\215\2102.49.13.md" | 0 ...nd_Say \344\270\212\345\215\2102.49.13.md" | 0 ...on_sum \344\270\212\345\215\2102.49.13.md" | 0 ...sum_ii \344\270\212\345\215\2102.49.13.md" | 0 ..._water \344\270\212\345\215\2102.49.13.md" | 0 ...trings \344\270\212\345\215\2102.49.13.md" | 0 ...tching \344\270\212\345\215\2102.49.13.md" | 0 ...ame_II \344\270\212\345\215\2102.49.13.md" | 0 ...ations \344\270\212\345\215\2102.49.13.md" | 0 ...ons_ii \344\270\212\345\215\2102.49.13.md" | 0 ..._image \344\270\212\345\215\2102.49.13.md" | 0 ...python \344\270\212\345\215\2102.49.13.md" | 0 ...(x,_n) \344\270\212\345\215\2102.49.13.md" | 0 ...queens \344\270\212\345\215\2102.49.13.md" | 0 ...ens_ii \344\270\212\345\215\2102.49.13.md" | 0 ...barray \344\270\212\345\215\2102.49.13.md" | 0 ...matrix \344\270\212\345\215\2102.49.13.md" | 0 ...p_game \344\270\212\345\215\2102.49.13.md" | 0 ...ervals \344\270\212\345\215\2102.49.13.md" | 0 ...t_word \344\270\212\345\215\2102.49.13.md" | 0 ...rix_ii \344\270\212\345\215\2102.49.13.md" | 0 ...quence \344\270\212\345\215\2102.49.13.md" | 0 ...e_list \344\270\212\345\215\2102.49.13.md" | 0 ...th_sum \344\270\212\345\215\2102.49.13.md" | 0 ...ths_ii \344\270\212\345\215\2102.49.13.md" | 0 ...us_one \344\270\212\345\215\2102.49.13.md" | 0 ...binary \344\270\212\345\215\2102.49.13.md" | 0 ...qrt(x) \344\270\212\345\215\2102.49.13.md" | 0 ...Stairs \344\270\212\345\215\2102.49.13.md" | 0 ...stance \344\270\212\345\215\2102.49.13.md" | 0 ...Zeroes \344\270\212\345\215\2102.49.13.md" | 0 ...matrix \344\270\212\345\215\2102.49.13.md" | 0 ...colors \344\270\212\345\215\2102.49.13.md" | 0 ...string \344\270\212\345\215\2102.49.13.md" | 0 ...ations \344\270\212\345\215\2102.49.13.md" | 0 ...bsets \344\270\212\345\215\2102.49.13.md" | 0 ...search \344\270\212\345\215\2102.49.13.md" | 0 ...ist_ii \344\270\212\345\215\2102.49.13.md" | 0 ...d_list \344\270\212\345\215\2102.49.13.md" | 0 ...n_list \344\270\212\345\215\2102.49.13.md" | 0 ..._array \344\270\212\345\215\2102.49.13.md" | 0 ...y_code \344\270\212\345\215\2102.49.13.md" | 0 ...ets_ii \344\270\212\345\215\2102.49.13.md" | 0 ...e_ways \344\270\212\345\215\2102.49.13.md" | 0 ...ist_ii \344\270\212\345\215\2102.49.13.md" | 0 ...resses \344\270\212\345\215\2102.49.13.md" | 0 ...versal \344\270\212\345\215\2102.49.13.md" | 0 ..._trees \344\270\212\345\215\2102.49.13.md" | 0 ...h_tree \344\270\212\345\215\2102.49.13.md" | 0 ...e_tree \344\270\212\345\215\2102.49.13.md" | 0 ...c_tree \344\270\212\345\215\2102.49.13.md" | 0 ...versal \344\270\212\345\215\2102.49.13.md" | 0 ...versal \344\270\212\345\215\2102.49.13.md" | 0 ...y_tree \344\270\212\345\215\2102.49.13.md" | 0 ...versal \344\270\212\345\215\2102.49.13.md" | 0 ...versal \344\270\212\345\215\2102.49.13.md" | 0 ...sal_ii \344\270\212\345\215\2102.49.13.md" | 0 ...h_tree \344\270\212\345\215\2102.49.13.md" | 0 ...h_tree \344\270\212\345\215\2102.49.13.md" | 0 ...y_tree \344\270\212\345\215\2102.49.13.md" | 0 ...y_tree \344\270\212\345\215\2102.49.13.md" | 0 ...th_sum \344\270\212\345\215\2102.49.13.md" | 0 ...sum_ii \344\270\212\345\215\2102.49.13.md" | 0 ...d_list \344\270\212\345\215\2102.49.13.md" | 0 ...h_node \344\270\212\345\215\2102.49.13.md" | 0 ...iangle \344\270\212\345\215\2102.49.13.md" | 0 ...gle II \344\270\212\345\215\2102.49.13.md" | 0 ...iangle \344\270\212\345\215\2102.49.13.md" | 0 ..._Stock \344\270\212\345\215\2102.49.13.md" | 0 ...ndrome \344\270\212\345\215\2102.49.13.md" | 0 ...der II \344\270\212\345\215\2102.49.13.md" | 0 ...ladder \344\270\212\345\215\2102.49.13.md" | 0 ...quence \344\270\212\345\215\2102.49.13.md" | 0 ...umbers \344\270\212\345\215\2102.49.13.md" | 0 ...egions \344\270\212\345\215\2102.49.13.md" | 0 ...ioning \344\270\212\345\215\2102.49.13.md" | 0 ..._graph \344\270\212\345\215\2102.49.13.md" | 0 ...number \344\270\212\345\215\2102.49.13.md" | 0 ..._break \344\270\212\345\215\2102.49.13.md" | 0 ...eak_ii \344\270\212\345\215\2102.49.13.md" | 0 ..._cycle \344\270\212\345\215\2102.49.13.md" | 0 ...cle_II \344\270\212\345\215\2102.49.13.md" | 0 ...r_list \344\270\212\345\215\2102.49.13.md" | 0 ...versal \344\270\212\345\215\2102.49.13.md" | 0 ...versal \344\270\212\345\215\2102.49.13.md" | 0 ...t_list \344\270\212\345\215\2102.49.13.md" | 0 ...t_list \344\270\212\345\215\2102.49.13.md" | 0 ...tation \344\270\212\345\215\2102.49.13.md" | 0 ...string \344\270\212\345\215\2102.49.13.md" | 0 ...barray \344\270\212\345\215\2102.49.13.md" | 0 ..._array \344\270\212\345\215\2102.49.13.md" | 0 ..._stack \344\270\212\345\215\2102.49.13.md" | 0 ...acters \344\270\212\345\215\2102.49.13.md" | 0 ..._lists \344\270\212\345\215\2102.49.13.md" | 0 ...lement \344\270\212\345\215\2102.49.13.md" | 0 ...umbers \344\270\212\345\215\2102.49.13.md" | 0 ...ecimal \344\270\212\345\215\2102.49.13.md" | 0 ...sorted \344\270\212\345\215\2102.49.13.md" | 0 ..._title \344\270\212\345\215\2102.49.13.md" | 0 ...lement \344\270\212\345\215\2102.49.13.md" | 0 ...number \344\270\212\345\215\2102.49.13.md" | 0 ...erator \344\270\212\345\215\2102.49.13.md" | 0 ..._array \344\270\212\345\215\2102.49.13.md" | 0 ...1_bits \344\270\212\345\215\2102.49.13.md" | 0 ...robber \344\270\212\345\215\2102.49.13.md" | 0 ...e_view \344\270\212\345\215\2102.49.13.md" | 0 ...slands \344\270\212\345\215\2102.49.13.md" | 0 ...ements \344\270\212\345\215\2102.49.13.md" | 0 ...primes \344\270\212\345\215\2102.49.13.md" | 0 ...trings \344\270\212\345\215\2102.49.13.md" | 0 ...d_list \344\270\212\345\215\2102.49.13.md" | 0 ...hedule \344\270\212\345\215\2102.49.13.md" | 0 ..._tree) \344\270\212\345\215\2102.49.13.md" | 0 ...ule_ii \344\270\212\345\215\2102.49.13.md" | 0 ...design \344\270\212\345\215\2102.49.13.md" | 0 ...ber_ii \344\270\212\345\215\2102.49.13.md" | 0 ...um_iii \344\270\212\345\215\2102.49.13.md" | 0 ...licate \344\270\212\345\215\2102.49.13.md" | 0 ...oblem \344\270\212\345\215\2102.49.13.md" | 0 ...ate_ii \344\270\212\345\215\2102.49.13.md" | 0 ...square \344\270\212\345\215\2102.49.13.md" | 0 ..._nodes \344\270\212\345\215\2102.49.13.md" | 0 ...e_area \344\270\212\345\215\2102.49.13.md" | 0 ...lator \344\270\212\345\215\2102.49.13.md" | 0 ...queues \344\270\212\345\215\2102.49.13.md" | 0 ...y_tree \344\270\212\345\215\2102.49.13.md" | 0 ...tor_ii \344\270\212\345\215\2102.49.13.md" | 0 ...ranges \344\270\212\345\215\2102.49.13.md" | 0 ...ent_ii \344\270\212\345\215\2102.49.13.md" | 0 ..._a_bst \344\270\212\345\215\2102.49.13.md" | 0 ...of_Two \344\270\212\345\215\2102.49.13.md" | 0 ...stacks \344\270\212\345\215\2102.49.13.md" | 0 ...d_list \344\270\212\345\215\2102.49.13.md" | 0 ...h_tree \344\270\212\345\215\2102.49.13.md" | 0 ...y_tree \344\270\212\345\215\2102.49.13.md" | 0 ...d_list \344\270\212\345\215\2102.49.13.md" | 0 ...t_self \344\270\212\345\215\2102.49.13.md" | 0 ...rix_ii \344\270\212\345\215\2102.49.13.md" | 0 ...nagram \344\270\212\345\215\2102.49.13.md" | 0 ... Rooms \344\270\212\345\215\2102.49.13.md" | 0 ...h_Tree \344\270\212\345\215\2102.49.13.md" | 0 ... House \344\270\212\345\215\2102.49.13.md" | 0 ..._paths \344\270\212\345\215\2102.49.13.md" | 0 ...Digits \344\270\212\345\215\2102.49.13.md" | 0 ...d Tree \344\270\212\345\215\2102.49.13.md" | 0 ...number \344\270\212\345\215\2102.49.13.md" | 0 ...ber_ii \344\270\212\345\215\2102.49.13.md" | 0 ...use II \344\270\212\345\215\2102.49.13.md" | 0 ...tation \344\270\212\345\215\2102.49.13.md" | 0 ...ion II \344\270\212\345\215\2102.49.13.md" | 0 ...number \344\270\212\345\215\2102.49.13.md" | 0 ... Value \344\270\212\345\215\2102.49.13.md" | 0 ... Fence \344\270\212\345\215\2102.49.13.md" | 0 ...ebrity \344\270\212\345\215\2102.49.13.md" | 0 ...ersion \344\270\212\345\215\2102.49.13.md" | 0 ...quares \344\270\212\345\215\2102.49.13.md" | 0 ...e_Sort \344\270\212\345\215\2102.49.13.md" | 0 ...zeroes \344\270\212\345\215\2102.49.13.md" | 0 ...in_bst \344\270\212\345\215\2102.49.13.md" | 0 ... Gates \344\270\212\345\215\2102.49.13.md" | 0 ...f_life \344\270\212\345\215\2102.49.13.md" | 0 ...attern \344\270\212\345\215\2102.49.13.md" | 0 ...m_game \344\270\212\345\215\2102.49.13.md" | 0 ... Point \344\270\212\345\215\2102.49.13.md" | 0 ...quence \344\270\212\345\215\2102.49.13.md" | 0 ...d_cows \344\270\212\345\215\2102.49.13.md" | 0 ...quence \344\270\212\345\215\2102.49.13.md" | 0 ...utable \344\270\212\345\215\2102.49.13.md" | 0 ...etters \344\270\212\345\215\2102.49.13.md" | 0 ...itcher \344\270\212\345\215\2102.49.13.md" | 0 ...Change \344\270\212\345\215\2102.49.13.md" | 0 ... Graph \344\270\212\345\215\2102.49.13.md" | 0 ...ort_II \344\270\212\345\215\2102.49.13.md" | 0 ..._three \344\270\212\345\215\2102.49.13.md" | 0 ...d_list \344\270\212\345\215\2102.49.13.md" | 0 ...quence \344\270\212\345\215\2102.49.13.md" | 0 ...er_iii \344\270\212\345\215\2102.49.13.md" | 0 ...g Bits \344\270\212\345\215\2102.49.13.md" | 0 ...ht Sum \344\270\212\345\215\2102.49.13.md" | 0 ...erator \344\270\212\345\215\2102.49.13.md" | 0 ...f_Four \344\270\212\345\215\2102.49.13.md" | 0 ...string \344\270\212\345\215\2102.49.13.md" | 0 ...String \344\270\212\345\215\2102.49.13.md" | 0 ...arrays \344\270\212\345\215\2102.49.13.md" | 0 ...ays_ii \344\270\212\345\215\2102.49.13.md" | 0 ...e Game \344\270\212\345\215\2102.49.13.md" | 0 ...Sum II \344\270\212\345\215\2102.49.13.md" | 0 ...y Tree \344\270\212\345\215\2102.49.13.md" | 0 ...square \344\270\212\345\215\2102.49.13.md" | 0 ...d List \344\270\212\345\215\2102.49.13.md" | 0 ...tegers \344\270\212\345\215\2102.49.13.md" | 0 ..._Lower \344\270\212\345\215\2102.49.13.md" | 0 ...sum_iv \344\270\212\345\215\2102.49.13.md" | 0 ...matrix \344\270\212\345\215\2102.49.13.md" | 0 ...m O(1) \344\270\212\345\215\2102.49.13.md" | 0 ...llowed \344\270\212\345\215\2102.49.13.md" | 0 ...m_node \344\270\212\345\215\2102.49.13.md" | 0 ...m_note \344\270\212\345\215\2102.49.13.md" | 0 ... Array \344\270\212\345\215\2102.49.13.md" | 0 ...string \344\270\212\345\215\2102.49.13.md" | 0 ...e_Path \344\270\212\345\215\2102.49.13.md" | 0 ...erence \344\270\212\345\215\2102.49.13.md" | 0 ...quence \344\270\212\345\215\2102.49.13.md" | 0 ...string \344\270\212\345\215\2102.49.13.md" | 0 ... Digit \344\270\212\345\215\2102.49.13.md" | 0 ..._watch \344\270\212\345\215\2102.49.13.md" | 0 ...leaves \344\270\212\345\215\2102.49.13.md" | 0 ...ecimal \344\270\212\345\215\2102.49.13.md" | 0 ...Height \344\270\212\345\215\2102.49.13.md" | 0 ...z_buzz \344\270\212\345\215\2102.49.13.md" | 0 ...Slices \344\270\212\345\215\2102.49.13.md" | 0 ...number \344\270\212\345\215\2102.49.13.md" | 0 ...trings \344\270\212\345\215\2102.49.13.md" | 0 ...et Sum \344\270\212\345\215\2102.49.13.md" | 0 ..._Array \344\270\212\345\215\2102.49.13.md" | 0 ...Square \344\270\212\345\215\2102.49.13.md" | 0 ...string \344\270\212\345\215\2102.49.13.md" | 0 ...um_iii \344\270\212\345\215\2102.49.13.md" | 0 ...String \344\270\212\345\215\2102.49.13.md" | 0 ...Parser \344\270\212\345\215\2102.49.13.md" | 0 ..._coins \344\270\212\345\215\2102.49.13.md" | 0 ..._Array \344\270\212\345\215\2102.49.13.md" | 0 ... a BST \344\270\212\345\215\2102.49.13.md" | 0 ...ements \344\270\212\345\215\2102.49.13.md" | 0 ...attern \344\270\212\345\215\2102.49.13.md" | 0 ...stance \344\270\212\345\215\2102.49.13.md" | 0 ...imeter \344\270\212\345\215\2102.49.13.md" | 0 ...String \344\270\212\345\215\2102.49.13.md" | 0 ...olygon \344\270\212\345\215\2102.49.13.md" | 0 ...lement \344\270\212\345\215\2102.49.13.md" | 0 ...stance \344\270\212\345\215\2102.49.13.md" | 0 ...e_Ones \344\270\212\345\215\2102.49.13.md" | 0 ...Fence \344\270\212\345\215\2102.49.13.md" | 0 ..._Lists \344\270\212\345\215\2102.49.13.md" | 0 ...trings \344\270\212\345\215\2102.49.13.md" | 0 ...Circle \344\270\212\345\215\2102.49.13.md" | 0 ..._Array \344\270\212\345\215\2102.49.13.md" | 0 ...her_II \344\270\212\345\215\2102.49.13.md" | 0 ...t_Time \344\270\212\345\215\2102.49.13.md" | 0 ...l_Game \344\270\212\345\215\2102.49.13.md" | 0 ...e_Path \344\270\212\345\215\2102.49.13.md" | 0 ...d_earn \344\270\212\345\215\2102.49.13.md" | 0 ...ppings \344\270\212\345\215\2102.49.13.md" | 0 ...README \344\270\212\345\215\2102.49.13.md" | 0 ...h \344\270\215\346\230\223\345\206\231.md" | 0 .../Data Structure and Algorthim Review.md" | 0 .../Dynamic Programming.md" | 0 ...hing Algorithms \342\200\223 topcoder.pdf" | Bin ...13\347\232\204\350\275\254\346\215\242.md" | 0 .../LinkedList\346\212\200\345\267\247.md" | 0 .../Maximal Square.pdf" | Bin ...00\345\267\247\347\254\224\350\256\260.py" | 0 .../Range Sum Query 2D - Immutable.pdf" | Bin .../Recusrion & BackTracking.md" | 0 .../backtracking\346\200\235\350\267\257.md" | 0 ..._a_linked_list\351\227\256\351\242\230.md" | 0 ...60\347\232\204\346\200\235\350\267\257.md" | 0 ...47\232\204\345\220\204\347\247\215pass.md" | 0 .../slide_windows_template.md" | 0 ...\214_graph_search\357\274\214_dfs,_bfs.md" | 0 .../\344\275\215\350\277\220\347\256\227.md" | 0 ...22\345\210\227\347\256\227\346\263\225.md" | 0 .../\345\205\253\346\216\222\345\272\217.md" | 0 ...06\345\220\210\351\227\256\351\242\230.md" | 0 .../\346\200\273\347\273\223.md" | 0 ...04\345\220\210\351\227\256\351\242\230.md" | 0 .../\351\200\222\345\275\222_recursion.md" | 0 ...wo_sum \344\270\212\345\215\2102.49.12.md" | 43 ++ ...umbers \344\270\212\345\215\2102.49.12.md" | 37 ++ ...acters \344\270\212\345\215\2102.49.12.md" | 84 ++++ ...arrays \344\270\212\345\215\2102.49.12.md" | 260 ++++++++++++ ...string \344\270\212\345\215\2102.49.12.md" | 241 +++++++++++ ...ersion \344\270\212\345\215\2102.49.12.md" | 67 +++ ...nteger \344\270\212\345\215\2102.49.12.md" | 65 +++ ...(atoi) \344\270\212\345\215\2102.49.12.md" | 53 +++ ...Number \344\270\212\345\215\2102.49.12.md" | 31 ++ ...tching \344\270\212\345\215\2102.49.12.md" | 229 +++++++++++ ..._water \344\270\212\345\215\2102.49.12.md" | 112 +++++ ..._Roman \344\270\212\345\215\2102.49.12.md" | 71 ++++ ...nteger \344\270\212\345\215\2102.49.12.md" | 82 ++++ ...prefix \344\270\212\345\215\2102.49.13.md" | 77 ++++ ...._3sum \344\270\212\345\215\2102.49.13.md" | 106 +++++ ...losest \344\270\212\345\215\2102.49.13.md" | 51 +++ ...number \344\270\212\345\215\2102.49.13.md" | 51 +++ ...._4sum \344\270\212\345\215\2102.49.13.md" | 136 ++++++ ...f_list \344\270\212\345\215\2102.49.13.md" | 42 ++ ...theses \344\270\212\345\215\2102.49.13.md" | 52 +++ ..._lists \344\270\212\345\215\2102.49.13.md" | 48 +++ ...theses \344\270\212\345\215\2102.49.13.md" | 88 ++++ ..._lists \344\270\212\345\215\2102.49.13.md" | 46 +++ ..._pairs \344\270\212\345\215\2102.49.13.md" | 35 ++ ..._Array \344\270\212\345\215\2102.49.13.md" | 73 ++++ ...lement \344\270\212\345\215\2102.49.13.md" | 25 ++ ...rstr() \344\270\212\345\215\2102.49.13.md" | 47 +++ ..._Words \344\270\212\345\215\2102.49.13.md" | 54 +++ ...tation \344\270\212\345\215\2102.49.13.md" | 103 +++++ ..._array \344\270\212\345\215\2102.49.13.md" | 53 +++ ... Range \344\270\212\345\215\2102.49.13.md" | 77 ++++ ...sition \344\270\212\345\215\2102.49.13.md" | 48 +++ ...nd_Say \344\270\212\345\215\2102.49.13.md" | 98 +++++ ...on_sum \344\270\212\345\215\2102.49.13.md" | 64 +++ ...sum_ii \344\270\212\345\215\2102.49.13.md" | 39 ++ ..._water \344\270\212\345\215\2102.49.13.md" | 39 ++ ...trings \344\270\212\345\215\2102.49.13.md" | 81 ++++ ...tching \344\270\212\345\215\2102.49.13.md" | 44 ++ ...ame_II \344\270\212\345\215\2102.49.13.md" | 43 ++ ...ations \344\270\212\345\215\2102.49.13.md" | 138 +++++++ ...ons_ii \344\270\212\345\215\2102.49.13.md" | 42 ++ ..._image \344\270\212\345\215\2102.49.13.md" | 105 +++++ ...python \344\270\212\345\215\2102.49.13.md" | 28 ++ ...(x,_n) \344\270\212\345\215\2102.49.13.md" | 48 +++ ...queens \344\270\212\345\215\2102.49.13.md" | 38 ++ ...ens_ii \344\270\212\345\215\2102.49.13.md" | 46 +++ ...barray \344\270\212\345\215\2102.49.13.md" | 146 +++++++ ...matrix \344\270\212\345\215\2102.49.13.md" | 139 +++++++ ...p_game \344\270\212\345\215\2102.49.13.md" | 39 ++ ...ervals \344\270\212\345\215\2102.49.13.md" | 31 ++ ...t_word \344\270\212\345\215\2102.49.13.md" | 45 ++ ...rix_ii \344\270\212\345\215\2102.49.13.md" | 67 +++ ...quence \344\270\212\345\215\2102.49.13.md" | 93 +++++ ...e_list \344\270\212\345\215\2102.49.13.md" | 58 +++ ...th_sum \344\270\212\345\215\2102.49.13.md" | 58 +++ ...ths_ii \344\270\212\345\215\2102.49.13.md" | 84 ++++ ...us_one \344\270\212\345\215\2102.49.13.md" | 60 +++ ...binary \344\270\212\345\215\2102.49.13.md" | 31 ++ ...qrt(x) \344\270\212\345\215\2102.49.13.md" | 101 +++++ ...Stairs \344\270\212\345\215\2102.49.13.md" | 99 +++++ ...stance \344\270\212\345\215\2102.49.13.md" | 116 ++++++ ...Zeroes \344\270\212\345\215\2102.49.13.md" | 55 +++ ...matrix \344\270\212\345\215\2102.49.13.md" | 81 ++++ ...colors \344\270\212\345\215\2102.49.13.md" | 54 +++ ...string \344\270\212\345\215\2102.49.13.md" | 44 ++ ...ations \344\270\212\345\215\2102.49.13.md" | 123 ++++++ ...bsets \344\270\212\345\215\2102.49.13.md" | 47 +++ ...search \344\270\212\345\215\2102.49.13.md" | 63 +++ ...ist_ii \344\270\212\345\215\2102.49.13.md" | 49 +++ ...d_list \344\270\212\345\215\2102.49.13.md" | 28 ++ ...n_list \344\270\212\345\215\2102.49.13.md" | 56 +++ ..._array \344\270\212\345\215\2102.49.13.md" | 46 +++ ...y_code \344\270\212\345\215\2102.49.13.md" | 101 +++++ ...ets_ii \344\270\212\345\215\2102.49.13.md" | 80 ++++ ...e_ways \344\270\212\345\215\2102.49.13.md" | 71 ++++ ...ist_ii \344\270\212\345\215\2102.49.13.md" | 66 +++ ...resses \344\270\212\345\215\2102.49.13.md" | 66 +++ ...versal \344\270\212\345\215\2102.49.13.md" | 92 +++++ ..._trees \344\270\212\345\215\2102.49.13.md" | 43 ++ ...h_tree \344\270\212\345\215\2102.49.13.md" | 74 ++++ ...e_tree \344\270\212\345\215\2102.49.13.md" | 49 +++ ...c_tree \344\270\212\345\215\2102.49.13.md" | 45 ++ ...versal \344\270\212\345\215\2102.49.13.md" | 62 +++ ...versal \344\270\212\345\215\2102.49.13.md" | 43 ++ ...y_tree \344\270\212\345\215\2102.49.13.md" | 23 ++ ...versal \344\270\212\345\215\2102.49.13.md" | 100 +++++ ...versal \344\270\212\345\215\2102.49.13.md" | 68 +++ ...sal_ii \344\270\212\345\215\2102.49.13.md" | 48 +++ ...h_tree \344\270\212\345\215\2102.49.13.md" | 41 ++ ...h_tree \344\270\212\345\215\2102.49.13.md" | 47 +++ ...y_tree \344\270\212\345\215\2102.49.13.md" | 37 ++ ...y_tree \344\270\212\345\215\2102.49.13.md" | 94 +++++ ...th_sum \344\270\212\345\215\2102.49.13.md" | 28 ++ ...sum_ii \344\270\212\345\215\2102.49.13.md" | 40 ++ ...d_list \344\270\212\345\215\2102.49.13.md" | 71 ++++ ...h_node \344\270\212\345\215\2102.49.13.md" | 36 ++ ...iangle \344\270\212\345\215\2102.49.13.md" | 36 ++ ...gle II \344\270\212\345\215\2102.49.13.md" | 59 +++ ...iangle \344\270\212\345\215\2102.49.13.md" | 72 ++++ ..._Stock \344\270\212\345\215\2102.49.13.md" | 59 +++ ...ndrome \344\270\212\345\215\2102.49.13.md" | 46 +++ ...der II \344\270\212\345\215\2102.49.13.md" | 99 +++++ ...ladder \344\270\212\345\215\2102.49.13.md" | 43 ++ ...quence \344\270\212\345\215\2102.49.13.md" | 70 ++++ ...umbers \344\270\212\345\215\2102.49.13.md" | 37 ++ ...egions \344\270\212\345\215\2102.49.13.md" | 147 +++++++ ...ioning \344\270\212\345\215\2102.49.13.md" | 48 +++ ..._graph \344\270\212\345\215\2102.49.13.md" | 66 +++ ...number \344\270\212\345\215\2102.49.13.md" | 42 ++ ..._break \344\270\212\345\215\2102.49.13.md" | 59 +++ ...eak_ii \344\270\212\345\215\2102.49.13.md" | 113 +++++ ..._cycle \344\270\212\345\215\2102.49.13.md" | 105 +++++ ...cle_II \344\270\212\345\215\2102.49.13.md" | 56 +++ ...r_list \344\270\212\345\215\2102.49.13.md" | 112 +++++ ...versal \344\270\212\345\215\2102.49.13.md" | 81 ++++ ...versal \344\270\212\345\215\2102.49.13.md" | 67 +++ ...t_list \344\270\212\345\215\2102.49.13.md" | 59 +++ ...t_list \344\270\212\345\215\2102.49.13.md" | 138 +++++++ ...tation \344\270\212\345\215\2102.49.13.md" | 83 ++++ ...string \344\270\212\345\215\2102.49.13.md" | 37 ++ ...barray \344\270\212\345\215\2102.49.13.md" | 44 ++ ..._array \344\270\212\345\215\2102.49.13.md" | 85 ++++ ..._stack \344\270\212\345\215\2102.49.13.md" | 169 ++++++++ ...acters \344\270\212\345\215\2102.49.13.md" | 32 ++ ..._lists \344\270\212\345\215\2102.49.13.md" | 59 +++ ...lement \344\270\212\345\215\2102.49.13.md" | 61 +++ ...umbers \344\270\212\345\215\2102.49.13.md" | 47 +++ ...ecimal \344\270\212\345\215\2102.49.13.md" | 42 ++ ...sorted \344\270\212\345\215\2102.49.13.md" | 35 ++ ..._title \344\270\212\345\215\2102.49.13.md" | 28 ++ ...lement \344\270\212\345\215\2102.49.13.md" | 74 ++++ ...number \344\270\212\345\215\2102.49.13.md" | 34 ++ ...erator \344\270\212\345\215\2102.49.13.md" | 95 +++++ ..._array \344\270\212\345\215\2102.49.13.md" | 23 ++ ...1_bits \344\270\212\345\215\2102.49.13.md" | 66 +++ ...robber \344\270\212\345\215\2102.49.13.md" | 53 +++ ...e_view \344\270\212\345\215\2102.49.13.md" | 37 ++ ...slands \344\270\212\345\215\2102.49.13.md" | 130 ++++++ ...ements \344\270\212\345\215\2102.49.13.md" | 38 ++ ...primes \344\270\212\345\215\2102.49.13.md" | 57 +++ ...trings \344\270\212\345\215\2102.49.13.md" | 39 ++ ...d_list \344\270\212\345\215\2102.49.13.md" | 69 ++++ ...hedule \344\270\212\345\215\2102.49.13.md" | 93 +++++ ..._tree) \344\270\212\345\215\2102.49.13.md" | 89 ++++ ...ule_ii \344\270\212\345\215\2102.49.13.md" | 55 +++ ...design \344\270\212\345\215\2102.49.13.md" | 77 ++++ ...ber_ii \344\270\212\345\215\2102.49.13.md" | 61 +++ ...um_iii \344\270\212\345\215\2102.49.13.md" | 40 ++ ...licate \344\270\212\345\215\2102.49.13.md" | 62 +++ ...oblem \344\270\212\345\215\2102.49.13.md" | 134 ++++++ ...ate_ii \344\270\212\345\215\2102.49.13.md" | 35 ++ ...square \344\270\212\345\215\2102.49.13.md" | 78 ++++ ..._nodes \344\270\212\345\215\2102.49.13.md" | 67 +++ ...e_area \344\270\212\345\215\2102.49.13.md" | 50 +++ ...lator \344\270\212\345\215\2102.49.13.md" | 108 +++++ ...queues \344\270\212\345\215\2102.49.13.md" | 53 +++ ...y_tree \344\270\212\345\215\2102.49.13.md" | 33 ++ ...tor_ii \344\270\212\345\215\2102.49.13.md" | 108 +++++ ...ranges \344\270\212\345\215\2102.49.13.md" | 58 +++ ...ent_ii \344\270\212\345\215\2102.49.13.md" | 62 +++ ..._a_bst \344\270\212\345\215\2102.49.13.md" | 48 +++ ...of_Two \344\270\212\345\215\2102.49.13.md" | 89 ++++ ...stacks \344\270\212\345\215\2102.49.13.md" | 51 +++ ...d_list \344\270\212\345\215\2102.49.13.md" | 94 +++++ ...h_tree \344\270\212\345\215\2102.49.13.md" | 33 ++ ...y_tree \344\270\212\345\215\2102.49.13.md" | 104 +++++ ...d_list \344\270\212\345\215\2102.49.13.md" | 52 +++ ...t_self \344\270\212\345\215\2102.49.13.md" | 100 +++++ ...rix_ii \344\270\212\345\215\2102.49.13.md" | 63 +++ ...nagram \344\270\212\345\215\2102.49.13.md" | 61 +++ ... Rooms \344\270\212\345\215\2102.49.13.md" | 47 +++ ...h_Tree \344\270\212\345\215\2102.49.13.md" | 72 ++++ ... House \344\270\212\345\215\2102.49.13.md" | 57 +++ ..._paths \344\270\212\345\215\2102.49.13.md" | 45 ++ ...Digits \344\270\212\345\215\2102.49.13.md" | 34 ++ ...d Tree \344\270\212\345\215\2102.49.13.md" | 69 ++++ ...number \344\270\212\345\215\2102.49.13.md" | 38 ++ ...ber_ii \344\270\212\345\215\2102.49.13.md" | 140 +++++++ ...use II \344\270\212\345\215\2102.49.13.md" | 60 +++ ...tation \344\270\212\345\215\2102.49.13.md" | 46 +++ ...ion II \344\270\212\345\215\2102.49.13.md" | 77 ++++ ...number \344\270\212\345\215\2102.49.13.md" | 49 +++ ... Value \344\270\212\345\215\2102.49.13.md" | 66 +++ ... Fence \344\270\212\345\215\2102.49.13.md" | 65 +++ ...ebrity \344\270\212\345\215\2102.49.13.md" | 65 +++ ...ersion \344\270\212\345\215\2102.49.13.md" | 40 ++ ...quares \344\270\212\345\215\2102.49.13.md" | 116 ++++++ ...e_Sort \344\270\212\345\215\2102.49.13.md" | 78 ++++ ...zeroes \344\270\212\345\215\2102.49.13.md" | 128 ++++++ ...in_bst \344\270\212\345\215\2102.49.13.md" | 81 ++++ ... Gates \344\270\212\345\215\2102.49.13.md" | 90 ++++ ...f_life \344\270\212\345\215\2102.49.13.md" | 111 +++++ ...attern \344\270\212\345\215\2102.49.13.md" | 42 ++ ...m_game \344\270\212\345\215\2102.49.13.md" | 55 +++ ... Point \344\270\212\345\215\2102.49.13.md" | 67 +++ ...quence \344\270\212\345\215\2102.49.13.md" | 123 ++++++ ...d_cows \344\270\212\345\215\2102.49.13.md" | 119 ++++++ ...quence \344\270\212\345\215\2102.49.13.md" | 42 ++ ...utable \344\270\212\345\215\2102.49.13.md" | 47 +++ ...etters \344\270\212\345\215\2102.49.13.md" | 108 +++++ ...itcher \344\270\212\345\215\2102.49.13.md" | 69 ++++ ...Change \344\270\212\345\215\2102.49.13.md" | 52 +++ ... Graph \344\270\212\345\215\2102.49.13.md" | 103 +++++ ...ort_II \344\270\212\345\215\2102.49.13.md" | 42 ++ ..._three \344\270\212\345\215\2102.49.13.md" | 48 +++ ...d_list \344\270\212\345\215\2102.49.13.md" | 112 +++++ ...quence \344\270\212\345\215\2102.49.13.md" | 71 ++++ ...er_iii \344\270\212\345\215\2102.49.13.md" | 47 +++ ...g Bits \344\270\212\345\215\2102.49.13.md" | 46 +++ ...ht Sum \344\270\212\345\215\2102.49.13.md" | 58 +++ ...erator \344\270\212\345\215\2102.49.13.md" | 47 +++ ...f_Four \344\270\212\345\215\2102.49.13.md" | 32 ++ ...string \344\270\212\345\215\2102.49.13.md" | 47 +++ ...String \344\270\212\345\215\2102.49.13.md" | 61 +++ ...arrays \344\270\212\345\215\2102.49.13.md" | 25 ++ ...ays_ii \344\270\212\345\215\2102.49.13.md" | 65 +++ ...e Game \344\270\212\345\215\2102.49.13.md" | 89 ++++ ...Sum II \344\270\212\345\215\2102.49.13.md" | 47 +++ ...y Tree \344\270\212\345\215\2102.49.13.md" | 52 +++ ...square \344\270\212\345\215\2102.49.13.md" | 42 ++ ...d List \344\270\212\345\215\2102.49.13.md" | 46 +++ ...tegers \344\270\212\345\215\2102.49.13.md" | 95 +++++ ..._Lower \344\270\212\345\215\2102.49.13.md" | 34 ++ ...sum_iv \344\270\212\345\215\2102.49.13.md" | 77 ++++ ...matrix \344\270\212\345\215\2102.49.13.md" | 107 +++++ ...m O(1) \344\270\212\345\215\2102.49.13.md" | 159 ++++++++ ...llowed \344\270\212\345\215\2102.49.13.md" | 83 ++++ ...m_node \344\270\212\345\215\2102.49.13.md" | 79 ++++ ...m_note \344\270\212\345\215\2102.49.13.md" | 53 +++ ... Array \344\270\212\345\215\2102.49.13.md" | 105 +++++ ...string \344\270\212\345\215\2102.49.13.md" | 58 +++ ...e_Path \344\270\212\345\215\2102.49.13.md" | 93 +++++ ...erence \344\270\212\345\215\2102.49.13.md" | 47 +++ ...quence \344\270\212\345\215\2102.49.13.md" | 69 ++++ ...string \344\270\212\345\215\2102.49.13.md" | 70 ++++ ... Digit \344\270\212\345\215\2102.49.13.md" | 46 +++ ..._watch \344\270\212\345\215\2102.49.13.md" | 60 +++ ...leaves \344\270\212\345\215\2102.49.13.md" | 45 ++ ...ecimal \344\270\212\345\215\2102.49.13.md" | 114 ++++++ ...Height \344\270\212\345\215\2102.49.13.md" | 43 ++ ...z_buzz \344\270\212\345\215\2102.49.13.md" | 68 +++ ...Slices \344\270\212\345\215\2102.49.13.md" | 84 ++++ ...number \344\270\212\345\215\2102.49.13.md" | 46 +++ ...trings \344\270\212\345\215\2102.49.13.md" | 61 +++ ...et Sum \344\270\212\345\215\2102.49.13.md" | 87 ++++ ..._Array \344\270\212\345\215\2102.49.13.md" | 74 ++++ ...Square \344\270\212\345\215\2102.49.13.md" | 48 +++ ...string \344\270\212\345\215\2102.49.13.md" | 27 ++ ...um_iii \344\270\212\345\215\2102.49.13.md" | 39 ++ ...String \344\270\212\345\215\2102.49.13.md" | 92 +++++ ...Parser \344\270\212\345\215\2102.49.13.md" | 58 +++ ..._coins \344\270\212\345\215\2102.49.13.md" | 29 ++ ..._Array \344\270\212\345\215\2102.49.13.md" | 25 ++ ... a BST \344\270\212\345\215\2102.49.13.md" | 62 +++ ...ements \344\270\212\345\215\2102.49.13.md" | 72 ++++ ...attern \344\270\212\345\215\2102.49.13.md" | 31 ++ ...stance \344\270\212\345\215\2102.49.13.md" | 66 +++ ...imeter \344\270\212\345\215\2102.49.13.md" | 38 ++ ...String \344\270\212\345\215\2102.49.13.md" | 42 ++ ...olygon \344\270\212\345\215\2102.49.13.md" | 88 ++++ ...lement \344\270\212\345\215\2102.49.13.md" | 28 ++ ...stance \344\270\212\345\215\2102.49.13.md" | 82 ++++ ...e_Ones \344\270\212\345\215\2102.49.13.md" | 40 ++ ...Fence \344\270\212\345\215\2102.49.13.md" | 133 ++++++ ..._Lists \344\270\212\345\215\2102.49.13.md" | 58 +++ ...trings \344\270\212\345\215\2102.49.13.md" | 89 ++++ ...Circle \344\270\212\345\215\2102.49.13.md" | 23 ++ ..._Array \344\270\212\345\215\2102.49.13.md" | 48 +++ ...her_II \344\270\212\345\215\2102.49.13.md" | 74 ++++ ...t_Time \344\270\212\345\215\2102.49.13.md" | 46 +++ ...l_Game \344\270\212\345\215\2102.49.13.md" | 37 ++ ...e_Path \344\270\212\345\215\2102.49.13.md" | 58 +++ ...d_earn \344\270\212\345\215\2102.49.13.md" | 29 ++ ...ppings \344\270\212\345\215\2102.49.13.md" | 31 ++ ...README \344\270\212\345\215\2102.49.13.md" | 1 + ...h \344\270\215\346\230\223\345\206\231.md" | 91 +++++ .../Data Structure and Algorthim Review.md" | 101 +++++ .../Dynamic Programming.md" | 48 +++ ...hing Algorithms \342\200\223 topcoder.pdf" | Bin 0 -> 117543 bytes ...13\347\232\204\350\275\254\346\215\242.md" | 239 +++++++++++ .../LinkedList\346\212\200\345\267\247.md" | 118 ++++++ .../Maximal Square.pdf" | Bin 0 -> 185749 bytes ...00\345\267\247\347\254\224\350\256\260.py" | 96 +++++ .../Range Sum Query 2D - Immutable.pdf" | Bin 0 -> 167781 bytes .../Recusrion & BackTracking.md" | 237 +++++++++++ .../backtracking\346\200\235\350\267\257.md" | 295 +++++++++++++ ..._a_linked_list\351\227\256\351\242\230.md" | 69 ++++ ...60\347\232\204\346\200\235\350\267\257.md" | 14 + ...47\232\204\345\220\204\347\247\215pass.md" | 123 ++++++ .../slide_windows_template.md" | 185 +++++++++ ...\214_graph_search\357\274\214_dfs,_bfs.md" | 156 +++++++ .../\344\275\215\350\277\220\347\256\227.md" | 38 ++ ...22\345\210\227\347\256\227\346\263\225.md" | 194 +++++++++ .../\345\205\253\346\216\222\345\272\217.md" | 386 ++++++++++++++++++ ...06\345\220\210\351\227\256\351\242\230.md" | 114 ++++++ .../\346\200\273\347\273\223.md" | 120 ++++++ ...04\345\220\210\351\227\256\351\242\230.md" | 84 ++++ .../\351\200\222\345\275\222_recursion.md" | 39 ++ .../Leetcode_Solutions/Python/001._two_sum.md | 43 ++ .../Python/002._add_two_numbers.md | 37 ++ ..._substring_without_repeating_characters.md | 84 ++++ .../004._median_of_two_sorted_arrays.md | 260 ++++++++++++ .../005._longest_palindromic_substring.md | 241 +++++++++++ .../Python/006._ZigZag_Conversion.md | 67 +++ .../Python/007._Reverse_Integer.md | 65 +++ .../Python/008._string_to_integer_(atoi).md | 53 +++ .../Python/009._Palindrome_Number.md | 31 ++ .../010._regular_expression_matching.md | 229 +++++++++++ .../Python/011._container_with_most_water.md | 112 +++++ .../Python/012._Integer_to_Roman.md | 71 ++++ .../Python/013._Roman_to_Integer.md | 82 ++++ .../Python/014._longest_common_prefix.md | 77 ++++ docs/Leetcode_Solutions/Python/015._3sum.md | 106 +++++ .../Python/016._3sum_closest.md | 51 +++ ...._letter_combinations_of_a_phone_number.md | 51 +++ docs/Leetcode_Solutions/Python/018._4sum.md | 136 ++++++ .../019._remove_nth_node_from_end_of_list.md | 42 ++ .../Python/020._valid_parentheses.md | 52 +++ .../Python/021._merge_two_sorted_lists.md | 48 +++ .../Python/022._generate_parentheses.md | 88 ++++ .../Python/023._merge_k_sorted_lists.md | 46 +++ .../Python/024._swap_nodes_in_pairs.md | 35 ++ ...26._Remove_Duplicates_from_Sorted_Array.md | 73 ++++ .../Python/027._Remove_Element.md | 25 ++ .../Python/028._implement_strstr().md | 47 +++ ...bstring_with_Concatenation_of_All_Words.md | 54 +++ .../Python/031._next_permutation.md | 103 +++++ .../033._search_in_rotated_sorted_array.md | 53 +++ .../Python/034._Search for a Range.md | 77 ++++ .../Python/035._search_insert_position.md | 48 +++ .../Python/038._Count_and_Say.md | 98 +++++ .../Python/039._combination_sum.md | 64 +++ .../Python/040._combination_sum_ii.md | 39 ++ .../Python/042._trapping_rain_water.md | 39 ++ .../Python/043._multiply_strings.md | 81 ++++ .../Python/044._wildcard_matching.md | 44 ++ .../Python/045._Jump_Game_II.md | 43 ++ .../Python/046._permutations.md | 138 +++++++ .../Python/047._permutations_ii.md | 42 ++ .../Python/048._rotate_image.md | 105 +++++ .../Python/049._group_anagrams_python.md | 28 ++ .../Python/050._pow(x,_n).md | 48 +++ .../Python/051._n-queens.md | 38 ++ .../Python/052._n-queens_ii.md | 46 +++ .../Python/053._maximum_subarray.md | 146 +++++++ .../Python/054._spiral_matrix.md | 139 +++++++ .../Python/055._jump_game.md | 39 ++ .../Python/056._Merge_Intervals.md | 31 ++ .../Python/058._length_of_last_word.md | 45 ++ .../Python/059._spiral_matrix_ii.md | 67 +++ .../Python/060._permutation_sequence.md | 93 +++++ .../Python/061._rotate_list.md | 58 +++ .../Python/064._minimum_path_sum.md | 58 +++ .../Python/065.unique_paths_ii.md | 84 ++++ .../Python/066._plus_one.md | 60 +++ .../Python/067._add_binary.md | 31 ++ .../Leetcode_Solutions/Python/069._sqrt(x).md | 101 +++++ .../Python/070. Climbing Stairs.md | 99 +++++ .../Python/072._edit_distance.md | 116 ++++++ .../Python/073. Set Matrix Zeroes.md | 55 +++ .../Python/074._search_a_2d_matrix.md | 81 ++++ .../Python/075._sort_colors.md | 54 +++ .../Python/076._Minimum_Window_Substring.md | 44 ++ .../Python/077._combinations.md | 123 ++++++ .../Leetcode_Solutions/Python/078.Subsets .md | 47 +++ .../Python/079._word_search.md | 63 +++ ...._remove_duplicates_from_sorted_list_ii.md | 49 +++ ...083._remove_duplicates_from_sorted_list.md | 28 ++ .../Python/086._partition_list.md | 56 +++ .../Python/088._merge_sorted_array.md | 46 +++ .../Python/089._gray_code.md | 101 +++++ .../Python/090._subsets_ii.md | 80 ++++ .../Python/091._decode_ways.md | 71 ++++ .../Python/092._reverse_linked_list_ii.md | 66 +++ .../Python/093._restore_ip_addresses.md | 66 +++ .../094._binary_tree_inorder_traversal.md | 92 +++++ .../Python/096._unique_binary_search_trees.md | 43 ++ .../098._validate_binary_search_tree.md | 74 ++++ .../Python/100._same_tree.md | 49 +++ .../Python/101._symmetric_tree.md | 45 ++ .../102._binary_tree_level_order_traversal.md | 62 +++ ...inary_tree_zigzag_level_order_traversal.md | 43 ++ .../104._maximum_depth_of_binary_tree.md | 23 ++ ...ree_from_preorder_and_inorder_traversal.md | 100 +++++ ...ee_from_inorder_and_postorder_traversal.md | 68 +++ ...7._binary_tree_level_order_traversal_ii.md | 48 +++ ...vert_sorted_array_to_binary_search_tree.md | 41 ++ ...nvert_sorted_list_to_binary_search_tree.md | 47 +++ .../Python/110._balanced_binary_tree.md | 37 ++ .../111._minimum_depth_of_binary_tree.md | 94 +++++ .../Python/112._path_sum.md | 28 ++ .../Python/113._path_sum_ii.md | 40 ++ ...114._flatten_binary_tree_to_linked_list.md | 71 ++++ ...lating_next_right_pointers_in_each_node.md | 36 ++ .../Python/118._pascal's_triangle.md | 36 ++ .../Python/119. Pascal's Triangle II.md | 59 +++ .../Python/120. Triangle.md | 72 ++++ .../121._Best_Time_to_Buy_and_Sell_Stock.md | 59 +++ .../Python/125._valid_palindrome.md | 46 +++ .../Python/126. Word Ladder II.md | 99 +++++ .../Python/127._word_ladder.md | 43 ++ .../128._Longest_Consecutive_Sequence.md | 70 ++++ .../Python/129._sum_root_to_leaf_numbers.md | 37 ++ .../Python/130._surrounded_regions.md | 147 +++++++ .../Python/131._palindrome_partitioning.md | 48 +++ .../Python/133._clone_graph.md | 66 +++ .../Python/136._single_number.md | 42 ++ .../Python/139._word_break.md | 59 +++ .../Python/140._word_break_ii.md | 113 +++++ .../Python/141._linked_list_cycle.md | 105 +++++ .../Python/142_Linked_List_Cycle_II.md | 56 +++ .../Python/143._reorder_list.md | 112 +++++ .../144._binary_tree_preorder_traversal.md | 81 ++++ .../145._binary_tree_postorder_traversal.md | 67 +++ .../Python/147._insertion_sort_list.md | 59 +++ .../Python/148._sort_list.md | 138 +++++++ .../150._evaluate_reverse_polish_notation.md | 83 ++++ .../Python/151._reverse_words_in_a_string.md | 37 ++ .../Python/152._maximum_product_subarray.md | 44 ++ ...3._find_minimum_in_rotated_sorted_array.md | 85 ++++ .../Python/155._min_stack.md | 169 ++++++++ ...ng_with_At_Most_Two_Distinct_Characters.md | 32 ++ .../160._intersection_of_two_linked_lists.md | 59 +++ .../Python/162._find_peak_element.md | 61 +++ .../Python/165._compare_version_numbers.md | 47 +++ .../166._Fraction_to_Recurring_Decimal.md | 42 ++ ...167._two_sum_ii_-_input_array_is_sorted.md | 35 ++ .../Python/168._excel_sheet_column_title.md | 28 ++ .../Python/169._majority_element.md | 74 ++++ .../Python/171._excel_sheet_column_number.md | 34 ++ .../173._binary_search_tree_iterator.md | 95 +++++ .../Python/189._rotate_array.md | 23 ++ .../Python/191._number_of_1_bits.md | 66 +++ .../Python/198._house_robber.md | 53 +++ .../199._binary_tree_right_side_view.md | 37 ++ .../Python/200._number_of_islands.md | 130 ++++++ .../203._remove_linked_list_elements.md | 38 ++ .../Python/204._count_primes.md | 57 +++ .../Python/205._isomorphic_strings.md | 39 ++ .../Python/206._reverse_linked_list.md | 69 ++++ .../Python/207._course_schedule.md | 93 +++++ .../208._implement_trie_(prefix_tree).md | 89 ++++ .../Python/210._course_schedule_ii.md | 55 +++ ...and Search Word - Data structure design.md | 77 ++++ .../Python/213._house_robber_ii.md | 61 +++ .../Python/216._combination_sum_iii.md | 40 ++ .../Python/217._contains_duplicate.md | 62 +++ .../Python/218._The _Skyline_Problem .md | 134 ++++++ .../Python/219._contains_duplicate_ii.md | 35 ++ .../Python/221._maximal_square.md | 78 ++++ .../Python/222._count_complete_tree_nodes.md | 67 +++ .../Python/223._rectangle_area.md | 50 +++ .../Python/224. Basic Calculator .md | 108 +++++ .../225._implement_stack_using_queues.md | 53 +++ .../Python/226._invert_binary_tree.md | 33 ++ .../Python/227._basic_calculator_ii.md | 108 +++++ .../Python/228._summary_ranges.md | 58 +++ .../Python/229._majority_element_ii.md | 62 +++ .../230._kth_smallest_element_in_a_bst.md | 48 +++ .../Python/231. _Power_of_Two.md | 89 ++++ .../232._implement_queue_using_stacks.md | 51 +++ .../Python/234._palindrome_linked_list.md | 94 +++++ ...common_ancestor_of_a_binary_search_tree.md | 33 ++ ...lowest_common_ancestor_of_a_binary_tree.md | 104 +++++ .../237._delete_node_in_a_linked_list.md | 52 +++ .../238._product_of_array_except_self.md | 100 +++++ .../Python/240._search_a_2d_matrix_ii.md | 63 +++ .../Python/242._valid_anagram.md | 61 +++ .../Python/252. Meeting Rooms.md | 47 +++ ...Preorder_Sequence_in_Binary_Search_Tree.md | 72 ++++ .../Python/256. Paint House.md | 57 +++ .../Python/257._binary_tree_paths.md | 45 ++ .../Python/258_ Add_Digits.md | 34 ++ .../Python/261. Graph Valid Tree.md | 69 ++++ .../Python/263._ugly_number.md | 38 ++ .../Python/264._ugly_number_ii.md | 140 +++++++ .../Python/265. Paint House II.md | 60 +++ .../Python/266. Palindrome Permutation.md | 46 +++ .../Python/267. Palindrome Permutation II.md | 77 ++++ .../Python/268._missing_number.md | 49 +++ .../270. Closest Binary Search Tree Value.md | 66 +++ .../Python/276. Paint Fence.md | 65 +++ .../Python/277. Find the Celebrity.md | 65 +++ .../Python/278._First_Bad _Version.md | 40 ++ .../Python/279._perfect_squares.md | 116 ++++++ .../Python/280._Wiggle_Sort.md | 78 ++++ .../Python/283._move_zeroes.md | 128 ++++++ .../Python/285._inorder_successor_in_bst.md | 81 ++++ .../Python/286. Walls and Gates.md | 90 ++++ .../Python/289._game_of_life.md | 111 +++++ .../Python/290._word_pattern.md | 42 ++ .../Python/292._nim_game.md | 55 +++ .../Python/296. Best Meeting Point.md | 67 +++ ...inary Tree Longest Consecutive Sequence.md | 123 ++++++ .../Python/299._bulls_and_cows.md | 119 ++++++ .../300._longest_increasing_subsequence.md | 42 ++ .../303._range_sum_query_-_immutable.md | 47 +++ .../Python/316._Remove_Duplicate_Letters.md | 108 +++++ .../Python/319._Bulb_Switcher.md | 69 ++++ .../Python/322. Coin Change.md | 52 +++ ...ected Components in an Undirected Graph.md | 103 +++++ .../Python/324._Wiggle_Sort_II.md | 42 ++ .../Python/326._power_of_three.md | 48 +++ .../Python/328._odd_even_linked_list.md | 112 +++++ .../334._increasing_triplet_subsequence.md | 71 ++++ .../Python/337._house_robber_iii.md | 47 +++ .../Python/338. Counting Bits.md | 46 +++ .../Python/339. Nested List Weight Sum.md | 58 +++ .../341._Flatten_Nested_List_Iterator.md | 47 +++ .../Python/342._Power_of_Four.md | 32 ++ .../Python/344._reverse_string.md | 47 +++ .../Python/345._Reverse_Vowels_of_a_String.md | 61 +++ .../Python/349._intersection_of_two_arrays.md | 25 ++ .../350._intersection_of_two_arrays_ii.md | 65 +++ .../Python/353. Design Snake Game.md | 89 ++++ .../Python/364. Nested List Weight Sum II.md | 47 +++ .../366. Find Leaves of Binary Tree.md | 52 +++ .../Python/367._valid_perfect_square.md | 42 ++ .../Python/369.Plus One Linked List.md | 46 +++ .../Python/371._sum_of_two_integers.md | 95 +++++ .../374._Guess_Number_Higher_or_Lower.md | 34 ++ .../Python/377._combination_sum_iv.md | 77 ++++ ...kth_smallest_element_in_a_sorted_matrix.md | 107 +++++ .../380. Insert Delete GetRandom O(1).md | 159 ++++++++ ...ete GetRandom O(1) - Duplicates allowed.md | 83 ++++ .../Python/382._linked_list_random_node.md | 79 ++++ .../Python/383._ransom_note.md | 53 +++ .../Python/384. Shuffle an Array.md | 105 +++++ ...387._first_unique_character_in_a_string.md | 58 +++ .../Python/388._Longest_Absolute_File_Path.md | 93 +++++ .../Python/389._find_the_difference.md | 47 +++ .../Python/392._is_subsequence.md | 69 ++++ .../Python/394._decode_string.md | 70 ++++ .../Python/400. Nth Digit.md | 46 +++ .../Python/401._binary_watch.md | 60 +++ .../Python/404._sum_of_left_leaves.md | 45 ++ .../405. Convert a Number to Hexadecimal.md | 114 ++++++ .../406._Queue_Reconstruction_by_Height.md | 43 ++ .../Python/412._fizz_buzz.md | 68 +++ .../Python/413. Arithmetic Slices.md | 84 ++++ .../Python/414._third_maximum_number.md | 46 +++ .../Python/415._add_strings.md | 61 +++ .../416. Partition Equal Subset Sum.md | 87 ++++ ..._Maximum_XOR_of_Two_Numbers_in_an_Array.md | 74 ++++ .../Python/422. Valid Word Square.md | 48 +++ .../434._number_of_segments_in_a_string.md | 27 ++ .../Python/437._path_sum_iii.md | 39 ++ .../438._Find_All_Anagrams_in_a_String.md | 92 +++++ .../Python/439. Ternary Expression Parser.md | 58 +++ .../Python/441._arranging_coins.md | 29 ++ ...ind_All_Numbers_Disappeared_in_an_Array.md | 25 ++ .../Python/450. Delete Node in a BST.md | 62 +++ ...._Minimum_Moves_to_Equal_Array_Elements.md | 72 ++++ .../Python/459._Repeated_Substring_Pattern.md | 31 ++ .../Python/461._Hamming Distance.md | 66 +++ .../Python/463._Island_Perimeter.md | 38 ++ ..._Unique_Substrings_in_Wraparound_String.md | 42 ++ .../Python/469. Convex Polygon.md | 88 ++++ .../Python/476._Number_Complement.md | 28 ++ .../Python/477._Total_Hamming_Distance.md | 82 ++++ .../Python/485._Max_Consecutive_Ones.md | 40 ++ .../Python/587._Erect_the_Fence .md | 133 ++++++ .../599._Minimum_Index_Sum_of_Two_Lists.md | 58 +++ .../Python/647._Palindromic_Substrings.md | 89 ++++ .../Python/657._Judge_Route_Circle.md | 23 ++ .../Python/665._Non-decreasing_Array.md | 48 +++ .../Python/672._Bulb_Switcher_II.md | 74 ++++ .../Python/681._Next_Closest_Time.md | 46 +++ .../Python/682._Baseball_Game.md | 37 ++ .../Python/687._Longest_Univalue_Path.md | 58 +++ .../Python/740._delete_and_earn.md | 29 ++ .../Python/760._Find_Anagram_Mappings.md | 31 ++ docs/Leetcode_Solutions/Python/README.md | 1 + ...h \344\270\215\346\230\223\345\206\231.md" | 91 +++++ .../Data Structure and Algorthim Review.md | 101 +++++ .../Summarization/Dynamic Programming.md | 48 +++ ...hing Algorithms \342\200\223 topcoder.pdf" | Bin 0 -> 117543 bytes ...13\347\232\204\350\275\254\346\215\242.md" | 239 +++++++++++ .../LinkedList\346\212\200\345\267\247.md" | 118 ++++++ .../Python/Summarization/Maximal Square.pdf | Bin 0 -> 185749 bytes ...00\345\267\247\347\254\224\350\256\260.py" | 96 +++++ .../Range Sum Query 2D - Immutable.pdf | Bin 0 -> 167781 bytes .../Summarization/Recusrion & BackTracking.md | 237 +++++++++++ .../backtracking\346\200\235\350\267\257.md" | 295 +++++++++++++ ..._a_linked_list\351\227\256\351\242\230.md" | 69 ++++ ...60\347\232\204\346\200\235\350\267\257.md" | 14 + ...47\232\204\345\220\204\347\247\215pass.md" | 123 ++++++ .../Summarization/slide_windows_template.md | 185 +++++++++ ...\214_graph_search\357\274\214_dfs,_bfs.md" | 156 +++++++ .../\344\275\215\350\277\220\347\256\227.md" | 38 ++ ...22\345\210\227\347\256\227\346\263\225.md" | 194 +++++++++ .../\345\205\253\346\216\222\345\272\217.md" | 386 ++++++++++++++++++ ...06\345\220\210\351\227\256\351\242\230.md" | 114 ++++++ .../\346\200\273\347\273\223.md" | 120 ++++++ ...04\345\220\210\351\227\256\351\242\230.md" | 84 ++++ .../\351\200\222\345\275\222_recursion.md" | 39 ++ 981 files changed, 43372 insertions(+) rename docs/Algorithm_Templates/{ => C++}/Cipher/README.md (100%) rename docs/Algorithm_Templates/{ => C++}/Compression/README.md (100%) rename docs/Algorithm_Templates/{ => C++}/Conversion/README.md (100%) rename docs/Algorithm_Templates/{ => C++}/Data_Structure/Graph/README.md (100%) rename docs/Algorithm_Templates/{ => C++}/Data_Structure/HashMap/README.md (100%) rename docs/Algorithm_Templates/{ => C++}/Data_Structure/HashTable/README.md (100%) rename docs/Algorithm_Templates/{ => C++}/Data_Structure/Heqp/README.md (100%) rename docs/Algorithm_Templates/{ => C++}/Data_Structure/LinkedList/README.md (100%) rename docs/Algorithm_Templates/{ => C++}/Data_Structure/Matrix/README.md (100%) rename docs/Algorithm_Templates/{ => C++}/Data_Structure/Queue/README.md (100%) rename docs/Algorithm_Templates/{ => C++}/Data_Structure/README.md (100%) rename docs/Algorithm_Templates/{ => C++}/Data_Structure/Stack/README.md (100%) rename docs/Algorithm_Templates/{ => C++}/Data_Structure/Tree/README.md (100%) rename docs/Algorithm_Templates/{ => C++}/Dynamic_Programming/README.md (100%) rename docs/Algorithm_Templates/{ => C++}/Hash/README.md (100%) rename docs/Algorithm_Templates/{ => C++}/Others/NextNodeInOrderTree.md (100%) rename docs/Algorithm_Templates/{ => C++}/Others/TopKWords.java (100%) rename docs/Algorithm_Templates/{ => C++}/Others/words.txt (100%) rename docs/Algorithm_Templates/{ => C++}/README.md (100%) rename docs/Algorithm_Templates/{ => C++}/Search/README.md (100%) rename docs/Algorithm_Templates/{ => C++}/Sort/BubbleSort.py (100%) rename docs/Algorithm_Templates/{ => C++}/Sort/InsertSort.py (100%) rename docs/Algorithm_Templates/{ => C++}/Sort/MergeSort.py (100%) rename docs/Algorithm_Templates/{ => C++}/Sort/QuickSort.py (100%) rename docs/Algorithm_Templates/{ => C++}/Sort/README.md (100%) rename docs/Algorithm_Templates/{ => C++}/Sort/RadixSort.py (100%) rename docs/Algorithm_Templates/{ => C++}/Sort/SelectionSort.py (100%) rename docs/Algorithm_Templates/{ => C++}/Sort/ShellSort.py (100%) rename docs/Algorithm_Templates/{ => C++}/Traversals/README.md (100%) create mode 100644 docs/Algorithm_Templates/Java/Cipher/README.md create mode 100644 docs/Algorithm_Templates/Java/Compression/README.md create mode 100644 docs/Algorithm_Templates/Java/Conversion/README.md create mode 100644 docs/Algorithm_Templates/Java/Data_Structure/Graph/README.md create mode 100644 docs/Algorithm_Templates/Java/Data_Structure/HashMap/README.md create mode 100644 docs/Algorithm_Templates/Java/Data_Structure/HashTable/README.md create mode 100644 docs/Algorithm_Templates/Java/Data_Structure/Heqp/README.md create mode 100644 docs/Algorithm_Templates/Java/Data_Structure/LinkedList/README.md create mode 100644 docs/Algorithm_Templates/Java/Data_Structure/Matrix/README.md create mode 100644 docs/Algorithm_Templates/Java/Data_Structure/Queue/README.md create mode 100644 docs/Algorithm_Templates/Java/Data_Structure/README.md create mode 100644 docs/Algorithm_Templates/Java/Data_Structure/Stack/README.md create mode 100644 docs/Algorithm_Templates/Java/Data_Structure/Tree/README.md create mode 100644 docs/Algorithm_Templates/Java/Dynamic_Programming/README.md create mode 100644 docs/Algorithm_Templates/Java/Hash/README.md create mode 100644 docs/Algorithm_Templates/Java/Others/NextNodeInOrderTree.md create mode 100644 docs/Algorithm_Templates/Java/Others/TopKWords.java create mode 100644 docs/Algorithm_Templates/Java/Others/words.txt create mode 100644 docs/Algorithm_Templates/Java/README.md create mode 100644 docs/Algorithm_Templates/Java/Search/README.md create mode 100644 docs/Algorithm_Templates/Java/Sort/BubbleSort.py create mode 100644 docs/Algorithm_Templates/Java/Sort/InsertSort.py create mode 100644 docs/Algorithm_Templates/Java/Sort/MergeSort.py create mode 100644 docs/Algorithm_Templates/Java/Sort/QuickSort.py create mode 100644 docs/Algorithm_Templates/Java/Sort/README.md create mode 100644 docs/Algorithm_Templates/Java/Sort/RadixSort.py create mode 100644 docs/Algorithm_Templates/Java/Sort/SelectionSort.py create mode 100644 docs/Algorithm_Templates/Java/Sort/ShellSort.py create mode 100644 docs/Algorithm_Templates/Java/Traversals/README.md create mode 100644 docs/Algorithm_Templates/Python/Cipher/README.md create mode 100644 docs/Algorithm_Templates/Python/Compression/README.md create mode 100644 docs/Algorithm_Templates/Python/Conversion/README.md create mode 100644 docs/Algorithm_Templates/Python/Data_Structure/Graph/README.md create mode 100644 docs/Algorithm_Templates/Python/Data_Structure/HashMap/README.md create mode 100644 docs/Algorithm_Templates/Python/Data_Structure/HashTable/README.md create mode 100644 docs/Algorithm_Templates/Python/Data_Structure/Heqp/README.md create mode 100644 docs/Algorithm_Templates/Python/Data_Structure/LinkedList/README.md create mode 100644 docs/Algorithm_Templates/Python/Data_Structure/Matrix/README.md create mode 100644 docs/Algorithm_Templates/Python/Data_Structure/Queue/README.md create mode 100644 docs/Algorithm_Templates/Python/Data_Structure/README.md create mode 100644 docs/Algorithm_Templates/Python/Data_Structure/Stack/README.md create mode 100644 docs/Algorithm_Templates/Python/Data_Structure/Tree/README.md create mode 100644 docs/Algorithm_Templates/Python/Dynamic_Programming/README.md create mode 100644 docs/Algorithm_Templates/Python/Hash/README.md create mode 100644 docs/Algorithm_Templates/Python/Others/NextNodeInOrderTree.md create mode 100644 docs/Algorithm_Templates/Python/Others/TopKWords.java create mode 100644 docs/Algorithm_Templates/Python/Others/words.txt create mode 100644 docs/Algorithm_Templates/Python/README.md create mode 100644 docs/Algorithm_Templates/Python/Search/README.md create mode 100644 docs/Algorithm_Templates/Python/Sort/BubbleSort.py create mode 100644 docs/Algorithm_Templates/Python/Sort/InsertSort.py create mode 100644 docs/Algorithm_Templates/Python/Sort/MergeSort.py create mode 100644 docs/Algorithm_Templates/Python/Sort/QuickSort.py create mode 100644 docs/Algorithm_Templates/Python/Sort/README.md create mode 100644 docs/Algorithm_Templates/Python/Sort/RadixSort.py create mode 100644 docs/Algorithm_Templates/Python/Sort/SelectionSort.py create mode 100644 docs/Algorithm_Templates/Python/Sort/ShellSort.py create mode 100644 docs/Algorithm_Templates/Python/Traversals/README.md rename docs/Leetcode_Solutions/001._two_sum.md => "docs/Leetcode_Solutions/C++/001._two_sum \344\270\212\345\215\2102.49.12.md" (100%) rename docs/Leetcode_Solutions/002._add_two_numbers.md => "docs/Leetcode_Solutions/C++/002._add_two_numbers \344\270\212\345\215\2102.49.12.md" (100%) rename docs/Leetcode_Solutions/003._longest_substring_without_repeating_characters.md => "docs/Leetcode_Solutions/C++/003._longest_substring_without_repeating_characters \344\270\212\345\215\2102.49.12.md" (100%) rename docs/Leetcode_Solutions/004._median_of_two_sorted_arrays.md => "docs/Leetcode_Solutions/C++/004._median_of_two_sorted_arrays \344\270\212\345\215\2102.49.12.md" (100%) rename docs/Leetcode_Solutions/005._longest_palindromic_substring.md => "docs/Leetcode_Solutions/C++/005._longest_palindromic_substring \344\270\212\345\215\2102.49.12.md" (100%) rename docs/Leetcode_Solutions/006._ZigZag_Conversion.md => "docs/Leetcode_Solutions/C++/006._ZigZag_Conversion \344\270\212\345\215\2102.49.12.md" (100%) rename docs/Leetcode_Solutions/007._Reverse_Integer.md => "docs/Leetcode_Solutions/C++/007._Reverse_Integer \344\270\212\345\215\2102.49.12.md" (100%) rename docs/Leetcode_Solutions/008._string_to_integer_(atoi).md => "docs/Leetcode_Solutions/C++/008._string_to_integer_(atoi) \344\270\212\345\215\2102.49.12.md" (100%) rename docs/Leetcode_Solutions/009._Palindrome_Number.md => "docs/Leetcode_Solutions/C++/009._Palindrome_Number \344\270\212\345\215\2102.49.12.md" (100%) rename docs/Leetcode_Solutions/010._regular_expression_matching.md => "docs/Leetcode_Solutions/C++/010._regular_expression_matching \344\270\212\345\215\2102.49.12.md" (100%) rename docs/Leetcode_Solutions/011._container_with_most_water.md => "docs/Leetcode_Solutions/C++/011._container_with_most_water \344\270\212\345\215\2102.49.12.md" (100%) rename docs/Leetcode_Solutions/012._Integer_to_Roman.md => "docs/Leetcode_Solutions/C++/012._Integer_to_Roman \344\270\212\345\215\2102.49.12.md" (100%) rename docs/Leetcode_Solutions/013._Roman_to_Integer.md => "docs/Leetcode_Solutions/C++/013._Roman_to_Integer \344\270\212\345\215\2102.49.12.md" (100%) rename docs/Leetcode_Solutions/014._longest_common_prefix.md => "docs/Leetcode_Solutions/C++/014._longest_common_prefix \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/015._3sum.md => "docs/Leetcode_Solutions/C++/015._3sum \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/016._3sum_closest.md => "docs/Leetcode_Solutions/C++/016._3sum_closest \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/017._letter_combinations_of_a_phone_number.md => "docs/Leetcode_Solutions/C++/017._letter_combinations_of_a_phone_number \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/018._4sum.md => "docs/Leetcode_Solutions/C++/018._4sum \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/019._remove_nth_node_from_end_of_list.md => "docs/Leetcode_Solutions/C++/019._remove_nth_node_from_end_of_list \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/020._valid_parentheses.md => "docs/Leetcode_Solutions/C++/020._valid_parentheses \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/021._merge_two_sorted_lists.md => "docs/Leetcode_Solutions/C++/021._merge_two_sorted_lists \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/022._generate_parentheses.md => "docs/Leetcode_Solutions/C++/022._generate_parentheses \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/023._merge_k_sorted_lists.md => "docs/Leetcode_Solutions/C++/023._merge_k_sorted_lists \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/024._swap_nodes_in_pairs.md => "docs/Leetcode_Solutions/C++/024._swap_nodes_in_pairs \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/026._Remove_Duplicates_from_Sorted_Array.md => "docs/Leetcode_Solutions/C++/026._Remove_Duplicates_from_Sorted_Array \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/027._Remove_Element.md => "docs/Leetcode_Solutions/C++/027._Remove_Element \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/028._implement_strstr().md => "docs/Leetcode_Solutions/C++/028._implement_strstr() \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/030._Substring_with_Concatenation_of_All_Words.md => "docs/Leetcode_Solutions/C++/030._Substring_with_Concatenation_of_All_Words \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/031._next_permutation.md => "docs/Leetcode_Solutions/C++/031._next_permutation \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/033._search_in_rotated_sorted_array.md => "docs/Leetcode_Solutions/C++/033._search_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/034._Search for a Range.md => "docs/Leetcode_Solutions/C++/034._Search for a Range \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/035._search_insert_position.md => "docs/Leetcode_Solutions/C++/035._search_insert_position \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/038._Count_and_Say.md => "docs/Leetcode_Solutions/C++/038._Count_and_Say \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/039._combination_sum.md => "docs/Leetcode_Solutions/C++/039._combination_sum \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/040._combination_sum_ii.md => "docs/Leetcode_Solutions/C++/040._combination_sum_ii \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/042._trapping_rain_water.md => "docs/Leetcode_Solutions/C++/042._trapping_rain_water \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/043._multiply_strings.md => "docs/Leetcode_Solutions/C++/043._multiply_strings \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/044._wildcard_matching.md => "docs/Leetcode_Solutions/C++/044._wildcard_matching \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/045._Jump_Game_II.md => "docs/Leetcode_Solutions/C++/045._Jump_Game_II \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/046._permutations.md => "docs/Leetcode_Solutions/C++/046._permutations \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/047._permutations_ii.md => "docs/Leetcode_Solutions/C++/047._permutations_ii \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/048._rotate_image.md => "docs/Leetcode_Solutions/C++/048._rotate_image \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/049._group_anagrams_python.md => "docs/Leetcode_Solutions/C++/049._group_anagrams_python \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/050._pow(x,_n).md => "docs/Leetcode_Solutions/C++/050._pow(x,_n) \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/051._n-queens.md => "docs/Leetcode_Solutions/C++/051._n-queens \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/052._n-queens_ii.md => "docs/Leetcode_Solutions/C++/052._n-queens_ii \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/053._maximum_subarray.md => "docs/Leetcode_Solutions/C++/053._maximum_subarray \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/054._spiral_matrix.md => "docs/Leetcode_Solutions/C++/054._spiral_matrix \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/055._jump_game.md => "docs/Leetcode_Solutions/C++/055._jump_game \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/056._Merge_Intervals.md => "docs/Leetcode_Solutions/C++/056._Merge_Intervals \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/058._length_of_last_word.md => "docs/Leetcode_Solutions/C++/058._length_of_last_word \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/059._spiral_matrix_ii.md => "docs/Leetcode_Solutions/C++/059._spiral_matrix_ii \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/060._permutation_sequence.md => "docs/Leetcode_Solutions/C++/060._permutation_sequence \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/061._rotate_list.md => "docs/Leetcode_Solutions/C++/061._rotate_list \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/064._minimum_path_sum.md => "docs/Leetcode_Solutions/C++/064._minimum_path_sum \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/065.unique_paths_ii.md => "docs/Leetcode_Solutions/C++/065.unique_paths_ii \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/066._plus_one.md => "docs/Leetcode_Solutions/C++/066._plus_one \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/067._add_binary.md => "docs/Leetcode_Solutions/C++/067._add_binary \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/069._sqrt(x).md => "docs/Leetcode_Solutions/C++/069._sqrt(x) \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/070. Climbing Stairs.md => "docs/Leetcode_Solutions/C++/070. Climbing Stairs \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/072._edit_distance.md => "docs/Leetcode_Solutions/C++/072._edit_distance \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/073. Set Matrix Zeroes.md => "docs/Leetcode_Solutions/C++/073. Set Matrix Zeroes \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/074._search_a_2d_matrix.md => "docs/Leetcode_Solutions/C++/074._search_a_2d_matrix \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/075._sort_colors.md => "docs/Leetcode_Solutions/C++/075._sort_colors \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/076._Minimum_Window_Substring.md => "docs/Leetcode_Solutions/C++/076._Minimum_Window_Substring \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/077._combinations.md => "docs/Leetcode_Solutions/C++/077._combinations \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/078.Subsets .md => "docs/Leetcode_Solutions/C++/078.Subsets \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/079._word_search.md => "docs/Leetcode_Solutions/C++/079._word_search \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/082._remove_duplicates_from_sorted_list_ii.md => "docs/Leetcode_Solutions/C++/082._remove_duplicates_from_sorted_list_ii \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/083._remove_duplicates_from_sorted_list.md => "docs/Leetcode_Solutions/C++/083._remove_duplicates_from_sorted_list \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/086._partition_list.md => "docs/Leetcode_Solutions/C++/086._partition_list \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/088._merge_sorted_array.md => "docs/Leetcode_Solutions/C++/088._merge_sorted_array \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/089._gray_code.md => "docs/Leetcode_Solutions/C++/089._gray_code \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/090._subsets_ii.md => "docs/Leetcode_Solutions/C++/090._subsets_ii \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/091._decode_ways.md => "docs/Leetcode_Solutions/C++/091._decode_ways \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/092._reverse_linked_list_ii.md => "docs/Leetcode_Solutions/C++/092._reverse_linked_list_ii \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/093._restore_ip_addresses.md => "docs/Leetcode_Solutions/C++/093._restore_ip_addresses \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/094._binary_tree_inorder_traversal.md => "docs/Leetcode_Solutions/C++/094._binary_tree_inorder_traversal \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/096._unique_binary_search_trees.md => "docs/Leetcode_Solutions/C++/096._unique_binary_search_trees \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/098._validate_binary_search_tree.md => "docs/Leetcode_Solutions/C++/098._validate_binary_search_tree \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/100._same_tree.md => "docs/Leetcode_Solutions/C++/100._same_tree \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/101._symmetric_tree.md => "docs/Leetcode_Solutions/C++/101._symmetric_tree \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/102._binary_tree_level_order_traversal.md => "docs/Leetcode_Solutions/C++/102._binary_tree_level_order_traversal \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/103._binary_tree_zigzag_level_order_traversal.md => "docs/Leetcode_Solutions/C++/103._binary_tree_zigzag_level_order_traversal \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/104._maximum_depth_of_binary_tree.md => "docs/Leetcode_Solutions/C++/104._maximum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/105._construct_binary_tree_from_preorder_and_inorder_traversal.md => "docs/Leetcode_Solutions/C++/105._construct_binary_tree_from_preorder_and_inorder_traversal \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/106._construct_binary_tree_from_inorder_and_postorder_traversal.md => "docs/Leetcode_Solutions/C++/106._construct_binary_tree_from_inorder_and_postorder_traversal \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/107._binary_tree_level_order_traversal_ii.md => "docs/Leetcode_Solutions/C++/107._binary_tree_level_order_traversal_ii \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/108._convert_sorted_array_to_binary_search_tree.md => "docs/Leetcode_Solutions/C++/108._convert_sorted_array_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/109._convert_sorted_list_to_binary_search_tree.md => "docs/Leetcode_Solutions/C++/109._convert_sorted_list_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/110._balanced_binary_tree.md => "docs/Leetcode_Solutions/C++/110._balanced_binary_tree \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/111._minimum_depth_of_binary_tree.md => "docs/Leetcode_Solutions/C++/111._minimum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/112._path_sum.md => "docs/Leetcode_Solutions/C++/112._path_sum \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/113._path_sum_ii.md => "docs/Leetcode_Solutions/C++/113._path_sum_ii \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/114._flatten_binary_tree_to_linked_list.md => "docs/Leetcode_Solutions/C++/114._flatten_binary_tree_to_linked_list \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/116._populating_next_right_pointers_in_each_node.md => "docs/Leetcode_Solutions/C++/116._populating_next_right_pointers_in_each_node \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/118._pascal's_triangle.md => "docs/Leetcode_Solutions/C++/118._pascal's_triangle \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/119. Pascal's Triangle II.md => "docs/Leetcode_Solutions/C++/119. Pascal's Triangle II \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/120. Triangle.md => "docs/Leetcode_Solutions/C++/120. Triangle \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/121._Best_Time_to_Buy_and_Sell_Stock.md => "docs/Leetcode_Solutions/C++/121._Best_Time_to_Buy_and_Sell_Stock \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/125._valid_palindrome.md => "docs/Leetcode_Solutions/C++/125._valid_palindrome \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/126. Word Ladder II.md => "docs/Leetcode_Solutions/C++/126. Word Ladder II \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/127._word_ladder.md => "docs/Leetcode_Solutions/C++/127._word_ladder \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/128._Longest_Consecutive_Sequence.md => "docs/Leetcode_Solutions/C++/128._Longest_Consecutive_Sequence \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/129._sum_root_to_leaf_numbers.md => "docs/Leetcode_Solutions/C++/129._sum_root_to_leaf_numbers \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/130._surrounded_regions.md => "docs/Leetcode_Solutions/C++/130._surrounded_regions \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/131._palindrome_partitioning.md => "docs/Leetcode_Solutions/C++/131._palindrome_partitioning \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/133._clone_graph.md => "docs/Leetcode_Solutions/C++/133._clone_graph \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/136._single_number.md => "docs/Leetcode_Solutions/C++/136._single_number \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/139._word_break.md => "docs/Leetcode_Solutions/C++/139._word_break \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/140._word_break_ii.md => "docs/Leetcode_Solutions/C++/140._word_break_ii \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/141._linked_list_cycle.md => "docs/Leetcode_Solutions/C++/141._linked_list_cycle \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/142_Linked_List_Cycle_II.md => "docs/Leetcode_Solutions/C++/142_Linked_List_Cycle_II \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/143._reorder_list.md => "docs/Leetcode_Solutions/C++/143._reorder_list \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/144._binary_tree_preorder_traversal.md => "docs/Leetcode_Solutions/C++/144._binary_tree_preorder_traversal \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/145._binary_tree_postorder_traversal.md => "docs/Leetcode_Solutions/C++/145._binary_tree_postorder_traversal \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/147._insertion_sort_list.md => "docs/Leetcode_Solutions/C++/147._insertion_sort_list \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/148._sort_list.md => "docs/Leetcode_Solutions/C++/148._sort_list \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/150._evaluate_reverse_polish_notation.md => "docs/Leetcode_Solutions/C++/150._evaluate_reverse_polish_notation \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/151._reverse_words_in_a_string.md => "docs/Leetcode_Solutions/C++/151._reverse_words_in_a_string \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/152._maximum_product_subarray.md => "docs/Leetcode_Solutions/C++/152._maximum_product_subarray \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/153._find_minimum_in_rotated_sorted_array.md => "docs/Leetcode_Solutions/C++/153._find_minimum_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/155._min_stack.md => "docs/Leetcode_Solutions/C++/155._min_stack \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md => "docs/Leetcode_Solutions/C++/159._Longest_Substring_with_At_Most_Two_Distinct_Characters \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/160._intersection_of_two_linked_lists.md => "docs/Leetcode_Solutions/C++/160._intersection_of_two_linked_lists \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/162._find_peak_element.md => "docs/Leetcode_Solutions/C++/162._find_peak_element \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/165._compare_version_numbers.md => "docs/Leetcode_Solutions/C++/165._compare_version_numbers \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/166._Fraction_to_Recurring_Decimal.md => "docs/Leetcode_Solutions/C++/166._Fraction_to_Recurring_Decimal \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/167._two_sum_ii_-_input_array_is_sorted.md => "docs/Leetcode_Solutions/C++/167._two_sum_ii_-_input_array_is_sorted \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/168._excel_sheet_column_title.md => "docs/Leetcode_Solutions/C++/168._excel_sheet_column_title \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/169._majority_element.md => "docs/Leetcode_Solutions/C++/169._majority_element \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/171._excel_sheet_column_number.md => "docs/Leetcode_Solutions/C++/171._excel_sheet_column_number \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/173._binary_search_tree_iterator.md => "docs/Leetcode_Solutions/C++/173._binary_search_tree_iterator \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/189._rotate_array.md => "docs/Leetcode_Solutions/C++/189._rotate_array \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/191._number_of_1_bits.md => "docs/Leetcode_Solutions/C++/191._number_of_1_bits \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/198._house_robber.md => "docs/Leetcode_Solutions/C++/198._house_robber \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/199._binary_tree_right_side_view.md => "docs/Leetcode_Solutions/C++/199._binary_tree_right_side_view \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/200._number_of_islands.md => "docs/Leetcode_Solutions/C++/200._number_of_islands \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/203._remove_linked_list_elements.md => "docs/Leetcode_Solutions/C++/203._remove_linked_list_elements \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/204._count_primes.md => "docs/Leetcode_Solutions/C++/204._count_primes \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/205._isomorphic_strings.md => "docs/Leetcode_Solutions/C++/205._isomorphic_strings \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/206._reverse_linked_list.md => "docs/Leetcode_Solutions/C++/206._reverse_linked_list \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/207._course_schedule.md => "docs/Leetcode_Solutions/C++/207._course_schedule \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/208._implement_trie_(prefix_tree).md => "docs/Leetcode_Solutions/C++/208._implement_trie_(prefix_tree) \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/210._course_schedule_ii.md => "docs/Leetcode_Solutions/C++/210._course_schedule_ii \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/211. Add and Search Word - Data structure design.md => "docs/Leetcode_Solutions/C++/211. Add and Search Word - Data structure design \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/213._house_robber_ii.md => "docs/Leetcode_Solutions/C++/213._house_robber_ii \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/216._combination_sum_iii.md => "docs/Leetcode_Solutions/C++/216._combination_sum_iii \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/217._contains_duplicate.md => "docs/Leetcode_Solutions/C++/217._contains_duplicate \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/218._The _Skyline_Problem .md => "docs/Leetcode_Solutions/C++/218._The _Skyline_Problem \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/219._contains_duplicate_ii.md => "docs/Leetcode_Solutions/C++/219._contains_duplicate_ii \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/221._maximal_square.md => "docs/Leetcode_Solutions/C++/221._maximal_square \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/222._count_complete_tree_nodes.md => "docs/Leetcode_Solutions/C++/222._count_complete_tree_nodes \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/223._rectangle_area.md => "docs/Leetcode_Solutions/C++/223._rectangle_area \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/224. Basic Calculator .md => "docs/Leetcode_Solutions/C++/224. Basic Calculator \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/225._implement_stack_using_queues.md => "docs/Leetcode_Solutions/C++/225._implement_stack_using_queues \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/226._invert_binary_tree.md => "docs/Leetcode_Solutions/C++/226._invert_binary_tree \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/227._basic_calculator_ii.md => "docs/Leetcode_Solutions/C++/227._basic_calculator_ii \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/228._summary_ranges.md => "docs/Leetcode_Solutions/C++/228._summary_ranges \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/229._majority_element_ii.md => "docs/Leetcode_Solutions/C++/229._majority_element_ii \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/230._kth_smallest_element_in_a_bst.md => "docs/Leetcode_Solutions/C++/230._kth_smallest_element_in_a_bst \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/231. _Power_of_Two.md => "docs/Leetcode_Solutions/C++/231. _Power_of_Two \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/232._implement_queue_using_stacks.md => "docs/Leetcode_Solutions/C++/232._implement_queue_using_stacks \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/234._palindrome_linked_list.md => "docs/Leetcode_Solutions/C++/234._palindrome_linked_list \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/235._lowest_common_ancestor_of_a_binary_search_tree.md => "docs/Leetcode_Solutions/C++/235._lowest_common_ancestor_of_a_binary_search_tree \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/236._lowest_common_ancestor_of_a_binary_tree.md => "docs/Leetcode_Solutions/C++/236._lowest_common_ancestor_of_a_binary_tree \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/237._delete_node_in_a_linked_list.md => "docs/Leetcode_Solutions/C++/237._delete_node_in_a_linked_list \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/238._product_of_array_except_self.md => "docs/Leetcode_Solutions/C++/238._product_of_array_except_self \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/240._search_a_2d_matrix_ii.md => "docs/Leetcode_Solutions/C++/240._search_a_2d_matrix_ii \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/242._valid_anagram.md => "docs/Leetcode_Solutions/C++/242._valid_anagram \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/252. Meeting Rooms.md => "docs/Leetcode_Solutions/C++/252. Meeting Rooms \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md => "docs/Leetcode_Solutions/C++/255._Verify_Preorder_Sequence_in_Binary_Search_Tree \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/256. Paint House.md => "docs/Leetcode_Solutions/C++/256. Paint House \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/257._binary_tree_paths.md => "docs/Leetcode_Solutions/C++/257._binary_tree_paths \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/258_ Add_Digits.md => "docs/Leetcode_Solutions/C++/258_ Add_Digits \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/261. Graph Valid Tree.md => "docs/Leetcode_Solutions/C++/261. Graph Valid Tree \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/263._ugly_number.md => "docs/Leetcode_Solutions/C++/263._ugly_number \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/264._ugly_number_ii.md => "docs/Leetcode_Solutions/C++/264._ugly_number_ii \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/265. Paint House II.md => "docs/Leetcode_Solutions/C++/265. Paint House II \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/266. Palindrome Permutation.md => "docs/Leetcode_Solutions/C++/266. Palindrome Permutation \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/267. Palindrome Permutation II.md => "docs/Leetcode_Solutions/C++/267. Palindrome Permutation II \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/268._missing_number.md => "docs/Leetcode_Solutions/C++/268._missing_number \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/270. Closest Binary Search Tree Value.md => "docs/Leetcode_Solutions/C++/270. Closest Binary Search Tree Value \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/276. Paint Fence.md => "docs/Leetcode_Solutions/C++/276. Paint Fence \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/277. Find the Celebrity.md => "docs/Leetcode_Solutions/C++/277. Find the Celebrity \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/278._First_Bad _Version.md => "docs/Leetcode_Solutions/C++/278._First_Bad _Version \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/279._perfect_squares.md => "docs/Leetcode_Solutions/C++/279._perfect_squares \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/280._Wiggle_Sort.md => "docs/Leetcode_Solutions/C++/280._Wiggle_Sort \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/283._move_zeroes.md => "docs/Leetcode_Solutions/C++/283._move_zeroes \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/285._inorder_successor_in_bst.md => "docs/Leetcode_Solutions/C++/285._inorder_successor_in_bst \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/286. Walls and Gates.md => "docs/Leetcode_Solutions/C++/286. Walls and Gates \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/289._game_of_life.md => "docs/Leetcode_Solutions/C++/289._game_of_life \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/290._word_pattern.md => "docs/Leetcode_Solutions/C++/290._word_pattern \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/292._nim_game.md => "docs/Leetcode_Solutions/C++/292._nim_game \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/296. Best Meeting Point.md => "docs/Leetcode_Solutions/C++/296. Best Meeting Point \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/298. Binary Tree Longest Consecutive Sequence.md => "docs/Leetcode_Solutions/C++/298. Binary Tree Longest Consecutive Sequence \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/299._bulls_and_cows.md => "docs/Leetcode_Solutions/C++/299._bulls_and_cows \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/300._longest_increasing_subsequence.md => "docs/Leetcode_Solutions/C++/300._longest_increasing_subsequence \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/303._range_sum_query_-_immutable.md => "docs/Leetcode_Solutions/C++/303._range_sum_query_-_immutable \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/316._Remove_Duplicate_Letters.md => "docs/Leetcode_Solutions/C++/316._Remove_Duplicate_Letters \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/319._Bulb_Switcher.md => "docs/Leetcode_Solutions/C++/319._Bulb_Switcher \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/322. Coin Change.md => "docs/Leetcode_Solutions/C++/322. Coin Change \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/323. Number of Connected Components in an Undirected Graph.md => "docs/Leetcode_Solutions/C++/323. Number of Connected Components in an Undirected Graph \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/324._Wiggle_Sort_II.md => "docs/Leetcode_Solutions/C++/324._Wiggle_Sort_II \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/326._power_of_three.md => "docs/Leetcode_Solutions/C++/326._power_of_three \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/328._odd_even_linked_list.md => "docs/Leetcode_Solutions/C++/328._odd_even_linked_list \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/334._increasing_triplet_subsequence.md => "docs/Leetcode_Solutions/C++/334._increasing_triplet_subsequence \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/337._house_robber_iii.md => "docs/Leetcode_Solutions/C++/337._house_robber_iii \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/338. Counting Bits.md => "docs/Leetcode_Solutions/C++/338. Counting Bits \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/339. Nested List Weight Sum.md => "docs/Leetcode_Solutions/C++/339. Nested List Weight Sum \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/341._Flatten_Nested_List_Iterator.md => "docs/Leetcode_Solutions/C++/341._Flatten_Nested_List_Iterator \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/342._Power_of_Four.md => "docs/Leetcode_Solutions/C++/342._Power_of_Four \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/344._reverse_string.md => "docs/Leetcode_Solutions/C++/344._reverse_string \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/345._Reverse_Vowels_of_a_String.md => "docs/Leetcode_Solutions/C++/345._Reverse_Vowels_of_a_String \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/349._intersection_of_two_arrays.md => "docs/Leetcode_Solutions/C++/349._intersection_of_two_arrays \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/350._intersection_of_two_arrays_ii.md => "docs/Leetcode_Solutions/C++/350._intersection_of_two_arrays_ii \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/353. Design Snake Game.md => "docs/Leetcode_Solutions/C++/353. Design Snake Game \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/364. Nested List Weight Sum II.md => "docs/Leetcode_Solutions/C++/364. Nested List Weight Sum II \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/366. Find Leaves of Binary Tree.md => "docs/Leetcode_Solutions/C++/366. Find Leaves of Binary Tree \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/367._valid_perfect_square.md => "docs/Leetcode_Solutions/C++/367._valid_perfect_square \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/369.Plus One Linked List.md => "docs/Leetcode_Solutions/C++/369.Plus One Linked List \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/371._sum_of_two_integers.md => "docs/Leetcode_Solutions/C++/371._sum_of_two_integers \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/374._Guess_Number_Higher_or_Lower.md => "docs/Leetcode_Solutions/C++/374._Guess_Number_Higher_or_Lower \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/377._combination_sum_iv.md => "docs/Leetcode_Solutions/C++/377._combination_sum_iv \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/378._kth_smallest_element_in_a_sorted_matrix.md => "docs/Leetcode_Solutions/C++/378._kth_smallest_element_in_a_sorted_matrix \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/380. Insert Delete GetRandom O(1).md => "docs/Leetcode_Solutions/C++/380. Insert Delete GetRandom O(1) \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/381. Insert Delete GetRandom O(1) - Duplicates allowed.md => "docs/Leetcode_Solutions/C++/381. Insert Delete GetRandom O(1) - Duplicates allowed \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/382._linked_list_random_node.md => "docs/Leetcode_Solutions/C++/382._linked_list_random_node \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/383._ransom_note.md => "docs/Leetcode_Solutions/C++/383._ransom_note \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/384. Shuffle an Array.md => "docs/Leetcode_Solutions/C++/384. Shuffle an Array \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/387._first_unique_character_in_a_string.md => "docs/Leetcode_Solutions/C++/387._first_unique_character_in_a_string \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/388._Longest_Absolute_File_Path.md => "docs/Leetcode_Solutions/C++/388._Longest_Absolute_File_Path \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/389._find_the_difference.md => "docs/Leetcode_Solutions/C++/389._find_the_difference \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/392._is_subsequence.md => "docs/Leetcode_Solutions/C++/392._is_subsequence \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/394._decode_string.md => "docs/Leetcode_Solutions/C++/394._decode_string \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/400. Nth Digit.md => "docs/Leetcode_Solutions/C++/400. Nth Digit \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/401._binary_watch.md => "docs/Leetcode_Solutions/C++/401._binary_watch \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/404._sum_of_left_leaves.md => "docs/Leetcode_Solutions/C++/404._sum_of_left_leaves \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/405. Convert a Number to Hexadecimal.md => "docs/Leetcode_Solutions/C++/405. Convert a Number to Hexadecimal \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/406._Queue_Reconstruction_by_Height.md => "docs/Leetcode_Solutions/C++/406._Queue_Reconstruction_by_Height \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/412._fizz_buzz.md => "docs/Leetcode_Solutions/C++/412._fizz_buzz \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/413. Arithmetic Slices.md => "docs/Leetcode_Solutions/C++/413. Arithmetic Slices \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/414._third_maximum_number.md => "docs/Leetcode_Solutions/C++/414._third_maximum_number \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/415._add_strings.md => "docs/Leetcode_Solutions/C++/415._add_strings \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/416. Partition Equal Subset Sum.md => "docs/Leetcode_Solutions/C++/416. Partition Equal Subset Sum \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md => "docs/Leetcode_Solutions/C++/421._Maximum_XOR_of_Two_Numbers_in_an_Array \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/422. Valid Word Square.md => "docs/Leetcode_Solutions/C++/422. Valid Word Square \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/434._number_of_segments_in_a_string.md => "docs/Leetcode_Solutions/C++/434._number_of_segments_in_a_string \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/437._path_sum_iii.md => "docs/Leetcode_Solutions/C++/437._path_sum_iii \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/438._Find_All_Anagrams_in_a_String.md => "docs/Leetcode_Solutions/C++/438._Find_All_Anagrams_in_a_String \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/439. Ternary Expression Parser.md => "docs/Leetcode_Solutions/C++/439. Ternary Expression Parser \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/441._arranging_coins.md => "docs/Leetcode_Solutions/C++/441._arranging_coins \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/448._Find_All_Numbers_Disappeared_in_an_Array.md => "docs/Leetcode_Solutions/C++/448._Find_All_Numbers_Disappeared_in_an_Array \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/450. Delete Node in a BST.md => "docs/Leetcode_Solutions/C++/450. Delete Node in a BST \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/453._Minimum_Moves_to_Equal_Array_Elements.md => "docs/Leetcode_Solutions/C++/453._Minimum_Moves_to_Equal_Array_Elements \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/459._Repeated_Substring_Pattern.md => "docs/Leetcode_Solutions/C++/459._Repeated_Substring_Pattern \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/461._Hamming Distance.md => "docs/Leetcode_Solutions/C++/461._Hamming Distance \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/463._Island_Perimeter.md => "docs/Leetcode_Solutions/C++/463._Island_Perimeter \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/467._Unique_Substrings_in_Wraparound_String.md => "docs/Leetcode_Solutions/C++/467._Unique_Substrings_in_Wraparound_String \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/469. Convex Polygon.md => "docs/Leetcode_Solutions/C++/469. Convex Polygon \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/476._Number_Complement.md => "docs/Leetcode_Solutions/C++/476._Number_Complement \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/477._Total_Hamming_Distance.md => "docs/Leetcode_Solutions/C++/477._Total_Hamming_Distance \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/485._Max_Consecutive_Ones.md => "docs/Leetcode_Solutions/C++/485._Max_Consecutive_Ones \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/587._Erect_the_Fence .md => "docs/Leetcode_Solutions/C++/587._Erect_the_Fence \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/599._Minimum_Index_Sum_of_Two_Lists.md => "docs/Leetcode_Solutions/C++/599._Minimum_Index_Sum_of_Two_Lists \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/647._Palindromic_Substrings.md => "docs/Leetcode_Solutions/C++/647._Palindromic_Substrings \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/657._Judge_Route_Circle.md => "docs/Leetcode_Solutions/C++/657._Judge_Route_Circle \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/665._Non-decreasing_Array.md => "docs/Leetcode_Solutions/C++/665._Non-decreasing_Array \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/672._Bulb_Switcher_II.md => "docs/Leetcode_Solutions/C++/672._Bulb_Switcher_II \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/681._Next_Closest_Time.md => "docs/Leetcode_Solutions/C++/681._Next_Closest_Time \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/682._Baseball_Game.md => "docs/Leetcode_Solutions/C++/682._Baseball_Game \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/687._Longest_Univalue_Path.md => "docs/Leetcode_Solutions/C++/687._Longest_Univalue_Path \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/740._delete_and_earn.md => "docs/Leetcode_Solutions/C++/740._delete_and_earn \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/760._Find_Anagram_Mappings.md => "docs/Leetcode_Solutions/C++/760._Find_Anagram_Mappings \344\270\212\345\215\2102.49.13.md" (100%) rename docs/Leetcode_Solutions/README.md => "docs/Leetcode_Solutions/C++/README \344\270\212\345\215\2102.49.13.md" (100%) rename "docs/Leetcode_Solutions/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" => "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Binary Search \344\270\215\346\230\223\345\206\231.md" (100%) rename docs/Leetcode_Solutions/Summarization/Data Structure and Algorthim Review.md => "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Data Structure and Algorthim Review.md" (100%) rename docs/Leetcode_Solutions/Summarization/Dynamic Programming.md => "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Dynamic Programming.md" (100%) rename "docs/Leetcode_Solutions/Summarization/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" => "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" (100%) rename "docs/Leetcode_Solutions/Summarization/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" => "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" (100%) rename "docs/Leetcode_Solutions/Summarization/LinkedList\346\212\200\345\267\247.md" => "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/LinkedList\346\212\200\345\267\247.md" (100%) rename docs/Leetcode_Solutions/Summarization/Maximal Square.pdf => "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Maximal Square.pdf" (100%) rename "docs/Leetcode_Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" => "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" (100%) rename docs/Leetcode_Solutions/Summarization/Range Sum Query 2D - Immutable.pdf => "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Range Sum Query 2D - Immutable.pdf" (100%) rename docs/Leetcode_Solutions/Summarization/Recusrion & BackTracking.md => "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Recusrion & BackTracking.md" (100%) rename "docs/Leetcode_Solutions/Summarization/backtracking\346\200\235\350\267\257.md" => "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/backtracking\346\200\235\350\267\257.md" (100%) rename "docs/Leetcode_Solutions/Summarization/delete_node_in_a_linked_list\351\227\256\351\242\230.md" => "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/delete_node_in_a_linked_list\351\227\256\351\242\230.md" (100%) rename "docs/Leetcode_Solutions/Summarization/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" => "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" (100%) rename "docs/Leetcode_Solutions/Summarization/python\347\232\204\345\220\204\347\247\215pass.md" => "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/python\347\232\204\345\220\204\347\247\215pass.md" (100%) rename docs/Leetcode_Solutions/Summarization/slide_windows_template.md => "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/slide_windows_template.md" (100%) rename "docs/Leetcode_Solutions/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" => "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" (100%) rename "docs/Leetcode_Solutions/Summarization/\344\275\215\350\277\220\347\256\227.md" => "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\344\275\215\350\277\220\347\256\227.md" (100%) rename "docs/Leetcode_Solutions/Summarization/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" => "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" (100%) rename "docs/Leetcode_Solutions/Summarization/\345\205\253\346\216\222\345\272\217.md" => "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\345\205\253\346\216\222\345\272\217.md" (100%) rename "docs/Leetcode_Solutions/Summarization/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" => "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" (100%) rename "docs/Leetcode_Solutions/Summarization/\346\200\273\347\273\223.md" => "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\346\200\273\347\273\223.md" (100%) rename "docs/Leetcode_Solutions/Summarization/\347\273\204\345\220\210\351\227\256\351\242\230.md" => "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\347\273\204\345\220\210\351\227\256\351\242\230.md" (100%) rename "docs/Leetcode_Solutions/Summarization/\351\200\222\345\275\222_recursion.md" => "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\351\200\222\345\275\222_recursion.md" (100%) create mode 100644 "docs/Leetcode_Solutions/Java/001._two_sum \344\270\212\345\215\2102.49.12.md" create mode 100644 "docs/Leetcode_Solutions/Java/002._add_two_numbers \344\270\212\345\215\2102.49.12.md" create mode 100644 "docs/Leetcode_Solutions/Java/003._longest_substring_without_repeating_characters \344\270\212\345\215\2102.49.12.md" create mode 100644 "docs/Leetcode_Solutions/Java/004._median_of_two_sorted_arrays \344\270\212\345\215\2102.49.12.md" create mode 100644 "docs/Leetcode_Solutions/Java/005._longest_palindromic_substring \344\270\212\345\215\2102.49.12.md" create mode 100644 "docs/Leetcode_Solutions/Java/006._ZigZag_Conversion \344\270\212\345\215\2102.49.12.md" create mode 100644 "docs/Leetcode_Solutions/Java/007._Reverse_Integer \344\270\212\345\215\2102.49.12.md" create mode 100644 "docs/Leetcode_Solutions/Java/008._string_to_integer_(atoi) \344\270\212\345\215\2102.49.12.md" create mode 100644 "docs/Leetcode_Solutions/Java/009._Palindrome_Number \344\270\212\345\215\2102.49.12.md" create mode 100644 "docs/Leetcode_Solutions/Java/010._regular_expression_matching \344\270\212\345\215\2102.49.12.md" create mode 100644 "docs/Leetcode_Solutions/Java/011._container_with_most_water \344\270\212\345\215\2102.49.12.md" create mode 100644 "docs/Leetcode_Solutions/Java/012._Integer_to_Roman \344\270\212\345\215\2102.49.12.md" create mode 100644 "docs/Leetcode_Solutions/Java/013._Roman_to_Integer \344\270\212\345\215\2102.49.12.md" create mode 100644 "docs/Leetcode_Solutions/Java/014._longest_common_prefix \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/015._3sum \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/016._3sum_closest \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/017._letter_combinations_of_a_phone_number \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/018._4sum \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/019._remove_nth_node_from_end_of_list \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/020._valid_parentheses \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/021._merge_two_sorted_lists \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/022._generate_parentheses \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/023._merge_k_sorted_lists \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/024._swap_nodes_in_pairs \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/026._Remove_Duplicates_from_Sorted_Array \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/027._Remove_Element \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/028._implement_strstr() \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/030._Substring_with_Concatenation_of_All_Words \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/031._next_permutation \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/033._search_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/034._Search for a Range \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/035._search_insert_position \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/038._Count_and_Say \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/039._combination_sum \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/040._combination_sum_ii \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/042._trapping_rain_water \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/043._multiply_strings \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/044._wildcard_matching \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/045._Jump_Game_II \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/046._permutations \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/047._permutations_ii \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/048._rotate_image \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/049._group_anagrams_python \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/050._pow(x,_n) \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/051._n-queens \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/052._n-queens_ii \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/053._maximum_subarray \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/054._spiral_matrix \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/055._jump_game \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/056._Merge_Intervals \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/058._length_of_last_word \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/059._spiral_matrix_ii \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/060._permutation_sequence \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/061._rotate_list \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/064._minimum_path_sum \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/065.unique_paths_ii \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/066._plus_one \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/067._add_binary \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/069._sqrt(x) \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/070. Climbing Stairs \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/072._edit_distance \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/073. Set Matrix Zeroes \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/074._search_a_2d_matrix \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/075._sort_colors \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/076._Minimum_Window_Substring \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/077._combinations \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/078.Subsets \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/079._word_search \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/082._remove_duplicates_from_sorted_list_ii \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/083._remove_duplicates_from_sorted_list \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/086._partition_list \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/088._merge_sorted_array \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/089._gray_code \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/090._subsets_ii \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/091._decode_ways \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/092._reverse_linked_list_ii \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/093._restore_ip_addresses \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/094._binary_tree_inorder_traversal \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/096._unique_binary_search_trees \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/098._validate_binary_search_tree \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/100._same_tree \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/101._symmetric_tree \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/102._binary_tree_level_order_traversal \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/103._binary_tree_zigzag_level_order_traversal \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/104._maximum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/105._construct_binary_tree_from_preorder_and_inorder_traversal \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/106._construct_binary_tree_from_inorder_and_postorder_traversal \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/107._binary_tree_level_order_traversal_ii \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/108._convert_sorted_array_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/109._convert_sorted_list_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/110._balanced_binary_tree \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/111._minimum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/112._path_sum \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/113._path_sum_ii \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/114._flatten_binary_tree_to_linked_list \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/116._populating_next_right_pointers_in_each_node \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/118._pascal's_triangle \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/119. Pascal's Triangle II \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/120. Triangle \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/121._Best_Time_to_Buy_and_Sell_Stock \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/125._valid_palindrome \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/126. Word Ladder II \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/127._word_ladder \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/128._Longest_Consecutive_Sequence \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/129._sum_root_to_leaf_numbers \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/130._surrounded_regions \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/131._palindrome_partitioning \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/133._clone_graph \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/136._single_number \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/139._word_break \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/140._word_break_ii \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/141._linked_list_cycle \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/142_Linked_List_Cycle_II \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/143._reorder_list \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/144._binary_tree_preorder_traversal \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/145._binary_tree_postorder_traversal \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/147._insertion_sort_list \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/148._sort_list \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/150._evaluate_reverse_polish_notation \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/151._reverse_words_in_a_string \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/152._maximum_product_subarray \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/153._find_minimum_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/155._min_stack \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/159._Longest_Substring_with_At_Most_Two_Distinct_Characters \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/160._intersection_of_two_linked_lists \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/162._find_peak_element \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/165._compare_version_numbers \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/166._Fraction_to_Recurring_Decimal \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/167._two_sum_ii_-_input_array_is_sorted \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/168._excel_sheet_column_title \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/169._majority_element \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/171._excel_sheet_column_number \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/173._binary_search_tree_iterator \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/189._rotate_array \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/191._number_of_1_bits \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/198._house_robber \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/199._binary_tree_right_side_view \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/200._number_of_islands \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/203._remove_linked_list_elements \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/204._count_primes \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/205._isomorphic_strings \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/206._reverse_linked_list \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/207._course_schedule \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/208._implement_trie_(prefix_tree) \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/210._course_schedule_ii \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/211. Add and Search Word - Data structure design \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/213._house_robber_ii \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/216._combination_sum_iii \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/217._contains_duplicate \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/218._The _Skyline_Problem \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/219._contains_duplicate_ii \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/221._maximal_square \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/222._count_complete_tree_nodes \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/223._rectangle_area \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/224. Basic Calculator \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/225._implement_stack_using_queues \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/226._invert_binary_tree \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/227._basic_calculator_ii \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/228._summary_ranges \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/229._majority_element_ii \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/230._kth_smallest_element_in_a_bst \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/231. _Power_of_Two \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/232._implement_queue_using_stacks \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/234._palindrome_linked_list \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/235._lowest_common_ancestor_of_a_binary_search_tree \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/236._lowest_common_ancestor_of_a_binary_tree \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/237._delete_node_in_a_linked_list \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/238._product_of_array_except_self \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/240._search_a_2d_matrix_ii \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/242._valid_anagram \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/252. Meeting Rooms \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/255._Verify_Preorder_Sequence_in_Binary_Search_Tree \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/256. Paint House \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/257._binary_tree_paths \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/258_ Add_Digits \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/261. Graph Valid Tree \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/263._ugly_number \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/264._ugly_number_ii \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/265. Paint House II \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/266. Palindrome Permutation \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/267. Palindrome Permutation II \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/268._missing_number \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/270. Closest Binary Search Tree Value \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/276. Paint Fence \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/277. Find the Celebrity \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/278._First_Bad _Version \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/279._perfect_squares \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/280._Wiggle_Sort \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/283._move_zeroes \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/285._inorder_successor_in_bst \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/286. Walls and Gates \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/289._game_of_life \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/290._word_pattern \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/292._nim_game \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/296. Best Meeting Point \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/298. Binary Tree Longest Consecutive Sequence \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/299._bulls_and_cows \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/300._longest_increasing_subsequence \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/303._range_sum_query_-_immutable \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/316._Remove_Duplicate_Letters \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/319._Bulb_Switcher \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/322. Coin Change \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/323. Number of Connected Components in an Undirected Graph \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/324._Wiggle_Sort_II \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/326._power_of_three \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/328._odd_even_linked_list \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/334._increasing_triplet_subsequence \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/337._house_robber_iii \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/338. Counting Bits \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/339. Nested List Weight Sum \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/341._Flatten_Nested_List_Iterator \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/342._Power_of_Four \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/344._reverse_string \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/345._Reverse_Vowels_of_a_String \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/349._intersection_of_two_arrays \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/350._intersection_of_two_arrays_ii \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/353. Design Snake Game \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/364. Nested List Weight Sum II \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/366. Find Leaves of Binary Tree \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/367._valid_perfect_square \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/369.Plus One Linked List \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/371._sum_of_two_integers \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/374._Guess_Number_Higher_or_Lower \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/377._combination_sum_iv \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/378._kth_smallest_element_in_a_sorted_matrix \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/380. Insert Delete GetRandom O(1) \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/381. Insert Delete GetRandom O(1) - Duplicates allowed \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/382._linked_list_random_node \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/383._ransom_note \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/384. Shuffle an Array \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/387._first_unique_character_in_a_string \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/388._Longest_Absolute_File_Path \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/389._find_the_difference \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/392._is_subsequence \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/394._decode_string \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/400. Nth Digit \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/401._binary_watch \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/404._sum_of_left_leaves \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/405. Convert a Number to Hexadecimal \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/406._Queue_Reconstruction_by_Height \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/412._fizz_buzz \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/413. Arithmetic Slices \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/414._third_maximum_number \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/415._add_strings \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/416. Partition Equal Subset Sum \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/421._Maximum_XOR_of_Two_Numbers_in_an_Array \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/422. Valid Word Square \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/434._number_of_segments_in_a_string \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/437._path_sum_iii \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/438._Find_All_Anagrams_in_a_String \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/439. Ternary Expression Parser \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/441._arranging_coins \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/448._Find_All_Numbers_Disappeared_in_an_Array \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/450. Delete Node in a BST \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/453._Minimum_Moves_to_Equal_Array_Elements \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/459._Repeated_Substring_Pattern \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/461._Hamming Distance \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/463._Island_Perimeter \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/467._Unique_Substrings_in_Wraparound_String \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/469. Convex Polygon \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/476._Number_Complement \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/477._Total_Hamming_Distance \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/485._Max_Consecutive_Ones \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/587._Erect_the_Fence \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/599._Minimum_Index_Sum_of_Two_Lists \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/647._Palindromic_Substrings \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/657._Judge_Route_Circle \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/665._Non-decreasing_Array \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/672._Bulb_Switcher_II \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/681._Next_Closest_Time \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/682._Baseball_Game \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/687._Longest_Univalue_Path \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/740._delete_and_earn \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/760._Find_Anagram_Mappings \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/README \344\270\212\345\215\2102.49.13.md" create mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Binary Search \344\270\215\346\230\223\345\206\231.md" create mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Data Structure and Algorthim Review.md" create mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Dynamic Programming.md" create mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" create mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" create mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/LinkedList\346\212\200\345\267\247.md" create mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Maximal Square.pdf" create mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" create mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Range Sum Query 2D - Immutable.pdf" create mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Recusrion & BackTracking.md" create mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/backtracking\346\200\235\350\267\257.md" create mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/delete_node_in_a_linked_list\351\227\256\351\242\230.md" create mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" create mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/python\347\232\204\345\220\204\347\247\215pass.md" create mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/slide_windows_template.md" create mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" create mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\344\275\215\350\277\220\347\256\227.md" create mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" create mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\345\205\253\346\216\222\345\272\217.md" create mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" create mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\346\200\273\347\273\223.md" create mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\347\273\204\345\220\210\351\227\256\351\242\230.md" create mode 100644 "docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/\351\200\222\345\275\222_recursion.md" create mode 100644 docs/Leetcode_Solutions/Python/001._two_sum.md create mode 100644 docs/Leetcode_Solutions/Python/002._add_two_numbers.md create mode 100644 docs/Leetcode_Solutions/Python/003._longest_substring_without_repeating_characters.md create mode 100644 docs/Leetcode_Solutions/Python/004._median_of_two_sorted_arrays.md create mode 100644 docs/Leetcode_Solutions/Python/005._longest_palindromic_substring.md create mode 100644 docs/Leetcode_Solutions/Python/006._ZigZag_Conversion.md create mode 100644 docs/Leetcode_Solutions/Python/007._Reverse_Integer.md create mode 100644 docs/Leetcode_Solutions/Python/008._string_to_integer_(atoi).md create mode 100644 docs/Leetcode_Solutions/Python/009._Palindrome_Number.md create mode 100644 docs/Leetcode_Solutions/Python/010._regular_expression_matching.md create mode 100644 docs/Leetcode_Solutions/Python/011._container_with_most_water.md create mode 100644 docs/Leetcode_Solutions/Python/012._Integer_to_Roman.md create mode 100644 docs/Leetcode_Solutions/Python/013._Roman_to_Integer.md create mode 100644 docs/Leetcode_Solutions/Python/014._longest_common_prefix.md create mode 100644 docs/Leetcode_Solutions/Python/015._3sum.md create mode 100644 docs/Leetcode_Solutions/Python/016._3sum_closest.md create mode 100644 docs/Leetcode_Solutions/Python/017._letter_combinations_of_a_phone_number.md create mode 100644 docs/Leetcode_Solutions/Python/018._4sum.md create mode 100644 docs/Leetcode_Solutions/Python/019._remove_nth_node_from_end_of_list.md create mode 100644 docs/Leetcode_Solutions/Python/020._valid_parentheses.md create mode 100644 docs/Leetcode_Solutions/Python/021._merge_two_sorted_lists.md create mode 100644 docs/Leetcode_Solutions/Python/022._generate_parentheses.md create mode 100644 docs/Leetcode_Solutions/Python/023._merge_k_sorted_lists.md create mode 100644 docs/Leetcode_Solutions/Python/024._swap_nodes_in_pairs.md create mode 100644 docs/Leetcode_Solutions/Python/026._Remove_Duplicates_from_Sorted_Array.md create mode 100644 docs/Leetcode_Solutions/Python/027._Remove_Element.md create mode 100644 docs/Leetcode_Solutions/Python/028._implement_strstr().md create mode 100644 docs/Leetcode_Solutions/Python/030._Substring_with_Concatenation_of_All_Words.md create mode 100644 docs/Leetcode_Solutions/Python/031._next_permutation.md create mode 100644 docs/Leetcode_Solutions/Python/033._search_in_rotated_sorted_array.md create mode 100644 docs/Leetcode_Solutions/Python/034._Search for a Range.md create mode 100644 docs/Leetcode_Solutions/Python/035._search_insert_position.md create mode 100644 docs/Leetcode_Solutions/Python/038._Count_and_Say.md create mode 100644 docs/Leetcode_Solutions/Python/039._combination_sum.md create mode 100644 docs/Leetcode_Solutions/Python/040._combination_sum_ii.md create mode 100644 docs/Leetcode_Solutions/Python/042._trapping_rain_water.md create mode 100644 docs/Leetcode_Solutions/Python/043._multiply_strings.md create mode 100644 docs/Leetcode_Solutions/Python/044._wildcard_matching.md create mode 100644 docs/Leetcode_Solutions/Python/045._Jump_Game_II.md create mode 100644 docs/Leetcode_Solutions/Python/046._permutations.md create mode 100644 docs/Leetcode_Solutions/Python/047._permutations_ii.md create mode 100644 docs/Leetcode_Solutions/Python/048._rotate_image.md create mode 100644 docs/Leetcode_Solutions/Python/049._group_anagrams_python.md create mode 100644 docs/Leetcode_Solutions/Python/050._pow(x,_n).md create mode 100644 docs/Leetcode_Solutions/Python/051._n-queens.md create mode 100644 docs/Leetcode_Solutions/Python/052._n-queens_ii.md create mode 100644 docs/Leetcode_Solutions/Python/053._maximum_subarray.md create mode 100644 docs/Leetcode_Solutions/Python/054._spiral_matrix.md create mode 100644 docs/Leetcode_Solutions/Python/055._jump_game.md create mode 100644 docs/Leetcode_Solutions/Python/056._Merge_Intervals.md create mode 100644 docs/Leetcode_Solutions/Python/058._length_of_last_word.md create mode 100644 docs/Leetcode_Solutions/Python/059._spiral_matrix_ii.md create mode 100644 docs/Leetcode_Solutions/Python/060._permutation_sequence.md create mode 100644 docs/Leetcode_Solutions/Python/061._rotate_list.md create mode 100644 docs/Leetcode_Solutions/Python/064._minimum_path_sum.md create mode 100644 docs/Leetcode_Solutions/Python/065.unique_paths_ii.md create mode 100644 docs/Leetcode_Solutions/Python/066._plus_one.md create mode 100644 docs/Leetcode_Solutions/Python/067._add_binary.md create mode 100644 docs/Leetcode_Solutions/Python/069._sqrt(x).md create mode 100644 docs/Leetcode_Solutions/Python/070. Climbing Stairs.md create mode 100644 docs/Leetcode_Solutions/Python/072._edit_distance.md create mode 100644 docs/Leetcode_Solutions/Python/073. Set Matrix Zeroes.md create mode 100644 docs/Leetcode_Solutions/Python/074._search_a_2d_matrix.md create mode 100644 docs/Leetcode_Solutions/Python/075._sort_colors.md create mode 100644 docs/Leetcode_Solutions/Python/076._Minimum_Window_Substring.md create mode 100644 docs/Leetcode_Solutions/Python/077._combinations.md create mode 100644 docs/Leetcode_Solutions/Python/078.Subsets .md create mode 100644 docs/Leetcode_Solutions/Python/079._word_search.md create mode 100644 docs/Leetcode_Solutions/Python/082._remove_duplicates_from_sorted_list_ii.md create mode 100644 docs/Leetcode_Solutions/Python/083._remove_duplicates_from_sorted_list.md create mode 100644 docs/Leetcode_Solutions/Python/086._partition_list.md create mode 100644 docs/Leetcode_Solutions/Python/088._merge_sorted_array.md create mode 100644 docs/Leetcode_Solutions/Python/089._gray_code.md create mode 100644 docs/Leetcode_Solutions/Python/090._subsets_ii.md create mode 100644 docs/Leetcode_Solutions/Python/091._decode_ways.md create mode 100644 docs/Leetcode_Solutions/Python/092._reverse_linked_list_ii.md create mode 100644 docs/Leetcode_Solutions/Python/093._restore_ip_addresses.md create mode 100644 docs/Leetcode_Solutions/Python/094._binary_tree_inorder_traversal.md create mode 100644 docs/Leetcode_Solutions/Python/096._unique_binary_search_trees.md create mode 100644 docs/Leetcode_Solutions/Python/098._validate_binary_search_tree.md create mode 100644 docs/Leetcode_Solutions/Python/100._same_tree.md create mode 100644 docs/Leetcode_Solutions/Python/101._symmetric_tree.md create mode 100644 docs/Leetcode_Solutions/Python/102._binary_tree_level_order_traversal.md create mode 100644 docs/Leetcode_Solutions/Python/103._binary_tree_zigzag_level_order_traversal.md create mode 100644 docs/Leetcode_Solutions/Python/104._maximum_depth_of_binary_tree.md create mode 100644 docs/Leetcode_Solutions/Python/105._construct_binary_tree_from_preorder_and_inorder_traversal.md create mode 100644 docs/Leetcode_Solutions/Python/106._construct_binary_tree_from_inorder_and_postorder_traversal.md create mode 100644 docs/Leetcode_Solutions/Python/107._binary_tree_level_order_traversal_ii.md create mode 100644 docs/Leetcode_Solutions/Python/108._convert_sorted_array_to_binary_search_tree.md create mode 100644 docs/Leetcode_Solutions/Python/109._convert_sorted_list_to_binary_search_tree.md create mode 100644 docs/Leetcode_Solutions/Python/110._balanced_binary_tree.md create mode 100644 docs/Leetcode_Solutions/Python/111._minimum_depth_of_binary_tree.md create mode 100644 docs/Leetcode_Solutions/Python/112._path_sum.md create mode 100644 docs/Leetcode_Solutions/Python/113._path_sum_ii.md create mode 100644 docs/Leetcode_Solutions/Python/114._flatten_binary_tree_to_linked_list.md create mode 100644 docs/Leetcode_Solutions/Python/116._populating_next_right_pointers_in_each_node.md create mode 100644 docs/Leetcode_Solutions/Python/118._pascal's_triangle.md create mode 100644 docs/Leetcode_Solutions/Python/119. Pascal's Triangle II.md create mode 100644 docs/Leetcode_Solutions/Python/120. Triangle.md create mode 100644 docs/Leetcode_Solutions/Python/121._Best_Time_to_Buy_and_Sell_Stock.md create mode 100644 docs/Leetcode_Solutions/Python/125._valid_palindrome.md create mode 100644 docs/Leetcode_Solutions/Python/126. Word Ladder II.md create mode 100644 docs/Leetcode_Solutions/Python/127._word_ladder.md create mode 100644 docs/Leetcode_Solutions/Python/128._Longest_Consecutive_Sequence.md create mode 100644 docs/Leetcode_Solutions/Python/129._sum_root_to_leaf_numbers.md create mode 100644 docs/Leetcode_Solutions/Python/130._surrounded_regions.md create mode 100644 docs/Leetcode_Solutions/Python/131._palindrome_partitioning.md create mode 100644 docs/Leetcode_Solutions/Python/133._clone_graph.md create mode 100644 docs/Leetcode_Solutions/Python/136._single_number.md create mode 100644 docs/Leetcode_Solutions/Python/139._word_break.md create mode 100644 docs/Leetcode_Solutions/Python/140._word_break_ii.md create mode 100644 docs/Leetcode_Solutions/Python/141._linked_list_cycle.md create mode 100644 docs/Leetcode_Solutions/Python/142_Linked_List_Cycle_II.md create mode 100644 docs/Leetcode_Solutions/Python/143._reorder_list.md create mode 100644 docs/Leetcode_Solutions/Python/144._binary_tree_preorder_traversal.md create mode 100644 docs/Leetcode_Solutions/Python/145._binary_tree_postorder_traversal.md create mode 100644 docs/Leetcode_Solutions/Python/147._insertion_sort_list.md create mode 100644 docs/Leetcode_Solutions/Python/148._sort_list.md create mode 100644 docs/Leetcode_Solutions/Python/150._evaluate_reverse_polish_notation.md create mode 100644 docs/Leetcode_Solutions/Python/151._reverse_words_in_a_string.md create mode 100644 docs/Leetcode_Solutions/Python/152._maximum_product_subarray.md create mode 100644 docs/Leetcode_Solutions/Python/153._find_minimum_in_rotated_sorted_array.md create mode 100644 docs/Leetcode_Solutions/Python/155._min_stack.md create mode 100644 docs/Leetcode_Solutions/Python/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md create mode 100644 docs/Leetcode_Solutions/Python/160._intersection_of_two_linked_lists.md create mode 100644 docs/Leetcode_Solutions/Python/162._find_peak_element.md create mode 100644 docs/Leetcode_Solutions/Python/165._compare_version_numbers.md create mode 100644 docs/Leetcode_Solutions/Python/166._Fraction_to_Recurring_Decimal.md create mode 100644 docs/Leetcode_Solutions/Python/167._two_sum_ii_-_input_array_is_sorted.md create mode 100644 docs/Leetcode_Solutions/Python/168._excel_sheet_column_title.md create mode 100644 docs/Leetcode_Solutions/Python/169._majority_element.md create mode 100644 docs/Leetcode_Solutions/Python/171._excel_sheet_column_number.md create mode 100644 docs/Leetcode_Solutions/Python/173._binary_search_tree_iterator.md create mode 100644 docs/Leetcode_Solutions/Python/189._rotate_array.md create mode 100644 docs/Leetcode_Solutions/Python/191._number_of_1_bits.md create mode 100644 docs/Leetcode_Solutions/Python/198._house_robber.md create mode 100644 docs/Leetcode_Solutions/Python/199._binary_tree_right_side_view.md create mode 100644 docs/Leetcode_Solutions/Python/200._number_of_islands.md create mode 100644 docs/Leetcode_Solutions/Python/203._remove_linked_list_elements.md create mode 100644 docs/Leetcode_Solutions/Python/204._count_primes.md create mode 100644 docs/Leetcode_Solutions/Python/205._isomorphic_strings.md create mode 100644 docs/Leetcode_Solutions/Python/206._reverse_linked_list.md create mode 100644 docs/Leetcode_Solutions/Python/207._course_schedule.md create mode 100644 docs/Leetcode_Solutions/Python/208._implement_trie_(prefix_tree).md create mode 100644 docs/Leetcode_Solutions/Python/210._course_schedule_ii.md create mode 100644 docs/Leetcode_Solutions/Python/211. Add and Search Word - Data structure design.md create mode 100644 docs/Leetcode_Solutions/Python/213._house_robber_ii.md create mode 100644 docs/Leetcode_Solutions/Python/216._combination_sum_iii.md create mode 100644 docs/Leetcode_Solutions/Python/217._contains_duplicate.md create mode 100644 docs/Leetcode_Solutions/Python/218._The _Skyline_Problem .md create mode 100644 docs/Leetcode_Solutions/Python/219._contains_duplicate_ii.md create mode 100644 docs/Leetcode_Solutions/Python/221._maximal_square.md create mode 100644 docs/Leetcode_Solutions/Python/222._count_complete_tree_nodes.md create mode 100644 docs/Leetcode_Solutions/Python/223._rectangle_area.md create mode 100644 docs/Leetcode_Solutions/Python/224. Basic Calculator .md create mode 100644 docs/Leetcode_Solutions/Python/225._implement_stack_using_queues.md create mode 100644 docs/Leetcode_Solutions/Python/226._invert_binary_tree.md create mode 100644 docs/Leetcode_Solutions/Python/227._basic_calculator_ii.md create mode 100644 docs/Leetcode_Solutions/Python/228._summary_ranges.md create mode 100644 docs/Leetcode_Solutions/Python/229._majority_element_ii.md create mode 100644 docs/Leetcode_Solutions/Python/230._kth_smallest_element_in_a_bst.md create mode 100644 docs/Leetcode_Solutions/Python/231. _Power_of_Two.md create mode 100644 docs/Leetcode_Solutions/Python/232._implement_queue_using_stacks.md create mode 100644 docs/Leetcode_Solutions/Python/234._palindrome_linked_list.md create mode 100644 docs/Leetcode_Solutions/Python/235._lowest_common_ancestor_of_a_binary_search_tree.md create mode 100644 docs/Leetcode_Solutions/Python/236._lowest_common_ancestor_of_a_binary_tree.md create mode 100644 docs/Leetcode_Solutions/Python/237._delete_node_in_a_linked_list.md create mode 100644 docs/Leetcode_Solutions/Python/238._product_of_array_except_self.md create mode 100644 docs/Leetcode_Solutions/Python/240._search_a_2d_matrix_ii.md create mode 100644 docs/Leetcode_Solutions/Python/242._valid_anagram.md create mode 100644 docs/Leetcode_Solutions/Python/252. Meeting Rooms.md create mode 100644 docs/Leetcode_Solutions/Python/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md create mode 100644 docs/Leetcode_Solutions/Python/256. Paint House.md create mode 100644 docs/Leetcode_Solutions/Python/257._binary_tree_paths.md create mode 100644 docs/Leetcode_Solutions/Python/258_ Add_Digits.md create mode 100644 docs/Leetcode_Solutions/Python/261. Graph Valid Tree.md create mode 100644 docs/Leetcode_Solutions/Python/263._ugly_number.md create mode 100644 docs/Leetcode_Solutions/Python/264._ugly_number_ii.md create mode 100644 docs/Leetcode_Solutions/Python/265. Paint House II.md create mode 100644 docs/Leetcode_Solutions/Python/266. Palindrome Permutation.md create mode 100644 docs/Leetcode_Solutions/Python/267. Palindrome Permutation II.md create mode 100644 docs/Leetcode_Solutions/Python/268._missing_number.md create mode 100644 docs/Leetcode_Solutions/Python/270. Closest Binary Search Tree Value.md create mode 100644 docs/Leetcode_Solutions/Python/276. Paint Fence.md create mode 100644 docs/Leetcode_Solutions/Python/277. Find the Celebrity.md create mode 100644 docs/Leetcode_Solutions/Python/278._First_Bad _Version.md create mode 100644 docs/Leetcode_Solutions/Python/279._perfect_squares.md create mode 100644 docs/Leetcode_Solutions/Python/280._Wiggle_Sort.md create mode 100644 docs/Leetcode_Solutions/Python/283._move_zeroes.md create mode 100644 docs/Leetcode_Solutions/Python/285._inorder_successor_in_bst.md create mode 100644 docs/Leetcode_Solutions/Python/286. Walls and Gates.md create mode 100644 docs/Leetcode_Solutions/Python/289._game_of_life.md create mode 100644 docs/Leetcode_Solutions/Python/290._word_pattern.md create mode 100644 docs/Leetcode_Solutions/Python/292._nim_game.md create mode 100644 docs/Leetcode_Solutions/Python/296. Best Meeting Point.md create mode 100644 docs/Leetcode_Solutions/Python/298. Binary Tree Longest Consecutive Sequence.md create mode 100644 docs/Leetcode_Solutions/Python/299._bulls_and_cows.md create mode 100644 docs/Leetcode_Solutions/Python/300._longest_increasing_subsequence.md create mode 100644 docs/Leetcode_Solutions/Python/303._range_sum_query_-_immutable.md create mode 100644 docs/Leetcode_Solutions/Python/316._Remove_Duplicate_Letters.md create mode 100644 docs/Leetcode_Solutions/Python/319._Bulb_Switcher.md create mode 100644 docs/Leetcode_Solutions/Python/322. Coin Change.md create mode 100644 docs/Leetcode_Solutions/Python/323. Number of Connected Components in an Undirected Graph.md create mode 100644 docs/Leetcode_Solutions/Python/324._Wiggle_Sort_II.md create mode 100644 docs/Leetcode_Solutions/Python/326._power_of_three.md create mode 100644 docs/Leetcode_Solutions/Python/328._odd_even_linked_list.md create mode 100644 docs/Leetcode_Solutions/Python/334._increasing_triplet_subsequence.md create mode 100644 docs/Leetcode_Solutions/Python/337._house_robber_iii.md create mode 100644 docs/Leetcode_Solutions/Python/338. Counting Bits.md create mode 100644 docs/Leetcode_Solutions/Python/339. Nested List Weight Sum.md create mode 100644 docs/Leetcode_Solutions/Python/341._Flatten_Nested_List_Iterator.md create mode 100644 docs/Leetcode_Solutions/Python/342._Power_of_Four.md create mode 100644 docs/Leetcode_Solutions/Python/344._reverse_string.md create mode 100644 docs/Leetcode_Solutions/Python/345._Reverse_Vowels_of_a_String.md create mode 100644 docs/Leetcode_Solutions/Python/349._intersection_of_two_arrays.md create mode 100644 docs/Leetcode_Solutions/Python/350._intersection_of_two_arrays_ii.md create mode 100644 docs/Leetcode_Solutions/Python/353. Design Snake Game.md create mode 100644 docs/Leetcode_Solutions/Python/364. Nested List Weight Sum II.md create mode 100644 docs/Leetcode_Solutions/Python/366. Find Leaves of Binary Tree.md create mode 100644 docs/Leetcode_Solutions/Python/367._valid_perfect_square.md create mode 100644 docs/Leetcode_Solutions/Python/369.Plus One Linked List.md create mode 100644 docs/Leetcode_Solutions/Python/371._sum_of_two_integers.md create mode 100644 docs/Leetcode_Solutions/Python/374._Guess_Number_Higher_or_Lower.md create mode 100644 docs/Leetcode_Solutions/Python/377._combination_sum_iv.md create mode 100644 docs/Leetcode_Solutions/Python/378._kth_smallest_element_in_a_sorted_matrix.md create mode 100644 docs/Leetcode_Solutions/Python/380. Insert Delete GetRandom O(1).md create mode 100644 docs/Leetcode_Solutions/Python/381. Insert Delete GetRandom O(1) - Duplicates allowed.md create mode 100644 docs/Leetcode_Solutions/Python/382._linked_list_random_node.md create mode 100644 docs/Leetcode_Solutions/Python/383._ransom_note.md create mode 100644 docs/Leetcode_Solutions/Python/384. Shuffle an Array.md create mode 100644 docs/Leetcode_Solutions/Python/387._first_unique_character_in_a_string.md create mode 100644 docs/Leetcode_Solutions/Python/388._Longest_Absolute_File_Path.md create mode 100644 docs/Leetcode_Solutions/Python/389._find_the_difference.md create mode 100644 docs/Leetcode_Solutions/Python/392._is_subsequence.md create mode 100644 docs/Leetcode_Solutions/Python/394._decode_string.md create mode 100644 docs/Leetcode_Solutions/Python/400. Nth Digit.md create mode 100644 docs/Leetcode_Solutions/Python/401._binary_watch.md create mode 100644 docs/Leetcode_Solutions/Python/404._sum_of_left_leaves.md create mode 100644 docs/Leetcode_Solutions/Python/405. Convert a Number to Hexadecimal.md create mode 100644 docs/Leetcode_Solutions/Python/406._Queue_Reconstruction_by_Height.md create mode 100644 docs/Leetcode_Solutions/Python/412._fizz_buzz.md create mode 100644 docs/Leetcode_Solutions/Python/413. Arithmetic Slices.md create mode 100644 docs/Leetcode_Solutions/Python/414._third_maximum_number.md create mode 100644 docs/Leetcode_Solutions/Python/415._add_strings.md create mode 100644 docs/Leetcode_Solutions/Python/416. Partition Equal Subset Sum.md create mode 100644 docs/Leetcode_Solutions/Python/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md create mode 100644 docs/Leetcode_Solutions/Python/422. Valid Word Square.md create mode 100644 docs/Leetcode_Solutions/Python/434._number_of_segments_in_a_string.md create mode 100644 docs/Leetcode_Solutions/Python/437._path_sum_iii.md create mode 100644 docs/Leetcode_Solutions/Python/438._Find_All_Anagrams_in_a_String.md create mode 100644 docs/Leetcode_Solutions/Python/439. Ternary Expression Parser.md create mode 100644 docs/Leetcode_Solutions/Python/441._arranging_coins.md create mode 100644 docs/Leetcode_Solutions/Python/448._Find_All_Numbers_Disappeared_in_an_Array.md create mode 100644 docs/Leetcode_Solutions/Python/450. Delete Node in a BST.md create mode 100644 docs/Leetcode_Solutions/Python/453._Minimum_Moves_to_Equal_Array_Elements.md create mode 100644 docs/Leetcode_Solutions/Python/459._Repeated_Substring_Pattern.md create mode 100644 docs/Leetcode_Solutions/Python/461._Hamming Distance.md create mode 100644 docs/Leetcode_Solutions/Python/463._Island_Perimeter.md create mode 100644 docs/Leetcode_Solutions/Python/467._Unique_Substrings_in_Wraparound_String.md create mode 100644 docs/Leetcode_Solutions/Python/469. Convex Polygon.md create mode 100644 docs/Leetcode_Solutions/Python/476._Number_Complement.md create mode 100644 docs/Leetcode_Solutions/Python/477._Total_Hamming_Distance.md create mode 100644 docs/Leetcode_Solutions/Python/485._Max_Consecutive_Ones.md create mode 100644 docs/Leetcode_Solutions/Python/587._Erect_the_Fence .md create mode 100644 docs/Leetcode_Solutions/Python/599._Minimum_Index_Sum_of_Two_Lists.md create mode 100644 docs/Leetcode_Solutions/Python/647._Palindromic_Substrings.md create mode 100644 docs/Leetcode_Solutions/Python/657._Judge_Route_Circle.md create mode 100644 docs/Leetcode_Solutions/Python/665._Non-decreasing_Array.md create mode 100644 docs/Leetcode_Solutions/Python/672._Bulb_Switcher_II.md create mode 100644 docs/Leetcode_Solutions/Python/681._Next_Closest_Time.md create mode 100644 docs/Leetcode_Solutions/Python/682._Baseball_Game.md create mode 100644 docs/Leetcode_Solutions/Python/687._Longest_Univalue_Path.md create mode 100644 docs/Leetcode_Solutions/Python/740._delete_and_earn.md create mode 100644 docs/Leetcode_Solutions/Python/760._Find_Anagram_Mappings.md create mode 100644 docs/Leetcode_Solutions/Python/README.md create mode 100644 "docs/Leetcode_Solutions/Python/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" create mode 100644 docs/Leetcode_Solutions/Python/Summarization/Data Structure and Algorthim Review.md create mode 100644 docs/Leetcode_Solutions/Python/Summarization/Dynamic Programming.md create mode 100644 "docs/Leetcode_Solutions/Python/Summarization/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" create mode 100644 "docs/Leetcode_Solutions/Python/Summarization/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" create mode 100644 "docs/Leetcode_Solutions/Python/Summarization/LinkedList\346\212\200\345\267\247.md" create mode 100644 docs/Leetcode_Solutions/Python/Summarization/Maximal Square.pdf create mode 100644 "docs/Leetcode_Solutions/Python/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" create mode 100644 docs/Leetcode_Solutions/Python/Summarization/Range Sum Query 2D - Immutable.pdf create mode 100644 docs/Leetcode_Solutions/Python/Summarization/Recusrion & BackTracking.md create mode 100644 "docs/Leetcode_Solutions/Python/Summarization/backtracking\346\200\235\350\267\257.md" create mode 100644 "docs/Leetcode_Solutions/Python/Summarization/delete_node_in_a_linked_list\351\227\256\351\242\230.md" create mode 100644 "docs/Leetcode_Solutions/Python/Summarization/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" create mode 100644 "docs/Leetcode_Solutions/Python/Summarization/python\347\232\204\345\220\204\347\247\215pass.md" create mode 100644 docs/Leetcode_Solutions/Python/Summarization/slide_windows_template.md create mode 100644 "docs/Leetcode_Solutions/Python/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" create mode 100644 "docs/Leetcode_Solutions/Python/Summarization/\344\275\215\350\277\220\347\256\227.md" create mode 100644 "docs/Leetcode_Solutions/Python/Summarization/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" create mode 100644 "docs/Leetcode_Solutions/Python/Summarization/\345\205\253\346\216\222\345\272\217.md" create mode 100644 "docs/Leetcode_Solutions/Python/Summarization/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" create mode 100644 "docs/Leetcode_Solutions/Python/Summarization/\346\200\273\347\273\223.md" create mode 100644 "docs/Leetcode_Solutions/Python/Summarization/\347\273\204\345\220\210\351\227\256\351\242\230.md" create mode 100644 "docs/Leetcode_Solutions/Python/Summarization/\351\200\222\345\275\222_recursion.md" diff --git a/docs/Algorithm_Templates/Cipher/README.md b/docs/Algorithm_Templates/C++/Cipher/README.md similarity index 100% rename from docs/Algorithm_Templates/Cipher/README.md rename to docs/Algorithm_Templates/C++/Cipher/README.md diff --git a/docs/Algorithm_Templates/Compression/README.md b/docs/Algorithm_Templates/C++/Compression/README.md similarity index 100% rename from docs/Algorithm_Templates/Compression/README.md rename to docs/Algorithm_Templates/C++/Compression/README.md diff --git a/docs/Algorithm_Templates/Conversion/README.md b/docs/Algorithm_Templates/C++/Conversion/README.md similarity index 100% rename from docs/Algorithm_Templates/Conversion/README.md rename to docs/Algorithm_Templates/C++/Conversion/README.md diff --git a/docs/Algorithm_Templates/Data_Structure/Graph/README.md b/docs/Algorithm_Templates/C++/Data_Structure/Graph/README.md similarity index 100% rename from docs/Algorithm_Templates/Data_Structure/Graph/README.md rename to docs/Algorithm_Templates/C++/Data_Structure/Graph/README.md diff --git a/docs/Algorithm_Templates/Data_Structure/HashMap/README.md b/docs/Algorithm_Templates/C++/Data_Structure/HashMap/README.md similarity index 100% rename from docs/Algorithm_Templates/Data_Structure/HashMap/README.md rename to docs/Algorithm_Templates/C++/Data_Structure/HashMap/README.md diff --git a/docs/Algorithm_Templates/Data_Structure/HashTable/README.md b/docs/Algorithm_Templates/C++/Data_Structure/HashTable/README.md similarity index 100% rename from docs/Algorithm_Templates/Data_Structure/HashTable/README.md rename to docs/Algorithm_Templates/C++/Data_Structure/HashTable/README.md diff --git a/docs/Algorithm_Templates/Data_Structure/Heqp/README.md b/docs/Algorithm_Templates/C++/Data_Structure/Heqp/README.md similarity index 100% rename from docs/Algorithm_Templates/Data_Structure/Heqp/README.md rename to docs/Algorithm_Templates/C++/Data_Structure/Heqp/README.md diff --git a/docs/Algorithm_Templates/Data_Structure/LinkedList/README.md b/docs/Algorithm_Templates/C++/Data_Structure/LinkedList/README.md similarity index 100% rename from docs/Algorithm_Templates/Data_Structure/LinkedList/README.md rename to docs/Algorithm_Templates/C++/Data_Structure/LinkedList/README.md diff --git a/docs/Algorithm_Templates/Data_Structure/Matrix/README.md b/docs/Algorithm_Templates/C++/Data_Structure/Matrix/README.md similarity index 100% rename from docs/Algorithm_Templates/Data_Structure/Matrix/README.md rename to docs/Algorithm_Templates/C++/Data_Structure/Matrix/README.md diff --git a/docs/Algorithm_Templates/Data_Structure/Queue/README.md b/docs/Algorithm_Templates/C++/Data_Structure/Queue/README.md similarity index 100% rename from docs/Algorithm_Templates/Data_Structure/Queue/README.md rename to docs/Algorithm_Templates/C++/Data_Structure/Queue/README.md diff --git a/docs/Algorithm_Templates/Data_Structure/README.md b/docs/Algorithm_Templates/C++/Data_Structure/README.md similarity index 100% rename from docs/Algorithm_Templates/Data_Structure/README.md rename to docs/Algorithm_Templates/C++/Data_Structure/README.md diff --git a/docs/Algorithm_Templates/Data_Structure/Stack/README.md b/docs/Algorithm_Templates/C++/Data_Structure/Stack/README.md similarity index 100% rename from docs/Algorithm_Templates/Data_Structure/Stack/README.md rename to docs/Algorithm_Templates/C++/Data_Structure/Stack/README.md diff --git a/docs/Algorithm_Templates/Data_Structure/Tree/README.md b/docs/Algorithm_Templates/C++/Data_Structure/Tree/README.md similarity index 100% rename from docs/Algorithm_Templates/Data_Structure/Tree/README.md rename to docs/Algorithm_Templates/C++/Data_Structure/Tree/README.md diff --git a/docs/Algorithm_Templates/Dynamic_Programming/README.md b/docs/Algorithm_Templates/C++/Dynamic_Programming/README.md similarity index 100% rename from docs/Algorithm_Templates/Dynamic_Programming/README.md rename to docs/Algorithm_Templates/C++/Dynamic_Programming/README.md diff --git a/docs/Algorithm_Templates/Hash/README.md b/docs/Algorithm_Templates/C++/Hash/README.md similarity index 100% rename from docs/Algorithm_Templates/Hash/README.md rename to docs/Algorithm_Templates/C++/Hash/README.md diff --git a/docs/Algorithm_Templates/Others/NextNodeInOrderTree.md b/docs/Algorithm_Templates/C++/Others/NextNodeInOrderTree.md similarity index 100% rename from docs/Algorithm_Templates/Others/NextNodeInOrderTree.md rename to docs/Algorithm_Templates/C++/Others/NextNodeInOrderTree.md diff --git a/docs/Algorithm_Templates/Others/TopKWords.java b/docs/Algorithm_Templates/C++/Others/TopKWords.java similarity index 100% rename from docs/Algorithm_Templates/Others/TopKWords.java rename to docs/Algorithm_Templates/C++/Others/TopKWords.java diff --git a/docs/Algorithm_Templates/Others/words.txt b/docs/Algorithm_Templates/C++/Others/words.txt similarity index 100% rename from docs/Algorithm_Templates/Others/words.txt rename to docs/Algorithm_Templates/C++/Others/words.txt diff --git a/docs/Algorithm_Templates/README.md b/docs/Algorithm_Templates/C++/README.md similarity index 100% rename from docs/Algorithm_Templates/README.md rename to docs/Algorithm_Templates/C++/README.md diff --git a/docs/Algorithm_Templates/Search/README.md b/docs/Algorithm_Templates/C++/Search/README.md similarity index 100% rename from docs/Algorithm_Templates/Search/README.md rename to docs/Algorithm_Templates/C++/Search/README.md diff --git a/docs/Algorithm_Templates/Sort/BubbleSort.py b/docs/Algorithm_Templates/C++/Sort/BubbleSort.py similarity index 100% rename from docs/Algorithm_Templates/Sort/BubbleSort.py rename to docs/Algorithm_Templates/C++/Sort/BubbleSort.py diff --git a/docs/Algorithm_Templates/Sort/InsertSort.py b/docs/Algorithm_Templates/C++/Sort/InsertSort.py similarity index 100% rename from docs/Algorithm_Templates/Sort/InsertSort.py rename to docs/Algorithm_Templates/C++/Sort/InsertSort.py diff --git a/docs/Algorithm_Templates/Sort/MergeSort.py b/docs/Algorithm_Templates/C++/Sort/MergeSort.py similarity index 100% rename from docs/Algorithm_Templates/Sort/MergeSort.py rename to docs/Algorithm_Templates/C++/Sort/MergeSort.py diff --git a/docs/Algorithm_Templates/Sort/QuickSort.py b/docs/Algorithm_Templates/C++/Sort/QuickSort.py similarity index 100% rename from docs/Algorithm_Templates/Sort/QuickSort.py rename to docs/Algorithm_Templates/C++/Sort/QuickSort.py diff --git a/docs/Algorithm_Templates/Sort/README.md b/docs/Algorithm_Templates/C++/Sort/README.md similarity index 100% rename from docs/Algorithm_Templates/Sort/README.md rename to docs/Algorithm_Templates/C++/Sort/README.md diff --git a/docs/Algorithm_Templates/Sort/RadixSort.py b/docs/Algorithm_Templates/C++/Sort/RadixSort.py similarity index 100% rename from docs/Algorithm_Templates/Sort/RadixSort.py rename to docs/Algorithm_Templates/C++/Sort/RadixSort.py diff --git a/docs/Algorithm_Templates/Sort/SelectionSort.py b/docs/Algorithm_Templates/C++/Sort/SelectionSort.py similarity index 100% rename from docs/Algorithm_Templates/Sort/SelectionSort.py rename to docs/Algorithm_Templates/C++/Sort/SelectionSort.py diff --git a/docs/Algorithm_Templates/Sort/ShellSort.py b/docs/Algorithm_Templates/C++/Sort/ShellSort.py similarity index 100% rename from docs/Algorithm_Templates/Sort/ShellSort.py rename to docs/Algorithm_Templates/C++/Sort/ShellSort.py diff --git a/docs/Algorithm_Templates/Traversals/README.md b/docs/Algorithm_Templates/C++/Traversals/README.md similarity index 100% rename from docs/Algorithm_Templates/Traversals/README.md rename to docs/Algorithm_Templates/C++/Traversals/README.md diff --git a/docs/Algorithm_Templates/Java/Cipher/README.md b/docs/Algorithm_Templates/Java/Cipher/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/Algorithm_Templates/Java/Compression/README.md b/docs/Algorithm_Templates/Java/Compression/README.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/docs/Algorithm_Templates/Java/Compression/README.md @@ -0,0 +1 @@ + diff --git a/docs/Algorithm_Templates/Java/Conversion/README.md b/docs/Algorithm_Templates/Java/Conversion/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/Algorithm_Templates/Java/Data_Structure/Graph/README.md b/docs/Algorithm_Templates/Java/Data_Structure/Graph/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Java/Data_Structure/Graph/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Java/Data_Structure/HashMap/README.md b/docs/Algorithm_Templates/Java/Data_Structure/HashMap/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Java/Data_Structure/HashMap/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Java/Data_Structure/HashTable/README.md b/docs/Algorithm_Templates/Java/Data_Structure/HashTable/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Java/Data_Structure/HashTable/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Java/Data_Structure/Heqp/README.md b/docs/Algorithm_Templates/Java/Data_Structure/Heqp/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Java/Data_Structure/Heqp/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Java/Data_Structure/LinkedList/README.md b/docs/Algorithm_Templates/Java/Data_Structure/LinkedList/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Java/Data_Structure/LinkedList/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Java/Data_Structure/Matrix/README.md b/docs/Algorithm_Templates/Java/Data_Structure/Matrix/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Java/Data_Structure/Matrix/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Java/Data_Structure/Queue/README.md b/docs/Algorithm_Templates/Java/Data_Structure/Queue/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Java/Data_Structure/Queue/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Java/Data_Structure/README.md b/docs/Algorithm_Templates/Java/Data_Structure/README.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/docs/Algorithm_Templates/Java/Data_Structure/README.md @@ -0,0 +1 @@ + diff --git a/docs/Algorithm_Templates/Java/Data_Structure/Stack/README.md b/docs/Algorithm_Templates/Java/Data_Structure/Stack/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Java/Data_Structure/Stack/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Java/Data_Structure/Tree/README.md b/docs/Algorithm_Templates/Java/Data_Structure/Tree/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Java/Data_Structure/Tree/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Java/Dynamic_Programming/README.md b/docs/Algorithm_Templates/Java/Dynamic_Programming/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/Algorithm_Templates/Java/Hash/README.md b/docs/Algorithm_Templates/Java/Hash/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/Algorithm_Templates/Java/Others/NextNodeInOrderTree.md b/docs/Algorithm_Templates/Java/Others/NextNodeInOrderTree.md new file mode 100644 index 000000000..28a102486 --- /dev/null +++ b/docs/Algorithm_Templates/Java/Others/NextNodeInOrderTree.md @@ -0,0 +1,45 @@ +``` python + 8 + / + 5 + / \ + 3 6 + / \ \ + 1 4 7 + + +class Node { + Node parent, lc, rc; + int val; +} +``` + +1. 首先判断其自有无右孩子,若有,则取其右子树的最左节点; 若无,则开始2 + + +2. 它是其父亲节点的左孩子,则其父亲节点 + + +2. 它是其父亲节点的右孩子,则从其父亲开始往上追溯到第一个向右的节点,如果没有这个节点或者说没有父亲节点,则无下一个节点,若有则取之 + + +```python +def nextNode(node): + def leftest(node): + while node.lc: + node = node.lc + return node + if node.rc: + return leftest(node.rc) + if not node.parent: + return None + if node == node.parent.lc: + return node.parent + elif node == node.parent.rc: + while node.parent.parent: + if node.parent != node.parent.parent.lc: + node = node.parent + else: + return node.parent.parent + return None +``` diff --git a/docs/Algorithm_Templates/Java/Others/TopKWords.java b/docs/Algorithm_Templates/Java/Others/TopKWords.java new file mode 100644 index 000000000..c9f138000 --- /dev/null +++ b/docs/Algorithm_Templates/Java/Others/TopKWords.java @@ -0,0 +1,86 @@ +import java.io.*; +import java.util.*; + +/* display the most frequent K words in the file and the times it appear + in the file – shown in order (ignore case and periods) */ + +public class TopKWords { + static class CountWords { + private String fileName; + + public CountWords(String fileName) { + this.fileName = fileName; + } + + public Map getDictionary() { + Map dictionary = new HashMap<>(); + FileInputStream fis = null; + + try { + + fis = new FileInputStream(fileName); // open the file + int in = 0; + String s = ""; // init a empty word + in = fis.read(); // read one character + + while (-1 != in) { + if (Character.isLetter((char)in)) { + s += (char)in; //if get a letter, append to s + } else { + // this branch means an entire word has just been read + if (s.length() > 0) { + // see whether word exists or not + if (dictionary.containsKey(s)) { + // if exist, count++ + dictionary.put(s, dictionary.get(s) + 1); + } else { + // if not exist, initiate count of this word with 1 + dictionary.put(s, 1); + } + } + s = ""; // reInit a empty word + } + in = fis.read(); + } + return dictionary; + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + // you always have to close the I/O streams + fis.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return null; + } + } + public static void main(String[] args) { + // you can replace the filePath with yours, e.g. + // CountWords cw = new CountWords("/Users/lisanaaa/Desktop/words.txt"); + CountWords cw = new CountWords("/words.txt"); + Map dictionary = cw.getDictionary(); // get the words dictionary: {word: frequency} + + // we change the map to list for convenient sort + List> list = new ArrayList<>(dictionary.entrySet()); + + // sort by lambda valueComparator + list.sort(Comparator.comparing( + m -> m.getValue()) + ); + + Scanner input = new Scanner(System.in); + int k = input.nextInt(); + while (k > list.size()) { + System.out.println("Retype a number, your number is too large"); + input = new Scanner(System.in); + k = input.nextInt(); + } + for (int i = 0; i < k; i++) { + System.out.println(list.get(list.size() - i - 1)); + } + } +} + + diff --git a/docs/Algorithm_Templates/Java/Others/words.txt b/docs/Algorithm_Templates/Java/Others/words.txt new file mode 100644 index 000000000..b3c4b5679 --- /dev/null +++ b/docs/Algorithm_Templates/Java/Others/words.txt @@ -0,0 +1,11 @@ + + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam non pharetra purus. Quisque non tristique risus. Nulla ultricies eget nunc a volutpat. Aliquam semper, eros sit amet semper pellentesque, elit magna auctor ligula, sit amet vulputate nunc arcu sit amet ipsum. Aenean efficitur, felis ut tincidunt semper, sem sapien facilisis felis, et elementum ipsum risus sit amet metus. Pellentesque et orci at odio hendrerit lobortis vitae non felis. Phasellus nunc eros, ultricies sed dolor vel, ultricies mattis neque. Mauris placerat fringilla libero id efficitur. Donec nec imperdiet augue. Sed sit amet risus in turpis scelerisque rutrum. Ut sed pretium dolor. Donec metus nisl, blandit quis augue et, interdum suscipit metus. Morbi rutrum eros vel lacus aliquet, et maximus erat dapibus. Vivamus est justo, sagittis a augue id, vulputate vehicula nunc. Praesent mattis eros sapien, ac sagittis urna accumsan sit amet. Proin non dui tincidunt, tristique nisi in, vestibulum lorem. + +Quisque fermentum justo lacus, sit amet tempus lectus congue eu. Nulla sed quam nec nulla consequat tincidunt. Sed sed nunc diam. Integer ex ante, accumsan id fermentum a, interdum eu sapien. Aliquam justo dui, luctus vel ligula in, lacinia ornare turpis. Praesent leo purus, fringilla ut lobortis et, porta ac urna. Mauris id velit porta, iaculis felis non, sagittis nunc. Quisque non condimentum nisl, vitae venenatis urna. Nam commodo euismod felis, ac efficitur turpis scelerisque nec. Phasellus sagittis nec lacus eu bibendum. Suspendisse finibus vestibulum quam, quis volutpat ante. Duis nibh ligula, dapibus at est sed, tincidunt convallis augue. Pellentesque non consequat mi. Curabitur consequat imperdiet efficitur. + +Mauris ipsum arcu, fermentum in urna ultricies, venenatis vehicula nisl. Donec viverra non tellus sit amet porta. Phasellus ornare magna eget condimentum mollis. In hac habitasse platea dictumst. Proin in nibh venenatis, fermentum neque nec, commodo urna. In eget condimentum risus, ac interdum dolor. Sed ut neque sapien. Proin nulla diam, lobortis sed ultrices eget, blandit ut libero. + +Fusce at varius dui. Quisque viverra vulputate consectetur. Quisque sagittis id ante a vestibulum. Phasellus vel lobortis lectus. Duis vestibulum, quam vel congue elementum, lacus nibh efficitur odio, consectetur dapibus ipsum velit at diam. Duis eu nunc id diam tempor vestibulum sed luctus arcu. Nunc eu luctus ex. Morbi et commodo eros, non suscipit enim. Ut fringilla odio nec tincidunt scelerisque. Nam quis elit cursus, ullamcorper lorem id, convallis dui. Mauris elementum tortor odio, nec imperdiet nisl bibendum eget. Suspendisse potenti. + +Cras ut efficitur enim. Sed consequat non ante id euismod. Ut at magna viverra, aliquam purus a, lobortis mi. Donec hendrerit odio eu nunc imperdiet, quis pharetra sapien volutpat. Morbi leo libero, egestas vitae tortor eget, dictum volutpat augue. Donec arcu lacus, tristique eu posuere ac, pharetra vel ante. Nunc efficitur arcu elit, quis semper risus vestibulum eu. diff --git a/docs/Algorithm_Templates/Java/README.md b/docs/Algorithm_Templates/Java/README.md new file mode 100644 index 000000000..8e0b4dd33 --- /dev/null +++ b/docs/Algorithm_Templates/Java/README.md @@ -0,0 +1,16 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | [RadixSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/RadixSort.py) | + diff --git a/docs/Algorithm_Templates/Java/Search/README.md b/docs/Algorithm_Templates/Java/Search/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/Algorithm_Templates/Java/Sort/BubbleSort.py b/docs/Algorithm_Templates/Java/Sort/BubbleSort.py new file mode 100644 index 000000000..6e2f23940 --- /dev/null +++ b/docs/Algorithm_Templates/Java/Sort/BubbleSort.py @@ -0,0 +1,19 @@ +# coding:utf-8 + + +# 冒泡排序 +def bubble_sort(l): + length = len(l) + # 外层循环 length遍,内层循环少一遍 + while length: + for j in range(length - 1): + # 找出最大值,然后交换位置到最后 + if l[j] > l[length - 1]: + l[j], l[length - 1] = l[length - 1], l[j] + length -= 1 + + +if __name__ == "__main__": + l = [5, 1, 9, 3, 2, 7] + bubble_sort(l) + print l diff --git a/docs/Algorithm_Templates/Java/Sort/InsertSort.py b/docs/Algorithm_Templates/Java/Sort/InsertSort.py new file mode 100644 index 000000000..09b935114 --- /dev/null +++ b/docs/Algorithm_Templates/Java/Sort/InsertSort.py @@ -0,0 +1,24 @@ +# coding:utf8 +""" +插入排序和冒泡排序的区别在于: + +插入排序的前提是:左边是有序的数列 +而冒泡排序:相邻的值进行交换,一共进行n次交换 +""" + + +def insert_sort(l): + # 循环 除第一个数字组成的有序数组 以外的数字 + for i in range(1, len(l)): + # 每一个数字,依次和有序数组进行比较 + print l[:i] + for j in range(len(l[:i])): + if l[i] < l[j]: + l[i], l[j] = l[j], l[i] + + +if __name__ == "__main__": + l = [5, 1, 9, 3, 2, 7] + print l + insert_sort(l) + print("result: " + str(l)) diff --git a/docs/Algorithm_Templates/Java/Sort/MergeSort.py b/docs/Algorithm_Templates/Java/Sort/MergeSort.py new file mode 100644 index 000000000..1ad19e86d --- /dev/null +++ b/docs/Algorithm_Templates/Java/Sort/MergeSort.py @@ -0,0 +1,35 @@ +# coding: utf-8 + + +def MergeSort(lists): + if len(lists) <= 1: + return lists + num = int(len(lists) / 2) + # 从中间,进行数据的拆分, 递归的返回数据进行迭代排序 + left = MergeSort(lists[:num]) + right = MergeSort(lists[num:]) + print left + print "*" * 20 + print right + print "_" * 20 + return Merge(left, right) + + +def Merge(left, right): + r, l = 0, 0 + result = [] + while l < len(left) and r < len(right): + if left[l] < right[r]: + result.append(left[l]) + l += 1 + else: + result.append(right[r]) + r += 1 + result += right[r:] + result += left[l:] + print 'result:', result + return result + + +if __name__ == "__main__": + print MergeSort([1, 2, 3, 4, 5, 6, 7, 90, 21, 23, 45]) diff --git a/docs/Algorithm_Templates/Java/Sort/QuickSort.py b/docs/Algorithm_Templates/Java/Sort/QuickSort.py new file mode 100644 index 000000000..acf81118a --- /dev/null +++ b/docs/Algorithm_Templates/Java/Sort/QuickSort.py @@ -0,0 +1,35 @@ +#!/usr/bin/python +# coding:utf8 + + +def quick_sort(l, start, end): + i = start + j = end + # 结束排序 + if i >= j: + return + # 保存首个数值 + key = l[i] + # 一次排序,i和j的值不断的靠拢,然后最终停止,结束一次排序 + while i < j: + # 和最右边的比较,如果>=key,然后j-1,慢慢的和前一个值比较;如果值key,那么就交换位置 + while i < j and key >= l[i]: + print key, l[i], '*' * 30 + i += 1 + l[j] = l[i] + l[i] = key + # 左边排序 + quick_sort(l, start, j-1) + # 右边排序 + quick_sort(l, i+1, end) + + +if __name__ == "__main__": + l = [5, 1, 9, 3, 2, 7] + quick_sort(l, 0, len(l) - 1) + print l diff --git a/docs/Algorithm_Templates/Java/Sort/README.md b/docs/Algorithm_Templates/Java/Sort/README.md new file mode 100644 index 000000000..8e0b4dd33 --- /dev/null +++ b/docs/Algorithm_Templates/Java/Sort/README.md @@ -0,0 +1,16 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | [RadixSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/RadixSort.py) | + diff --git a/docs/Algorithm_Templates/Java/Sort/RadixSort.py b/docs/Algorithm_Templates/Java/Sort/RadixSort.py new file mode 100644 index 000000000..e5fc2aba3 --- /dev/null +++ b/docs/Algorithm_Templates/Java/Sort/RadixSort.py @@ -0,0 +1,46 @@ +#************************基数排序**************************** +#确定排序的次数 +#排序的顺序跟序列中最大数的位数相关 +def radix_sort_nums(L): + maxNum = L[0] +#寻找序列中的最大数 + for x in L: + if maxNum < x: + maxNum = x +#确定序列中的最大元素的位数 + times = 0 + while (maxNum > 0): + maxNum = int((maxNum/10)) + times += 1 + return times +#找到num从低到高第pos位的数据 +def get_num_pos(num, pos): + return (int((num/(10**(pos-1))))) % 10 +#基数排序 +def radix_sort(L): + count = 10 * [None] #存放各个桶的数据统计个数 + bucket = len(L) * [None] #暂时存放排序结果 +#从低位到高位依次执行循环 + for pos in range(1, radix_sort_nums(L)+1): + #置空各个桶的数据统计 + for x in range(0, 10): + count[x] = 0 + #统计当前该位(个位,十位,百位....)的元素数目 + for x in range(0, len(L)): + #统计各个桶将要装进去的元素个数 + j = get_num_pos(int(L[x]), pos) + count[j] += 1 + #count[i]表示第i个桶的右边界索引 + for x in range(1,10): + count[x] += count[x-1] + #将数据依次装入桶中 + for x in range(len(L)-1, -1, -1): + #求出元素第K位的数字 + j = get_num_pos(L[x], pos) + #放入对应的桶中,count[j]-1是第j个桶的右边界索引 + bucket[count[j]-1] = L[x] + #对应桶的装入数据索引-1 + count[j] -= 1 + # 将已分配好的桶中数据再倒出来,此时已是对应当前位数有序的表 + for x in range(0, len(L)): + L[x] = bucket[x] diff --git a/docs/Algorithm_Templates/Java/Sort/SelectionSort.py b/docs/Algorithm_Templates/Java/Sort/SelectionSort.py new file mode 100644 index 000000000..98ef64f72 --- /dev/null +++ b/docs/Algorithm_Templates/Java/Sort/SelectionSort.py @@ -0,0 +1,28 @@ +# coding:utf8 +""" +选择排序和冒泡排序的区别在于: + +选择排序的前提是:找到最大值的位置,最后才进行1次交换 +而冒泡排序:相邻的值进行交换,一共进行n次交换 +""" + + +def selection_sort(l): + length = len(l) - 1 + + while length: + index = length + # 第一个数字,和后面每一个数字进行对比,找出最大值,放到最后!! + for j in range(length): + if l[j] > l[index]: + index = j + l[length], l[index] = l[index], l[length] + print len(l) - length, l + length -= 1 + + +if __name__ == "__main__": + l = [5, 1, 9, 3, 2, 7] + print l + selection_sort(l) + print("result: " + str(l)) \ No newline at end of file diff --git a/docs/Algorithm_Templates/Java/Sort/ShellSort.py b/docs/Algorithm_Templates/Java/Sort/ShellSort.py new file mode 100644 index 000000000..9f591a84b --- /dev/null +++ b/docs/Algorithm_Templates/Java/Sort/ShellSort.py @@ -0,0 +1,25 @@ +# coding: utf8 + +def insert_sort(l, start, increment): + for i in range(start+increment, len(l), increment): + for j in range(start, len(l[:i]), increment): + if l[i] < l[j]: + l[i], l[j] = l[j], l[i] + print increment, '--',l + return l + +def shell_sort(l, increment): + # 依次进行分层 + while increment: + # 每一层,都进行n次插入排序 + for i in range(0, increment): + insert_sort(l, i, increment) + increment -= 1 + return l + +if __name__ == "__main__": + l = [5, 2, 9, 8, 1, 10, 3, 4, 7] + increment = len(l)/3+1 if len(l)%3 else len(l)/3 + print "开始", l + l = shell_sort(l, increment) + print "结束", l \ No newline at end of file diff --git a/docs/Algorithm_Templates/Java/Traversals/README.md b/docs/Algorithm_Templates/Java/Traversals/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/Algorithm_Templates/Python/Cipher/README.md b/docs/Algorithm_Templates/Python/Cipher/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/Algorithm_Templates/Python/Compression/README.md b/docs/Algorithm_Templates/Python/Compression/README.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/docs/Algorithm_Templates/Python/Compression/README.md @@ -0,0 +1 @@ + diff --git a/docs/Algorithm_Templates/Python/Conversion/README.md b/docs/Algorithm_Templates/Python/Conversion/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/Algorithm_Templates/Python/Data_Structure/Graph/README.md b/docs/Algorithm_Templates/Python/Data_Structure/Graph/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Python/Data_Structure/Graph/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Python/Data_Structure/HashMap/README.md b/docs/Algorithm_Templates/Python/Data_Structure/HashMap/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Python/Data_Structure/HashMap/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Python/Data_Structure/HashTable/README.md b/docs/Algorithm_Templates/Python/Data_Structure/HashTable/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Python/Data_Structure/HashTable/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Python/Data_Structure/Heqp/README.md b/docs/Algorithm_Templates/Python/Data_Structure/Heqp/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Python/Data_Structure/Heqp/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Python/Data_Structure/LinkedList/README.md b/docs/Algorithm_Templates/Python/Data_Structure/LinkedList/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Python/Data_Structure/LinkedList/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Python/Data_Structure/Matrix/README.md b/docs/Algorithm_Templates/Python/Data_Structure/Matrix/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Python/Data_Structure/Matrix/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Python/Data_Structure/Queue/README.md b/docs/Algorithm_Templates/Python/Data_Structure/Queue/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Python/Data_Structure/Queue/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Python/Data_Structure/README.md b/docs/Algorithm_Templates/Python/Data_Structure/README.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/docs/Algorithm_Templates/Python/Data_Structure/README.md @@ -0,0 +1 @@ + diff --git a/docs/Algorithm_Templates/Python/Data_Structure/Stack/README.md b/docs/Algorithm_Templates/Python/Data_Structure/Stack/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Python/Data_Structure/Stack/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Python/Data_Structure/Tree/README.md b/docs/Algorithm_Templates/Python/Data_Structure/Tree/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Python/Data_Structure/Tree/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Python/Dynamic_Programming/README.md b/docs/Algorithm_Templates/Python/Dynamic_Programming/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/Algorithm_Templates/Python/Hash/README.md b/docs/Algorithm_Templates/Python/Hash/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/Algorithm_Templates/Python/Others/NextNodeInOrderTree.md b/docs/Algorithm_Templates/Python/Others/NextNodeInOrderTree.md new file mode 100644 index 000000000..28a102486 --- /dev/null +++ b/docs/Algorithm_Templates/Python/Others/NextNodeInOrderTree.md @@ -0,0 +1,45 @@ +``` python + 8 + / + 5 + / \ + 3 6 + / \ \ + 1 4 7 + + +class Node { + Node parent, lc, rc; + int val; +} +``` + +1. 首先判断其自有无右孩子,若有,则取其右子树的最左节点; 若无,则开始2 + + +2. 它是其父亲节点的左孩子,则其父亲节点 + + +2. 它是其父亲节点的右孩子,则从其父亲开始往上追溯到第一个向右的节点,如果没有这个节点或者说没有父亲节点,则无下一个节点,若有则取之 + + +```python +def nextNode(node): + def leftest(node): + while node.lc: + node = node.lc + return node + if node.rc: + return leftest(node.rc) + if not node.parent: + return None + if node == node.parent.lc: + return node.parent + elif node == node.parent.rc: + while node.parent.parent: + if node.parent != node.parent.parent.lc: + node = node.parent + else: + return node.parent.parent + return None +``` diff --git a/docs/Algorithm_Templates/Python/Others/TopKWords.java b/docs/Algorithm_Templates/Python/Others/TopKWords.java new file mode 100644 index 000000000..c9f138000 --- /dev/null +++ b/docs/Algorithm_Templates/Python/Others/TopKWords.java @@ -0,0 +1,86 @@ +import java.io.*; +import java.util.*; + +/* display the most frequent K words in the file and the times it appear + in the file – shown in order (ignore case and periods) */ + +public class TopKWords { + static class CountWords { + private String fileName; + + public CountWords(String fileName) { + this.fileName = fileName; + } + + public Map getDictionary() { + Map dictionary = new HashMap<>(); + FileInputStream fis = null; + + try { + + fis = new FileInputStream(fileName); // open the file + int in = 0; + String s = ""; // init a empty word + in = fis.read(); // read one character + + while (-1 != in) { + if (Character.isLetter((char)in)) { + s += (char)in; //if get a letter, append to s + } else { + // this branch means an entire word has just been read + if (s.length() > 0) { + // see whether word exists or not + if (dictionary.containsKey(s)) { + // if exist, count++ + dictionary.put(s, dictionary.get(s) + 1); + } else { + // if not exist, initiate count of this word with 1 + dictionary.put(s, 1); + } + } + s = ""; // reInit a empty word + } + in = fis.read(); + } + return dictionary; + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + // you always have to close the I/O streams + fis.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return null; + } + } + public static void main(String[] args) { + // you can replace the filePath with yours, e.g. + // CountWords cw = new CountWords("/Users/lisanaaa/Desktop/words.txt"); + CountWords cw = new CountWords("/words.txt"); + Map dictionary = cw.getDictionary(); // get the words dictionary: {word: frequency} + + // we change the map to list for convenient sort + List> list = new ArrayList<>(dictionary.entrySet()); + + // sort by lambda valueComparator + list.sort(Comparator.comparing( + m -> m.getValue()) + ); + + Scanner input = new Scanner(System.in); + int k = input.nextInt(); + while (k > list.size()) { + System.out.println("Retype a number, your number is too large"); + input = new Scanner(System.in); + k = input.nextInt(); + } + for (int i = 0; i < k; i++) { + System.out.println(list.get(list.size() - i - 1)); + } + } +} + + diff --git a/docs/Algorithm_Templates/Python/Others/words.txt b/docs/Algorithm_Templates/Python/Others/words.txt new file mode 100644 index 000000000..b3c4b5679 --- /dev/null +++ b/docs/Algorithm_Templates/Python/Others/words.txt @@ -0,0 +1,11 @@ + + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam non pharetra purus. Quisque non tristique risus. Nulla ultricies eget nunc a volutpat. Aliquam semper, eros sit amet semper pellentesque, elit magna auctor ligula, sit amet vulputate nunc arcu sit amet ipsum. Aenean efficitur, felis ut tincidunt semper, sem sapien facilisis felis, et elementum ipsum risus sit amet metus. Pellentesque et orci at odio hendrerit lobortis vitae non felis. Phasellus nunc eros, ultricies sed dolor vel, ultricies mattis neque. Mauris placerat fringilla libero id efficitur. Donec nec imperdiet augue. Sed sit amet risus in turpis scelerisque rutrum. Ut sed pretium dolor. Donec metus nisl, blandit quis augue et, interdum suscipit metus. Morbi rutrum eros vel lacus aliquet, et maximus erat dapibus. Vivamus est justo, sagittis a augue id, vulputate vehicula nunc. Praesent mattis eros sapien, ac sagittis urna accumsan sit amet. Proin non dui tincidunt, tristique nisi in, vestibulum lorem. + +Quisque fermentum justo lacus, sit amet tempus lectus congue eu. Nulla sed quam nec nulla consequat tincidunt. Sed sed nunc diam. Integer ex ante, accumsan id fermentum a, interdum eu sapien. Aliquam justo dui, luctus vel ligula in, lacinia ornare turpis. Praesent leo purus, fringilla ut lobortis et, porta ac urna. Mauris id velit porta, iaculis felis non, sagittis nunc. Quisque non condimentum nisl, vitae venenatis urna. Nam commodo euismod felis, ac efficitur turpis scelerisque nec. Phasellus sagittis nec lacus eu bibendum. Suspendisse finibus vestibulum quam, quis volutpat ante. Duis nibh ligula, dapibus at est sed, tincidunt convallis augue. Pellentesque non consequat mi. Curabitur consequat imperdiet efficitur. + +Mauris ipsum arcu, fermentum in urna ultricies, venenatis vehicula nisl. Donec viverra non tellus sit amet porta. Phasellus ornare magna eget condimentum mollis. In hac habitasse platea dictumst. Proin in nibh venenatis, fermentum neque nec, commodo urna. In eget condimentum risus, ac interdum dolor. Sed ut neque sapien. Proin nulla diam, lobortis sed ultrices eget, blandit ut libero. + +Fusce at varius dui. Quisque viverra vulputate consectetur. Quisque sagittis id ante a vestibulum. Phasellus vel lobortis lectus. Duis vestibulum, quam vel congue elementum, lacus nibh efficitur odio, consectetur dapibus ipsum velit at diam. Duis eu nunc id diam tempor vestibulum sed luctus arcu. Nunc eu luctus ex. Morbi et commodo eros, non suscipit enim. Ut fringilla odio nec tincidunt scelerisque. Nam quis elit cursus, ullamcorper lorem id, convallis dui. Mauris elementum tortor odio, nec imperdiet nisl bibendum eget. Suspendisse potenti. + +Cras ut efficitur enim. Sed consequat non ante id euismod. Ut at magna viverra, aliquam purus a, lobortis mi. Donec hendrerit odio eu nunc imperdiet, quis pharetra sapien volutpat. Morbi leo libero, egestas vitae tortor eget, dictum volutpat augue. Donec arcu lacus, tristique eu posuere ac, pharetra vel ante. Nunc efficitur arcu elit, quis semper risus vestibulum eu. diff --git a/docs/Algorithm_Templates/Python/README.md b/docs/Algorithm_Templates/Python/README.md new file mode 100644 index 000000000..8e0b4dd33 --- /dev/null +++ b/docs/Algorithm_Templates/Python/README.md @@ -0,0 +1,16 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | [RadixSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/RadixSort.py) | + diff --git a/docs/Algorithm_Templates/Python/Search/README.md b/docs/Algorithm_Templates/Python/Search/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/Algorithm_Templates/Python/Sort/BubbleSort.py b/docs/Algorithm_Templates/Python/Sort/BubbleSort.py new file mode 100644 index 000000000..6e2f23940 --- /dev/null +++ b/docs/Algorithm_Templates/Python/Sort/BubbleSort.py @@ -0,0 +1,19 @@ +# coding:utf-8 + + +# 冒泡排序 +def bubble_sort(l): + length = len(l) + # 外层循环 length遍,内层循环少一遍 + while length: + for j in range(length - 1): + # 找出最大值,然后交换位置到最后 + if l[j] > l[length - 1]: + l[j], l[length - 1] = l[length - 1], l[j] + length -= 1 + + +if __name__ == "__main__": + l = [5, 1, 9, 3, 2, 7] + bubble_sort(l) + print l diff --git a/docs/Algorithm_Templates/Python/Sort/InsertSort.py b/docs/Algorithm_Templates/Python/Sort/InsertSort.py new file mode 100644 index 000000000..09b935114 --- /dev/null +++ b/docs/Algorithm_Templates/Python/Sort/InsertSort.py @@ -0,0 +1,24 @@ +# coding:utf8 +""" +插入排序和冒泡排序的区别在于: + +插入排序的前提是:左边是有序的数列 +而冒泡排序:相邻的值进行交换,一共进行n次交换 +""" + + +def insert_sort(l): + # 循环 除第一个数字组成的有序数组 以外的数字 + for i in range(1, len(l)): + # 每一个数字,依次和有序数组进行比较 + print l[:i] + for j in range(len(l[:i])): + if l[i] < l[j]: + l[i], l[j] = l[j], l[i] + + +if __name__ == "__main__": + l = [5, 1, 9, 3, 2, 7] + print l + insert_sort(l) + print("result: " + str(l)) diff --git a/docs/Algorithm_Templates/Python/Sort/MergeSort.py b/docs/Algorithm_Templates/Python/Sort/MergeSort.py new file mode 100644 index 000000000..1ad19e86d --- /dev/null +++ b/docs/Algorithm_Templates/Python/Sort/MergeSort.py @@ -0,0 +1,35 @@ +# coding: utf-8 + + +def MergeSort(lists): + if len(lists) <= 1: + return lists + num = int(len(lists) / 2) + # 从中间,进行数据的拆分, 递归的返回数据进行迭代排序 + left = MergeSort(lists[:num]) + right = MergeSort(lists[num:]) + print left + print "*" * 20 + print right + print "_" * 20 + return Merge(left, right) + + +def Merge(left, right): + r, l = 0, 0 + result = [] + while l < len(left) and r < len(right): + if left[l] < right[r]: + result.append(left[l]) + l += 1 + else: + result.append(right[r]) + r += 1 + result += right[r:] + result += left[l:] + print 'result:', result + return result + + +if __name__ == "__main__": + print MergeSort([1, 2, 3, 4, 5, 6, 7, 90, 21, 23, 45]) diff --git a/docs/Algorithm_Templates/Python/Sort/QuickSort.py b/docs/Algorithm_Templates/Python/Sort/QuickSort.py new file mode 100644 index 000000000..acf81118a --- /dev/null +++ b/docs/Algorithm_Templates/Python/Sort/QuickSort.py @@ -0,0 +1,35 @@ +#!/usr/bin/python +# coding:utf8 + + +def quick_sort(l, start, end): + i = start + j = end + # 结束排序 + if i >= j: + return + # 保存首个数值 + key = l[i] + # 一次排序,i和j的值不断的靠拢,然后最终停止,结束一次排序 + while i < j: + # 和最右边的比较,如果>=key,然后j-1,慢慢的和前一个值比较;如果值key,那么就交换位置 + while i < j and key >= l[i]: + print key, l[i], '*' * 30 + i += 1 + l[j] = l[i] + l[i] = key + # 左边排序 + quick_sort(l, start, j-1) + # 右边排序 + quick_sort(l, i+1, end) + + +if __name__ == "__main__": + l = [5, 1, 9, 3, 2, 7] + quick_sort(l, 0, len(l) - 1) + print l diff --git a/docs/Algorithm_Templates/Python/Sort/README.md b/docs/Algorithm_Templates/Python/Sort/README.md new file mode 100644 index 000000000..8e0b4dd33 --- /dev/null +++ b/docs/Algorithm_Templates/Python/Sort/README.md @@ -0,0 +1,16 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | [RadixSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/RadixSort.py) | + diff --git a/docs/Algorithm_Templates/Python/Sort/RadixSort.py b/docs/Algorithm_Templates/Python/Sort/RadixSort.py new file mode 100644 index 000000000..e5fc2aba3 --- /dev/null +++ b/docs/Algorithm_Templates/Python/Sort/RadixSort.py @@ -0,0 +1,46 @@ +#************************基数排序**************************** +#确定排序的次数 +#排序的顺序跟序列中最大数的位数相关 +def radix_sort_nums(L): + maxNum = L[0] +#寻找序列中的最大数 + for x in L: + if maxNum < x: + maxNum = x +#确定序列中的最大元素的位数 + times = 0 + while (maxNum > 0): + maxNum = int((maxNum/10)) + times += 1 + return times +#找到num从低到高第pos位的数据 +def get_num_pos(num, pos): + return (int((num/(10**(pos-1))))) % 10 +#基数排序 +def radix_sort(L): + count = 10 * [None] #存放各个桶的数据统计个数 + bucket = len(L) * [None] #暂时存放排序结果 +#从低位到高位依次执行循环 + for pos in range(1, radix_sort_nums(L)+1): + #置空各个桶的数据统计 + for x in range(0, 10): + count[x] = 0 + #统计当前该位(个位,十位,百位....)的元素数目 + for x in range(0, len(L)): + #统计各个桶将要装进去的元素个数 + j = get_num_pos(int(L[x]), pos) + count[j] += 1 + #count[i]表示第i个桶的右边界索引 + for x in range(1,10): + count[x] += count[x-1] + #将数据依次装入桶中 + for x in range(len(L)-1, -1, -1): + #求出元素第K位的数字 + j = get_num_pos(L[x], pos) + #放入对应的桶中,count[j]-1是第j个桶的右边界索引 + bucket[count[j]-1] = L[x] + #对应桶的装入数据索引-1 + count[j] -= 1 + # 将已分配好的桶中数据再倒出来,此时已是对应当前位数有序的表 + for x in range(0, len(L)): + L[x] = bucket[x] diff --git a/docs/Algorithm_Templates/Python/Sort/SelectionSort.py b/docs/Algorithm_Templates/Python/Sort/SelectionSort.py new file mode 100644 index 000000000..98ef64f72 --- /dev/null +++ b/docs/Algorithm_Templates/Python/Sort/SelectionSort.py @@ -0,0 +1,28 @@ +# coding:utf8 +""" +选择排序和冒泡排序的区别在于: + +选择排序的前提是:找到最大值的位置,最后才进行1次交换 +而冒泡排序:相邻的值进行交换,一共进行n次交换 +""" + + +def selection_sort(l): + length = len(l) - 1 + + while length: + index = length + # 第一个数字,和后面每一个数字进行对比,找出最大值,放到最后!! + for j in range(length): + if l[j] > l[index]: + index = j + l[length], l[index] = l[index], l[length] + print len(l) - length, l + length -= 1 + + +if __name__ == "__main__": + l = [5, 1, 9, 3, 2, 7] + print l + selection_sort(l) + print("result: " + str(l)) \ No newline at end of file diff --git a/docs/Algorithm_Templates/Python/Sort/ShellSort.py b/docs/Algorithm_Templates/Python/Sort/ShellSort.py new file mode 100644 index 000000000..9f591a84b --- /dev/null +++ b/docs/Algorithm_Templates/Python/Sort/ShellSort.py @@ -0,0 +1,25 @@ +# coding: utf8 + +def insert_sort(l, start, increment): + for i in range(start+increment, len(l), increment): + for j in range(start, len(l[:i]), increment): + if l[i] < l[j]: + l[i], l[j] = l[j], l[i] + print increment, '--',l + return l + +def shell_sort(l, increment): + # 依次进行分层 + while increment: + # 每一层,都进行n次插入排序 + for i in range(0, increment): + insert_sort(l, i, increment) + increment -= 1 + return l + +if __name__ == "__main__": + l = [5, 2, 9, 8, 1, 10, 3, 4, 7] + increment = len(l)/3+1 if len(l)%3 else len(l)/3 + print "开始", l + l = shell_sort(l, increment) + print "结束", l \ No newline at end of file diff --git a/docs/Algorithm_Templates/Python/Traversals/README.md b/docs/Algorithm_Templates/Python/Traversals/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/Leetcode_Solutions/001._two_sum.md "b/docs/Leetcode_Solutions/C++/001._two_sum \344\270\212\345\215\2102.49.12.md" similarity index 100% rename from docs/Leetcode_Solutions/001._two_sum.md rename to "docs/Leetcode_Solutions/C++/001._two_sum \344\270\212\345\215\2102.49.12.md" diff --git a/docs/Leetcode_Solutions/002._add_two_numbers.md "b/docs/Leetcode_Solutions/C++/002._add_two_numbers \344\270\212\345\215\2102.49.12.md" similarity index 100% rename from docs/Leetcode_Solutions/002._add_two_numbers.md rename to "docs/Leetcode_Solutions/C++/002._add_two_numbers \344\270\212\345\215\2102.49.12.md" diff --git a/docs/Leetcode_Solutions/003._longest_substring_without_repeating_characters.md "b/docs/Leetcode_Solutions/C++/003._longest_substring_without_repeating_characters \344\270\212\345\215\2102.49.12.md" similarity index 100% rename from docs/Leetcode_Solutions/003._longest_substring_without_repeating_characters.md rename to "docs/Leetcode_Solutions/C++/003._longest_substring_without_repeating_characters \344\270\212\345\215\2102.49.12.md" diff --git a/docs/Leetcode_Solutions/004._median_of_two_sorted_arrays.md "b/docs/Leetcode_Solutions/C++/004._median_of_two_sorted_arrays \344\270\212\345\215\2102.49.12.md" similarity index 100% rename from docs/Leetcode_Solutions/004._median_of_two_sorted_arrays.md rename to "docs/Leetcode_Solutions/C++/004._median_of_two_sorted_arrays \344\270\212\345\215\2102.49.12.md" diff --git a/docs/Leetcode_Solutions/005._longest_palindromic_substring.md "b/docs/Leetcode_Solutions/C++/005._longest_palindromic_substring \344\270\212\345\215\2102.49.12.md" similarity index 100% rename from docs/Leetcode_Solutions/005._longest_palindromic_substring.md rename to "docs/Leetcode_Solutions/C++/005._longest_palindromic_substring \344\270\212\345\215\2102.49.12.md" diff --git a/docs/Leetcode_Solutions/006._ZigZag_Conversion.md "b/docs/Leetcode_Solutions/C++/006._ZigZag_Conversion \344\270\212\345\215\2102.49.12.md" similarity index 100% rename from docs/Leetcode_Solutions/006._ZigZag_Conversion.md rename to "docs/Leetcode_Solutions/C++/006._ZigZag_Conversion \344\270\212\345\215\2102.49.12.md" diff --git a/docs/Leetcode_Solutions/007._Reverse_Integer.md "b/docs/Leetcode_Solutions/C++/007._Reverse_Integer \344\270\212\345\215\2102.49.12.md" similarity index 100% rename from docs/Leetcode_Solutions/007._Reverse_Integer.md rename to "docs/Leetcode_Solutions/C++/007._Reverse_Integer \344\270\212\345\215\2102.49.12.md" diff --git a/docs/Leetcode_Solutions/008._string_to_integer_(atoi).md "b/docs/Leetcode_Solutions/C++/008._string_to_integer_(atoi) \344\270\212\345\215\2102.49.12.md" similarity index 100% rename from docs/Leetcode_Solutions/008._string_to_integer_(atoi).md rename to "docs/Leetcode_Solutions/C++/008._string_to_integer_(atoi) \344\270\212\345\215\2102.49.12.md" diff --git a/docs/Leetcode_Solutions/009._Palindrome_Number.md "b/docs/Leetcode_Solutions/C++/009._Palindrome_Number \344\270\212\345\215\2102.49.12.md" similarity index 100% rename from docs/Leetcode_Solutions/009._Palindrome_Number.md rename to "docs/Leetcode_Solutions/C++/009._Palindrome_Number \344\270\212\345\215\2102.49.12.md" diff --git a/docs/Leetcode_Solutions/010._regular_expression_matching.md "b/docs/Leetcode_Solutions/C++/010._regular_expression_matching \344\270\212\345\215\2102.49.12.md" similarity index 100% rename from docs/Leetcode_Solutions/010._regular_expression_matching.md rename to "docs/Leetcode_Solutions/C++/010._regular_expression_matching \344\270\212\345\215\2102.49.12.md" diff --git a/docs/Leetcode_Solutions/011._container_with_most_water.md "b/docs/Leetcode_Solutions/C++/011._container_with_most_water \344\270\212\345\215\2102.49.12.md" similarity index 100% rename from docs/Leetcode_Solutions/011._container_with_most_water.md rename to "docs/Leetcode_Solutions/C++/011._container_with_most_water \344\270\212\345\215\2102.49.12.md" diff --git a/docs/Leetcode_Solutions/012._Integer_to_Roman.md "b/docs/Leetcode_Solutions/C++/012._Integer_to_Roman \344\270\212\345\215\2102.49.12.md" similarity index 100% rename from docs/Leetcode_Solutions/012._Integer_to_Roman.md rename to "docs/Leetcode_Solutions/C++/012._Integer_to_Roman \344\270\212\345\215\2102.49.12.md" diff --git a/docs/Leetcode_Solutions/013._Roman_to_Integer.md "b/docs/Leetcode_Solutions/C++/013._Roman_to_Integer \344\270\212\345\215\2102.49.12.md" similarity index 100% rename from docs/Leetcode_Solutions/013._Roman_to_Integer.md rename to "docs/Leetcode_Solutions/C++/013._Roman_to_Integer \344\270\212\345\215\2102.49.12.md" diff --git a/docs/Leetcode_Solutions/014._longest_common_prefix.md "b/docs/Leetcode_Solutions/C++/014._longest_common_prefix \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/014._longest_common_prefix.md rename to "docs/Leetcode_Solutions/C++/014._longest_common_prefix \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/015._3sum.md "b/docs/Leetcode_Solutions/C++/015._3sum \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/015._3sum.md rename to "docs/Leetcode_Solutions/C++/015._3sum \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/016._3sum_closest.md "b/docs/Leetcode_Solutions/C++/016._3sum_closest \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/016._3sum_closest.md rename to "docs/Leetcode_Solutions/C++/016._3sum_closest \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/017._letter_combinations_of_a_phone_number.md "b/docs/Leetcode_Solutions/C++/017._letter_combinations_of_a_phone_number \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/017._letter_combinations_of_a_phone_number.md rename to "docs/Leetcode_Solutions/C++/017._letter_combinations_of_a_phone_number \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/018._4sum.md "b/docs/Leetcode_Solutions/C++/018._4sum \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/018._4sum.md rename to "docs/Leetcode_Solutions/C++/018._4sum \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/019._remove_nth_node_from_end_of_list.md "b/docs/Leetcode_Solutions/C++/019._remove_nth_node_from_end_of_list \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/019._remove_nth_node_from_end_of_list.md rename to "docs/Leetcode_Solutions/C++/019._remove_nth_node_from_end_of_list \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/020._valid_parentheses.md "b/docs/Leetcode_Solutions/C++/020._valid_parentheses \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/020._valid_parentheses.md rename to "docs/Leetcode_Solutions/C++/020._valid_parentheses \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/021._merge_two_sorted_lists.md "b/docs/Leetcode_Solutions/C++/021._merge_two_sorted_lists \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/021._merge_two_sorted_lists.md rename to "docs/Leetcode_Solutions/C++/021._merge_two_sorted_lists \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/022._generate_parentheses.md "b/docs/Leetcode_Solutions/C++/022._generate_parentheses \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/022._generate_parentheses.md rename to "docs/Leetcode_Solutions/C++/022._generate_parentheses \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/023._merge_k_sorted_lists.md "b/docs/Leetcode_Solutions/C++/023._merge_k_sorted_lists \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/023._merge_k_sorted_lists.md rename to "docs/Leetcode_Solutions/C++/023._merge_k_sorted_lists \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/024._swap_nodes_in_pairs.md "b/docs/Leetcode_Solutions/C++/024._swap_nodes_in_pairs \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/024._swap_nodes_in_pairs.md rename to "docs/Leetcode_Solutions/C++/024._swap_nodes_in_pairs \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/026._Remove_Duplicates_from_Sorted_Array.md "b/docs/Leetcode_Solutions/C++/026._Remove_Duplicates_from_Sorted_Array \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/026._Remove_Duplicates_from_Sorted_Array.md rename to "docs/Leetcode_Solutions/C++/026._Remove_Duplicates_from_Sorted_Array \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/027._Remove_Element.md "b/docs/Leetcode_Solutions/C++/027._Remove_Element \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/027._Remove_Element.md rename to "docs/Leetcode_Solutions/C++/027._Remove_Element \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/028._implement_strstr().md "b/docs/Leetcode_Solutions/C++/028._implement_strstr() \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/028._implement_strstr().md rename to "docs/Leetcode_Solutions/C++/028._implement_strstr() \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/030._Substring_with_Concatenation_of_All_Words.md "b/docs/Leetcode_Solutions/C++/030._Substring_with_Concatenation_of_All_Words \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/030._Substring_with_Concatenation_of_All_Words.md rename to "docs/Leetcode_Solutions/C++/030._Substring_with_Concatenation_of_All_Words \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/031._next_permutation.md "b/docs/Leetcode_Solutions/C++/031._next_permutation \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/031._next_permutation.md rename to "docs/Leetcode_Solutions/C++/031._next_permutation \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/033._search_in_rotated_sorted_array.md "b/docs/Leetcode_Solutions/C++/033._search_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/033._search_in_rotated_sorted_array.md rename to "docs/Leetcode_Solutions/C++/033._search_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/034._Search for a Range.md "b/docs/Leetcode_Solutions/C++/034._Search for a Range \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/034._Search for a Range.md rename to "docs/Leetcode_Solutions/C++/034._Search for a Range \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/035._search_insert_position.md "b/docs/Leetcode_Solutions/C++/035._search_insert_position \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/035._search_insert_position.md rename to "docs/Leetcode_Solutions/C++/035._search_insert_position \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/038._Count_and_Say.md "b/docs/Leetcode_Solutions/C++/038._Count_and_Say \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/038._Count_and_Say.md rename to "docs/Leetcode_Solutions/C++/038._Count_and_Say \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/039._combination_sum.md "b/docs/Leetcode_Solutions/C++/039._combination_sum \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/039._combination_sum.md rename to "docs/Leetcode_Solutions/C++/039._combination_sum \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/040._combination_sum_ii.md "b/docs/Leetcode_Solutions/C++/040._combination_sum_ii \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/040._combination_sum_ii.md rename to "docs/Leetcode_Solutions/C++/040._combination_sum_ii \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/042._trapping_rain_water.md "b/docs/Leetcode_Solutions/C++/042._trapping_rain_water \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/042._trapping_rain_water.md rename to "docs/Leetcode_Solutions/C++/042._trapping_rain_water \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/043._multiply_strings.md "b/docs/Leetcode_Solutions/C++/043._multiply_strings \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/043._multiply_strings.md rename to "docs/Leetcode_Solutions/C++/043._multiply_strings \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/044._wildcard_matching.md "b/docs/Leetcode_Solutions/C++/044._wildcard_matching \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/044._wildcard_matching.md rename to "docs/Leetcode_Solutions/C++/044._wildcard_matching \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/045._Jump_Game_II.md "b/docs/Leetcode_Solutions/C++/045._Jump_Game_II \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/045._Jump_Game_II.md rename to "docs/Leetcode_Solutions/C++/045._Jump_Game_II \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/046._permutations.md "b/docs/Leetcode_Solutions/C++/046._permutations \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/046._permutations.md rename to "docs/Leetcode_Solutions/C++/046._permutations \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/047._permutations_ii.md "b/docs/Leetcode_Solutions/C++/047._permutations_ii \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/047._permutations_ii.md rename to "docs/Leetcode_Solutions/C++/047._permutations_ii \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/048._rotate_image.md "b/docs/Leetcode_Solutions/C++/048._rotate_image \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/048._rotate_image.md rename to "docs/Leetcode_Solutions/C++/048._rotate_image \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/049._group_anagrams_python.md "b/docs/Leetcode_Solutions/C++/049._group_anagrams_python \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/049._group_anagrams_python.md rename to "docs/Leetcode_Solutions/C++/049._group_anagrams_python \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/050._pow(x,_n).md "b/docs/Leetcode_Solutions/C++/050._pow(x,_n) \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/050._pow(x,_n).md rename to "docs/Leetcode_Solutions/C++/050._pow(x,_n) \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/051._n-queens.md "b/docs/Leetcode_Solutions/C++/051._n-queens \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/051._n-queens.md rename to "docs/Leetcode_Solutions/C++/051._n-queens \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/052._n-queens_ii.md "b/docs/Leetcode_Solutions/C++/052._n-queens_ii \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/052._n-queens_ii.md rename to "docs/Leetcode_Solutions/C++/052._n-queens_ii \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/053._maximum_subarray.md "b/docs/Leetcode_Solutions/C++/053._maximum_subarray \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/053._maximum_subarray.md rename to "docs/Leetcode_Solutions/C++/053._maximum_subarray \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/054._spiral_matrix.md "b/docs/Leetcode_Solutions/C++/054._spiral_matrix \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/054._spiral_matrix.md rename to "docs/Leetcode_Solutions/C++/054._spiral_matrix \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/055._jump_game.md "b/docs/Leetcode_Solutions/C++/055._jump_game \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/055._jump_game.md rename to "docs/Leetcode_Solutions/C++/055._jump_game \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/056._Merge_Intervals.md "b/docs/Leetcode_Solutions/C++/056._Merge_Intervals \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/056._Merge_Intervals.md rename to "docs/Leetcode_Solutions/C++/056._Merge_Intervals \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/058._length_of_last_word.md "b/docs/Leetcode_Solutions/C++/058._length_of_last_word \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/058._length_of_last_word.md rename to "docs/Leetcode_Solutions/C++/058._length_of_last_word \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/059._spiral_matrix_ii.md "b/docs/Leetcode_Solutions/C++/059._spiral_matrix_ii \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/059._spiral_matrix_ii.md rename to "docs/Leetcode_Solutions/C++/059._spiral_matrix_ii \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/060._permutation_sequence.md "b/docs/Leetcode_Solutions/C++/060._permutation_sequence \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/060._permutation_sequence.md rename to "docs/Leetcode_Solutions/C++/060._permutation_sequence \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/061._rotate_list.md "b/docs/Leetcode_Solutions/C++/061._rotate_list \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/061._rotate_list.md rename to "docs/Leetcode_Solutions/C++/061._rotate_list \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/064._minimum_path_sum.md "b/docs/Leetcode_Solutions/C++/064._minimum_path_sum \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/064._minimum_path_sum.md rename to "docs/Leetcode_Solutions/C++/064._minimum_path_sum \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/065.unique_paths_ii.md "b/docs/Leetcode_Solutions/C++/065.unique_paths_ii \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/065.unique_paths_ii.md rename to "docs/Leetcode_Solutions/C++/065.unique_paths_ii \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/066._plus_one.md "b/docs/Leetcode_Solutions/C++/066._plus_one \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/066._plus_one.md rename to "docs/Leetcode_Solutions/C++/066._plus_one \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/067._add_binary.md "b/docs/Leetcode_Solutions/C++/067._add_binary \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/067._add_binary.md rename to "docs/Leetcode_Solutions/C++/067._add_binary \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/069._sqrt(x).md "b/docs/Leetcode_Solutions/C++/069._sqrt(x) \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/069._sqrt(x).md rename to "docs/Leetcode_Solutions/C++/069._sqrt(x) \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/070. Climbing Stairs.md "b/docs/Leetcode_Solutions/C++/070. Climbing Stairs \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/070. Climbing Stairs.md rename to "docs/Leetcode_Solutions/C++/070. Climbing Stairs \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/072._edit_distance.md "b/docs/Leetcode_Solutions/C++/072._edit_distance \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/072._edit_distance.md rename to "docs/Leetcode_Solutions/C++/072._edit_distance \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/073. Set Matrix Zeroes.md "b/docs/Leetcode_Solutions/C++/073. Set Matrix Zeroes \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/073. Set Matrix Zeroes.md rename to "docs/Leetcode_Solutions/C++/073. Set Matrix Zeroes \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/074._search_a_2d_matrix.md "b/docs/Leetcode_Solutions/C++/074._search_a_2d_matrix \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/074._search_a_2d_matrix.md rename to "docs/Leetcode_Solutions/C++/074._search_a_2d_matrix \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/075._sort_colors.md "b/docs/Leetcode_Solutions/C++/075._sort_colors \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/075._sort_colors.md rename to "docs/Leetcode_Solutions/C++/075._sort_colors \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/076._Minimum_Window_Substring.md "b/docs/Leetcode_Solutions/C++/076._Minimum_Window_Substring \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/076._Minimum_Window_Substring.md rename to "docs/Leetcode_Solutions/C++/076._Minimum_Window_Substring \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/077._combinations.md "b/docs/Leetcode_Solutions/C++/077._combinations \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/077._combinations.md rename to "docs/Leetcode_Solutions/C++/077._combinations \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/078.Subsets .md "b/docs/Leetcode_Solutions/C++/078.Subsets \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/078.Subsets .md rename to "docs/Leetcode_Solutions/C++/078.Subsets \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/079._word_search.md "b/docs/Leetcode_Solutions/C++/079._word_search \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/079._word_search.md rename to "docs/Leetcode_Solutions/C++/079._word_search \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/082._remove_duplicates_from_sorted_list_ii.md "b/docs/Leetcode_Solutions/C++/082._remove_duplicates_from_sorted_list_ii \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/082._remove_duplicates_from_sorted_list_ii.md rename to "docs/Leetcode_Solutions/C++/082._remove_duplicates_from_sorted_list_ii \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/083._remove_duplicates_from_sorted_list.md "b/docs/Leetcode_Solutions/C++/083._remove_duplicates_from_sorted_list \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/083._remove_duplicates_from_sorted_list.md rename to "docs/Leetcode_Solutions/C++/083._remove_duplicates_from_sorted_list \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/086._partition_list.md "b/docs/Leetcode_Solutions/C++/086._partition_list \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/086._partition_list.md rename to "docs/Leetcode_Solutions/C++/086._partition_list \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/088._merge_sorted_array.md "b/docs/Leetcode_Solutions/C++/088._merge_sorted_array \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/088._merge_sorted_array.md rename to "docs/Leetcode_Solutions/C++/088._merge_sorted_array \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/089._gray_code.md "b/docs/Leetcode_Solutions/C++/089._gray_code \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/089._gray_code.md rename to "docs/Leetcode_Solutions/C++/089._gray_code \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/090._subsets_ii.md "b/docs/Leetcode_Solutions/C++/090._subsets_ii \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/090._subsets_ii.md rename to "docs/Leetcode_Solutions/C++/090._subsets_ii \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/091._decode_ways.md "b/docs/Leetcode_Solutions/C++/091._decode_ways \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/091._decode_ways.md rename to "docs/Leetcode_Solutions/C++/091._decode_ways \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/092._reverse_linked_list_ii.md "b/docs/Leetcode_Solutions/C++/092._reverse_linked_list_ii \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/092._reverse_linked_list_ii.md rename to "docs/Leetcode_Solutions/C++/092._reverse_linked_list_ii \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/093._restore_ip_addresses.md "b/docs/Leetcode_Solutions/C++/093._restore_ip_addresses \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/093._restore_ip_addresses.md rename to "docs/Leetcode_Solutions/C++/093._restore_ip_addresses \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/094._binary_tree_inorder_traversal.md "b/docs/Leetcode_Solutions/C++/094._binary_tree_inorder_traversal \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/094._binary_tree_inorder_traversal.md rename to "docs/Leetcode_Solutions/C++/094._binary_tree_inorder_traversal \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/096._unique_binary_search_trees.md "b/docs/Leetcode_Solutions/C++/096._unique_binary_search_trees \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/096._unique_binary_search_trees.md rename to "docs/Leetcode_Solutions/C++/096._unique_binary_search_trees \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/098._validate_binary_search_tree.md "b/docs/Leetcode_Solutions/C++/098._validate_binary_search_tree \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/098._validate_binary_search_tree.md rename to "docs/Leetcode_Solutions/C++/098._validate_binary_search_tree \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/100._same_tree.md "b/docs/Leetcode_Solutions/C++/100._same_tree \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/100._same_tree.md rename to "docs/Leetcode_Solutions/C++/100._same_tree \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/101._symmetric_tree.md "b/docs/Leetcode_Solutions/C++/101._symmetric_tree \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/101._symmetric_tree.md rename to "docs/Leetcode_Solutions/C++/101._symmetric_tree \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/102._binary_tree_level_order_traversal.md "b/docs/Leetcode_Solutions/C++/102._binary_tree_level_order_traversal \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/102._binary_tree_level_order_traversal.md rename to "docs/Leetcode_Solutions/C++/102._binary_tree_level_order_traversal \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/103._binary_tree_zigzag_level_order_traversal.md "b/docs/Leetcode_Solutions/C++/103._binary_tree_zigzag_level_order_traversal \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/103._binary_tree_zigzag_level_order_traversal.md rename to "docs/Leetcode_Solutions/C++/103._binary_tree_zigzag_level_order_traversal \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/104._maximum_depth_of_binary_tree.md "b/docs/Leetcode_Solutions/C++/104._maximum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/104._maximum_depth_of_binary_tree.md rename to "docs/Leetcode_Solutions/C++/104._maximum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/105._construct_binary_tree_from_preorder_and_inorder_traversal.md "b/docs/Leetcode_Solutions/C++/105._construct_binary_tree_from_preorder_and_inorder_traversal \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/105._construct_binary_tree_from_preorder_and_inorder_traversal.md rename to "docs/Leetcode_Solutions/C++/105._construct_binary_tree_from_preorder_and_inorder_traversal \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/106._construct_binary_tree_from_inorder_and_postorder_traversal.md "b/docs/Leetcode_Solutions/C++/106._construct_binary_tree_from_inorder_and_postorder_traversal \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/106._construct_binary_tree_from_inorder_and_postorder_traversal.md rename to "docs/Leetcode_Solutions/C++/106._construct_binary_tree_from_inorder_and_postorder_traversal \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/107._binary_tree_level_order_traversal_ii.md "b/docs/Leetcode_Solutions/C++/107._binary_tree_level_order_traversal_ii \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/107._binary_tree_level_order_traversal_ii.md rename to "docs/Leetcode_Solutions/C++/107._binary_tree_level_order_traversal_ii \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/108._convert_sorted_array_to_binary_search_tree.md "b/docs/Leetcode_Solutions/C++/108._convert_sorted_array_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/108._convert_sorted_array_to_binary_search_tree.md rename to "docs/Leetcode_Solutions/C++/108._convert_sorted_array_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/109._convert_sorted_list_to_binary_search_tree.md "b/docs/Leetcode_Solutions/C++/109._convert_sorted_list_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/109._convert_sorted_list_to_binary_search_tree.md rename to "docs/Leetcode_Solutions/C++/109._convert_sorted_list_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/110._balanced_binary_tree.md "b/docs/Leetcode_Solutions/C++/110._balanced_binary_tree \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/110._balanced_binary_tree.md rename to "docs/Leetcode_Solutions/C++/110._balanced_binary_tree \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/111._minimum_depth_of_binary_tree.md "b/docs/Leetcode_Solutions/C++/111._minimum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/111._minimum_depth_of_binary_tree.md rename to "docs/Leetcode_Solutions/C++/111._minimum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/112._path_sum.md "b/docs/Leetcode_Solutions/C++/112._path_sum \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/112._path_sum.md rename to "docs/Leetcode_Solutions/C++/112._path_sum \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/113._path_sum_ii.md "b/docs/Leetcode_Solutions/C++/113._path_sum_ii \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/113._path_sum_ii.md rename to "docs/Leetcode_Solutions/C++/113._path_sum_ii \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/114._flatten_binary_tree_to_linked_list.md "b/docs/Leetcode_Solutions/C++/114._flatten_binary_tree_to_linked_list \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/114._flatten_binary_tree_to_linked_list.md rename to "docs/Leetcode_Solutions/C++/114._flatten_binary_tree_to_linked_list \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/116._populating_next_right_pointers_in_each_node.md "b/docs/Leetcode_Solutions/C++/116._populating_next_right_pointers_in_each_node \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/116._populating_next_right_pointers_in_each_node.md rename to "docs/Leetcode_Solutions/C++/116._populating_next_right_pointers_in_each_node \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/118._pascal's_triangle.md "b/docs/Leetcode_Solutions/C++/118._pascal's_triangle \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/118._pascal's_triangle.md rename to "docs/Leetcode_Solutions/C++/118._pascal's_triangle \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/119. Pascal's Triangle II.md "b/docs/Leetcode_Solutions/C++/119. Pascal's Triangle II \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/119. Pascal's Triangle II.md rename to "docs/Leetcode_Solutions/C++/119. Pascal's Triangle II \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/120. Triangle.md "b/docs/Leetcode_Solutions/C++/120. Triangle \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/120. Triangle.md rename to "docs/Leetcode_Solutions/C++/120. Triangle \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/121._Best_Time_to_Buy_and_Sell_Stock.md "b/docs/Leetcode_Solutions/C++/121._Best_Time_to_Buy_and_Sell_Stock \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/121._Best_Time_to_Buy_and_Sell_Stock.md rename to "docs/Leetcode_Solutions/C++/121._Best_Time_to_Buy_and_Sell_Stock \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/125._valid_palindrome.md "b/docs/Leetcode_Solutions/C++/125._valid_palindrome \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/125._valid_palindrome.md rename to "docs/Leetcode_Solutions/C++/125._valid_palindrome \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/126. Word Ladder II.md "b/docs/Leetcode_Solutions/C++/126. Word Ladder II \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/126. Word Ladder II.md rename to "docs/Leetcode_Solutions/C++/126. Word Ladder II \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/127._word_ladder.md "b/docs/Leetcode_Solutions/C++/127._word_ladder \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/127._word_ladder.md rename to "docs/Leetcode_Solutions/C++/127._word_ladder \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/128._Longest_Consecutive_Sequence.md "b/docs/Leetcode_Solutions/C++/128._Longest_Consecutive_Sequence \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/128._Longest_Consecutive_Sequence.md rename to "docs/Leetcode_Solutions/C++/128._Longest_Consecutive_Sequence \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/129._sum_root_to_leaf_numbers.md "b/docs/Leetcode_Solutions/C++/129._sum_root_to_leaf_numbers \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/129._sum_root_to_leaf_numbers.md rename to "docs/Leetcode_Solutions/C++/129._sum_root_to_leaf_numbers \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/130._surrounded_regions.md "b/docs/Leetcode_Solutions/C++/130._surrounded_regions \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/130._surrounded_regions.md rename to "docs/Leetcode_Solutions/C++/130._surrounded_regions \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/131._palindrome_partitioning.md "b/docs/Leetcode_Solutions/C++/131._palindrome_partitioning \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/131._palindrome_partitioning.md rename to "docs/Leetcode_Solutions/C++/131._palindrome_partitioning \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/133._clone_graph.md "b/docs/Leetcode_Solutions/C++/133._clone_graph \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/133._clone_graph.md rename to "docs/Leetcode_Solutions/C++/133._clone_graph \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/136._single_number.md "b/docs/Leetcode_Solutions/C++/136._single_number \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/136._single_number.md rename to "docs/Leetcode_Solutions/C++/136._single_number \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/139._word_break.md "b/docs/Leetcode_Solutions/C++/139._word_break \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/139._word_break.md rename to "docs/Leetcode_Solutions/C++/139._word_break \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/140._word_break_ii.md "b/docs/Leetcode_Solutions/C++/140._word_break_ii \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/140._word_break_ii.md rename to "docs/Leetcode_Solutions/C++/140._word_break_ii \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/141._linked_list_cycle.md "b/docs/Leetcode_Solutions/C++/141._linked_list_cycle \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/141._linked_list_cycle.md rename to "docs/Leetcode_Solutions/C++/141._linked_list_cycle \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/142_Linked_List_Cycle_II.md "b/docs/Leetcode_Solutions/C++/142_Linked_List_Cycle_II \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/142_Linked_List_Cycle_II.md rename to "docs/Leetcode_Solutions/C++/142_Linked_List_Cycle_II \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/143._reorder_list.md "b/docs/Leetcode_Solutions/C++/143._reorder_list \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/143._reorder_list.md rename to "docs/Leetcode_Solutions/C++/143._reorder_list \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/144._binary_tree_preorder_traversal.md "b/docs/Leetcode_Solutions/C++/144._binary_tree_preorder_traversal \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/144._binary_tree_preorder_traversal.md rename to "docs/Leetcode_Solutions/C++/144._binary_tree_preorder_traversal \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/145._binary_tree_postorder_traversal.md "b/docs/Leetcode_Solutions/C++/145._binary_tree_postorder_traversal \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/145._binary_tree_postorder_traversal.md rename to "docs/Leetcode_Solutions/C++/145._binary_tree_postorder_traversal \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/147._insertion_sort_list.md "b/docs/Leetcode_Solutions/C++/147._insertion_sort_list \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/147._insertion_sort_list.md rename to "docs/Leetcode_Solutions/C++/147._insertion_sort_list \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/148._sort_list.md "b/docs/Leetcode_Solutions/C++/148._sort_list \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/148._sort_list.md rename to "docs/Leetcode_Solutions/C++/148._sort_list \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/150._evaluate_reverse_polish_notation.md "b/docs/Leetcode_Solutions/C++/150._evaluate_reverse_polish_notation \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/150._evaluate_reverse_polish_notation.md rename to "docs/Leetcode_Solutions/C++/150._evaluate_reverse_polish_notation \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/151._reverse_words_in_a_string.md "b/docs/Leetcode_Solutions/C++/151._reverse_words_in_a_string \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/151._reverse_words_in_a_string.md rename to "docs/Leetcode_Solutions/C++/151._reverse_words_in_a_string \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/152._maximum_product_subarray.md "b/docs/Leetcode_Solutions/C++/152._maximum_product_subarray \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/152._maximum_product_subarray.md rename to "docs/Leetcode_Solutions/C++/152._maximum_product_subarray \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/153._find_minimum_in_rotated_sorted_array.md "b/docs/Leetcode_Solutions/C++/153._find_minimum_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/153._find_minimum_in_rotated_sorted_array.md rename to "docs/Leetcode_Solutions/C++/153._find_minimum_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/155._min_stack.md "b/docs/Leetcode_Solutions/C++/155._min_stack \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/155._min_stack.md rename to "docs/Leetcode_Solutions/C++/155._min_stack \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md "b/docs/Leetcode_Solutions/C++/159._Longest_Substring_with_At_Most_Two_Distinct_Characters \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md rename to "docs/Leetcode_Solutions/C++/159._Longest_Substring_with_At_Most_Two_Distinct_Characters \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/160._intersection_of_two_linked_lists.md "b/docs/Leetcode_Solutions/C++/160._intersection_of_two_linked_lists \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/160._intersection_of_two_linked_lists.md rename to "docs/Leetcode_Solutions/C++/160._intersection_of_two_linked_lists \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/162._find_peak_element.md "b/docs/Leetcode_Solutions/C++/162._find_peak_element \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/162._find_peak_element.md rename to "docs/Leetcode_Solutions/C++/162._find_peak_element \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/165._compare_version_numbers.md "b/docs/Leetcode_Solutions/C++/165._compare_version_numbers \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/165._compare_version_numbers.md rename to "docs/Leetcode_Solutions/C++/165._compare_version_numbers \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/166._Fraction_to_Recurring_Decimal.md "b/docs/Leetcode_Solutions/C++/166._Fraction_to_Recurring_Decimal \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/166._Fraction_to_Recurring_Decimal.md rename to "docs/Leetcode_Solutions/C++/166._Fraction_to_Recurring_Decimal \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/167._two_sum_ii_-_input_array_is_sorted.md "b/docs/Leetcode_Solutions/C++/167._two_sum_ii_-_input_array_is_sorted \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/167._two_sum_ii_-_input_array_is_sorted.md rename to "docs/Leetcode_Solutions/C++/167._two_sum_ii_-_input_array_is_sorted \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/168._excel_sheet_column_title.md "b/docs/Leetcode_Solutions/C++/168._excel_sheet_column_title \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/168._excel_sheet_column_title.md rename to "docs/Leetcode_Solutions/C++/168._excel_sheet_column_title \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/169._majority_element.md "b/docs/Leetcode_Solutions/C++/169._majority_element \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/169._majority_element.md rename to "docs/Leetcode_Solutions/C++/169._majority_element \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/171._excel_sheet_column_number.md "b/docs/Leetcode_Solutions/C++/171._excel_sheet_column_number \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/171._excel_sheet_column_number.md rename to "docs/Leetcode_Solutions/C++/171._excel_sheet_column_number \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/173._binary_search_tree_iterator.md "b/docs/Leetcode_Solutions/C++/173._binary_search_tree_iterator \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/173._binary_search_tree_iterator.md rename to "docs/Leetcode_Solutions/C++/173._binary_search_tree_iterator \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/189._rotate_array.md "b/docs/Leetcode_Solutions/C++/189._rotate_array \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/189._rotate_array.md rename to "docs/Leetcode_Solutions/C++/189._rotate_array \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/191._number_of_1_bits.md "b/docs/Leetcode_Solutions/C++/191._number_of_1_bits \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/191._number_of_1_bits.md rename to "docs/Leetcode_Solutions/C++/191._number_of_1_bits \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/198._house_robber.md "b/docs/Leetcode_Solutions/C++/198._house_robber \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/198._house_robber.md rename to "docs/Leetcode_Solutions/C++/198._house_robber \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/199._binary_tree_right_side_view.md "b/docs/Leetcode_Solutions/C++/199._binary_tree_right_side_view \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/199._binary_tree_right_side_view.md rename to "docs/Leetcode_Solutions/C++/199._binary_tree_right_side_view \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/200._number_of_islands.md "b/docs/Leetcode_Solutions/C++/200._number_of_islands \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/200._number_of_islands.md rename to "docs/Leetcode_Solutions/C++/200._number_of_islands \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/203._remove_linked_list_elements.md "b/docs/Leetcode_Solutions/C++/203._remove_linked_list_elements \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/203._remove_linked_list_elements.md rename to "docs/Leetcode_Solutions/C++/203._remove_linked_list_elements \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/204._count_primes.md "b/docs/Leetcode_Solutions/C++/204._count_primes \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/204._count_primes.md rename to "docs/Leetcode_Solutions/C++/204._count_primes \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/205._isomorphic_strings.md "b/docs/Leetcode_Solutions/C++/205._isomorphic_strings \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/205._isomorphic_strings.md rename to "docs/Leetcode_Solutions/C++/205._isomorphic_strings \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/206._reverse_linked_list.md "b/docs/Leetcode_Solutions/C++/206._reverse_linked_list \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/206._reverse_linked_list.md rename to "docs/Leetcode_Solutions/C++/206._reverse_linked_list \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/207._course_schedule.md "b/docs/Leetcode_Solutions/C++/207._course_schedule \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/207._course_schedule.md rename to "docs/Leetcode_Solutions/C++/207._course_schedule \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/208._implement_trie_(prefix_tree).md "b/docs/Leetcode_Solutions/C++/208._implement_trie_(prefix_tree) \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/208._implement_trie_(prefix_tree).md rename to "docs/Leetcode_Solutions/C++/208._implement_trie_(prefix_tree) \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/210._course_schedule_ii.md "b/docs/Leetcode_Solutions/C++/210._course_schedule_ii \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/210._course_schedule_ii.md rename to "docs/Leetcode_Solutions/C++/210._course_schedule_ii \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/211. Add and Search Word - Data structure design.md "b/docs/Leetcode_Solutions/C++/211. Add and Search Word - Data structure design \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/211. Add and Search Word - Data structure design.md rename to "docs/Leetcode_Solutions/C++/211. Add and Search Word - Data structure design \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/213._house_robber_ii.md "b/docs/Leetcode_Solutions/C++/213._house_robber_ii \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/213._house_robber_ii.md rename to "docs/Leetcode_Solutions/C++/213._house_robber_ii \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/216._combination_sum_iii.md "b/docs/Leetcode_Solutions/C++/216._combination_sum_iii \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/216._combination_sum_iii.md rename to "docs/Leetcode_Solutions/C++/216._combination_sum_iii \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/217._contains_duplicate.md "b/docs/Leetcode_Solutions/C++/217._contains_duplicate \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/217._contains_duplicate.md rename to "docs/Leetcode_Solutions/C++/217._contains_duplicate \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/218._The _Skyline_Problem .md "b/docs/Leetcode_Solutions/C++/218._The _Skyline_Problem \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/218._The _Skyline_Problem .md rename to "docs/Leetcode_Solutions/C++/218._The _Skyline_Problem \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/219._contains_duplicate_ii.md "b/docs/Leetcode_Solutions/C++/219._contains_duplicate_ii \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/219._contains_duplicate_ii.md rename to "docs/Leetcode_Solutions/C++/219._contains_duplicate_ii \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/221._maximal_square.md "b/docs/Leetcode_Solutions/C++/221._maximal_square \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/221._maximal_square.md rename to "docs/Leetcode_Solutions/C++/221._maximal_square \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/222._count_complete_tree_nodes.md "b/docs/Leetcode_Solutions/C++/222._count_complete_tree_nodes \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/222._count_complete_tree_nodes.md rename to "docs/Leetcode_Solutions/C++/222._count_complete_tree_nodes \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/223._rectangle_area.md "b/docs/Leetcode_Solutions/C++/223._rectangle_area \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/223._rectangle_area.md rename to "docs/Leetcode_Solutions/C++/223._rectangle_area \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/224. Basic Calculator .md "b/docs/Leetcode_Solutions/C++/224. Basic Calculator \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/224. Basic Calculator .md rename to "docs/Leetcode_Solutions/C++/224. Basic Calculator \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/225._implement_stack_using_queues.md "b/docs/Leetcode_Solutions/C++/225._implement_stack_using_queues \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/225._implement_stack_using_queues.md rename to "docs/Leetcode_Solutions/C++/225._implement_stack_using_queues \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/226._invert_binary_tree.md "b/docs/Leetcode_Solutions/C++/226._invert_binary_tree \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/226._invert_binary_tree.md rename to "docs/Leetcode_Solutions/C++/226._invert_binary_tree \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/227._basic_calculator_ii.md "b/docs/Leetcode_Solutions/C++/227._basic_calculator_ii \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/227._basic_calculator_ii.md rename to "docs/Leetcode_Solutions/C++/227._basic_calculator_ii \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/228._summary_ranges.md "b/docs/Leetcode_Solutions/C++/228._summary_ranges \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/228._summary_ranges.md rename to "docs/Leetcode_Solutions/C++/228._summary_ranges \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/229._majority_element_ii.md "b/docs/Leetcode_Solutions/C++/229._majority_element_ii \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/229._majority_element_ii.md rename to "docs/Leetcode_Solutions/C++/229._majority_element_ii \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/230._kth_smallest_element_in_a_bst.md "b/docs/Leetcode_Solutions/C++/230._kth_smallest_element_in_a_bst \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/230._kth_smallest_element_in_a_bst.md rename to "docs/Leetcode_Solutions/C++/230._kth_smallest_element_in_a_bst \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/231. _Power_of_Two.md "b/docs/Leetcode_Solutions/C++/231. _Power_of_Two \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/231. _Power_of_Two.md rename to "docs/Leetcode_Solutions/C++/231. _Power_of_Two \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/232._implement_queue_using_stacks.md "b/docs/Leetcode_Solutions/C++/232._implement_queue_using_stacks \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/232._implement_queue_using_stacks.md rename to "docs/Leetcode_Solutions/C++/232._implement_queue_using_stacks \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/234._palindrome_linked_list.md "b/docs/Leetcode_Solutions/C++/234._palindrome_linked_list \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/234._palindrome_linked_list.md rename to "docs/Leetcode_Solutions/C++/234._palindrome_linked_list \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/235._lowest_common_ancestor_of_a_binary_search_tree.md "b/docs/Leetcode_Solutions/C++/235._lowest_common_ancestor_of_a_binary_search_tree \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/235._lowest_common_ancestor_of_a_binary_search_tree.md rename to "docs/Leetcode_Solutions/C++/235._lowest_common_ancestor_of_a_binary_search_tree \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/236._lowest_common_ancestor_of_a_binary_tree.md "b/docs/Leetcode_Solutions/C++/236._lowest_common_ancestor_of_a_binary_tree \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/236._lowest_common_ancestor_of_a_binary_tree.md rename to "docs/Leetcode_Solutions/C++/236._lowest_common_ancestor_of_a_binary_tree \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/237._delete_node_in_a_linked_list.md "b/docs/Leetcode_Solutions/C++/237._delete_node_in_a_linked_list \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/237._delete_node_in_a_linked_list.md rename to "docs/Leetcode_Solutions/C++/237._delete_node_in_a_linked_list \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/238._product_of_array_except_self.md "b/docs/Leetcode_Solutions/C++/238._product_of_array_except_self \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/238._product_of_array_except_self.md rename to "docs/Leetcode_Solutions/C++/238._product_of_array_except_self \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/240._search_a_2d_matrix_ii.md "b/docs/Leetcode_Solutions/C++/240._search_a_2d_matrix_ii \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/240._search_a_2d_matrix_ii.md rename to "docs/Leetcode_Solutions/C++/240._search_a_2d_matrix_ii \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/242._valid_anagram.md "b/docs/Leetcode_Solutions/C++/242._valid_anagram \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/242._valid_anagram.md rename to "docs/Leetcode_Solutions/C++/242._valid_anagram \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/252. Meeting Rooms.md "b/docs/Leetcode_Solutions/C++/252. Meeting Rooms \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/252. Meeting Rooms.md rename to "docs/Leetcode_Solutions/C++/252. Meeting Rooms \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md "b/docs/Leetcode_Solutions/C++/255._Verify_Preorder_Sequence_in_Binary_Search_Tree \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md rename to "docs/Leetcode_Solutions/C++/255._Verify_Preorder_Sequence_in_Binary_Search_Tree \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/256. Paint House.md "b/docs/Leetcode_Solutions/C++/256. Paint House \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/256. Paint House.md rename to "docs/Leetcode_Solutions/C++/256. Paint House \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/257._binary_tree_paths.md "b/docs/Leetcode_Solutions/C++/257._binary_tree_paths \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/257._binary_tree_paths.md rename to "docs/Leetcode_Solutions/C++/257._binary_tree_paths \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/258_ Add_Digits.md "b/docs/Leetcode_Solutions/C++/258_ Add_Digits \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/258_ Add_Digits.md rename to "docs/Leetcode_Solutions/C++/258_ Add_Digits \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/261. Graph Valid Tree.md "b/docs/Leetcode_Solutions/C++/261. Graph Valid Tree \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/261. Graph Valid Tree.md rename to "docs/Leetcode_Solutions/C++/261. Graph Valid Tree \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/263._ugly_number.md "b/docs/Leetcode_Solutions/C++/263._ugly_number \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/263._ugly_number.md rename to "docs/Leetcode_Solutions/C++/263._ugly_number \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/264._ugly_number_ii.md "b/docs/Leetcode_Solutions/C++/264._ugly_number_ii \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/264._ugly_number_ii.md rename to "docs/Leetcode_Solutions/C++/264._ugly_number_ii \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/265. Paint House II.md "b/docs/Leetcode_Solutions/C++/265. Paint House II \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/265. Paint House II.md rename to "docs/Leetcode_Solutions/C++/265. Paint House II \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/266. Palindrome Permutation.md "b/docs/Leetcode_Solutions/C++/266. Palindrome Permutation \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/266. Palindrome Permutation.md rename to "docs/Leetcode_Solutions/C++/266. Palindrome Permutation \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/267. Palindrome Permutation II.md "b/docs/Leetcode_Solutions/C++/267. Palindrome Permutation II \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/267. Palindrome Permutation II.md rename to "docs/Leetcode_Solutions/C++/267. Palindrome Permutation II \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/268._missing_number.md "b/docs/Leetcode_Solutions/C++/268._missing_number \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/268._missing_number.md rename to "docs/Leetcode_Solutions/C++/268._missing_number \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/270. Closest Binary Search Tree Value.md "b/docs/Leetcode_Solutions/C++/270. Closest Binary Search Tree Value \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/270. Closest Binary Search Tree Value.md rename to "docs/Leetcode_Solutions/C++/270. Closest Binary Search Tree Value \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/276. Paint Fence.md "b/docs/Leetcode_Solutions/C++/276. Paint Fence \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/276. Paint Fence.md rename to "docs/Leetcode_Solutions/C++/276. Paint Fence \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/277. Find the Celebrity.md "b/docs/Leetcode_Solutions/C++/277. Find the Celebrity \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/277. Find the Celebrity.md rename to "docs/Leetcode_Solutions/C++/277. Find the Celebrity \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/278._First_Bad _Version.md "b/docs/Leetcode_Solutions/C++/278._First_Bad _Version \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/278._First_Bad _Version.md rename to "docs/Leetcode_Solutions/C++/278._First_Bad _Version \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/279._perfect_squares.md "b/docs/Leetcode_Solutions/C++/279._perfect_squares \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/279._perfect_squares.md rename to "docs/Leetcode_Solutions/C++/279._perfect_squares \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/280._Wiggle_Sort.md "b/docs/Leetcode_Solutions/C++/280._Wiggle_Sort \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/280._Wiggle_Sort.md rename to "docs/Leetcode_Solutions/C++/280._Wiggle_Sort \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/283._move_zeroes.md "b/docs/Leetcode_Solutions/C++/283._move_zeroes \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/283._move_zeroes.md rename to "docs/Leetcode_Solutions/C++/283._move_zeroes \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/285._inorder_successor_in_bst.md "b/docs/Leetcode_Solutions/C++/285._inorder_successor_in_bst \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/285._inorder_successor_in_bst.md rename to "docs/Leetcode_Solutions/C++/285._inorder_successor_in_bst \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/286. Walls and Gates.md "b/docs/Leetcode_Solutions/C++/286. Walls and Gates \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/286. Walls and Gates.md rename to "docs/Leetcode_Solutions/C++/286. Walls and Gates \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/289._game_of_life.md "b/docs/Leetcode_Solutions/C++/289._game_of_life \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/289._game_of_life.md rename to "docs/Leetcode_Solutions/C++/289._game_of_life \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/290._word_pattern.md "b/docs/Leetcode_Solutions/C++/290._word_pattern \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/290._word_pattern.md rename to "docs/Leetcode_Solutions/C++/290._word_pattern \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/292._nim_game.md "b/docs/Leetcode_Solutions/C++/292._nim_game \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/292._nim_game.md rename to "docs/Leetcode_Solutions/C++/292._nim_game \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/296. Best Meeting Point.md "b/docs/Leetcode_Solutions/C++/296. Best Meeting Point \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/296. Best Meeting Point.md rename to "docs/Leetcode_Solutions/C++/296. Best Meeting Point \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/298. Binary Tree Longest Consecutive Sequence.md "b/docs/Leetcode_Solutions/C++/298. Binary Tree Longest Consecutive Sequence \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/298. Binary Tree Longest Consecutive Sequence.md rename to "docs/Leetcode_Solutions/C++/298. Binary Tree Longest Consecutive Sequence \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/299._bulls_and_cows.md "b/docs/Leetcode_Solutions/C++/299._bulls_and_cows \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/299._bulls_and_cows.md rename to "docs/Leetcode_Solutions/C++/299._bulls_and_cows \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/300._longest_increasing_subsequence.md "b/docs/Leetcode_Solutions/C++/300._longest_increasing_subsequence \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/300._longest_increasing_subsequence.md rename to "docs/Leetcode_Solutions/C++/300._longest_increasing_subsequence \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/303._range_sum_query_-_immutable.md "b/docs/Leetcode_Solutions/C++/303._range_sum_query_-_immutable \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/303._range_sum_query_-_immutable.md rename to "docs/Leetcode_Solutions/C++/303._range_sum_query_-_immutable \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/316._Remove_Duplicate_Letters.md "b/docs/Leetcode_Solutions/C++/316._Remove_Duplicate_Letters \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/316._Remove_Duplicate_Letters.md rename to "docs/Leetcode_Solutions/C++/316._Remove_Duplicate_Letters \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/319._Bulb_Switcher.md "b/docs/Leetcode_Solutions/C++/319._Bulb_Switcher \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/319._Bulb_Switcher.md rename to "docs/Leetcode_Solutions/C++/319._Bulb_Switcher \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/322. Coin Change.md "b/docs/Leetcode_Solutions/C++/322. Coin Change \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/322. Coin Change.md rename to "docs/Leetcode_Solutions/C++/322. Coin Change \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/323. Number of Connected Components in an Undirected Graph.md "b/docs/Leetcode_Solutions/C++/323. Number of Connected Components in an Undirected Graph \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/323. Number of Connected Components in an Undirected Graph.md rename to "docs/Leetcode_Solutions/C++/323. Number of Connected Components in an Undirected Graph \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/324._Wiggle_Sort_II.md "b/docs/Leetcode_Solutions/C++/324._Wiggle_Sort_II \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/324._Wiggle_Sort_II.md rename to "docs/Leetcode_Solutions/C++/324._Wiggle_Sort_II \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/326._power_of_three.md "b/docs/Leetcode_Solutions/C++/326._power_of_three \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/326._power_of_three.md rename to "docs/Leetcode_Solutions/C++/326._power_of_three \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/328._odd_even_linked_list.md "b/docs/Leetcode_Solutions/C++/328._odd_even_linked_list \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/328._odd_even_linked_list.md rename to "docs/Leetcode_Solutions/C++/328._odd_even_linked_list \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/334._increasing_triplet_subsequence.md "b/docs/Leetcode_Solutions/C++/334._increasing_triplet_subsequence \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/334._increasing_triplet_subsequence.md rename to "docs/Leetcode_Solutions/C++/334._increasing_triplet_subsequence \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/337._house_robber_iii.md "b/docs/Leetcode_Solutions/C++/337._house_robber_iii \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/337._house_robber_iii.md rename to "docs/Leetcode_Solutions/C++/337._house_robber_iii \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/338. Counting Bits.md "b/docs/Leetcode_Solutions/C++/338. Counting Bits \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/338. Counting Bits.md rename to "docs/Leetcode_Solutions/C++/338. Counting Bits \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/339. Nested List Weight Sum.md "b/docs/Leetcode_Solutions/C++/339. Nested List Weight Sum \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/339. Nested List Weight Sum.md rename to "docs/Leetcode_Solutions/C++/339. Nested List Weight Sum \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/341._Flatten_Nested_List_Iterator.md "b/docs/Leetcode_Solutions/C++/341._Flatten_Nested_List_Iterator \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/341._Flatten_Nested_List_Iterator.md rename to "docs/Leetcode_Solutions/C++/341._Flatten_Nested_List_Iterator \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/342._Power_of_Four.md "b/docs/Leetcode_Solutions/C++/342._Power_of_Four \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/342._Power_of_Four.md rename to "docs/Leetcode_Solutions/C++/342._Power_of_Four \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/344._reverse_string.md "b/docs/Leetcode_Solutions/C++/344._reverse_string \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/344._reverse_string.md rename to "docs/Leetcode_Solutions/C++/344._reverse_string \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/345._Reverse_Vowels_of_a_String.md "b/docs/Leetcode_Solutions/C++/345._Reverse_Vowels_of_a_String \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/345._Reverse_Vowels_of_a_String.md rename to "docs/Leetcode_Solutions/C++/345._Reverse_Vowels_of_a_String \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/349._intersection_of_two_arrays.md "b/docs/Leetcode_Solutions/C++/349._intersection_of_two_arrays \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/349._intersection_of_two_arrays.md rename to "docs/Leetcode_Solutions/C++/349._intersection_of_two_arrays \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/350._intersection_of_two_arrays_ii.md "b/docs/Leetcode_Solutions/C++/350._intersection_of_two_arrays_ii \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/350._intersection_of_two_arrays_ii.md rename to "docs/Leetcode_Solutions/C++/350._intersection_of_two_arrays_ii \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/353. Design Snake Game.md "b/docs/Leetcode_Solutions/C++/353. Design Snake Game \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/353. Design Snake Game.md rename to "docs/Leetcode_Solutions/C++/353. Design Snake Game \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/364. Nested List Weight Sum II.md "b/docs/Leetcode_Solutions/C++/364. Nested List Weight Sum II \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/364. Nested List Weight Sum II.md rename to "docs/Leetcode_Solutions/C++/364. Nested List Weight Sum II \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/366. Find Leaves of Binary Tree.md "b/docs/Leetcode_Solutions/C++/366. Find Leaves of Binary Tree \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/366. Find Leaves of Binary Tree.md rename to "docs/Leetcode_Solutions/C++/366. Find Leaves of Binary Tree \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/367._valid_perfect_square.md "b/docs/Leetcode_Solutions/C++/367._valid_perfect_square \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/367._valid_perfect_square.md rename to "docs/Leetcode_Solutions/C++/367._valid_perfect_square \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/369.Plus One Linked List.md "b/docs/Leetcode_Solutions/C++/369.Plus One Linked List \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/369.Plus One Linked List.md rename to "docs/Leetcode_Solutions/C++/369.Plus One Linked List \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/371._sum_of_two_integers.md "b/docs/Leetcode_Solutions/C++/371._sum_of_two_integers \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/371._sum_of_two_integers.md rename to "docs/Leetcode_Solutions/C++/371._sum_of_two_integers \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/374._Guess_Number_Higher_or_Lower.md "b/docs/Leetcode_Solutions/C++/374._Guess_Number_Higher_or_Lower \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/374._Guess_Number_Higher_or_Lower.md rename to "docs/Leetcode_Solutions/C++/374._Guess_Number_Higher_or_Lower \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/377._combination_sum_iv.md "b/docs/Leetcode_Solutions/C++/377._combination_sum_iv \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/377._combination_sum_iv.md rename to "docs/Leetcode_Solutions/C++/377._combination_sum_iv \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/378._kth_smallest_element_in_a_sorted_matrix.md "b/docs/Leetcode_Solutions/C++/378._kth_smallest_element_in_a_sorted_matrix \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/378._kth_smallest_element_in_a_sorted_matrix.md rename to "docs/Leetcode_Solutions/C++/378._kth_smallest_element_in_a_sorted_matrix \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/380. Insert Delete GetRandom O(1).md "b/docs/Leetcode_Solutions/C++/380. Insert Delete GetRandom O(1) \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/380. Insert Delete GetRandom O(1).md rename to "docs/Leetcode_Solutions/C++/380. Insert Delete GetRandom O(1) \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/381. Insert Delete GetRandom O(1) - Duplicates allowed.md "b/docs/Leetcode_Solutions/C++/381. Insert Delete GetRandom O(1) - Duplicates allowed \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/381. Insert Delete GetRandom O(1) - Duplicates allowed.md rename to "docs/Leetcode_Solutions/C++/381. Insert Delete GetRandom O(1) - Duplicates allowed \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/382._linked_list_random_node.md "b/docs/Leetcode_Solutions/C++/382._linked_list_random_node \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/382._linked_list_random_node.md rename to "docs/Leetcode_Solutions/C++/382._linked_list_random_node \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/383._ransom_note.md "b/docs/Leetcode_Solutions/C++/383._ransom_note \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/383._ransom_note.md rename to "docs/Leetcode_Solutions/C++/383._ransom_note \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/384. Shuffle an Array.md "b/docs/Leetcode_Solutions/C++/384. Shuffle an Array \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/384. Shuffle an Array.md rename to "docs/Leetcode_Solutions/C++/384. Shuffle an Array \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/387._first_unique_character_in_a_string.md "b/docs/Leetcode_Solutions/C++/387._first_unique_character_in_a_string \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/387._first_unique_character_in_a_string.md rename to "docs/Leetcode_Solutions/C++/387._first_unique_character_in_a_string \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/388._Longest_Absolute_File_Path.md "b/docs/Leetcode_Solutions/C++/388._Longest_Absolute_File_Path \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/388._Longest_Absolute_File_Path.md rename to "docs/Leetcode_Solutions/C++/388._Longest_Absolute_File_Path \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/389._find_the_difference.md "b/docs/Leetcode_Solutions/C++/389._find_the_difference \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/389._find_the_difference.md rename to "docs/Leetcode_Solutions/C++/389._find_the_difference \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/392._is_subsequence.md "b/docs/Leetcode_Solutions/C++/392._is_subsequence \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/392._is_subsequence.md rename to "docs/Leetcode_Solutions/C++/392._is_subsequence \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/394._decode_string.md "b/docs/Leetcode_Solutions/C++/394._decode_string \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/394._decode_string.md rename to "docs/Leetcode_Solutions/C++/394._decode_string \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/400. Nth Digit.md "b/docs/Leetcode_Solutions/C++/400. Nth Digit \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/400. Nth Digit.md rename to "docs/Leetcode_Solutions/C++/400. Nth Digit \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/401._binary_watch.md "b/docs/Leetcode_Solutions/C++/401._binary_watch \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/401._binary_watch.md rename to "docs/Leetcode_Solutions/C++/401._binary_watch \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/404._sum_of_left_leaves.md "b/docs/Leetcode_Solutions/C++/404._sum_of_left_leaves \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/404._sum_of_left_leaves.md rename to "docs/Leetcode_Solutions/C++/404._sum_of_left_leaves \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/405. Convert a Number to Hexadecimal.md "b/docs/Leetcode_Solutions/C++/405. Convert a Number to Hexadecimal \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/405. Convert a Number to Hexadecimal.md rename to "docs/Leetcode_Solutions/C++/405. Convert a Number to Hexadecimal \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/406._Queue_Reconstruction_by_Height.md "b/docs/Leetcode_Solutions/C++/406._Queue_Reconstruction_by_Height \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/406._Queue_Reconstruction_by_Height.md rename to "docs/Leetcode_Solutions/C++/406._Queue_Reconstruction_by_Height \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/412._fizz_buzz.md "b/docs/Leetcode_Solutions/C++/412._fizz_buzz \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/412._fizz_buzz.md rename to "docs/Leetcode_Solutions/C++/412._fizz_buzz \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/413. Arithmetic Slices.md "b/docs/Leetcode_Solutions/C++/413. Arithmetic Slices \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/413. Arithmetic Slices.md rename to "docs/Leetcode_Solutions/C++/413. Arithmetic Slices \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/414._third_maximum_number.md "b/docs/Leetcode_Solutions/C++/414._third_maximum_number \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/414._third_maximum_number.md rename to "docs/Leetcode_Solutions/C++/414._third_maximum_number \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/415._add_strings.md "b/docs/Leetcode_Solutions/C++/415._add_strings \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/415._add_strings.md rename to "docs/Leetcode_Solutions/C++/415._add_strings \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/416. Partition Equal Subset Sum.md "b/docs/Leetcode_Solutions/C++/416. Partition Equal Subset Sum \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/416. Partition Equal Subset Sum.md rename to "docs/Leetcode_Solutions/C++/416. Partition Equal Subset Sum \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md "b/docs/Leetcode_Solutions/C++/421._Maximum_XOR_of_Two_Numbers_in_an_Array \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md rename to "docs/Leetcode_Solutions/C++/421._Maximum_XOR_of_Two_Numbers_in_an_Array \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/422. Valid Word Square.md "b/docs/Leetcode_Solutions/C++/422. Valid Word Square \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/422. Valid Word Square.md rename to "docs/Leetcode_Solutions/C++/422. Valid Word Square \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/434._number_of_segments_in_a_string.md "b/docs/Leetcode_Solutions/C++/434._number_of_segments_in_a_string \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/434._number_of_segments_in_a_string.md rename to "docs/Leetcode_Solutions/C++/434._number_of_segments_in_a_string \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/437._path_sum_iii.md "b/docs/Leetcode_Solutions/C++/437._path_sum_iii \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/437._path_sum_iii.md rename to "docs/Leetcode_Solutions/C++/437._path_sum_iii \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/438._Find_All_Anagrams_in_a_String.md "b/docs/Leetcode_Solutions/C++/438._Find_All_Anagrams_in_a_String \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/438._Find_All_Anagrams_in_a_String.md rename to "docs/Leetcode_Solutions/C++/438._Find_All_Anagrams_in_a_String \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/439. Ternary Expression Parser.md "b/docs/Leetcode_Solutions/C++/439. Ternary Expression Parser \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/439. Ternary Expression Parser.md rename to "docs/Leetcode_Solutions/C++/439. Ternary Expression Parser \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/441._arranging_coins.md "b/docs/Leetcode_Solutions/C++/441._arranging_coins \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/441._arranging_coins.md rename to "docs/Leetcode_Solutions/C++/441._arranging_coins \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/448._Find_All_Numbers_Disappeared_in_an_Array.md "b/docs/Leetcode_Solutions/C++/448._Find_All_Numbers_Disappeared_in_an_Array \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/448._Find_All_Numbers_Disappeared_in_an_Array.md rename to "docs/Leetcode_Solutions/C++/448._Find_All_Numbers_Disappeared_in_an_Array \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/450. Delete Node in a BST.md "b/docs/Leetcode_Solutions/C++/450. Delete Node in a BST \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/450. Delete Node in a BST.md rename to "docs/Leetcode_Solutions/C++/450. Delete Node in a BST \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/453._Minimum_Moves_to_Equal_Array_Elements.md "b/docs/Leetcode_Solutions/C++/453._Minimum_Moves_to_Equal_Array_Elements \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/453._Minimum_Moves_to_Equal_Array_Elements.md rename to "docs/Leetcode_Solutions/C++/453._Minimum_Moves_to_Equal_Array_Elements \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/459._Repeated_Substring_Pattern.md "b/docs/Leetcode_Solutions/C++/459._Repeated_Substring_Pattern \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/459._Repeated_Substring_Pattern.md rename to "docs/Leetcode_Solutions/C++/459._Repeated_Substring_Pattern \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/461._Hamming Distance.md "b/docs/Leetcode_Solutions/C++/461._Hamming Distance \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/461._Hamming Distance.md rename to "docs/Leetcode_Solutions/C++/461._Hamming Distance \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/463._Island_Perimeter.md "b/docs/Leetcode_Solutions/C++/463._Island_Perimeter \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/463._Island_Perimeter.md rename to "docs/Leetcode_Solutions/C++/463._Island_Perimeter \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/467._Unique_Substrings_in_Wraparound_String.md "b/docs/Leetcode_Solutions/C++/467._Unique_Substrings_in_Wraparound_String \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/467._Unique_Substrings_in_Wraparound_String.md rename to "docs/Leetcode_Solutions/C++/467._Unique_Substrings_in_Wraparound_String \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/469. Convex Polygon.md "b/docs/Leetcode_Solutions/C++/469. Convex Polygon \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/469. Convex Polygon.md rename to "docs/Leetcode_Solutions/C++/469. Convex Polygon \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/476._Number_Complement.md "b/docs/Leetcode_Solutions/C++/476._Number_Complement \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/476._Number_Complement.md rename to "docs/Leetcode_Solutions/C++/476._Number_Complement \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/477._Total_Hamming_Distance.md "b/docs/Leetcode_Solutions/C++/477._Total_Hamming_Distance \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/477._Total_Hamming_Distance.md rename to "docs/Leetcode_Solutions/C++/477._Total_Hamming_Distance \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/485._Max_Consecutive_Ones.md "b/docs/Leetcode_Solutions/C++/485._Max_Consecutive_Ones \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/485._Max_Consecutive_Ones.md rename to "docs/Leetcode_Solutions/C++/485._Max_Consecutive_Ones \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/587._Erect_the_Fence .md "b/docs/Leetcode_Solutions/C++/587._Erect_the_Fence \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/587._Erect_the_Fence .md rename to "docs/Leetcode_Solutions/C++/587._Erect_the_Fence \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/599._Minimum_Index_Sum_of_Two_Lists.md "b/docs/Leetcode_Solutions/C++/599._Minimum_Index_Sum_of_Two_Lists \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/599._Minimum_Index_Sum_of_Two_Lists.md rename to "docs/Leetcode_Solutions/C++/599._Minimum_Index_Sum_of_Two_Lists \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/647._Palindromic_Substrings.md "b/docs/Leetcode_Solutions/C++/647._Palindromic_Substrings \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/647._Palindromic_Substrings.md rename to "docs/Leetcode_Solutions/C++/647._Palindromic_Substrings \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/657._Judge_Route_Circle.md "b/docs/Leetcode_Solutions/C++/657._Judge_Route_Circle \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/657._Judge_Route_Circle.md rename to "docs/Leetcode_Solutions/C++/657._Judge_Route_Circle \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/665._Non-decreasing_Array.md "b/docs/Leetcode_Solutions/C++/665._Non-decreasing_Array \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/665._Non-decreasing_Array.md rename to "docs/Leetcode_Solutions/C++/665._Non-decreasing_Array \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/672._Bulb_Switcher_II.md "b/docs/Leetcode_Solutions/C++/672._Bulb_Switcher_II \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/672._Bulb_Switcher_II.md rename to "docs/Leetcode_Solutions/C++/672._Bulb_Switcher_II \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/681._Next_Closest_Time.md "b/docs/Leetcode_Solutions/C++/681._Next_Closest_Time \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/681._Next_Closest_Time.md rename to "docs/Leetcode_Solutions/C++/681._Next_Closest_Time \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/682._Baseball_Game.md "b/docs/Leetcode_Solutions/C++/682._Baseball_Game \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/682._Baseball_Game.md rename to "docs/Leetcode_Solutions/C++/682._Baseball_Game \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/687._Longest_Univalue_Path.md "b/docs/Leetcode_Solutions/C++/687._Longest_Univalue_Path \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/687._Longest_Univalue_Path.md rename to "docs/Leetcode_Solutions/C++/687._Longest_Univalue_Path \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/740._delete_and_earn.md "b/docs/Leetcode_Solutions/C++/740._delete_and_earn \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/740._delete_and_earn.md rename to "docs/Leetcode_Solutions/C++/740._delete_and_earn \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/760._Find_Anagram_Mappings.md "b/docs/Leetcode_Solutions/C++/760._Find_Anagram_Mappings \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/760._Find_Anagram_Mappings.md rename to "docs/Leetcode_Solutions/C++/760._Find_Anagram_Mappings \344\270\212\345\215\2102.49.13.md" diff --git a/docs/Leetcode_Solutions/README.md "b/docs/Leetcode_Solutions/C++/README \344\270\212\345\215\2102.49.13.md" similarity index 100% rename from docs/Leetcode_Solutions/README.md rename to "docs/Leetcode_Solutions/C++/README \344\270\212\345\215\2102.49.13.md" diff --git "a/docs/Leetcode_Solutions/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Binary Search \344\270\215\346\230\223\345\206\231.md" similarity index 100% rename from "docs/Leetcode_Solutions/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" rename to "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Binary Search \344\270\215\346\230\223\345\206\231.md" diff --git a/docs/Leetcode_Solutions/Summarization/Data Structure and Algorthim Review.md "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Data Structure and Algorthim Review.md" similarity index 100% rename from docs/Leetcode_Solutions/Summarization/Data Structure and Algorthim Review.md rename to "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Data Structure and Algorthim Review.md" diff --git a/docs/Leetcode_Solutions/Summarization/Dynamic Programming.md "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Dynamic Programming.md" similarity index 100% rename from docs/Leetcode_Solutions/Summarization/Dynamic Programming.md rename to "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Dynamic Programming.md" diff --git "a/docs/Leetcode_Solutions/Summarization/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" similarity index 100% rename from "docs/Leetcode_Solutions/Summarization/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" rename to "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" diff --git "a/docs/Leetcode_Solutions/Summarization/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" similarity index 100% rename from "docs/Leetcode_Solutions/Summarization/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" rename to "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" diff --git "a/docs/Leetcode_Solutions/Summarization/LinkedList\346\212\200\345\267\247.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/LinkedList\346\212\200\345\267\247.md" similarity index 100% rename from "docs/Leetcode_Solutions/Summarization/LinkedList\346\212\200\345\267\247.md" rename to "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/LinkedList\346\212\200\345\267\247.md" diff --git a/docs/Leetcode_Solutions/Summarization/Maximal Square.pdf "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Maximal Square.pdf" similarity index 100% rename from docs/Leetcode_Solutions/Summarization/Maximal Square.pdf rename to "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Maximal Square.pdf" diff --git "a/docs/Leetcode_Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" similarity index 100% rename from "docs/Leetcode_Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" rename to "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" diff --git a/docs/Leetcode_Solutions/Summarization/Range Sum Query 2D - Immutable.pdf "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Range Sum Query 2D - Immutable.pdf" similarity index 100% rename from docs/Leetcode_Solutions/Summarization/Range Sum Query 2D - Immutable.pdf rename to "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Range Sum Query 2D - Immutable.pdf" diff --git a/docs/Leetcode_Solutions/Summarization/Recusrion & BackTracking.md "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Recusrion & BackTracking.md" similarity index 100% rename from docs/Leetcode_Solutions/Summarization/Recusrion & BackTracking.md rename to "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/Recusrion & BackTracking.md" diff --git "a/docs/Leetcode_Solutions/Summarization/backtracking\346\200\235\350\267\257.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/backtracking\346\200\235\350\267\257.md" similarity index 100% rename from "docs/Leetcode_Solutions/Summarization/backtracking\346\200\235\350\267\257.md" rename to "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/backtracking\346\200\235\350\267\257.md" diff --git "a/docs/Leetcode_Solutions/Summarization/delete_node_in_a_linked_list\351\227\256\351\242\230.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/delete_node_in_a_linked_list\351\227\256\351\242\230.md" similarity index 100% rename from "docs/Leetcode_Solutions/Summarization/delete_node_in_a_linked_list\351\227\256\351\242\230.md" rename to "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/delete_node_in_a_linked_list\351\227\256\351\242\230.md" diff --git "a/docs/Leetcode_Solutions/Summarization/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" similarity index 100% rename from "docs/Leetcode_Solutions/Summarization/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" rename to "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" diff --git "a/docs/Leetcode_Solutions/Summarization/python\347\232\204\345\220\204\347\247\215pass.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/python\347\232\204\345\220\204\347\247\215pass.md" similarity index 100% rename from "docs/Leetcode_Solutions/Summarization/python\347\232\204\345\220\204\347\247\215pass.md" rename to "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/python\347\232\204\345\220\204\347\247\215pass.md" diff --git a/docs/Leetcode_Solutions/Summarization/slide_windows_template.md "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/slide_windows_template.md" similarity index 100% rename from docs/Leetcode_Solutions/Summarization/slide_windows_template.md rename to "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/slide_windows_template.md" diff --git "a/docs/Leetcode_Solutions/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" similarity index 100% rename from "docs/Leetcode_Solutions/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" rename to "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" diff --git "a/docs/Leetcode_Solutions/Summarization/\344\275\215\350\277\220\347\256\227.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\344\275\215\350\277\220\347\256\227.md" similarity index 100% rename from "docs/Leetcode_Solutions/Summarization/\344\275\215\350\277\220\347\256\227.md" rename to "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\344\275\215\350\277\220\347\256\227.md" diff --git "a/docs/Leetcode_Solutions/Summarization/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" similarity index 100% rename from "docs/Leetcode_Solutions/Summarization/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" rename to "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" diff --git "a/docs/Leetcode_Solutions/Summarization/\345\205\253\346\216\222\345\272\217.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\345\205\253\346\216\222\345\272\217.md" similarity index 100% rename from "docs/Leetcode_Solutions/Summarization/\345\205\253\346\216\222\345\272\217.md" rename to "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\345\205\253\346\216\222\345\272\217.md" diff --git "a/docs/Leetcode_Solutions/Summarization/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" similarity index 100% rename from "docs/Leetcode_Solutions/Summarization/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" rename to "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" diff --git "a/docs/Leetcode_Solutions/Summarization/\346\200\273\347\273\223.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\346\200\273\347\273\223.md" similarity index 100% rename from "docs/Leetcode_Solutions/Summarization/\346\200\273\347\273\223.md" rename to "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\346\200\273\347\273\223.md" diff --git "a/docs/Leetcode_Solutions/Summarization/\347\273\204\345\220\210\351\227\256\351\242\230.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\347\273\204\345\220\210\351\227\256\351\242\230.md" similarity index 100% rename from "docs/Leetcode_Solutions/Summarization/\347\273\204\345\220\210\351\227\256\351\242\230.md" rename to "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\347\273\204\345\220\210\351\227\256\351\242\230.md" diff --git "a/docs/Leetcode_Solutions/Summarization/\351\200\222\345\275\222_recursion.md" "b/docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\351\200\222\345\275\222_recursion.md" similarity index 100% rename from "docs/Leetcode_Solutions/Summarization/\351\200\222\345\275\222_recursion.md" rename to "docs/Leetcode_Solutions/C++/Summarization \344\270\212\345\215\2102.49.13/\351\200\222\345\275\222_recursion.md" diff --git "a/docs/Leetcode_Solutions/Java/001._two_sum \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/001._two_sum \344\270\212\345\215\2102.49.12.md" new file mode 100644 index 000000000..120db871d --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/001._two_sum \344\270\212\345\215\2102.49.12.md" @@ -0,0 +1,43 @@ +### 1. Two Sum + +题目: + + + +难度: + +Easy + + +思路 + +可以用O(n^2) loop + +但是也可以牺牲空间换取时间,异常聪明的AC解法 + +``` + 2 7 11 15 + 不存在 存在之中 +lookup {2:0} [0,1] +``` + +一但字典内有了这个 `target - 当前数字`,找到它的index和当前index一起返回。 + + +```python +class Solution(object): + def twoSum(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[int] + """ + lookup = {} + for i, num in enumerate(nums): + if target - num in lookup: + return [lookup[target - num],i] + lookup[num] = i + return [] +``` + + diff --git "a/docs/Leetcode_Solutions/Java/002._add_two_numbers \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/002._add_two_numbers \344\270\212\345\215\2102.49.12.md" new file mode 100644 index 000000000..7ead7c7c4 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/002._add_two_numbers \344\270\212\345\215\2102.49.12.md" @@ -0,0 +1,37 @@ +### 2. Add Two Numbers + +题目: + + + +难度 : Medium + + +跟plus One, add Binary 玩的同一种花样 + + +```python +class Solution(object): + def addTwoNumbers(self, l1, l2): + """ + :type l1: ListNode + :type l2: ListNode + :rtype: ListNode + """ + #easiest case + if l1 == None: + return l2 + if l2 == None: + return l1 + + if l1.val + l2.val < 10: + l3 = ListNode(l1.val + l2.val) + l3.next = self.addTwoNumbers(l1.next, l2.next) + + elif l1.val + l2.val >= 10: + l3 = ListNode(l1.val + l2.val - 10) + tmp = ListNode(1) + tmp.next = None + l3.next = self.addTwoNumbers(l1.next, self.addTwoNumbers(l2.next ,tmp)) + return l3 +``` diff --git "a/docs/Leetcode_Solutions/Java/003._longest_substring_without_repeating_characters \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/003._longest_substring_without_repeating_characters \344\270\212\345\215\2102.49.12.md" new file mode 100644 index 000000000..8b8ef18eb --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/003._longest_substring_without_repeating_characters \344\270\212\345\215\2102.49.12.md" @@ -0,0 +1,84 @@ +### 3. Longest Substring Without Repeating Characters + + +题目: + + + +难度: + +Medium + + + +思路 + +粗一看是dp,细一看是greedy + +我们先从第一个字符开始,只要碰到已经出现过的字符我们就必须从之前出现该字符的index开始重新往后看。 + +例如‘xyzxlkjh’,当看到第二个‘x’时我们就应该从y开始重新往后看了。 + +那么怎么判断字符已经出现过了呢?我们使用一个hashmap,将每一个已经阅读过的字符作为键,而它的值就是它在原字符串中的index,如果我们现在的字符不在hashmap里面我们就把它加进hashmap中去,因此,只要目前的这个字符在该hashmap中的值大于等于了这一轮字符串的首字符,就说明它已经出现过了,我们就将首字符的index加1,即从后一位又重新开始读,然后比较目前的子串长度与之前的最大长度,取大者。 + +### 程序变量解释 + +- l(字母L) 代表目前最大子串的长度 +- start 是这一轮未重复子串首字母的index +- maps 放置每一个字符的index,如果maps.get(s[i], -1)大于等于start的话,就说明字符重复了,此时就要重置 l(字母L) 和start的值了, + + + +```python +class Solution(object): + def lengthOfLongestSubstring(self, s): + """ + :type s: str + :rtype: int + + """ + l, start, n = 0, 0, len(s) + maps = {} + for i in range(n): + start = max(start, maps.get(s[i], -1)+1) + l = max(l, i - start+1) + maps[s[i]] = i + return l +``` + +```python +class Solution(object): + def lengthOfLongestSubstring(self, s): + """ + :type s: str + :rtype: int + """ + maps = {} + begin, end, counter, d = 0, 0, 0, 0 + while end < len(s): + if s[end] in maps: + maps[s[end]] += 1 + else: + maps[s[end]] = 1 + if maps[s[end]] > 1: + counter += 1 + end += 1 + while counter > 0: + if maps[s[begin]] > 1: + counter -= 1 + maps[s[begin]] -= 1 + begin += 1 + d = max(d, end - begin) + return d +``` + + + + + + +Author: Keqi Huang + +If you like it, please spread your support + +![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) diff --git "a/docs/Leetcode_Solutions/Java/004._median_of_two_sorted_arrays \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/004._median_of_two_sorted_arrays \344\270\212\345\215\2102.49.12.md" new file mode 100644 index 000000000..8ad14bbb6 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/004._median_of_two_sorted_arrays \344\270\212\345\215\2102.49.12.md" @@ -0,0 +1,260 @@ +### 4. Median of Two Sorted Arrays + +题目: + + + +难度: + +Hard + + +一看到的时候,觉得跟CLRS书上的一道习题类似 +求X[1....n] Y[1....n] 的 median + +习题 9.3-8 + + +Let X[1..n] and Y [1..n] be two arrays, each containing n numbers already in sorted order. Give an O(lg n)-time algorithn to find the median of all 2n elements in arrays X and Y . + + +> The median can be obtained recursively as follows. Pick the median of the sorted array A. This is just O(1) time as median is the n/2th element in the sorted array. Now compare the median of A, call is a∗ with median of B, b∗. We have two cases. + +- a∗ < b∗ : In this case, the elements in B[n/2 ···n] are also greater than a . So the median cannot lie in either A[1 · · · n/2 ] or B[n/2 · · · n]. So we can just throw these away and recursively + +- a∗ > b∗ : In this case, we can still throw away B[1··· n/2] and also A[ n/ · · · n] and solve a smaller subproblem recursively. + + +In either case, our subproblem size reduces by a factor of half and we spend only constant time to compare the medians of A and B. So the recurrence relation would be T (n) = T (n/2) + O(1) which has a solution T (n) = O(log n). + + +divide and conquer + +- 如果X[n/2] == Y[n/2],则找到,return +- 如果X[n/2] < Y[n/2],找X[n/2+1….n]和Y[1,2…n/2]之间 +- 否则找X[1..n/2]和Y[n/2…n] + + + + +但是实际上不同,这里需要考虑的问题更多: + +- 两个数组长度不一样 +- 并不是只找一个median,如果median有两个,需要算平均 + +思路 + +把它转化成经典的findKth问题 + +参考: + + +首先转成求A和B数组中第k小的数的问题, 然后用k/2在A和B中分别找。 + + +比如k = 6, 分别看A和B中的第3个数, 已知 A1 < A2 < A3 < A4 < A5... 和 B1 < B2 < B3 < B4 < B5..., 如果A3 <= B3, 那么第6小的数肯定不会是A1, A2, A3, 因为最多有两个数小于A1, 三个数小于A2, 四个数小于A3。 关键点是从 k/2 开始来找。 + + + +B3至少大于5个数, 所以第6小的数有可能是B1 (A1 < A2 < A3 < A4 < A5 < B1), 有可能是B2 (A1 < A2 < A3 < B1 < A4 < B2), 有可能是B3 (A1 < A2 < A3 < B1 < B2 < B3)。那就可以排除掉A1, A2, A3, 转成求A4, A5, ... B1, B2, B3, ...这些数中第3小的数的问题, k就被减半了。每次都假设A的元素个数少, pa = min(k/2, lenA)的结果可能导致k == 1或A空, 这两种情况都是终止条件。 + + +发问,为什么要从k/2开始寻找,依旧k = 6, 我可以比较A1 和 B5的关系么,可以这样做,但是明显的问题出现在如果A1 > B5,那么这个第6小的数应该存在于B6和A1中。 + +如果A1 < B5,这个时间可能性就很多了,比如A1 < A2 < A3 < A4 < B1 < B2,各种可能,无法排除元素,所以还是要从k/2开始寻找。 + +这个跟习题算法的区别是每次扔的东西明显少一些,但是k也在不断变小。下面的代码的时间复杂度是O(lg(m+n)) + + +```python +class Solution(object): + def findMedianSortedArrays(self, nums1, nums2): + """ + :type nums1: List[int] + :type nums2: List[int] + :rtype: float + """ + n = len(nums1) + len(nums2) + if n % 2 == 1: + return self.findKth(nums1, nums2, n / 2 + 1) + else: + smaller = self.findKth(nums1, nums2, n / 2) + bigger = self.findKth(nums1, nums2, n / 2 + 1) + return (smaller + bigger) / 2.0 + + + def findKth(self, A, B, k): + if len(A) == 0: + return B[k-1] + if len(B) == 0: + return A[k-1] + if k == 1 : + return min(A[0],B[0]) + + + a = A[ k / 2 - 1 ] if len(A) >= k / 2 else None + b = B[ k / 2 - 1 ] if len(B) >= k / 2 else None + + if b is None or (a is not None and a < b): + return self.findKth(A[k/2:], B, k - k/2) +   return self.findKth(A, B[k/2:],k - k/2) #这里要注意:因为 k/2 不一定 等于 (k - k/2), + + +``` +```python +#python3里面要用向下取整函数才可以AC,否则报错,TypeError: list indices must be integers or slices, not float + +from math import floor +class Solution: + def findMedianSortedArrays(self, nums1, nums2): + """ + :type nums1: List[int] + :type nums2: List[int] + :rtype: float + """ + n = len(nums1) + len(nums2) + if n % 2 == 1: + return self.findKth(nums1, nums2, floor(n/2)+1) + else: + smaller = self.findKth(nums1, nums2, floor(n/2)) + bigger = self.findKth(nums1, nums2, floor(n/2)+1) + return (smaller + bigger) / 2.0 + def findKth(self, A, B, k): + + if len(A) == 0: + return B[k-1] + if len(B) == 0: + return A[k-1] + if k == 1: + return min(A[0], B[0]) + a = A[floor(k/2)-1] if len(A) >= k/2 else None + b = B[floor(k/2)-1] if len(B) >= k/2 else None + if b is None or (a is not None and a < b): + return self.findKth(A[floor(k/2):], B, k - floor(k/2)) + else: + return self.findKth(A, B[floor(k/2):], k - floor(k/2)) +``` + +这个findKth的算法单独抽出来也是题目。 +### 寻找最小的k个数 + +题目描述 + +输入n个整数,输出其中最小的k个。 +分析与解法 + +## 解法一 + +要求一个序列中最小的k个数,按照惯有的思维方式,则是先对这个序列从小到大排序,然后输出前面的最小的k个数。 +至于选取什么的排序方法,我想你可能会第一时间想到快速排序(我们知道,快速排序平均所费时间为n*logn),然后再遍历序列中前k个元素输出即可。因此,总的时间复杂度:```O(n * log n)+O(k)=O(n * log n)```。 +## 解法二 + +咱们再进一步想想,题目没有要求最小的```k```个数有序,也没要求最后```n-k```个数有序。既然如此,就没有必要对所有元素进行排序。这时,咱们想到了用选择或交换排序,即: +1. 遍历```n```个数,把最先遍历到的k个数存入到大小为```k```的数组中,假设它们即是最小的```k```个数; +2. 对这```k```个数,利用选择或交换排序找到这k个元素中的最大值```kmax```(找最大值需要遍历这```k```个数,时间复杂度为```O(k))```; +3. 继续遍历剩余```n-k```个数。假设每一次遍历到的新的元素的值为```x```,把```x```与```kmax```比较:如果```x``` < ```kmax``` ,用```x```替换```kmax```,并回到第二步重新找出k个元素的数组中最大元素kmax‘;如果```x >= kmax```,则继续遍历不更新数组。 +每次遍历,更新或不更新数组的所用的时间为```O(k)```或```O(0)```。故整趟下来,时间复杂度为```n*O(k)=O(n*k)```。 +## 解法三 + +更好的办法是维护容量为k的最大堆,原理跟解法二的方法相似: +1. 用容量为```k```的最大堆存储最先遍历到的```k```个数,同样假设它们即是最小的```k```个数; +2. 堆中元素是有序的,令```k1 pivot ){ } + if( i < j ) + swap( &a[ i ], &a[ j ] ); + else + break; + } + //重置枢纽元 + swap( &a[ i ], &a[ right - 1 ] ); + + if( k <= i ) + QuickSelect( a, k, left, i - 1 ); + else if( k > i + 1 ) + QuickSelect( a, k, i + 1, right ); + } + else + InsertSort( a + left, right - left + 1 ); +} +``` +这个快速选择SELECT算法,类似快速排序的划分方法。N个数存储在数组S中,再从数组中选取“中位数的中位数”作为枢纽元X,把数组划分为Sa和Sb俩部分,Sa<=X<=Sb,如果要查找的k个元素小于Sa的元素个数,则返回Sa中较小的k个元素,否则返回Sa中所有元素+Sb中小的k-|Sa|个元素,这种解法在平均情况下能做到O(n)的复杂度。 +更进一步,《算法导论》第9章第9.3节介绍了一个最坏情况下亦为O(n)时间的SELECT算法,有兴趣的读者可以参看。 + +给定两个已经排序好的数组,求第k大的,算法有O(m+n).类似merge sort的原理。否则利用的就是之上提到的,利用已经有序的原理,然后每次丢。 + +之所以这里还有一个丢弃条件是b is None 丢A的一部分,是因为B的数组长度是有限的,这个时候很明显丢A的k/2是不影响的,因为无论B[-1]是如何大或者小,因为整个B的长度没有达到k/2小,所以丢掉的这部分最大的A[k/2-1]也不可能是第k个,因为即使整个B都比A[k/2-1]小,拼起来也不能使A[k/2-1]第k大,所以可以放心丢弃。 + + +这里是两个sorted list/array findKth,想到了类似的题目,如果给一个n个linked list,findKth,能想到的办法也只能是用heap吧,类似merge k sorted lists. + + +再写一个O(m+n)类似merge sort的也可以AC的代码 + +```python +class Solution(object): + def findMedianSortedArrays(self, nums1, nums2): + """ + :type nums1: List[int] + :type nums2: List[int] + :rtype: float + """ + def findKth(A, pa, B, pb, k): + res = 0 + m = 0 + while pa < len(A) and pb < len(B) and m < k: + if A[pa] < B[pb]: + res = A[pa] + m += 1 + pa += 1 + else: + res = B[pb] + m += 1 + pb += 1 + + while pa < len(A) and m < k: + res = A[pa] + pa += 1 + m += 1 + + + while pb < len(B) and m < k: + res = B[pb] + pb += 1 + m += 1 + return res + + n = len(nums1) + len(nums2) + if n % 2 == 1: + return findKth(nums1,0, nums2,0, n / 2 + 1) + else: + smaller = findKth(nums1,0, nums2,0, n / 2) + bigger = findKth(nums1,0, nums2,0, n / 2 + 1) + return (smaller + bigger) / 2.0 + +``` diff --git "a/docs/Leetcode_Solutions/Java/005._longest_palindromic_substring \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/005._longest_palindromic_substring \344\270\212\345\215\2102.49.12.md" new file mode 100644 index 000000000..14fd335f3 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/005._longest_palindromic_substring \344\270\212\345\215\2102.49.12.md" @@ -0,0 +1,241 @@ +### 5. Longest Palindromic Substring + +题目: + +https://leetcode.com/problems/longest-palindromic-substring/ + +难度: + +Medium + + + +思路0: + +暴力解法绝对不行 + +思路1: + +所以一个好的想法是 s 和 reverse(s) 共有的最长的 substring就是longest palindromic substring -> 问题转成求Longest common substring problem + +参见wikipedia + +,典型动归 + +LCSuff(S1...p, T1...q) = LCS(S1...p1, T1...q-1) if S[p] = T[q] else 0 + + + +伪码也有了,代码也有: + +https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Longest_common_substring#Python_2 + +这样也超时? +```python + class Solution(object): + def longestPalindrome(self, s): + """ + :type s: str + :rtype: str + """ + def lcs(s1, s2): + m = [[0] * (1 + len(s2)) for i in xrange(1 + len(s1))] + longest, x_longest = 0, 0 + for x in xrange(1, 1 + len(s1)): + for y in xrange(1, 1 + len(s2)): + if s1[x - 1] == s2[y - 1]: + m[x][y] = m[x - 1][y - 1] + 1 + if m[x][y] > longest: + longest = m[x][y] + x_longest = x + else: + m[x][y] = 0 + return s1[x_longest - longest: x_longest] + + return lcs(s, s[::-1]) +``` +因为以为这样s[::-1]已经很快了. + +这个方法是buggy的,看字符串abcxgcba,它reverse之后是abcgxcba,它们有公共字符串,但是这里面没有回文,修复方式是: + +we check if the substring’s indices are the same as the reversed substring’s original indices. If it is, then we attempt to update the longest palindrome found so far; if not, we skip this and find the next candidate. + +我觉得的修复方式这样么: + + 原本 翻转 + ABXYBA ABYXBA + + 求出来的substring indices是 0:2 但是这个s1[0:2] 和 s2[0:2]一样,所以不行 + 同理common substring indices还是s[4:6] 和s2[4:6]一样,不行 + + 而比如ABAD和 DABA + + substring indice 一个是0:3, 一个是1:4,这样就没问题 + + + + +思路2: + + + +依次把每一个字符当做回文字符串的中间字符,找到以该字符为中间字符的回文串的最大长度。分别对奇偶的情况进行讨论,接下来的关键就是对边界的把握,确保下标不要越界。当子串已经包含首字符或最后一个字符且此时还是回文串的时候,下标分别会向两边多移一位,需要补回来。 + +参考https://shenjie1993.gitbooks.io/leetcode-python/content/005%20Longest%20Palindromic%20Substring.html +```python + class Solution(object): + def longestPalindrome(self, s): + """ + :type s: str + :rtype: str + """ + n = len(s) + + # empty or one char + if n < 2: + return s + + # left index of the target substring + l = 0 + # right index of the target substring + r = 0 + # length of the longest palindromic substring for now + m = 0 + # length of the current substring + c = 0 + + # Whether the substring contains the first character or last character and is palindromic + b = True + for i in range(n): + # Odd situation + for j in range(min(n-i,i+1)): + if s[i-j] != s [i+j]: + b = False + break + else: + c = 2 * j + 1 + + if c > m : + l = i - j + 1 - b + r = i + j + b + m = c + b = True + + # Even situation + for j in range(min(n - i - 1, i + 1)): + if (s[i - j] != s[i + j + 1]): + b = False + break + else: + c = 2 * j + 2 + if (c > m): + l = i - j + 1 - b + r = i + j + 1 + b + m = c + b = True + return s[l:r] +``` +以上是参考版本,自己写的版本: +```python + class Solution(object): + def longestPalindrome(self, s): + """ + :type s: str + :rtype: str + """ + n = len(s) + + m,l,r = 0,0,0 + + for i in range(n): + # odd case + for j in range(min(i+1,n-i)): + if s[i-j] != s[i+j]: + break + if 2*j + 1 > m : + m = 2 * j + 1 + l = i-j + r = i+j + + + if i+1 < n and s[i] == s[i+1]: + for j in range(min(i+1,n-i-1)): + if s[i-j] != s[i+j+1]: + break + if 2 * j + 2 > m : + m = 2*j +2 + l = i-j + r = i+j+1 + + + return s[l:r+1] +``` + + +思路3: + +[Manacher算法](https://www.felix021.com/blog/read.php?2040) + +Manacher算法增加两个辅助变量id和mx,其中id表示最大回文子串中心的位置,mx则为id+P[id],也就是最大回文子串的边界。得到一个很重要的结论: + +- 如果mx > i,那么P[i] >= Min(P[2 * id - i], mx - i) . 为什么这样说呢,下面解释 + +下面,令j = 2*id - i,也就是说j是i关于id的对称点。 + +- 当 mx - i > P[j] 的时候,以S[j]为中心的回文子串包含在以S[id]为中心的回文子串中,由于i和j对称,以S[i]为中心的回文子串必然包含在以S[id]为中心的回文子串中,所以必有P[i] = P[j]; +![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher1.png) + +- 当 P[j] >= mx - i 的时候,以S[j]为中心的回文子串不一定完全包含于以S[id]为中心的回文子串中,但是基于对称性可知,下图中两个绿框所包围的部分是相同的,也就是说以S[i]为中心的回文子串,其向右至少会扩张到mx的位置,也就是说 P[i] >= mx - i。至于mx之后的部分是否对称,再具体匹配。 +![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher2.png) +所以P[i] >= Min(P[2 * id - i], mx - i),因为以j为中心的绘回文子串的左边界可能会比mx关于id的对称点要大,此时只能证明P[i]=P[2 * id - i] +- 此外,对于 mx <= i 的情况,因为无法对 P[i]做更多的假设,只能让P[i] = 1,然后再去匹配。 + +在下面的程序中我的P数组保存的是,以当前字符为回文子串中心时,该回文子串的长度(不包含当前字符自身) + + +简单地用一个小例子来解释:原字符串为'qacbcaw',一眼就可以看出来最大回文子串是'acbca', +下面是我做的图,累shi了! + +![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher3.jpg) + + + +所以最终代码中的max_i就是字符'b'所对应的index8,start的值就是(max_i - P[max_i] - 1) / 2 = 1,最终输出结果为s[1:6],即‘acbca’ + +```python +class Solution(object): + def longestPalindrome(self, s): + """ + :type s: str + :rtype: str + """ + def preProcess(s): + if not s: + return ['^', '&'] + T = ['^'] + for i in s: + T += ['#', i] + T += ['#', '$'] + return T + T = preProcess(s) + P = [0] * len(T) + id, mx = 0, 0 + for i in range(1, len(T)-1): + j = 2 * id - i + if mx > i: + P[i] = min(P[j], mx-i) + else: + P[i]= 0 + while T[i+P[i]+1] == T[i-P[i]-1]: + P[i] += 1 + if i + P[i] > mx: + id, mx = i, i + P[i] + max_i = P.index(max(P)) #保存的是当前最大回文子串中心位置的index + start = (max_i - P[max_i] - 1) / 2 + res = s[start:start+P[max_i]] + return res +``` +run code的时候结果会跟expected不一样,但是该input确实2个结果都可以,所以放心地submit吧 +还可以转到[647题](https://github.com/Lisanaaa/thinking_in_lc/blob/master/647._Palindromic_Substrings.md)去看一看,也可以用这个算法解 + + diff --git "a/docs/Leetcode_Solutions/Java/006._ZigZag_Conversion \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/006._ZigZag_Conversion \344\270\212\345\215\2102.49.12.md" new file mode 100644 index 000000000..cc7bcbe33 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/006._ZigZag_Conversion \344\270\212\345\215\2102.49.12.md" @@ -0,0 +1,67 @@ +### 6. ZigZag Conversion + +题目: + + + +难度: + +Medium + + +思路 + +参考大神[pharrellyhy](https://leetcode.com/problems/zigzag-conversion/discuss/3404/Python-O(n)-Solution-in-96ms-(99.43)?page=2)的思路, +纵向思维考虑,```index```从```0```开始,我们要一直***自增***直到```numRows-1```,此后又一直***自减***到```0```,重复执行。 +给个例子容易懂一些:```s = “abcdefghijklmn”```, ```numRows = 4``` +``` +a g m +b f h l n +c e i k +d j +``` +看明白了吗,下来上去,下来上去,zigzag + + +```python +class Solution(object): + def convert(self, s, numRows): + """ + :type s: str + :type numRows: int + :rtype: str + """ + if numRows == 1 or numRows >= len(s): + return s + + L = [''] * numRows + index, step = 0, 1 + + for x in s: + L[index] += x + if index == 0: + step = 1 + elif index == numRows -1: + step = -1 + index += step + + return ''.join(L) +``` +假设用我上面给的例子,并且在```L[index] += x```这一行后面打印出index, step, L的值, 输出结果如下: +``` +(0, 1, ['a', '', '', '']) +(1, 1, ['a', 'b', '', '']) +(2, 1, ['a', 'b', 'c', '']) +(3, 1, ['a', 'b', 'c', 'd']) +(2, -1, ['a', 'b', 'ce', 'd']) +(1, -1, ['a', 'bf', 'ce', 'd']) +(0, -1, ['ag', 'bf', 'ce', 'd']) +(1, 1, ['ag', 'bfh', 'ce', 'd']) +(2, 1, ['ag', 'bfh', 'cei', 'd']) +(3, 1, ['ag', 'bfh', 'cei', 'dj']) +(2, -1, ['ag', 'bfh', 'ceik', 'dj']) +(1, -1, ['ag', 'bfhl', 'ceik', 'dj']) +(0, -1, ['agm', 'bfhl', 'ceik', 'dj']) +(1, 1, ['agm', 'bfhln', 'ceik', 'dj']) +``` + diff --git "a/docs/Leetcode_Solutions/Java/007._Reverse_Integer \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/007._Reverse_Integer \344\270\212\345\215\2102.49.12.md" new file mode 100644 index 000000000..f4120c1ea --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/007._Reverse_Integer \344\270\212\345\215\2102.49.12.md" @@ -0,0 +1,65 @@ +### 7. Reverse Integer + +题目: + + + +难度: + +Easy + + +思路 + +翻转数字问题需要注意的就是溢出问题,为什么会存在溢出问题呢,我们知道int型的数值范围是 -2147483648~2147483647(负的2的31次方~2的31次方-1), 那么如果我们要翻转 1000000009 这个在范围内的数得到 9000000001,而翻转后的数就超过了范围。 + +#### 解法1: +如果输入的是负数,就递归调用原函数,参数变成-x即可 + + +```python +class Solution(object): + def reverse(self, x): + """ + :type x: int + :rtype: int + """ + if x < 0: + return -self.reverse(-x) + res = 0 + while x: + res = res * 10 + x % 10 + x /= 10 + return res if res <= 0x7fffffff else 0 +``` +#### 解法2: +按照参数正负号先将其转成字符串,然后再反转,根据是否溢出决定输出0还是反转结果 +```python +class Solution(object): + def reverse(self, x): + """ + :type x: int + :rtype: int + """ +        x = -int(str(x)[::-1][:-1]) if x < 0 else int(str(x)[::-1]) # [:-1]相当于把负号去掉 +        x = 0 if abs(x) > 0x7FFFFFFF else x + return x +``` +#### 解法3(StefanPochmann大神): +看这个解法前先看[backticks](https://docs.python.org/2.7/reference/expressions.html#string-conversions) + + +cmp函数在python3.x中用不了了,import operator用gt或者lt吧,或者回归if/else condition爸爸的怀抱吧! +```python +class Solution(object): + def reverse(self, x): + """ + :type x: int + :rtype: int + """ + s = cmp(x, 0) + r = int(`s * x`[::-1]) + return s * r * (r < 2 ** 31) +``` + + diff --git "a/docs/Leetcode_Solutions/Java/008._string_to_integer_(atoi) \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/008._string_to_integer_(atoi) \344\270\212\345\215\2102.49.12.md" new file mode 100644 index 000000000..4ff1cddcf --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/008._string_to_integer_(atoi) \344\270\212\345\215\2102.49.12.md" @@ -0,0 +1,53 @@ +### 8. String to Integer (atoi) + +题目: + + + +难度: +Medium + + +需要考虑比较多的边界条件&特殊情况 +1. 首先输入可能会有空格,所以先去掉空格 +2. 去掉空格后要考虑空字符串情况 +3. 字符串首位可能会有正负号,要考虑 +4. 开始转换成数字,题目说只要遇到非数字就可以break了 +5. 结果太大或者太小超过```int```限制就要返回特定数字 ```2147483647``` 或者 ```-2147483648``` +6. 根据之前的正负号结果返回对应数值 + + +```python +class Solution(object): + def myAtoi(self, str): + """ + :type str: str + :rtype: int + """ + str = str.strip() + strNum = 0 + if len(str) == 0: + return strNum + + positive = True + if str[0] == '+' or str[0] == '-': + if str[0] == '-': + positive = False + str = str[1:] + + for char in str: + if char >='0' and char <='9': + strNum = strNum * 10 + ord(char) - ord('0') + if char < '0' or char > '9': + break + + if strNum > 2147483647: + if positive == False: + return -2147483648 + else: + return 2147483647 + if not positive: + strNum = 0 - strNum + return strNum + +``` diff --git "a/docs/Leetcode_Solutions/Java/009._Palindrome_Number \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/009._Palindrome_Number \344\270\212\345\215\2102.49.12.md" new file mode 100644 index 000000000..8e14084f7 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/009._Palindrome_Number \344\270\212\345\215\2102.49.12.md" @@ -0,0 +1,31 @@ +### 9. Palindrome Number + +题目: + + +难度: +Medium + + +- 首先负数肯定不是palindrome +- 其次如果一个数字是一个正数,并且能被我0整除那它肯定也不是palindrome + +这样降低了复杂度 + +```python +class Solution(object): + def isPalindrome(self, x): + """ + :type x: int + :rtype: bool + """ + if x < 0 or (x != 0 and x % 10 == 0): + return False + rev, y = 0, x + while x > 0: + rev = rev * 10 + x % 10 + x /= 10 + return y == rev + +``` + diff --git "a/docs/Leetcode_Solutions/Java/010._regular_expression_matching \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/010._regular_expression_matching \344\270\212\345\215\2102.49.12.md" new file mode 100644 index 000000000..f3d51b109 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/010._regular_expression_matching \344\270\212\345\215\2102.49.12.md" @@ -0,0 +1,229 @@ +### 010. Regular Expression Matching + +题目: + + + +难度: + +Hard + + + + +先尝试暴力解法,难点就在 * 身上, * 不会单独出现,它一定是和前面一个字母或"."配成一对。看成一对后"X*",它的性质就是:要不匹配0个,要不匹配连续的“X”.所以尝试暴力解法的时候一个trick是从后往前匹配. + + + +暴力解法居然也能AC? + +是这样来分情况看得: + +- 如果s[i] = p[j] 或者 p[j]= . : 往前匹配一位 +- 如果p[j] = ' * ', 检查一下,如果这个时候p[j-1] = . 或者p[j-1] = s[i] ,那么就往前匹配,如果这样能匹配过,就return True, 否者我们忽略 ' X* ',这里注意里面的递推关系 +- 再处理一下边界状况: + - s已经匹配完了, 如果此时p还有,那么如果剩下的是 X* 这种可以过,所以检查 + - p匹配完毕,如果s还有那么报错 + +```python +class Solution(object): + def isMatch(self, s, p): + """ + :type s: str + :type p: str + :rtype: bool + """ + def helper(s, i, p, j): + if j == -1: + return i == -1 + if i == -1: + if p[j] != '*': + return False + return helper(s, i, p, j-2) + if p[j] == '*': + if p[j-1] == '.' or p[j-1] == s[i]: + if helper(s, i-1, p, j): + return True + return helper(s, i, p, j-2) + if p[j] == '.' or p[j] == s[i]: + return helper(s, i-1, p, j-1) + return False + + return helper(s, len(s)-1, p, len(p)-1) +``` + + + +---------- + +dp优化,感觉和edit distance很像。 DP优化待代码化,感觉学DP的一个重点除了递归学好以外,另一点是一定要会画表格。 + + +画一个表格来看一下状况 + +``` + c * a * b + 0 1 2 3 4 5 + 0 1 0 1 0 1 0 +a 1 0 0 0 1 1 0 +a 2 0 0 0 0 1 0 +b 3 0 0 0 0 0 1 + +``` + +这里有几个取巧/容易出问题的敌方,这里画的表用的是1-based string。一上来,做的事包括: + +- 初始化,空字符匹配:dp[0][0] =1 +- 第一行,c* 可以匹配空字符,c* a* 可以匹配空字符,p[j-1] != s[i],匹配空字符 +- 然后进入第二行再来看,实际上我们可以看到,如果没有碰到 * 匹配还是很朴素的,但是碰到 * : + - 1这个匹配可以从左侧传来,dp[i][j] = dp[i][j-1],that is 匹配 1个 + - 1 也可以有上方传来,这种情况是p[j-1] = s[i],匹配多个 dp[i][j] = dp[i-1][j] + - 1 这个匹配也可以从间隔一个的左侧传来,that is也可以有个性的匹配0个,如同匹配空字符一样dp[i][j] = dp[i][j-2],但是注意匹配0个实际上有两种状况,如果p[j-1]!=s[i],强制匹配0个,即使p[j-1] == s[i],我们也可以傲娇的用它来匹配0个。 + +再代码化一点: + +- s[i] == p[j] 或者 p[j] == '.' : dp[i][j] = dp[i-1][j-1] +- p[j] == '*': 然后分几种情况 + - p[j-1] != s[i] : dp[i][j] = dp[i][j-2] 匹配0个的状况 + - p[j-1] == s[i] or p[i-1] == '.': + - dp[i][j] = dp[i-1][j] 匹配多个s[i] + - dp[i][j] = dp[i][j-2] 匹配0个 + +AC代码,注意一下,因为上表为了表达方便,用的是1-based string系统,实际写代码的时候我们心里还是清楚这个string还是从0开始的,不过也可以尝试往前面添东西来方便。 + + +AC代码 + +```python +class Solution(object): + def isMatch(self, s, p): + """ + :type s: str + :type p: str + :rtype: bool + """ + m, n = len(s), len(p) + dp = [ [0 for i in range(n+1)] for j in range(m+1)] + + dp[0][0] = 1 + + # init the first line + for i in range(2,n+1): + if p[i-1] == '*': + dp[0][i] = dp[0][i-2] + + for i in range(1,m+1): + for j in range(1,n+1): + if p[j-1] == '*': + if p[j-2] != s[i-1] and p[j-2] != '.': + dp[i][j] = dp[i][j-2] + elif p[j-2] == s[i-1] or p[j-2] == '.': + dp[i][j] = dp[i-1][j] or dp[i][j-2] + + elif s[i-1] == p[j-1] or p[j-1] == '.': + dp[i][j] = dp[i-1][j-1] + + return dp[m][n] == 1 +``` + +写个测试案例 +```python +import unittest +class Solution(object): + def isMatch(self, s, p): + """ + :type s: str + :type p: str + :rtype: bool + """ + m, n = len(s), len(p) + dp = [ [0 for i in range(n+1)] for j in range(m+1)] + + dp[0][0] = 1 + + # init the first line + for i in range(2,n+1): + if p[i-1] == '*': + dp[0][i] = dp[0][i-2] + + for i in range(1,m+1): + for j in range(1,n+1): + if p[j-1] == '*': + if p[j-2] != s[i-1] and p[j-2] != '.': + dp[i][j] = dp[i][j-2] + elif p[j-2] == s[i-1] or p[j-2] == '.': + dp[i][j] = dp[i-1][j] or dp[i][j-2] + + elif s[i-1] == p[j-1] or p[j-1] == '.': + dp[i][j] = dp[i-1][j-1] + + return dp[m][n] == 1 + + +class TestSolution(unittest.TestCase): + def test_none_0(self): + s = "" + p = "" + self.assertTrue(Solution().isMatch(s, p)) + + def test_none_1(self): + s = "" + p = "a" + self.assertFalse(Solution().isMatch(s, p)) + + def test_no_symbol_equal(self): + s = "abcd" + p = "abcd" + self.assertTrue(Solution().isMatch(s, p)) + + def test_no_symbol_not_equal_0(self): + s = "abcd" + p = "efgh" + self.assertFalse(Solution().isMatch(s, p)) + + def test_no_symbol_not_equal_1(self): + s = "ab" + p = "abb" + self.assertFalse(Solution().isMatch(s, p)) + + def test_symbol_0(self): + s = "" + p = "a*" + self.assertTrue(Solution().isMatch(s, p)) + + def test_symbol_1(self): + s = "a" + p = "ab*" + self.assertTrue(Solution().isMatch(s, p)) + + def test_symbol_2(self): + # E.g. + # s a b b + # p 1 0 0 0 + # a 0 1 0 0 + # b 0 0 1 0 + # * 0 1 1 1 + s = "abb" + p = "ab*" + self.assertTrue(Solution().isMatch(s, p)) + + +if __name__ == "__main__": + unittest.main() + + + +输出: +........ + +Ran 8 tests in 0.001s + +OK +``` + +参考: + + +[动态规划](https://hk029.gitbooks.io/leetbook/content/动态规划/010.%20Regular%20Expression%20Matching/010.%20Regular%20Expression%20Matching.html) + + diff --git "a/docs/Leetcode_Solutions/Java/011._container_with_most_water \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/011._container_with_most_water \344\270\212\345\215\2102.49.12.md" new file mode 100644 index 000000000..4fac0f11c --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/011._container_with_most_water \344\270\212\345\215\2102.49.12.md" @@ -0,0 +1,112 @@ +### 11. Container With Most Water + + + +题目: + + + +难度: +Medium + +思路: + + +首先理解花了我一点时间,因为一开始写出来,给了一个例子: + +``` + +height = [3,2,1,3] +解是 9 + + +| | +| | | +| | | | +1 2 3 4 + + 一开始我的理解走偏的地方是这个9是如何得到的,因为根据最短板原理,明显不可能得到9啊,后来发现是·Find two lines, which together with x-axis forms a container, such that the container contains the most water. +``` + +所以代码写起来就简单了,AC无能,超时,时间复杂度O(N^2) + + +``` +class Solution(object): # 此法超时 + def maxArea(self, height): + """ + :type height: List[int] + :rtype: int + """ + n = len(height) + most_water = 0 + for i in range(n-1): + for j in range(i, n): + water = (j-i) * min(height[i], height[j]) + most_water = max(water, most_water) + return most_water + +``` + +题目给的tag是 two pointer,所以上边的策略肯定可以改进,改进的地方就不能是这个一次走一边,而可能是两边都要走。 + + + +参考 + + +思路: + +由于ai和aj (i=i, j'<=j) >= S(i,j)```,由于```j'-i' <= j-i```,必然要有```min(ai',aj')>=min(ai,aj)```才行。同样可以采用头尾双指针向中间移动: + +当```a(left) < a(right)```时,对任何```j S(left, j a(right)时,需要左移right`。 + +`而当a(left) = a(right)时,需要同时移动left和right。` + +思路整理: +left = 0, right = n-1 +1. a[left] < a[right], left++ +2. a[left] > a[right], right-- +3. a[left] = a[right], left++, right-- +终止条件:left >= right + +这个证明大快人心 + + +这样写也能过: + + +```python +class Solution(object): + def maxArea(self, height): + """ + :type height: List[int] + :rtype: int + """ + n = len(height) + left, right = 0, n-1 + most_water = 0 + while left <= right: + water = (right - left) * min(height[left], height[right]) + most_water = max(water, most_water) + if height[left] < height[right]: + left += 1 + elif height[left] > height[right]: + right -= 1 + else: + left += 1 + right -= 1 + return most_water + +``` diff --git "a/docs/Leetcode_Solutions/Java/012._Integer_to_Roman \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/012._Integer_to_Roman \344\270\212\345\215\2102.49.12.md" new file mode 100644 index 000000000..6177e3322 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/012._Integer_to_Roman \344\270\212\345\215\2102.49.12.md" @@ -0,0 +1,71 @@ +### 12. Integer to Roman + + +题目: + + + +难度: +Medium + +思路: + +首先我学习了一下罗马字母是如何表示的。然后感慨,这个阿拉伯数字是多么好的发明 + + + +上图 + + + +基于的是这些个Symbol: + +``` +1 5 10 50 100 500 1000 +I V X L C D M +``` + + + +罗马数字表示法见[Leetcode 013](https://github.com/Lisanaaa/thinking_in_lc/blob/master/013._Roman_to_Integer.md) + +这里有一个很棒的[算法](https://gist.github.com/imilu/00f32c61e50b7ca296f91e9d96d8e976) + +AC代码 + +```python +class Solution(object): + def intToRoman(self, num): + """ + :type num: int + :rtype: str + """ + lookup = { + 'M': 1000, + 'CM': 900, + 'D': 500, + 'CD': 400, + 'C': 100, + 'XC': 90, + 'L': 50, + 'XL': 40, + 'X': 10, + 'IX': 9, + 'V': 5, + 'IV': 4, + 'I': 1 + } + romanStr = '' + + for symbol, val in sorted(lookup.items(), key = lambda t: t[1], reverse = True): + while num >= val: + romanStr += symbol + num -= val + return romanStr +``` + + + + + +因为dict本身是无序的,这里做了一个排序的操作,否则可能会出现IIII这种状况。 diff --git "a/docs/Leetcode_Solutions/Java/013._Roman_to_Integer \344\270\212\345\215\2102.49.12.md" "b/docs/Leetcode_Solutions/Java/013._Roman_to_Integer \344\270\212\345\215\2102.49.12.md" new file mode 100644 index 000000000..4f1184b8a --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/013._Roman_to_Integer \344\270\212\345\215\2102.49.12.md" @@ -0,0 +1,82 @@ +### 13.Roman to Integer + + + +题目: + + +难度: +Easy + +思路: + + +``` +罗马数字是最古老的数字表示方式,比阿拉伯数组早2000多年,起源于罗马 + +罗马数字有如下符号: + +基本字符 I V X L C D M +对应阿拉伯数字 1 5 10 50 100 500 1000 + +计数规则: +- 相同的数字连写,所表示的数等于这些数字相加得到的数,例如:III = 3 +- 小的数字在大的数字右边,所表示的数等于这些数字相加得到的数,例如:VIII = 8 +- 小的数字,限于(I、X和C)在大的数字左边,所表示的数等于大数减去小数所得的数,例如:IV = 4,这条规则好像这题不管 +- 正常使用时,连续的数字重复不得超过三次 +- 在一个数的上面画横线,表示这个数扩大1000倍(本题只考虑3999以内的数,所以用不到这条规则) +- 从前向后遍历罗马数字,如果某个数比前一个数小,则加上该数。反之,减去前一个数的两倍然后加上该数 +``` + + + +integer to Roman 是 Medium,这个roman to integer是easy + + +- 从前往后扫描,用一个临时变量记录分段数字。 +- 如果当前比前一个大,说明这一段的值应当是这个值减去上一个值。比如IV = 5-1 =4; 否则,将当前值加入到结果中,然后开始下一段记录,比如VI = 5 + 1, II = 1 +1 + + +所以这也就是罗马数字的基础,感觉?这样才不会读串? + + + +AC代码 + +```python +class Solution(object): + def romanToInt(self, s): + """ + :type s: str + :rtype: int + """ + lookup = { + 'M': 1000, + 'D': 500, + 'C': 100, + 'L': 50, + 'X': 10, + 'V': 5, + 'I': 1 + } + res = 0 + for i in range(len(s)): + if i > 0 and lookup[s[i]] > lookup[s[i-1]]: + res = res + lookup[s[i]] - 2 * lookup[s[i-1]] + else: + res += lookup[s[i]] + return res +``` +或者甚至可以建立一个新函数用于取对应数值: +``` + def table(x): + return { + 'I':1, + 'V':5, + 'X':10, + 'L':50, + 'C':100, + 'D':500, + 'M':1000 + }.get(x) +``` diff --git "a/docs/Leetcode_Solutions/Java/014._longest_common_prefix \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/014._longest_common_prefix \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..a64997ef1 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/014._longest_common_prefix \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,77 @@ +### 14. Longest Common Prefix + + +题目: + + + +难度: + +Easy + + +思路: + +#### 解法1: +以一个小例子来解释,strs=['laa', 'lab', 'lac'], 如果存在LCP的话它肯定就在第一个字符串strs[0]中,并且LCP的长度肯定不会大于strs[0]的长度 +- 依次假设LCP长度为0到len(strs[0]),在每一轮循环中: +   +- 1. 只要strs中存在比当前长度i更短的string,立刻返回上一轮LCP,即strs[0][:i] + 2. 只要strs中存在当前index字符与LCP该index不相同的字符串,立刻返回上一轮LCP,即strs[0][:i] +- 如果一直没返回,说明strs[0]本身就是LCP,返回它 + + +``` +class Solution(object): + def longestCommonPrefix(self, strs): + """ + :type strs: List[str] + :rtype: str + """ + if not strs: + return "" + for i in range(len(strs[0])): + for str in strs: + if len(str) <= i or strs[0][i] != str[i]: + return strs[0][:i] + return strs[0] + +``` + +#### 解法2: +- dp[i]代表前i+1个字符串的最大前缀串, +- 如果第i+2个字符串不以dp[i]为前缀,就去掉dp[i]的最后一个字符再试一次 +- 都去完了那么dp[i+1]肯定就是空串了,也就等于这时候的dp[i],因为dp[i]的每个字符已经被去完了 +```python +class Solution(object): + def longestCommonPrefix(self, strs): + """ + :type strs: List[str] + :rtype: str + """ + if not strs: + return '' + dp = [strs[0]]*len(strs) + for i in range(1,len(strs)): + while not strs[i].startswith(dp[i-1]): + dp[i-1] = dp[i-1][:-1] + dp[i] = dp[i-1] + return dp[-1] +``` + + + + + + + +python无敌啊!!!有没有天理啊,手动滑稽😏😏😏😏!一行解法: +```python +class Solution(object): + def longestCommonPrefix(self, strs): + """ + :type strs: List[str] + :rtype: str + """ + return os.path.commonprefix(strs) +``` diff --git "a/docs/Leetcode_Solutions/Java/015._3sum \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/015._3sum \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..9f962f9e2 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/015._3sum \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,106 @@ +### 15. 3Sum + +题目: + + + +难度: + +Medium + + +第一想法,先把nums排序,用三个loop,无法AC + +``` +class Solution(object): + def threeSum(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + n = len(nums) + res = [] + nums.sort() + for i in range(n): + for j in range(i,n): + for k in range(j,n): + if nums[i] + nums[j] + nums[k] == 0 and j != i and k != j and k != i: + curRes = [nums[i],nums[j],nums[k]] + if curRes not in res: + res.append(curRes) + + return res +``` + + +然后查了一下2sum,用2sum的花样,因为要排除重复以及输出是按照从小到大的输出:但是还是超时 + + +``` +class Solution(object): # 此法也超时 +    def threeSum(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + def twoSum(nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[int] + """ + lookup = {} + for num in nums: + if target - num in lookup: + if (-target ,target - num, num) not in res: + res.append((-target ,target - num, num)) + lookup[num] = target - num + + n = len(nums) + nums.sort() + res = [] + for i in range(n): + twoSum(nums[i+1:], 0-nums[i]) + return [list(i) for i in res] +``` + + +谷歌看别人的代码,思路非常清晰的,运行起来比直接调用 Two Sum快. + +清晰的思路: + +- 排序 +- 固定左边,如果左边重复,继续 +- 左右弄边界,去重,针对不同的左右边界情况处理 + + +```python +class Solution(object): + def threeSum(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + n, res = len(nums), [] + nums.sort() + for i in range(n): + if i > 0 and nums[i] == nums[i-1]: # 因为i=0这个元素会直接往下执行 + continue + l, r = i+1, n-1 + while l < r: + tmp = nums[i] + nums[l] + nums[r] + if tmp == 0: + res.append([nums[i], nums[l], nums[r]]) + l += 1 + r -= 1 + while l < r and nums[l] == nums[l-1]: + l += 1 + while l < r and nums[r] == nums[r+1]: + r -= 1 + elif tmp > 0: + r -= 1 + else: + l += 1 + return res +``` + diff --git "a/docs/Leetcode_Solutions/Java/016._3sum_closest \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/016._3sum_closest \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..96b012ad2 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/016._3sum_closest \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,51 @@ +### 16. 3Sum Closest + +题目: + + + +难度: + +Medium + + +思路: +跟3 Sum一样,固定一个元素 + +用两个指针来循环 + + +```python +class Solution(object): + def threeSumClosest(self, nums, target): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + n, res, diff = len(nums), None, float('inf') + nums.sort() + for i in range(n): + if i > 0 and nums[i] == nums[i-1]: + continue + l, r = i+1, n-1 + while l < r: + tmp = nums[i] + nums[l] + nums[r] + if tmp == target: + return target + elif tmp > target: + r -= 1 + if abs(tmp-target) < diff: + diff = abs(tmp-target) + res = tmp + while l < r and nums[r] == nums[r+1]: + r -= 1 + else: + l += 1 + if abs(tmp-target) < diff: + diff = abs(tmp-target) + res = tmp + while l < r and nums[l] == nums[l-1]: + l += 1 + return res + +``` diff --git "a/docs/Leetcode_Solutions/Java/017._letter_combinations_of_a_phone_number \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/017._letter_combinations_of_a_phone_number \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..e951ad85d --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/017._letter_combinations_of_a_phone_number \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,51 @@ +### 17. Letter Combinations of a Phone Number + +题目: + + + + +难度: + +Medium + + +思路: + + - hash table一个,用来对应digit -> letter + - s用来记录结果,每次从digits里面去一个,然后寻找其可能的char,加到s中,digits长度减小 + - digits长度为0时候,把它加入结果 + + + +```python +class Solution(object): + def letterCombinations(self, digits): + """ + :type digits: str + :rtype: List[str] + """ + if digits == '': + return [] + self.res = [] + self.singleResult('', digits) + return self.res + + def singleResult(self, s, digits): + if len(digits) == 0: + self.res.append(s) + else: + mapx = {'2':['a','b','c'], + '3':['d','e','f'], + '4':['g','h','i'], + '5':['j','k','l'], + '6':['m','n','o'], + '7':['p','q','r','s'], + '8':['t','u','v'], + '9':['w','x','y','z']} + cur_digit = digits[0] + for c in mapx[cur_digit]: + self.singleResult(s+c, digits[1:]) +``` + + diff --git "a/docs/Leetcode_Solutions/Java/018._4sum \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/018._4sum \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..ba6862056 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/018._4sum \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,136 @@ +### 18. 4Sum + +题目: + + + +难度: + +Medium + + +思路: + +用3sum改 + +固定两个数,活动别的 + + +```python +class Solution(object): + def fourSum(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[List[int]] + """ + n = len(nums) + nums.sort() + res = [] + for i in range(n): + for j in range(i+1,n): + l, r = j+1, n-1 + while l < r: + temp = nums[i] + nums[j] + nums[l] + nums[r] + if temp == target: + if [nums[i],nums[j],nums[l],nums[r]] not in ans: + ans.append([nums[i],nums[j],nums[l],nums[r]]) + l += 1 + r -= 1 + elif temp > target: + r -= 1 + else: + l+=1 + return ans +``` + +可以通过加判断条件,前后数字相等可以直接跳过,使得算法更快 + + +```python +class Solution(object): + def fourSum(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[List[int]] + """ + n, res = len(nums), [] + nums.sort() + for i in range(n): + if i > 0 and nums[i] == nums[i-1]: # 因为i=0这个元素会直接往下执行 + continue + for j in range(i+1, n): + if j > i+1 and nums[j] == nums[j-1]: # 因为j=i+1这个元素会直接往下执行 + continue + l, r = j+1, n-1 + while l < r: + tmp = nums[i] + nums[j] + nums[l] + nums[r] + if tmp == target: + res.append([nums[i], nums[j], nums[l], nums[r]]) + l += 1 + r -= 1 + while l < r and nums[l] == nums[l-1]: + l += 1 + while l < r and nums[r] == nums[r+1]: + r -= 1 + elif tmp > target: + r -= 1 + else: + l += 1 + return res + +``` + +还可以再用一些判断来加速,比如枚举第一个数的时候 + +- nums[i] + nums[i + 1] + nums[i + 2] + nums[i + 3] > target: break +这是当前能凑齐的最小的4个数,比target后面都不用做了 +- nums[i] + nums[n – 3] + nums[n – 2] + nums[n – 1] < target: continue +这是当前凑齐的最大的4个数,比target小,说明第一个数不够大 + +参考 + + + + +```python +class Solution(object): + def fourSum(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[List[int]] + """ + n, res = len(nums), [] + nums.sort() + for i in range(n): + if i > 0 and nums[i] == nums[i-1]: # 因为i=0这个元素会直接往下执行 + continue + if i+3 <= n-1: + if nums[i] + nums[i+1] + nums[i+2] + nums[i+3] > target: + break + if i < n-3: + if nums[i] + nums[n-3] + nums[n-2] + nums[n-1] < target: + continue + for j in range(i+1, n): + if j > i+1 and nums[j] == nums[j-1]: # 因为j=i+1这个元素会直接往下执行 + continue + l, r = j+1, n-1 + while l < r: + tmp = nums[i] + nums[j] + nums[l] + nums[r] + if tmp == target: + res.append([nums[i], nums[j], nums[l], nums[r]]) + l += 1 + r -= 1 + while l < r and nums[l] == nums[l-1]: + l += 1 + while l < r and nums[r] == nums[r+1]: + r -= 1 + elif tmp > target: + r -= 1 + else: + l += 1 + return res + +``` diff --git "a/docs/Leetcode_Solutions/Java/019._remove_nth_node_from_end_of_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/019._remove_nth_node_from_end_of_list \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..5bdefb7a0 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/019._remove_nth_node_from_end_of_list \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,42 @@ +### 19. Remove Nth Node From End of List + +题目: + + + + +难度: Medium + + +AC击败了95.80%的Python用户,技巧 dummy head 和双指针。 + +切记最后要返回```dummy.next```而不是```head```,因为有这样一种情况,删掉节点后```linked list```空了,那返回```head```的话结果显然不同。如: +输入链表为```[1]```, ```n = 1```, 应该返回```None```而不是```[1]``` + +```python +class Solution(object): + def removeNthFromEnd(self, head, n): + """ + :type head: ListNode + :type n: int + :rtype: ListNode + """ + dummy = ListNode(-1) + dummy.next = head + p, q = dummy, dummy + + for i in range(n): + q = q.next + + while q.next: + p = p.next + q = q.next + + p.next = p.next.next + return dummy.next + +``` + + + + diff --git "a/docs/Leetcode_Solutions/Java/020._valid_parentheses \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/020._valid_parentheses \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..3b008ac91 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/020._valid_parentheses \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,52 @@ +### 20. Valid Parentheses + +题目: + + + + +难度: + +Easy + + +### 思路: + +因为一共只有三种状况"(" -> ")", "[" -> "]", "{" -> "}". + +一遇到左括号就入栈,右括号出栈,这样来寻找对应 + +需要检查几件事: + +- 出现右括号时stack里还有没有东西 +- 出stack时是否对应 +- 最终stack是否为空 + + + +```python +class Solution(object): + def isValid(self, s): + """ + :type s: str + :rtype: bool + """ + leftP = '([{' + rightP = ')]}' + stack = [] + for char in s: + if char in leftP: + stack.append(char) + if char in rightP: + if not stack: + return False + tmp = stack.pop() + if char == ')' and tmp != '(': + return False + if char == ']' and tmp != '[': + return False + if char == '}' and tmp != '{': + return False + return stack == [] +``` + diff --git "a/docs/Leetcode_Solutions/Java/021._merge_two_sorted_lists \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/021._merge_two_sorted_lists \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..40517726c --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/021._merge_two_sorted_lists \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,48 @@ +### 21. Merge Two Sorted Lists + +题目: + + + + +难度: Easy + + +同样适用dummy head + +```python +class Solution(object): + def mergeTwoLists(self, l1, l2): + """ + :type l1: ListNode + :type l2: ListNode + :rtype: ListNode + """ + if l1 == None: + return l2 + if l2 == None: + return l1 + + dummy = ListNode(-1) + cur = dummy + + while l1 and l2: + if l1.val < l2.val: + cur.next = l1 + l1 = l1.next + else: + cur.next = l2 + l2 = l2.next + cur = cur.next + + if l1: + cur.next = l1 + else: + cur.next = l2 + return dummy.next + +``` + + + + diff --git "a/docs/Leetcode_Solutions/Java/022._generate_parentheses \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/022._generate_parentheses \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..ae14c9089 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/022._generate_parentheses \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,88 @@ +### 22. Generate Parentheses + +题目: + + + +难度: + +Medium + + + + + +```python +class Solution(object): + def generateParenthesis(self,n): + """ + :type n: int + :rtype: List[str] + """ + self.res = [] + self.singleStr('', 0, 0, n) + return self.res + + def singleStr(self, s, left, right, n): + if left == n and right == n: + self.res.append(s) + if left < n: + self.singleStr(s + '(',left + 1, right,n) + if right < left: + self.singleStr(s + ')',left, right + 1, n) + +``` + + +非常牛逼的讲解,需要这样的人来给我们讲算法 + +####以Generate Parentheses为例,backtrack的题到底该怎么去思考? + + +所谓Backtracking都是这样的思路:在当前局面下,你有若干种选择。那么尝试每一种选择。如果已经发现某种选择肯定不行(因为违反了某些限定条件),就返回;如果某种选择试到最后发现是正确解,就将其加入解集 + +所以你思考递归题时,只要明确三点就行:选择 (Options),限制 (Restraints),结束条件 (Termination)。即“ORT原则”(这个是我自己编的) + + + + +对于这道题,在任何时刻,你都有两种选择: +1. 加左括号。 +2. 加右括号。 + +同时有以下限制: +1. 如果左括号已经用完了,则不能再加左括号了。 +2. 如果已经出现的右括号和左括号一样多,则不能再加右括号了。因为那样的话新加入的右括号一定无法匹配。 + +结束条件是: +左右括号都已经用完。 + +结束后的正确性: +左右括号用完以后,一定是正确解。因为1. 左右括号一样多,2. 每个右括号都一定有与之配对的左括号。因此一旦结束就可以加入解集(有时也可能出现结束以后不一定是正确解的情况,这时要多一步判断)。 + +递归函数传入参数: +限制和结束条件中有“用完”和“一样多”字样,因此你需要知道左右括号的数目。 +当然你还需要知道当前局面sublist和解集res。 + +因此,把上面的思路拼起来就是代码: + + if (左右括号都已用完) { + 加入解集,返回 + } + //否则开始试各种选择 + if (还有左括号可以用) { + 加一个左括号,继续递归 + } + if (右括号小于左括号) { + 加一个右括号,继续递归 + } + + + +你帖的那段代码逻辑中加了一条限制:“3. 是否还有右括号剩余。如有才加右括号”。这是合理的。不过对于这道题,如果满足限制1、2时,3一定自动满足,所以可以不判断3。 + +这题其实是最好的backtracking初学练习之一,因为ORT三者都非常简单明显。你不妨按上述思路再梳理一遍,还有问题的话再说。 + + + +以上文字来自 1point3arces的牛人解答 diff --git "a/docs/Leetcode_Solutions/Java/023._merge_k_sorted_lists \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/023._merge_k_sorted_lists \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..9cd97355c --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/023._merge_k_sorted_lists \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,46 @@ +### 23. Merge k Sorted Lists + + + +题目: + + + +难度: +Hard + +思路: + +看到思路有heap,similar question有ugly number|| -> 这个是用heapq来解决的 + +那么就用heap吧? heapsort + +最简单的做法是只要每个list里面还有node,就把他们扔到minheap里面去,然后再把minheap pop,一个一个node连起来,听起来时间复杂度和空间复杂度都蛮高的。 +直接merge必然是不好的,因为没有利用有序这个点,应该做的是每次取来一个,然后再把应该的下一个放入 + +写到这里瞬间明白和ugly number ii像的点了,甚至感觉跟find in sorted matrix ii也像 + +```python +class Solution(object): + def mergeKLists(self, lists): + """ + :type lists: List[ListNode] + :rtype: ListNode + """ + import heapq + h = [] + for lst_head in lists: + if lst_head: + heapq.heappush(h, (lst_head.val, lst_head)) + cur = ListNode(-1) + dummy = cur + while h: + smallest_node = heapq.heappop(h)[1] + cur.next = smallest_node + cur = cur.next + if smallest_node.next: + heapq.heappush(h, (smallest_node.next.val, smallest_node.next)) + return dummy.next +``` + +当然还像merge two sorted list diff --git "a/docs/Leetcode_Solutions/Java/024._swap_nodes_in_pairs \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/024._swap_nodes_in_pairs \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..907744af1 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/024._swap_nodes_in_pairs \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,35 @@ +###24. Swap Nodes in Pairs + +题目: + + + +难度 : Easy + +看了hint,用loop做,每个node关系要弄清楚 + + +``` + +class Solution(object): + def swapPairs(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + if head == None or head.next == None: + return head + + dummy = ListNode(-1) + dummy.next = head + + cur = dummy + + while cur.next and cur.next.next: + next_one, next_two, next_three = cur.next, cur.next.next, cur.next.next.next + cur.next = next_two + next_two.next = next_one + next_one.next = next_three + cur = next_one + return dummy.next +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/026._Remove_Duplicates_from_Sorted_Array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/026._Remove_Duplicates_from_Sorted_Array \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..23b43561c --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/026._Remove_Duplicates_from_Sorted_Array \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,73 @@ +### 26. Remove Duplicates from Sorted Array + + + +题目: + + + +难度: +Easy + +思路: +因为题目说了是```sorted array```,所以只需要不停判断当前位置值和下一位置是否相等,若相等则```pop掉当前值```,否则```move```到下一位置做重复判断 + + +```python +class Solution(object): + def removeDuplicates(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + i = 0 + while i < (len(nums) - 1): + if nums[i] == nums[i+1]: + nums.remove(nums[i]) + else: + i += 1 + return len(nums) +``` + + +这里代码用```while loop```而不用```for loop```是因为```pop```操作之后```nums```的长度会变化 + +如:```for i in range(len(nums)-1)```实际上固定了```range```里面的值了,不会二次判断 + +``` +n = 10 +for i in range(n): + n = n - 1 # 尽管n在变化 + print(i) + +上面这段代码的输出结果为: + +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +``` + + + + + + + + + + + + + + + + + + diff --git "a/docs/Leetcode_Solutions/Java/027._Remove_Element \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/027._Remove_Element \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..3603a5b3d --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/027._Remove_Element \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,25 @@ +### 27. Remove Element + + + +题目: + + + +难度: +Easy + +瞬秒 + +```python +class Solution(object): + def removeElement(self, nums, val): + """ + :type nums: List[int] + :type val: int + :rtype: int + """ + while val in nums: + nums.remove(val) + return len(nums) +``` diff --git "a/docs/Leetcode_Solutions/Java/028._implement_strstr() \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/028._implement_strstr() \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..cecd6a5e5 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/028._implement_strstr() \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,47 @@ +### 28. Implement strStr() + +题目: + + + + +难度: + +Easy + + +一行解法如何? +```python +class Solution(object): + def strStr(self, haystack, needle): + """ + :type haystack: str + :type needle: str + :rtype: int + """ + return haystack.find(needle) +``` + + +这个题目其实可以引来一大类,那就是关于string的算法,但是此处先用暴力算法来AC,然后再来细读/品味别的string相关算法吧。 + +虽然是暴力算法,但是也不容易写对啊 +```python +class Solution(object): + def strStr(self, haystack, needle): + """ + :type haystack: str + :type needle: str + :rtype: int + """ + if not needle: + return 0 + for i in xrange(len(haystack) - len(needle) + 1): + if haystack[i] == needle[0]: + j = 1 + while j < len(needle) and haystack[i+j] == needle[j]: + j += 1 + if j == len(needle): + return i + return -1 +``` diff --git "a/docs/Leetcode_Solutions/Java/030._Substring_with_Concatenation_of_All_Words \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/030._Substring_with_Concatenation_of_All_Words \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..0dd9eea26 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/030._Substring_with_Concatenation_of_All_Words \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,54 @@ +### 30. Substring with Concatenation of All Words + +题目: + + + +难度 : Hard + + + +```python +class Solution(object): + def findSubstring(self, s, words): + """ + :type s: str + :type words: List[str] + :rtype: List[int] + """ + res = [] + if len(words) == 0 or len(s) < len(words) * len(words[0]): + return res + n, m, wl = len(s), len(words), len(words[0]) + maps, cur_map = {}, {} + maps = collections.Counter(words) + for i in range(wl): + count, start, r = 0, i, i + while r + wl <= n: + string = s[r:r+wl] + if string in maps: + cur_map[string] = cur_map.get(string, 0) + 1 + if cur_map[string] <= maps[string]: + count += 1 + while cur_map[string] > maps[string]: + tmp = s[start:start+wl] + cur_map[tmp] -= 1 + start += wl + if cur_map[tmp] < maps[tmp]: + count -= 1 + if count == m: + res.append(start) + tmp = s[start:start+wl] + cur_map[tmp] -= 1 + start += wl + count -= 1 + else: + cur_map = {} + count = 0 + start = r + wl + r += wl + cur_map = {} + return res + + +``` diff --git "a/docs/Leetcode_Solutions/Java/031._next_permutation \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/031._next_permutation \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..69d810cb1 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/031._next_permutation \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,103 @@ + +### 31. Next Permutation + + +题目: + + + +难度: + +Medium + +参照wikipedia: + + + +首先,关于什么是全排列不做解释。如果一个排列为A,下一个排列为A_NEXT,那么A_NEXT一定与A有尽可能长的公共前缀。 + +看具体例子,一个排列为124653,如何找到它的下一个排列,因为下一个排列一定与124653有尽可能长的前缀,所以,脑洞大开一下,从后面往前看这个序列,如果后面的若干个数字有下一个排列,问题就得到了解决。 + +第一步:找最后面1个数字的下一个全排列。 + +124653,显然最后1个数字3不具有下一个全排列。 + +第二步:找最后面2个数字的下一个全排列。 + +124653,显然最后2个数字53不具有下一个全排列。 + +第三步:找最后面3个数字的下一个全排列。 + +124653,显然最后3个数字653不具有下一个全排列。 + + +------插曲:到这里相信大家已经看出来,如果一个序列是递减的,那么它不具有下一个排列。 + + +第四步:找最后面4个数字的下一个全排列。 + +124653,我们发现显然最后4个数字4653具有下一个全排列。因为它不是递减的,例如6453,5643这些排列都在4653的后面。 + + +我们总结上面的操作,并总结出重复上面操作的两种终止情况: + +1:从后向前比较相邻的两个元素,直到前一个元素小于后一个元素,停止 + +2:如果已经没有了前一个元素,则说明这个排列是递减的,所以这个排列是没有下一个排列的。 + + +124653这个排列终止情况是上面介绍的第一种,从后向前比较相邻的2个元素,遇到4<6的情况停止。 + +并且我们可以知道: + +1:124653和它的下一个排列的公共前缀为12(因为4653存在下一个排列,所以前面的数字12保持不变) + +2:4后面的元素是递减的(上面介绍的终止条件是前一个元素小于后一个元素,这里是4<6) + + +现在,我们开始考虑如何找到4653的下个排列,首先明确4后面的几个数字中至少有一个大于4. + +4肯定要和653这3个数字中大于4的数字中(6,5)的某一个进行交换。这里就是4要和6,5中的某一个交换,很明显要和5交换,如果找到这样的元素呢,因为我们知道4后面的元素是递减的,所以在653中从后面往前查找,找到第一个大于4的数字,这就是需要和4进行交换的数字。这里我们找到了5,交换之后得到的临时序列为5643.,交换后得到的643也是一个递减序列。 + + +所以得到的4653的下一个临时序列为5643,但是既然前面数字变大了(4653--->5643),后面的自然要变为升序才行,变换5643得到5346. + +所以124653的下一个序列为125346. + +看一个permutation,比如 + +125430 + + +- 从末尾开始,找到decreasing subsequence,5430,因为来调5330无论怎么调,都不可能有比它更小的,数也被自然的分成两部分(1,2) 和 (5,4,3,0) +- 下一步是找这个sequence里面第一个比前面部分,比2大的,3,也很容易理解,因为下一个必定是(1,3)打头 +- 交换 3和2 ,变成 (1,3,5,4,2,0),再把后面的部分reverse,得到后面部分可得到的最小的 + +这个时候,得到下一个sequence 130245 + +AC 代码 + +```python +class Solution(object): + def nextPermutation(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + if len(nums) <= 1: + return + idx = 0 + for i in range(len(nums)-1, 0, -1): + if nums[i] > nums[i-1]: # find first number which is smaller than it's after number + idx = i + break + if idx != 0: # if the number exist,which means that the nums not like{5,4,3,2,1} + for i in range(len(nums)-1, idx-1, -1): + if nums[i] > nums[idx-1]: + nums[i], nums[idx-1] = nums[idx-1], nums[i] + break + + nums[idx:] = nums[idx:][::-1] +``` + + diff --git "a/docs/Leetcode_Solutions/Java/033._search_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/033._search_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..c2e6eb74c --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/033._search_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,53 @@ +### 33. Search in Rotated Sorted Array + +题目: + + + +难度: +Medium + + +思路: + + + +下面是rotated-array图解, + +![rotated-array图解](https://github.com/Lisanaaa/myTODOs/blob/master/rotated-array12:09:2017.jpg) + + +所以直接用二分,O(lg(n)) +- 如果是mid,return mid +- 如果mid在绿色线上,就对绿色线进行二分 +- 如果mid在红色线上,就对红色线进行二分 +- 都没找到,return -1 + + +```python +class Solution(object): + def search(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: int + """ + l, r = 0, len(nums) - 1 + while l <= r: + mid = l + ((r - l) >> 2) + if nums[mid] == target: + return mid + if nums[mid] < nums[r]: + if nums[mid] < target <= nums[r]: + l = mid + 1 + else: + r = mid - 1 + else: + if nums[l] <= target < nums[mid]: + r = mid - 1 + else: + l = mid + 1 + return -1 +``` + + diff --git "a/docs/Leetcode_Solutions/Java/034._Search for a Range \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/034._Search for a Range \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..e5a7048b1 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/034._Search for a Range \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,77 @@ +### 34. Search for a Range + + + +题目: + + https://leetcode.com/problems/search-for-a-range/ + + + +难度 : Medium + + + +思路: + +二分法,先找```target```出现的左边界,判断是否有```target```后再判断右边界 + +- 找左边界:二分,找到一个```index``` + - 该```index```对应的值为```target``` + - 并且它左边```index-1```对应的值不是```target```(如果```index```为```0```则不需要判断此条件) + - 如果存在```index```就将其```append```到```res```中 +- 判断此时```res```是否为空,如果为空,说明压根不存在```target```,返回```[-1, -1]``` +- 找右边界:二分,找到一个```index```(但是此时用于二分循环的```l```可以保持不变,```r```重置为```len(nums)-1```,这样程序可以更快一些) + - 该```index```对应的值为```target``` + - 并且它右边```index+1```对应的值不是```target```(如果```index```为```len(nums)-1```则不需要判断此条件) + - 如果存在```index```就将其```append```到```res```中 + + + +AC 代码 + + + + +```python +class Solution(object): + def searchRange(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[int] + """ + if not nums : return [-1, -1] + + res = [] + l, r = 0, len(nums)-1 + # search for left bound + while l <= r: + mid = l + ((r - l) >> 2) + if nums[mid] == target and (mid == 0 or nums[mid-1] != target): + res.append(mid) + break + if nums[mid] < target: + l = mid + 1 + else: + r = mid - 1 + if not res: + return [-1, -1] + # search for right bound + r = len(nums)-1 + while l <= r: + mid = l + ((r - l) >> 2) + if nums[mid] == target and (mid == len(nums)-1 or nums[mid+1] != target): + res.append(mid) + break + if nums[mid] > target: + r = mid - 1 + else: + l = mid + 1 + return res +``` + + + + + diff --git "a/docs/Leetcode_Solutions/Java/035._search_insert_position \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/035._search_insert_position \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..1b14c88ce --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/035._search_insert_position \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,48 @@ +### 35. Search Insert Position + +题目: + + + +难度: + +Medium + +找到第一个比```target```大的值的```index```,如果没找到则返回```len(nums)```,但是代码中直接返回```i```值就行了 + +### 思路一:暴力 + +```python +class Solution(object): + def searchInsert(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: int + """ + i = 0 + while nums[i] < target: + i += 1 + if i == len(nums): + return i + return i +``` +### 思路二:二分 + +```python +class Solution(object): + def searchInsert(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: int + """ + left, right = 0, len(nums) - 1 + while left <= right: + mid = left + ((right - left) >> 2) + if nums[mid] < target: + left = mid + 1 + else: + right = mid - 1 + return left +``` diff --git "a/docs/Leetcode_Solutions/Java/038._Count_and_Say \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/038._Count_and_Say \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..c735ca188 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/038._Count_and_Say \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,98 @@ +### 38. Count and Say + +题目: + + + +难度: + +Easy + + +思路 + + +1. i代表字符下标,从0开始取值,也就是从第一个字符开始,因为要让i取到最后一个字符,并且后面还要进行i+1的操作,所以将原字符串随意加上一个‘*’字符防止溢出 +2. count代表此时已经连续相同的字符个数 +3. res代表最终输出的字符串 + +- 只要i下标对应的字符等于下一个字符,则sum和i都加1,无限循环 +- 如果i下标对应的字符不等于下一个字符了,则res应该加上str(sum)和i下标对应的那个字符,并且i加1,sum复原回0 + +``` +Examples of nth sequence + + 1. 1 + 2. 11 + 3. 21 + 4. 1211 + 5. 111221 + 6. 312211 + 7. 13112221 + 8. 1113213211 + 9. 31131211131221 + 10. 13211311123113112211 + +``` +```python +解法1 +class Solution(object): + def countAndSay(self, n): + """ + :type n: int + :rtype: str + """ + if n == 1: + return '1' + s = self.countAndSay(n-1) + '*' + res, count = '', 1 + for i in range(len(s)-1): + if s[i] == s[i+1]: + count += 1 + else: + res += str(count) + str(s[i]) + count = 1 + return res +``` +```python +解法2 +class Solution(object): + def countAndSay(self, n): + """ + :type n: int + :rtype: str + """ + res = '1' + for i in range(n-1): + res = ''.join([str(len(list(group))) + digit for digit, group in itertools.groupby(res)]) + return res +``` +详见[python进阶-ITERTOOLS模块小结](http://www.wklken.me/posts/2013/08/20/python-extra-itertools.html#itertoolsgroupbyiterable-key) + +```java +解法3 +class Solution { + public String countAndSay(int n) { + if(n == 1){ + return "1"; + } + //递归调用,然后对字符串处理 + String str = countAndSay(n-1) + "*";//为了str末尾的标记,方便循环读数 + char[] c = str.toCharArray(); + int count = 1; + String s = ""; + for(int i = 0; i < c.length - 1;i++){ + if(c[i] == c[i+1]){ + count++;//计数增加 + }else{ + s = s + count + c[i];//上面的*标记这里方便统一处理 + count = 1;//初始化 + } + } + return s; + + } +} +``` + + diff --git "a/docs/Leetcode_Solutions/Java/039._combination_sum \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/039._combination_sum \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..b5579c25d --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/039._combination_sum \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,64 @@ +### 39. Combination Sum + +题目: + + + + +难度: + +Medium + + +最初的思路: + + +``` +res = [] +def combSum(candidates, target, valueList): + if target == 0: + res.append(valueList) + for candidate in candidates: + if candidate > target: + return + combSum(candidates, target - candidate, valueList + [candidate] ) + +``` + + +问题在于,有重复: + +``` +combSum([2,3,6,7],7,[]) + +res +Out[9]: [[2, 2, 3], [2, 3, 2], [3, 2, 2], [7]] +``` + +然后看了hint,除[2, 2, 3] 和 [2, 3, 2]这种重复的方式是, 把candidates先sort,然后用index的方式来处理。 + + +所以最终的除重大法如下,根据hint做出: + +```python +class Solution(object): + def combinationSum(self, candidates, target): + """ + :type candidates: List[int] + :type target: int + :rtype: List[List[int]] + """ + def dfs(remain, combo, index): + if remain == 0: + res.append(combo) + return + for i in range(index, len(candidates)): + if candidates[i] > remain: + break + dfs(remain - candidates[i], combo + [candidates[i]], i) + candidates = list(set(candidates)) + candidates.sort() + res = [] + dfs(target, [], 0) + return res +``` diff --git "a/docs/Leetcode_Solutions/Java/040._combination_sum_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/040._combination_sum_ii \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..7abb448f3 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/040._combination_sum_ii \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,39 @@ +### 40. Combination Sum II + +题目: + + + + +难度: + +Medium + + +Combination Sum 已经AC,做了minor change. +- 现在不需要```set```化```candidates```了 +- 但是递归的时候```index```要从```i+1```开始了 +- 要判断```combo not in res```才```append```到```res```中去 + +```python +class Solution(object): + def combinationSum2(self, candidates, target): + """ + :type candidates: List[int] + :type target: int + :rtype: List[List[int]] + """ + def dfs(remain, combo, index): + if remain == 0 and combo not in res: + res.append(combo) + return + for i in range(index, len(candidates)): + if candidates[i] > remain: + break + dfs(remain - candidates[i], combo + [candidates[i]], i+1) + candidates.sort() + res = [] + dfs(target, [], 0) + return res + +``` diff --git "a/docs/Leetcode_Solutions/Java/042._trapping_rain_water \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/042._trapping_rain_water \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..17e03b9ea --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/042._trapping_rain_water \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,39 @@ +### 42. Trapping Rain Water + + + +题目: + + + +难度: +Hard + +思路: + +题目有几个特性可用,bar width = 1,然后第一个和最后一个是不能trap water,其次中间的部分能trap多少水是看`左右高度差较低的那个 - 本身的高度` + +The basic idea is that we set two pointers ```l``` and ```r``` to the left and right end of ```height```. Then we get the minimum height (```min_height```) of these pointers (similar to Container with Most Water due to the Leaking Bucket Effect) since the level of the water cannot be higher than it. Then we move the two pointers towards the center. If the coming level is less than ```min_height```, then it will hold some water. Fill the water until we meet some “barrier” (with height larger than ```min_height```) and update ```l``` and ```r``` to repeat this process in a new interval. + +AC代码: + + +```python +class Solution(object): + def trap(self, height): + """ + :type height: List[int] + :rtype: int + """ + l, r, water, min_height = 0, len(height) - 1, 0, 0 + while l < r: + min_height = min(height[l], height[r]) + while l < r and height[l] <= min_height: + water += min_height - height[l] + l += 1 + while l < r and height[r] <= min_height: + water += min_height - height[r] + r -= 1 + return water + +``` diff --git "a/docs/Leetcode_Solutions/Java/043._multiply_strings \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/043._multiply_strings \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..461c8ee91 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/043._multiply_strings \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,81 @@ +###43. Multiply Strings + +题目: + + + +难度: + +Medium + + +思路: + +虽然写了一堆similar problems,拿到的时候也算有思路,但是还是觉得很难写 + +参考了别人的思路: + +1. m位的数字乘以n位的数字的结果最大为m+n位: +999*99 < 1000*100 = 100000,最多为3+2 = 5位数。 +2. 先将字符串逆序便于从最低位开始计算。 + + +觉得这样写才是最容易理解的,看一个具体的🌰: + +``` +123 * 456 + + 123 + * 456 + + +先把每一位拿来相乘:得到 + 1 2 3 + 4 5 6 + + 6 12 18 + 5 10 15 + 4 8 12 + +这样在全部加起来和做进位处理 + 5 6 0 8 8 + + +``` + + + + +``` +class Solution(object): + def multiply(self, num1, num2): + """ + :type num1: str + :type num2: str + :rtype: str + """ + if num1 == '0' or num2 == '0' : return '0' + len1,len2 = len(num1),len(num2) + + num1 = num1[::-1] + num2 = num2[::-1] + # 99 * 99 < 10000, maxmize 4 digit + arr = [0 for i in range(len1 + len2)] + + for i in xrange(len1): + for j in xrange(len2): + arr[i+j] += (ord(num1[i]) - ord('0')) * (ord(num2[j]) - ord('0')) + + + res = [0 for i in range(len1 + len2)] + + for i in range(len(arr)): + res[i] = arr[i] % 10 + if i < len(arr) - 1: + arr[i+1] += arr[i]/10 + + i = len(arr)-1 + if res[i] == 0: + i -= 1 + return ''.join(str(j) for j in res[:i+1][::-1]) +``` diff --git "a/docs/Leetcode_Solutions/Java/044._wildcard_matching \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/044._wildcard_matching \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..e7d2755a0 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/044._wildcard_matching \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,44 @@ +###44. Wildcard Matching + +题目: + + + +难度: + +Hard + + + +做完Regular Expression Matching来做的这道题,按照DP思路run一下是超时,感觉是开心的,至少暂时没有报错了,有待优化,应该在dp的同时在贪心一下么。 + + + +超时代码 +``` +class Solution(object): + def isMatch(self, s, p): + """ + :type s: str + :type p: str + :rtype: bool + """ + m, n = len(s), len(p) + dp = [ [0 for i in xrange(n+1)] for j in xrange(m+1)] + + dp[0][0] = 1 + + # init the first line + for i in xrange(1,n+1): + if p[i-1] == '*': + dp[0][i] = dp[0][i-1] + + for i in xrange(1,m+1): + for j in xrange(1,n+1): + if p[j-1] == s[i-1] or p[j-1] == '?': + dp[i][j] = dp[i-1][j-1] + elif p[j-1] == '*': + dp[i][j] = dp[i][j-1] or dp[i-1][j] + + return dp[m][n] == 1 +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/045._Jump_Game_II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/045._Jump_Game_II \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..ae8caf9a1 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/045._Jump_Game_II \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,43 @@ +### 45. Jump Game II + +题目: + + + +难度: + +Easy + + +思路 + +greedy solution, the current jump is ```[i, cur_end]```, and the ```cur_farthest``` is the farthest point +that all of point in ```[i, cur_end]``` can reach, whenever ```cur_farthest``` is larger than the last point' index, +return current ```jump+1```; whenever ```i``` reaches ```cur_end```, update ```cur_end``` to ```current cur_farthest```. +- Time: O(log(n)) +- Space: O(1) + +```python +class Solution(object): + def jump(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + # Note You can assume that you can always reach the last index. + cur_end, cur_farthest, step, n = 0, 0, 0, len(nums) + for i in range(n-1): + cur_farthest = max(cur_farthest, i + nums[i]) + if cur_farthest >= n - 1: + step += 1 + break + if i == cur_end: + cur_end = cur_farthest + step += 1 + return step + + + +``` + + diff --git "a/docs/Leetcode_Solutions/Java/046._permutations \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/046._permutations \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..a79e7c67c --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/046._permutations \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,138 @@ +###46. Permutations + +题目: + + + +难度: + +Medium + + +复习了一下,自己写的容易理解版本: + +每次调一个放入现有 + +``` +class Solution(object): + def permute(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + self.result = [] + self.recPermute([],nums) + return self.result + + def recPermute(self, sofar, rest): + if rest == []: + self.result.append(sofar) + else: + for i in range(len(rest)): + next = sofar + [rest[i]] + remaining = rest[:i] + rest[i+1:] + self.recPermute(next, remaining) +``` + +交换 + + + +``` +class Solution(object): + def permute(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + result = [] + self.helper(nums,0,result) + return result + + def helper(self,nums,begin,result): + n = len(nums) + if begin == n: + tmp = nums[:] + result.append(tmp) + return + + for i in range(begin,n): + nums[begin], nums[i] = nums[i],nums[begin] + self.helper(nums,begin+1,result) + nums[begin],nums[i] = nums[i],nums[begin] + +``` + + + + + + +好像还有一个巧妙的版本 + + +``` +class Solution: + # @param num, a list of integer + # @return a list of lists of integers + def permute(self, num): + if len(num) == 0: return [] + if len(num) == 1: return [num] + res = [] + for i in range(len(num)): + for j in self.permute(num[:i] + num[i+1:]): + res.append([num[i]] + j) + return res +``` + + +更容易理解的写法: + + +``` +class Solution: + # @param num, a list of integer + # @return a list of lists of integers + def permute(self, num): + if len(num) == 0: return [] + if len(num) == 1: return [num] + res = [] + for i in range(len(num)): + x = num[i] + xs = num[:i] + num[i+1:] + for j in self.permute(xs): + res.append([x] + j) + return res + +``` + +就是一定要有递归的信念❤️ + + + +还有介绍的基本无memory使用的算法: + + +``` +class Solution: + # @param num, a list of integer + # @return a list of lists of integers + def permute(self, num): + if len(num) == 0: yield [] + if len(num) == 1: yield [num] + res = [] + for i in range(len(num)): + x = num[i] + xs = num[:i] + num[i+1:] + for j in self.permute(xs): + res.append([x] + j) + yield res + +``` + +但是这个yield只是生产generator,要看结果还是要用for in的。 + + + + + diff --git "a/docs/Leetcode_Solutions/Java/047._permutations_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/047._permutations_ii \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..68a3ead84 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/047._permutations_ii \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,42 @@ +###47. Permutations II + +题目: + + + +难度: + +Medium + + +虽然想到了,但是没有靠自己的力量implement出来,还是比较容易了理解的,因为如果有重复的,那么处理只用处理第一个,就只用把第一个提出来,剩下的管它怎么permute。 + +第二次碰到这个元素就不要再用它了,因为可能出现的组合已经有了。 + + +看代码: +base case 处理掉 +sort一下,设置一个prevNum变量 + +如果碰到过了,就continue,去继续执行下一个 + + +``` +class Solution(object): + def permuteUnique(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + if len(nums) == 0: return [] + if len(nums) == 1: return [nums] + res = [] + nums.sort() + for i in range(len(nums)): + if i > 0 and nums[i] == nums[i-1]: continue + for j in self.permuteUnique(nums[:i] + nums[i+1:]): + res.append([nums[i]] + j) + return res +``` + + diff --git "a/docs/Leetcode_Solutions/Java/048._rotate_image \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/048._rotate_image \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..5c727dd7c --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/048._rotate_image \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,105 @@ +### 48. Rotate Image + + +题目: + + + +难度: + +Medium + + + + +思路一: + + +先将矩阵上下翻转,然后将矩阵中心对称翻转,即可实现顺时针90度旋转。 + + +- 上下翻转规律 [i][:] --> [n-1-i][:] +- 对角线变换的规律是 [i][j] --> [j][i] + + +例如: +``` +1 1 1 3 3 3 3 2 1 +2 2 2 -> 2 2 2 -> 3 2 1 +3 3 3 1 1 1 3 2 1 +``` + + +```python +class Solution(object): + def rotate(self, matrix): + """ + :type matrix: List[List[int]] + :rtype: void Do not return anything, modify matrix in-place instead. + """ + n = len(matrix) + # 上下翻转 + for i in range(n/2): + matrix[i], matrix[n-1-i] = matrix[n-1-i], matrix[i] + # 主对角线翻转 + for i in range(n): + for j in range(i+1,n): + matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j] +``` + + +思路二: + +参考这里 + + + +找规律,一次完成四个数的该有的变换 + +``` + +1 2 3 4 5 + +6 7 8 9 10 + +11 12 13 14 15 + +16 17 18 19 20 + +21 22 23 24 25 + +``` + +在思路一的解法下观察得出,每个元素的变换是 [x][y] -> [n-1-x][y] -> [y][n-1-x] -> [n-1-y][x] + + +```python +class Solution(object): + def rotate(self, matrix): + """ + :type matrix: List[List[int]] + :rtype: void Do not return anything, modify matrix in-place instead. + """ + n = len(matrix) + for i in range(n/2): + for j in range(n-n/2): + matrix[i][j], matrix[~j][i], matrix[~i][~j], matrix[j][~i] = \ + matrix[~j][i], matrix[~i][~j], matrix[j][~i], matrix[i][j] +``` +这里的```[~i]``` 意思就是 ```[n-1-i]``` + +思路三: + +直接用zip函数,一行, 😂 + +```python +class Solution: + def rotate(self, A): + A[:] = zip(*A[::-1]) + # A[:] = map(list, zip(*A[::-1])) +``` + + + + + diff --git "a/docs/Leetcode_Solutions/Java/049._group_anagrams_python \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/049._group_anagrams_python \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..1371afdb4 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/049._group_anagrams_python \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,28 @@ +### 49. Group Anagrams python + +题目: + + + +难度 : Medium + +python大法好 + + +```python +class Solution(object): + def groupAnagrams(self, strs): + """ + :type strs: List[str] + :rtype: List[List[str]] + """ + mapx = {} + for i in strs: + x = ''.join(sorted(list(i))) + if x in mapx: + mapx[x].append(i) + else: + mapx[x] = [i] + return mapx.values() + +``` diff --git "a/docs/Leetcode_Solutions/Java/050._pow(x,_n) \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/050._pow(x,_n) \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..697863e2f --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/050._pow(x,_n) \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,48 @@ +### 50. Pow(x, n) + +题目: + + + +难度: + +Medium + + +Recursive + +```python +class Solution(object): + def myPow(self, x, n): + """ + :type x: float + :type n: int + :rtype: float + """ + if n == 0: + return 1 + if n < 0: + return 1 / self.myPow(x, -n) + if n % 2 == 0: + return self.myPow(x*x, n/2) + else: + return x * self.myPow(x*x, n/2) + +``` +iterative + + +```python +class Solution: + def myPow(self, x, n): + if n < 0: + x = 1 / x + n = -n + pow = 1 + while n: + if n & 1: + pow *= x + x *= x + n >>= 1 + return pow +``` diff --git "a/docs/Leetcode_Solutions/Java/051._n-queens \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/051._n-queens \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..3e7c197c3 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/051._n-queens \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,38 @@ +### 51. N-Queens + +题目: + + + +难度: +Hard + +八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当n = 1或n ≥ 4时问题有解[1]。 + +对于任意(x,y),如果要让新的点和它不能处于同一条横行、纵行或斜线上,则新点(p,q)必须要满足p+q != x+y 和p-q!= x-y, 前者针对左下右上斜线,后者针对左上右下斜线,两者同时都保证了不在同一条横行和纵行上。 + +代码中变量的含义: +- col_per_row: 每一行皇后的column位置组成的列表 +- cur_row:目前正在判断的row的index +- xy_diff:所有x-y组成的列表 +- xy_sum:所有x+y组成的列表 + +```python +class Solution(object): + def solveNQueens(self, n): + """ + :type n: int + :rtype: List[List[str]] + """ + def dfs(col_per_row, xy_diff, xy_sum): + cur_row = len(col_per_row) + if cur_row == n: + ress.append(col_per_row) + for col in range(n): + if col not in col_per_row and cur_row-col not in xy_diff and cur_row+col not in xy_sum: + dfs(col_per_row+[col], xy_diff+[cur_row-col], xy_sum+[cur_row+col]) + ress = [] + dfs([], [], []) + return [['.'*i + 'Q' + '.'*(n-i-1) for i in res] for res in ress] + +``` diff --git "a/docs/Leetcode_Solutions/Java/052._n-queens_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/052._n-queens_ii \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..1d65adc16 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/052._n-queens_ii \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,46 @@ +### 52. N-Queens II + +题目: + + + +难度: +Hard + +思路参见recursion & backtracking + +n queens还是属于比较难的,需要花时间吃透的问题 + +八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当n = 1或n ≥ 4时问题有解[1]。 + +对于任意(x,y),如果要让新的点和它不能处于同一条横行、纵行或斜线上,则新点(p,q)必须要满足p+q != x+y 和p-q!= x-y, 前者针对左下右上斜线,后者针对左上右下斜线,两者同时都保证了不在同一条横行和纵行上。 + +代码中变量的含义: +- col_per_row: 每一行皇后的column位置组成的列表 +- cur_row:目前正在判断的row的index +- xy_diff:所有x-y组成的列表 +- xy_sum:所有x+y组成的列表 + +```python +class Solution(object): + def totalNQueens(self, n): + """ + :type n: int + :rtype: int + """ + def dfs(col_per_row, xy_diff, xy_sum): + cur_row = len(col_per_row) + if cur_row == n: + ress.append(col_per_row) + for col in range(n): + if col not in col_per_row and cur_row-col not in xy_diff and cur_row+col not in xy_sum: + dfs(col_per_row+[col], xy_diff+[cur_row-col], xy_sum+[cur_row+col]) + ress = [] + dfs([], [], []) + return len(ress) + +``` + + + + diff --git "a/docs/Leetcode_Solutions/Java/053._maximum_subarray \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/053._maximum_subarray \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..e71c549d1 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/053._maximum_subarray \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,146 @@ +### 53. Maximum Subarray + +题目: + + + +难度: +Medium + + +思路一: + +O(N^2) + +从i开始,计算i到n,存比较大的sum,会超时 + +``` +class Solution(object): + def maxSubArray(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + n = len(nums) + m = float('-inf') + for i in range(n): + s = 0 + for j in range(i,n): + s = s + nums[j] + m = max(m,s) + return m +``` + +思路二: + +动归 + +ms(i) = max(ms[i-1]+ a[i],a[i]) + +到i处的最大值两个可能,一个是加上a[i],另一个从a[i]起头,重新开始。可以AC + +```python +class Solution(object): + def maxSubArray(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + n = len(nums) + maxSum = [nums[0] for i in range(n)] + for i in range(1,n): + maxSum[i] = max(maxSum[i-1] + nums[i], nums[i]) + return max(maxSum) +``` + + +思路三: + + +Kadane’s Algorithm wikipedia可以查到,然后一般的是负的可以还回0,这里需要稍作修改,参考 + + + + +``` +start: + max_so_far = a[0] + max_ending_here = a[0] + +loop i= 1 to n + (i) max_end_here = Max(arrA[i], max_end_here+a[i]); + (ii) max_so_far = Max(max_so_far,max_end_here); + +return max_so_far + +``` + +AC代码: + +```python +class Solution(object): + def maxSubArray(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + n = len(nums) + maxSum , maxEnd = nums[0], nums[0] + + for i in range(1,n): + maxEnd = max(nums[i],maxEnd + nums[i]) + maxSum = max(maxEnd,maxSum) + return maxSum +``` + + +思路四: + + + +参见clrs 第71页,用divide and conquer,有伪码 + + +最大的subarray sum有三个可能,左半段或者右半段,或者跨越左右半段, + +速度比较慢,AC代码,复杂度O(NlogN) + +``` +class Solution(object): + def maxSubArray(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + def find_max_crossing_subarray(nums, low, mid, high): + left_sum = float('-inf') + sum = 0 + for i in xrange(mid,low-1,-1): + sum = sum + nums[i] + if sum > left_sum: + left_sum = sum + + right_sum = float('-inf') + sum = 0 + for j in range(mid+1,high+1): + sum = sum + nums[j] + if sum > right_sum: + right_sum = sum + + return left_sum + right_sum + + def find_max_subarray(nums,low,high): + if low == high: + return nums[low] + else: + mid = (low + high) / 2 + left_sum = find_max_subarray(nums, low, mid) + right_sum = find_max_subarray(nums,mid+1,high) + cross_sum = find_max_crossing_subarray(nums,low,mid,high) + # print left_sum, right_sum, cross_sum + # print mid, low, high + return max(left_sum, right_sum, cross_sum) + + return find_max_subarray(nums, 0, len(nums)-1) + +``` diff --git "a/docs/Leetcode_Solutions/Java/054._spiral_matrix \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/054._spiral_matrix \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..ca2219ec1 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/054._spiral_matrix \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,139 @@ +### 54. Spiral Matrix + +题目: + + + +难度: +Medium + + +参考别人的代码,一开始觉得很有递归性,根据奇偶不同来写,递归太难写。 + +然后想到了loop,再想,可能有更优trick,事实证明并没有。 + +用四个变量来控制边界,然后因为方向总是:→↓←↑ 左右下上 + + + + +```python +class Solution(object): + def spiralOrder(self, matrix): + """ + :type matrix: List[List[int]] + :rtype: List[int] + """ + if matrix == [] : return [] + res = [] + maxUp = maxLeft = 0 + maxDown = len(matrix) - 1 + maxRight = len(matrix[0]) - 1 + direction = 0 # 0 go right, 1 go down, 2 go left, 3 up + while True: + if direction == 0: #go right + for i in range(maxLeft, maxRight+1): + res.append(matrix[maxUp][i]) + maxUp += 1 + elif direction == 1: # go down + for i in range(maxUp, maxDown+1): + res.append(matrix[i][maxRight]) + maxRight -= 1 + elif direction == 2: # go left + for i in reversed(range(maxLeft, maxRight+1)): + res.append(matrix[maxDown][i]) + maxDown -= 1 + else: #go up + for i in reversed(range(maxUp, maxDown+1)): + res.append(matrix[i][maxLeft]) + maxLeft +=1 + if maxUp > maxDown or maxLeft > maxRight: + return res + direction = (direction + 1 ) % 4 +``` + +以上的写法非常精妙,看看我自己用同样的思路写的|||| + +```python +class Solution(object): + def spiralOrder(self, matrix): + """ + :type matrix: List[List[int]] + :rtype: List[int] + """ + if len(matrix) == 0 : return [] + + left = 0 + up = 0 + down = len(matrix) - 1 + right = len(matrix[0]) -1 + + # 0 -> right, 1 -> down, 2-> left, 3 -> up + direction = 0 + + # start location + x, y = 0,0 + res = [] + + while True: + if left > right or up > down: + return res + + if direction == 0 : + while y <= right: + res.append(matrix[up][y]) + y += 1 + up += 1 + x = up + direction = 1 + continue + + if direction == 1: + while x <= down: + res.append(matrix[x][right]) + x += 1 + right -= 1 + y = right + direction = 2 + continue + + if direction == 2: + while y >= left: + res.append(matrix[down][y]) + y -= 1 + down -= 1 + x = down + direction = 3 + continue + + if direction == 3: + while x >= up: + res.append(matrix[x][left]) + x -= 1 + left += 1 + y = left + direction = 0 + continue + +``` + +明显别人的代码写的更精妙,因为这里两个boundary都很明确,所以用for in range就能很好的解决问题了. + + + + + +----------- + +最后放一个无敌一行,怕你看完不想看上面的代码了 +```python +class Solution(object): + def spiralOrder(self, matrix): + """ + :type matrix: List[List[int]] + :rtype: List[int] + """ + return matrix and list(matrix.pop(0)) + self.spiralOrder(zip(*matrix)[::-1]) +``` + +oh, my god! diff --git "a/docs/Leetcode_Solutions/Java/055._jump_game \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/055._jump_game \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..1de4f1d02 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/055._jump_game \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,39 @@ +### 55. Jump Game + +题目: + + + +难度: + +Medium + + +问题出现在一旦有0,而且这个0是不可跨过的那么无解,无法达到 + + +看了hint,根本不用这个数组,直接用一个数来记录可达最远距离,非常巧妙 + + +```python +class Solution(object): + def canJump(self, nums): + """ + :type nums: List[int] + :rtype: bool + """ + if not nums: + return True + if len(nums) == 1: + return True + n = len(nums) + idx, reach = 0, 0 + while idx < n-1 and idx <= reach: # idx <= reach是为了处理nums[idx] == 0的情况,若idx>reach说明已经失败了 + reach = max(reach, idx+nums[idx]) + idx += 1 + return reach >= n-1 +``` + +idx记录当前loop位置,reach记录当前可到位置 + +注意这里的while循环的条件是 `idx < n-1 and idx <= reach`,之所以加上 `idx <= reach` 是因为如果```idx > reach```说明```idx```层不可达,其实也可以直接terminate. diff --git "a/docs/Leetcode_Solutions/Java/056._Merge_Intervals \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/056._Merge_Intervals \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..1f5ab7aa6 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/056._Merge_Intervals \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,31 @@ +### 56. Merge Intervals + +题目: + + + +难度: + +Medium + + +Just go through the intervals sorted by start coordinate and +either combine the current interval with the previous one if they overlap, or add it to the output by itself if they don’t. + +```python +class Solution(object): + def merge(self, intervals): + """ + :type intervals: List[Interval] + :rtype: List[Interval] + """ + res = [] + for i in sorted(intervals, key = lambda i: i.start): + if res and i.start <= res[-1].end: + res[-1].end = max(i.end, res[-1].end) + else: + res.append(i) + return res +``` + + diff --git "a/docs/Leetcode_Solutions/Java/058._length_of_last_word \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/058._length_of_last_word \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..b9ec0160c --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/058._length_of_last_word \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,45 @@ +### 58. Length of Last Word + +题目: + + + +难度 : Easy + +我的解法: + +```python +class Solution(object): + def lengthOfLastWord(self, s): + """ + :type s: str + :rtype: int + """ + s = s[::-1].strip() + return s.find(' ') if s.find(' ') != -1 else len(s) +``` +作弊式做法 + +```python +class Solution(object): + def lengthOfLastWord(self, s): + """ + :type s: str + :rtype: int + """ + lst = s.split() + if len(lst) >= 1: + return len(lst[-1]) + return 0 +``` +split()方法最低可以分0组,split(' ')最低可以分1组 +```python +一行解法: +class Solution(object): + def lengthOfLastWord(self, s): + """ + :type s: str + :rtype: int + """ + return len(s.strip().split(" ")[-1]) +``` diff --git "a/docs/Leetcode_Solutions/Java/059._spiral_matrix_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/059._spiral_matrix_ii \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..42ae52662 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/059._spiral_matrix_ii \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,67 @@ +### 59. Spiral Matrix II + +题目: + + + +难度: +Medium + +和Spiral Matrix的思路基本一致 + +也许还有待挖掘trick + + +```python +class Solution(object): + def generateMatrix(self,n): + """ + :type n: int + :rtype: List[List[int]] + """ + curNum = 0 + matrix = [[0 for i in range(n)] for j in range(n)] + maxUp = maxLeft = 0 + maxDown = maxRight = n - 1 + direction = 0 + while True: + if direction == 0: #go right + for i in range(maxLeft, maxRight+1): + curNum += 1 + matrix[maxUp][i] = curNum + maxUp += 1 + elif direction == 1: # go down + for i in range(maxUp, maxDown+1): + curNum += 1 + matrix[i][maxRight] = curNum + maxRight -= 1 + elif direction == 2: # go left + for i in reversed(range(maxLeft, maxRight+1)): + curNum += 1 + matrix[maxDown][i] = curNum + maxDown -= 1 + else: #go up + for i in reversed(range(maxUp, maxDown+1)): + curNum += 1 + matrix[i][maxLeft] = curNum + maxLeft +=1 + if curNum >= n*n: + return matrix + direction = (direction + 1 ) % 4 +``` + +Same idea with [spiral matrix I](https://github.com/Lisanaaa/thinking_in_lc/blob/master/054._spiral_matrix.md) +```python +class Solution(object): + def generateMatrix(self, n): + """ + :type n: int + :rtype: List[List[int]] + """ + res = [] + l = n * n + 1 + while l > 1: + l, r = l - len(res), l + res = [range(l, r)] + zip(*res[::-1]) + return res +``` diff --git "a/docs/Leetcode_Solutions/Java/060._permutation_sequence \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/060._permutation_sequence \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..81935e253 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/060._permutation_sequence \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,93 @@ +###60. Permutation Sequence + +题目: + + + +难度: + +Medium + + + +偷懒,用46的方法,会超时 + +``` + +class Solution(object): + def getPermutation(self, n, k): + """ + :type n: int + :type k: int + :rtype: str + """ + self.result = [] + s = "" + for i in range(1, n+1): + s += str(i) + self.recPermute("",s,k) + return self.result[-1] + + + def recPermute(self, sofar, rest, k): + if rest == "": + if len(self.result) == k: + return + self.result.append(sofar) + else: + for i in xrange(len(rest)): + nnext = sofar + rest[i] + remaining = rest[:i] + rest[i+1:] + self.recPermute(nnext, remaining, k) +``` + + +然后其实有规律的,比如 + +``` +1 "123" +2 "132" +3 "213" +4 "231" +5 "312" +6 "321" +``` + +是第n个数 + 余下的n-1个数的permutation + + +k = 1 就是所有的顺序排列 +k = n! 是所有的逆序排列 + +对于余下的也是递归,比如 + + +k < (n-1)! 1 + (n-1)个数的全排列的第k个 +k < 2*(n-1)! 2 + (n-1)个数的顺序全排列的第k个 + + +发现思路对了,但是implement还有点困难. + +看了一个最为精妙的解法 + +``` +class Solution(object): + def getPermutation(self, n, k): + """ + :type n: int + :type k: int + :rtype: str + """ + seq, k, fact = '', k-1, math.factorial(n-1) + perm = [i for i in range(1, n+1)] + for i in reversed(xrange(n)): + curr = perm[k/fact] + seq += str(curr) + perm.remove(curr) + if i > 0: + k %= fact + fact /= i + return seq +``` + + diff --git "a/docs/Leetcode_Solutions/Java/061._rotate_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/061._rotate_list \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..a26319d15 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/061._rotate_list \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,58 @@ + +###61. Rotate List + + +题目: + + + +难度: + +Medium + +- k可能比list的size大,需要做一个取余准备 +- 计算list size的同时把tail也记录下来,方便之后把tail的next指向原本的head +- 利用之前的到末端的kth node + + +AC 代码 + +``` +class Solution(object): + def rotateRight(self, head, k): + if head == None or k == 0 : + return head + + cur = head + size = 1 + while cur.next: + size += 1 + cur = cur.next + + tail = cur + + k = k % size + + p = self.findKth(head,k) + + tail.next = head + head = p.next + p.next = None + return head + + def findKth(self,head, k): + dummy = ListNode(-1) + dummy.next = head + p = dummy + q = dummy + + for i in range(k): + q = q.next + + while q.next: + p = p.next + q = q.next + return p +``` + + diff --git "a/docs/Leetcode_Solutions/Java/064._minimum_path_sum \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/064._minimum_path_sum \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..591c171b5 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/064._minimum_path_sum \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,58 @@ + +###64. Minimum Path Sum + +题目: + + + +难度: + +Medium + + + +非常明显的DP + +状态转移方程 + +dp[i][j] = gird[i][j] + min(dp[i-1][j], dp[i][j-1]) + + +然后注意一下边界的处理,一开始dp[0][0] = grid[0][0] + +第一行和第一列,之后开始全用状态转移方程 + + +``` +class Solution(object): + def minPathSum(self, grid): + """ + :type grid: List[List[int]] + :rtype: int + """ + m = len(grid) + n = len(grid[0]) if m else 0 + + dp = [[0 for i in range(n)] for i in range(m)] + + dp[0][0] = grid[0][0] + + # first row + for i in range(1,n): + dp[0][i] = grid[0][i] + dp[0][i-1] + + # first col + for i in range(1,m): + dp[i][0] = grid[i][0] + dp[i-1][0] + + + for i in range(1,m): + for j in range(1,n): + dp[i][j] = grid[i][j] + min(dp[i-1][j], dp[i][j-1]) + + + return dp[m-1][n-1] + + + +``` diff --git "a/docs/Leetcode_Solutions/Java/065.unique_paths_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/065.unique_paths_ii \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..16e8e940c --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/065.unique_paths_ii \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,84 @@ + ###65.Unique Paths II + +题目: + + + + +tag : DP + +难度 : Medium + + + + + +``` +BASE CASE( i = 0 , j = 0): +//第一排和第一列,如果没有obstacle, 则走法为1, 一旦有了obstacle,则之后的格子走法都为0 + +非BASE CASE : +//一旦有obstacle,则dp为0 +dp(i, j) = dp(i,j-1) + dp(i-1,j) + +``` + +Python代码 + +``` +class Solution(object): + def uniquePathsWithObstacles(self, obstacleGrid): + """ + :type obstacleGrid: List[List[int]] + :rtype: int + """ + row = len(obstacleGrid) + col = len(obstacleGrid[0]) + dp = [[0 for i in range(col)] for j in range(row)] + + dp[0][0] = int(obstacleGrid[0][0] == 0) + + #first row + for j in range(1,col): + if obstacleGrid[0][j] == 1: + dp[0][j] = 0 + else: + dp[0][j] = dp[0][j-1] + #first col + for i in range(1,row): + if obstacleGrid[i][0] == 1: + dp[i][0] = 0 + else: + dp[i][0] = dp[i-1][0] + + for i in range(1,row): + for j in range(1,col): + if obstacleGrid[i][j] == 1: + dp[i][j] = 0 + else: + dp[i][j] = dp[i-1][j] + dp[i][j-1] + return dp[row-1][col-1] + +``` + +犯了一个错,简直觉得不可思议。一开始初始化dp用的代码是 + +``` +dp = [[0] * col] * row +``` + +问题在此: + + +``` +>>> x = [[]] * 3 +>>> x[1].append(0) +>>> x +[[0], [0], [0]] +``` + +这样初始化是做了三个一样的object. + +The problem is that they're all the same exact list in memory. When you use the [x]*n syntax, what you get is a list of n many x objects, but they're all references to the same object. They're not distinct instances, rather, just n references to the same instance. + +参见stackoverflow : diff --git "a/docs/Leetcode_Solutions/Java/066._plus_one \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/066._plus_one \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..8897d3919 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/066._plus_one \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,60 @@ +### 66. Plus One + +题目: + + + +难度 : Easy + + + + +这里是用的递归,很容易理解,如果空列表直接加1,最后一位小于9,那么直接就最后一位加1,否则添加一个0,然后再把余下的递归加1 + + +```python + +class Solution(object): + def plusOne(self, digits): + """ + :type digits: List[int] + :rtype: List[int] + """ + if digits == []: + return [1] + if digits[-1] < 9: + return digits[:-1] + [digits[-1] + 1] + else: + return self.plusOne(digits[:-1]) + [0] +``` + + +其实可以考虑循环,效率更高,参考[此处](https://shenjie1993.gitbooks.io/leetcode-python/content/066%20Plus%20One.html) + + + +> 从低位到高位,如果后一位有进位的话,那么该位要加上一,否则退出循环。如果最高位也进位,那么在列表前要插入一个一。 + + + +``` +class Solution(object): + def plusOne(self, digits): + """ + :type digits: List[int] + :rtype: List[int] + """ + carry = 1 + + for i in range(len(digits)-1,-1,-1): + digits[i] += carry + if digits[i] < 10: + carry = 0 + break + else: + digits[i] -= 10 + if carry == 1: + digits.insert(0,1) + return digits +``` + diff --git "a/docs/Leetcode_Solutions/Java/067._add_binary \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/067._add_binary \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..875dc9e63 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/067._add_binary \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,31 @@ +###67. Add Binary + +题目: + + + +难度 : Easy + + +几种case: + +- a or b 为空,最简单 +- 唯一的问题是如果有进位的处理,进位的处理就是先让其中的一个数和```‘1’```做```addBinary```处理 ,然后再用```addBinary``` + +```python +class Solution(object): + def addBinary(self, a, b): + """ + :type a: str + :type b: str + :rtype: str + """ + if (a == '' or b == ''): + return a + b + elif a[-1] == '0' and b[-1] == '0': + return self.addBinary(a[:-1], b[:-1]) + '0' + elif a[-1] == '1' and b[-1] == '1': + return self.addBinary(a[:-1], self.addBinary(b[:-1],'1')) + '0' + else: + return self.addBinary(a[:-1], b[:-1]) + '1' +``` diff --git "a/docs/Leetcode_Solutions/Java/069._sqrt(x) \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/069._sqrt(x) \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..70c28f6e2 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/069._sqrt(x) \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,101 @@ +### 69. Sqrt(x) + + +题目: + + + +难度: + +Medium + + +思路: + +一看,觉得很容易,一写,超时: + +``` +class Solution(object): + def mySqrt(self, x): + """ + :type x: int + :rtype: int + """ + i = 0 + while i * i <= x : + if i * i == x: + return i + elif i * i < x and (i+1) * (i+1) > x: + return i + i += 1 +``` + +看一眼tag, binary search,难道从x/2之类的开始搜起来?话说还想到求sqrt有个🐂的牛顿法? + +莫名其妙过了的代码: + +```python +class Solution(object): + def mySqrt(self, x): + """ + :type x: int + :rtype: int + """ + if x == 1 : return 1 + if x == 0 : return 0 + l, r = 0, x - 1 + while l <= r: + mid = l + ((r - l) >> 2) + if mid * mid <= x and (mid+1)*(mid+1) > x: + return mid + elif mid * mid > x: + r = mid - 1 + else: + l = mid + 1 +``` + +或者 +```python +class Solution(object): + def mySqrt(self, x): + """ + :type x: int + :rtype: int + """ + if x == 1: + return 1 + if x == 0: + return 0 + l, r = 0, x-1 + while l <= r: + mid = l + ((r - l) >> 2) + if (mid * mid - x == 0): + return mid + elif (mid * mid - x > 0): + r = mid - 1 + else: + l = mid + 1 + return r +``` + + + +牛顿法 + +参见wikipedia,to be done:自己推导一遍 + + + +```python +class Solution(object): + def mySqrt(self, x): + """ + :type x: int + :rtype: int + """ + res = 1.0 + while abs(res * res - x) > 0.1: + res = (res + x / res) / 2 + return int(res) + +``` diff --git "a/docs/Leetcode_Solutions/Java/070. Climbing Stairs \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/070. Climbing Stairs \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..890b2f338 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/070. Climbing Stairs \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,99 @@ +### 70. Climbing Stairs + + +题目: + + + +难度: +Easy + +思路: + +Fibonacci 的DP版本 + +对于DP的不同理解造成不同的写法 +Memoization will usually add on your time-complexity to your space-complexity (e.g. with tabulation you have more liberty to throw away calculations, like using tabulation with Fib lets you use O(1) space, but memoization with Fib uses O(N) stack space). +详看 + +[Dynamic programming and memoization: bottom-up vs top-down approaches](https://awjin.me/algos-js/dp/tab-memo.html) + +[Tabulation vs Memoizatation](http://www.geeksforgeeks.org/tabulation-vs-memoizatation/) +- top-down(memorize) + +``` +def memorize_fib(n): # n为第几个Fibonacci数 + memo = {1:1, 2:1} + if n in memo: + return memo[n] + else: + memo[n] = memorize_fib(n-1) + memorize_fib(n-2) + return memo[n] + +print(memorize_fib(4)) +``` +输出```3``` + + +- bottom up(tabulation) + +``` +def tabulation_fib(n): # n为第几个Fibonacci数 + fib = [1, 1, 2] + if n < 4: + return fib[n-1] + for k in range(3, n+1): + fib[2] = fib[0] + fib[1] + fib[0], fib[1] = fib[1], fib[2] + return fib[2] + +print(tabulation_fib(4)) +``` +输出```3``` + +这里memo用dict,用array也一样。当然用bottom up还有一点,可以只存每次最后两个数,可以save space.,这样就只用到constant space. + +AC 代码(这里采用bottom up思想) + +```python +class Solution(object): + def climbStairs(self, n): + """ + :type n: int + :rtype: int + """ + fib = [1, 2, 3] + if n < 4: + return fib[n-1] + for k in range(3, n+1): +            fib[2] = fib[0] + fib[1]             # 永远只存3个元素,save space +            fib[0], fib[1] = fib[1], fib[2] + return fib[2] +``` +- Complexity Analysis + + - Time complexity : O(n) + + - Space complexity : O(1). Constant space is used. +另外还有一个公式法: + +![](https://github.com/Lisanaaa/myTODOs/blob/master/41512784914_.pic.jpg) + +由于这里面相当于```standard Fibonacci```函数向前进了一步,排列为1,2,3,5而非原本的1,1,2,3,所以代码中使用```n+1``` +```python +class Solution(object): + def climbStairs(self, n): + """ + :type n: int + :rtype: int + """ + import math + sqrt5 = math.sqrt(5) + fibn = pow((1 + sqrt5) / 2, n+1) - pow((1 - sqrt5) / 2, n+1) + return int(float(fibn/sqrt5)) +``` +- Complexity Analysis + + - Time complexity : O(lg(n)). pow method takes log(n) time. + + - Space complexity : O(1). Constant space is used. diff --git "a/docs/Leetcode_Solutions/Java/072._edit_distance \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/072._edit_distance \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..c2720f92b --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/072._edit_distance \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,116 @@ +###72. Edit Distance + +题目: + + + +难度: + +Hard + +可以做的操作: + +- insert +- delete +- replace + +动归典型,原来也是有wikipedia page的算法 + + + + + + +看wikipedia 这解释 + +``` + / max(i,j) if min(i,j) = 0 + + / dp[i-1][j] + 1 word1[i]不在word2[0...j]中,所以删除 + dp[i][j] - min -- dp[i][j-1] + 1 insertion + \ dp[i-1][j-1] + 1/0 word[i]与word[j]是否相等 +``` + +上面的就不用解释了,min分别对应:删除、插入、以及替代(1/0取决 word1[i] == word2[j] ),反正也是tabular类型,画表来解决问题。 + + +用wikipedia上的伪码改造 + +``` +function LevenshteinDistance(char s[1..m], char t[1..n]): + // for all i and j, d[i,j] will hold the Levenshtein distance between + // the first i characters of s and the first j characters of t + // note that d has (m+1)*(n+1) values + declare int d[0..m, 0..n] + + set each element in d to zero + + // source prefixes can be transformed into empty string by + // dropping all characters + for i from 1 to m: + d[i, 0] := i + + // target prefixes can be reached from empty source prefix + // by inserting every character + for j from 1 to n: + d[0, j] := j + + for j from 1 to n: + for i from 1 to m: + if s[i] = t[j]: + substitutionCost := 0 + else: + substitutionCost := 1 + d[i, j] := minimum(d[i-1, j] + 1, // deletion + d[i, j-1] + 1, // insertion + d[i-1, j-1] + substitutionCost) // substitution + + return d[m, n] +``` + +对应的例子表格图 + +``` + k i t t e n + 0 1 2 3 4 5 6 +s 1 1 2 3 4 5 6 +i 2 2 1 2 3 4 5 +t 3 3 2 1 2 3 4 +t 4 4 3 2 1 2 3 +i 5 5 4 3 2 2 3 +n 6 6 5 4 3 3 2 +g 7 7 6 5 4 4 3 +``` + + +AC代码 + +``` +class Solution(object): + def minDistance(self, word1, word2): + """ + :type word1: str + :type word2: str + :rtype: int + """ + m,n = len(word1), len(word2) + dp = [[0 for i in range(m+1)] for j in range(n+1)] + + for i in range(1,m+1): + dp[0][i] = i + + for j in range(1,n+1): + dp[j][0] = j + + for j in range(1,n+1): + for i in range(1,m+1): + cost = 0 if word1[i-1] == word2[j-1] else 1 + dp[j][i] = min(dp[j-1][i] + 1, dp[j][i-1] + 1, dp[j-1][i-1] + cost) + + return dp[n][m] +``` + + +貌似还有提升版本,但是比较明显即使有伪码,一开始也出错于下标. + +升级版 to be learned. \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/073. Set Matrix Zeroes \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/073. Set Matrix Zeroes \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..0b30f99ed --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/073. Set Matrix Zeroes \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,55 @@ +### 73. Set Matrix Zeroes + + + +题目: + + + + +难度 : Medium + + + +思路: + +Naive AC代码,一看类似那个 game of life,不用extra space,不用O(mn),应该就是用状态转移机了(?),所以还是先naive AC把: + +``` +class Solution(object): + def setZeroes(self, matrix): + """ + :type matrix: List[List[int]] + :rtype: void Do not return anything, modify matrix in-place instead. + """ + def setZero(i,j): + for m in range(col): + matrix[i][m] = 0 + for n in range(row): + matrix[n][j] = 0 + + + row = len(matrix) + col = len(matrix[0]) if row else 0 + + newM = [] + for i in range(row): + newM.append(matrix[i][:]) + + + for i in range(row): + for j in range(col): + if newM[i][j] == 0: + setZero(i,j) +``` + + + +`正确思路`: + +一边遍历,一边将相应的行和列置为0是行不通的,会影响后面元素的遍历判断,所以要记录下哪些行和哪些列是要置为0的。为了节约空间,在原矩阵中借两条边,如果该行或者列要置为0,则把左边或者上边的相应位置置为0。如果左边和上边本来就有0,那么需要额外标记一下,最后把左边或者右边也全部置为0. + + + + + diff --git "a/docs/Leetcode_Solutions/Java/074._search_a_2d_matrix \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/074._search_a_2d_matrix \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..026a5d34d --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/074._search_a_2d_matrix \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,81 @@ +### 74. Search a 2D Matrix + +题目: + + + +难度: +Medium + + +思路: +想过将```2D matrix```看成一个大```sorted list```,代码如下: +```python +class Solution(object): + def searchMatrix(self, matrix, target): + """ + :type matrix: List[List[int]] + :type target: int + :rtype: bool + """ + row = len(matrix) + col = len(matrix[0]) if row else 0 + l, r = 0, row * col - 1 + while l <= r: + mid = l + ((r - l) >> 2) + if target > matrix[mid/col][mid%col]: + l = mid + 1 + elif target < matrix[mid/col][mid%col]: + r = mid - 1 + else: + return True + return False +``` + + +但是后面觉得不行, +原因如下: +1. m * n may overflow for large m and n; +2. it will use multiple expensive operations such as / and % + + + + + + +因此二分Search,``` binary search by row first, then binary search by column.``` + + +```python +class Solution(object): + def searchMatrix(self, matrix, target): + """ + :type matrix: List[List[int]] + :type target: int + :rtype: bool + """ + if not matrix or not matrix[0]: + return False + row = len(matrix) + col = len(matrix[0]) if row else 0 + l, r = 0, row - 1 + while l <= r: + mid_row = l + ((r - l) >> 2) + if matrix[mid_row][0] <= target <= matrix[mid_row][-1]: + m, n = 0, col - 1 + while m <= n: + mid_col = m + ((n - m) >> 2) + if matrix[mid_row][mid_col] > target: + n = mid_col - 1 + elif matrix[mid_row][mid_col] < target: + m = mid_col + 1 + else: + return True + return False + elif target < matrix[mid_row][0]: + r = mid_row - 1 + else: + l = mid_row + 1 + return False + +``` diff --git "a/docs/Leetcode_Solutions/Java/075._sort_colors \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/075._sort_colors \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..e70f4e6ad --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/075._sort_colors \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,54 @@ +###75. Sort Colors + +题目: + + + +难度: + +Medium + + +思路: + +这个问题是 Dutch National Flag Problem, 荷兰旗问题 + + + +思路其实是类似partition的,比x小的放左边,比x大的放右边。 + +这里是用三个指针,begin, cur, end,cur需要遍历整个数组 + +- cur 指向0,交换begin与cur, begin++,cur++ +- cur 指向1,不做任何交换,cur++ +- cur 指向2,交换end与cur,end-- + +之所以cur指向2,交换之后不前进是因为我们不知道end此时指向的元素是几,如果交换过来的是0或者1,那么明显我们需要做进一步的处理,所以最终判断条件是end =< cur应该就结束了 + +这样的three-way-partition也只是3-way好用吧?如果有4个数,那么这样则是无效的,或者如果是4-way,那么可以转换成3-way+2-way + + +``` +class Solution(object): + def sortColors(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + begin,cur,end = 0,0,len(nums) - 1 + + while cur <= end: + if nums[cur] == 0: + nums[begin],nums[cur] = nums[cur],nums[begin] + cur += 1 + begin += 1 + + elif nums[cur] == 1: + cur += 1 + + else: # nums[cur] == 2 + nums[cur],nums[end] = nums[end],nums[cur] + end -=1 + +``` + diff --git "a/docs/Leetcode_Solutions/Java/076._Minimum_Window_Substring \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/076._Minimum_Window_Substring \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..1407d82d3 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/076._Minimum_Window_Substring \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,44 @@ +### 76. Minimum Window Substring +题目: + + + +难度 : Hard + + +模板大法 + + +```python +class Solution(object): + def minWindow(self, s, t): + """ + :type s: str + :type t: str + :rtype: str + """ + if len(t) > len(s): + return '' + maps = collections.Counter(t) + counter = len(maps.keys()) + begin, end, head, length = 0, 0, 0, float('inf') + while end < len(s): + if s[end] in maps: + maps[s[end]] -= 1 + if maps[s[end]] == 0: + counter -= 1 + end += 1 + while counter == 0: + if s[begin] in maps: + maps[s[begin]] += 1 + if maps[s[begin]] > 0: + counter += 1 + if end - begin < length: + length = end - begin + head = begin + begin += 1 + if length == float('inf'): + return '' + return s[head:head+length] +``` + diff --git "a/docs/Leetcode_Solutions/Java/077._combinations \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/077._combinations \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..1672b9dff --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/077._combinations \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,123 @@ +###77. Combinations + + +题目: + + + +难度 : Medium + + +思路一: +python作弊法 + +``` +import itertools +p = [4, 8, 15, 16, 23, 42] +c = itertools.combinations(p, 4) +for i in c: + print i + +结果: + +(4, 8, 15, 16) +(4, 8, 15, 23) +(4, 8, 15, 42) +(4, 8, 16, 23) +(4, 8, 16, 42) +(4, 8, 23, 42) +(4, 15, 16, 23) +(4, 15, 16, 42) +(4, 15, 23, 42) +(4, 16, 23, 42) +(8, 15, 16, 23) +(8, 15, 16, 42) +(8, 15, 23, 42) +(8, 16, 23, 42) +(15, 16, 23, 42) +``` + +作弊AC代码: + +``` +class Solution(object): + def combine(self, n, k): + """ + :type n: int + :type k: int + :rtype: List[List[int]] + """ + import itertools + return [list(i) for i in itertools.combinations(range(1,n+1), k)] +``` + + +思路二: + +标准的recursion + +但是会超时 + + +``` +class Solution(object): + def combine(self, n, k): + """ + :type n: int + :type k: int + :rtype: List[List[int]] + """ + ans = [] + self.dfs(n, k, 1, [], ans) + return ans + + def dfs(self, n, k ,start, lst, ans): + if k == 0 : + ans.append(lst) + return + for i in range(start, n+1): + self.dfs(n, k - 1, i + 1,lst +[i], ans) +``` + +理解方式 + +``` + + 1 2 3 + 12 13 14 23 24 34 +``` + +可以参照这里 + + + + + +解法三: + + +采用递归的方式,在n个数中选k个,如果n大于k,那么可以分类讨论,如果选了n,那么就是在1到(n-1)中选(k-1)个,否则就是在1到(n-1)中选k个。递归终止的条件是k为1,这时候1到n都符合要求。 + +注意一开始这里的else part花了我一点时间来理解,因为n必定大于k,所以这样递归当 n == k的时候选法就是code原作者的写法,也就是直接[range(1,k+1)] + +参考这里: + + +``` +class Solution(object): + def combine(self, n, k): + """ + :type n: int + :type k: int + :rtype: List[List[int]] + """ + if k == 1: + return [[i + 1] for i in range(n)] + result = [] + if n > k: + result = [r + [n] for r in self.combine(n - 1, k - 1)] + self.combine(n - 1, k) + else: #n == k + # result = [r + [n] for r in self.combine(n - 1, k - 1)] + result = [range(1,k+1)] + return result +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/078.Subsets \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/078.Subsets \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..e5b100563 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/078.Subsets \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,47 @@ +### 78. Subsets + +题目: + + + +难度 : Medium + + +Python代码 + +```python +class Solution(object): + def subsets(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + results = [[]] + for num in nums: + results.extend([result + [num] for result in results]) + return results + +``` + + +BackTrack 标准解法版 + + +```python +class Solution: + + def search(self, nums, S, index): + if index == len(nums): + self.results.append(S) + return + + self.search(nums, S + [nums[index]], index + 1) + self.search(nums, S, index + 1) + + def subsets(self, nums): + self.results = [] + self.search(nums, [], 0) + return self.results +``` + +对每个元素,有两种可能,加入S和不加入S,写起来思路还是很清爽的 diff --git "a/docs/Leetcode_Solutions/Java/079._word_search \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/079._word_search \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..e097a4259 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/079._word_search \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,63 @@ +###79. Word Search + + + +题目: + + + +难度: +Medium + + +思路: + +其实这个题和number of islands类似,是backtracking基本功的考查,但是基本功非常有待提高||| + +比较核心的是dfs函数,然后这个函数有取巧的写法:如果outside of boundary就return False + +loop, 如果碰到跟word开头的字母一样,把这个扔进去loop,可以考查这个char在这个board的上下左右是否可以选择,补课使用则重置used, 然后return + +也还是之前摘录的,backtrack写法关键: 选择 (Options),限制 (Restraints),结束条件 (Termination)。 + + + + +``` +class Solution(object): + def exist(self, board, word): + """ + :type board: List[List[str]] + :type word: str + :rtype: bool + """ + + def dfs(board, used, row, col, x, y, word, idx): + if idx == len(word) : + return True + + if x < 0 or x > row -1 or y < 0 or y > col -1 : + return False + + if board[x][y] == word[idx] and not used[x][y]: + used[x][y] = 1 + left = dfs(board,used,row,col,x-1,y,word,idx+1) + right = dfs(board,used,row,col,x+1,y,word,idx+1) + up = dfs(board,used,row,col,x,y-1,word,idx+1) + down = dfs(board,used,row,col,x,y+1,word,idx+1) + + used[x][y] = left or right or up or down + return left or right or up or down + return False + + + row = len(board) + col = len(board[0]) if row else 0 + used = [ [0 for i in range(col)] for j in range(row)] + + for i in range(row): + for j in range(col): + if dfs(board,used,row,col,i,j,word,0): + return True + return False +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/082._remove_duplicates_from_sorted_list_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/082._remove_duplicates_from_sorted_list_ii \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..277b3870c --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/082._remove_duplicates_from_sorted_list_ii \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,49 @@ +###82. Remove Duplicates from Sorted List II + + +题目: + + + + +难度: + +Medium + + +木有space 和 time的限制,第一想法,用dictionary存一下每个nodes的个数,这样只要看到它是大于1的,就删删删。 + +虽然是笨办法。但是也可以AC + +``` +class Solution(object): + def deleteDuplicates(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + dummy = ListNode(-1) + dummy.next = head + + cur = dummy.next + nodeNumber = {} + while cur: + if cur.val in nodeNumber: + nodeNumber[cur.val] += 1 + else: + nodeNumber[cur.val] = 1 + cur = cur.next + + cur = dummy + while cur.next: + if nodeNumber[cur.next.val] > 1: + cur.next = cur.next.next + else: + cur = cur.next + return dummy.next +``` + + +谷歌一下,更省时间的方法是用一个prev 和 cur 指针,然后用一个bool来记录是否duplicate,这样loop一次即可解决问题。 + +to be 写出来 \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/083._remove_duplicates_from_sorted_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/083._remove_duplicates_from_sorted_list \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..a9081a689 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/083._remove_duplicates_from_sorted_list \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,28 @@ +### 83. Remove Duplicates from Sorted List + +题目: + + + +难度: + +Easy + + +dummy 大法 + +```python +class Solution(object): + def deleteDuplicates(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + dummy = head + while head: + while head.next and head.next.val == head.val: + head.next = head.next.next # skip duplicated node + head = head.next # not duplicate of current node, move to next node + return dummy + +``` diff --git "a/docs/Leetcode_Solutions/Java/086._partition_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/086._partition_list \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..c1fd2dca0 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/086._partition_list \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,56 @@ +###86. Partition List + + +题目: + + + +难度 : Medium + + +思路一: + + +最简单的思路就是两个dummy head,然后一个指向 小于的node,一个指向大于的node + + +思路二: + +不走寻常路了,使用两个指针,一个指向小于的尾巴,一个一直往后走,指向大于,然后交换node + +完成比完美更重要啊,其实可以先试试用简单方法,因为我用我的不走寻常路画了比较久的图,写起来也稍显没那么美观,还在交换node的部分卡了一会 + + + +``` +class Solution(object): + def partition(self, head, x): + """ + :type head: ListNode + :type x: int + :rtype: ListNode + """ + dummy = ListNode(-1) + dummy.next = head + + p1 = p2 = dummy + + while p1.next and p1.next.val < x: + p1 = p1.next + + p2 = p1.next + + while p2: + while p2.next and p2.next.val >= x: + p2 = p2.next + + if p2.next == None: + break + node = p2.next + p2.next = node.next + node.next = p1.next + p1.next = node + p1 = p1.next + + return dummy.next +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/088._merge_sorted_array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/088._merge_sorted_array \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..029b3c330 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/088._merge_sorted_array \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,46 @@ +### 88. Merge Sorted Array + + +题目: + + + +难度 : Easy + +### 思路: + +给的数组可能是这样的 + +- nums1 : [0] +- m : 0 +- nums2 : [1] +- n : 1 + + +所以要判断m和n是不是仍然大于0 + + +AC代码 + + +```python +class Solution: + def merge(self, nums1, m, nums2, n): + """ + :type nums1: List[int] + :type m: int + :type nums2: List[int] + :type n: int + :rtype: void Do not return anything, modify nums1 in-place instead. + """ + while m > 0 and n > 0: + if nums1[m-1] > nums2[n-1]: + nums1[m+n-1] = nums1[m-1] + m -= 1 + else: + nums1[m+n-1] = nums2[n-1] + n -= 1 + if n > 0: + nums1[:n] = nums2[:n] + +``` diff --git "a/docs/Leetcode_Solutions/Java/089._gray_code \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/089._gray_code \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..c0a9f193c --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/089._gray_code \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,101 @@ +###89. Gray Code + + + +题目: + + + +难度: +Medium + +思路: + +首先不是从任何一个数开始都是有效的,所以naive的想法是从任何一个开始,然后如果能到2^n位,那么说明是有效的,问题解决. + +A gray code sequence must begin with 0. ->简化了一点 + +先写了一段代码: + +``` +def nextCode(curCode, res, n): + if curCode not in res: + res.append(curCode) + else: + return + if len(res) == pow(2,n): + return res + for i in range(n): + nCode = curCode[:] + nCode[i] = 1 if curCode[i] == 0 else 0 + nextCode(nCode,res,n) + +res = [] +nextCode([0,0,0],res,3) +print res +#[[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0], [0, 1, 1], [1, 1, 1], [1, 0, 1], [0, 0, 1]] +``` +实际上问题是这段代码的时间复杂度感觉很高,但是试试 + + +不失所望,到11就超时 + +``` + +class Solution(object): + def grayCode(self, n): + """ + :type n: int + :rtype: List[int] + """ + def nextCode(curCode, res, n): + if curCode not in res: + res.append(curCode) + else: + return + if len(res) == pow(2,n): + return res + for i in xrange(n): + nCode = curCode[:] + nCode[i] = 1 if curCode[i] == 0 else 0 + nextCode(nCode, res, n) + + def listoVal(curCode,n): + val = 0 + for i in range(n-1,-1,-1): + val += pow(2,i) * curCode[i] + return val + + + res = [] + nextCode([0]*n, res, n) + # print res + + val = [] + for i in res: + val.append(listoVal(i,n)) + return val +``` + +然后居然有这个东西: +Gray code,要用位运算!瞑目 + + + + +服气,这个待研究 +``` +class Solution(object): + def grayCode(self, n): + """ + :type n: int + :rtype: List[int] + """ + result = [(i>>1)^i for i in range(pow(2,n))] + return results +``` + + + + + diff --git "a/docs/Leetcode_Solutions/Java/090._subsets_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/090._subsets_ii \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..99661e3da --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/090._subsets_ii \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,80 @@ +### 90. Subsets II + +题目: + + + +难度 : Medium + + +思路: + + +参考别人的 + +现在来观察规律,与之前有不同之处是我们需要一个位置来mark,因为不再需要往之前出现过的地方再加了,看这个: + + +``` +[[],[1]] 是 [1] 的子集合 +[[],[1],[2],[1,2]] 是 [1,2] 的子集合,实际上就是1的子集合们加了一个2 +新来的2不能再从头开始加了,它需要从[ .., [2],[1,2] ]加 才是合理的 + +****当出现多个重复数字时,应该从 已经拥有了新数字所出现全部次数的list开始加才是合理的**** +[[],[1]] 是 [1] 的子集合 +[[],[1],[2],[1,2]] 是 [1,2] 的子集合,实际上就是1的子集合们加了一个2 +[ + [2], + [1], + [1,2,2], + [2,2], + [1,2], + [] +] 是 [1,2,2] 的子集和,实际上也就是[1,2]的子集合加了一个2 +新来的2不能再从头开始加了,它需要从[ .., [2,2],[1,2,2] ]加 才是合理的 +例如: +``` + + +这里这个start是来记录了之前一次数组的长度,temp_size记住目前数组的长度,然后用这个来达到去重的目的,非常聪明 + +自己的解法 +```python +class Solution(object): + def subsetsWithDup(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + nums.sort() + results = [[]] + for i in range(len(nums)): + if any(nums[i] in result for result in results): + results.extend([result + [nums[i]] for result in results if result.count(nums[i]) == i - nums.index(nums[i])]) + else: + results.extend([result + [nums[i]] for result in results]) + return results + +``` + + +别人的,但是一个意思 +```python +class Solution(object): + def subsetsWithDup(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + nums.sort() + result = [[]] + temp_size = 0 + for i in range(len(nums)): + start = temp_size if i >= 1 and nums[i] == nums[i-1] else 0 + temp_size = len(result) + for j in range(start, temp_size): + result.append(result[j] + [nums[i]]) + return result + +``` + diff --git "a/docs/Leetcode_Solutions/Java/091._decode_ways \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/091._decode_ways \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..3abd24a85 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/091._decode_ways \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,71 @@ +###91. Decode Ways + +题目: + + + + +tag : DP + +难度 : Medium + + + + + +``` +BASE CASE(len(s) = 1 和 len(s) = 2 ): +直接check + +非BASE CASE : +先令 dp[i] = 0 +如果s[i]是可以map的话 -> dp[i] += dp[i-1] 原本的s[0..i]decode方式加上s[i] +如果s[i-1,i]可以map的话 -> dp[i] += dp[i-2] 原本的s[0...i-1]decode方式加上s[i-1,i] +``` + + +Python代码(可美化) + +``` +class Solution(object): + def numDecodings(self, s): + """ + :type s: str + :rtype: int + """ + keys = ['1', '2', '3', '4', '5', '6', '7', '8', '9' ,'10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26'] + values = ['A', 'B','C', 'D', 'E', 'F', 'G','H', 'I', 'J', 'K', 'L', 'M' , 'N', 'O', 'P','Q', 'S', 'R', 'T', 'U','V', 'W', 'X','Y','Z'] + numbersToLetters = dict(zip(keys, values)) + + ways = {} + n = len(s) + for i in range(n): + ways[i] = 0 + if n == 0: + return 0 + elif n == 1 : + ways[0] = int(s in numbersToLetters) + elif n == 2: + if (s[0] in numbersToLetters) and (s[1] in numbersToLetters): + ways[1] += 1 + if (s in numbersToLetters): + ways[1] += 1 + else: + #s[0] + ways[0] = int(s[0] in numbersToLetters) + #s[01] + if (s[0] in numbersToLetters) and (s[1] in numbersToLetters): + ways[1] += 1 + if (s[:2] in numbersToLetters): + ways[1] += 1 + for i in range(2,n): + if s[i] in numbersToLetters: + ways[i] += ways[i-1] + if (s[i-1:i+1] in numbersToLetters): + ways[i] += ways[i-2] + + #print(ways[n-1]) + return ways[n-1] + +``` + diff --git "a/docs/Leetcode_Solutions/Java/092._reverse_linked_list_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/092._reverse_linked_list_ii \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..f2b29da12 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/092._reverse_linked_list_ii \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,66 @@ +###92. Reverse Linked List II + +题目: + + + +难度: +Medium + + +跟 reverse linked list一样 + +思路: 找到 第 m 个node,然后开始reverse到第n个node,然后再把它们和原本的list连接起来 + +AC 代码 + +``` +class Solution(object): + def reverseBetween(self, head, m, n): + """ + :type head: ListNode + :type m: int + :type n: int + :rtype: ListNode + """ + # m == n, not reverse + if m == n : return head + + dummy = ListNode(-1) + dummy.next = head + + mbefore = dummy + cnt = 1 + + while mbefore and cnt < m: + mbefore = mbefore.next + cnt += 1 + + prev = None + cur = mbefore.next + tail1 = mbefore.next + + + while cnt <= n : + nxt = cur.next + cur.next = prev + prev = cur + cur = nxt + cnt += 1 + + + + mbefore.next = prev + tail1.next = cur + + return dummy.next +``` + +看了一下别人的代码,又比我写的好嘛,因为是保证m和n有效,用的是for循环先找到 m node: + + + for _ in range(m-1): + .... + + for _ in range(n-m): + reverse 操作 \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/093._restore_ip_addresses \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/093._restore_ip_addresses \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..55e31916b --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/093._restore_ip_addresses \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,66 @@ +###93. Restore IP Addresses + +题目: + + + + +难度: + +Medium + + +基本思路已达到,等待AC之路 + +结果AC之路还是比较漫长的,因为不允许前缀为0困扰了一下 + +``` +class Solution(object): + def restoreIpAddresses(self, s): + """ + :type s: str + :rtype: List[str] + """ + self.res = [] + self.singgleAddresses([],s,4) + for i in range(len(self.res)): + self.res[i] = '.'.join(str(j) for j in self.res[i]) + return self.res + + + + def singgleAddresses(self, curRes, s, k): + """ + :type s: str + :rtype: List[str] + """ + if len(s) == 0 and k == 0: + if curRes not in self.res: + self.res.append(curRes) + if len(s) == 0 or k < 0: + return + else: + if self.between0And255(s[:1]): + self.singgleAddresses(curRes + [int(s[:1])], s[1:], k-1) + if self.between0And255(s[:2]): + self.singgleAddresses(curRes + [int(s[:2])], s[2:], k-1) + if self.between0And255(s[:3]): + self.singgleAddresses(curRes + [int(s[:3])], s[3:], k-1) + + def between0And255(self,s): + #前缀不允许为0 + if int(s) == 0 : + if len(s) == 1 : + return True + else: + return False + + if int(s) > 0 and s[0] == '0': + return False + if int(s) > 0 and int(s) <= 255: + return True + return False + +``` + + diff --git "a/docs/Leetcode_Solutions/Java/094._binary_tree_inorder_traversal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/094._binary_tree_inorder_traversal \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..dc288f127 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/094._binary_tree_inorder_traversal \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,92 @@ +### 94. Binary Tree Inorder Traversal + +题目: + + + +难度: + +Medium + + +递归版本1⃣️:自己瞬秒的 + + + + +```python +class Solution(object): + def inorderTraversal(self, root): + """ + :type root: TreeNode + :rtype: List[int] + """ + res = [] + if not root: + return res + if root.left: + res.extend(self.inorderTraversal(root.left)) + res.append(root.val) + if root.right: + res.extend(self.inorderTraversal(root.right)) + return res +``` + +递归版本2⃣️: +```python +class Solution(object): + def inorderTraversal(self, root): + """ + :type root: TreeNode + :rtype: List[int] + """ + self.lst = [] + self.DFS(root) + return self.lst + + + def DFS(self,root): + if root == None: + return + if root.left: + self.DFS(root.left) + self.lst.append(root.val) + if root.right: + self.DFS(root.right) + +``` + +非递归用stack,我听谁讲过 😓 + +// to be done + + +via wikipedia + + +递归: + +``` +inorder(node) + if (node = null) + return + inorder(node.left) + visit(node) + inorder(node.right) +``` + + +非递归,跟之前那个iterator有得一拼,其实好几个题都是在玩这个花样? + +``` +iterativeInorder(node) + s ← empty stack + while (not s.isEmpty() or node ≠ null) + if (node ≠ null) + s.push(node) + node ← node.left + else + node ← s.pop() + visit(node) + node ← node.right +``` diff --git "a/docs/Leetcode_Solutions/Java/096._unique_binary_search_trees \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/096._unique_binary_search_trees \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..2e29cf929 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/096._unique_binary_search_trees \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,43 @@ +###96. Unique Binary Search Trees + + + +题目: + + + +难度: +Medium + +思路: + + +参照此处hint: + + + + +首先明确n个不等的数它们能构成的二叉搜索树的种类都是相等的. + +毫无头绪,对于1...n的bst,可以这样看,k可以作为root,那么1..k-1必定在左边,k+1...n必定在右边,而1...k-1课产生的bst树是dp[k-1],右边产生的数是dp[n-k],所以能生成的树的数量是 dp[k-1]* dp[n-k] + +dp[n] = sum(dp[k-1]*dp[n-k]),从0到k + + +``` +class Solution(object): + def numTrees(self, n): + """ + :type n: int + :rtype: int + """ + dp = [ 1 for i in range(n+1)] + + for i in range(2,n+1): + s = 0 + for k in range(i): + s += dp[k]*dp[i-k-1] + dp[i] = s + + return dp[-1] +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/098._validate_binary_search_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/098._validate_binary_search_tree \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..c4b5dcfbf --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/098._validate_binary_search_tree \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,74 @@ +###98. Validate Binary Search Tree + +题目: + + + + +难度: + +Easy + + +以前做过这道题,valid binary tree,需要check两件事: + + +``` + 10 + / \ + 7 20 + / \ + 5 40 +``` + + +- node.left.val < node.val + - right subtree of left child, value < node.val +- node.right.val > node.val + - left subtree of the right child, value > node.val + + +wikipedia上有伪码: + +``` +truct TreeNode { + int key; + int value; + struct TreeNode *left; + struct TreeNode *right; +}; + +bool isBST(struct TreeNode *node, int minKey, int maxKey) { + if(node == NULL) return true; + if(node->key < minKey || node->key > maxKey) return false; + + return isBST(node->left, minKey, node->key) && isBST(node->right, node->key, maxKey); +} + + +if(isBST(root, INT_MIN, INT_MAX)) { + puts("This is a BST."); +} else { + puts("This is NOT a BST!"); +} +``` + +实际上就是每次往下看,node都确保被夹在一个范围。 + +翻译了一下伪码,AC + + +``` +class Solution(object): + def isValidBST(self, root): + """ + :type root: TreeNode + :rtype: bool + """ + return self.isBST(root, float('-inf'),float('inf')) + + def isBST(self, root, minKey, maxKey): + if root == None: return True + if root.val <= minKey or root.val >= maxKey : return False + return self.isBST(root.left,minKey,root.val) and self.isBST(root.right, root.val, maxKey) +``` diff --git "a/docs/Leetcode_Solutions/Java/100._same_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/100._same_tree \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..f12c86c3a --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/100._same_tree \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,49 @@ +### 100. Same Tree + +题目: + + + + +难度: + +Easy + + +太简单了,递归一行! + + +```python +# Definition for a binary tree node. +# class TreeNode(object): +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None + +class Solution(object): + def isSameTree(self, p, q): + """ + :type p: TreeNode + :type q: TreeNode + :rtype: bool + """ + return p.val == q.val and all(map(self.isSameTree, (p.left, p.right), (q.left, q.right))) if p and q else p is q +``` + +```python +class Solution(object): + def isSameTree(self, p, q): + """ + :type p: TreeNode + :type q: TreeNode + :rtype: bool + """ + if (not p and q) or (p and not q): + return False + if not p and not q: + return True + if p.val == q.val: + return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right) + return False +``` diff --git "a/docs/Leetcode_Solutions/Java/101._symmetric_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/101._symmetric_tree \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..cb6f5219b --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/101._symmetric_tree \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,45 @@ +### 101. Symmetric Tree + +题目: + + + + +难度: + +Easy + + +两棵树symmetric, 有几种可能: + +- 均为none ,symmetric +- 左孩子,右孩子都不存在,并且值相等, symmetric +- 右子树 和 另一棵树的左子树相等,左子树 和另一颗树的右子树相等 🌲 + + +```python +class Solution(object): + def isSymmetric(self, root): + """ + :type root: TreeNode + :rtype: bool + """ + if not root: + return True + return self.symmetric(root.left, root.right) + + def symmetric(self, l1, l2): + if not l1 or not l2: + if not l1 and not l2: + return True + else: + return False + if l1.val == l2.val: + return self.symmetric(l1.left, l2.right) and self.symmetric(l1.right, l2.left) + else: + return False +``` + + + + diff --git "a/docs/Leetcode_Solutions/Java/102._binary_tree_level_order_traversal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/102._binary_tree_level_order_traversal \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..7d4ac4efb --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/102._binary_tree_level_order_traversal \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,62 @@ +### 102. Binary Tree Level Order Traversal + +题目: + + + + +难度: + +Medium + +第一种做法:利用curLevel和nextLevel来记录,然后按层append. + + +```python +class Solution(object): + def levelOrder(self, root): + """ + :type root: TreeNode + :rtype: List[List[int]] + """ + if not root: + return [] + res, cur_level = [], [root] + while cur_level: + next_level, tmp_res = [], [] + for node in cur_level: + tmp_res.append(node.val) + if node.left: + next_level.append(node.left) + if node.right: + next_level.append(node.right) + res.append(tmp_res) + cur_level = next_level + return res +``` + + +第二种做法:递归 + + + +```python +class Solution(object): + def levelOrder(self, root): + """ + :type root: TreeNode + :rtype: List[List[int]] + """ + res = [] + self.iter_order(root, 0, res) + return res + + def iter_order(self, root, level, res): + if not root: return + if len(res) < level + 1: + res.append([]) + res[level].append(root.val) + self.iter_order(root.left, level+1, res) + self.iter_order(root.right, level+1, res) +``` +用递归来记录每一层,需要更加学习,不算easy diff --git "a/docs/Leetcode_Solutions/Java/103._binary_tree_zigzag_level_order_traversal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/103._binary_tree_zigzag_level_order_traversal \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..edc9b3986 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/103._binary_tree_zigzag_level_order_traversal \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,43 @@ +### 103. Binary Tree Zigzag Level Order Traversal + +题目: + + + + +难度: + +Medium + + + +```python +class Solution(object): + def zigzagLevelOrder(self, root): + """ + :type root: TreeNode + :rtype: List[List[int]] + """ + if not root: + return [] + res, cur_level, level_count = [], [root], 0 + while cur_level: + next_level, tmp_res = [], [] + for node in cur_level: + tmp_res.append(node.val) + if node.left: + next_level.append(node.left) + if node.right: + next_level.append(node.right) + if level_count % 2 == 0: + res.append(tmp_res) + else: + tmp_res.reverse() + res.append(tmp_res) + level_count += 1 + cur_level = next_level + + return res +``` + + diff --git "a/docs/Leetcode_Solutions/Java/104._maximum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/104._maximum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..451160d32 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/104._maximum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,23 @@ +### 104. Maximum Depth of Binary Tree + +题目: + + + +难度: + +Easy + + +简单题,但是这道题跟[leetcode111](https://github.com/Lisanaaa/thinking_in_lc/blob/master/111._minimum_depth_of_binary_tree.md)不一样,这道题没有特殊情况,所以一行就够了 + + +```python +class Solution(object): + def maxDepth(self, root): + """ + :type root: TreeNode + :rtype: int + """ + return 1 + max(map(self.maxDepth, (root.left, root.right))) if root else 0 +``` diff --git "a/docs/Leetcode_Solutions/Java/105._construct_binary_tree_from_preorder_and_inorder_traversal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/105._construct_binary_tree_from_preorder_and_inorder_traversal \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..7ed244dd9 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/105._construct_binary_tree_from_preorder_and_inorder_traversal \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,100 @@ +###105. Construct Binary Tree from Preorder and Inorder Traversal + +题目: + + + +难度 : Medium + + +preorder 是 根 -> 左 -> 右 +inorder 是 左 -> 根 -> 右 + + +首先pre的第一个就是整个树的root, 假设 pre[0] = in[k],那么in的前k-1个就是树的左子树,后面部分就是树的右子树,这样递归来看. + +然后递归来看,对于前k-1个又是同样的道理吧。 + +然后用递归,写了一颗小树测试,感觉上是对的, + + +``` +class TreeNode(object): + def __init__(self, x): + self.val = x + self.left = None + self.right = None + +nodeA = TreeNode('A') +nodeB = TreeNode('B') +nodeC = TreeNode('C') +nodeD = TreeNode('D') +nodeE = TreeNode('E') +nodeF = TreeNode('F') + +nodeA.left = nodeB +nodeA.right = nodeC +nodeB.left = nodeD +nodeB.right = nodeE +nodeC.left = nodeF + + + # A + # / \ + # B C + # / \ / + # D E F + + +def construct(preorder, inorder): + if preorder == inorder == []: + return None + else: + rootVal = preorder[0] + root = TreeNode(rootVal) + k = inorder.index(rootVal) + if len(preorder) == len(inorder) == 1: + return root + else: + root.left = construct(preorder[1:1+k],inorder[:k]) + root.right = construct(preorder[k+1:],inorder[k+1:]) + return root +root = construct(['A','B','D','E','C','F'],['D','B','E','A','F','C']) + +``` + +尝试AC发现,memory limit超,用大一点的数据测试RecursionError: maximum recursion depth exceeded。 + +根据网上的参考改成偏iteration一点的递归, AC通过 + +mark一下,为了避免数组的复杂操作,这里直接用左右界和数组的引用来代表一段前序遍历和中序遍历。直接用递归更改list本身不能AC,但是变成这样就可以AC,因为更改数组会拷贝数组带来很多内存和递归上的麻烦,是这样的么? + +这个技巧还比较常见,就是用原本list的角标,而不去cut list本身 + + +``` +class Solution(object): + def buildTree(self, preorder, inorder): + """ + :type preorder: List[int] + :type inorder: List[int] + :rtype: TreeNode + """ + def buildTree(preorder, inorder, lp, rp, li, ri): + if lp > rp or li > ri: + return None + + root = TreeNode(preorder[lp]) + k = inorder.index(preorder[lp]) + + # left node + left = buildTree(preorder, inorder, lp+1, lp + k - li, li, k - 1) + right = buildTree(preorder, inorder, lp + k - li + 1, rp, k+1, ri) + + root.left = left + root.right = right + + return root + + return buildTree(preorder, inorder, 0 , len(preorder) - 1, 0, len(inorder) -1) +``` diff --git "a/docs/Leetcode_Solutions/Java/106._construct_binary_tree_from_inorder_and_postorder_traversal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/106._construct_binary_tree_from_inorder_and_postorder_traversal \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..61331c520 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/106._construct_binary_tree_from_inorder_and_postorder_traversal \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,68 @@ +###106. Construct Binary Tree from Inorder and Postorder Traversal + +题目: + + + +难度 : Medium + + +inorder 是 左 -> 根 -> 右 +postorder 是 左 -> 右 -> 根 + + +跟105基本一样 + +还是先弄了一个递归可用版本 + + +``` +def buildTree(inorder, postorder): + """ + :type preorder: List[int] + :type inorder: List[int] + :rtype: TreeNode + """ + if postorder == inorder == []: + return None + else: + rootVal = postorder[-1] + root = TreeNode(rootVal) + k = inorder.index(rootVal) + root.left = buildTree(inorder[:k],postorder[:k]) + root.right = buildTree(inorder[k+1:],postorder[k:-1]) + return root + +``` +照抄105 + + +``` +class Solution(object): + def buildTree(self, inorder, postorder): + """ + :type inorder: List[int] + :type postorder: List[int] + :rtype: TreeNode + """ + def buildTree(inorder, postorder, li, ri ,lp, rp ): + if lp > rp or li > ri: + return None + + root = TreeNode(postorder[rp]) + k = inorder.index(postorder[rp]) + + # left node + left = buildTree(inorder, postorder, li, k-1, lp, lp + k - li - 1) + right = buildTree(inorder, postorder, k+1, ri, lp+k-li, rp-1) + + root.left = left + root.right = right + + return root + + return buildTree(inorder, postorder, 0, len(inorder) - 1, 0, len(postorder) - 1) + +``` + + diff --git "a/docs/Leetcode_Solutions/Java/107._binary_tree_level_order_traversal_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/107._binary_tree_level_order_traversal_ii \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..a7fd3d732 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/107._binary_tree_level_order_traversal_ii \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,48 @@ +###107. Binary Tree Level Order Traversal II + +题目: + + + + +难度: + +Easy + + +用102 的算法作弊 + + +``` +# Definition for a binary tree node. +# class TreeNode(object): +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None + +class Solution(object): + def levelOrderBottom(self, root): + """ + :type root: TreeNode + :rtype: List[List[int]] + """ + res = [] + + if root == None: return [] + + curLevel = [root] + while curLevel: + nextLevel = [] + tmpRes = [] + for node in curLevel: + tmpRes.append(node.val) + if node.left: nextLevel.append(node.left) + if node.right: nextLevel.append(node.right) + res.append(tmpRes) + curLevel = nextLevel + res.reverse() + return res +``` + + diff --git "a/docs/Leetcode_Solutions/Java/108._convert_sorted_array_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/108._convert_sorted_array_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..12705f918 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/108._convert_sorted_array_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,41 @@ +###108. Convert Sorted Array to Binary Search Tree + +题目: + + + +难度: +Medium + + +思路: + +递归 + +- nums为空,return None +- nums 只有一个, return其为根节点 +- nums 大于一个,nums[n/2]为中间元素,根结点,nums[:mid]为左子树, nums[mid+1:]为右子树 + + +``` +class Solution(object): + def sortedArrayToBST(self, nums): + """ + :type nums: List[int] + :rtype: TreeNode + """ + n = len(nums) + + if n == 0 : + return None + if n == 1 : + return TreeNode(nums[0]) + else: + mid = n / 2 + root = TreeNode(nums[mid]) + root.left = self.sortedArrayToBST(nums[:mid]) + root.right = self.sortedArrayToBST(nums[mid+1:]) + return root + + +``` diff --git "a/docs/Leetcode_Solutions/Java/109._convert_sorted_list_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/109._convert_sorted_list_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..4ca36dc47 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/109._convert_sorted_list_to_binary_search_tree \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,47 @@ +###109. Convert Sorted List to Binary Search Tree + + + +题目: + + + +难度: + +Medium + +思路: + +跟解array to binary search tree一样,递归,找到list中间点,把它变成root,左边为左树,右边为右子树 + +值得注意的是需要找到的是list中间的前一个,所以用一个dummy node,然后反复使用linked list找中点的代码 + +``` +class Solution(object): + def sortedListToBST(self, head): + """ + :type head: ListNode + :rtype: TreeNode + """ + + if head == None: + return None + elif head.next == None: + return TreeNode(head.val) + else: + dummy = ListNode(-1) + dummy.next = head + slow, fast = dummy, dummy + while fast.next and fast.next.next: + slow = slow.next + fast = fast.next.next + + # print slow.val + mid = slow.next + slow.next = None + + root = TreeNode(mid.val) + root.left = self.sortedListToBST(head) + root.right = self.sortedListToBST(mid.next) + return root +``` diff --git "a/docs/Leetcode_Solutions/Java/110._balanced_binary_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/110._balanced_binary_tree \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..4b32130f9 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/110._balanced_binary_tree \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,37 @@ +###110. Balanced Binary Tree + +题目: + + + +难度: +Easy + + +全程递归中 + + + +``` +class Solution(object): + def isBalanced(self, root): + """ + :type root: TreeNode + :rtype: bool + """ + if root == None: + return True + + lh = self.height(root.left) + rh = self.height(root.right) + + if abs(lh-rh) <= 1 and self.isBalanced(root.left) and self.isBalanced(root.right): + return True + return False + + + def height(self, node): + if node == None: + return 0 + return 1 + max(self.height(node.left),self.height(node.right)) +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/111._minimum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/111._minimum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..d84421b0c --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/111._minimum_depth_of_binary_tree \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,94 @@ +### 111. Minimum Depth of Binary Tree + +题目: + + + +难度: + +Easy + + +思路,看完题目我想当然的认为就是直接递归取最小的值,代码如下: +``` +class Solution(object): + def minDepth(self, root): + """ + :type root: TreeNode + :rtype: int + """ + if not root: + return 0 + return 1 + min(map(self.minDepth, (root.left, root.right))) +``` + + +但是没过,有一种特殊情况就是 + +注意```leaf node```反正就是没有```left```和```right```的 + +比如下图 + + +``` +1 + \ + 2 +``` + +```2```是一个孩子节点 + +这种情况应该输出```2```而不是```1``` + + + +唯一的特殊情况就是上面这种了,因为```root```下只有一个左节点或者是右节点,这样另外一边的空节点并不算是```leaf node``` + +```leaf node: itself is not null but it has both children null``` + +因此要避免这种情况,代码改成下面: + + +```python +# Definition for a binary tree node. +# Definition for a binary tree node. +# class TreeNode(object): +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None + +class Solution(object): + def minDepth(self, root): + """ + :type root: TreeNode + :rtype: int + """ + if not root: + return 0 + depth_under_root = map(self.minDepth, (root.left, root.right)) + return 1 + (min(depth_under_root) or max(depth_under_root)) +``` + + +所以还是要养成多写edge case的好习惯,也许就帮你避免了general写法的特例,代码如下 +```python +class Solution(object): + def minDepth(self, root): + """ + :type root: TreeNode + :rtype: int + """ + if root == None: + return 0 + elif root.left == None and root.right == None: + return 1 + else : + if root.left == None: + return 1 + self.minDepth(root.right) + elif root.right == None: + return 1 + self.minDepth(root.left) + else: + return min(1+ self.minDepth(root.left), 1+ self.minDepth(root.right)) + +``` diff --git "a/docs/Leetcode_Solutions/Java/112._path_sum \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/112._path_sum \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..1f6b07a51 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/112._path_sum \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,28 @@ +### 112. Path Sum + +题目: + + + +难度: + +Easy + + +递归 + +```python +class Solution(object): + def hasPathSum(self, root, sum): + """ + :type root: TreeNode + :type sum: int + :rtype: bool + """ + if not root: + return False + if root.left or root.right: + return self.hasPathSum(root.left, sum-root.val) or self.hasPathSum(root.right, sum-root.val) + else: + return root.val == sum +``` diff --git "a/docs/Leetcode_Solutions/Java/113._path_sum_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/113._path_sum_ii \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..d1f2ea9c6 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/113._path_sum_ii \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,40 @@ +### 113. Path Sum II + +题目: + + + + + +tag : DFS + + +难度 : Medium + + +注意宁愿写几次curList + [root.val] 也不要直接传一个list进去,因为list pass by reference的亏已经吃过了 + +```python +class Solution(object): + def pathSum(self, root, sum): + """ + :type root: TreeNode + :type sum: int + :rtype: List[List[int]] + """ + res = [] + self.auxPathSum(root, sum, [], res) + return res + def auxPathSum(self, root, sum, cur_list, cur_lists): + if not root: + return + sum -= root.val + if sum == 0 and not root.left and not root.right: + cur_lists.append(cur_list + [root.val]) + return + if root.left: + self.auxPathSum(root.left, sum, cur_list + [root.val], cur_lists) + if root.right: + self.auxPathSum(root.right, sum, cur_list + [root.val], cur_lists) +``` + diff --git "a/docs/Leetcode_Solutions/Java/114._flatten_binary_tree_to_linked_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/114._flatten_binary_tree_to_linked_list \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..81ad647ca --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/114._flatten_binary_tree_to_linked_list \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,71 @@ +### 114. Flatten Binary Tree to Linked List + +题目: + + + +难度: + +Medium + +这道题看了hint,说每个node的右节点都是相应先序遍历中它的下一个节点。 +所以我的思路是先把先序遍历的node顺序搞出来,然后对于这里面的每一个节点,只需要做两个操作: +1. node.left = None +2. node.right = 相应先序遍历中node的下一个节点 + +```python +class Solution(object): + def flatten(self, root): + """ + :type root: TreeNode + :rtype: void Do not return anything, modify root in-place instead. + """ + def preorder(root): + res = [] + if not root: + return res + res.append(root) + if root.left: + res.extend(preorder(root.left)) + if root.right: + res.extend(preorder(root.right)) + return res + if not root: + return + node_order = preorder(root) + for i in range(len(node_order)-1): + node_order[i].left = None + node_order[i].right = node_order[i+1] + node_order[-1].left = None + node_order[-1].right = None +``` +beat 40.67% + +另外一种解法: +1. copy the left and right subtree +2. then cut root’s left subtree +3. do DFS +4. left and right has been flattened and connect them left and right back to the root + +```python +class Solution(object): + def flatten(self, root): + """ + :type root: TreeNode + :rtype: void Do not return anything, modify root in-place instead. + """ + if not root: + return + left_node = root.left + right_node = root.right + root.left = None + self.flatten(left_node) + self.flatten(right_node) + if left_node: + root.right = left_node + while left_node.right: + left_node = left_node.right + left_node.right = right_node +``` +beat 32.18% + diff --git "a/docs/Leetcode_Solutions/Java/116._populating_next_right_pointers_in_each_node \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/116._populating_next_right_pointers_in_each_node \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..ed51a5c1e --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/116._populating_next_right_pointers_in_each_node \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,36 @@ +###116. Populating Next Right Pointers in Each Node + +题目: + + + + +难度: + +Medium + +思路: 跟level print一样,把每个level由左到右记录。 +然后这层level的右指向右,最后一个指向None。 +处理一下边界条件,完工。 + +看题目tag给的DFS,所以是否有哪种push & pop stack的方法可以特别来处理指向呢-》 有待研究 + +``` +class Solution(object): + def connect(self, root): + """ + :type root: TreeLinkNode + :rtype: nothing + """ + if root == None: return root + thislevel = [root] + while thislevel: + nextlevel = list() + for n in thislevel: + if n.left: nextlevel.append(n.left) + if n.right: nextlevel.append(n.right) + for i in range(len(thislevel)-1): + thislevel[i].next = thislevel[i+1] + thislevel[-1].next = None + thislevel = nextlevel +``` diff --git "a/docs/Leetcode_Solutions/Java/118._pascal's_triangle \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/118._pascal's_triangle \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..72e7a44f9 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/118._pascal's_triangle \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,36 @@ +###118. Pascal's Triangle + +题目: + + + + +难度: + +Easy + + +高中数学知识,把行数理理清楚就ok + + +``` +class Solution(object): + def generate(self, numRows): + """ + :type numRows: int + :rtype: List[List[int]] + """ + res = [[1],[1,1]] + if numRows < 3: + return res[:numRows] + for i in range(3, numRows+1): + tmp = [1] * i + for j in range(1,i-1): + tmp[j] = res[i-2][j-1] + res[i-2][j] + res.append(tmp) + return res + + +``` + + diff --git "a/docs/Leetcode_Solutions/Java/119. Pascal's Triangle II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/119. Pascal's Triangle II \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..dbf97df9d --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/119. Pascal's Triangle II \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,59 @@ +### 119. Pascal's Triangle II + +题目: + + +难度 : Easy + + + +思路: + +高中数学 + + + +这种算法会超时||| + +``` +class Solution(object): + def getRow(self, rowIndex): + """ + :type rowIndex: int + :rtype: List[int] + """ + def combNum(n,k): + if k == 0 or k == n : + return 1 + return combNum(n-1,k-1) + combNum(n-1,k) + res = [] + for i in range(rowIndex + 1): + res.append(combNum(rowIndex,i)) + + return res +``` + + + +用118改的,AC代码 + + + +``` +class Solution(object): + def getRow(self, rowIndex): + """ + :type rowIndex: int + :rtype: List[int] + """ + res = [[1],[1,1]] + if rowIndex < 2: + return res[rowIndex] + for i in range(3, rowIndex+2): + tmp = [1] * i + for j in range(1,i-1): + tmp[j] = res[i-2][j-1] + res[i-2][j] + res.append(tmp) + return res[-1] +``` + diff --git "a/docs/Leetcode_Solutions/Java/120. Triangle \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/120. Triangle \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..954a28cb8 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/120. Triangle \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,72 @@ +### 120. Triangle + +题目: + + + +难度: +Medium + +思路: + +先是要注意下这句话:**Each step you may move to adjacent numbers on the row below** + +在考虑adjacent number的定义,并不是角标的adjacent,而是真的形态上的adjacent + +比如 + +``` + -1 -1 + 2 1 最小 1 0 +-2 2 0 -1 2 0 +``` + +最小是-1, 而并不能从第二排的0跳到第三排的第一个造成-2. + + so AC代码 + +感觉关于dp,我可能还需要补一些东西,因为我不能做到O(n) space + +``` +class Solution(object): + def minimumTotal(self, triangle): + """ + :type triangle: List[List[int]] + :rtype: int + """ + # n total rows of triangle + n = len(triangle) + if n == 1: return triangle[0][0] + elif n == 2 : return min(triangle[0][0] + triangle[1][0], triangle[0][0] + triangle[1][1]) + else: + res = [] + for i in range(n): + res.append(triangle[i]) + + res[0] = [triangle[0][0]] + res[1] = [triangle[0][0] + triangle[1][0], triangle[0][0] + triangle[1][1]] + + for i in range(2,n): + for j in range(i+1): + if j == 0: + res[i][j] = res[i-1][j] + triangle[i][j] + elif j == i: + res[i][j] = res[i-1][-1] + triangle[i][j] + else: + res[i][j] = min(res[i-1][j-1],res[i-1][j]) + triangle[i][j] + + return min(res[-1]) +``` + + + + + + + + + + + + + diff --git "a/docs/Leetcode_Solutions/Java/121._Best_Time_to_Buy_and_Sell_Stock \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/121._Best_Time_to_Buy_and_Sell_Stock \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..2edfa898b --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/121._Best_Time_to_Buy_and_Sell_Stock \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,59 @@ +### 121. Best Time to Buy and Sell Stock + +题目: + + + +难度: + +Easy + + +思路 + +All the straight forward solution should work, but if the interviewer twists the question slightly +by giving the difference array of prices, Ex: for ```{1, 7, 4, 11}```, if he gives ```{0, 6, -3, 7}```, +you might end up being confused. + +Here, the logic is to calculate the difference ```(maxCur += prices[i] - prices[i-1])``` +of the original array, and find a contiguous subarray giving maximum profit. +If the difference falls below ```0```, reset it to zero. + +参考[Maximum subarray problem](https://en.wikipedia.org/wiki/Maximum_subarray_problem), +[Kadane's Algorithm](https://discuss.leetcode.com/topic/19853/kadane-s-algorithm-since-no-one-has-mentioned-about-this-so-far-in-case-if-interviewer-twists-the-input) + + +``` +Why maxCur = Math.max(0, maxCur += prices[i] - prices[i-1]); ? + +Well, we can assume opt(i) as the max Profit you will get if you sell the stock at day i; + +We now face two situations: + +We hold a stock at day i, which means opt(i) = opt(i - 1) - prices[i - 1] + prices[i] (max Profit you can get if you sell stock at day(i-1) - money you lose if you buy the stock at day (i-1) + money you gain if you sell the stock at day i. + +We do not hold a stock at day i, which means we cannot sell any stock at day i. In this case, money we can get at day i is 0; + +opt(i) is the best case of 1 and 2. + +So, opt(i) = Max{opt(i - 1) - prices[i - 1] + prices[i], 0} +``` + + +```python +class Solution(object): + def maxProfit(self, prices): + """ + :type prices: List[int] + :rtype: int + """ + if not prices: + return 0 + res, max_cur = 0, 0 + for i in range(1, len(prices)): + max_cur = max(0, max_cur+prices[i]-prices[i-1]) + res = max(res, max_cur) + return res +``` + + diff --git "a/docs/Leetcode_Solutions/Java/125._valid_palindrome \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/125._valid_palindrome \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..d3e09f6c2 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/125._valid_palindrome \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,46 @@ +### 125. Valid Palindrome + +题目: + + + +难度: + +Easy + + + +就是比较reversed string 和原本的是否相等. + + +```python +class Solution(object): + def isPalindrome(self,s): + """ + :type s: str + :rtype: bool + """ + + new=[] + s = s.lower() + + for i in s: + if '0'<=i<='9' or 'a'<=i<='z': + new.append(i) + + return new == new[::-1] +``` + +或者用正则,详见[re.sub()用法](http://blog.csdn.net/geekleee/article/details/75309433) +瞬间```beats 97.71%``` +```python +class Solution(object): + def isPalindrome(self, s): + """ + :type s: str + :rtype: bool + """ + newString = re.sub("[^0-9a-zA-Z]+", "", s) + return newString.lower() == newString.lower()[::-1] +``` + diff --git "a/docs/Leetcode_Solutions/Java/126. Word Ladder II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/126. Word Ladder II \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..99e75f495 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/126. Word Ladder II \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,99 @@ +### 126. Word Ladder II + +题目: + + + +难度: + +Hard + +其实关键在于怎么优化和表示图 + + + +思路来自1p3a: + +这题目实在是太适合python了  如此简洁 + +就是基本的bfs,典型的level order traverse +有两个坑: + +1. 不要判断字典里的某两个word是否只相差一个字母,而是要判断某个word的邻居(和他只相差一个字母的所有word)是否在字典里,这样的改进会使这一步的复杂度下降很多,否则超时妥妥 +2. 每一轮访问过的word一定要从字典中删除掉,否则一定会超时 + +最后见到end word就收 +完成 + + + +拿题目的例子来看: + +```\ + hit + | + hot + / \ + dot lot + | | + dog log + \ / + cog +``` + +routine 字典,然后再根据这个来寻找路径 + +`{'cog': ['log', 'dog'], 'hit': [], 'log': ['lot'], 'dog': ['dot'], 'hot': ['hit'], 'lot': ['hot'], 'dot': ['hot']}` + +```'cog': ['log', 'dog']```这里的意思就是说在走到```'cog'```之前尝试过了```'log'```和```'dog'```,即previous tried node + +而生成字典的过程就是BFS的,此处保证寻找的路径就是最短的。 + +AC代码: + +```python +class Solution(object): + def findLadders(self, beginWord, endWord, wordList): + """ + :type beginWord: str + :type endWord: str + :type wordList: List[str] + :rtype: List[List[str]] + """ + + def backtrack(result, trace, path, word): + if len(trace[word]) == 0: + result.append([word] + path) + else: + for prev in trace[word]: + backtrack(result, trace, [word] + path, prev) + + lookup = set(wordList) | set([beginWord]) + res, cur, routine = [], set([beginWord]), {word: [] for word in lookup} + while cur and endWord not in cur: + next_queue = set() + for word in cur: + lookup.remove(word) + for word in cur: + for i in range(len(word)): + for j in 'abcdefghijklmnopqrstuvwxyz': + candidate = word[:i] + j + word[i + 1:] + if candidate in lookup: + next_queue.add(candidate) + routine[candidate].append(word) + cur = next_queue + + if cur: + backtrack(res, routine, [], endWord) + return res +``` + + + +这样可以beat 69.09% + + + + + + diff --git "a/docs/Leetcode_Solutions/Java/127._word_ladder \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/127._word_ladder \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..42a14a7af --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/127._word_ladder \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,43 @@ +### 127. Word Ladder + +题目: + + + + +难度: + +Medium + +tag可以算BFS,其实就是求shortest path的变体 + +Reference from [kamyu104](https://github.com/kamyu104/LeetCode/blob/71e0ba555ee49befa01fcd9fc78c3528e2ab63a9/Python/word-ladder.py) + +```python +class Solution(object): + def ladderLength(self, beginWord, endWord, wordList): + """ + :type beginWord: str + :type endWord: str + :type wordList: List[str] + :rtype: int + """ + distance, cur, visited, lookup = 0, [beginWord], set([beginWord]), set(wordList) + + while cur: + next_queue = [] + + for word in cur: + if word == endWord: + return distance + 1 + for i in xrange(len(word)): + for j in 'abcdefghijklmnopqrstuvwxyz': + candidate = word[:i] + j + word[i + 1:] + if candidate not in visited and candidate in lookup: + next_queue.append(candidate) + visited.add(candidate) + distance += 1 + cur = next_queue + + return 0 +``` diff --git "a/docs/Leetcode_Solutions/Java/128._Longest_Consecutive_Sequence \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/128._Longest_Consecutive_Sequence \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..53e57505e --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/128._Longest_Consecutive_Sequence \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,70 @@ +### 128. Longest Consecutive Sequence + +题目: + + + +难度: + +Hard + + +### 思路 +首先去重复,时间```O(N)```,然后将所有元素都放到一个字典中,这样判断一个数字的后续在不在这个字典中,如果存在就一直判断下去,每次判断只要```O(1)```。 + +对于每个数,如果他的前续已经判断过了,他就没有必要判断了,继续判断下一个数,即: +``` +if num - 1 in nums: + continue +``` + + +AC代码: + +```python +class Solution(object): + def longestConsecutive(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + nums = set(nums) + tmp = {} + for num in nums: + tmp[num] = 1 + res = 0 + for num in nums: + if num - 1 not in nums: + y = num + 1 + while y in nums: + y += 1 + res = max(res, y - num) + return res +``` + +但其实```set```和字典的```in```判断都是```O(1)``` + +```dict```与```set```实现原理是一样的,都是将实际的值放到```list```中。唯一不同的在于hash函数操作的对象,对于```dict```,```hash```函数操作的是其```key```,而对于```set```是直接操作的它的元素,假设操作内容为```x```,其作为因变量,放入```hash```函数,通过运算后取```list```的余数,转化为一个```list```的下标,此下标位置对于```set```而言用来放其本身,而对于```dict```则是创建了两个```list```,一个```list```该下表放此```key```,另一个```list```中该下标方对应的```value```。参考[python dict与set 的实现](http://www.cnblogs.com/pengsixiong/p/5326893.html) + +  其中,我们把实现set的方式叫做Hash Set,实现dict的方式叫做Hash Map/Table(注:map指的就是通过key来寻找value的过程) + +```set```和```dict```的唯一区别仅在于没有存储对应的```value```,但是,```set```的原理和```dict```一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证```set```内部“不会有重复元素”。 + +因此,代码也可以写成这样 +```python +class Solution(object): + def longestConsecutive(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + nums = set(nums) + res = 0 + for num in nums: + if num - 1 not in nums: + y = num + 1 + while y in nums: + y += 1 + res = max(res, y - num) + return res +``` diff --git "a/docs/Leetcode_Solutions/Java/129._sum_root_to_leaf_numbers \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/129._sum_root_to_leaf_numbers \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..cedbdcd74 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/129._sum_root_to_leaf_numbers \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,37 @@ +###129. Sum Root to Leaf Numbers + +题目: + + + +难度: + +Medium + +其实递归不难想到,不过我自己做错在细节方面 + +如果只有单支,每朝下走一层,代表的数字都增加10, 10* 原本的 + 新节点的数字,最终也是用这个来解 + +``` +class Solution(object): + def sumNumbers(self, root): + """ + :type root: TreeNode + :rtype: int + """ + return self.calSum(root,0) + + + def calSum(self,root,curSum): + if root == None: + return 0 + else: + curSum = curSum * 10 + root.val + if root.left == None and root.right == None: + return curSum + else: + return self.calSum(root.left, curSum) + self.calSum(root.right, curSum) + + + +``` diff --git "a/docs/Leetcode_Solutions/Java/130._surrounded_regions \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/130._surrounded_regions \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..a0f76e264 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/130._surrounded_regions \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,147 @@ +###130. Surrounded Regions + + +题目: + + + + +难度: + +Medium + + +思路: + +loop,然后碰到O做DFS/BFS找出O所在区域: + +- 貌似只要O没有碰壁,O就总是被X包围着? +- 所以找出O的范围,然后看它是否碰壁,没有碰壁则mark不需要修改 + +但是这道题折磨我了很久,因为它有毛病。。。。 +它给的input例子是 +["XXX","XOX","XXX"] +也怪我 input写着List[List[str]] + +但实际上的输入是: +[[u'X', u'X', u'X'], [u'X', u'X', u'X'], [u'X', u'X', u'X']] + + +还要mark unicode + +还有就是学会了新的可以函数之下定义函数,这样就不用什么self了,用起来真方便,但是这样的思路做起来会超时。 + + + +``` +class Solution(object): + def solve(self, board): + """ + :type board: List[List[str]] + :rtype: void Do not return anything, modify board in-place instead. + """ + + + def shouldOChange(i, j): + """ + return x,y area and whether they shouldChange + """ + shouldChange = True + Oarea = [] + s = [] + s.append((i,j)) + while s: + (x,y) = s.pop() + if x == 0 or x == row - 1 or y == 0 or y == col -1 : + shouldChange = False + visited[x][y] = 1 + Oarea.append((x,y)) + if legal(x-1,y): + s.append((x-1,y)) + if legal(x+1,y): + s.append((x+1,y)) + if legal(x,y-1): + s.append((x,y-1)) + if legal(x,y-1): + s.append((x,y+1)) + return Oarea,shouldChange + + def legal(x,y): + return x>=0 and x < row and y>=0 and y < col and board[x][y] == 'O' and visited[x][y] == 0 + + + row = len(board) + col = len(board[0]) if row else 0 + + visited = [[0 for i in range(col)] for j in range(row)] + + for i in range(row): + for j in range(col): + if board[i][j] == 'O' and visited[i][j] == 0: + Oarea, shouldChange = shouldOChange(i,j) + print Oarea,shouldChange + if shouldChange: + for (x,y) in Oarea: + board[x][y] = u'X' + + print board +``` + + +另一个思路就是对周围碰壁的O做BFS/DFS,碰壁的和碰壁相连的是不需要修改的。这样就时间复杂度降低很多了。 + +原本是O(n^2)可能做DFS/BFS。现在是O(4n)做DFS/BFS,但是发现依旧超时,最后查看了别人的解法,因为我的解法里面多了一个存储工具,相当于,把需要更换location的位置存储起来,最后做loop的时候去查,然后这样还是很耗时。 + +而一个简便的变法是把这些特别的碰壁的'O' mark出来,这样最后loop的时候不改变这些'O',只改变不碰壁的'O',又可以减少工作量。同时依旧可以使用collection里面的queue + + + +AC代码 + +``` +class Solution(object): + def solve(self, board): + """ + :type board: List[List[str]] + :rtype: void Do not return anything, modify board in-place instead. + """ + def legal(x,y): + return x>=0 and x < row and y>=0 and y < col and board[x][y] == 'O' and visited[x][y] == 0 + + + row = len(board) + col = len(board[0]) if row else 0 + + visited = [[0 for i in range(col)] for j in range(row)] + + notChangeOArea = [] + queue = collections.deque() + + for j in range(col): + if board[0][j] == 'O': queue.append((0,j)) + if board[row-1][j] == 'O': queue.append((row-1,j)) + for i in range(row): + if board[i][0] == 'O': queue.append((i,0)) + if board[i][col-1] == 'O': queue.append((i,col-1)) + + while queue: + (x,y) = queue.popleft() + board[x][y] = '$' + visited[x][y] = 1 + if legal(x-1,y): + queue.append((x-1,y)) + if legal(x+1,y): + queue.append((x+1,y)) + if legal(x,y-1): + queue.append((x,y-1)) + if legal(x,y+1): + queue.append((x,y+1)) + + for i in range(row): + for j in range(col): + if board[i][j] == '$' : board[i][j] = 'O' + elif board[i][j] == 'O' : board[i][j] = 'X' +``` + + +同时发现,用这种方式,无论是否使用collection里面的queue,都能AC \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/131._palindrome_partitioning \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/131._palindrome_partitioning \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..45d404c89 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/131._palindrome_partitioning \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,48 @@ +###131. Palindrome Partitioning + +题目: + + + +难度: +Medium + +知道一定是用递归做,但是在怎么拆的部分疑惑了,然后看了hint + +key部分长这样,拆法是类似于combination,然后这个len(s) == 0是确保能被拆为palindrome,因为这样剩下的string才是空的 + + +这个recursion tree是这样的,感觉时间复杂度是O(n!),因为每次树都branch n个分支 + +``` + +class Solution(object): + def partition(self, s): + """ + :type s: str + :rtype: List[List[str]] + """ + self.res = [] + self.dfs(s,[]) + return self.res + + + def dfs(self, s, stringList): + if len(s) == 0: + self.res.append(stringList) + for i in range(1,len(s)+1): + if self.isPalindrome(s[:i]): + self.dfs(s[i:],stringList + [s[:i]]) + + def isPalindrome(self, s): + if len(s) <= 1: + return True + return s[0] == s[-1] and self.isPalindrome(s[1:-1]) + +a = Solution() +print a.partition("aab") + +# [['a', 'a', 'b'], ['aa', 'b']] +``` + +输出是每次必定从单个char的list开始,然后单个char 配 palindrome word,然后palindrome word再来配char... \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/133._clone_graph \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/133._clone_graph \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..39921e282 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/133._clone_graph \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,66 @@ +###133. Clone Graph + + +题目: + + + +难度: +Medium + + + +思路: + +DFS或者BFS把graph traverse一遍,边traverse边复制。因为nodes are labeled uniquely,这就是方便的地方,但是注意node可能重复和有self-loop. + +所以先建立新的root node,然后有一个dict把node label和node一一对应。 + +用stack来存储原本的graph root node,对原本的graph做DFS,这个时候,如果这个node的neighbor是已经出现过,那么我们就是去修改原本的existNode,让它指向存在的neighbor,否则创建新的,再把它们联系起来,谷歌了一下,别人写的比我更简单。anyway,先AC。 + + + +`if cur.label in createdNodes:`多余。 + + + + +``` +class Solution(object): + def cloneGraph(self, node): + """ + :type node: UndirectedGraphNode + :rtype: UndirectedGraphNode + """ + if node == None: return None + + root = UndirectedGraphNode(node.label) + # must 1 to 1 + createdNodes = {} + createdNodes[root.label] = root + + stack = [] + stack.append(node) + + while stack: + cur = stack.pop() + if cur.label in createdNodes: + existNode = createdNodes[cur.label] + for neighbor in cur.neighbors: + if neighbor.label in createdNodes: + existNeighbor = createdNodes[neighbor.label] + existNode.neighbors.append(existNeighbor) + else: + newNode = UndirectedGraphNode(neighbor.label) + existNode.neighbors.append(newNode) + createdNodes[neighbor.label] = newNode + stack.append(neighbor) + return root +``` + + + +看了别人的代码,貌似比我又写的简洁。 + + + diff --git "a/docs/Leetcode_Solutions/Java/136._single_number \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/136._single_number \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..18540da0f --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/136._single_number \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,42 @@ +### 136. Single Number + + + +题目: + + + +难度: + +Easy + + +思路: + +位运算,终于要take it了 + +非常常见的一道算法题,将所有数字进行异或操作即可。对于异或操作明确以下三点: + +- 一个整数与自己异或的结果是0 +- 一个整数与0异或的结果是自己 +- 异或操作满足交换律,即a^b=b^a + +Python的位操作: + + +神奇的解法: + + +```python +class Solution(object): + def singleNumber(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + res = nums[0] + for i in nums[1:]: + res ^= i + return res +``` + diff --git "a/docs/Leetcode_Solutions/Java/139._word_break \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/139._word_break \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..815737dec --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/139._word_break \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,59 @@ +### 139. Word Break + +题目: + + + +难度: + +Medium + + + +```ok[i]``` tells whether ```s[:i]``` can be built. + +```python +class Solution(object): + def wordBreak(self, s, wordDict): + """ + :type s: str + :type wordDict: List[str] + :rtype: bool + """ + ok = [True] + for i in range(1, len(s)+1): + ok += [any(ok[j] and s[j:i] in wordDict for j in range(i))] + return ok[-1] +``` + +但是往list里面加数据的方法有快有慢,下面是对比: +``` +>>> from timeit import timeit +>>> timeit('x.append(1)', 'x = []', number=10000000) +1.9880003412529277 +>>> timeit('x += 1,', 'x = []', number=10000000) +1.2676891852971721 +>>> timeit('x += [1]', 'x = []', number=10000000) +3.361207239950204 +``` +因此我们可以将代码直接换成下面的格式 +```python +ok += any(ok[j] and s[j:i] in wordDict for j in range(i)) # 会报错 +``` +但是这样会报错,TypeError: 'bool' object is not iterable,因此bool类型数据不能这样加,别的可以(list类型本身当然要注意哈) + +因此在这个例子中我们这样: +```python +class Solution(object): + def wordBreak(self, s, wordDict): + """ + :type s: str + :type wordDict: List[str] + :rtype: bool + """ + ok = [True] + for i in range(1, len(s)+1): + ok += any(ok[j] and s[j:i] in wordDict for j in range(i)), + return ok[-1] +``` +代码里面的那个逗号构建了一个tuple,也会快一点 diff --git "a/docs/Leetcode_Solutions/Java/140._word_break_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/140._word_break_ii \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..6333bf8fe --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/140._word_break_ii \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,113 @@ + +### 140. Word Break II + +题目: + + + +难度: + +Medium + + + +还是backtracking,会超时 + +``` +class Solution(object): # 此法超时 +    def wordBreak(self, s, wordDict): + """ + :type s: str + :type wordDict: Set[str] + :rtype: bool + """ + self.res = [] + self.wordBreakLst("",s,wordDict) + return self.res + + + def wordBreakLst(self, lst, rest, wordDict): + if rest == '': + self.res.append(lst.rstrip()) + # print lst + for i in range(1+len(rest)): + if rest[:i] in wordDict: + self.wordBreakLst(lst + rest[:i] + " ",rest[i:],wordDict) + +``` + + + + +然后看到有把word break i 结合起来减少时间复杂度的作法。 + + +做法如下,聪明: + +就是对于每一个s,我们来check它是否可以break,如果不可以,就不用做相应的操作了 + + +```python +class Solution(object): + def wordBreak(self, s, wordDict): + """ + :type s: str + :type wordDict: List[str] + :rtype: List[str] + """ + self.res = [] + self.wordBreakLst(s, wordDict, '') + return self.res + + def check(self, s, wordDict): + ok = [True] + for i in range(1, len(s) + 1): + ok += any(ok[j] and s[j:i] in wordDict for j in range(i)), + return ok[-1] + + + def wordBreakLst(self, s, wordDict, stringLst): + if self.check(s, wordDict): + if len(s) == 0 : self.res.append(stringLst[1:]) # 因为最开始也加了一个空格 + for i in range(1,len(s)+1): + if s[:i] in wordDict: + self.wordBreakLst(s[i:], wordDict, stringLst + ' ' + s[:i]) +``` + + +但是其实 + +``` +s = "aaaaaa" +wordDict = ["a","aa","aaa"] +print a.wordBreak(s,wordDict)还是会loop很多次 + +不过像 +s = "aabbb" +wordDict = ["a","abbb"] +就会极其的减少loop次数 +``` + + +看看stefan大神的做法: + +```sentences(i)``` returns a list of all sentences that can be built from the suffix ```s[i:]```. + +```python +class Solution(object): + def wordBreak(self, s, wordDict): + """ + :type s: str + :type wordDict: List[str] + :rtype: List[str] + """ + memo = {len(s): ['']} + def sentences(i): + if i not in memo: + memo[i] = [s[i:j] + (tail and ' ' + tail) + for j in range(i+1, len(s)+1) + if s[i:j] in wordDict + for tail in sentences(j)] + return memo[i] + return sentences(0) +``` diff --git "a/docs/Leetcode_Solutions/Java/141._linked_list_cycle \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/141._linked_list_cycle \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..2d50901e9 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/141._linked_list_cycle \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,105 @@ +### 141. Linked List Cycle + +题目: + + + + +难度: + +Easy + + +想法一: + +直接超时 + +``` +class Solution(object): + def hasCycle(self, head): + """ + :type head: ListNode + :rtype: bool + """ + if head == None: return False + lst = [] + cur = head + while cur: + if cur in lst: + return True + lst.append(cur) + cur = cur.next + return False +``` + + + +想法二:相当用boolean array记录某个点是否被访问过,时间,空间复杂度都是O(n) + +``` +class Solution(object): + def hasCycle(self, head): + """ + :type head: ListNode + :rtype: bool + """ + if head == None: return False + dictx = {} + cur = head + while cur: + if cur in dictx: + return True + dictx[cur] = 1 + cur = cur.next + return False +``` + +结果这种方法的run time还比较快 + +查了一下,有解答说可以有空间复杂度O(1),时间复杂度O(n)。两个指针,一个快一个慢,快的每次走两步,慢的每次走一步,如果有环,最终会在某处相遇。这也是一个算法。这种快慢指针配合已经不是第一次遇到了,比如找linklist中间的node。 + + + +但是并没有觉得这样的算法是O(n), worst case time complexity is O(N+K), which is O(n). + + +```python +python +class Solution(object): + def hasCycle(self, head): + """ + :type head: ListNode + :rtype: bool + """ + slow = head + fast = head + while fast and fast.next: + slow = slow.next + fast = fast.next.next + if slow == fast: + return True + return False +``` + + +```java +java +public class Solution { + public boolean hasCycle(ListNode head) { + if (head == null){ + return false; + } + ListNode fast = head; + ListNode slow = head; + while (fast != null && slow != null && fast.next != null){ + fast = fast.next.next; + slow = slow.next; + if (slow == fast){ + return true; + } + } + return false; + } +} +``` + diff --git "a/docs/Leetcode_Solutions/Java/142_Linked_List_Cycle_II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/142_Linked_List_Cycle_II \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..cd8875929 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/142_Linked_List_Cycle_II \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,56 @@ +### 142. Linked List Cycle II + +题目: + + + + +难度: + +Medium + +思路: +稍微改了一下[141](https://github.com/Lisanaaa/thinking_in_lc/blob/master/141._linked_list_cycle.md),这里稍微注意一下```while-else clause```就行 + +Let’s say, the first node is node ```0```, the cycle starts at node ```L```, and the length of the cycle is ```C```; +Moreover, after ```t``` steps, ```fast``` catches ```slow```. + +Now we know that fast totally traveled ```2t``` nodes, and slow traveled ```t``` nodes + +Then we have: +```2t - t = nC``` (where ```n``` is an positive integer.) +i.e. ```t=nC``` + +Now, think about that, at step ```t```, if we travels ```L``` more steps, where are we? +i.e. if we travel ```L+t = L + nC``` steps in total, where are we? + +Absolutely, at the start of the cycle, because we have covered the first ```L``` nodes once and the entire cycle ```n``` times. + +So, if we travel ```L``` more steps at time ```t```, then we get the start of the cycle. + +However, how can we travel exactly ```L``` step? +The answer is to use an other pointer to travel from node ```0```, and when they meet together, it is exactly ```L``` steps and both of them are at the start of the cycle. + +参考[LostSummer233的解答](https://leetcode.com/problems/linked-list-cycle-ii/discuss/44833) +```python +class Solution(object): + def detectCycle(self, head): + """ + :type head: ListNode + :rtype: bool + """ + slow = fast = head + while fast and fast.next: + slow = slow.next + fast = fast.next.next + if slow == fast: + break + else: + return None + while head != slow: + slow = slow.next + head = head.next + return head +``` + + diff --git "a/docs/Leetcode_Solutions/Java/143._reorder_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/143._reorder_list \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..59c9fb9fb --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/143._reorder_list \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,112 @@ +###143. Reorder List + +题目: + + + + +难度: + +Medium + +超时 + + +``` + +class Solution(object): + def reorderList(self, head): + """ + :type head: ListNode + :rtype: void Do not return anything, modify head in-place instead. + """ + head = self.reorder(head) + + + def reorder(self, head): + if head == None or head.next == None or head.next.next == None: + return head + + l0 = head + l1 = head.next + ln_1 = self.oneNodeTail(head) + ln =ln_1.next + + l0.next = ln + ln_1.next = None + ln.next = self.reorder(l1) + return l0 + + + def oneNodeTail(self, head): + if head == None or head.next == None or head.next.next == None: + return head + cur = head + while cur.next: + if cur.next.next: + cur = cur.next + else: + break + return cur + +``` + + +取巧的办法是: + +找到中间节点,断开,把后半截linked list reverse,然后合并 √ + +看了AC指南 + +``` +class Solution(object): + def reorderList(self, head): + """ + :type head: ListNode + :rtype: void Do not return anything, modify head in-place instead. + """ + if head == None or head.next == None or head.next.next == None: + return + + slow = head + fast = head + prev = None + + while fast and fast.next: + prev = slow + slow = slow.next + fast = fast.next.next + + prev.next = None + + + slow = self.reverseList(slow) + + cur = head + while cur.next: + tmp = cur.next + cur.next = slow + slow = slow.next + cur.next.next = tmp + cur = tmp + cur.next = slow + + + + def reverseList(self,head): + """ + :type head: ListNode + :rtype: ListNode + """ + prev = None + cur = head + while(cur): + nxt = cur.next + cur.next = prev + prev = cur + cur = nxt + return prev + + +``` + diff --git "a/docs/Leetcode_Solutions/Java/144._binary_tree_preorder_traversal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/144._binary_tree_preorder_traversal \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..8f5e21689 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/144._binary_tree_preorder_traversal \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,81 @@ +### 144. Binary Tree Preorder Traversal + +题目: + + + + +难度: + +Medium + +Recursive,瞬秒 + + +```python +class Solution(object): + def preorderTraversal(self, root): + """ + :type root: TreeNode + :rtype: List[int] + """ + res = [] + if not root: + return res + res.append(root.val) + if root.left: + res.extend(self.preorderTraversal(root.left)) + if root.right: + res.extend(self.preorderTraversal(root.right)) + return res +``` + +```python +class Solution(object): + def preorderTraversal(self, root): + """ + :type root: TreeNode + :rtype: List[int] + """ + if root == None: + return [] + res = [] + self.preorder(root,res) + return res + + + def preorder(self,root,res): + if root == None: + return + res.append(root.val) + self.preorder(root.left,res) + self.preorder(root.right,res) +``` + + +Iterative + + +```python +class Solution(object): + def preorderTraversal(self, root): + """ + :type root: TreeNode + :rtype: List[int] + """ + if root == None: + return [] + res = [] + + stack = [] + stack.append(root) + while stack: + node = stack.pop() + res.append(node.val) + if node.right: + stack.append(node.right) + if node.left: + stack.append(node.left) + return res + +``` diff --git "a/docs/Leetcode_Solutions/Java/145._binary_tree_postorder_traversal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/145._binary_tree_postorder_traversal \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..788cfc623 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/145._binary_tree_postorder_traversal \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,67 @@ +###145. Binary Tree Postorder Traversal + +题目: + + + + +难度: + +Hard + +wikipedia 助你幸福 + +递归版本 + +``` +postorder(node) + if (node = null) + return + postorder(node.left) + postorder(node.right) + visit(node) +``` + + +迭代版本 + +``` +iterativePostorder(node) + s ← empty stack + lastNodeVisited ← null + while (not s.isEmpty() or node ≠ null) + if (node ≠ null) + s.push(node) + node ← node.left + else + peekNode ← s.peek() + // if right child exists and traversing node + // from left child, then move right + if (peekNode.right ≠ null and lastNodeVisited ≠ peekNode.right) + node ← peekNode.right + else + visit(peekNode) + lastNodeVisited ← s.pop() +``` + + + +刷进度直接用递归AC + +``` +class Solution(object): + def postorderTraversal(self, root): + """ + :type root: TreeNode + :rtype: List[int] + """ + self.result = [] + self.postOrder(root) + return self.result + + def postOrder(self, root): + if root == None : return + self.postOrder(root.left) + self.postOrder(root.right) + self.result.append(root.val) +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/147._insertion_sort_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/147._insertion_sort_list \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..b385d14f1 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/147._insertion_sort_list \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,59 @@ +###147. Insertion Sort List + +题目: + + + +难度: +Medium + +insertion sort 也是入门必备,一个元素本身被认为是sort的,一个简单的理解是打牌,然后进入第二个元素的时候,看它是比第一个元素大还是小,做排序,进入下一个元素的时候再看再移。 + +伪码 + +``` +for i ← 1 to length(A)-1 + j ← i + while j > 0 and A[j-1] > A[j] + swap A[j] and A[j-1] + j ← j - 1 + end while +end for +``` + +这个伪码对于list可能适用性没有那么强,则考虑,从第二个node开始,那么从开始开始看,找到这个node应该插入的位置,插入。 + + + +就是这样,就是会超时|||| + +``` +class Solution(object): + def insertionSortList(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + if head == None or head.next == None: + return head + + dummy = ListNode(-1) + dummy.next = head + + prev = head + cur = head.next + + while cur: + p = dummy + while p.next.val <= cur.val and p != prev: + p = p.next + if p != prev: + prev.next = cur.next + cur.next = p.next + p.next = cur + prev = cur + cur = cur.next + + return dummy.next +``` + diff --git "a/docs/Leetcode_Solutions/Java/148._sort_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/148._sort_list \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..7bb4e80b0 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/148._sort_list \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,138 @@ +###148. Sort List + +题目: + + + +难度: +Medium + +MergeSort + +merge sort是必备,divide & conquer的入门之物。 + +merge sort做两件事, sort 和 merge。 + +看一看标准伪码: + +``` +function mergesort(m) + var list left, right, result + if length(m) ≤ 1 + return m + else + var middle = length(m) / 2 + for each x in m up to middle - 1 + add x to left + for each x in m at and after middle + add x to right + left = mergesort(left) + right = mergesort(right) + if last(left) ≤ first(right) + append right to left + return left + result = merge(left, right) + return result + +function merge(left,right) + var list result + while length(left) > 0 and length(right) > 0 + if first(left) ≤ first(right) + append first(left) to result + left = rest(left) + else + append first(right) to result + right = rest(right) + if length(left) > 0 + append rest(left) to result + if length(right) > 0 + append rest(right) to result + return result +``` + +另一处获得伪码 + +``` +MergeSort(arr[], l, r) +If r > l + 1. Find the middle point to divide the array into two halves: + middle m = (l+r)/2 + 2. Call mergeSort for first half: + Call mergeSort(arr, l, m) + 3. Call mergeSort for second half: + Call mergeSort(arr, m+1, r) + 4. Merge the two halves sorted in step 2 and 3: + Call merge(arr, l, m, r) +``` + + +merge sort用在linked list上的好处是不用开辟空间,然后就处理node + +用旧的代码拼装出来的结果 + +然后需要注意的一点是拆分链表,所以有设置left node 的tail为None的操作. + +``` +class Solution(object): + def sortList(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + if head == None or head.next == None: + return head + + mid = self.findMid(head) + # split the + l1 = head + l2 = mid.next + mid.next = None + + l1 = self.sortList(l1) + l2 = self.sortList(l2) + + return self.mergeTwoLists(l1, l2) + + def mergeTwoLists(self, l1, l2): + """ + :type l1: ListNode + :type l2: ListNode + :rtype: ListNode + """ + if l1 == None: + return l2 + if l2 == None: + return l1 + + dummy = ListNode(-1) + cur = dummy + + while l1 and l2: + if l1.val < l2.val: + cur.next = l1 + l1 = l1.next + else: + cur.next = l2 + l2 = l2.next + cur = cur.next + + if l1: + cur.next = l1 + else: + cur.next = l2 + return dummy.next + + def findMid(self,head): + if head == None or head.next == None: + return head + + slow = head + fast = head + + while fast.next and fast.next.next: + slow = slow.next + fast = fast.next.next + + return slow + +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/150._evaluate_reverse_polish_notation \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/150._evaluate_reverse_polish_notation \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..4e2b48aac --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/150._evaluate_reverse_polish_notation \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,83 @@ +###150. Evaluate Reverse Polish Notation + + + +题目: + + + +难度: +Medium + + + +AC代码 + +``` +class Solution(object): + def evalRPN(self, tokens): + """ + :type tokens: List[str] + :rtype: int + """ + def cal(op, op1, op2): + if op == '*': + return op1 * op2 + elif op == '/': + return op1 / float(op2) + elif op == '+': + return op1 + op2 + else: + return op1 - op2 + + operandStack = [] + + for token in tokens: + if token in '+-*/': + op2 = operandStack.pop() + op1 = operandStack.pop() + res = cal(token, op1, op2) + operandStack.append(int(res)) + else: + operandStack.append(int(token)) + + return operandStack.pop() +``` + + +实际上这里有一个很奇(sha)怪(bi)的地方,看到了么,除法➗处,如果我不这么做,就是错的,这是python 2 和 python 3 的除法不一致导致的,所以最终我这样做了才能得到正确答案。 + +思路: + +已经给了我们wikipedia的链接了 + +- While there are input tokens left + - Read the next token from input. + - If the token is a value + - Push it onto the stack. + -Otherwise, the token is an operator (operator here includes both operators and functions). + - It is already known that the operator takes n arguments. + - If there are fewer than n values on the stack + - (Error) The user has not input sufficient values in the expression. + - Else, Pop the top n values from the stack. + - Evaluate the operator, with the values as arguments. + - Push the returned results, if any, back onto the stack. +- If there is only one value in the stack + - That value is the result of the calculation. +- Otherwise, there are more values in the stack + - (Error) The user input has too many values. + + + +再参考这里 + + + + +1. Create an empty stack called operandStack. +2. Convert the string to a list by using the string method split. +3. Scan the token list from left to right. + - If the token is an operand, convert it from a string to an integer and push the value onto the operandStack. + - If the token is an operator, *, /, +, or -, it will need two operands. Pop the operandStack twice. The first pop is the second operand and the second pop is the first operand. Perform the arithmetic operation. Push the result back on the operandStack. +4. When the input expression has been completely processed, the result is on the stack. Pop the operandStack and return the value. + diff --git "a/docs/Leetcode_Solutions/Java/151._reverse_words_in_a_string \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/151._reverse_words_in_a_string \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..10414801b --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/151._reverse_words_in_a_string \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,37 @@ +### 151. Reverse Words in a String + +题目: + + + +难度: +Medium + +太简单了 + +```python +class Solution(object): + def reverseWords(self, s): + """ + :type s: str + :rtype: str + """ + tmp = s.split() + res = " ".join(tmp[::-1]) + return res + +``` + +```python +class Solution(object): + def reverseWords(self, s): + """ + :type s: str + :rtype: str + """ + tmp = s.split() + tmp.reverse() + res = " ".join(tmp) + return res + +``` diff --git "a/docs/Leetcode_Solutions/Java/152._maximum_product_subarray \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/152._maximum_product_subarray \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..7570876fa --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/152._maximum_product_subarray \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,44 @@ +###152. Maximum Product Subarray + + + +题目: + + + +难度: +Medium + +思路: + +粗一看, 一股浓烈的DP气息飘来,想要套用53题的思路和方程。但是这个跟sum是不一样的,因为乘积可以正负正负的跳,这样的动归方程肯定是不对的 + +dp[i] = max(dp[i-1] * a[i],a[i]) + +举个例子 : [-2,3,-4] + + +用O(N^2)超时,厉害啊! + +想,可不可以记录+的和-的,记录两个dp数组,我哭了,真的是这样做的 + +最大值可能来源于最小值 -> 哲学般的句子 + +``` +class Solution(object): + def maxProduct(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + n = len(nums) + maxdp = [ nums[0] for i in range(n)] + mindp = [ nums[0] for i in range(n)] + + + for i in range(1,n): + maxdp[i] = max(mindp[i-1]*nums[i], maxdp[i-1]*nums[i],nums[i]) + mindp[i] = min(maxdp[i-1]*nums[i], mindp[i-1]*nums[i],nums[i]) + + return max(maxdp) +``` diff --git "a/docs/Leetcode_Solutions/Java/153._find_minimum_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/153._find_minimum_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..b46e1950d --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/153._find_minimum_in_rotated_sorted_array \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,85 @@ +###153. Find Minimum in Rotated Sorted Array + + +题目: + + + +难度: + +Medium + + + +思路一: + +O(N) 就不说了 + +思路二: + +想的是分治,两段分别找出最小值,然后取最小值,但是依旧没有利用题目特性,并且也是O(N). + +> We can do it in O(logn) using Binary Search. If we take a closer look at above examples, we can easily figure out following pattern: The minimum element is the only element whose previous element is greater than it. If there is no such element, then there is no rotation and first element is the minimum element. + + +上面提到了一个特性,就是minimum element唯一一个它之前的element比它大的,如果不存在这个element,那么就没有rotation. + + + +思路其实是判断前半部分或者后半部分是否有序,然后来剔除,这里需要注意有比较多的边界case,因为如果就两个,那么会有特殊case 0 ,1 mid = 0,所以可以看一下,它这个处理,最后一个elif 是来比较mid 和 end + + + + + +``` +class Solution(object): + def findMin(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + def findRotatedMin(nums, start, end): + if end < start: + return nums[0] + if start == end: + return nums[start] + mid = (start + end) / 2 + if mid > start and nums[mid] < nums[mid-1]: + return nums[mid] + elif mid < end and nums[mid+1] < nums[mid]: + return nums[mid+1] + elif nums[mid] < nums[end]: + return findRotatedMin(nums,start, mid -1) + return findRotatedMin(nums, mid+1, end) + + + return findRotatedMin(nums,0,len(nums)-1) + +``` + +非递归 + +``` +class Solution(object): + def findMin(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + l,r = 0, len(nums) - 1 + while l < r: + mid = (l+r) / 2 + if mid > l and nums[mid] < nums[mid-1]: + return nums[mid] + elif mid < r and nums[mid] > nums[mid+1]: + return nums[mid+1] + elif nums[mid] < nums[r]: + r = mid -1 + else: + l = mid +1 + return nums[0] + +``` + + diff --git "a/docs/Leetcode_Solutions/Java/155._min_stack \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/155._min_stack \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..fac02c17e --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/155._min_stack \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,169 @@ +### 155. Min Stack + +题目: + + + +难度: + +Easy + +思路一: + +懒,直接用系统的数据结构 +用lst和系统的heapq,提升一下,用deque和heapq,这样也没太大提升 + + +```python +from heapq import * + +class MinStack(object): + + def __init__(self): + """ + initialize your data structure here. + """ + self.lst = [] + self.h = [] + + + def push(self, x): + """ + :type x: int + :rtype: void + """ + self.lst.append(x) + heappush(self.h,x) + + + def pop(self): + """ + :rtype: void + """ + val = self.lst.pop() + self.h.remove(val) + heapify(self.h) + + def top(self): + """ + :rtype: int + """ + return self.lst[-1] + + + def getMin(self): + """ + :rtype: int + """ + return self.h[0] + +``` + +思路二: + + +参考 + +用两个stack,其中一个始终来记录到当前位置的最小值 + + +``` +When we insert 18, both stacks change to following. +Actual Stack +18 <--- top +Auxiliary Stack +18 <---- top + +When 19 is inserted, both stacks change to following. +Actual Stack +19 <--- top +18 +Auxiliary Stack +18 <---- top +18 + +When 29 is inserted, both stacks change to following. +Actual Stack +29 <--- top +19 +18 +Auxiliary Stack +18 <---- top +18 +18 + +When 15 is inserted, both stacks change to following. +Actual Stack +15 <--- top +29 +19 +18 +Auxiliary Stack +15 <---- top +18 +18 +18 + +When 16 is inserted, both stacks change to following. +Actual Stack +16 <--- top +15 +29 +19 +18 +Auxiliary Stack +15 <---- top +15 +18 +18 +18 +``` + +这样无论是用deque还是本身的lst都有一些提升 + + +```python +from collections import deque +class MinStack(object): + + def __init__(self): + """ + initialize your data structure here. + """ + self.lst = deque() + self.aux = deque() + + + def push(self, x): + """ + :type x: int + :rtype: void + """ + self.lst.append(x) + if not self.aux or self.aux[-1] > x: + self.aux.append(x) + else: + self.aux.append(self.aux[-1]) + + + + def pop(self): + """ + :rtype: void + """ + self.lst.pop() + self.aux.pop() + + def top(self): + """ + :rtype: int + """ + return self.lst[-1] + + + def getMin(self): + """ + :rtype: int + """ + return self.aux[-1] +``` diff --git "a/docs/Leetcode_Solutions/Java/159._Longest_Substring_with_At_Most_Two_Distinct_Characters \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/159._Longest_Substring_with_At_Most_Two_Distinct_Characters \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..7d65fb605 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/159._Longest_Substring_with_At_Most_Two_Distinct_Characters \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,32 @@ +### 159. Longest Substring with At Most Two Distinct Characters + +题目: + + + +难度 : Hard + + + +```python +class Solution(object): + def lengthOfLongestSubstringTwoDistinct(self, s): + """ + :type s: str + :rtype: int + """ + maps = {} + begin, end, counter, length = 0, 0, 0, 0 + while end < len(s): + maps[s[end]] = maps.get(s[end], 0) + 1 + if maps[s[end]] == 1: + counter += 1 +            end += 1   # end 永远指向下一个待处理的字符 +            while counter > 2: + maps[s[begin]] -= 1 + if maps[s[begin]] == 0: + counter -= 1 + begin += 1 +            length = max(length, end - begin) # 因此这里是```end - begin```而不是```end - begin + 1``` +        return length +``` diff --git "a/docs/Leetcode_Solutions/Java/160._intersection_of_two_linked_lists \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/160._intersection_of_two_linked_lists \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..b403f01f9 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/160._intersection_of_two_linked_lists \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,59 @@ +### 160. Intersection of Two Linked Lists + +题目: + + + +难度: + +Easy + + +如果两个linkedlist有intersection的话,可以看到,其实如果一开始我们就走到b2的话,那么我们就可以两个pointer一个一个的对比,到哪一个地址一样,接下来就是intersection部分。 + + + +``` +A: a1 → a2 + ↘ + c1 → c2 → c3 + ↗ +B: b1 → b2 → b3 +``` +比较巧妙的数学解法,看下面的解释和代码 + + + +AC代码如下: + +```python +class Solution(object): + def getIntersectionNode(self, headA, headB): + """ + :type head1, head1: ListNode + :rtype: ListNode + """ + pA, pB = headA, headB + while pA is not pB: + pA = pA.next if pA else headB + pB = pB.next if pB else headA + return pA +``` +Just count the number of moves by each pointer before they meet. One pointer will traverse entire list1 for N moves and then jump to the head of list1 to move (M-K) steps to intersection, where K represents the length of common part. Now the other pointer must also moved the same number of steps since they are both moved at the same time. The second pointer traverses the entire list2 for M steps and jumped to the head of list1 to move (N-K) steps. So the loop finished with M+N-K times. +详见[zzg_zzm的评论](https://leetcode.com/problems/intersection-of-two-linked-lists/discuss/49799) + +This algorithm is sooooo perfect! + +I was wonder if the running time is O(n+m), but later I figured out that the actually running time is just: + +- m+n for non-intersection case + +With intersection: + +- Suppose for LL-A, it’s a+b=n, a is the # of nodes before intersection + +- Suppose for LL-B, it’s c+b=m, c is the # of nodes before intersection + +Thus the actual running time is a+b+c = n+c = m+a. + +Actually, when b=0, this just stands for the case with no intersection with a+b+c=n+m diff --git "a/docs/Leetcode_Solutions/Java/162._find_peak_element \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/162._find_peak_element \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..2aad9b1c8 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/162._find_peak_element \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,61 @@ +### 162. Find Peak Element + +题目: + + + +难度: +Medium + + +思路: + + +最直观的是O(N)解法 + +```python +class Solution(object): + def findPeakElement(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + for i in range(1, len(nums)): + if nums[i] < nums[i-1]: + return i-1 + return len(nums) - 1 +``` + +O(lgN) 解法 + +这是一个经典题目 + +- a[mid] < a[mid] only look at the left side +- a[mid] < a[mid] only look at the right side +- else peak found + + +证明就是用反证法,或者看peak,因为这里已经限制了num[i] ≠ num[i+1],所以peak element 一定存在。然后a[mid] < a[mid-1],那么说明这里一定是下降的,说明之前一定有一个peak存在,否则我们可以用反证法证明. + +写到这里,我非常相信就是binary search能写对其实不容易。 + + +AC代码 + +```python +class Solution(object): + def findPeakElement(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + l, r = 0, len(nums) - 1 + while l <= r: + if l == r : return l + mid = l + ((r - l) >> 2) + if nums[mid] < nums[mid+1]: + l = mid + 1 + else: + r = mid +``` + diff --git "a/docs/Leetcode_Solutions/Java/165._compare_version_numbers \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/165._compare_version_numbers \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..ab976ce99 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/165._compare_version_numbers \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,47 @@ +###165. Compare Version Numbers + +题目: + + + +难度: + +Easy + + +其实我并不觉得这个很简单 + +因为可能两个的位数不一样,首端或者尾端需要补0,同时我还考虑过可能有出现多个'.'的状况 + + + +``` +class Solution(object): + def compareVersion(self, version1, version2): + """ + :type version1: str + :type version2: str + :rtype: int + """ + v1 = version1.split('.') + v2 = version2.split('.') + v1 = [int(x) for x in v1] + v2 = [int(x) for x in v2] + + len1 = len(v1) + len2 = len(v2) + lenMax = max(len1, len2) + for x in range(lenMax): + v1Token = 0 + if x < len1: + v1Token = v1[x] + v2Token = 0 + if x < len2: + v2Token = v2[x] + if v1Token > v2Token: + return 1 + elif v1Token < v2Token: + return -1 + return 0 + +``` diff --git "a/docs/Leetcode_Solutions/Java/166._Fraction_to_Recurring_Decimal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/166._Fraction_to_Recurring_Decimal \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..d4285fe4b --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/166._Fraction_to_Recurring_Decimal \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,42 @@ +### 166. Fraction to Recurring Decimal + +题目: + + + +难度: + +Medium + + + + +```python +class Solution: + # @return a string + def fractionToDecimal(self, n, d): + res = '' + if n == 0: # zero numerator + return str(n) + if (n < 0) ^ (d < 0): # determine the sign + res += '-' + n = abs(n) # remove sign of operands + d = abs(d) + res += str(n / d) # append integral part + if (n % d == 0): # in case no fractional part + return res + res += '.' + r = n % d + m = {} + while r: # simulate the division process + if r in m: # meet a known remainder + res = res[:m[r]] + '(' + res[m[r]:] + ')' # so we reach the end of the repeating part + break + m[r] = len(res) # if the remainder is first seen, remember the current position for it + r *= 10 + res += str(r / d) # append the quotient digit + r %= d + return res +``` + + diff --git "a/docs/Leetcode_Solutions/Java/167._two_sum_ii_-_input_array_is_sorted \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/167._two_sum_ii_-_input_array_is_sorted \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..8fcd51708 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/167._two_sum_ii_-_input_array_is_sorted \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,35 @@ +### 167. Two Sum II - Input array is sorted + + + +题目: + + + +难度: +Medium + + +思路: + + +双指针 + +```python +class Solution(object): + def twoSum(self, numbers, target): + """ + :type numbers: List[int] + :type target: int + :rtype: List[int] + """ + l, r = 0, len(numbers) - 1 + while l < r: + if numbers[l] + numbers[r] == target: + return [l+1, r+1] + elif numbers[l] + numbers[r] > target: + r -= 1 + else: + l += 1 + +``` diff --git "a/docs/Leetcode_Solutions/Java/168._excel_sheet_column_title \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/168._excel_sheet_column_title \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..547f083ee --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/168._excel_sheet_column_title \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,28 @@ +###168. Excel Sheet Column Title + +题目: + + + + +难度: + +Easy + +依旧26进制的反击,不过这个反击我做的没之前那个好,看了hint + +``` +class Solution(object): + def convertToTitle(self, n): + """ + :type n: int + :rtype: str + """ + ans = '' + while n : + ans = chr(ord('A') + (n - 1) % 26) + ans + n = (n - 1) // 26 + return ans + +``` + diff --git "a/docs/Leetcode_Solutions/Java/169._majority_element \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/169._majority_element \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..6701ba759 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/169._majority_element \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,74 @@ +###169. Majority Element + + + +题目: + + + +难度: +Easy + +思路: + +其实这个我有点有想到过 + + +给定一个长度为 n的数组,其中有一个数,它出现的次数大于⎣n/2⎦,称为主要元素,找到它. + +这个很像之前做过的一道CLRS的题目,想法可以用divide & conquer. + + +- 如果数组长度 <= 2,那么return第一个即解决问题 +- 如果长度 > 2,那么可以两两配对,对于配对一样的结果,删去 + - 如果最后余一个,这一个留下 + - shuffle之后再尝试两两配对,直到最后结果不再改变 + + 这样肯定是能解决问题的,因为为了满足次数大于⎣n/2⎦这个条件。 + + + + + + +``` + + 1 2 1 2 1 2 1 2 + 2 3 2 3 2 3 2 3 + 2 4 2 2 2 2 3 + 2 4 2 3 3 + 3 2 + 2 2 + 2 2 +``` + +思路容易implement非常难啊. + + + +这个问题有一个很出名的算法 + + +Boyer-Moore众数(majority number) 问题 + +在数组中找到两个不相同的元素并删除它们,不断重复此过程,直到数组中元素都相同,那么剩下的元素就是主要元素。 + + +这个算法的妙处在于不直接删除数组中的元素,而是利用一个计数变量. + +伪码 + + def majorityElement(self, nums): + count,major=0,0 + for n in nums: + if count==0: + major=n + if major==n: + count+=1 + else: + count-=1 + return major + + + + \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/171._excel_sheet_column_number \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/171._excel_sheet_column_number \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..4521f737c --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/171._excel_sheet_column_number \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,34 @@ +###171. Excel Sheet Column Number + +题目: + + + + +难度: + +Easy + + +26进制的反击 + +``` +class Solution(object): + def titleToNumber(self, s): + """ + :type s: str + :rtype: int + """ + maps = {} + for i in range(65,91): + maps[chr(i)] = i - 64 + + lst = list(s) + lst.reverse() + num = 0 + for idx,item in enumerate(lst): + num += maps[item] * (26 ** idx) + return num + +``` + diff --git "a/docs/Leetcode_Solutions/Java/173._binary_search_tree_iterator \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/173._binary_search_tree_iterator \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..a8b6fd9cc --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/173._binary_search_tree_iterator \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,95 @@ +### 173. Binary Search Tree Iterator + +题目: + + + +难度: +Medium + + +同样没有听题目要求,一开始就取巧,用InOrder,这样得到BSF有序排列,然后使用 + + +```python + +class BSTIterator(object): + def __init__(self, root): + """ + :type root: TreeNode + """ + self.root = root + self.lst = [] + self.inOrder(root) + self.lst.reverse() + + + + def hasNext(self): + """ + :rtype: bool + """ + return self.lst != [] + + + def next(self): + """ + :rtype: int + """ + return self.lst.pop() + + def inOrder(self, root): + if root == None: + return + self.inOrder(root.left) + self.lst.append(root.val) + self.inOrder(root.right) + +``` + +谷歌了一下,得到如何满足题目要求的hint,从root开始,往左走,把左孩子压入stack,直到左边为空。 + +然后开始取node,如果node有右孩子,则同样要把node的右孩子的所有左孩子全部append入stack,画了一个图,可行。 + + + + + +```python + +class BSTIterator(object): + def __init__(self, root): + """ + :type root: TreeNode + """ + self.root = root + self.stack = [] + self.pushAllLeft(root) + + + def hasNext(self): + """ + :rtype: bool + """ + return self.stack != [] + + + def next(self): + """ + :rtype: int + """ + if self.hasNext(): + cur = self.stack.pop() + if cur.right: + self.pushAllLeft(cur.right) + return cur.val + + def pushAllLeft(self, node): + """ + :type node: TreeNode + """ + cur = node + while cur: + self.stack.append(cur) + cur = cur.left +``` diff --git "a/docs/Leetcode_Solutions/Java/189._rotate_array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/189._rotate_array \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..080a1e581 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/189._rotate_array \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,23 @@ +###189. Rotate Array + +题目: + + + +难度 : Easy + + +作弊神奇python大法 + +``` +class Solution(object): + def rotate(self, nums, k): + """ + :type nums: List[int] + :type k: int + :rtype: void Do not return anything, modify nums in-place instead. + """ + n = len(nums) + nums[:] = nums[n-k:] + nums[:n-k] + œ +``` diff --git "a/docs/Leetcode_Solutions/Java/191._number_of_1_bits \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/191._number_of_1_bits \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..dcba66c7b --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/191._number_of_1_bits \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,66 @@ +### 191. Number of 1 Bits + +题目: + + + + +难度: + +Easy + + +转成二进制,数1的个数 + +```python +class Solution(object): + def hammingWeight(self, n): + """ + :type n: int + :rtype: int + """ + return bin(n).count('1') +``` + + + +有wikipedia的题目 [Hamming Weight]((https://zh.wikipedia.org/wiki/汉明重量)) + + + +用wikipedia的解法: + +原理是在于每次使用x & x-1 总会把低位的数字给置0 + +比如 3 = 011 2 = 010 3 & 2 = 010 cnt =1 + +​ 2 = 010 1 = 001 2 & 1 = 000 cnt = 2 + +比如 9 = 1001 8 = 1000 9&8 = 1000 cnt =1 + +​ 8 = 1000 7 = 0111 8&7 = 0000 cnt = 2 + +> 减1操作将最右边的符号从0变到1,从1变到0,与操作将会移除最右端的1。如果最初X有N个1,那么经过N次这样的迭代运算,X将减到0。下面的算法就是根据这个原理实现的。 + +所以关键点是每次都会把最右边的1变成0. + + + +AC代码 + + + +```python +class Solution(object): + def hammingWeight(self, n): + """ + :type n: int + :rtype: int + """ + cnt = 0 + while n != 0: + n &= n - 1 + cnt += 1 + return cnt +``` + diff --git "a/docs/Leetcode_Solutions/Java/198._house_robber \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/198._house_robber \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..2b2deedda --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/198._house_robber \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,53 @@ + +### 198. House Robber + + +题目: + + + +难度: + +Easy + + +状态转移方程: + +dp[i] = max(dp[i-1], dp[i-2] + nums[i]) + + +AC 代码 + +```python +class Solution(object): + def rob(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + n = len(nums) + if n == 0 : return 0 + elif n == 1 : return nums[0] + elif n == 2 : return max(nums[0], nums[1]) + else: + dp = [0 for i in range(n)] + dp[0] = nums[0] + dp[1] = max(nums[0],nums[1]) + for i in range(2,n): + dp[i] = max( dp[i-1], dp[i-2] + nums[i]) + return dp[n-1] +``` + +```python +class Solution(object): + def rob(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + last, now = 0, 0 + for i in nums: last, now = now, max(last + i, now) + return now +``` + + diff --git "a/docs/Leetcode_Solutions/Java/199._binary_tree_right_side_view \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/199._binary_tree_right_side_view \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..6f7b3b6d6 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/199._binary_tree_right_side_view \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,37 @@ +###199. Binary Tree Right Side View + +题目: + + + + +难度: + +Medium + + +还是在玩第102题,level order traversal. + +``` +class Solution(object): + def rightSideView(self, root): + """ + :type root: TreeNode + :rtype: List[int] + """ + if root == None: return [] + + res = [] + curLevel = [root] + while curLevel: + nextLevel = [] + tmpRes = [] + for node in curLevel: + tmpRes.append(node.val) + if node.left: nextLevel.append(node.left) + if node.right: nextLevel.append(node.right) + res.append(tmpRes[-1]) + curLevel = nextLevel + return res +``` + diff --git "a/docs/Leetcode_Solutions/Java/200._number_of_islands \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/200._number_of_islands \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..73c5aecf4 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/200._number_of_islands \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,130 @@ +### 200. Number of Islands + + +题目: + + + +难度: +Medium + + +思路: + + +一开始: +numberOfIslands = 0 +islandArea = [] + + +然后遇到(x,y) = 1的状况,更新numberOfIslands,并且把(x,y)放入islandArea,然后用BFS或者DFS查找岛屿范围,全部更如islandArea,做loop + +以上就是基本思路 + + +然后超时|||, 小改之后AC + + +``` + +class Solution(object): + def numIslands(self, grid): + """ + :type grid: List[List[str]] + :rtype: int + """ + self.grid = grid[:] + + self.row = len(self.grid) + self.col = len(self.grid[0]) if self.row else 0 + self.visited = [[0 for i in range(self.col)]for j in range(self.row)] + + + self.numberOfIslands = 0 + + for i in range(self.row): + for j in range(self.col): + if self.grid[i][j] == '1' and self.visited[i][j] == 0: + self.findArea(i,j) + self.numberOfIslands += 1 + + return self.numberOfIslands + + def findArea(self, i, j): + s = [] + s.append((i,j)) + while s: + (x,y) = s.pop() + self.visited[x][y] = 1 + if self.legal(x-1,y): + s.append((x-1,y)) + if self.legal(x+1,y): + s.append((x+1,y)) + if self.legal(x,y-1): + s.append((x,y-1)) + if self.legal(x,y+1): + s.append((x,y+1)) + + def legal(self,x,y): + return x>= 0 and x < self.row and y >= 0 and y < self.col and self.grid[x][y] == '1' and self.visited[x][y] == 0 +a = Solution() +print a.numIslands(["11000","11000","00100","00011"]) + +``` + + +看了别人的代码,写的真美 ╮(╯_╰)╭ 啊 + +``` +class Solution(object): + def numIslands(self, grid): + """ + :type grid: List[List[str]] + :rtype: int + """ + def dfs(gird, used, row, col, x, y): + if gird[x][y] == '0' or used[x][y]: + return + used[x][y] = True + + if x!= 0: + dfs(grid, used, row,col, x-1,y) + if x!= row -1 : + dfs(grid, used, row,col, x+1, y) + if y!= 0: + dfs(grid, used, row,col, x, y-1) + if y!= col - 1: + dfs(grid, used, row,col, x, y+1) + + + row = len(grid) + col = len(grid[0]) if row else 0 + + used = [[0 for i in xrange(col)] for i in xrange(row)] + + count = 0 + for i in xrange(row): + for j in xrange(col): + if grid[i][j] == '1' and not used[i][j]: + dfs(grid,used,row,col,i,j) + count += 1 + return count +``` + +厉害的解法:Sink and count the islands. +```python +class Solution(object): + def numIslands(self, grid): + """ + :type grid: List[List[str]] + :rtype: int + """ + def sink(i, j): + if 0 <= i < len(grid) and 0 <= j < len(grid[0]) and grid[i][j] == '1': + grid[i][j] = '0' + map(sink, (i+1, i-1, i, i), (j, j, j+1, j-1)) + return 1 + return 0 + return sum(sink(i, j) for i in range(len(grid)) for j in range(len(grid[0]))) +``` + diff --git "a/docs/Leetcode_Solutions/Java/203._remove_linked_list_elements \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/203._remove_linked_list_elements \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..15aa10efa --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/203._remove_linked_list_elements \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,38 @@ +###203. Remove Linked List Elements + +题目: + + + +难度: + +Easy + + +AC代码如下: + + + +``` +class Solution(object): + def removeElements(self, head, val): + """ + :type head: ListNode + :type val: int + :rtype: ListNode + """ + dummy = ListNode(-1) + dummy.next = head + + cur = dummy + + while cur.next: + if cur.next.val == val: + cur.next = cur.next.next + else: + cur = cur.next + + return dummy.next + + +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/204._count_primes \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/204._count_primes \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..b69290b70 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/204._count_primes \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,57 @@ +###204. Count Primes + + +题目: + + + +难度: + +Easy + + + +这个题的hint是已经把算法喂到嘴边了 + + + + +``` +Input: an integer n > 1 + +Let A be an array of Boolean values, indexed by integers 2 to n, +initially all set to true. + +for i = 2, 3, 4, ..., not exceeding √n: + if A[i] is true: + for j = i^2, i^2+i, i^2+2*i, i^2+3i, ..., not exceeding n : + A[j] := false + +Output: all i such that A[i] is true. +``` + + + +python算法 + + +``` +class Solution(object): + def countPrimes(self, n): + """ + :type n: int + :rtype: int + """ + isPrime = [1 for i in range(n)] + + i = 2 + while i * i < n: + if isPrime[i]: + j = i * i + while j < n : + isPrime[j] = 0 + j += i + i += 1 + + return sum(isPrime[2:]) +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/205._isomorphic_strings \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/205._isomorphic_strings \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..47b0ab772 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/205._isomorphic_strings \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,39 @@ +###205. Isomorphic Strings + +题目: + + + +难度 : Easy + + +AC之法,用dictionary,因为限制,所以确保s 和 t 是isomorphic 同时 t 和 s 是 + + +``` +class Solution(object): + def isIsomorphic(self, s, t): + """ + :type s: str + :type t: str + :rtype: bool + """ + return self.iso(s,t) and self.iso(t,s) + + def iso(self,s, t): + """ + :type s: str + :type t: str + :rtype: bool + """ + mapx = {} + for i in range(len(s)): + if s[i] not in mapx: + mapx[s[i]] = t[i] + elif s[i] in mapx: + if t[i] != mapx[s[i]]: + return False + return True + + +``` diff --git "a/docs/Leetcode_Solutions/Java/206._reverse_linked_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/206._reverse_linked_list \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..97c10db26 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/206._reverse_linked_list \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,69 @@ +### 206. Reverse Linked List + +题目: + + + +难度: +Easy + +用三个指针,分别指向prev,cur 和 nxt,然后loop一圈还算比较简单. + + + + +```python +class Solution(object): + def reverseList(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + prev = None + cur = head + while(cur): + nxt = cur.next + cur.next = prev + prev = cur + cur = nxt + return prev +``` +其实一个指针就够了 +```python +class Solution(object): + def reverseList(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + if not head: + return head + prev = None + while head.next: + tmp = head.next + head.next = prev + prev = head + head = tmp + head.next = prev + return head +``` + +递归版本,可以再消化一下. + + +```python +class Solution(object): + def reverseList(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + return self.reverseHelper(head, None) + + def reverseHelper(self, head, new_head): + if not head: + return new_head + nxt = head.next + head.next = new_head + return self.reverseHelper(nxt, head) +``` diff --git "a/docs/Leetcode_Solutions/Java/207._course_schedule \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/207._course_schedule \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..6e990f09d --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/207._course_schedule \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,93 @@ +###207. Course Schedule + + + +题目: + + + +难度: +Medium + +思路: + +就是考topological sort,用来判断directed graph是否有cycle + +DFS 和 BFS都可以用来拓扑排序。 + +最简单的想法是每次取出indegree是0的node,然后把它和与之相关的edge都删了。一开始觉得这样的时间复杂度会很高,然后看到了这样写,参照: + + + +很聪明的写法 + +这里做了转成set以及添加removeList这样的操作是因为边list边做iterator这样的操作很危险 + + + + +``` +class Solution(object): + def canFinish(self, numCourses, prerequisites): + """ + :type numCourses: int + :type prerequisites: List[List[int]] + :rtype: bool + """ + degrees = [ 0 for i in range(numCourses)] + childs = [[] for i in range(numCourses)] + for front, tail in prerequisites: + degrees[front] += 1 + childs[tail].append(front) + + courses = set(range(numCourses)) + flag = True + + while flag and len(courses): + flag = False + removeList = [] + for x in courses: + if degrees[x] == 0: + for child in childs[x]: + degrees[child] -= 1 + removeList.append(x) + flag = True + for x in removeList: + courses.remove(x) + return len(courses) == 0 + +``` + +因为CLRS里面明确提到涂色法来处理DFS + +搞了半天,写了一个涂色法,在超时的边缘。之所以超时边缘是因为每次都要去prerequisites里看,没有删减,不高效. + +``` +class Solution(object): + def canFinish(self, numCourses, prerequisites): + """ + :type numCourses: int + :type prerequisites: List[List[int]] + :rtype: bool + """ + def dfs(i, colors, prerequisites): + colors[i] = 'G' + #print i, colors + for front, tail in prerequisites: + if tail == i: + if colors[front] == 'G': + return False + elif colors[front] == 'B': + continue + elif dfs(front, colors, prerequisites) == False: + return False + colors[i] = 'B' + return True + + colors = ['W' for i in range(numCourses)] + for i in range(numCourses): + if colors[i] == 'W': + if dfs(i, colors, prerequisites) == False: + return False + return True +``` diff --git "a/docs/Leetcode_Solutions/Java/208._implement_trie_(prefix_tree) \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/208._implement_trie_(prefix_tree) \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..8ee06db58 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/208._implement_trie_(prefix_tree) \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,89 @@ +### 208. Implement Trie (Prefix Tree) + +题目: + + + + +难度: + +Medium + +这个Python实现也太精美了吧,谷歌复写之 + +然后还unlock了一个solution,to read + +Trie整个都需要 to read,精美,可爱😊 + + + + +```python +class TrieNode(object): + def __init__(self): + """ + Initialize your data structure here. + """ + self.childs = dict() + self.isWord = False + + + +class Trie(object): + + def __init__(self): + self.root = TrieNode() + + def insert(self, word): + """ + Inserts a word into the trie. + :type word: str + :rtype: void + """ + node = self.root + for letter in word: + child = node.childs.get(letter) + if child is None: + child = TrieNode() + node.childs[letter] = child + node = child + node.isWord = True + + def search(self, word): + """ + Returns if the word is in the trie. + :type word: str + :rtype: bool + """ + node = self.root + for i in word: + child = node.childs.get(i) + if child is None: + return False + node = child + return node.isWord + + + def startsWith(self, prefix): + """ + Returns if there is any word in the trie + that starts with the given prefix. + :type prefix: str + :rtype: bool + """ + node = self.root + for letter in prefix: + child = node.childs.get(letter) + if child is None: + return False + node = child + return True + + +# Your Trie object will be instantiated and called as such: +# trie = Trie() +# trie.insert("somestring") +# trie.search("key") + +``` + diff --git "a/docs/Leetcode_Solutions/Java/210._course_schedule_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/210._course_schedule_ii \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..852b1163e --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/210._course_schedule_ii \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,55 @@ +###210. Course Schedule II + + + +题目: + + + +难度: +Medium + +思路: + +在207的基础上加了order,进击 + + +``` +class Solution(object): + def findOrder(self, numCourses, prerequisites): + """ + :type numCourses: int + :type prerequisites: List[List[int]] + :rtype: List[int] + """ + degrees = [ 0 for i in range(numCourses)] + childs = [[] for i in range(numCourses)] + for front, tail in prerequisites: + degrees[front] += 1 + childs[tail].append(front) + + + courses = set(range(numCourses)) + flag = True + order = [] + + while flag and len(courses): + flag = False + removeList = [] + for x in courses: + if degrees[x] == 0: + print x + for child in childs[x]: + degrees[child] -= 1 + removeList.append(x) + order.append(x) + flag = True + for x in removeList: + courses.remove(x) + + if len(courses) == 0: + return order + else: + return [] + +``` diff --git "a/docs/Leetcode_Solutions/Java/211. Add and Search Word - Data structure design \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/211. Add and Search Word - Data structure design \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..7dd0ea278 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/211. Add and Search Word - Data structure design \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,77 @@ +### 211. Add and Search Word - Data structure design + +题目: + + + +难度: Medium + +思路: + +trie也是树,那么dfs/bfs同样适用。 + +实际上是照抄208trie的题目再加上dfs + + + +AC代码 + + + +``` +class TrieNode(object): + """docstring for TrieNode""" + def __init__(self): + self.childs = dict() + self.isWord = False + +class WordDictionary(object): + def __init__(self): + """ + initialize your data structure here. + """ + self.root = TrieNode() + + + def addWord(self, word): + """ + Adds a word into the data structure. + :type word: str + :rtype: void + """ + node = self.root + for letter in word: + child = node.childs.get(letter) + if child is None: + child = TrieNode() + node.childs[letter] = child + node = child + node.isWord = True + + + def search(self, word): + """ + Returns if the word is in the data structure. A word could + contain the dot character '.' to represent any one letter. + :type word: str + :rtype: bool + """ + def dfs(root, word): + if len(word) == 0: + return root.isWord + elif word[0] == '.': + for node in root.childs: + if dfs(root.childs[node], word[1:]): + return True + return False + else: + node = root.childs.get(word[0]) + if node is None: + return False + return dfs(node, word[1:]) + + return dfs(self.root, word) +``` + + + diff --git "a/docs/Leetcode_Solutions/Java/213._house_robber_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/213._house_robber_ii \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..9caec3dfd --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/213._house_robber_ii \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,61 @@ +###213. House Robber II + + +题目: + + + +难度: +Medium + +思路: + +跟house robber 1 类似,但是加了一些限制,抢到第 n-1 家最大两种可能,抢第 n-1 家和不抢第 n-1 家。 + + 0, 1, 2, 3, 4, 5, 6 ... n-1 + + +所以状态转移方程写成二维的更好来求,从第i家抢到第j家的状态转移方程 + + + nums[j] ,j = i + dp[i][j] = max(nums[i], nums[i+1]) , j = i +1 + max(dp[i][j-2] + nums[j], dp[i][j-1]), j > i+1 + + + +Show me the code + + +AC代码 + +``` +class Solution(object): + def rob(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + n = len(nums) + if n == 0 : return 0 + if n == 1 : return nums[0] + if n == 2 : return max(nums[0],nums[1]) + + dp = [[0 for i in range(n)] for j in range(n)] + + for i in range(n): + for j in range(i,n): + if j == i: + dp[i][j] = nums[j] + elif j == i + 1: + dp[i][j] = max(nums[i],nums[i+1]) + else: + dp[i][j] = max(dp[i][j-2] + nums[j], dp[i][j-1]) + + # print dp + # rob without n-1, or rob with n-1 + val = max(dp[0][n-2], dp[1][n-3] + nums[n-1]) + + return val + +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/216._combination_sum_iii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/216._combination_sum_iii \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..9e1b6371e --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/216._combination_sum_iii \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,40 @@ +###216. Combination Sum III + +题目: + + + + +难度: + +Medium + +继续Combination Sum 系列 + + +``` +class Solution(object): + def combinationSum3(self, k, n): + """ + :type k: int + :type n: int + :rtype: List[List[int]] + """ + candidates = [1,2,3,4,5,6,7,8,9] + self.res = [] + self.combSum(candidates, n, [], k) + return self.res + + + def combSum(self,candidates, target, valueList, k): + if target == 0 and k == 0: + self.res.append(valueList) + length = len(candidates) + if length == 0 or k < 0 : + return + for i in range(length): + if candidates[i] > target: + return + self.combSum(candidates[i+1:], target - candidates[i], valueList + [candidates[i]], k-1) + +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/217._contains_duplicate \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/217._contains_duplicate \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..f6c2a2aef --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/217._contains_duplicate \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,62 @@ +###217. Contains Duplicate + +题目: + + + +难度: + +Easy + + +我直接sort,然后比较相邻的元素,这样O(n),也是笨办法,居然unlocked a solution,所以来读读解答. + +三个办法: + +- linear search O(n^2) +- sort O(n) +- hashtable + + +我用的sort + +``` +class Solution(object): + def containsDuplicate(self, nums): + """ + :type nums: List[int] + :rtype: bool + """ + nums.sort() + for i in range(len(nums)-1): + if nums[i] == nums[i+1]: + return True + return False +``` + + + + +看给的Java解法 + + +``` +public boolean containsDuplicate(int[] nums) { + Set set = new HashSet<>(nums.length); + for (int x: nums) { + if (set.contains(x)) return true; + set.add(x); + } + return false; +} +``` + +还有一个取巧的Python解法,我也看到了 + +``` +class Solution(object): + def containsDuplicate(self, nums): + if len(nums) > len(set(nums)): + return True + return False +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/218._The _Skyline_Problem \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/218._The _Skyline_Problem \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..34d9c9176 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/218._The _Skyline_Problem \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,134 @@ +### 218. The Skyline Problem + +题目: + + + +难度: + +Hard + +思路 + +观察发现,skyline的points的横坐标一定是某个building的左边界或者右边界。 + +开始,假设只有2个建筑物,拿出第一个buiding B1,我们先把它的左上顶点加进我们的output结果skyline中,然后继续拿下一个building B2,我们现在需要将B2的左上顶点对应的x coordinate与B1的右上顶点所对应的x coordinate做比较: + +- 如果前者小且B2的高度大于B1的高度,则我们将B2的左上顶点也加入skyline中去。 +- 如果前者小且B2的高度小于等于B1的高度,则忽略B2的左上顶点 + +接下来考虑更多建筑物的情况,从左到右扫描,当我们遇到第一个楼的左边界时,把它push到一个heap中。如果后面扫描的楼的高度比heap中最高的楼还高,那么它的左上顶点一定会被加入到skyline中。当我们遇到一个building的右边界时,我们需要将其从heap中pop掉,如果heap中max height有变化,则push到结果中。 + +参考[Brian Gordon的blog](https://briangordon.github.io/2014/08/the-skyline-problem.html) + 和 [Stefan大神的题解](https://leetcode.com/problems/the-skyline-problem/discuss/61194) + +#### 程序代码解释 + +- liveBuildings代表(左上顶点已经被加入output中但右上顶点还没有做判断的building)的右上顶点的集合,形式为[(height, x-coordinate)…..] +- skyline是output +- 程序里面的这句代码```while idx < n and buildings[idx][0] == start:```是为了防止有左右坐标完全相同但是height不同的building的存在,it's not useless!!! +- python里面的heapq模块如果有不懂的同学可以看看这个文章:[heapq](http://blog.csdn.net/calling_wisdom/article/details/41676133) + + +```python +class Solution(object): + def getSkyline(self, buildings): + """ + :type buildings: List[List[int]] + :rtype: List[List[int]] + """ + idx, n = 0, len(buildings) + liveBuildings, skyline = [], [] +        while idx < n or len(liveBuildings) > 0: # 只要所有的点没处理完就一直循环 +            if len(liveBuildings) == 0 or (idx < n and buildings[idx][0] <= -liveBuildings[0][1]): + start = buildings[idx][0] + while idx < n and buildings[idx][0] == start: + heapq.heappush(liveBuildings, [-buildings[idx][2], -buildings[idx][1]]) + idx += 1 + else: + start = -liveBuildings[0][1] + while len(liveBuildings) > 0 and -liveBuildings[0][1] <= start: + heapq.heappop(liveBuildings) + height = len(liveBuildings) and -liveBuildings[0][0] + if len(skyline) == 0 or skyline[-1][1] != height: + skyline.append([start, height]) + return skyline +``` +#####另外还有一个超级6的大神的代码,但是今天我要赶报告,就只先贴代码了 + +```python +class Solution(object): + def getSkyline(self, buildings): + """ + :type buildings: List[List[int]] + :rtype: List[List[int]] + """ + events = sorted([(L, -H, R) for L, R, H in buildings] + list(set((R, 0, None) for L, R, H in buildings))) + #events = sorted(event for L, R, H in buildings for event in ((L, -H, R), (R, 0, None))) + res, hp = [[0, 0]], [(0, float("inf"))] + for x, negH, R in events: + while x >= hp[0][1]: + heapq.heappop(hp) + if negH: heapq.heappush(hp, (negH, R)) + if res[-1][1] + hp[0][0]: + res += [x, -hp[0][0]], + return res[1:] +``` + +```Java +public class Solution { + public List getSkyline(int[][] buildings) { + List result = new ArrayList(); + if (buildings == null || buildings.length == 0 || buildings[0].length == 0) { + return result; + } + + List heights = new ArrayList(); + for (int[] building : buildings) { + heights.add(new Height(building[0], -building[2])); + heights.add(new Height(building[1], building[2])); + } + Collections.sort(heights, new Comparator() { + @Override + public int compare(Height h1, Height h2) { + return h1.index != h2.index ? h1.index - h2.index : h1.height - h2.height; + } + }); + + PriorityQueue pq = new PriorityQueue(1000, Collections.reverseOrder()); + pq.offer(0); + int prev = 0; + for (Height h : heights) { + if (h.height < 0) { + pq.offer(-h.height); + } else { + pq.remove(h.height); + } + int cur = pq.peek(); + if (cur != prev) { + result.add(new int[]{h.index, cur}); + prev = cur; + } + } + + return result; + } + + class Height { + int index; + int height; + Height(int index, int height) { + this.index = index; + this.height = height; + } + } +} +``` + + + +Author: Keqi Huang + +If you like it, please spread your support + +![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) diff --git "a/docs/Leetcode_Solutions/Java/219._contains_duplicate_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/219._contains_duplicate_ii \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..8c5868c6f --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/219._contains_duplicate_ii \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,35 @@ +###219. Contains Duplicate II + +题目: + + + +难度: + +Easy + + +经过了Contains Duplicate的考验,用hash table(也叫dictionary)来存,这个元素还没出现过,就放hash table,如果出现了,计算相邻距离,小于等于k则return true,否则更新hash table中元素的位置, + + +我用的sort + +``` +class Solution(object): + def containsNearbyDuplicate(self, nums, k): + """ + :type nums: List[int] + :type k: int + :rtype: bool + """ + if len(nums) < 2 : return False + lookup = {} + for i in range(len(nums)): + if nums[i] not in lookup: + lookup[nums[i]] = i + else: + if i - lookup[nums[i]] <= k : + return True + lookup[nums[i]] = i + return False +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/221._maximal_square \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/221._maximal_square \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..3dd7b9a8c --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/221._maximal_square \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,78 @@ +###221. Maximal Square + + +题目: + + + +难度: +Medium + +tag: DP + + +递推公式,一开始想的很简单: + +dp[i][j] = dp[i-1][j-1] + 1 #如果dp[i-1][j-1]为1,dp[i-1][j]为1,dp[i][j-1]为1 + +很明显的错误,一旦遇到更大的方块就会有问题 + +然后看了hint,其实递推方程式是很有技巧的,左上角,左边,上面,相邻的三个部分最小的+1,当然,前提也是要这里dp[i][j] 为1,然后我们再会去看其他的部分。 + +看个例子 + +``` +原本的matrix DP + +1 0 1 0 0 1 0 1 0 0 +1 0 1 1 1 → 1 0 1 1 1 +1 1 1 1 1 1 1 1 2 2 +1 0 0 1 0 1 0 0 1 0 + +``` + +是非常make sense的,因为最小的必定包括了周边的1,然后再加1,否则如果是0的话那么就为0. + +而naïve的错误的递推公式是因为一个square考虑的部分是k * k的部分, k * k 部分都必定为1. + +而正确的递推公式 + + + dp[i][j] = min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1]) + 1 + +则完美的考虑了这一情况 + + +``` +class Solution(object): + def maximalSquare(self, matrix): + """ + :type matrix: List[List[str]] + :rtype: int + """ + dp = [] + for i in matrix: + tmp = [] + for j in i: + tmp.append(int(j)) + dp.append(tmp) + + row = len(dp) + col = len(dp[0]) if row else 0 + + + for i in range(1,row): + for j in range(1,col): + if dp[i][j] == 1: + dp[i][j] = min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1]) + 1 + + + maxv = 0 + for i in range(row): + for j in range(col): + if dp[i][j] > maxv: + maxv = dp[i][j] + return maxv * maxv +``` + + diff --git "a/docs/Leetcode_Solutions/Java/222._count_complete_tree_nodes \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/222._count_complete_tree_nodes \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..e1b6bede6 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/222._count_complete_tree_nodes \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,67 @@ +###222. Count Complete Tree Nodes + +题目: + + + +难度: +Medium + + +思路: + + +思路一: 超时,跟一般的树一样,递归的来数nodes数 + + + +``` +class Solution(object): + def countNodes(self, root): + """ + :type root: TreeNode + :rtype: int + """ + if root == None: + return 0 + if root.left == None and root.right == None: + return 1 + return 1 + self.countNodes(root.left) + self.countNodes(root.right) +``` + + +思路二:既然说了是 complete binary tree,那么必然有特性可用,complete binary tree的特性是除了最后一层,之前的就是perfect tree. + + +所以寻找左子树的最左边的高度和右子树的最右边的node高度,如果相同就是perfect tree,高度2^h - 1, 否则递归的来看左子树和右子树 + + +``` + +class Solution(object): + def countNodes(self, root): + """ + :type root: TreeNode + :rtype: int + """ + if root == None: + return 0 + + p, q = root,root + + leftHeight = 0 + rightHeight = 0 + + while p: + p = p.left + leftHeight += 1 + + while q: + q = q.right + rightHeight += 1 + + if leftHeight == rightHeight: + return (int)(math.pow(2,leftHeight) - 1) + else: + return 1 + self.countNodes(root.left) + self.countNodes(root.right) +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/223._rectangle_area \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/223._rectangle_area \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..3edba1bc3 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/223._rectangle_area \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,50 @@ +###223. Rectangle Area + +题目: + + + +难度 : Easy + + +这道题是我瞎了狗眼,🐶,之前看错了,以为要求相交的部分,结果是求cover的部分,所以写的长|||||| + + +``` +class Solution(object): + def computeArea(self, A, B, C, D, E, F, G, H): + """ + :type A: int + :type B: int + :type C: int + :type D: int + :type E: int + :type F: int + :type G: int + :type H: int + :rtype: int + """ + return self.area(C - A, D - B) + self.area(H - F, G - E ) - self.area(self.interSect(A,C,E,G), self.interSect(B,D,F,H)) + + def area(self, w, h): + if w * h < 0: + return - w * h + return w * h + + + def interSect(self, A, C, E, G): + if E > C: + return 0 + elif G < A: + return 0 + elif E >= A and G <= C: + return G - E + elif A >= E and C <= G: + return C - A + elif G <= C and G >= A and E <= A: + return G - A + else: + return C - E + + +``` diff --git "a/docs/Leetcode_Solutions/Java/224. Basic Calculator \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/224. Basic Calculator \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..53683dc7e --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/224. Basic Calculator \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,108 @@ +### 224. Basic Calculator + + + +题目: + + +难度: +Medium + +思路: + +基本跟227一样,只是这里加了括号 + +瞄了一眼,基本上infix(中缀表达式)都是表达成postfix(后缀表达式)再来求值的。 +比如 A + B * C 写成 A B C * + + +| Infix Expression | Prefix Expression | Postfix Expression | +| ---------------- | ----------------- | ------------------ | +| A + B | + A B | A B + | +| A + B * C | + A * B C | A B C * + | + + + +infix 中缀转postfix 后缀还有专门的算法: + + + +1. Create an empty stack called opstack for keeping operators. Create an empty list for output. + +2. Convert the input infix string to a list by using the string method split. + +3. Scan the token list from left to right. + +4. - If the token is an operand, append it to the end of the output list. + - If the token is a left parenthesis, push it on the opstack. + - If the token is a right parenthesis, pop the opstack until the corresponding left parenthesis is removed. Append each operator to the end of the output list. + - If the token is an operator, *, /, +, or -, push it on the opstack. However, first remove any operators already on the opstack that have higher or equal precedence and append them to the output list. + +5. When the input expression has been completely processed, check the opstack. Any operators still on the stack can be removed and appended to the end of the output list. + + + +可以看到中缀转后缀一个重要的点是: 当我们把operator +-*/ 放到opstack上时候,我们需要考虑/看是否有之前的operator有更高或者相等的precedence,这个时候我们需要优先(计算)把它放到output list. + + + +参考 + + + + + +AC代码 + +``` +class Solution(object): + def calculate(self, s): + """ + :type s: str + :rtype: int + """ + def precedence(op): + if op == '*' or op == '/': + return 2 + else: + return 1 + + def cal(op, op1, op2): + if op == '*': + return op1 * op2 + elif op == '/': + return op1 / float(op2) + elif op == '+': + return op1 + op2 + else: + return op1 - op2 + + + opstack = [] + operands = [] + + # remove empty space and put operands and + idx = 0 + for i in range(idx, len(s)): + if s[i] in '+-*/': + operands.append(s[idx:i]) + while len(opstack) > 0 and precedence(s[i]) <= precedence(opstack[-1]) and len(operands) >= 2: + op = opstack.pop() + op2 = int(operands.pop()) + op1 = int(operands.pop()) + res = cal(op, op1, op2) + operands.append(res) + opstack.append(s[i]) + idx = i + 1 + operands.append(s[idx:]) + + while opstack: + op = opstack.pop() + op2 = int(operands.pop()) + op1 = int(operands.pop()) + res = cal(op, op1, op2) + operands.append(res) + + return int(operands[0]) + +``` + diff --git "a/docs/Leetcode_Solutions/Java/225._implement_stack_using_queues \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/225._implement_stack_using_queues \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..10a1ac200 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/225._implement_stack_using_queues \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,53 @@ +###225. Implement Stack using Queues + +题目: + + + + +难度: + +Easy + + +又到了作弊神预言Python的强项 + + +``` +class Stack(object): + def __init__(self): + """ + initialize your data structure here. + """ + self.lst = [] + + + def push(self, x): + """ + :type x: int + :rtype: nothing + """ + self.lst.append(x) + + + def pop(self): + """ + :rtype: nothing + """ + self.lst.remove(self.lst[-1]) + + + def top(self): + """ + :rtype: int + """ + return self.lst[-1] + + def empty(self): + """ + :rtype: bool + """ + return self.lst == [] + +``` + diff --git "a/docs/Leetcode_Solutions/Java/226._invert_binary_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/226._invert_binary_tree \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..b66918814 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/226._invert_binary_tree \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,33 @@ +###226. Invert Binary Tree + +题目: + + + +难度: + +Easy + +然后查了一下,有更简单的写法 + + +``` + +class Solution(object): + def invertTree(self, root): + """ + :type root: TreeNode + :rtype: TreeNode + """ + if root == None: return None + elif root.left == None and root.right == None: return root + else: + leftNode = root.left + rightNode = root.right + root.right = leftNode + root.left = rightNode + self.invertTree(root.left) + self.invertTree(root.right) + return root +``` + diff --git "a/docs/Leetcode_Solutions/Java/227._basic_calculator_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/227._basic_calculator_ii \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..ac5ea4eeb --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/227._basic_calculator_ii \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,108 @@ +###227. Basic Calculator II + + + +题目: + + + +难度: +Medium + +思路: + +瞄了一眼,基本上infix(中缀表达式)都是表达成postfix(后缀表达式)再来求值的。 +比如 A + B * C 写成 A B C * + + + +| Infix Expression | Prefix Expression | Postfix Expression | +| ---------------- | ----------------- | ------------------ | +| A + B | + A B | A B + | +| A + B * C | + A * B C | A B C * + | + + +infix 中缀转postfix 后缀还有专门的算法: + + + +1. Create an empty stack called opstack for keeping operators. Create an empty list for output. + +2. Convert the input infix string to a list by using the string method split. + +3. Scan the token list from left to right. + +4. - If the token is an operand, append it to the end of the output list. + - If the token is a left parenthesis, push it on the opstack. + - If the token is a right parenthesis, pop the opstack until the corresponding left parenthesis is removed. Append each operator to the end of the output list. + - If the token is an operator, *, /, +, or -, push it on the opstack. However, first remove any operators already on the opstack that have higher or equal precedence and append them to the output list. + +5. When the input expression has been completely processed, check the opstack. Any operators still on the stack can be removed and appended to the end of the output list. + + + +可以看到中缀转后缀一个重要的点是: 当我们把operator +-*/ 放到opstack上时候,我们需要考虑/看是否有之前的operator有更高或者相等的precedence,这个时候我们需要优先(计算)把它放到output list. + + + + +参考 + + + + + +AC代码 + +``` +class Solution(object): + def calculate(self, s): + """ + :type s: str + :rtype: int + """ + def precedence(op): + if op == '*' or op == '/': + return 2 + else: + return 1 + + def cal(op, op1, op2): + if op == '*': + return op1 * op2 + elif op == '/': + return op1 / float(op2) + elif op == '+': + return op1 + op2 + else: + return op1 - op2 + + + opstack = [] + operands = [] + + # remove empty space and put operands and + idx = 0 + for i in range(idx, len(s)): + if s[i] in '+-*/': + operands.append(s[idx:i]) + while len(opstack) > 0 and precedence(s[i]) <= precedence(opstack[-1]) and len(operands) >= 2: + op = opstack.pop() + op2 = int(operands.pop()) + op1 = int(operands.pop()) + res = cal(op, op1, op2) + operands.append(res) + opstack.append(s[i]) + idx = i + 1 + operands.append(s[idx:]) + + while opstack: + op = opstack.pop() + op2 = int(operands.pop()) + op1 = int(operands.pop()) + res = cal(op, op1, op2) + operands.append(res) + + return int(operands[0]) + +``` + diff --git "a/docs/Leetcode_Solutions/Java/228._summary_ranges \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/228._summary_ranges \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..ce9dce0f9 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/228._summary_ranges \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,58 @@ +### 228. Summary Ranges + +题目: + + + +难度: + +Medium + + +Just collect the ranges, then format and return them. + +```python +class Solution(object): + def summaryRanges(self, nums): + """ + :type nums: List[int] + :rtype: List[str] + """ + ranges = [] + for i in nums: + if not ranges or i > ranges[-1][-1] + 1: + ranges += [], + ranges[-1][1:] = i, + return ['->'.join(map(str, r)) for r in ranges] +``` +About the commas :-) + +``` +ranges += [], +r[1:] = n, +``` +Why the trailing commas? Because it turns the right hand side into a tuple and I get the same effects as these more common alternatives: +``` +ranges += [[]] +or +ranges.append([]) + +r[1:] = [n] +``` +Without the comma, … + +- ranges += [] wouldn’t add [] itself but only its elements, i.e., nothing. +- r[1:] = n wouldn’t work, because my n is not an iterable. + +Why do it this way instead of the more common alternatives I showed above? Because it’s shorter and faster (according to tests I did a while back). + +写到这里可能又有疑问了🤔️,为什么不可以直接写```ranges[-1][1] = i```呢,当然是会报```IndexError: list assignment index out of range```错误啦,那为什么```ranges[-1][1:] = i,```可以呢? + +简单来说 + +L1=L 与 L1=L[:] +- L1和L 都是对同一个对象的引用(所谓绑定的意思)。 +- L[:] 是生成了一个和L不同的新的对象,L1 变为了L[:] 这个对象的引用。 + + +参考[stefan](https://leetcode.com/problems/summary-ranges/discuss/63193) diff --git "a/docs/Leetcode_Solutions/Java/229._majority_element_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/229._majority_element_ii \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..061c03441 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/229._majority_element_ii \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,62 @@ +###229. Majority Element II + + + +题目: + + + +难度: +Medium + +思路: + +majority element是两两比较扔掉不同的元素,然后最后会留下一个。 + +这里变成三三比较来扔东西, find all elements that appear more than ⌊ n/3 ⌋ times,所以最多可以有两个majority element ii. + + +最后再加一个比较来确认这些函数是majority element + +``` +class Solution(object): + def majorityElement(self, nums): + """ + :type nums: List[int] + :rtype: List[int] + """ + cnt1 = 0 + cnt2 = 0 + maj1 = 0 + maj2 = 0 + for num in nums: + if maj1 == num: + cnt1 += 1 + elif maj2 == num: + cnt2 += 1 + elif cnt1 == 0: + maj1 = num + cnt1 += 1 + elif cnt2 == 0: + maj2 = num + cnt2 += 1 + else: + cnt1 -= 1 + cnt2 -= 1 + + cnt1 = 0 + cnt2 = 0 + + n = len(nums) + res = [] + for num in nums: + if maj1 == num: + cnt1 += 1 + elif maj2 == num: + cnt2 += 1 + if cnt1 > n/3: + res.append(maj1) + if cnt2 > n/3: + res.append(maj2) + return res +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/230._kth_smallest_element_in_a_bst \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/230._kth_smallest_element_in_a_bst \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..b51fc7a07 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/230._kth_smallest_element_in_a_bst \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,48 @@ +### 230. Kth Smallest Element in a BST + +题目: + + + +难度: +Medium + + +跟昨天做的一道题类似,一上来就走取巧之路。 + +InOrder排序,输出,当然也完全可以用昨天的binary tree iterator,入stack,出stack,直到输出第k位 + + +```python +class Solution(object): + def kthSmallest(self, root, k): + """ + :type root: TreeNode + :type k: int + :rtype: int + """ + self.root = root + self.lst = [] + self.inOrder(root) + return self.lst[k-1] + + def inOrder(self, root): + if root == None: + return + self.inOrder(root.left) + self.lst.append(root.val) + self.inOrder(root.right) +``` + + +现在看到kth 就条件反射的想用divide & conquer, 扫root的左子树看nodes量,如果nodes数量是k-1,那么node就刚好是第k个,如果大于k > 左子树数量,扫右子树,同时更新root为root.right。 + +看到的言论: + +> If we can change the BST node structure, We can add a new Integer to mark the number of element in the left sub-tree. + +when the node is not null. + +- if k == node.leftNum + 1, return node +- if k > node.leftNum + 1, make k -= node.leftNum + 1, and then node = node.right +- otherwise, node = node.left diff --git "a/docs/Leetcode_Solutions/Java/231. _Power_of_Two \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/231. _Power_of_Two \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..c90024d2e --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/231. _Power_of_Two \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,89 @@ +### 231. Power of Two + + + +题目: + + + +难度: + +Easy + + + +思路: + + + +power of two 那是这个数字的binary 表示一定只有一个1 + +套用以前的代码[leetcode191](https://github.com/Lisanaaa/thinking_in_lc/blob/master/191._number_of_1_bits.md) + +这样会超时 + +``` +class Solution(object): +    def isPowerOfTwo(self, n): # 此法超时 +        """ + :type n: int + :rtype: bool + """ + cnt = 0 + while n != 0: + n &= n - 1 + cnt += 1 + return cnt == 1 +``` + + + +跟power of three一样递归,可以AC + + + +```python +class Solution(object): + def isPowerOfTwo(self, n): + """ + :type n: int + :rtype: bool + """ + if n <= 0: + return False + if n == 1: + return True + if n % 2 == 0: + return self.isPowerOfTwo(n/2) + return False + +``` + + + + + + + +也是有[算法的wikipedia page](https://en.wikipedia.org/wiki/Power_of_two#Fast_algorithm_to_check_if_a_positive_number_is_a_power_of_two) + +> The [binary representation](https://en.wikipedia.org/wiki/Binary_numeral_system) of integers makes it possible to apply a very fast test to determine whether a given [positive integer](https://en.wikipedia.org/wiki/Positive_integer) *x* is a power of two: +> +> positive *x* is a power of two ⇔ (*x* & (*x* − 1)) is equal to zero. + + + +注意特殊case 0的处理 + +```python +class Solution(object): + def isPowerOfTwo(self, n): + """ + :type n: int + :rtype: bool + """ + return n & (n-1) == 0 if n != 0 else False +``` + + + diff --git "a/docs/Leetcode_Solutions/Java/232._implement_queue_using_stacks \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/232._implement_queue_using_stacks \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..53647fc0e --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/232._implement_queue_using_stacks \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,51 @@ +###232. Implement Queue using Stacks + +题目: + + + +难度: +Easy + +这个题没有乖乖听话,不过因为当年做过用两个stack来模拟queue + +然后不得不说,我Python大法实在太厉害了 + +这功能强大的,我简直要啧啧啧 + +``` +class Queue(object): + def __init__(self): + """ + initialize your data structure here. + """ + self.lst = [] + + + def push(self, x): + """ + :type x: int + :rtype: nothing + """ + self.lst.append(x) + + + def pop(self): + """ + :rtype: nothing + """ + del self.lst[0] + + def peek(self): + """ + :rtype: int + """ + return self.lst[0] + + + def empty(self): + """ + :rtype: bool + """ + return self.lst == [] +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/234._palindrome_linked_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/234._palindrome_linked_list \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..0d92492b0 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/234._palindrome_linked_list \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,94 @@ +### 234. Palindrome Linked List + +题目: + + + +难度: +Easy + +蠢了一下, + +思路是:“先翻转整个链表(in-place),然后和之前的链表比较”,但是这样原链表都变了,肯定错。 + +如果新建一个链表,然后改造成原来链表的翻转链表,还是可行的,但是空间复杂度就是O(n)了。那还不如直接把List中元素拷贝到数组中直接比较,ac代码如下: + + +```python +class Solution(object): + def isPalindrome(self, head): + """ + :type head: ListNode + :rtype: bool + """ + vals = [] + while head: + vals += head.val, + head = head.next + return vals == vals[::-1] +``` + +这道题并不能算Easy吧: + +思路二: +要想实现O(1)的空间复杂度,可以找到中间的节点,把linked list拆成两个部分,后半部分linkedlist reverse,然后比较两个linked list值是否相同,看例子: + + +``` +1 -> 3 -> 1 拆成 1 和 1 + +1 -> 3 -> 5 ->5 -> 3 -> 1 拆成 1-> 3 -> 5 和 5 -> 3 -> 1 + +``` + +可以使用快慢指针来找到中间的节点。 + + +```python +class Solution(object): + def isPalindrome(self, head): + """ + :type head: ListNode + :rtype: bool + """ + fast = slow = head + # 找到中间节点 + while fast and fast.next: + fast = fast.next.next + slow = slow.next + # 翻转后半部分 + prev = None + while slow: + tmp = slow.next + slow.next = prev + prev = slow + slow = tmp + # 比较前后两部分 + while prev: # while prev and head: + if prev.val != head.val: + return False + prev = prev.next + head = head.next + return True +``` + +给个最终状态的例子: +``` + + fast tmp + None prev slow + ^ ^ ^ + | | | +1 --> 2 --> 3 <-- 2 <-- 1 None + +``` +但是注意最后的while prev不能换成while fast, 因为这是总节点数为奇数的情况,如果是偶数情况就不一样了,如下: +``` +                         tmp +                          slow    + None prev fast + ^ ^ ^ + | | | +1 --> 2 --> 2 <-- 1 None + +``` diff --git "a/docs/Leetcode_Solutions/Java/235._lowest_common_ancestor_of_a_binary_search_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/235._lowest_common_ancestor_of_a_binary_search_tree \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..62c1e09a5 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/235._lowest_common_ancestor_of_a_binary_search_tree \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,33 @@ +###235. Lowest Common Ancestor of a Binary Search Tree + +题目: + + + +难度 : Easy + +- 两个node,一个大于root,一个小于root,那么必定root两边,共同的ancestor是root,同时再考虑同为空的状况 +- 两个node,都比node小,到左边去寻找,那么先找到那个必定是common ancestor +- 两个node,都比node大,类似.... + + +AC解法 + +``` +class Solution(object): + def lowestCommonAncestor(self, root, p, q): + """ + :type root: TreeNode + :type p: TreeNode + :type q: TreeNode + :rtype: TreeNode + """ + if root == None or root == p or root == q: + return root + elif p.val < root.val < q.val or q.val < root.val < p.val : + return root + elif p.val < root.val and q.val < root.val: + return self.lowestCommonAncestor(root.left,p,q) + else: + return self.lowestCommonAncestor(root.right,p,q) +``` diff --git "a/docs/Leetcode_Solutions/Java/236._lowest_common_ancestor_of_a_binary_tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/236._lowest_common_ancestor_of_a_binary_tree \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..271c462ad --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/236._lowest_common_ancestor_of_a_binary_tree \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,104 @@ + +###236. Lowest Common Ancestor of a Binary Tree + + +题目: + + + +难度: + +Medium + + + +思路 + +求root到node的path,然后对比path,最后一个想同的点就是lowest common ancestor + + + +好开心,AC了 + + +但是我根本不能在Runtime Distribution 上找到我,因为太慢了|||| + + + + +``` + +class Solution(object): + def lowestCommonAncestor(self, root, p, q): + """ + :type root: TreeNode + :type p: TreeNode + :type q: TreeNode + :rtype: TreeNode + """ + pathP = self.pathTo(root,p) + pathQ = self.pathTo(root,q) + n = min(len(pathP), len(pathQ)) + + ans = root + for i in range(n): + if pathP[i] == pathQ[i]: + ans = pathP[i] + else: + break + return ans + + + def pathTo(self, root, goal): + # goal node ,path + if root == None: return root + stack = [(root, [root])] + while stack: + node, path = stack.pop() + if node == goal: + return path + if node.left: stack.append((node.left, path + [node.left])) + if node.right: stack.append((node.right, path + [node.right])) + +``` + +递归解法,之所以我没有用递归因为有疑惑, BASE CASE 很容易想到,root 是none,或者p == root 或者q == root,那么LCA就是root,如果两个node一个在左边,一个在右边,那么LCA也是root,但是如果一个是6,另一个是4则有一点疑惑,但其实是没有问题的,因为这个时候给的总是他们的共同root,所以这个递归解法是没错的,总是想到递归是在那个状况下递归 + + +``` + _______3______ + / \ + ___5__ ___1__ + / \ / \ + 6 _2 0 8 + / \ + 7 4 +``` + +AC代码 + + + +``` +class Solution(object): + def lowestCommonAncestor(self, root, p, q): + """ + :type root: TreeNode + :type p: TreeNode + :type q: TreeNode + :rtype: TreeNode + """ + if root == None: + return None + + if p == root or q == root: + return root + + left = self.lowestCommonAncestor(self.left,p,q) + right = self.lowestCommonAncestor(self.right,p,q) + + if left and right: + return root + + return left if left is None else right +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/237._delete_node_in_a_linked_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/237._delete_node_in_a_linked_list \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..d401e090d --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/237._delete_node_in_a_linked_list \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,52 @@ +### 237. Delete Node in a Linked List + +题目: + + + +难度: +Easy + + + +这道题,第一感觉,像删链表一样来删,把所有的node val前移一个,但是有个问题,为什么tail那个node还是存在?哼(ˉ(∞)ˉ)唧.. + +已经被解答: + + + + + +另外一个O(1)的办法更好,把后一个node的val移到待删这个节点,并且把node.next = node.next.next + +题目说了不会删最后一个点,所以node.next.next一定存在,所以直接让node的val等于它next的val,然后让node的next指向它的next的next,举个例子: + 1->2->3->4->5->None,要删除第四个节点,就让4变成5,然后让第四个节点指向第五个节点的next, +这样原来的第四个节点就不存在了,虽然原来的第五个节点仍然存在且指向None,变成了1->2->3->5->None-<5 + + + +```python +O(1)时间 +class Solution(object): + def deleteNode(self, node): + """ + :type node: ListNode + :rtype: void Do not return anything, modify node in-place instead. + """ + node.val = node.next.val + node.next = node.next.next +``` +```python +O(n)时间 +class Solution(object): + def deleteNode(self, node): + """ + :type node: ListNode + :rtype: void Do not return anything, modify node in-place instead. + """ + while node.next: + node.val = node.next.val + prev, node = node, node.next + # clear reference to tail + prev.next = None +``` diff --git "a/docs/Leetcode_Solutions/Java/238._product_of_array_except_self \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/238._product_of_array_except_self \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..00a883f6b --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/238._product_of_array_except_self \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,100 @@ +###238. Product of Array Except Self + +题目: + + + +难度: + +Medium + + +不使用division 并且O(n) + + +想到的算法 O(n^2) + +会超时 + + +``` +class Solution(object): + def productExceptSelf(self,nums): + """ + :type nums: List[int] + :rtype: List[int] + """ + lst = [] + for i in range(len(nums)): + lst.append(self.productWithoutI(nums,i)) + return lst + + + def productWithoutI(self,nums,i): + product = 1 + for j in range(len(nums)): + if j != i: + product *= nums[j] + return product +``` + +如果用除法,也会有问题,如果有0出现也会变繁琐。 + +谷歌一下: + + +解法还是很棒的 + + output[i] = { i 前面的数的乘积} X { i 后面的数的乘积} + + +``` +class Solution(object): + def productExceptSelf(self,nums): + """ + :type nums: List[int] + :rtype: List[int] + """ + if nums == [] : return [] + lft = [1] + rgt = [1] + product = 1 + for i in range(1,len(nums)): + product *= nums[i-1] + lft.append(product) + product = 1 + for i in reversed(range(1,len(nums))): + product *= nums[i] + rgt.append(product) + rgt.reverse() + result = [] + for i in range(len(nums)): + result.append(lft[i]*rgt[i]) + return result + +``` + + +空间O(n),再看到满足要求的“标准解法” + + +``` +class Solution(object): + def productExceptSelf(self,nums): + """ + :type nums: List[int] + :rtype: List[int] + """ + if nums == [] : return [] + size = len(nums) + output = [1] * size + left = 1 + for x in range(size-1): + left *= nums[x] + output[x+1] *= left + right = 1 + for x in range(size - 1, 0, -1): + right *= nums[x] + output[x-1] *= right + return output +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/240._search_a_2d_matrix_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/240._search_a_2d_matrix_ii \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..545732ebc --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/240._search_a_2d_matrix_ii \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,63 @@ +### 240. Search a 2D Matrix II + + + +题目: + + + +难度: +Medium + +思路: + +每行,每列都是sorted + +但是比较好的策略是从右上角开始搜索,比如这样: + +``` +matrix = [ + [1, 4, 7, 11, 15], + [2, 5, 8, 12, 19], + [3, 6, 9, 16, 22], + [10, 13, 14, 17, 24], + [18, 21, 23, 26, 30] +] + +m, n = 0, col - 1 +更新策略: + matrix[m][n] < target: 那么这一行到从左走到此都会小于target,row+1 ,往下走 + matrix[m][n] > target: 那么这一列往下走都会大于target,col - 1,往左走 + 否则找到 +``` + +时间复杂度O(max(M,N)),因为每次都会往下或者往左走 + + +用的算法是Saddleback + + + +```python +class Solution(object): + def searchMatrix(self, matrix, target): + """ + :type matrix: List[List[int]] + :type target: int + :rtype: bool + """ + if not matrix: + return False + row = len(matrix) + col = len(matrix[0]) if row else 0 + m, n = 0, col - 1 + while m < row and n >= 0: + if matrix[m][n] < target: + m += 1 + elif matrix[m][n] > target: + n -= 1 + else: + return True + return False + +``` diff --git "a/docs/Leetcode_Solutions/Java/242._valid_anagram \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/242._valid_anagram \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..46d8cd269 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/242._valid_anagram \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,61 @@ +### 242. Valid Anagram + +题目: + + + +难度 : Easy + + +一行瞬秒: + +```python +class Solution(object): + def isAnagram(self, s, t): + """ + :type s: str + :type t: str + :rtype: bool + """ + return collections.Counter(s) == collections.Counter(t) +``` + +```python +class Solution(object): + def isAnagram(self, s, t): + """ + :type s: str + :type t: str + :rtype: bool + """ + return sorted(s) == sorted(t) + +``` + + +用字数统计,因为只可能是26个字母 + + +``` + +class Solution(object): + def isAnagram(self, s, t): + """ + :type s: str + :type t: str + :rtype: bool + """ + if len(s) != len(t): + return False + + charCnt = [0] * 26 + + for i in range(len(s)): + charCnt[ord(s[i]) - 97] += 1 + charCnt[ord(t[i]) - 97] -= 1 + + for cnt in charCnt: + if cnt != 0: + return False + return True +``` diff --git "a/docs/Leetcode_Solutions/Java/252. Meeting Rooms \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/252. Meeting Rooms \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..c84dee953 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/252. Meeting Rooms \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,47 @@ +### 252. Meeting Rooms + + + +题目: + + + + +难度 : Easy + + + +思路: + +学了一下如何根据attribute 来sort object `intervals.sort(key = lambda interval : interval.start)` + + + +AC 代码 + +``` +# Definition for an interval. +# class Interval(object): +# def __init__(self, s=0, e=0): +# self.start = s +# self.end = e + +class Solution(object): + def canAttendMeetings(self, intervals): + """ + :type intervals: List[Interval] + :rtype: bool + """ + n = len(intervals) + if n < 2 : return True + intervals.sort(key = lambda interval : interval.start) + for i in range(1,n): + if intervals[i].start < intervals[i-1].end: + return False + return True +``` + + + + + diff --git "a/docs/Leetcode_Solutions/Java/255._Verify_Preorder_Sequence_in_Binary_Search_Tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/255._Verify_Preorder_Sequence_in_Binary_Search_Tree \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..dfe1f7039 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/255._Verify_Preorder_Sequence_in_Binary_Search_Tree \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,72 @@ +### 255. Verify Preorder Sequence in Binary Search Tree + +题目: + + + +难度: + +Medium + + +思路: + +这道题让给了我们一个一维数组,让我们验证其是否为一个二叉搜索树的先序遍历出的顺序,我们都知道二叉搜索树的性质是左<根<右,如果用中序遍历得到的结果就是有序数组,而先序遍历的结果就不是有序数组了,但是难道一点规律都没有了吗,其实规律还是有的,根据二叉搜索树的性质,当前节点的值一定大于其左子树中任何一个节点值,而且其右子树中的任何一个节点值都不能小于当前节点值,那么我们可以用这个性质来验证,举个例子,比如下面这棵二叉搜索树: +``` + 10 + / \ + 5 12 + / \ + 2 6 + + preorder:[10, 5, 2, 6, 12] +``` + +如这个例子,我们先设一个最小值min_num,然后遍历数组,如果当前值小于这个最小值min_num,返回false,对于根节点,我们将其压入栈中,然后往后遍历,如果遇到的数字比栈顶元素小,说明是其左子树的点,继续压入栈中,直到遇到的数字比栈顶元素大,那么就是右边的值了,我们需要找到是哪个节点的右子树,所以我们更新low值并删掉栈顶元素,然后继续和下一个栈顶元素比较,如果还是大于,则继续更新low值和删掉栈顶,直到栈为空或者当前栈顶元素大于当前值停止,压入当前值,这样如果遍历完整个数组之前都没有返回false的话,最后返回true即可 + + +参考[Ethan Li 的技术专栏](https://segmentfault.com/a/1190000003874375) + +O(n) time, O(n) space +```python +class Solution(object): + def verifyPreorder(self, preorder): + """ + :type preorder: List[int] + :rtype: bool + """ + stack = [] + min_num = -1 << 31 # 初始化最小值为最小整数 + for x in preorder: + if x < min_num: # 违反最小值限定则是无效的 + return False + while stack and x > stack[-1]: # 将路径中所有小于当前的数pop出来并更新最小值 + min_num = stack.pop() + stack.append(x) # 将当前值push进去 + return True +``` + +### Follow up: +O(n) time, O(1) space + +we realize that the preorder array can be reused as the stack thus achieve O(1) extra space, since the scanned items of preorder array is always more than or equal to the length of the stack. +```python +class Solution(object): + def verifyPreorder(self, preorder): + """ + :type preorder: List[int] + :rtype: bool + """ + # stack = preorder[:i], reuse preorder as stack + min_num = -1 << 31 + i = 0 + for x in preorder: + if x < min_num: + return False + while i > 0 and x > preorder[i - 1]: + min_num = preorder[i - 1] + i -= 1 + preorder[i] = x + i += 1 + return True +``` diff --git "a/docs/Leetcode_Solutions/Java/256. Paint House \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/256. Paint House \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..21576f90a --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/256. Paint House \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,57 @@ +### 256. Paint House + +题目: + + +难度: +Medium + + + +其实这个题目有实际意义诶,至少我的故乡?在要申请啥东西的时候就把街上的房子全刷了。 + +然后这个是相邻的房子不同色。 + + + +其实我觉得paint fense更难一点 + + + +思路: + +数组 dp\[x][3] 代表第x个房子paint r/g/b的值 + + + +AC代码 + +``` +class Solution(object): + def minCost(self, costs): + """ + :type costs: List[List[int]] + :rtype: int + """ + m = len(costs) + if m == 0 : return 0 + elif m == 1 : return min(costs[0][0], costs[0][1],costs[0][2]) + else: + n = 3 if m else 0 + dp = [[0 for i in range(3)] for j in range(m)] + + dp[0] = costs[0] + + + for i in range(1,m): + dp[i][0] = min(dp[i-1][1],dp[i-1][2]) + costs[i][0] + dp[i][1] = min(dp[i-1][0],dp[i-1][2]) + costs[i][1] + dp[i][2] = min(dp[i-1][0],dp[i-1][1]) + costs[i][2] + return min(dp[m-1][0], dp[m-1][1], dp[m-1][2]) + +``` + + + + + diff --git "a/docs/Leetcode_Solutions/Java/257._binary_tree_paths \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/257._binary_tree_paths \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..c0fdea6ed --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/257._binary_tree_paths \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,45 @@ +###257. Binary Tree Paths + +题目: + + + + +难度: + +Easy + + +Tag : tree, DFS + +类似的题目是Path Sum Ⅱ + + +第一眼看起来不像easy题目,然后堵了一下自己写的Path Sum Ⅱ自己的解答 + +同一种花样 + +``` +class Solution: + # @param {TreeNode} root + # @return {string[]} + def binaryTreePaths(self, root): + if root == None: return [] + result = [] + self.auxTreePaths(root,result,"") + return result + + + def auxTreePaths(self,root,result,curStr): + if root == None: + return + curStr += str(root.val) + if root.left == None and root.right == None: + result.append(curStr) + if root.left: + self.auxTreePaths(root.left,result,curStr + "->") + if root.right: + self.auxTreePaths(root.right,result,curStr + "->") + +``` + diff --git "a/docs/Leetcode_Solutions/Java/258_ Add_Digits \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/258_ Add_Digits \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..2fa72406a --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/258_ Add_Digits \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,34 @@ +### 258. Add Digits + +题目: + + + +难度: + +Easy + + +思路 + +这就简单的一p了。。 + + +```python +class Solution(object): + def addDigits(self, num): + """ + :type num: int + :rtype: int + """ + while num / 10 >= 1: + tmp = 0 + while num / 10 >= 1: + tmp += num % 10 + num /= 10 + tmp += num % 10 + num = tmp + return num +``` + + diff --git "a/docs/Leetcode_Solutions/Java/261. Graph Valid Tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/261. Graph Valid Tree \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..1e309007a --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/261. Graph Valid Tree \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,69 @@ +### 261. Graph Valid Tree + + + +题目: + + + + +难度 : Medium + + + +思路: + +graph 为 tree 两个条件: + +- 这个图是connected +- 没有cycle + + + +偷懒AC代码,直接在323题,Number of Connected Components in an Undirected Graph上改的AC代码: + + + +``` +class Solution(object): + def validTree(self, n, edges): + """ + :type n: int + :type edges: List[List[int]] + :rtype: bool + """ + def find(x): + if uf[x] != x: + uf[x] = find(uf[x]) + return uf[x] + + def union(x,y): + xRoot = find(x) + yRoot = find(y) + uf[xRoot] = yRoot + + uf = [i for i in range(n)] + + for node1, node2 in edges: + # cycle exists + if find(node1) == find(node2): + print 'ha ' + return False + else: + union(node1, node2) + + res = set() + for i in range(n): + res.add(find(i)) + + return len(res) == 1 +``` + + + + + + + + + diff --git "a/docs/Leetcode_Solutions/Java/263._ugly_number \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/263._ugly_number \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..730b0bdde --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/263._ugly_number \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,38 @@ +###263. Ugly Number + + + +题目: + + + +难度: +Easy + + +思路: + +因为其prime factors 只包括 2, 3, 5,所以比如如果能被2 整除, n = n / 2, 直到不能被2整除,然后同样对3,5检验,如果最终结果为1,那么就是ugly number,否则不过关 + + +注意一下边界条件,当num为0的时候,return一下False + +``` +class Solution(object): + def isUgly(self, num): + """ + :type num: int + :rtype: bool + """ + if num == 0 : return False + while num % 2 == 0: + num = num / 2 + while num % 3 == 0: + num = num / 3 + while num % 5 == 0: + num = num / 5 + if num == 1: + return True + return False +``` + diff --git "a/docs/Leetcode_Solutions/Java/264._ugly_number_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/264._ugly_number_ii \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..ba1546b9e --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/264._ugly_number_ii \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,140 @@ +###264. Ugly Number II + + + +题目: + + + +难度: +Medium + + +思路: + +暴力算法一定会超时 + + + + +先看一个非常🐂的帖子,当我知道python 除了有list之外还有collections就已经被刷新了一次了,然后数据结构 x 数据结构,就展示了数据结构的魅力 + + + + +看一下deque + rotate: + + +``` +import collections +a = collections.deque() +a.append(2) +a.append(5) +a.append(7) +a.append(9) #a deque([2, 5, 7, 9]) + +import bisect +idx = bisect.bisect_left(a,3) #1 +a.rotate(-idx) #deque([5, 7, 9, 2]) + +a.appendleft(3) #deque([3, 5, 7, 9, 2]) + +a.rotate(idx) # deque([2, 3, 5, 7, 9]) +``` + +这个rotate -是往左边rotate,看官网的介绍. + +>Rotate the deque n steps to the right. If n is negative, rotate to the left. Rotating one step to the right is equivalent to: d.appendleft(d.pop()). + +所以这样造成可以🐂的数据结构 + +用这个微调之后的fasttable来解决问题 + + +``` +import collections +import bisect + +class FastTable: + + def __init__(self): + self.__deque = collections.deque() + + def __len__(self): + return len(self.__deque) + + def head(self): + return self.__deque.popleft() + + def tail(self): + return self.__deque.pop() + + def peek(self): + return self.__deque[-1] + + def insert(self, obj): + if obj in self.__deque: + return + index = bisect.bisect_left(self.__deque, obj) + self.__deque.rotate(-index) + self.__deque.appendleft(obj) + self.__deque.rotate(index) + +class Solution(object): + + def nthUglyNumber(self, n): + """ + :type n: int + :rtype: int + """ + q = FastTable() + q.insert(1) + while n > 0: + x = q.head() + q.insert(2*x) + q.insert(3*x) + q.insert(5*x) + n -= 1 + return x +``` + + +还可以优化: +根据页面hint 来做的 + + +``` +class Solution(object): + def nthUglyNumber(self, n): + """ + :type n: int + :rtype: int + """ + if n == 1: + return 1 + else: + import collections + q2 = collections.deque() + q3 = collections.deque() + q5 = collections.deque() + q2.append(2) + q3.append(3) + q5.append(5) + while n > 1: + x = min(q2[0],q3[0],q5[0]) + if x == q2[0]: + x = q2.popleft() + q2.append(2*x) + q3.append(3*x) + q5.append(5*x) + elif x == q3[0]: + x = q3.popleft() + q3.append(3*x) + q5.append(5*x) + else: + x = q5.popleft() + q5.append(5*x) + n -= 1 + return x +``` + diff --git "a/docs/Leetcode_Solutions/Java/265. Paint House II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/265. Paint House II \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..c9dfbc20f --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/265. Paint House II \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,60 @@ +### 265. Paint House II + + + +题目: + + +难度: + +Hard + + + +思路: + +感觉不像hard 题,知道为啥hard了,因为can you solve it in O(nk) runtime + +数组 dp\[x][k] 代表第x个房子paint 0..k的值 + + + +用paint house 1 改的AC代码: + +不过这个时间复杂度是O(nkk)吧 + + + +``` +class Solution(object): + def minCostII(self, costs): + """ + :type costs: List[List[int]] + :rtype: int + """ + n = len(costs) + if n == 0 : return 0 + elif n == 1 : return min (costs[0]) + else: + k = len(costs[0]) if n else 0 + dp = [[0 for i in range(k)] for j in range(n)] + + dp[0] = costs[0] + + for i in range(1,n): + for j in range(0,k): + minVal = float('inf') + for m in range(0,k): + if m != j and dp[i-1][m] < minVal: + minVal = dp[i-1][m] + dp[i][j] = minVal + costs[i][j] + + return min(dp[-1]) +``` + + + + + + + diff --git "a/docs/Leetcode_Solutions/Java/266. Palindrome Permutation \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/266. Palindrome Permutation \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..49f78bd04 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/266. Palindrome Permutation \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,46 @@ +### 266. Palindrome Permutation + + + +题目: + + +难度 : Easy + + + +思路: + +hint 已经提示的很明显。数单字个数来处理 + + + +AC代码 + + + +``` +class Solution(object): + def canPermutePalindrome(self, s): + """ + :type s: str + :rtype: bool + """ + lookup = {} + + for char in s: + lookup[char] = lookup.get(char,0) + 1 + + res = 0 + + for char, cnt in lookup.items(): + if cnt % 2 == 0 : + continue + else: + res += 1 + + return res < 2 +``` + +​ + diff --git "a/docs/Leetcode_Solutions/Java/267. Palindrome Permutation II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/267. Palindrome Permutation II \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..5243954ee --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/267. Palindrome Permutation II \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,77 @@ +### 267. Palindrome Permutation II + + + + + +题目: + + + + +难度 : Medium + + + +思路: + +首先这个题目有个简单版本,那就是判断是否可以permutate 为 palindrome. 问题的关键是最多只能一个odd character. + + + +写的这么不elegant,我也是服气! + +AC代码: + + + +``` +class Solution(object): + def generatePalindromes(self, s): + """ + :type s: str + :rtype: List[str] + """ + def permuteUnique(firstS): + if len(firstS) == 0 : return [] + if len(firstS) == 1 : return [firstS] + res = [] + for i in range(len(firstS)): + if i > 0 and firstS[i] == firstS[i-1]: continue + for j in permuteUnique(firstS[:i] + firstS[i+1:]): + res.append([firstS[i]] + j) + return res + + lookup = {} + for char in s: + lookup[char] = lookup.get(char, 0) + 1 + + res, firstS, oddChar = 0, [], '' + for char, cnt in lookup.items(): + if cnt % 2 == 0: + for i in range(cnt/2): + firstS.append(char) + continue + else: + for i in range(cnt / 2): + firstS.append(char) + oddChar = char + res += 1 + if res >= 2: + return [] + else: + res = permuteUnique(firstS) + if len(res) == 0 and oddChar: + return [oddChar] + return map(lambda x: ''.join(x) + oddChar + ''.join(x[::-1]),res) + +``` + + + + + + + + + diff --git "a/docs/Leetcode_Solutions/Java/268._missing_number \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/268._missing_number \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..fbd54da5a --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/268._missing_number \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,49 @@ +### 268. Missing Number + +题目: + + + +难度: + +Medium + + + +等差数列前n项和减去数组之和,一行瞬秒 +```(注意题目input从0开始取值)``` + + +```python +class Solution(object): + def missingNumber(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + return len(nums) * (len(nums) + 1) / 2 - sum(nums) +``` + + + +第二种解法是位运算:位运算(异或运算) + + + +```python +class Solution(object): + def missingNumber(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + res = n = len(nums) + for i in range(n): + res ^= i + res ^= nums[i] + return res +``` + + + + diff --git "a/docs/Leetcode_Solutions/Java/270. Closest Binary Search Tree Value \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/270. Closest Binary Search Tree Value \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..b2aafe48a --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/270. Closest Binary Search Tree Value \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,66 @@ +### 270. Closest Binary Search Tree Val + +题目: + + + + + +难度 : Easy + +最简单的算法是inorder一遍,得到有序的lst,然后O(N) 寻找最靠近的,但是明显不是很高效。 + +AC代码 + +``` +class Solution(object): + def closestValue(self, root, target): + """ + :type root: TreeNode + :type target: float + :rtype: int + """ + lst = [] + + def inorder(root): + if root: + inorder(root.left) + lst.append(root.val) + inorder(root.right) + + inorder(root) + + close = lst[0] + diff = abs(target - lst[0]) + + for i in lst: + if abs(target - i) < diff: + close = i + diff = abs(target - i ) + + return close +``` + + + +AC代码,跟binary search tree 寻值一样, loop 一遍树来寻找 + + + +``` + +class Solution(object): + def closestValue(self, root, target): + """ + :type root: TreeNode + :type target: float + :rtype: int + """ + close = root.val + + while root: + close = root.val if abs(target - root.val) < abs(target - close) else close + root = root.right if root.val < target else root.left + return close +``` + diff --git "a/docs/Leetcode_Solutions/Java/276. Paint Fence \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/276. Paint Fence \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..3b7373ed9 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/276. Paint Fence \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,65 @@ +### 276. Paint Fence + +题目: + + +难度: +Easy + +思路: + +先解释一下题目意思: fence 栅栏, post 柱子 , no more than two adjacent fence posts have the same color.(一开始看漏,没有看到more than,以为相邻就不能同色)。 + +本来想画格子找规律,结果走偏了,所以老老实实写递推关系式,貌似是这样的 + +- n = 0 : 全为0 +- n = 1 : 有 k种方式 +- n = 2 :有 k * k 种 +- 否则,第n个有两种可能, 跟 n-1 颜色不一样, 跟 n-1 颜色一样, fn = (k-1)fn-1 + (k-1) fn-2 + + + +画一下表:对一下递推关系式,正确✅ + + + +``` + n + 0 1 2 3 4 + 0 0 0 0 0 0 +t 1 0 1 1 0 0 + 2 0 2 4 6 10 + 3 0 3 9 24 . + 4 0 4 16 60 . +``` + + + +AC 代码 + +``` +class Solution(object): + def numWays(self, n, k): + """ + :type n: int + :type k: int + :rtype: int + """ + if n == 0: + return 0 + else: + if k == 0: return 0 + elif n == 1: return k + elif n == 2 : return k * k + else: + dp = [0 for i in range(n+1)] + dp[0] = 0 + dp[1] = k + dp[2] = k * k + + for i in range(3,n+1): + dp[i] = (k-1) * dp [i-1] + (k-1) * dp [i-2] + return dp[-1] + +``` + diff --git "a/docs/Leetcode_Solutions/Java/277. Find the Celebrity \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/277. Find the Celebrity \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..e6bc0312a --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/277. Find the Celebrity \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,65 @@ +### 277. Find the Celebrity + + + +题目: + + + + +难度 : Medium + + + +思路: + +算法考试考过 + +celebrity 是 每个人都知道他,而他不认识任何别的人。 + + + +如果用图来看,那就每个别的人都有箭头指向c,而c没有任何出去的箭头。 + +O(N^2)的代码还是还是很容易想到的 + +但是我们可以有提升,那么就是可以check `knows(a,b)`,如果 a knows b,那么可以排除a是celebrity,否则可以排除b是celebrity. + +最后还要确认一遍是否这个是真的celebrity + + + +AC代码 + +``` +# The knows API is already defined for you. +# @param a, person a +# @param b, person b +# @return a boolean, whether a knows b +# def knows(a, b): + +class Solution(object): + def findCelebrity(self, n): + """ + :type n: int + :rtype: int + """ + if n == 0: + return -1 + c = 0 + for i in xrange(1,n): + if not knows(i, c): + c = i + for i in range(n): + if c != i: + if not knows(i,c) or knows(c,i): + return -1 + return c + + +``` + + + + + diff --git "a/docs/Leetcode_Solutions/Java/278._First_Bad _Version \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/278._First_Bad _Version \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..7c6d94240 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/278._First_Bad _Version \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,40 @@ +### 278. First Bad Version + + + + + +题目: + + + + +难度 : Easy + + + +思路: + +根据 search for a range 改的 + + + +```python +class Solution(object): + def firstBadVersion(self, n): + """ + :type n: int + :rtype: int + """ + l, r = 0, n - 1 + while l <= r: + mid = l + ((r - l) >> 2) + if not isBadVersion(mid): + l = mid + 1 + else: + r = mid - 1 + return l +``` + + + diff --git "a/docs/Leetcode_Solutions/Java/279._perfect_squares \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/279._perfect_squares \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..f4d8bd50f --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/279._perfect_squares \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,116 @@ + +### 279. Perfect Squares + + +题目: + + + +难度: + +Medium + +### 思路一: +DP, 状态转移方程: + +```dp[i] = min(dp[i], dp[i - j * j] + 1)``` + + + + +```python +class Solution(object): + def numSquares(self, n): + """ + :type n: int + :rtype: int + """ + dp = [0] * (n+1) + for i in range(n+1): + dp[i] = i + j = 1 + while j * j <= i: + dp[i] = min(dp[i], dp[i-j*j] + 1) + j += 1 + return dp[-1] +``` +但是这个方法贼慢,beats 12%, 有时候提交甚至会超时,有时候又不会。。。。因此想别的办法 + +### 思路二: + +Static DP, beats 90.39% + +```python +class Solution(object): + dp = [0] + def numSquares(self, n): + """ + :type n: int + :rtype: int + """ + while len(self.dp) <= n: + m = len(self.dp) + inf = float('inf') + i = 1 + while i * i <= m: + inf = min(inf, self.dp[m-i*i] + 1) + i += 1 + self.dp.append(inf) + return self.dp[n] +``` + +进一步简化可以写成: +```python +class Solution(object): + dp = [0] + def numSquares(self, n): + """ + :type n: int + :rtype: int + """ + while len(self.dp) <= n: + self.dp += min(self.dp[-j*j] + 1 for j in range(1, int(len(self.dp)**0.5+1))), + return self.dp[n] +``` +这里有个问题现在还没搞明白,以后再好好想一下,写成```return self.dp[-1]```提交就失败, +``` +Submission Result: Wrong Answer +Input: 1024 +Output: 4 +Expected: 1 +``` + +### 思路三: + +还是慢,有个数学方法, runtime beats 98.48% +```python +import math +class Solution(object): + def numSquares(self, n): + """ + :type n: int + :rtype: int + """ + def isSquare(num): + tmp = int(math.sqrt(num)) + return tmp * tmp == num + while n & 3 == 0: # n % 4 == 0 + n >>= 2 + if n & 7 == 7: # n % 8 == 7 + return 4 + if isSquare(n): + return 1 + sqrt_n = int(math.sqrt(n)) + for i in range(1, sqrt_n + 1): + if isSquare(n-i*i): + return 2 + return 3 +``` +in order to understand, I suggest u read: + +here is the [Lagrange's Four Square theorem](https://en.wikipedia.org/wiki/Lagrange%27s_four-square_theorem +) - Limit the result to <= 4: + +And this [article](http://www.alpertron.com.ar/4SQUARES.HTM), in which you can also find the way to present a number as a sum of four squares: + + diff --git "a/docs/Leetcode_Solutions/Java/280._Wiggle_Sort \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/280._Wiggle_Sort \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..3188ca405 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/280._Wiggle_Sort \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,78 @@ +### 280. Wiggle Sort + + + + + +题目: + + + + +难度 : Medium + + + +思路: + + + +想的是比如bubble sort或者任何简单的比较sort,只是放数字的时候是按这样的大小顺序放: + +1, n, 2, n-1,3, n-2…. + +或者每个pass其实做两个sort,找出最大的和最小的。然后分别放在头尾。 + + + +这样的写法TLE: + +``` +class Solution(object): +    def wiggleSort(self, nums): # 此法超时 +        """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + n = len(nums) + for i in range(n): + # small bubble sort + if i % 2 == 0: + for j in range(n-1, i-1, -1): + if nums[j] > nums[j-1]: + nums[j], nums[j-1] = nums[j-1],nums[j] + else: + for j in range(n-1, i-1, -1): + if nums[j] < nums[j-1]: + nums[j], nums[j-1] = nums[j-1],nums[j] +``` + + + + + +但是貌似想复杂了,其实对于这个简单化,要求只有一个: + +1. 如果i是奇数,nums[i] >= nums[i - 1] +2. 如果i是偶数,nums[i] <= nums[i - 1] + +所以我们只要遍历一遍数组,把不符合的情况交换一下就行了。具体来说,如果nums[i] > nums[i - 1], 则交换以后肯定有nums[i] <= nums[i - 1]。 + + + +AC 代码 + +```python +class Solution(object): + def wiggleSort(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + for i in xrange(1, len(nums)): + if ((i % 2) and nums[i] < nums[i-1]) or ((not i % 2) and nums[i] > nums[i-1]): + nums[i], nums[i-1] = nums[i-1], nums[i] +``` + + + diff --git "a/docs/Leetcode_Solutions/Java/283._move_zeroes \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/283._move_zeroes \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..a5e887c05 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/283._move_zeroes \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,128 @@ +### 283. Move Zeroes + + +题目: + + + +难度: +Easy + + +思路: + +### 思路一:暴力 + +```python +class Solution(object): + def moveZeroes(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + i = 0 + while 0 in nums: + nums.remove(0) + i += 1 + nums.extend([0]*i) +``` + +### 思路二: + +一旦遇到不是0的就把它往前移动,移动非0完成,剩下的全部填0,看例子 + + + +``` +0 1 0 3 12 + +``` + +也算双指针吧, +首先cur = 0, idx = 0,为0,不变,然后idx = 1,不为0,前移,数组变成 + +``` +1 1 0 3 12 +``` + +继续idx 这个时候是2,不变,继续处理,碰到3可以变成 + +``` +1 3 0 3 12 +``` +这样知道变换完成,简直逆天啊,因为cur 总是小于idx,所以总可以保持这样的稳定性 + + +```python +class Solution(object): + def moveZeroes(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + cur,idx = 0,0 + while idx < len(nums): + # cur is not 0 + if nums[idx] != 0 : + nums[cur] = nums[idx] + cur += 1 + idx += 1 + + while cur < len(nums): + nums[cur] = 0 + cur += 1 + +``` + + +### 思路三: + +传统的双指针,参考这里 + + + +```此法最快,beats 90.50%``` + +```python +class Solution(object): + def moveZeroes(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ +        p0, p1 = 0, 0 # P1指向非0,p0指向0 +        while p0 < len(nums) and p1 < len(nums): + if nums[p0] != 0: + p0 += 1 + p1 = p0 + continue + if nums[p1] == 0: + p1 += 1 + continue + nums[p0],nums[p1] = nums[p1],nums[p0] + p0 += 1 + p1 += 1 +``` + +相反,我觉得这样双指针反而没有上面的代码容易理解 + +### 思路四: + +一个比较巧妙的方法: +```python +class Solution(object): + def moveZeroes(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + nums.sort(key= lambda x: 1 if x == 0 else 0) +``` +原理就是原先为0的数优先级在此次sort中更高了,所以全部升序排列排到后面去了 + +但是这个解法被人说是没有满足题目```no extra space```的条件,详见[Sayo](https://leetcode.com/problems/move-zeroes/discuss/72074/) +``` +timsort can require a temp array containing as many as N//2 pointers, which means as many as 2*N extra bytes on 32-bit boxes. +``` + + diff --git "a/docs/Leetcode_Solutions/Java/285._inorder_successor_in_bst \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/285._inorder_successor_in_bst \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..a5a489be9 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/285._inorder_successor_in_bst \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,81 @@ +###285. Inorder Successor in BST + + +题目: + + + +难度: +Medium + +思路: + + +BST的特性,对于一个node,它的所有左侧node都比它小,它的所有右侧node都比它大。最小的元素在最左边,最大的元素在最右边。 + +一个node x它的successor y 是满足y > x的最小值。两种情况,如果node x有right child,那么这个right child 中的最小值就是它的successor,否则就要往上走,如果走上去的parent使得这个node是其左边的孩子的话,那么successor我们也找到了。 + + +因为状况可能是这样的: + +``` + 3 + / + 1 + / \ + 0 2 +``` + +如果是寻找0的successor,那么我们往上一走,发现0的祖先是1,并且0是1的左孩子,找到,否则如果寻找2的successor,那么我们要往上走到3的部分,2是3的左subtree,这样才能解决问题。 + +伪码 + +``` +function Succ(x) + if Right(x) ̸= NIL then + return Min(Right(x)) + else + p ← Parent(x) + while p ̸= NIL and x = Right(p) do + x←p + p ← Parent(p) + return p +``` + +这里伪码有点不适用是因为我们并没有这个parent指针,当然我们还是有trick方式的,就是我们从root开始走,直到找到这个node p,同时我们记录一路上看到的比p.val大的值,这样最后一个就是它的successor.其中最低的那一个就是他的successor. + +AC代码如下: + + +``` +class Solution(object): + def inorderSuccessor(self, root, p): + """ + :type root: TreeNode + :type p: TreeNode + :rtype: TreeNode + """ + def minNode(root): + while root.left!= None: + root = root.left + return root + + + def searchP(p, root): + if root == None or root.val == p.val: + return None + else: + succ = None + while root != None and p.val != root.val: + if p.val < root.val: + succ = root + root = root.left + else: + root = root.right + return succ + + if p.right: + return minNode(p.right) + else: + return searchP(p, root) +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/286. Walls and Gates \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/286. Walls and Gates \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..8a23c2681 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/286. Walls and Gates \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,90 @@ +### 286. Walls and Gates + + + +题目: +https://leetcode.com/problems/walls-and-gates/ + + + +难度 : Medium + + + +思路: + +乍一看feel like all pairs shortest path. + +naive的想法是针对所有为0的点做all pairs shortest path,然后最终得到的就是把INF替换保留最小的。时间复杂度是0的个数* BFS + + + +naive的想法AC + +``` +class Solution(object): + def wallsAndGates(self, rooms): + """ + :type rooms: List[List[int]] + :rtype: void Do not return anything, modify rooms in-place instead. + """ + def legal(x,y): + return x >= 0 and x < row and y >= 0 and y < col and rooms[x][y] != -1 + + def bfs(rooms, i, j): + queue = [] + queue.append((i,j)) + + while queue: + (x,y) = queue.pop() + + if legal(x-1,y) and rooms[x-1][y] > rooms[x][y] + 1: + rooms[x-1][y] = rooms[x][y] + 1 + queue.append((x-1,y)) + if legal(x+1,y) and rooms[x+1][y] > rooms[x][y] + 1 : + rooms[x+1][y] = rooms[x][y] + 1 + queue.append((x+1,y)) + if legal(x,y-1) and rooms[x][y-1] > rooms[x][y] + 1: + rooms[x][y-1] = rooms[x][y] + 1 + queue.append((x,y-1)) + if legal(x,y+1) and rooms[x][y+1] > rooms[x][y] + 1 : + rooms[x][y+1] = rooms[x][y] + 1 + queue.append((x,y+1)) + + + row = len(rooms) + col = len(rooms[0]) if row else 0 + + for i in range(row): + for j in range(col): + if rooms[i][j] == 0: + bfs(rooms,i,j) +``` + + + +复习一下BFS的伪码 + +from wikipedia, 一开始有点小迷茫,那就是为什么没有keep一个visited的数据结构,但是随即反应过来,其实`n.distance == INFINITY` 已经是check它是否被visited 过了,我以上的代码并没有做这个操作,但是因为是格子状以及我仅在检查是否更小,所以也能AC. + +``` +Breadth-First-Search(Graph, root): + + for each node n in Graph: + n.distance = INFINITY + n.parent = NIL + + create empty queue Q + + root.distance = 0 + Q.enqueue(root) + + while Q is not empty: + current = Q.dequeue() + for each node n that is adjacent to current: + if n.distance == INFINITY: + n.distance = current.distance + 1 + n.parent = current + Q.enqueue(n) +``` + diff --git "a/docs/Leetcode_Solutions/Java/289._game_of_life \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/289._game_of_life \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..097ffc3ed --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/289._game_of_life \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,111 @@ +### 289. Game of Life + +题目: + + + +难度 : Medium + + +直接一上来就没有考虑solve it in-place,考虑的是便利,简直是born for 便利 + +首先我把board拓宽了,宽,高各增加了两排。 + +因为这样求neighbor方便,针对原来的borad,现在新的big 对于 1 -> n-1 的部分 + +全都有八个neighbor,用了一个2d array来记录nbrs,再根据当下的nbr来判断更新,因为不能一边在board上loop一边更新. + +AC的效率还ok: + +```python +class Solution(object): + def gameOfLife(self, board): + """ + :type board: List[List[int]] + :rtype: void Do not return anything, modify board in-place instead. + """ + def liveNeighbors(i,j): + return big[i-1][j-1] + big[i-1][j] + big[i-1][j+1] + big[i][j-1] + big[i][j+1] + big[i+1][j-1] + big[i+1][j] + big[i+1][j+1] + + if board == [[]] : return + row = len(board) + col = len(board[0]) + + nbrs = [[0 for j in range(col)] for i in range(row)] + big = [[ 0 for j in range(col+2) ] for i in range(row+2)] + for i in range(1,row+1): + for j in range(1,col+1): + big[i][j] = board[i-1][j-1] + + for i in range(1,row+1): + for j in range(1,col+1): + nbrs[i-1][j-1] = liveNeighbors(i,j) + + for i in range(row): + for j in range(col): + if board[i][j] == 1: + if nbrs[i][j] < 2: + board[i][j] = 0 + elif nbrs[i][j] == 2 or nbrs[i][j] == 3: + board[i][j] = 1 + else: + board[i][j] = 0 + else: + if nbrs[i][j] == 3: + board[i][j] = 1 + +``` + +谷歌了一下,大家都用到了temp 2d array嘛,哼(ˉ(∞)ˉ)唧。好吧,空间复杂度比我小。 + + + +很多的解法都是一样开了一个二维数组,即使没有像我一样扩展board.因为问题在于不能一边更新board 一边来做。 + +看了一下这边的思路: + + + + + + + +不开数组 + +我们可以使用状态机转换 o(╯□╰)o 感觉不知道在听什么 还是很迷茫的感觉, in-place AC代码 + +```python +class Solution(object): + def gameOfLife(self, board): + """ + :type board: List[List[int]] + :rtype: void Do not return anything, modify board in-place instead. + """ + row = len(board) + col = len(board[0]) if row else 0 + + dx = [-1,-1,-1,0,1,1,1,0] + dy = [-1,0,1,1,1,0,-1,-1] + + for i in range(row): + for j in range(col): + cnt = 0 + for k in range(8): + x, y = i + dx[k], j + dy[k] + if x >=0 and x < row and y >=0 and y < col and (board[x][y] == 1 or board[x][y] == 2): + cnt += 1 + + if board[i][j] and (cnt < 2 or cnt > 3): + board[i][j] = 2 + elif board[i][j] == 0 and cnt == 3: + board[i][j] = 3 + + for i in range(row): + for j in range(col): + board[i][j] %= 2 + + +``` + + + diff --git "a/docs/Leetcode_Solutions/Java/290._word_pattern \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/290._word_pattern \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..e6122ec87 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/290._word_pattern \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,42 @@ +###290. Word Pattern + +题目: + + + +难度 : Easy + +4.pattern = "abba", str = "dog dog dog dog" should return false. + +因为这个的限制,所以中间加了一个loop用来查询是否这个a对应的已经出现过了。 + +不过其实也可以用两个dictionary来处理,可以O(n^3) -> O(n^2) + + +``` +class Solution(object): + def wordPattern(self, pattern, str): + """ + :type pattern: str + :type str: str + :rtype: bool + """ + strList = str.split(' ') + if len(pattern) != len(strList): + return False + lookup = {} + for i in range(len(strList)): + if pattern[i] not in lookup: + for key in lookup: + if lookup[key] == strList[i]: + return False + lookup[pattern[i]] = strList[i] + elif lookup[pattern[i]] != strList[i]: + return False + + return True + +``` + + +另外看到一段非常简短代码,使用了map函数,有待学习 diff --git "a/docs/Leetcode_Solutions/Java/292._nim_game \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/292._nim_game \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..9f78914f5 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/292._nim_game \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,55 @@ +### 292. Nim Game + +题目: + + + + +难度: + +Easy + + +对于总是优先开始的那方 + + +- 有一到三块,总是赢 +- 有四块,总是输 +- 有五块,总是赢 + +所以如果自己想赢,总是要迫使对方拿之后,给自己遗留5块,或者三块以及以下。 + +- 如果是六块: + - 拿一块,对方五块,对方赢 + - 拿两块,对方余下四块,我方赢 + - 拿三块,余三块,对方赢 + +- 七块: + - 拿三块,余四块,迫使对方输,总是赢 + +本打算用递归来看,因为对方也可以重复使用这个函数,但是会超时,所以就看了一下hint + + +- n <= 3 能赢 √ +- n == 4 总输 +- n = 5,6,7 总赢 +- n == 8, 先手如何选,总可以转成5,6,7 对方总会赢 + + +所以 n % 4 == 0 时候,先手必输 + +简直是啊,有些游戏就是这样来必赢的啊,没想到你是这样的题目 + + + +``` +class Solution(object): + def canWinNim(self, n): + """ + :type n: int + :rtype: bool + """ + return n % 4 != 0 +``` + + diff --git "a/docs/Leetcode_Solutions/Java/296. Best Meeting Point \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/296. Best Meeting Point \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..5f141f6a4 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/296. Best Meeting Point \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,67 @@ +### 296. Best Meeting Point + +题目: + + + + +难度 : Hard + + + +思路: + +提示是先从一维开始,其实一开始是略迷茫的,因为如果两个点,那么只要在这两个之间,一定就是最小值,线段长度。 + +不过倘若点增加到三个,那么就是第三个点处。 + + + +然后发现了一个很棒的stackoverflow page + + + + + +因为一开始理解错误二维数组的输入,以为是给的locs这样的数组,所以直接这样写了,然后发现给的是格子,所以但是还是偷懒这样写了。 + + + +AC 代码 + +``` +class Solution(object): + def minTotalDistance(self, grid): + """ + :type grid: List[List[int]] + :rtype: int + """ + res = 0 + locs = [] + + m = len(grid) + n = len(grid[0]) if m else 0 + + for i in range(m): + for j in range(n): + if grid[i][j] == 1: + locs.append([i,j]) + + + locs.sort(key = lambda point: point[0]) + x = locs[len(locs)/2][0] + for point in locs: + res += abs(point[0] - x) + + locs.sort(key = lambda point: point[1]) + y = locs[len(locs)/2][1] + for point in locs: + res += abs(point[1] - y) + + return res +``` + + + + + diff --git "a/docs/Leetcode_Solutions/Java/298. Binary Tree Longest Consecutive Sequence \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/298. Binary Tree Longest Consecutive Sequence \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..4c6bc841b --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/298. Binary Tree Longest Consecutive Sequence \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,123 @@ +### 298. Binary Tree Longest Consecutive Sequence + + + + + +题目: +https://leetcode.com/problems/binary-tree-longest-consecutive-sequence/ + + + +难度 : Medium + + + +思路: + + + +TLE代码,每个node求,然后求最大值 + +``` +# Definition for a binary tree node. +# class TreeNode(object): +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None + +class Solution(object): + def longestConsecutive(self, root): + """ + :type root: TreeNode + :rtype: int + """ + def consecutive(root): + if root == None: + return 0 + else: + left, right = 0,0 + if root.left: + if root.left.val == root.val + 1: + left = 1 + consecutive(root.left) + if root.right: + if root.right.val == root.val + 1: + right = 1 + consecutive(root.right) + return max(left, right, 1) + + def dfs(root): + s = [] + s.append(root) + while s: + root = s.pop() + res.append(consecutive(root)) + if root.left: + s.append(root.left) + if root.right: + s.append(root.right) + if not root: + return 0 + + res = [] + dfs(root) + return max(res) + +``` + + + + + +其实第二次递归,也就是dfs其实是有点多余的?因为可以边走边保存最大值? + +因为可以 + +> - recursion,在参数中包含当前的连续seq长度 +> - 如果left, right child的value是连续的,那么就将长度+1传入下一个call + + + + + +AC代码 + +``` +# Definition for a binary tree node. +# class TreeNode(object): +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None + +class Solution(object): + def longestConsecutive(self, root): + """ + :type root: TreeNode + :rtype: int + """ + def dfs(root, curLen): + self.result = max(curLen, self.result) + if root.left: + if root.left.val == root.val + 1: + dfs(root.left, curLen + 1) + else: + dfs(root.left, 1) + if root.right: + if root.right.val == root.val + 1: + dfs(root.right, curLen + 1) + else: + dfs(root.right,1) + + if not root: return 0 + + self.result = 0 + dfs(root, 1) + return self.result + +``` + + + +这里值得注意的是这里的self.result其实相当于dfs的全局变量,也是利用了这个才做到边递归边记录边重置。 + diff --git "a/docs/Leetcode_Solutions/Java/299._bulls_and_cows \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/299._bulls_and_cows \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..8b6cbe468 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/299._bulls_and_cows \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,119 @@ +###299. Bulls and Cows + +题目: + + + + +难度: + +Easy + + +我花了很久时间来AC,因为想了边界条件 + + +``` +class Solution(object): + def getHint(self, secret, guess): + """ + :type secret: str + :type guess: str + :rtype: str + """ + maps = {} + for i in range(len(secret)): + if secret[i] not in maps: + maps[secret[i]] = [i] + else: + maps[secret[i]].append(i) + mapg = {} + for i in range(len(guess)): + if guess[i] not in mapg: + mapg[guess[i]] = [i] + else: + mapg[guess[i]].append(i) + + print maps, mapg + + a,b = 0,0 + for key in maps.keys(): + if key in mapg.keys(): + common = list(set(mapg[key]) & set(maps[key])) + #check for bull + a += len(common) + mapg[key] = [item for item in mapg[key] if item not in common] + maps[key] = [item for item in maps[key] if item not in common] + b += min(len(maps[key]), len(mapg[key])) + return str(a) + 'A' + str(b) + 'B' +``` + + + + + + + +两种解法都....... + +都这么短。。。。。 +我Python还是用的不行啊 + + +``` +class Solution(object): + def getHint(self, secret, guess): + """ + :type secret: str + :type guess: str + :rtype: str + """ + bull = sum(map(operator.eq, secret, guess)) + sa = collections.Counter(secret) + sb = collections.Counter(guess) + cow = sum((sa & sb).values()) - bull + return str(bull) + 'A' + str(cow) + 'B' +``` + + +bull = secret与guess下标与数值均相同的数字个数 + +cow = secret与guess中出现数字的公共部分 - bull + + + + +来分析一下这个解法 + +``` +def getHint(self, secret, guess): + bulls = sum(map(operator.eq, secret, guess)) + both = sum(min(secret.count(x), guess.count(x)) for x in '0123456789') + return '%dA%dB' % (bulls, both - bulls) +``` + +首先map的用法是,对于iterable中的每个元素应用function方法,将结果作为list返回 + +``` +>>> def add100(x): +... return x+100 +... +>>> hh = [11,22,33] +>>> map(add100,hh) +[111, 122, 133] +``` + + + + +用'1123','0111' 来测试: + + +``` +map(operator.eq, secret, guess) +[False, True, False, False] +``` +就是将equal函数并行应用在两个string上,然后后面的解法也是粗暴简约和厉害 + + +参考 diff --git "a/docs/Leetcode_Solutions/Java/300._longest_increasing_subsequence \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/300._longest_increasing_subsequence \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..bd1752b9e --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/300._longest_increasing_subsequence \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,42 @@ +###300. Longest Increasing Subsequence + +题目: + + + +难度: +Medium + + +思路: + +典型DP + +递推关系式: + +对于以num[i]结束的longest increasing subsequence的长度 + +dp[i] = dp[j] + 1 if num[i] > num[j] else 1 + +最后loop一圈,求出最长的 + +AC 代码 + +``` +class Solution(object): + def lengthOfLIS(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + if not nums: return 0 + n = len(nums) + dp = [1 for i in range(n)] + for i in range(1,n): + for j in range(i): + if nums[i] > nums[j] : + dp[i] = max(dp[i],dp[j] + 1) + + return max(dp) +``` + diff --git "a/docs/Leetcode_Solutions/Java/303._range_sum_query_-_immutable \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/303._range_sum_query_-_immutable \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..32c459aee --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/303._range_sum_query_-_immutable \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,47 @@ +###303. Range Sum Query - Immutable + +题目: + + + +tag : DP +难度 : Easy + + + +``` +sum(i, j) = nums[i] j = i +sum(i,j) = sum[i,j-1] + nums[j] j > i + +``` + +Python代码 + +``` + +class NumArray(object): + def __init__(self, nums): + """ + initialize your data structure here. + :type nums: List[int] + """ + self.sums = nums + for i in range(1, len(self.sums)): + self.sums[i] = self.sums[i-1] + self.sums[i] + + + + + def sumRange(self, i, j): + """ + sum of elements nums[i..j], inclusive. + :type i: int + :type j: int + :rtype: int + """ + if i == 0 : + return self.sums[j] + else : + return self.sums[j] - self.sums[i-1] + +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/316._Remove_Duplicate_Letters \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/316._Remove_Duplicate_Letters \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..cce1a8b43 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/316._Remove_Duplicate_Letters \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,108 @@ +### 316. Remove Duplicate Letters + +题目: + + + +难度: + +Hard + + +思路 + +这道题让我们移除重复字母,使得每个字符只能出现一次,而且结果要按最优的字母顺序排列,前提是不能打乱其原本的相对位置。 +- 先用remaining统计所有出现字母出现过的次数; +- res就是输出结果的字母顺序(list),最后用join连接起来作为返回值(str); +- 在stack(set)中的元素意味着其已经出现在最终结果中; + +对s中每个字母c,首先看它在stack中有没有出现过: +1. 如果没有那么只要res最后一个字母的ASCII值大于c,且其剩余次数大于0,就将其在res和stack中删去,不停做此操作 +2. 如果有了那么说明已经出现在最终结果中,只需要将其统计次数减去1以防后面挪动位置要做判断 + +做完这些后必须要把c加入到stack和res中去,代表c已经加入到最终结果中的目前应该处于的位置 + +参考[python的colloections之defaultdict模块](https://docs.python.org/2/library/collections.html) + +```python +class Solution(object): + def removeDuplicateLetters(self, s): + """ + :type s: str + :rtype: str + """ + remaining = collections.defaultdict(int) + for c in s: + remaining[c] += 1 + res, stack = [], set() + for c in s: + if c not in stack: + while res and res[-1] > c and remaining[res[-1]] > 0: + stack.remove(res.pop()) + res.append(c) + stack.add(c) + remaining[c] -= 1 + return ''.join(res) +``` +还有别的一些优美的解法,参考[stefan的回答](https://leetcode.com/problems/remove-duplicate-letters/discuss/76787) + + + +```python +递归贪心版本 +class Solution(object): + def removeDuplicateLetters(self, s): + """ + :type s: str + :rtype: str + """ + for c in sorted(set(s)): + suffix = s[s.index(c):] + if set(suffix) == set(s): + return c + self.removeDuplicateLetters(suffix.replace(c, '')) + return '' +``` +```python +class Solution(object): + def removeDuplicateLetters(self, s): + """ + :type s: str + :rtype: str + """ + result = '' + while s: + i = min(map(s.rindex, set(s))) + c = min(s[:i+1]) + result += c + s = s[s.index(c):].replace(c, '') + return result +``` + +```python +class Solution(object): + def removeDuplicateLetters(self, s): + """ + :type s: str + :rtype: str + """ + rindex = {c: i for i, c in enumerate(s)} + result = '' + for i, c in enumerate(s): + if c not in result: + while c < result[-1:] and i < rindex[result[-1]]: + result = result[:-1] + result += c + return result +``` + + + + + + + + + + + + diff --git "a/docs/Leetcode_Solutions/Java/319._Bulb_Switcher \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/319._Bulb_Switcher \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..840cce518 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/319._Bulb_Switcher \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,69 @@ +### 319. Bulb Switcher + +题目: + + + +难度: + +Medium + + +思路 + +bulb代表第一轮结束后的所有灯亮灭的情况,从第二轮开始 +- 如果是最后一轮,则bulb的最后一个灯要switch +- 对于其他轮,相应的第i-1+C(i)个灯要siwitch,且C为常数,i-1+C(i)必须<=n-1 + +但是发现这样提交会超时 +Last executed input: +999999 + + +``` +class Solution(object): + def bulbSwitch(self, n): + """ + :type n: int + :rtype: int + """ + bulb = [1] * n + for i in range(2,n+1): + for x in range(i-1, n, i): + bulb[x] = 1 if bulb[x] == 0 else 0 + return bulb.count(1) +``` + +原来,这是一道智商碾压题: + +> A bulb ends up on iff it is switched an odd number of times. +Bulb i is switched in round d iff d divides i. +So bulb i ends up on iff it has an odd number of >divisors. +Divisors come in pairs, like i=12 has divisors 1 and 12, 2 and 6, and 3 and 4. +Except if i is a >square, like 36 has divisors 1 and 36, 2 and 18, 3 and 12, 4 and 9, +and double divisor 6. So bulb >i ends up on iff and only if i is a square. So just count the square numbers. + +大概解释一下,当一个灯泡被执行偶数次switch操作时它是灭着的,当被执行奇数次switch操作时它是亮着的,那么这题就是要找出哪些编号的灯泡会被执行奇数次操作。 + +现在假如我们执行第i次操作,即从编号i开始对编号每次+i进行switch操作,对于这些灯来说, +如果其编号j(j=1,2,3,⋯,n)能够整除i,则编号j的灯需要执行switch操作。 +具备这样性质的i是成对出现的,比如: +- 12 = 1 * 12, +- 12 = 2 * 6 +- 12 = 3 * 4 + +所以编号为12的灯,在第1次,第12次;第2次,第6次;第3次,第4次一定会被执行Switch操作,这样的话,编号为12的灯执行偶数次switch,肯定为灭。 +这样推出,完全平方数一定是亮着的,因为它有两个相同的因子,总因子数为奇数,如36 = 6 * 6,所以本题的关键在于找完全平方数的个数。 + +```python +class Solution(object): + def bulbSwitch(self, n): + """ + type n: int + rtype: int + """ + # The number of full squares. + return int(math.sqrt(n)) +``` + + diff --git "a/docs/Leetcode_Solutions/Java/322. Coin Change \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/322. Coin Change \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..1246fa161 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/322. Coin Change \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,52 @@ +### 322. Coin Change + + + +题目: + + +难度: + +Medium + +DP入门 + +递推方程式: dp[i] = min(dp[i-vj]+1), vj 是硬币的面额 + +伪码: + +``` +Set Min[i] equal to Infinity for all of i +Min[0]=0 + +For i = 1 to S + For j = 0 to N - 1 + If (Vj<=i AND Min[i-Vj]+1 + + + +难度 : Medium + + + +思路: + + + +最容易想到的是针对每个节点做dfs?然后发现其已经被mark了就不管了,最后数dfs的次数? + +这样尝试,到n =2000 的时候 TLE + +``` +class Solution(object): + def countComponents(self, n, edges): + """ + :type n: int + :type edges: List[List[int]] + :rtype: int + """ + def dfs(node): + if visited[node] == 1: + return + else: + visited[node] = 1 + for node1, node2 in edges: + if node1 == node: + dfs(node2) + elif node2 == node: + dfs(node1) + + res = 0 + visited = [ 0 for i in range(n)] + for i in range(n): + if visited[i] == 0: + dfs(i) + res += 1 + return res +``` + + + +tag是union find,不用是否浪费? + +所谓的union find,应当不是每个做dfs,而是每个来看一下是否属于同一个set,一次dfs,然后loop 做union find + +[Disjoint-set_data_structure](https://en.wikipedia.org/wiki/Disjoint-set_data_structure) + + + +这里有一个很棒的[实现](http://python-algorithms.readthedocs.io/en/stable/_modules/python_algorithms/basic/union_find.html) + + + +AC代码 + +这里就偷懒了,利用岛是0-n,然后也只做了path compression,没更多的优化 + + + +``` +class Solution(object): + def countComponents(self, n, edges): + """ + :type n: int + :type edges: List[List[int]] + :rtype: int + """ + def find(x): + if uf[x] != x: + uf[x] = find(uf[x]) + return uf[x] + + def union(x,y): + xRoot = find(x) + yRoot = find(y) + uf[xRoot] = yRoot + + uf = [i for i in range(n)] + + for node1, node2 in edges: + union(node1, node2) + + res = set() + for i in range(n): + res.add(find(i)) + + return len(res) +``` + + + diff --git "a/docs/Leetcode_Solutions/Java/324._Wiggle_Sort_II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/324._Wiggle_Sort_II \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..5ebc2594b --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/324._Wiggle_Sort_II \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,42 @@ +### 324. Wiggle Sort II + + + +题目: + + + +难度: +Medium + +思路: + +首先这道题和[Wiggle Sort](https://github.com/Lisanaaa/thinking_in_lc/blob/master/280._Wiggle_Sort.md)要求不一样,不能有等于, +所以如果碰到一串```‘1,1,1,1,1,1’```,当调换顺序时候还是不会满足。 + +因此我们用新方法,首先将原数组排序,然后大的那一半数字降序插在奇数```index```上,小的那一半数字降序插在偶数```index```上 + + +```python +class Solution(object): + def wiggleSort(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + nums.sort() + half = len(nums[::2]) + nums[::2], nums[1::2] = nums[:half][::-1], nums[half:][::-1] +``` + + +### Follow up +O(n) time, O(1) space + +思路: +首先想到的是将我们上面的排序方法用堆排序实现即可,建堆O(n),调整堆O(lgN) + + +```python + +``` diff --git "a/docs/Leetcode_Solutions/Java/326._power_of_three \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/326._power_of_three \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..9cd035d9c --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/326._power_of_three \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,48 @@ +### 326. Power of Three + +题目: + + + + + +难度 : Easy + + +直接就上的递归 + +```python +class Solution(object): + def isPowerOfThree(self,n): + """ + :type n: int + :rtype: bool + """ + if n <= 0: + return False + if n == 1: + return True + if n % 3 == 0: + return self.isPowerOfThree(n/3) + return False + +``` + +有一个follow up,可否不用 loop/recusion + +看到了取巧的办法,因为是Given an integer,是有范围的(<2147483648),存在能输入的最大的3的幂次,即 3^19=1162261467。 + +只用检查是否能被这个数整除 + + +```python +class Solution(object): + def isPowerOfThree(self, n): + """ + :type n: int + :rtype: bool + """ + return n > 0 and pow(3, 19) % n == 0 + +``` + diff --git "a/docs/Leetcode_Solutions/Java/328._odd_even_linked_list \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/328._odd_even_linked_list \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..b628ab241 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/328._odd_even_linked_list \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,112 @@ +###328. Odd Even Linked List + +题目: + + + +难度: + +Medium + + +想法:因为相对顺序保持不变,所以可以拆list,然后再组合在一起?这样是满足题目要求的,因为linked list不像array,我们操作的时候只是用指向,没有分配新的空间。 + +``` + +class Solution(object): + def oddEvenList(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + if head == None or head.next == None or head.next.next == None: + return head + + oddDummy = ListNode(-1) + oddDummy.next = head + + evenDummy = ListNode(-1) + evenDummy.next = head.next + + oddCur = oddDummy.next + evenCur = evenDummy.next + + cur = head.next.next + while cur: + oddCur.next = cur + oddCur = oddCur.next + evenCur.next = cur.next + evenCur = evenCur.next + if cur.next: + cur = cur.next.next + else: + cur = cur.next + oddCur.next = evenDummy.next + # print oddDummy.next.val + return oddDummy.next + +``` + + + + +看别人的优雅代码 + +``` +class Solution(object): + def oddEvenList(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + if head == None: + return head + + # odd used to keep track of the tail of odd nodes + odd = oddHead = head + # record how many swaps happend + even = evenHead = head.next + while even and even.next: + odd.next = even.next + odd = odd.next + even.next = odd.next + even = even.next + odd.next = evenHead + return head +``` + +intuitive and concise + + +``` +1 → 2 → 3 → 4 → 5 → NULL + +一开始 + + 1 → 2 → 3 → 4 → 5 → NULL +odd even even.next + + +1 → 3 → 4 → 5 → NULL + odd ↑ + 2 - + + +1 → 3 → 4 → 5 → NULL + odd + 2 - even + + +再loop一次: + + | ----------- + | --------- ↓ ↓ +1 → 3 4 5 → NULL + odd ↑ + 2 - ↑ even + + +最后一步,再将两个odd的最后一个和evenHead连接起来,完工 +``` + + diff --git "a/docs/Leetcode_Solutions/Java/334._increasing_triplet_subsequence \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/334._increasing_triplet_subsequence \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..e5e4c645a --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/334._increasing_triplet_subsequence \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,71 @@ +###334. Increasing Triplet Subsequence + +题目: + + + +难度: +Medium + + +思路: + +用longest increasing subsequence来求,超时 + +``` +class Solution(object): + def increasingTriplet(self, nums): + """ + :type nums: List[int] + :rtype: bool + """ + if not nums: return False + n = len(nums) + dp = [1 for i in range(n)] + for i in range(1,n): + for j in range(i): + if nums[i] > nums[j] : + dp[i] = max(dp[i],dp[j] + 1) + if dp[i] >= 3: + return True + + return False +``` + +于是转而用Third Maximum Number的方法,维护一个当前最小和当前第二小,当碰到当前比较大,返回True,否则一圈走下来依旧不能满足,返回false. + +想一下,如果不是求三个增长,如果是求两个的话,那么一定想到的是保存当前最小值,那么一旦后方遇到一个比较大的,就这样处理掉了。 + +所以对于任何一个num来说,有三种可能: + +- 小于当前的最小值,那么更新当前最小值 +- 小于当前第二小值,更新当前第二小值 +- 如果以上两种都不是,那么是大于当前第二小值和最小值,于是这样就true + +所以是求四个增长也是类似的么 + +AC代码 + +``` +class Solution(object): + def increasingTriplet(self, nums): + """ + :type nums: List[int] + :rtype: bool + """ + # m - min, sm - second min + m, sm = float('inf'), float('inf') + + for num in nums: + print m, sm + if m >= num: + m = num + elif sm >= num: + sm = num + else: + return True + return False +``` + + + diff --git "a/docs/Leetcode_Solutions/Java/337._house_robber_iii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/337._house_robber_iii \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..a081ba016 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/337._house_robber_iii \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,47 @@ +###337. House Robber III + + +题目: + + + +难度: +Medium + +思路: + +参考 + + +这个解法好像有点厉害 + +从root开始抢起来,最大能抢到的两个可能: 抢root和不抢root + +- rob_root = max(rob_L + rob_R , no_rob_L + no_nob_R + root.val) +- no_rob_root = rob_L + rob_R + + +这个递归写起来就很厉害了 + + +``` +class Solution(object): + def rob(self, root): + """ + :type root: TreeNode + :rtype: int + """ + def dfs(root): + if not root: return 0, 0 + rob_L, no_rob_L = dfs(root.left) + rob_R, no_rob_R = dfs(root.right) + return max(no_rob_R + no_rob_L + root.val , rob_L + rob_R), rob_L + rob_R + + return dfs(root)[0] + +``` + +对于每个node,我们return的是从这个node能抢到的最大值,以及不抢它能获得的最大值,这个递归简直我服 + + + diff --git "a/docs/Leetcode_Solutions/Java/338. Counting Bits \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/338. Counting Bits \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..e74a13253 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/338. Counting Bits \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,46 @@ +### 338. Counting Bits + +题目: + + + +难度: +Medium + + + +**O(n\*sizeof(integer))** 算法,其实就是把count of 1 bit拿来用: + +``` +class Solution(object): + def countBits(self, num): + """ + :type num: int + :rtype: List[int] + """ + def hammingWeight(n): + cnt = 0 + while n != 0: + n &= n -1 + cnt += 1 + return cnt + + res = [] + for i in range(num+1): + res.append(hammingWeight(i)) + return res + +``` + + + +DP算法 - to be done + + + + + + + + + diff --git "a/docs/Leetcode_Solutions/Java/339. Nested List Weight Sum \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/339. Nested List Weight Sum \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..a39800a58 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/339. Nested List Weight Sum \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,58 @@ +### 339. Nested List Weight Sum + + + +题目: + + +难度: +Easy + +思路: + +一开始没认真读题,直接上手开写: + +``` +class Solution(object): + def depthSum(self, nestedList): + """ + :type nestedList: List[NestedInteger] + :rtype: int + """ + def dfs(nestedList): + for item in nestedList: + if item.isInteger(): + self.res += item.getInteger() + else: + dfs(item.getList()) + self.res = 0 + dfs(nestedList) + return self.res +``` + + + +然后注意到要weight by its depth. + + + +AC + +``` +class Solution(object): + def depthSum(self, nestedList): + """ + :type nestedList: List[NestedInteger] + :rtype: int + """ + def dfs(nestedList,depth): + for item in nestedList: + if item.isInteger(): + self.res += item.getInteger() * depth + else: + dfs(item.getList(), depth+1) + self.res = 0 + dfs(nestedList,1) + return self.res +``` + diff --git "a/docs/Leetcode_Solutions/Java/341._Flatten_Nested_List_Iterator \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/341._Flatten_Nested_List_Iterator \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..2acc186f5 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/341._Flatten_Nested_List_Iterator \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,47 @@ +### 341. Flatten Nested List Iterator + + + +题目: + + + + +难度: +Medium + + + +```python +class NestedIterator(object): + + def __init__(self, nestedList): + """ + Initialize your data structure here. + :type nestedList: List[NestedInteger] + """ + def dfs(nestedList): + for item in nestedList: + if item.isInteger(): + self.stack.append(item.getInteger()) + else: + dfs(item.getList()) + self.stack = [] + dfs(nestedList) + + + def next(self): + """ + :rtype: int + """ + if self.hasNext(): + return self.stack.pop(0) + + + def hasNext(self): + """ + :rtype: bool + """ + return self.stack != [] +``` + diff --git "a/docs/Leetcode_Solutions/Java/342._Power_of_Four \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/342._Power_of_Four \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..c895a7c24 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/342._Power_of_Four \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,32 @@ +### 342. Power of Four + + + +题目: + + + + +难度 : Easy + +继续照抄power of three + +```python +class Solution(object): + def isPowerOfFour(self, num): + """ + :type num: int + :rtype: bool + """ + if num <= 0 : + return False + if num == 1: + return True + if num % 4 == 0: + return self.isPowerOfFour(num/4) + return False + +``` + + + diff --git "a/docs/Leetcode_Solutions/Java/344._reverse_string \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/344._reverse_string \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..0e4c0f4fb --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/344._reverse_string \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,47 @@ +### 344. Reverse String + + + +题目: + + + +难度: +Easy + +思路: + +不要脸的python AC code: + + +```python +class Solution(object): + def reverseString(self, s): + """ + :type s: str + :rtype: str + """ + return s[::-1] +``` + +因为python不支持item assignment + +所以如果非要用two pointer来做的话,那么会是这样 + +```python +class Solution(object): + def reverseString(self, s): + """ + :type s: str + :rtype: str + """ + lst = list(s) + n = len(lst) + start, end = 0, n - 1 + + while start < end: + lst[end], lst[start] = lst[start],lst[end] + start += 1 + end -= 1 + return ''.join(lst) +``` diff --git "a/docs/Leetcode_Solutions/Java/345._Reverse_Vowels_of_a_String \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/345._Reverse_Vowels_of_a_String \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..380c1b513 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/345._Reverse_Vowels_of_a_String \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,61 @@ +### 345. Reverse Vowels of a String + + +题目: + + + +难度: + +Easy + + + +思路 + +字符串不可变,所以用list代替,最后join + + + +```python +class Solution(object): + def reverseVowels(self, s): + """ + :type s: str + :rtype: str + """ + vowels = 'aeiou' + string = list(s) + i, j = 0, len(s) -1 + while i <= j: + if string[i].lower() not in vowels: + i += 1 + elif string[j].lower() not in vowels: + j -= 1 + else: + string[i], string[j] = string[j], string[i] + i += 1 + j -= 1 + return ''.join(string) +``` + +正则版本 + +```python +class Solution(object): + def reverseVowels(self, s): + """ + :type s: str + :rtype: str + """ + vowels = re.findall('(?i)[aeiou]', s) + return re.sub('(?i)[aeiou]', lambda m: vowels.pop(), s) +``` + + + + + + + + diff --git "a/docs/Leetcode_Solutions/Java/349._intersection_of_two_arrays \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/349._intersection_of_two_arrays \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..2f79b8dd9 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/349._intersection_of_two_arrays \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,25 @@ +### 349. Intersection of Two Arrays + +题目: + + + +难度: + +Easy + + + +Python一句话作弊 + +```python +class Solution(object): + def intersection(self, nums1, nums2): + """ + :type nums1: List[int] + :type nums2: List[int] + :rtype: List[int] + """ + return list(set(nums1).intersection(nums2)) +``` + diff --git "a/docs/Leetcode_Solutions/Java/350._intersection_of_two_arrays_ii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/350._intersection_of_two_arrays_ii \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..d2a444772 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/350._intersection_of_two_arrays_ii \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,65 @@ +### 350. Intersection of Two Arrays II + +题目: + + + + +难度: + +Easy + + +sort之后用了双指针来走和看 + + +```python +class Solution(object): + def intersect(self, nums1, nums2): + """ + :type nums1: List[int] + :type nums2: List[int] + :rtype: List[int] + """ + nums1.sort() + nums2.sort() + + l1 = len(nums1) + l2 = len(nums2) + + p1 = 0 + p2 = 0 + + res = [] + + while p1 < l1 and p2 < l2: + if nums1[p1] < nums2[p2]: + p1 += 1 + elif nums1[p1] > nums2[p2]: + p2 += 1 + else: + res.append(nums1[p1]) + p1 += 1 + p2 += 1 + return res +``` + +两行版本 +```python +class Solution(object): + def intersect(self, nums1, nums2): + """ + :type nums1: List[int] + :type nums2: List[int] + :rtype: List[int] + """ + a, b = map(collections.Counter, (nums1, nums2)) + return list((a & b).elements()) +``` + + + + + + + diff --git "a/docs/Leetcode_Solutions/Java/353. Design Snake Game \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/353. Design Snake Game \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..b9b95757c --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/353. Design Snake Game \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,89 @@ +### 353. Design Snake Game + + + +题目: + + + +难度: Medium + +思路: + +纯正单纯方式 + +在TLE边缘AC + +AC代码 + + + +``` +class SnakeGame(object): + + def __init__(self, width,height,food): + """ + Initialize your data structure here. + @param width - screen width + @param height - screen height + @param food - A list of food positions + E.g food = [[1,1], [1,0]] means the first food is positioned at [1,1], the second is at [1,0]. + :type width: int + :type height: int + :type food: List[List[int]] + """ + self.width = width + self.height = height + self.food = food + self.snake = [[0,0]] + self.score = 0 + + + def move(self, direction): + """ + Moves the snake. + @param direction - 'U' = Up, 'L' = Left, 'R' = Right, 'D' = Down + @return The game's score after the move. Return -1 if game over. + Game over when snake crosses the screen boundary or bites its body. + :type direction: str + :rtype: int + """ + + nextx, nexty = self.snake[0] + + if direction == 'U': + nextx -= 1 + if direction == 'L': + nexty -=1 + if direction == 'R': + nexty +=1 + if direction == 'D': + nextx +=1 + + # nextx, nexty has food + if self.food and [nextx,nexty] == self.food[0]: + self.snake.insert(0,[nextx,nexty]) + self.food = self.food[1:] + self.score += 1 + # netx, nety outside boundary + else: + self.snake = self.snake[:-1] + self.snake.insert(0,[nextx,nexty]) + if nextx < 0 or nextx > self.height - 1 or nexty < 0 or nexty > self.width - 1: + return -1 + noDupes = [] + + for snakePt in self.snake: + # print snakePt, + if snakePt not in noDupes: + noDupes.append(snakePt) + # print 'snake', self.snake + # print 'noDpues', noDupes + if len(noDupes) < len(self.snake): + return -1 + return self.score + +``` + + + diff --git "a/docs/Leetcode_Solutions/Java/364. Nested List Weight Sum II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/364. Nested List Weight Sum II \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..d72cb1643 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/364. Nested List Weight Sum II \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,47 @@ +### 364. Nested List Weight Sum II + + + +题目: + + +难度: +Medium + +思路: + + + +跟 Nested List Weight Sum I 的区别是这个是从不是数depth,是数层的高度: + + + +比较naive的AC代码: + +``` +class Solution(object): + def depthSumInverse(self, nestedList): + """ + :type nestedList: List[NestedInteger] + :rtype: int + """ + def level(nestedList,height): + self.level = max(height, self.level) + for item in nestedList: + if not item.isInteger(): + level(item.getList(), height + 1) + + def dfs(nestedList, height): + for item in nestedList: + if item.isInteger(): + self.res += item.getInteger() * height + else: + dfs(item.getList(),height - 1) + + self.level = 1 + self.res = 0 + level(nestedList,1) + dfs(nestedList, self.level) + return self.res +``` + diff --git "a/docs/Leetcode_Solutions/Java/366. Find Leaves of Binary Tree \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/366. Find Leaves of Binary Tree \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..e82d592cc --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/366. Find Leaves of Binary Tree \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,52 @@ +### 366. Find Leaves of Binary Tree + + + +题目: + + + + + +难度 :Medium + + + +按照它的要求,老老实实写了两个递归 findleaf 和 deleteleaf, 再组合起来 + + + +AC代码 + +```python +class Solution(object): + def findLeaves(self, root): + """ + :type root: TreeNode + :rtype: List[List[int]] + """ + def findLeaf(root): + if not root: + return [] + elif not root.left and not root.right: + return [root.val] + else: + return findLeaf(root.left) + findLeaf(root.right) + def removeLeaf(root): + if not root: + return None + elif not root.left and not root.right: + return None + else: + if root.left: + root.left = removeLeaf(root.left) + if root.right: + root.right = removeLeaf(root.right) + return root + res = [] + while root: + res.append(findLeaf(root)) + root = removeLeaf(root) + return res +``` + diff --git "a/docs/Leetcode_Solutions/Java/367._valid_perfect_square \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/367._valid_perfect_square \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..7bb7285d4 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/367._valid_perfect_square \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,42 @@ +###367. Valid Perfect Square + +题目: + + + + +难度: + +Medium + + +直接用循环做也可以AC + + +``` +class Solution(object): + def isPerfectSquare(self, num): + """ + :type num: int + :rtype: bool + """ + if num == 1 or num == 4 : return True + for i in xrange(num//2): + if i*i == num: + return True + elif i*i > num: + return False + return False + +``` + +然后发现有传说中的牛顿法 + +有待阅读,然后还有二分法 + +``` + r = x + while r*r > x: + r = (r + x/r) / 2 + return r*r == x +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/369.Plus One Linked List \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/369.Plus One Linked List \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..92c64e78e --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/369.Plus One Linked List \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,46 @@ +### 369.Plus One Linked List + +题目: + + +难度 : Medium + + + +类似题目: plus one,plus one 用递归和循环写了,对于linked list,因为most significant digit在首位,递归写起来不方便,用循环尝试,然后代码并没有实质上的区别。 + + + +``` +class Solution(object): + def plusOne(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + lst = [] + cur = head + + while cur: + lst.append(cur) + cur = cur.next + + carry = 1 + for i in range(len(lst)-1,-1,-1): + lst[i].val += carry + if lst[i].val < 10: + carry = 0 + break + else: + lst[i].val -= 10 + + if carry == 1: + node = ListNode(1) + node.next = head + return node + else: + return head +``` + + + diff --git "a/docs/Leetcode_Solutions/Java/371._sum_of_two_integers \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/371._sum_of_two_integers \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..675aa9724 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/371._sum_of_two_integers \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,95 @@ +###371. Sum of Two Integers + +题目: + + + +难度: + +Easy + + +思路 + + +谷歌答案 + + +位运算 + +``` +XOR +x y output +0 0 0 +1 0 1 +0 1 1 +1 1 0 + + +AND +x y output +0 0 0 +1 0 1 +0 1 1 +1 1 1 + +``` + +如果对x和y来做加法(x和y都是一位的),那么末位会是x xor y,进位会是x and y + + + + + +python没有左移,用c++来看 + +``` +class Solution { +public: + int getSum(int a, int b) { + while (b != 0 ){ + int c = a & b; + a = a ^ b; + b = c << 1; + } + return a; + } +}; +``` + +实际上看到答案还是没有那么明白的,还是动手算算 + + + +``` +a = 6 (0110) +b = 15 (1111) + + +1st +--------- +carry = a & b = 0110 +a = a ^ b = 1001 +b = 1100 + + +2nd +--------- +carry = a & b = 1000 +a = a ^ b = 0101 +b = 10000 + + +3rd +---------- + +carry = a & b = 0 +a = a ^ b = 10101 +b = 0 + +这个时候a 的值是2^4 + 2^2 + 2^0 = 16+4+1 = 21 +``` + +虽然convence了我自己,但是表示依旧迷茫ing + +也知道位运算需要待补啊 \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/374._Guess_Number_Higher_or_Lower \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/374._Guess_Number_Higher_or_Lower \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..d7d3072f2 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/374._Guess_Number_Higher_or_Lower \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,34 @@ +### 374. Guess Number Higher or Lower + +题目: + + + +难度: + +Easy + + +思路 + +二分 + +```python +class Solution(object): + def guessNumber(self, n): + """ + :type n: int + :rtype: int + """ + l, r = 1, n + while l <= r: + mid = l + ((r - l) >> 2) + if guess(mid) == 1: + l = mid + 1 + elif guess(mid) == -1: + r = mid - 1 + else: + return mid +``` + + diff --git "a/docs/Leetcode_Solutions/Java/377._combination_sum_iv \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/377._combination_sum_iv \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..88548d175 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/377._combination_sum_iv \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,77 @@ +###377. Combination Sum IV + +题目: + + + + +难度: + +Medium + + +直接用combination sum的思路: 超时 + +``` +class Solution(object): + def combinationSum4(self, candidates, target): + """ + :type candidates: List[int] + :type target: int + :rtype: List[List[int]] + """ + def combSum(candidates, target, start, valueList): + length = len(candidates) + if target == 0 : + res.append(valueList) + for i in range(start, length): + if target < candidates[i]: + return + combSum(candidates, target - candidates[i], 0, valueList + [candidates[i]]) + + candidates = list(set(candidates)) + candidates.sort() + res = [] + combSum(candidates, target, 0, []) + return len(res) +``` + + + + + +说起来标签是dp,也知道是dp啊,状态转移方程: + + + +参考: + + + +> +> +> 我们需要一个一维数组dp,其中dp[i]表示目标数为i的解的个数,然后我们从1遍历到target,对于每一个数i,遍历nums数组,如果i>=x, dp[i] += dp[i - x]。这个也很好理解,比如说对于[1,2,3] 4,这个例子,当我们在计算dp[3]的时候,3可以拆分为1+x,而x即为dp[2],3也可以拆分为2+x,此时x为dp[1],3同样可以拆为3+x,此时x为dp[0],我们把所有的情况加起来就是组成3的所有情况了 + + + +AC代码 + +``` +class Solution(object): + def combinationSum4(self, candidates, target): + """ + :type candidates: List[int] + :type target: int + :rtype: List[List[int]] + """ + dp = [0 for i in range(target+1)] + + dp[0] = 1 + + for i in range(target+1): + for candidate in candidates: + if i >= candidate: + dp[i] += dp[i - candidate] + return dp[-1] +``` + diff --git "a/docs/Leetcode_Solutions/Java/378._kth_smallest_element_in_a_sorted_matrix \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/378._kth_smallest_element_in_a_sorted_matrix \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..34c267b41 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/378._kth_smallest_element_in_a_sorted_matrix \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,107 @@ +### 378. Kth Smallest Element in a Sorted Matrix + + + +题目: + + + +难度: +Medium + + + +### 思路一:暴力法 + +```python +class Solution(object): + def kthSmallest(self, matrix, k): + """ + :type matrix: List[List[int]] + :type k: int + :rtype: int + """ + tmp = [] + for row in matrix: + for column in row: + tmp.append(column) + tmp.sort() + return tmp[k-1] if tmp and len(tmp)>0 else None +``` +### 思路二: +两个tag : binary search, heap + +######先来heap + +1. 利用heap,先对第一行所有元素加入heap,每个元素下面同一列的元素必然比他们大 +2. 重复K-1次下面的过程 + - 取现在的root + - 将root下面的元素加入heap + +可以手写一个例子来看 + +参考: + + +```python +class Solution(object): + def kthSmallest(self, matrix, k): + """ + :type matrix: List[List[int]] + :type k: int + :rtype: int + """ + if not matrix: + return 0 + + heap = [] + row = len(matrix) + col = len(matrix[0]) + + for i in range(col): + # heap store its value and location + heapq.heappush(heap, (matrix[0][i], 0, i)) + + print heap + + for j in range(k-1): + cur = heappop(heap) + x = cur[1] + y = cur[2] + if x+1 < row: + heapq.heappush(heap, (matrix[x+1][y],x+1,y)) + + return heap[0][0] +``` + +### 思路三: heapq一行 + +```python +class Solution(object): + def kthSmallest(self, matrix, k): + """ + :type matrix: List[List[int]] + :type k: int + :rtype: int + """ + return list(heapq.merge(*matrix))[k-1] +``` + +### 思路四; binary search +```python +class Solution(object): + def kthSmallest(self, matrix, k): + """ + :type matrix: List[List[int]] + :type k: int + :rtype: int + """ + l, r = matrix[0][0], matrix[-1][-1] + while l <= r: + mid = l + ((r - l) >> 2) + if sum(bisect.bisect_right(row, mid) for row in matrix) < k: + l = mid + 1 + else: + r = mid - 1 + return l +``` diff --git "a/docs/Leetcode_Solutions/Java/380. Insert Delete GetRandom O(1) \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/380. Insert Delete GetRandom O(1) \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..401f3ee7f --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/380. Insert Delete GetRandom O(1) \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,159 @@ +### 380. Insert Delete GetRandom O(1) + + + +题目: + + + + +难度 : Hard + + + +我的naive TLE代码,关键还是在想这个getRandom,这就不是O(1)的: + + + +``` +class RandomizedSet(object): + + def __init__(self): + """ + Initialize your data structure here. + """ + self.container = {} + + + def insert(self, val): + """ + Inserts a value to the set. Returns true if the set did not already contain the specified element. + :type val: int + :rtype: bool + """ + # 1 stands for present + if val in self.container and self.container[val] == 1: + return False + else: + self.container[val] = 1 + return True + + + def remove(self, val): + """ + Removes a value from the set. Returns true if the set contained the specified element. + :type val: int + :rtype: bool + """ + if self.container.get(val,0) == 1: + self.container[val] = 0 + return True + else: + return False + + + + def getRandom(self): + """ + Get a random element from the set. + :rtype: int + """ + import random + keys = self.container.keys() + rd = random.randint(0, len(keys) - 1) + if self.container[keys[rd]] == 1: + return keys[rd] + elif self.container.get(keys[rd],0) == 0: + return self.getRandom() +``` + + + +也是有[stackoverflow问题界面的题目](http://stackoverflow.com/questions/5682218/data-structure-insert-remove-contains-get-random-element-all-at-o1#comment18171331_5684892): + +> Consider a data structure composed of a hashtable H and an array A. The hashtable keys are the elements in the data structure, and the values are their positions in the array. +> +> 1.insert(value): append the value to array and let i be its index in A. Set H[value]=i. +> +> 2.remove(value): We are going to replace the cell that contains value in A with the last element in A. let d be the last element in the array A at index m. let i be H[value], the index in the array of the value to be removed. Set A[i]=d, H[d]=i, decrease the size of the array by one, and remove value from H. +> +> 3.contains(value): return H.contains(value) +> +> 4.getRandomElement(): let r=random(current size of A). return A[r]. +> +> +> +> since the array needs to auto-increase in size, it's going to be amortize O(1) to add an element, but I guess that's OK. + + + + + +按照以答案AC代码 + +``` +class RandomizedSet(object): + + def __init__(self): + """ + Initialize your data structure here. + """ + self.hashtable = {} + self.array = [] + self.arraySize = 0 + + def insert(self, val): + """ + Inserts a value to the set. Returns true if the set did not already contain the specified element. + :type val: int + :rtype: bool + """ + # already in the set + if val in self.hashtable: + return False + else: + self.hashtable[val] = self.arraySize + self.array.append(val) + self.arraySize += 1 + return True + + + def remove(self, val): + """ + Removes a value from the set. Returns true if the set contained the specified element. + :type val: int + :rtype: bool + """ + if val not in self.hashtable: + return False + else: + removeIdx = self.hashtable[val] + if self.arraySize == 1: + self.__init__() + else: + self.array[removeIdx] = self.array[-1] + self.hashtable[self.array[-1]] = removeIdx + self.arraySize -= 1 + del self.hashtable[val] + del self.array[-1] + return True + + + + def getRandom(self): + """ + Get a random element from the set. + :rtype: int + """ + import random + rd = random.randint(0, self.arraySize-1) + return self.array[rd] +``` + + + + + +最后getRandom也可以写成: + +`return random.choice(self.array)` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/381. Insert Delete GetRandom O(1) - Duplicates allowed \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/381. Insert Delete GetRandom O(1) - Duplicates allowed \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..9adb6cd32 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/381. Insert Delete GetRandom O(1) - Duplicates allowed \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,83 @@ +### 381. Insert Delete GetRandom O(1) - Duplicates allowed + + + +题目: + + + + +难度 : Hard + + + +一开始的想法是在380上面做简单的修改,比如用一个list来存每个数对应的location,但是这样remove会退化为O(N),然后看到: + +- 用 set 这个数据结构就可以贴近O(1) +- 学了一个新的东西`defaultdict`, 相当于 D.get('key',defaultvalue) + + + +这个defaultdict的好处就是添加的时候默认的值就是set,但是并不默认这个就存在 + + + +AC代码 + +``` +class RandomizedCollection(object): + + def __init__(self): + """ + Initialize your data structure here. + """ + import collections + self.hashtable = collections.defaultdict(set) + self.array = [] + + def insert(self, val): + """ + Inserts a value to the collection. Returns true if the collection did not already contain the specified element. + :type val: int + :rtype: bool + """ + valin = val not in self.hashtable + self.hashtable[val].add(len(self.array)) + self.array.append(val) + return valin + + def remove(self, val): + """ + Removes a value from the collection. Returns true if the collection contained the specified element. + :type val: int + :rtype: bool + """ + if val not in self.hashtable: + return False + else: + if self.array[-1] == val: + removeIdx = len(self.array) - 1 + self.hashtable[val].remove(removeIdx) + else: + # set pop remove arbitrary element + removeIdx = self.hashtable[val].pop() + self.array[removeIdx] = self.array[-1] + self.hashtable[self.array[-1]].remove(len(self.array) - 1) + self.hashtable[self.array[-1]].add(removeIdx) + if len(self.hashtable[val]) == 0: + del self.hashtable[val] + del self.array[-1] + return True + + + def getRandom(self): + """ + Get a random element from the collection. + :rtype: int + """ + import random + return random.choice(self.array) + +``` + +` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/382._linked_list_random_node \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/382._linked_list_random_node \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..775a0b32d --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/382._linked_list_random_node \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,79 @@ + +###382. Linked List Random Node + + +题目: + + + +难度: + +Medium + + + +tag:reservoir sampling 水塘抽样 + + +思路: + +n选k + + +这样来看,有k个元素,那么这个时候全部选中,当第k+1个元素进来的时候,生成一个随机数r,如果 r <= k,那么用它来替换第r个元素 + +那么r被替换掉的概率是 1 / k + 1, 不被替换掉的概率是 k / k + 1 (不生成r) + +k+2来继续: 被替换掉的概率 1 / k + 2, 不被替换掉的概率 (k + 1) / (k+2) + +所以最终被选中的(不被替换掉的概率是) k / n + +随机 √ + + +针对这道题目来看 + +- 一开始选head为choice +- 出现第二个,生成[1,2]之间的随机数,如果r = 2,则用新的来替换choice +- 出现第三个,生成[1,2,3]之间的随机数,如果r = 3,则替换 + +再写简单一点就是 + + +每次以 1/i 来决定是否用新的元素来替换选中元素,那么就是 i - 1 / i 不替换,它之前被选中的概率就是 1 / i-1 ,所以最终被选中的概率是 1/i + +这个对于linked list更优之处在于它不用reverse + +时间复杂度 O(N), 空间复杂度O(K) + + +然后AC + + +``` +class Solution(object): + + def __init__(self, head): + """ + @param head The linked list's head. + Note that the head is guaranteed to be not null, so it contains at least one node. + :type head: ListNode + """ + self.head = head + + def getRandom(self): + """ + Returns a random node's value. + :rtype: int + """ + choice = self.head + cur = self.head + i = 1 + while cur.next: + cur = cur.next + i += 1 + rd = random.randint(1,i) + if rd == i: + choice = cur + return choice.val +``` diff --git "a/docs/Leetcode_Solutions/Java/383._ransom_note \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/383._ransom_note \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..6a6ee16e7 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/383._ransom_note \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,53 @@ +### 383. Ransom Note + +题目: + + + +难度 : Easy + + + +略微想了一下,用了一个dictionary来存magazine里面的单字出现的个数,然后来对应check是否可以用来组成ransomNote + + +```python +class Solution(object): + def canConstruct(self, ransomNote, magazine): + """ + :type ransomNote: str + :type magazine: str + :rtype: bool + """ + maps = {} + for i in magazine: + if i in maps: + maps[i] += 1 + else: + maps[i] = 1 + for i in ransomNote: + if i not in maps: + return False + else: + maps[i] -= 1 + if maps[i] < 0: + return False + return True +``` +解法2: + +```python +class Solution(object): + def canConstruct(self, ransomNote, magazine): + """ + :type ransomNote: str + :type magazine: str + :rtype: bool + """ + magCounter = collections.Counter(magazine) + ranCounter = collections.Counter(ransomNote) + for k in ranCounter: + if ranCounter.get(k) > magCounter.get(k): + return False + return True +``` diff --git "a/docs/Leetcode_Solutions/Java/384. Shuffle an Array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/384. Shuffle an Array \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..bd3d126a9 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/384. Shuffle an Array \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,105 @@ +### 384. Shuffle an Array + + + +题目: + + + + +难度 : Medium + + + +思路: + + + +这就是洗牌算法吧,洗牌算法几种常见的: + + + +http://www.matrix67.com/blog/archives/879 + + + +也是有wikipedia page的: + +最简单的算法是很容易想到的, O(N^2) + +然后就是modern 算法: + + + +``` +-- To shuffle an array a of n elements (indices 0..n-1): +for i from n−1 downto 1 do + j ← random integer such that 0 ≤ j ≤ i + exchange a[j] and a[i] +``` + + + +这个感觉还是比较容易证明的,一开始生成的数字 1/n 概率 + +没选中,下一个 n-1 /n * 1/ n-1 = 1/n, 所以每个位置都是等概率的? + + + +这个有很妙的点: + +比如五个人顺序抽签,只要不uncover 结果,那么就是等概率的。 + + + +但是第一个人抽奖之后uncover结果,比如他没有抽中 → 那么概率就会变。 + + + + + + + +AC代码: + +``` +class Solution(object): + + def __init__(self, nums): + """ + + :type nums: List[int] + :type size: int + """ + self.lst = nums + + + def reset(self): + """ + Resets the array to its original configuration and return it. + :rtype: List[int] + """ + return self.lst + + + def shuffle(self): + """ + Returns a random shuffling of the array. + :rtype: List[int] + """ + import random + res = self.lst[:] + n = len(res) + for i in range(n-1,0,-1): + j = random.randint(0,i) + res[i], res[j] = res[j], res[i] + return res + +``` + + + + + + + diff --git "a/docs/Leetcode_Solutions/Java/387._first_unique_character_in_a_string \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/387._first_unique_character_in_a_string \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..dfbb89ae1 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/387._first_unique_character_in_a_string \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,58 @@ +### 387. First Unique Character in a String + +题目: + + + +难度: +Easy + + + +思路一: + +Python作弊法 + +用Python的Counter模块 + +可以参考 + + + + +```python +class Solution(object): + def firstUniqChar(self, s): + """ + :type s: str + :rtype: int + """ + d = collections.Counter(s) + for x,c in enumerate(s): + if d[c] == 1: + return x + return -1 +``` + + +思路二: + +利用问题的特性,因为只有可能是小写字母,所以可以用一个长度为26的array, 先数一遍char的数量,然后enumerate从左往右又来 + +```python +class Solution(object): + def firstUniqChar(self, s): + """ + :type s: str + :rtype: int + """ + cnt = [0 for i in range(26)] + for char in s: + cnt[ord(char) - ord('a')] += 1 + + for idx, char in enumerate(s): + if cnt[ord(char) - ord('a')] == 1: + return idx + return -1 + +``` diff --git "a/docs/Leetcode_Solutions/Java/388._Longest_Absolute_File_Path \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/388._Longest_Absolute_File_Path \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..7d92da63a --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/388._Longest_Absolute_File_Path \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,93 @@ +### 388. Longest Absolute File Path + + +题目: + + + +难度: + +Medium + + + +思路 + +我们首先观察到每个```文件夹```或者是```文件```前面都会有一个```'\n'```, 还有对应其层数个数的```'\t'```. +- 所以首先根据```'\n'```分行,然后算出该```文件/文件夹```的层数```depth``` +- 如果是```文件```,我们需要更新```maxlen``` +- 如果是```文件夹```,我们需要更新该```depth```下的```pathlen``` + +### 程序变量解释 + +- ```maxlen``` 代表目前最大子串的长度 +- ```pathlen``` 每一个```depth```下对应的```path```长度 + +#### 特别需要注意的是,```'\t'```的长度是1 +有的人仍然会有疑问,每次碰到文件夹都直接更新```pathlen```会不会导致本来长的反而变得短了,但是我们可以看到字符串的排版格式,每层```path```都是严格有自己的分级的, +因此不会出现这样的问题。 +例如: +- The string ```"dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext"``` represents: +``` +dir + subdir1 + file1.ext + subsubdir1 + subdir2 + subsubdir2 + file2.ext +``` +其最大长度是```32```, ```"dir/subdir2/subsubdir2/file2.ext"``` + +- 如果变成```"dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir20\n\t\tsubsubdir2\n\t\t\tfile2.ext"```, + +``` +dir + subdir1 + file1.ext + subsubdir1 + subdir20 + subsubdir2 + file2.ext +``` + +最大长度就是```33```, +```"dir/subdir2/subsubdir20/file2.ext"``` + + +- 如果变成 +```"dir\n\tsubdir1000000000000\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext"``` + +``` +dir + subdir10000000000000 + file1.ext + subsubdir1 + subdir20 + subsubdir2 + file2.ext +``` + +最大长度就是```34```,```"dir/subdir10000000000000/file1.ext"``` + + +```python +class Solution(object): + def lengthLongestPath(self, input): + """ + :type input: str + :rtype: int + """ + maxlen = 0 + pathlen = {0 : 0} + for line in input.splitlines(): + name = line.lstrip('\t') + depth = len(line) - len(name) # 前面有几个'\t', depth就是几 + if '.' in name: + maxlen = max(maxlen, pathlen[depth] + len(name)) + else: +                pathlen[depth+1] = pathlen[depth] + len(name) + 1   #加1是为了加上一个path分隔符'/'的长度 + return maxlen +``` + + diff --git "a/docs/Leetcode_Solutions/Java/389._find_the_difference \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/389._find_the_difference \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..a26bc73ae --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/389._find_the_difference \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,47 @@ + +###389. Find the Difference + + +题目: + + + +难度: + +Easy + + +思路 + +用两个hashmap分别来记录 s 和 t 中char的数量,一旦t[key] > s[key], output + +注意这个好的写法 + + +mapt[char] = mapt.get(char,0) + 1 + +如果mapt[char]不存在,会默认给1 + + + +``` +class Solution(object): + def findTheDifference(self, s, t): + """ + :type s: str + :type t: str + :rtype: str + """ + maps = {} + mapt = {} + for char in s: + maps[char] = maps.get(char,0) + 1 + for char in t: + mapt[char] = mapt.get(char,0) + 1 + + for key in mapt: + if mapt[key] - maps.get(key,0) > 0: + return key +``` + + diff --git "a/docs/Leetcode_Solutions/Java/392._is_subsequence \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/392._is_subsequence \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..b7727173b --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/392._is_subsequence \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,69 @@ + +###392. Is Subsequence + + +题目: + + + +难度: + +Medium + + +思路 + + +follow up question很有意思 + + +最naive的思路表现形式如下: + +超时 + +``` +class Solution(object): + def isSubsequence(self, s, t): + """ + :type s: str + :type t: str + :rtype: bool + """ + if s == "": return True + for i in xrange(len(t)): + if t[i] == s[0]: + return self.isSubsequence(s[1:],t[i+1:]) + + return False +``` + +因为直接操作string的昂贵以及递归的昂贵 + +同样的思路 + + +``` +class Solution(object): + def isSubsequence(self, s, t): + """ + :type s: str + :type t: str + :rtype: bool + """ + if s == "" : return True + + ps, pt = 0, 0 + lens, lent = len(s), len(t) + while ps < lens and pt < lent: + if s[ps] == t[pt]: + ps += 1 + pt += 1 + else: + pt += 1 + + return ps >= lens +``` + +AC + + diff --git "a/docs/Leetcode_Solutions/Java/394._decode_string \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/394._decode_string \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..a9eabe7f1 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/394._decode_string \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,70 @@ +###394. Decode String + + +题目: + + + + +难度: + +Medium + + +思路: + +感觉像用栈做运算。 + +s = "3[a2[c]]" + +⬇️ + +s = 3 *( a + 2 * ( c ) ) + + +遇到非右括号全部入栈,碰到右括号出栈直到左括号,这个就算运算符2 → op2 +然后检查,直到stack空掉或者碰到下一个非数字,这个就算运算符1 → op1 + +算出op1 和 op2 之后把这个res继续入栈。然后接着处理 + + +代码不是很优美 + + + + +``` +class Solution(object): + def decodeString(self, s): + """ + :type s: str + :rtype: str + """ + + s = list(s) + stack = [] + + while s: + char = s.pop(0) + if char != ']': + stack.append(char) + else: + op1, op2 = '','' + popChar = stack.pop() + while popChar != '[': + op2 = popChar + op2 + popChar = stack.pop() + + while stack and stack[-1] in ['0','1','2','3','4','5','6','7','8','9']: + popChar = stack.pop() + op1 = popChar + op1 + + res = int(op1) * op2 + + for char in res: + stack.append(char) + + return ''.join(stack) +``` + + diff --git "a/docs/Leetcode_Solutions/Java/400. Nth Digit \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/400. Nth Digit \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..6cc93ab3e --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/400. Nth Digit \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,46 @@ +### 400. Nth Digit + + + +题目: + + +难度: + +Easy + +思路: + +这道简单题我服, tag是math,找规律 + +``` +1- 9 : 9 → 只占1位 9 +10 - 99: 90 → 两位 90 * 2 +100 - 999: 900 → 三位 900 * 3 +1000 - 9999: 9000 → 四位 9000 * 4 +``` + + + +AC代码来之不易,是参考别人的,这里的`for i in range(9)`, 其实无论`range`多少都可以吧 + + + +``` +class Solution(object): + def findNthDigit(self, n): + """ + :type n: int + :rtype: int + """ + for i in range(9): + d = 9 * 10 ** i + if n <= d * (i+1): break + n -= d *(i+1) + n -= 1 + + return int(str(10**i + n / (i+1))[n % (i+1)]) +``` + + + diff --git "a/docs/Leetcode_Solutions/Java/401._binary_watch \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/401._binary_watch \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..00f217e7f --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/401._binary_watch \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,60 @@ +###401. Binary Watch + + + +题目: + + + +难度: +Easy + + +思路: + + +一看到位操作,我的内心是拒绝的。 + +我也有想这样的想法,因为其实可以的组合并没有那么多,干脆枚举算了,然而也没有动手来写,直到被发了题解的截屏。 + + +``` +class Solution(object): + def readBinaryWatch(self, num): + """ + :type num: int + :rtype: List[str] + """ + hour = { 0 : ['0'], + 1:['1','2','4','8'], + 2:['3','5','6','9','10'], + 3:['7','11'] + } + + minute = { 0:['00'], + 1: ['01','02','04','08','16','32'], + 2: ['03','05','06','09','10','12','17','18','20','24','33','34','36','40','48'], + 3: ['07','11','13','14','19','21','22','25','26','28','35','37','38','41','42','44','49','50','52','56'], + 4: ['15','23','27','29','30','39','43','45','46','51','53','54','57','58'], + 5: ['31','47','55','59'] + } + + res = [] + + #num = num for hour + num for minute + i = 0 + + while i <= 3 and i <= num: + if num - i <= 5: + for str1 in hour[i]: + for str2 in minute[num-i]: + res.append(str1 + ':' + str2) + i += 1 + return res +``` + + +关于循环那处,因为hour的led最多只有4个,所以这样写循环 + + + diff --git "a/docs/Leetcode_Solutions/Java/404._sum_of_left_leaves \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/404._sum_of_left_leaves \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..b6cda537c --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/404._sum_of_left_leaves \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,45 @@ +###404. Sum of Left Leaves + + + +题目: + + + +难度: +Easy + + +思路: + + +典型递归,检查root的左孩子是不是node,是的话加上它的值,不是的话递归去求它的孩子们的,对于右边,递归的求sum of left leaves + + + +``` +class Solution(object): + def sumOfLeftLeaves(self, root): + """ + :type root: TreeNode + :rtype: int + """ + def isLeaf(node): + if node == None: + return False + if node.left == None and node.right == None: + return True + return False + + res = 0 + + if root: + if isLeaf(root.left): + res += root.left.val + else: + res += self.sumOfLeftLeaves(root.left) + if root.right: + res += self.sumOfLeftLeaves(root.right) + + return res +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/405. Convert a Number to Hexadecimal \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/405. Convert a Number to Hexadecimal \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..5bcb3ec36 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/405. Convert a Number to Hexadecimal \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,114 @@ +### 405. Convert a Number to Hexadecimal + +题目: + + + +难度: + +Easy + + + +wikipedia两个page: + + + +[十六进制](https://zh.wikipedia.org/wiki/十六进制#.E5.8D.81.E9.80.B2.E5.88.B6.E8.BD.89.E5.8D.81.E5.85.AD.E9.80.B2.E5.88.B6) + +例子: + +4877÷16=304....13(D) + +304÷16=19....0 + +19÷16=1....3 + +1÷16=0....1 + +這樣就計到4877(10)=130D(16) + + + +[补码](https://zh.wikipedia.org/wiki/二補數) + +> 一個數字的二補數就是將該數字作[位元](https://zh.wikipedia.org/wiki/%E4%BD%8D%E5%85%83)[反相](https://zh.wikipedia.org/w/index.php?title=%E5%8F%8D%E7%9B%B8&action=edit&redlink=1)運算(即[一補數](https://zh.wikipedia.org/wiki/%E4%B8%80%E8%A3%9C%E6%95%B8)或[反码](https://zh.wikipedia.org/wiki/%E5%8F%8D%E7%A0%81)),再將結果加1。在二補數系統中,一個負數就是用其對應正數的二補數來表示 + + + +看给的这个-1的例子 + + + +0000 0000 0000 0000 0000 0000 0000 0001 + +1111 1111 1111 1111 1111 1111 1111 1110 +1 + +1111 1111 1111 1111 1111 1111 1111 1111 + +f f f f f f f f + + + + + +也可以参考这里: + +[基础03:原码、反码、补码](https://higoge.github.io/2015/07/02/basic03/) + + + +这里我一开始迷茫和晕了一下,但是随后反应过来,这些数字在电脑里使用二进制存的,而负数也是用二进制的补码存的。所以其实AC代码应当很简单。 + +参考: + + + + + +AC代码: + +``` +class Solution(object): + def toHex(self, num): + """ + :type num: int + :rtype: str + """ + if not num : + return "0" + + result = [] + hexStr ="0123456789abcdef" + while num and len(result) != 8: + h = num & 15 + result.append(hexStr[h]) + num >>= 4 + + return ''.join(result[::-1]) +``` + + + +每次看后四位的结果,把它存起来,比如还是是看4877 + +它在计算机内部的表示是: + +``` +0b1001100001101 +num & 15 1101 & 15 = 13(d) +num >>=4 0b100110000 +num & 15 0000 & 15 = 0 +num >>=4 0b10011 +num & 15 10011 & 15 = 9 +num >>=4 0001 +num & 15 0001 & 15 = 1 + +``` + + + + + + + diff --git "a/docs/Leetcode_Solutions/Java/406._Queue_Reconstruction_by_Height \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/406._Queue_Reconstruction_by_Height \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..87e551963 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/406._Queue_Reconstruction_by_Height \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,43 @@ +### 406. Queue Reconstruction by Height + +题目: + + + +难度: + +Medium + + +思路: +People are only counting (in their k-value) taller or equal-height others standing in front of them. +So a smallest person is completely irrelevant for all taller ones. And of all smallest people, +the one standing most in the back is even completely irrelevant for everybody else. Nobody is counting that person. +So we can first arrange everybody else, ignoring that one person. And then just insert that person appropriately. +Now note that while this person is irrelevant for everybody else, everybody else is relevant for this person - +this person counts exactly everybody in front of them. So their count-value tells you exactly the index they must be standing. + +So you can first solve the sub-problem with all but that one person and then just insert that person appropriately. +And you can solve that sub-problem the same way, first solving the sub-sub-problem with all +but the last-smallest person of the subproblem. And so on. The base case is when you have the sub-…-sub-problem of zero people. +You’re then inserting the people in the reverse order, i.e., that overall last-smallest person in the very end +and thus the first-tallest person in the very beginning. That’s what the above solution does, +Sorting the people from the first-tallest to the last-smallest, and inserting them one by one as appropriate. + +参考[stefan](https://leetcode.com/problems/queue-reconstruction-by-height/discuss/89359) + +```python +class Solution(object): + def reconstructQueue(self, people): + """ + :type people: List[List[int]] + :rtype: List[List[int]] + """ + people.sort(key=lambda (h, k): (-h, k)) + queue = [] + for p in people: + queue.insert(p[1], p) + return queue +``` + + diff --git "a/docs/Leetcode_Solutions/Java/412._fizz_buzz \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/412._fizz_buzz \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..76551be9f --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/412._fizz_buzz \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,68 @@ +### 412. Fizz Buzz + +题目: + + + +难度: +Easy + +一行 +```python +class Solution(object): + def fizzBuzz(self, n): + """ + :type n: int + :rtype: List[str] + """ + return [(not i%3)*"Fizz" + (not i%5)*"Buzz" or str(i) for i in range(1, n+1)] + +``` +```python +class Solution(object): + def fizzBuzz(self, n): + """ + :type n: int + :rtype: List[str] + """ + return [str(i) if (i%3!=0 and i%5!=0) else (('Fizz'*(i%3==0)) + ('Buzz'*(i%5==0))) for i in range(1,n+1)] + +``` + + +就是easy,不过可以参见这里,有一些讨论 + + + +我觉得这里一个用yield的想法还蛮不错 +``` +# the fizbuz logic, returns an iterator object that +# calculates one value at a time, not all ot them at once +def fiz(numbers): + for i in numbers: + if i % 15 == 0: + yield 'fizbuz' + elif i % 5 == 0: + yield 'buz' + elif i % 3 == 0: + yield 'fiz' + else: + yield str(i) + +# xrange evaluates lazily, good for big numbers +# matches well with the lazy-eval generator function +numbers = xrange(1,2**20) + +# this gets one number, turns that one number into fuz, repeat +print ' '.join(fiz(numbers)) + +# returns: 1 2 fiz 4 buz fiz [...] fiz 1048573 1048574 fizbuz +``` +- clearly separates fizbuz logic from concatenation +- is as plain and readeable as possible +- generator iterator does not keep all the array in memory +- so that you can do it on arbitrary numbers (see Euler problem #10) + +What I do not like in this solution is the three ifs, whereas the problem can be solved with two. + +Answer: because yield is efficient when you do not want to keep big arrays in memory just to iterate through them. But this question is not about big arrays. diff --git "a/docs/Leetcode_Solutions/Java/413. Arithmetic Slices \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/413. Arithmetic Slices \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..6aff8c826 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/413. Arithmetic Slices \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,84 @@ +### 413. Arithmetic Slices + + + +题目: + + + + +难度 : Medium + + + +思路: + +tag 是DP + +数从 i 到 j 之间的这个arithmetic 数 + +我的方法时间复杂度比较高O(N^2),从 i 开始数它的arithmetic slice,每个i数一遍,到 j + +AC代码 + +``` +class Solution(object): + def numberOfArithmeticSlices(self, A): + """ + :type A: List[int] + :rtype: int + """ + n = len(A) + if n < 3: + return 0 + else: + res = 0 + for i in range(n-2): + for j in range(i+2,n): + if A[j] - A[j-1] == A[i+1] - A[i]: + res += 1 + else: + break + return res +``` + + + +应该可以优化到O(N) + +不需要每个每个开始数,可以边数边移动 + +可以参考 + + + +O(N) 代码 + +``` +class Solution(object): + def numberOfArithmeticSlices(self, A): + """ + :type A: List[int] + :rtype: int + """ + n = len(A) + if n < 3: + return 0 + else: + res, cnt = 0, 2 + for i in range(2, n): + if A[i] - A[i-1] == A[i-1] - A[i-2]: + print i, i-1, i-2 + cnt += 1 + else: + if cnt > 2: + res += (cnt-1) * (cnt-2) / 2 + cnt = 2 + if cnt > 2: res += (cnt-1) * (cnt-2) / 2 + return res + + +``` + + + diff --git "a/docs/Leetcode_Solutions/Java/414._third_maximum_number \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/414._third_maximum_number \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..fc3652b98 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/414._third_maximum_number \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,46 @@ +###414. Third Maximum Number + +题目: + + + +难度: + +Easy + + +思路: + +用三个变量来记录,max, secondmax, thirdmax, + +- 遇到比max还大的就更新,当前max降级为secondmax,当前secondmax降级为thirdmax +- 遇到比max小但是比secondmax大的也这样做降级处理 +- 更thirdmax + + +AC代码 + + +``` +class Solution(object): + def thirdMax(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + m, sm, tm = float('-inf'), float('-inf'), float('-inf') + + for num in nums: + if num > m: + tm = sm + sm = m + m = num + elif num < m and num > sm: + tm = sm + sm = num + elif num < m and num < sm and num > tm: + tm = num + + return tm if tm != float('-inf') else m +``` + diff --git "a/docs/Leetcode_Solutions/Java/415._add_strings \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/415._add_strings \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..bfa319cdf --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/415._add_strings \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,61 @@ +###415. Add Strings + +题目: + + + +难度: +Easy + + +照抄2. Add Two Numbers的代码,超时 + +``` +class Solution(object): + def addStrings(self, num1, num2): + """ + :type num1: str + :type num2: str + :rtype: str + """ + if num1 == '' or num1 == '0': + return num2 + if num2 == '' or num2 == '0': + return num1 + if int(num1[-1]) + int(num2[-1]) < 10: + num3 = str(int(num1[-1]) + int(num2[-1]) ) + return self.addStrings(num1[:-1] , num2[:-1]) + num3 + else: + num3 = str(int(num1[-1]) + int(num2[-1]) - 10) + return self.addStrings(self.addStrings(num1[:-1] , num2[:-1]),'1') + num3 +``` + + + +换成迭代,并非递归再来尝试,看了别人的代码,真是精巧啊 + + +``` +class Solution(object): + def addStrings(self, num1, num2): + """ + :type num1: str + :type num2: str + :rtype: str + """ + result = [] + carry = 0 + idx1, idx2 = len(num1), len(num2) + while idx1 or idx2 or carry: + digit = carry + if idx1: + idx1 -= 1 + digit += int(num1[idx1]) + if idx2: + idx2 -= 1 + digit += int(num2[idx2]) + carry = digit > 9 + result.append(str(digit % 10)) + print result + return ''.join(result[::-1]) # 这里是reverse一下 +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/416. Partition Equal Subset Sum \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/416. Partition Equal Subset Sum \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..1dee2d982 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/416. Partition Equal Subset Sum \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,87 @@ +### 416. Partition Equal Subset Sum + + + +题目: + + +难度: + +Medium + +记得算法考试考过证明这个问题是NP的,当时用的是subset sum是NP,然后来证明这个?如果我们能找到一个subset的sum是整个array sum的一半,那么问题解决。subset sum我们又可以继续转化,转成背包问题。 + +值得注意的是,这是subset sum,并不是subarray sum(这个明显要简单一些,因为subarray是连着的). + +subset sum也是有自己的[wikipedia page](https://en.wikipedia.org/wiki/Subset_sum_problem). + + + +当然,这也是一个subset problem,我们当然也可以用subset,加入和不加入,但是worst case O(2^n). + + + +对于subset sum的递推方程式: + +subset(arr,n,s) = subset(arr,n-1,s) or subset(arr, n-1, s- arrp[n-1]) + + + +画表可以开始,第一列全为1,是因为不选全部可以为0 + + + +``` + 0 1 2 3 4 5 6 8 9 10 11 +0 1 0 0 0 0 0 0 0 0 0 0 +1 1 1 0 0 0 0 0 0 0 0 0 +5 1 1 0 0 0 1 1 0 0 0 0 +5 1 1 0 0 0 1 1 0 0 0 1 +``` + + + +所以伪多项式算法写出来 + +AC代码 + + + +``` +class Solution(object): + def canPartition(self, nums): + """ + :type nums: List[int] + :rtype: bool + """ + def subset(nums, s): + dp = [[0 for i in range(s+1) ] for j in range(len(nums)+1)] + + dp[0][0] = 1 + # init the first col + for i in range(len(nums)+1 + dp[i][0] = 1 + + for i in range(1,len(nums)+1): + for j in range(1,s+1): + if dp[i-1][j] == 1: + dp[i][j] = 1 + elif j >= nums[i-1] and dp[i-1][j-nums[i-1]] ==1: + dp[i][j] = 1 + return dp[-1][-1] == 1 + + + + total = sum(nums) + if total % 2 == 1: + return False + else: + half = total / 2 + return subset(nums,half) == 1 + +``` + + + +当然可以小调整,比如一旦发现,提前return等等,但是时间上依旧是后20%,不知道时间上快很多的人是如何做到的||| + diff --git "a/docs/Leetcode_Solutions/Java/421._Maximum_XOR_of_Two_Numbers_in_an_Array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/421._Maximum_XOR_of_Two_Numbers_in_an_Array \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..b0697b2a6 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/421._Maximum_XOR_of_Two_Numbers_in_an_Array \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,74 @@ +### 421. Maximum XOR of Two Numbers in an Array + +题目: + + + +难度: + +Medium + +题目要求O(N)时间 + +看了半天的解法居然超时, +```python +class Solution(object): # 此法超时 +    def findMaximumXOR(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + '''The maxResult is a record of the largest XOR we got so far. if it's 11100 at i = 2, it means + before we reach the last two bits, 11100 is the biggest XOR we have, and we're going to explore + whether we can get another two '1's and put them into maxResult''' + max_res, mask = 0, 0 + + '''This is a greedy part, since we're looking for the largest XOR, we start + from the very begining, aka, the 31st postition of bits.''' + for i in range(32)[::-1]: + + '''The mask will grow like 100..000 , 110..000, 111..000, then 1111...111 + for each iteration, we only care about the left parts''' + mask |= (1 << i) + tmp = [] + for num in nums: + '''we only care about the left parts, for example, if i = 2, then we have + {1100, 1000, 0100, 0000} from {1110, 1011, 0111, 0010}''' + tmp.append(num & mask) + + '''if i = 1 and before this iteration, the maxResult we have now is 1100, + my wish is the maxResult will grow to 1110, so I will try to find a candidate + which can give me the greedyTry;''' + greedy_try = max_res | (1 << i) + + for i in tmp: + '''This is the most tricky part, coming from a fact that if a ^ b = c, then a ^ c = b; + now we have the 'c', which is greedyTry, and we have the 'a', which is leftPartOfNum + If we hope the formula a ^ b = c to be valid, then we need the b, + and to get b, we need a ^ c, if a ^ c exisited in our set, then we're good to go''' + if i ^ greedy_try in tmp: + max_res = greedy_try + '''If unfortunately, we didn't get the greedyTry, we still have our max, + So after this iteration, the max will stay at 1100.''' + return max_res +``` + + +只好想别的办法 + + +参考[stefan](https://leetcode.com/problems/maximum-xor-of-two-numbers-in-an-array/discuss/91050?page=3) +```python +class Solution(object): + def findMaximumXOR(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + answer = 0 + for i in range(32)[::-1]: + answer <<= 1 + prefixes = {num >> i for num in nums} + answer += any(answer^1 ^ p in prefixes for p in prefixes) + return answer +``` diff --git "a/docs/Leetcode_Solutions/Java/422. Valid Word Square \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/422. Valid Word Square \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..17cb1144d --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/422. Valid Word Square \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,48 @@ +### 422. Valid Word Square + + + + + +题目: + + + + +难度 : Easy + + + +思路: + +就是对比一个矩阵内 xy == yx? + +try /except 真是好用 + +AC代码 + + + +``` +class Solution(object): + def validWordSquare(self, words): + """ + :type words: List[str] + :rtype: bool + """ + n = len(words) + for i in xrange(n): + m = len(words[i]) + for j in xrange(m): + try: + if words[i][j] != words[j][i]: + return False + except: + return False + return True +``` + + + + + diff --git "a/docs/Leetcode_Solutions/Java/434._number_of_segments_in_a_string \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/434._number_of_segments_in_a_string \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..424472a5a --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/434._number_of_segments_in_a_string \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,27 @@ +### 434. Number of Segments in a String + +题目: + + + +难度: + +Easy + + +作弊神器Python + + +```python +class Solution(object): + def countSegments(self, s): + """ + :type s: str + :rtype: int + """ + return len(s.split()) +``` + +不过对于比如C++这种语言来说,应该是O(N),扫一圈应该也能得到正确答案 + +总之拿Python做string的题目就是作弊啊 diff --git "a/docs/Leetcode_Solutions/Java/437._path_sum_iii \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/437._path_sum_iii \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..ac5c314a6 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/437._path_sum_iii \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,39 @@ +### 437. Path Sum III + + + +题目: + + + +难度: +Easy + +思路: + + + + +```python +class Solution(object): + def pathSum(self, root, sum): + """ + :type root: TreeNode + :type sum: int + :rtype: int + """ + if not root: + return 0 + res = self.auxPathSum(root, sum) + res += self.pathSum(root.left, sum) + res += self.pathSum(root.right, sum) + return res + def auxPathSum(self, root, sum): + if not root: + return 0 + if sum == root.val: +            # 因为可能有负值, 所以sum为0也会有解, 必须加上 +            return 1 + self.auxPathSum(root.left, 0) + self.auxPathSum(root.right, 0) + else: + return self.auxPathSum(root.left, sum - root.val) + self.auxPathSum(root.right, sum - root.val) +``` diff --git "a/docs/Leetcode_Solutions/Java/438._Find_All_Anagrams_in_a_String \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/438._Find_All_Anagrams_in_a_String \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..2b8519852 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/438._Find_All_Anagrams_in_a_String \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,92 @@ +### 438. Find All Anagrams in a String + + +题目: + + + +难度: + +Easy + + + +思路 + +刚开始打算直接遍历整个s,时间复杂度为O(m*n),m和n分别为字符串p和s的长度,但是超时了 + + + +``` + +class Solution(object): # 此法超时 +    def findAnagrams(self, s, p): + """ + :type s: str + :type p: str + :rtype: List[int] + """ + l, res = len(p), [] + for i in range(len(s)): + if collections.Counter(s[i:i+l]) == collections.Counter(p): + res.append(i) + return res +``` + +于是用双指针,left和right都从0开始往后遍历 +``` +class Solution(object): + def findAnagrams(self, s, p): + """ + :type s: str + :type p: str + :rtype: List[int] + """ + res, cnts = [], [0] * 26 + for c in p: + cnts[ord(c) - ord('a')] += 1 + left, right = 0, 0 + while right < len(s): + cnts[ord(s[right]) - ord('a')] -= 1 + while left <= right and cnts[ord(s[right]) - ord('a')] < 0: + cnts[ord(s[left]) - ord('a')] += 1 + left += 1 + if right - left + 1 == len(p): + res.append(left) + right += 1 + return res +``` +模板大法好 +```python +class Solution(object): + def findAnagrams(self, s, p): + """ + :type s: str + :type p: str + :rtype: List[int] + """ + res = [] + if len(p) > len(s): + return res + maps = collections.Counter(p) + counter = len(maps.keys()) + begin, end, head, length = 0, 0, 0, sys.maxint + while end < len(s): + if s[end] in maps: + maps[s[end]] -= 1 + if maps[s[end]] == 0: + counter -= 1 + end += 1 + while counter == 0: + if s[begin] in maps: + maps[s[begin]] += 1 + if maps[s[begin]] > 0: + counter += 1 + if end - begin == len(p): + res.append(begin) + begin += 1 + return res +``` + + + diff --git "a/docs/Leetcode_Solutions/Java/439. Ternary Expression Parser \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/439. Ternary Expression Parser \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..065f56cd7 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/439. Ternary Expression Parser \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,58 @@ +### 439. Ternary Expression Parser + + + + + +题目: + + + + +难度: +Medium + +思路: + +其实这个和算术运算蛮像,但是不同于运算,有operator precedence差别,这个是三目运算,并且需要检查是否符合运算规则。 + + + +运用stack 然后每次查看是否形成运算式再来做处理 + +AC代码: + +``` +class Solution(object): + def parseTernary(self, expression): + """ + :type expression: str + :rtype: str + """ + n = len(expression) + + stack = [] + + for i in range(n-1, -1, -1): + char = expression[i] + stack.append(char) + + if len(stack) >= 5: + op0 = stack.pop() + op1 = stack.pop() + op2 = stack.pop() + op3 = stack.pop() + op4 = stack.pop() + + if op1 == '?' and op3 == ':': + res = op2 if op0 == 'T' else op4 + stack.append(res) + else: + stack.append(op4) + stack.append(op3) + stack.append(op2) + stack.append(op1) + stack.append(op0) + return stack[0] +``` + diff --git "a/docs/Leetcode_Solutions/Java/441._arranging_coins \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/441._arranging_coins \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..5ef0dae95 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/441._arranging_coins \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,29 @@ +###441. Arranging Coins + +题目: + + + +难度: +Easy + + +可以直接O(1),公式: + +i(i+1)/2 = n + +解i + +i = ( sqrt(8*n+1) -1 )/ 2 + + +``` +import math +class Solution(object): + def arrangeCoins(self, n): + """ + :type n: int + :rtype: int + """ + return int((math.sqrt( 8 * n + 1) - 1 )/ 2 ) +``` \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/448._Find_All_Numbers_Disappeared_in_an_Array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/448._Find_All_Numbers_Disappeared_in_an_Array \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..b03105e6b --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/448._Find_All_Numbers_Disappeared_in_an_Array \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,25 @@ +### 448. Find All Numbers Disappeared in an Array + +题目: + + + +难度: + +Easy + + + + + +```python +class Solution(object): + def findDisappearedNumbers(self, nums): + """ + :type nums: List[int] + :rtype: List[int] + """ + return list(set(range(1, len(nums)+1)) - set(nums)) +``` + + diff --git "a/docs/Leetcode_Solutions/Java/450. Delete Node in a BST \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/450. Delete Node in a BST \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..3f622c90a --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/450. Delete Node in a BST \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,62 @@ +### 450. Delete Node in a BST + + + +题目: + + +难度 : Medium + + + +思路: + +从二叉搜索树中删除节点x的方法如下: + +• 如果x没有子节点,或者只有一个孩子,直接将x“切下”; + +• 否则,x有两个孩子,我们用其右子树中的最小值替换掉x,然后将右子树中的这一最小值递归的“切掉”。 +​ + + + +AC代码 + + + +```python +class Solution(object): + def deleteNode(self, root, key): + """ + :type root: TreeNode + :type key: int + :rtype: TreeNode + """ + def findmin(root): + while root.left: + root = root.left + return root + + + if not root : return None + elif key < root.val: root.left = self.deleteNode(root.left, key) + elif key > root.val : root.right = self.deleteNode(root.right, key) + else: + if root.left and root.right: + tmp = findmin(root.right) + root.val = tmp.val + root.right = self.deleteNode(root.right, tmp.val) + else: + if not root.left: + root = root.right + elif not root.right: + root = root.left + return root +``` + +​ + + + +其实这个代码还是需要花点时间来理解,需要画个图,理解这个root是每个stack return回去然后被接在原来的树上的,if 这个node并不是在node左右。 + diff --git "a/docs/Leetcode_Solutions/Java/453._Minimum_Moves_to_Equal_Array_Elements \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/453._Minimum_Moves_to_Equal_Array_Elements \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..2e9668086 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/453._Minimum_Moves_to_Equal_Array_Elements \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,72 @@ +### 453. Minimum Moves to Equal Array Elements + + + + + +题目: + + + + +难度 : Easy + + + +思路: + +naive TLE 代码: + +每次都是给并不是最大的元素加1直到全部相等。 + +``` +class Solution(object): + def minMoves(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + res = 0 + while(not all(x == nums[0] for x in nums)): + nums.sort() + for i in range(len(nums) - 1): + nums[i] += 1 + res += 1 + + return res +``` + + + +给的测试例子是 `[1,2147483647]`能不TLE么?tag 是Math,所以要用观察到的结果来做吧? + +所以就是每个和最小值来比,看到底要增加多少,这是观察,但不是证明 + + + + + +AC代码 + +```python +class Solution(object): + def minMoves(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + res = 0 + minVal = min(nums) + for num in nums: + res += num -minVal + return res +``` + + + +类证明: + + + +> 其实给n-1个数字加1,效果等同于给那个未被选中的数字减1,比如数组[1,2,3], 给除去最大值的其他数字加1,变为[2,3,3],我们全体减1,并不影响数字间相对差异,变为[1,2,2],这个结果其实就是原始数组的最大值3自减1,那么问题也可能转化为,将所有数字都减小到最小值,这样难度就大大降低了,我们只要先找到最小值,然后累加每个数跟最小值之间的差值即可 + diff --git "a/docs/Leetcode_Solutions/Java/459._Repeated_Substring_Pattern \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/459._Repeated_Substring_Pattern \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..f32b6eb4b --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/459._Repeated_Substring_Pattern \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,31 @@ +### 459. Repeated Substring Pattern + + +题目: + + + +难度: + +Easy + + +思路 + +- 如果存在这样的子串,那么子串的第一个字符和最后一个字符肯定跟父字符串```s```的相同。 +- 因此构建一个新字符串```s*2```(两个父字符串相加),去掉首尾字符 +- 如果此时能在其中找到```s```,说明存在这样的子串 + + + + +```python +class Solution(object): + def repeatedSubstringPattern(self, s): + """ + :type s: str + :rtype: bool + """ + return (s*2)[1:-1].find(s) != -1 +``` + diff --git "a/docs/Leetcode_Solutions/Java/461._Hamming Distance \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/461._Hamming Distance \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..4a8d63d81 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/461._Hamming Distance \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,66 @@ +### 461. Hamming Distance + + + +题目: + For binary strings *a* and *b* the Hamming distance is equal to the number of ones ([Hamming weight](https://en.wikipedia.org/wiki/Hamming_weight)) in *a* [XOR](https://en.wikipedia.org/wiki/Exclusive_or) *b*. +> +> + + + +一行无敌 +```python +class Solution(object): + def hammingDistance(self, x, y): + """ + :type x: int + :type y: int + :rtype: int + """ + return bin(x^y).count('1') +``` +AC代码 + +```python +class Solution(object): + def hammingDistance(self, x, y): + """ + :type x: int + :type y: int + :rtype: int + """ + dist = 0 + val = x ^ y + + while val: + dist += 1 + val &= val - 1 + + return dist +``` + + + + + diff --git "a/docs/Leetcode_Solutions/Java/463._Island_Perimeter \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/463._Island_Perimeter \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..bedc5f8a1 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/463._Island_Perimeter \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,38 @@ +### 463. Island Perimeter + + + +题目: + + + +难度: +Easy + +思路: + + + + +```python +class Solution(object): + def islandPerimeter(self, grid): + """ + :type grid: List[List[int]] + :rtype: int + """ + # 每一个陆地单元格的周长为4,当两单元格上下或者左右相邻时,令周长减2 + h = len(grid) + w = len(grid[0]) if h else 0 + ans = 0 + for x in range(h): + for y in range(w): + if grid[x][y] == 1: + ans += 4 + # 因为x+1还在后面,所以不需要考虑,即只需要考虑左边和上边,因为循环已经出现过该点了 + if x > 0 and grid[x - 1][y]: + ans -= 2 + if y > 0 and grid[x][y - 1]: + ans -= 2 + return ans +``` diff --git "a/docs/Leetcode_Solutions/Java/467._Unique_Substrings_in_Wraparound_String \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/467._Unique_Substrings_in_Wraparound_String \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..85c7a9d97 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/467._Unique_Substrings_in_Wraparound_String \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,42 @@ +### 467. Unique Substrings in Wraparound String + +题目: + + + +难度: + +Medium + + +思路: + +有个无限长的字符串s,是由无数个「abcdefghijklmnopqrstuvwxyz」组成的。现在给你一个字符串p,求多少个p的非空子串在s中出现了? +   + +先考虑s的特性,满足条件(在s中)的p的子串只可能是abcd……z的连续序列(z后面是a), 我们只需要处理p中连续的部分就可以了。但是 举个例子,h-k的序列出现了,a-z的序列也出现了,那么只需要计算a-z的子串个数就可以了,因为h-k已经包含在a-z里了。考虑所有包含的情况,似乎就变得复杂了,a-z还可能被包含在x-za-z中,甚至更长的序列中。 + +  但是如果考虑以某个字母结尾的子串个数,那么p中以该字母结尾的连续序列长度,就是满足条件的子串个数。如果以字母x结尾的连续序列有多个, 我们只需要最长的一个即可,因为其他短的序列都已经被长的包含进去了,例如'bcd'和'abcd',有了'abcd'就知道以d结尾的子串有4个,分别是‘d’,'cd','bcd','abcd',‘bcd’已经被包含进去了。最后求和,问题就解决了。 这样思考就非常简单了,代码也可以很容易写出来。 + + + +```python +class Solution(object): + def findSubstringInWraproundString(self, p): + """ + :type p: str + :rtype: int + """ +        letters = [0] * 26         #开始默认每个都是0 +        length = 0 + for i in range(len(p)): + curr = ord(p[i]) - ord('a') +            if i > 0 and ord(p[i-1]) != (curr-1)%26 + ord('a'):   #一旦开始不相等了就要将length重置为0 +                length = 0 +            length += 1     #否则就说明继续与前面一个字符是连续的,length要加1才行 +            if length > letters[curr]:     #length一直加,如果到i这个字符length比它的目前的最大连续子串长度还要长,那么肯定要更新letters +                letters[curr] = length + return sum(letters) +``` + + diff --git "a/docs/Leetcode_Solutions/Java/469. Convex Polygon \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/469. Convex Polygon \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..2afb7d070 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/469. Convex Polygon \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,88 @@ +### 469. Convex Polygon + + + +题目: + You can make things a lot easier than the Gift-Wrapping Algorithm... that's a good answer when you have a set of points w/o any particular boundary and need to find the convex hull. +> +> A polygon is a set of points in a list where the consecutive points form the boundary. It is much easier to figure out whether a polygon is convex or not (and you don't have to calculate any angles, either): +> +> +> +> For each consecutive pair of edges of the polygon (each triplet of points), compute the z-component of the cross product of the vectors defined by the edges pointing towards the points in increasing order. Take the cross product of these vectors: +> +> The polygon is convex if the z-components of the cross products are either all positive or all negative. Otherwise the polygon is nonconvex. +> +> given p[k], p[k+1], p[k+2] each with coordinates x, y: +> +>  dx1 = x[k+1]-x[k] +> +>  dy1 = y[k+1]-y[k] +> +>  dx2 = x[k+2]-x[k+1] +> +>  dy2 = y[k+2]-y[k+1] +> +>  zcrossproduct = dx1 * dy2 - dy1 * dx2 +> +> If there are N points, make sure you calculate N cross products, e.g. be sure to use the triplets (p[N-2],p[N-1],p[0]) and (p[N-1],p[0],p[1]). + + + +所以根据这个答案AC代码 + +``` +class Solution(object): + def isConvex(self, points): + """ + :type points: List[List[int]] + :rtype: bool + """ + n = len(points) + zcrossproduct = None + + for i in range(-2, n-2): + x = [ points[i][0], points[i+1][0], points[i+2][0] ] + y = [ points[i][1], points[i+1][1], points[i+2][1] ] + + dx1 = x[1] - x[0] + dy1 = y[1] - y[0] + + dx2 = x[2] - x[1] + dy2 = y[2] - y[1] + + if not zcrossproduct: + zcrossproduct = dx1 * dy2 - dy1 * dx2 + elif ( dx1 * dy2 - dy1 * dx2 ) * zcrossproduct < 0: + return False + return True +``` + diff --git "a/docs/Leetcode_Solutions/Java/476._Number_Complement \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/476._Number_Complement \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..91b253972 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/476._Number_Complement \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,28 @@ +### 476. Number Complement + + + +题目: + + + +难度: +Easy + + + + + +```python +class Solution(object): + def findComplement(self, num): + """ + :type num: int + :rtype: int + """ + i = 1 << (len(bin(num)) -2) # 因为bin函数转化成的格式是‘0bXXXX’,头两个‘0b’要减掉去 + return (i - 1) ^ num + # return (i - 1) - num # 这样也可以 +``` + + diff --git "a/docs/Leetcode_Solutions/Java/477._Total_Hamming_Distance \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/477._Total_Hamming_Distance \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..cf5bc54a7 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/477._Total_Hamming_Distance \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,82 @@ +### 477. Total Hamming Distance + + + +题目: + + + +难度: +Medium + +思路: + + +第一想法就是暴力,直接超时 + +``` +class Solution(object): # 此法超时 + def totalHammingDistance(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + res = 0 + for i in range(len(nums)): + for j in range(i+1, len(nums)): + res += bin(nums[i]^nums[j]).count('1') + return res +``` + + +前面的解法是```O(n^2)```所以超时,所以我们想想有没有```O(n)```的解法 +对于所有的数字,我们先从右数第一位开始算,如果一共有```n```个数字,其中```k```个数字的右数第一位是```‘1’```,其他```n-k```个数字的右数第一位是```‘0’```, +所以这一位对最终```res```的贡献就是```k*(n-k)```,这样我们的时间复杂度就是```O(32n)```,也就是```O(N)```了 + +``` +for each “column” or bit position, once you count the number of set bits you can figure out the number of pairs +that will contribute to the count using combination logic. + +Consider you have 10 numbers and only one of them is a 1 the rest are zeros. How many (1, 0) pairs can you make? +Clearly you can make 9, pair the 1 with each of the other 9 zeros. If you have 2 ones, +you can pair each of those with the other 8 zeros giving 2*8 = 16. +Keep going and you see that you can pair each 1 with each zero so the number of pairs is just the number of 1’s times the number of 0’s. + +This would be an O(32 * n) solution which is an O(n) solution, no space used. +``` + +AC代码 + +```python +class Solution(object): + def totalHammingDistance(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + # iterate thru "column" or bit position + # Note: you could stop at 10^9 as stated in the problem if you want to optimize + res = 0 + for i in range(32): + mask = 1 << i + count_ones, count_zeros = 0, 0 + for num in nums: + if num & mask != 0: + count_ones += 1 + else: + count_zeros += 1 + res += count_ones * count_zeros + return res +``` + +上面的代码简化一下就是[stefan大神(老流氓罒ω罒)](https://leetcode.com/problems/total-hamming-distance/discuss/96229)的无敌一行了 + +```python +class Solution(object): # 此法超时 + def totalHammingDistance(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + return sum(b.count('0') * b.count('1') for b in zip(*map('{:032b}'.format, nums))) +``` diff --git "a/docs/Leetcode_Solutions/Java/485._Max_Consecutive_Ones \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/485._Max_Consecutive_Ones \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..422a70c92 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/485._Max_Consecutive_Ones \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,40 @@ +### 485. Max Consecutive Ones + + + +题目: + + + +难度: +Easy + +思路: + + +一行无敌 +```python +class Solution(object): + def findMaxConsecutiveOnes(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + return len(max(''.join(map(str, nums)).split('0'))) +``` + +```python +class Solution(object): + def findMaxConsecutiveOnes(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + res, count = [], 0 + for x in nums: + count = 0 if x == 0 else count + 1 + res.append(count) + return max(res) +``` + + diff --git "a/docs/Leetcode_Solutions/Java/587._Erect_the_Fence \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/587._Erect_the_Fence \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..f61d75b3c --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/587._Erect_the_Fence \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,133 @@ + + +### 587. Erect the Fence + + +题目: + + + +难度: + +Hard + + + +思路 + +题目要求用一个围栏把所有的点(🌲)围起来,然后求处于围栏上点(🌲)的集合。 + +我们可以发现,从最左边的那个点一直往右走,只要一直都是走的逆时针方向,那么我们一定可以找到这条围栏。那么接下来就考虑最简单的情况, + +- 只有两个点```p```和```q```,我们从```p```走到```q```,当```p```到原点这条直线的斜率小于```q```到原点这条直线的斜率时,```p->q```就是沿逆时针方向走的; +- 接下来考虑3个点:```p,q,r```,以```p```为参照点(即前面的原点),那么从```q```走到```r```的时候,只要```q```到```q```这条直线的斜率小于```r```到```p```这条直线的斜率,```q->r```就是沿逆时针方向走的。 + +因此,我们只要构建一个```orientation```函数,就可以判断出目前我们的围栏是不是沿着逆时针在走下去了。 + +我们用一个```stack```来存放目前认为在围栏上的点的集合,然后把所有的点按照指定规则排好序:```先按照点的x坐标升序排列,如果x相等则按照点的y坐标升序排列```。这样我们依次取点,只要```stack```里面的点大于等于```2```个我们就要无限进行判断是否走的是逆时针,如果不是就把```stack```里面最后那个点```pop```出去(可能一直```pop```到只剩一个点),否则就把目前的这个点加入到```stack```中去,因为目前它还是在逆时针方向上的。 + +从左往右走完一遍```points```之后,我们围栏的下部分```lower hull```就构建好了,此时我们还要构建围栏的```upper hull```,因此我们将```points```逆序一下,从右往左再来一次遍历,仍然看是否走的是逆时针。但是这次遍历我们需要进行一个判断,就是之前放进```stack```的点,此时我们还是会经过它,如果它已经在```stack```里面了,我们就不需要再加进去了,同时这样也避免了我们把最左边的点重复加进去。 + + + +```python +python +# import functools +class Solution: + def outerTrees(self, points): + """ + :type points: List[Point] + :rtype: List[Point] + """ + def orientation(p, q, r): + return (q.y - p.y)*(r.x - p.x) - (r.y - p.y)*(q.x - p.x) + # def myComparator(p,q): + # return p.x - q.x if p.x != q.x else p.y - q.y + stack= [] + # points.sort(key = functools.cmp_to_key(myComparator)) + points.sort(key = lambda p: (p.x, p.y)) + for i in range(len(points)): + while (len(stack) >= 2 and orientation(stack[-2],stack[-1],points[i]) > 0): + stack.pop() + stack.append(points[i]) + points.reverse(); + for i in range(len(points)): + while (len(stack) >= 2 and orientation(stack[-2],stack[-1],points[i]) > 0): + stack.pop() + if points[i] not in stack: + stack.append(points[i]) + return stack +``` +简化python版本 +```python +class Solution(object): + def outerTrees(self, points): + """ + :type points: List[Point] + :rtype: List[Point] + """ + def orientation(p, q, r): + return (q.y - p.y) * (r.x - q.x) - \ + (q.x - p.x) * (r.y - q.y) + + hull = [] + points.sort(key=lambda p: (p.x, p.y)) + + for i in itertools.chain(xrange(len(points)), \ + reversed(xrange(len(points)))): + while len(hull) >= 2 and \ + orientation(hull[-2], hull[-1], points[i]) > 0: + hull.pop() + hull.append(points[i]) + + return list(set(hull)) +``` + +下面是小傅大神的代码,本来想叫‘’傅神‘’的,结果这名字🤦‍♂️(手动捂脸)[小傅每日一题587](https://www.bilibili.com/video/av15446980/) + +另外其中的```stack.pop()```这行代码注释掉也是可以的 + +```java +java +class Solution { + public List outerTrees(Point[] points) { + List res = new ArrayList(); + Arrays.sort(points, new Comparator(){ + @Override + public int compare(Point p, Point q){ + return p.x == q.x ? p.y - q.y : p.x - q.x; + } + }); + Stack stack = new Stack<>(); + for (int i = 0; i < points.length; i++){ + while(stack.size() >= 2 && orientation(stack.get(stack.size() - 2), stack.peek(), points[i]) > 0){ + stack.pop(); + } + stack.push(points[i]); + } + //stack.pop(); + for (int i = points.length - 1; i >= 0; i--){ + while(stack.size() >= 2 && orientation(stack.get(stack.size() - 2), stack.peek(), points[i]) > 0){ + stack.pop(); + } + stack.push(points[i]); + } + res.addAll(new HashSet<>(stack)); + return res; + } + + public int orientation(Point p, Point q, Point r){ + return (q.y - p.y)*(r.x - p.x) - (r.y - p.y)*(q.x - p.x); + } +} +``` + + + + + +Author: Keqi Huang + +If you like it, please spread your support + +![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) diff --git "a/docs/Leetcode_Solutions/Java/599._Minimum_Index_Sum_of_Two_Lists \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/599._Minimum_Index_Sum_of_Two_Lists \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..1682fab62 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/599._Minimum_Index_Sum_of_Two_Lists \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,58 @@ +### 599. Minimum Index Sum of Two Lists + + +题目: + + + +难度: + +Easy + + + +思路 + +两个list,我们首先要取得它们相同的部分,并且之后我们还要知道哪个相同的字符串在两个list中的index之和是最小的。 +- 所以我们首先遍历list1,只要目前这个字符串在list2中,我们就以[字符串,index之和]的形式将其存放到ress中,同时维护一个index保持为最小index之和的值 +- 对于ress,我们遍历,只要某一项的index之和等于最小index之和我们就将他的字符串以i[0]的形式append到res中去, +- return res + +### 程序变量解释 + +- ress format: [[string1, sumOfIndex1], [string2, sumOfIndex2]... ] +- index 最小sunOfIndex值 +- res 最终结果,foramt: [string1, string2,. ...] + + + + +```python +python +class Solution: + def findRestaurant(self, list1, list2): + """ + :type list1: List[str] + :type list2: List[str] + :rtype: List[str] + """ + ress = [] + index = 2000 + for i in list1: + if i in list2: + ress.append([i, list1.index(i)+list2.index(i)]) + index = min(index, list1.index(i)+list2.index(i)) + res = [] + for i in ress: + if i[1] == index: + res.append(i[0]) + return res +``` + + + +Author: Keqi Huang + +If you like it, please spread your support + +![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) diff --git "a/docs/Leetcode_Solutions/Java/647._Palindromic_Substrings \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/647._Palindromic_Substrings \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..8ee312ad5 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/647._Palindromic_Substrings \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,89 @@ +### 647. Palindromic Substrings + +题目: + + + +难度: + +Medium + + +思路 + +这道题要求给定一个字符串中的所有回文子串的个数,所以我想到了Manacher算法, +[Manacher算法](https://www.felix021.com/blog/read.php?2040) + +Manacher算法增加两个辅助变量id和mx,其中id表示最大回文子串中心的位置,mx则为id+P[id],也就是最大回文子串的边界。得到一个很重要的结论: + +- 如果mx > i,那么P[i] >= Min(P[2 * id - i], mx - i) . 为什么这样说呢,下面解释 + +下面,令j = 2*id - i,也就是说j是i关于id的对称点。 + +- 当 mx - i > P[j] 的时候,以S[j]为中心的回文子串包含在以S[id]为中心的回文子串中,由于i和j对称,以S[i]为中心的回文子串必然包含在以S[id]为中心的回文子串中,所以必有P[i] = P[j]; +![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher1.png) + +- 当 P[j] >= mx - i 的时候,以S[j]为中心的回文子串不一定完全包含于以S[id]为中心的回文子串中,但是基于对称性可知,下图中两个绿框所包围的部分是相同的,也就是说以S[i]为中心的回文子串,其向右至少会扩张到mx的位置,也就是说 P[i] >= mx - i。至于mx之后的部分是否对称,再具体匹配。 +![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher2.png) +所以P[i] >= Min(P[2 * id - i], mx - i),因为以j为中心的绘回文子串的左边界可能会比mx关于id的对称点要大,此时只能证明P[i]=P[2 * id - i] +- 此外,对于 mx <= i 的情况,因为无法对 P[i]做更多的假设,只能让P[i] = 1,然后再去匹配。 +此题还可以借鉴我leetcode第5题的解析, +[thining-in-lc-5](https://github.com/Lisanaaa/thinking_in_lc/blob/master/005._longest_palindromic_substring.md) + +这道题的基本思想是将以每一个字符为中心的回文子串个数相加,还是用一个小例子来解释 +![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher3.jpg) +其实,以‘#’为中心的回文子串就代表这个子串的长度是偶数,类似于'abba'这种 +但是其实这个字符本身也是一个回文子串,所以叠加的形式是count += (P[i]+1)/2,为什么呢,以下是解释: +- 对于每一个以字符‘#’为中心的回文子串,其P值绝对是偶数,所以```(P[i]+1)/2 = P[i]/2```,并不影响 +- 对于每一个以非字符‘#’为中心的回文子串,其P值绝对是奇数,这就保证了单个字母的回文子串(```例如'a'也算一个回文子串```)也被加起来了,因为```(P[i]+1)/2 = P[i]/2+1``` + + +```python +class Solution(object): + def countSubstrings(self, s): + """ + :type s: str + :rtype: str + """ + def preProcess(s): + if not s: + return ['^', '$'] + T = ['^'] + for c in s: + T += ['#', c] + T += ['#', '$'] + return T + T = preProcess(s) + P = [0] * len(T) + id, mx, count = 0, 0, 0 + for i in range(1,len(T) - 1): + j = 2*id - i + if mx > i: + P[i] = min(mx - i, P[j]) + else: + P[i] = 0 + while T[i+P[i]+1] == T[i-P[i]-1]: + P[i] += 1 + if (i + P[i]) > mx: + id, mx = i, i + P[i] + for i in range(len(P)): + count += (P[i]+1)/2 + return count +``` +python无敌啊!!!有没有天理啊,手动滑稽😏😏😏😏!一行解法: +```python +class Solution(object): + def countSubstrings(self, s): + """ + :type s: str + :rtype: int + """ + return sum(len(os.path.commonprefix((s[:i][::-1], s[i:]))) + + len(os.path.commonprefix((s[:i][::-1], s[i + 1:]))) + 1 + for i in range(len(s))) +``` +解释下为啥要加两次,因为回文串有以下两种形式: +- ‘abcba’ +- 'abba' + +那为啥要加那个1呢,上面解释过了,单个字符也算是一个回文子串呀,嘻嘻😁 diff --git "a/docs/Leetcode_Solutions/Java/657._Judge_Route_Circle \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/657._Judge_Route_Circle \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..12827f576 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/657._Judge_Route_Circle \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,23 @@ +### 657. Judge Route Circle +题目: + + + +难度: + +Easy + + + + +```python +class Solution(object): + def judgeCircle(self, moves): + """ + :type moves: str + :rtype: bool + """ + return moves.count('D') == moves.count('U') and moves.count('R') == moves.count('L') +``` + + diff --git "a/docs/Leetcode_Solutions/Java/665._Non-decreasing_Array \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/665._Non-decreasing_Array \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..cf05d3c9e --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/665._Non-decreasing_Array \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,48 @@ +### 665. Non-decreasing Array + +题目: + + + +难度: + +Easy + + +思路 + +从index=1的元素依次检查,只要不符合规则则让count+1,如果count>1则肯定不符合返回False +但是我们在发现nums[i]小于nums[i-1]的时候,我们就必须要对原数组作出改变了,来让它的后面index部分尽可能满足条件 +下面就是两种情况: +- 2,4,2,6 + +如果是这种情况,当index=2时,不满足条件,但是i=0的元素是小于i=2处元素的,我们需要改变的是i-1处的元素,也就是将4改变成i=2处元素即2,最终变成2,2,2,6 + +- 3,4,2,6 + +这种情况如果我们将4变成2那么仍然是不满足条件的,此时我们需要将2变成4,即将i处元素变为i-1处元素 + +在每一次不符合条件的时候我们都检查一下count,如果count大于1的话我们就返回False,否则最终就返回True + +```python +class Solution(object): + def checkPossibility(self, nums): + """ + :type nums: List[int] + :rtype: bool + """ + count = 0 + for i in range(1,len(nums)): + if nums[i] < nums[i-1]: + count += 1 + if count > 1: + return False + if i - 2 < 0 or nums[i-2] <= nums[i]: + nums[i-1] = nums[i] + else: + nums[i] = nums[i-1] + return True +``` + + + diff --git "a/docs/Leetcode_Solutions/Java/672._Bulb_Switcher_II \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/672._Bulb_Switcher_II \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..2441178f4 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/672._Bulb_Switcher_II \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,74 @@ +### 672. Bulb Switcher II + +题目: + + + +难度: + +Medium + + +思路 + +这道题又是一个数学题。找规律呀找规律。 +我们只需要考虑当 n<=2 and m < 3 的特殊情形。因为当 n >2 and m >=3, 结果肯定是 8. +The four buttons: + +- Flip all the lights. +- Flip lights with even numbers. +- Flip lights with odd numbers. +- Flip lights with (3k + 1) numbers, k = 0, 1, 2, ... + +如果我们使用了 button 1 和 2, 其效果等同于使用 button 3 。 +类似的.. + +- 1 + 2 --> 3 +- 1 + 3 --> 2 +- 2 + 3 --> 1 + +所以,只有 8 种情形。 + +***灯全亮, 操作1, 操作2, 操作3, 操作4, 操作1+4, 操作2+4, 操作3+4*** + +并且当 n>2 and m>=3 时,我们就能够获得所有的情形。 + +| m\n | 0 | 1 | 2 | 3 | 4 | + --- |----|--- |----|---|---| +| 0 | 1 | 1 | 1 | 1 | 1 | +| 1 | 1 | 2 | 3 | 4 | 4 | +| 2 | 1 | 2 | 4 | 7 | 7 | +| 3 | 1 | 2 | 3 | 8 | 8 | + +```python +class Solution(object): + def flipLights(self, n, m): + """ + :type n: int + :type m: int + :rtype: int + """ + if m * n == 0: return 1 + if n == 1: return 2 + if n == 2: return 4 - (m % 2) + if m == 1: return 4 + if m == 2: return 7 + return 8 +``` + +还有两位大佬的两行解法: +```python +class Solution(object): + def flipLights(self, n, m): + m, n = min(3, m), min(3, n) + return 1 if n * m == 0 else self.flipLights(n - 1, m) + self.flipLights( n - 1, m - 1) +``` +```python +class Solution(object): + def flipLights(self, n, m): + n = min(n, 3) + return min(1< + + +难度: + +Medium + + + +思路 + +题目说输入一个时间,format是HH:MM, 然后输出接下来最近的一个时间,且这个时间的数字必须要在输入的时间中可以找到,所以我们用```h```, ```m``` +分别代表输入时间的小时数和分钟数,然后可以计算出输入时间的总分钟数```curr```,在未来的一天之内,我们一分钟一分钟往下面试,第一个满足的就直接 +作为结果就行了. + + + + +```python +class Solution(object): + def nextClosestTime(self, time): + """ + :type time: str + :rtype: str + """ + h, m = time.split(":") +        curr = int(h) * 60 + int(m) # 这里要注意h可能会是0开头的,如输入的时间为01:22,所以需要int(h)和int(m) +        result = None + for i in xrange(curr+1, curr+1441): + t = i % 1440 + h, m = t // 60, t % 60 + result = "%02d:%02d" % (h, m) + if set(result) <= set(time): + break + return result +``` + + + + + + diff --git "a/docs/Leetcode_Solutions/Java/682._Baseball_Game \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/682._Baseball_Game \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..e775cbf8c --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/682._Baseball_Game \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,37 @@ +### 682. Baseball Game + +题目: + + + +难度: + +Easy + + +思路 + +points用来存放每一次的分数,最后求和。 + + +```python +class Solution(object): + def calPoints(self, ops): + """ + :type ops: List[str] + :rtype: int + """ + points = [] + for i in ops: + if i == 'C': + points.pop() + elif i == 'D': + points.append(2 * points[-1]) + elif i == '+': + points.append(points[-1] + points[-2]) + else: + points.append(int(i)) + return sum(points) +``` + + diff --git "a/docs/Leetcode_Solutions/Java/687._Longest_Univalue_Path \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/687._Longest_Univalue_Path \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..0b7a2eef5 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/687._Longest_Univalue_Path \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,58 @@ +### 687. Longest Univalue Path + + +题目: + + + +难度: + +Easy + + + +思路 + +这道题也只能算个```easy```题目,根据传进来的```root```,我们只要从它的左右节点不停的递归下去,只要其```value```值与```root```一样, +该方向上的```length```就加```1```,最后我们将左右方向上的```length```相加, 递归取最大值 +##### 很重要的一点就是,Note: The length of path between two nodes is represented by the number of edges between them. +- 因此是```self.res = max(self.res, left_arrow + right_arrow)```, ```return max(left_arrow, right_arrow)``` +- 而不是```self.res = max(self.res, left_arrow + right_arrow + 1)```, ```return max(left_arrow + 1, right_arrow + 1)``` + + + + + +```python +# Definition for a binary tree node. +# class TreeNode(object): +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None + +class Solution(object): + def longestUnivaluePath(self, root): + """ + :type root: TreeNode + :rtype: int + """ + self.res = 0 + def dir_length(node): + if not node: + return 0 + left_len = dir_length(node.left) # 左节点的length + right_len = dir_length(node.right) # 右节点的length + left_dir, right_dir = 0, 0 + if node.left and node.left.val == node.val: + left_dir = left_len + 1 # 当前节点的左节点方向的length + if node.right and node.right.val == node.val: + right_dir = right_len + 1 # 当前节点的右边节点方向的length + self.res = max(self.res, left_dir + right_dir) + return max(left_dir, right_dir) + dir_length(root) + return self.res +``` + + + diff --git "a/docs/Leetcode_Solutions/Java/740._delete_and_earn \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/740._delete_and_earn \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..3810c4b09 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/740._delete_and_earn \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,29 @@ +### 740. Delete and Earn + +题目: + + + +难度: + +Medium + + + + +```python +class Solution(object): + def deleteAndEarn(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + dp = [0] * 10001 + for num in nums: + dp[num] += num + for i in range(2, 10001): + dp[i] = max(dp[i]+dp[i-2], dp[i-1]) + return dp[-1] +``` + + diff --git "a/docs/Leetcode_Solutions/Java/760._Find_Anagram_Mappings \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/760._Find_Anagram_Mappings \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..fe69ce141 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/760._Find_Anagram_Mappings \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1,31 @@ +### 760. Find Anagram Mappings + +题目: + + + +难度: + +Easy + + + + + +```python +class Solution(object): + def anagramMappings(self, A, B): + """ + :type A: List[int] + :type B: List[int] + :rtype: List[int] + """ + if not A: + return [] + res = [] + for i in A: + res.append(B.index(i)) + return res +``` + + diff --git "a/docs/Leetcode_Solutions/Java/README \344\270\212\345\215\2102.49.13.md" "b/docs/Leetcode_Solutions/Java/README \344\270\212\345\215\2102.49.13.md" new file mode 100644 index 000000000..c477b8c84 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/README \344\270\212\345\215\2102.49.13.md" @@ -0,0 +1 @@ +# Leetcode solutions and summarizations! diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Binary Search \344\270\215\346\230\223\345\206\231.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Binary Search \344\270\215\346\230\223\345\206\231.md" new file mode 100644 index 000000000..bd65c3c65 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Binary Search \344\270\215\346\230\223\345\206\231.md" @@ -0,0 +1,91 @@ +### Binary Search 不易写 + + + +坊间一直有binary search不容易写对的传言,一写还真是||| + +值得注意的是这里的u位置上的元素搜索是不包括的 + +先献上递归版本伪码: + +``` +function Binary_Search(x, A, l, u) + if u < l then + No found error + else + m ← l + [ ( u - l ) / 2 ] //避免溢出 + if A[m] = x then + return m + if x < A[m] then + return Binary-Search(x, A, l, m - 1) + else + return Binary-Search(x, A, m + 1, u) +``` + + + +迭代版本伪码: + + + +``` +function Binary_Search(x, A, l, u) + while l < u do + m ← l + [ ( u - l ) / 2 ] + if A[m] = x then + return m + if x < A[m] then + u ← m - 1 + else + l ← m + 1 + return NIL + +``` + + + + + +或者这样,正确代码 + +```python +def binarySearch(nums, target): + l, r = 0, len(nums) -1 + while l <= r: + mid = l + ((r-l) >> 2) + if nums[mid] > target: + r = mid - 1 + elif nums[mid] < target: + l = mid + 1 + else: + return mid + return -1 +``` + + + + + +这样就不对 + +``` +def binarySearch(nums, target): + l, r = 0, len(nums) + while l < r: + mid = (l+r) / 2 + if nums[mid] == target: + return mid + elif nums[mid] > target: + r = mid - 1 + else: + l = mid + 1 + return -1 + +print binarySearch([1,2,3,4,5,6],1) +// → -1 +``` + + + +之所以binary Search很容易不对,是因为边界状况,所以觉得一上来应当检查边界状况 + diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Data Structure and Algorthim Review.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Data Structure and Algorthim Review.md" new file mode 100644 index 000000000..61c9c7d68 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Data Structure and Algorthim Review.md" @@ -0,0 +1,101 @@ + + +### Data Structure and Algorthim Review + + + +- [x] Binary Search Tree + + - [x] 插入 + + • 如果树为空,创建一个叶子节点,令该节点的key = k; + • 如果k小于根节点的key,将它插入到左子树中; + • 如果k大于根节点的key,将它插入到右子树中。 + + - [x] 遍历 + + • 前序: 根,左,右 + + • 中序:左,根,右 **有序** + + • 后序:左,右,根 + + - [x] 搜索 + + - look up : 是否存在 + + ​• 如果树为空,搜索失败; + ​• 如果根节点的key等于待搜索的值,搜索成功,返回根节点作为结果; + ​• 如果待搜索的值小于根节点的key,继续在左子树中递归搜索; + ​• 否则,待搜索的值大于根节点的key,继续在右子树中递归搜索。 + + - 最大元素和最小元素 + + ​ • 最右和最左 + + - 前驱(Successor)和后继(predecessor) + + ​ 给定元素x,它的后继元素y是满足y > x的最小值 + + ​ • 如果x所在的节点有一个非空的右子树,则右子树中的最小值就是答案 + + ​ • 否则我们需要向上回溯,找到最近的一个祖先,使得该祖先的左侧孩子,也为x的祖 先。 + ​ + + - [x] 删除 + + • 如果x没有子节点,或者只有一个孩子,直接将x“切下”; + + • 否则,x有两个孩子,我们用其右子树中的最小值替换掉x,然后将右子树中的这一最小值“切掉”。 + + + + + + +- [x] 递归 + - [x] 入门 + + - 回文 + - 阶乘 factorial, 慕指数 + - 分形 + - Tower of Hanoi + + - [x] 排列 Permutation + + - [x] 子集 Subsets + + - [ ] backtracking + + +- [x] dynamic programming + + - coin change + + - longest common subsequence + + - edit distance + + ​ + + + + +-[ ] majority element + + + +- [ ] 随机 + - 水塘抽样 + - 洗牌 + + +-[ ] 荷兰旗问题 + + +-[ ] quick select + + +-[ ] median of two sorted array +-[ ] regular expression + diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Dynamic Programming.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Dynamic Programming.md" new file mode 100644 index 000000000..102d032c3 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Dynamic Programming.md" @@ -0,0 +1,48 @@ +### Dynamic Programming + + + +- Fibonacci Numbers +- Shortest Path (no cycles) + + + + + + + +- subproblems + +- guessing + +- relate subproblems + +- recurse & memoize (bulid DP table) + +- solve original problem + + ​ + + + + + + +​ +​ +​ + +感觉DP有几类: + +- 容易写出递推公式的 + +- 画表更容易理解的 + + ​ + +* DP ≈ “controlled brute force” + +* DP ≈ recursion + re-use + + ​ + diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..110950bf9b2bd29f84cf9ecb7494b50cc39a4531 GIT binary patch literal 117543 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 ZIXEJ|$lM;b2)}r^xG@> 24) & 0xFF); + result[1] = (byte) ((i >> 16) & 0xFF); + result[2] = (byte) ((i >> 8) & 0xFF); + result[3] = (byte) (i & 0xFF); + return result; +} + +//byte数组转换为int类型 +public static int byteArrayToInt(byte[] bytes) { + int value = 0; + // 由高位到低位 + for (int i = 0; i < 4; i++) { + int shift = (4 - 1 - i) * 8; + value += (bytes[i] & 0x000000FF) << shift;// 往高位游 + } + return value; +} +``` + +还有一种为: + +``` +//int类型转换为byte[]数组 +public static byte[] intToByteArray(int x) { + byte[] bb = new byte[4]; + bb[3] = (byte) (x >> 24); + bb[2] = (byte) (x >> 16); + bb[1] = (byte) (x >> 8); + bb[0] = (byte) (x >> 0); + return bb; +} + +//byte数组转换为int类型 +public static int byteArrayToInt(byte[] bb) { + return (int) ((((bb[3] & 0xff) << 24) | ((bb[2] & 0xff) << 16) | ((bb[1] & 0xff) << 8) | ((bb[0] & 0xff) << 0))); +} +``` + +## int转long + +int类型转换为long类型的情况并不是大多,这里主要接收几种转换方法: + +``` +public class IntToLong { + public static void main(String[] args) { + int number = 123111; + long num1 = (long) number;//强制 + long num2 = Long.parseLong(new Integer(number).toString());//先转String再进行转换 + long num3 = Long.valueOf(number); + } +} +``` + +## int转Interger + +int类型转换为Interger类型的情况,我是基本上每怎么遇到过,在这里也上网查询一些资料找到了两种方法。 + +``` +public class IntToInterge { + public static void main(String[] args) { + int number = 123456; + Integer num1 = Integer.valueOf(number); + Integer num2 = new Integer(number); + } +} +``` + +------ + +# byte数组的转换 + +关于byte数组的转换,上面有几个都是它们只见相互转换的,所以这里就不再介绍那么多,只介绍一个byte数组转换String类型的方法,其他的类型可以通过String类型再进行转换。 + +byte数组转String类型的方法经常用的可能就是下面这种方法。 + +``` +public class ByteToString { + public static void main(String[] args) { + byte[] number = "121121".getBytes(); + String num1 = new String(number); + } +} +``` + +------ + +最后简单补充以下Java基本数据类型的一些知识: + +| 类型 | 字节数 | 类名称 | 范围 | +| ------ | ---- | -------- | ---------------------------------------- | +| int | 4字节 | Interger | -2147483648 ~ 2147483647 | +| short | 2字节 | Short | -32768 ~ 32767 | +| long | 8字节 | Long | -9223372036854775808 ~ 9223372036854775807 | +| byte | 1字节 | Byte | -128 ~ 127 | +| float | 4字节 | Float | | +| double | 8字节 | Double | | \ No newline at end of file diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/LinkedList\346\212\200\345\267\247.md" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/LinkedList\346\212\200\345\267\247.md" new file mode 100644 index 000000000..677a083a2 --- /dev/null +++ "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/LinkedList\346\212\200\345\267\247.md" @@ -0,0 +1,118 @@ +# LinkedList + +结点定义如下: + + class ListNode(object): + def __init__(self, x): + self.val = x + self.next = None + + +可以使用的技巧包括: + + +## Dummy head + +有的时候因为边界条件,需要判定是否是list的head,因为处理起来会有些不同,而创造一个dummy head则可以极大的解决一些问题。 + +``` + dummy = ListNode(-1) + dummy.next = head +``` + +## 双指针 + +- 19. Remove Nth Node From End of List + +两个指针p,q, q先走n步,然后p和q一起走,直到q走到结点,删除p.next解决。 + +理解: 先走了n步,q始终在p前方n个,这样q走到末尾,p的下一个则是距离尾端n个的,画个图还是容易理解。 + + +- 160. Intersection of Two Linked Lists + +如果两个linkedlist有intersection的话,可以看到,其实如果一开始我们就走到b2的话,那么我们就可以两个pointer一个一个的对比,到哪一个地址一样,接下来就是intersection部分。 + +就一开始把长的那条list走掉多余部分。 +还有这里保证了是无环的状况 + + + +``` +A: a1 → a2 + ↘ + c1 → c2 → c3 + ↗ +B: b1 → b2 → b3 +``` + + +## 快慢指针 + +- 141. Linked List Cycle + +用两个指针,一个每次走两步,一个每次走一步,如果慢的最终和快的相遇,那么说明有环,否则没有环,直观的理解是如果两个跑的速度不一的人进操场跑步,那么最终慢的会追上快的. + + + +## Reverse Linked List + +- 206. Reverse Linked List + +loop版本用prev, cur ,nxt 三个指针过一遍,recursion版本如下,可以再消化消化 + +``` +class Solution(object): + def reverseList(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + return self.doReverse(head, None) + + + def doReverse(self, head, newHead): + if head == None: + return newHead + nxt = head.next + head.next = newHead + return self.doReverse(nxt, head) +``` + + +## 寻找LinkedList中间项 + +依旧使用双指针,快慢指针:快指针每次走两步,慢指针每次走一步,快指针如果到头了,那么慢指针也会在中间了,这个中间可以考量,如果是奇数的话必然是中间。 + +如果是偶数则是偏前面的中间一项 + +``` +1 -> 2 -> 3 -> 4: 2 +1 -> 2 -> 3 -> 4 -> 5 -> 6 : 3 +1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 : 4 + +``` + +算法: + +``` + +def findMid(head): + if head == None or head.next == None: + return head + + slow = head + fast = head + + while fast.next and fast.next.next: + slow = slow.next + fast = fast.next.next + + return slow +``` + + + + + + diff --git "a/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Maximal Square.pdf" "b/docs/Leetcode_Solutions/Java/Summarization \344\270\212\345\215\2102.49.13/Maximal Square.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..235cd3b86547102c2de81ebaedb59cd4f3f40b63 GIT binary patch literal 185749 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

    Jv-3Cy$R|jHNNfYsgzX?J12?)}S0a46PrYe$ z;2vs=gi|9_kWd=GOKD9~4;ok_6*Qp+Wb&$-q z#vKN@_^!aQRm26wmv+&OBXJdsL+cIKTqR`+N-vR})LhipdH`Q)g^zUhtSpmipY!A= zp#77*)7d~2UOanbJ9nHXuI4bq){@9IY4M0Bkhf<9{~_aIbySy|5UbvlJZmo42VFvm zi$HYdlf$3Oh?%U&_Q?yymJB5MUCMQ62RR}8#W}i3j`&%{IE#n+!#k+eK8BPmp@;|?KsPj%K7QU;fx_7tHYU>?V{!(AF zBV?y+>XqrLnU&d)zrC2bideWNhxP7$0PWizqFLi^r5cfbGjfrQ;z)TF3`hSIyyrpW z$y>8ZBQ$>)-TXL*36ID7r=bU*4CyVTxM4p{1&I2x`OvWF4+HbDjgtrPKWJ%!u2yX&zb1Hn#BP0`jX}_?NOaOAJgRCpo8yPJaUVRav(%p5 z-sH$$6KPXShM&v-T%H9~Kv+rp$N19bigo&i3TLa03q^?BKNu@@W#I@RNpyRm@loS_ z(l~{2n?TAozUyjQeR9mw7n8sKN?6~o}b+*FH;>QD7G5^#lrjjOjF2kzq@whGX^6i={ zA&f4fI97yfrkx2{DPrFGkq-2(nmt=h@5)Rsa`|LB>T%1Oo)vZQyj6XH6?rF1<#}&4 z&7L?eMd-DF$nT3qIlV9r9UQ%pu7dQ)M)>FviHIqpoor`Fyh^c4{-VZ z2xjR%>XQ)3My;=l<1~+ArV?UXM#?{n1ZjS)2+o60HfVB|=3&y<@WpHx){9j>_*-8!cU7hTc*X=%o zd@uOk9ZO8K@;4kEWoI}l=9a*iD=W(+Y9|B;Vr721JNnw(F8h?I*-dNqeEvh+ednJC zjO1sG$zg*pjp?Qpg|r;S3v`8mgulmb!`0Fm3}j{RkB;`Sg~+hQs?fl#wbZ;$ub!d_=-|nl zH(WCuO;cN^A_cC)Pff=Xl+m8f+} zp@y(HXw}=;pcjXnkBh8`tHtl=4dGEf4V$rEI{!^O0kRsjq{MV)!>dDm$`#&EnAvLo zTLqzjD(E?R=+9rK0iAXEIEZeB@j~_YnRjm8V&>+fKl(prk^}Y6CMrq)ZMuOm1;Qh; z>mJx!zOj=Gh~%u&B^JaiS*m*Of8VHivluU?Av4tRAz;2O7w6vd+ltaf>cZlyybC-PS0L5b5gI_fP+!S-1Ey(e?+7P(BduDi zPDE5QDBuh0zhRt}G?9=aH=W*j4drSMd{Z2=^TwRdgv@0i8CWoW`a-%{AbsKDR; z;{AQ2uBHM;`@up9*=NBt&YPc#>>FPfjwHlqef;>uM&N+;9#{vUsmXPM9`t7OP5;ig zv^LcWlpA(THn8O^c&BqqhUdGyPuW*SDo1ZXqff?Lz{KY=Ew1sISrEFS;7zTXK(*NTr)MPEij)LRpWH zhR-cuMm$CGOc0NyETz=4c?izf5@L~^(CN3AiplmKJJ;o-;gY{T!O|L(*E4fE7D~&! zrjaeVYTo*wnV$J`czBv(+gs-CB>HqLUF#PuH)=f9@vtWK0wdcCzBO zwZ4HLAho3}5@FZx7gq;7r=mCLDC_Q%?CKIV2#Bs6?v@BwRlaj8?C3}nI@(ZA)a11O z@+DtzeCQ+IX3})0HEtDS)xE}vW5$qyl`z3Mr7otyN$+Lm0)XK0&A!XOn5?`xKyC0ov`kpz5>z57H}lp=v0%`I0- zAS$_n>8^dz$9{jYqayzNRC_+Y|!=hJ=o(HWy#G!u9%D$R&K$@`84umi{L6Y6q) z(&=`ZvJ%IsYEAvFhLgU*B?0$&q;L9B%yFWSaUZrxQ?`5fXLw7m&e+^z-4w-t@Ya4` z*kmSu{-$S63O2;qbUp%fqbluY1u>po$ynAV6>N^UoUgyxxd)8NE63%JEmmN@A;t!U zY@Vww?x5@BYlX5Z8YPWI)Abf1eM`c8@R_av^xslt_l5*KJVEAk;m#Gs+QbLP2O zIml6yt4S!6L{HO>hluIpp4!frD~00y#&p`7QdhT97rYEt6US%So*m%k#c;4~)^`AG zP0&VFgOd6>>1y2c`!5Qs5*#`l+q30B5p$dTNTv@vNSj z!z(>C8&#yoJ#*JOoaMS^)pGV;0s6y;{Dm>m+x& z0X(Xa)zRrJT~%fWiL1++TQTY?PDR@Y4$m51dZsrUj?l{m#9^)W1}nL?cp7KY%Q^># zCxS0|H93ECSH05YPUAbUtRParN*P(T{hVWMiQRA5z;0v1QQqK9z610Yf!%v@|Aw7G z-OmBOwO|DZ%7SiLpX}ALW{Fuv*~Uic(?8_dQrSTze}R9&lrmd%tjgaK(BOfwQKQuK z+S+&u7R~3+nGo{mQFMxf4Bo8~?vFfq?F*W~U`LeY+=B9yyj$M-zRt4I8u`;TO^Xg% z!x7sJQfIh!W_ozJ4{dS0&0y$U+82C`1pMv$Bie07-9cDrE4HXrDhd@t zb#b9i9N$;6Ji<};5D!|VMFj%v4`t#Bb@5&SPk11&rd|p7cl)tc@Lfymh46pVSCGih*vouPvi^dgWG~!A~54M;oNK_-L6s*L_Aj>EkE- z%|^&)@1v(Lg#*-RjI%*G$emu;9jh3Dfi;oo53a~tmkO(gkH_&pa50491w9`iv9eaU z2Oazg);W{MqkhBOp*g~_E=~9mPZj>4N#Mo&1lwKSiVjEfDS0`Yi{dYUoJwp| zsY_wDluYZlAG^kmGUHd{Oi&<-q8CE9kN+G!6kQ)=^e1*M1b#zeZ$lVtU@W-)irnwq z&$p4T&dTa#3U+>XT1zmRlH(bJgM-X1Wd=_49jR~THEN!WsRJHi7gBMqNM_>!xLQ?O zP}|}8Yb)g+u$o5cuUpv8d3rhT(D~LQjyKbi*RtfcPdh_j|7f+C0>WA9R3GgyXgoCx z4-5r>*;F2s4^Pj8aUCEi$rcq$k=ieoU)08(==zDNP+eO-EmM-+Y?sFPA&jFv29puG z^v;YOdz{2V9^ccAx<}y9tuNh^$^&wbTXw%1k{jzpyqP|c$cO+TJHnqc=eZ^F4;N}0 z9d@%&*jlAoO5&_+(OTF9oM<6P%W}TTP4aSYV#V*`bL!nSm1ti4E&4x`Dw8e` z+uu}Bfpm;g^cDL?x#X<8ZRL`a?=)Z)dhq3F?#pJFnAqm!Jy)^V6zKMqD2kN?G(XUw zM08+ex|NqzDU{srM_lQ76fh%olP3bCW`38fEumt z?@jG`$8&VKHml{Q$lP)e`mq`N*r|>*%i?dqOz6M7vj#R90}J^Ld$5baF=_p1NY!d~ zjdDUJ`o*pmka{HP)N>-0C=An!p-k*N(JK}xc9x3*)To`nBN&?UDZ!D8qz zUaIO}L>-rli%`ZWe4GPImcsYvU;YPJ()|x$2^P9!x>Bi|ktfFxnd8Ec&l>6*F@`IA z-er~qF*Irnl;z{yw`RkL7N9gt+M$lS-Z1+LUsB z^dl&X8;_N*aQ%lOv7C3d2CZLjwk+Bz_HeTcZPaF4wcPu37;8+qLSQ>gu~h>PiY2Fe z>s^-DyiR+ih9>$12AqrJHH)3p-?mD2v_V%h9T^N0KE2IRF$-Y*OYZMY9kBdG;jSdL zR7l|bqZ=}pxBrSdQ2WMs_SeCYzhP^uD9afr>vU2Y8;7UI1S_ayP%151OFw80Zfo-3 z8INCtb%kH~VRm|ee4nlX0ivd<$||-b<@%0TkEXUEX;|YE^a~>LakpMaj*^l=2NM@1QAvmS`1a1~=Hs!3R;eNDMaAX;&hUUcw13waaI_Aj;2WYF zE1fHrM7y&mLC23^MZg(-BiZu&Hk3cSxNI*#=xcgPoj-Y40f&fWe-w?2g2~E9C2Hjd zyVc@T!4hCL3`;?))F)KX1HI0K5Kg*_u=YebX}m|}i9phDUHaLmn`HAH8pFV`F>S@^ zz{@|=@cAW16Z_;4jfYOs;^I=b%RXxIeB`@j1D%}qiQ%xC$(=hB*p(C@{rI0Ec9 z=Vm$XR7enlThYM2j`n1lT&*L>#LskSCsLWI*QLDq`5v(KKIvapFdeB+a*|ha_D%XY zs_riO@UY$QdL7bXkjD)x+AV8Zm^ZcmdXZA-#avie;U+lq5-Ed-)R@*Y)Inbl*?zN1o(m z9Osmu|X z9Ror=ljLp?d+Wm$DHJ`)cFNlii!bN+Rqxw?GeBpYC0>1HrSbmfMd4lHiO+9cMXBM|Cwk zXPPC3Mq^GOA0W&mvtY$aCPIgmgIToeA-p36;@l(aLn-Dt6VVtOXc-P`} zG}-@^?A~Dp%sVBO$7le|@I}L(n|rW`+hLXuyqVW1BY`REkqLAFbB&Yi3wC%r$Ib=X zPS}3>hMJ06OTWHsN-MD2R{Y|rF1rOqUMn!Rt{Bjp@ix19^f3kg+dYuJOIxLixH36<$Lh)BB!L5WLY=Y^u zS!5*%mN)Xsj)g>)VrB3KS_6L-B9c*_5y09udK5;~A`Lwl(02gh9V z$EgDdSAktvFK}I2hdwn%aqr@J`7MI_+nb|jRfz3QvPgPFnYDU}R6Mq**NlR&?a<1F zxufB5l;#y9^{s-3QgyiOmC^AIjnCvT|JBwh)p*q|pwXhI6-#QU=c=gfq8gFhjP2N54Y#lM)wL3O!!3N2S1J-`*1H@Drp?iS@(}XxkN^2}DRF5@2QDh9N-Z5r z$8#8KZC0?$YuZ-SQ@UmS9WXAUlK-z|(-orSvDSVR8~Yk)GBOnZt0z)}!AbxbpDVOg zoaPVE7Bhf238CZz4ORCT_UNl38tI!)Lqsh?_^TPepA8^m!2JHZ_~c1Iio#4%BlKYm zJVd9x=i~I;)w>?p-Tlf#YJ7L4%$8R(xv7bKeb-Je^W}Pz?d*m8{|s!UjsyGBKz!}j zgQtU)2<9stA5?;wCQnS1C&}XRiyjX*BYvsVNWb@Ri*fZl_v-8Bx^7W*uA_?>0Gxn< z)VfLSFo67u3`u$=F4)J6f{rN3_GBrFoJW z1*L`jFY8nX#2bQ~Q!&zM$^Te8;)Lz1#IN!&DVEhI&sT{2yeGr3OxV1C#omVDO192` z*ef0Z?&k{MS3=dOAG(DPZB$l^Uw;s|0RST zU>|laX+#IKascdDM`H_4Cnq0{u~gI7pkbH!EPmI@m(qY%TKC~EB>{+Gb*9B{kG$%d zdW)mc+hv~p`K7n3C@6PK5Me}9ge5is&{MelqYzj|DC2x`@&lf7RBS7@Y^|sAFLf7e za!G&r!?UGzqPWV}Le~OvHg|NzT5V#ESC&H#4mRBWptL5J3Stc6s&eyD zcG2d*PB0b!hgovm!G>@kSg-7k?HzIudJHCIyShSm&aV{moa(*q3`~sPRfMo^2}(@O zSYf9N-Aiqngk5XXC881m$gVmGT&L{(cs37Ur|9>MF(JTMNc4IG?t1!DOq_;cYjbsN zV^fIf3>{S~_q*BK2d{6*AA9puFswlKIaWa&2r=xRD6j}&>RugAU|m6J-D1h!uDLP& zw-=p{$ChuDWkr zo<0j1pdFtCfQ{pFDGXp$8Rz8yKu1oxxcG#i(t{f^LhYf3=>wLJti=)+nDyVD*tr9O zgJ-}84OgcsPz-SvGsNe*e=cIi680UfNhe2M9dM#epU{70_9;*~J(Pw>@^Ch5^aJP_+B?3VJwe(JYJoBUd$d) z+j;w2b=wm_?#mbwI0%kYRza6`ZE7MP#Z$eRPVnUY`CZoVQ@{Odt+3SoJG)#xsB7(f zgr0{eU2IXbcbf}&mNRMT=Mm3_CHIgd-?b1^x-Av~H{19>Ub+glP7x{@u2%=R0g#gN z?s}5hU8&A?A%qPf5Ce%=()UPKGLG2t)rjai?U($a?0)I(o0qH4G55?Ge!cYLoM9399w8|DU;S=KkR6)|2>)nwH*iFj#l z35S=}4y&CC7-2Mwjcw4jUsHNL2Y8uA4o3e^6RA`95^dE2-0&~bzVC3V2-QBEAFS>Z zq7JnjPZ1T0XQFrk?2TPPpb?6U`!;iG>~L$@NT`AM2-ow+Xi+pFfbTQjJQ?7UncFl2 zqh5{NMVr}OyTS^TSBc>|TGvz4^Gxc{z22(7Hb(8QZLm+W#0Y5U=6K7oIWG2i{LGL2miQ?#M?q@+ za1M&k{*GJjkyPr41h&lnrPL%Zm$O~<+b{) zxl|;PsBrxND?d^nyP59=^Krkfb$Mb*?O7s=P^>~VN}DM_Zf^sp-yO^g=o;vXNd`EF zoJ_Akm?YayS}}j}RZo$1o~+wzUjsUGwa}}h zIBg1aCKAU}o*pnc{-=q0wz~u@d3c%qBODlj?QAP;4<+K4giizL6aHJmN-%b;4;8+o z*hU`3CdAZcyBud}xdk##X6K8&*OR`>zs_h4`?jMVoah8DE_Kj#c6}LP=$bvPnywXbSHiX*y0a zBWf#}xfU2gW@R?q?0;rhnyhHCj7m~khtkJxwD6uk>j2VBUTS6*ch>1(xZPO?J|mjgx;6>!NLNlng|Y6~hwTu#8ggo`znxqJ&kkZdJ3uZQL z??Rq8z7u=Jyiis7a~a)(PX_F`mP5}0L#AM+!m%i6QKC$LO>s~L3}&zKyfL;vv&d$y zFbOVALm%ug&;WW%0(62&;#eZNZ(rgcg`r6K%SzA3Q67i}+zi=FZpH87P5VEJal!V# zm0?JjlmNV|;~JR@5mY-_;R6iIRIYWE6z1_2+{>tRnme}}eHNZj;_{_qu(aZ}DJVdRjOWI-^;@d0pmumtJt zgpV0lfM2<5o=umtI3DHddR54oa`th>(v^N=HJ&H>_W6XV&R~Iy{8lDR!rWm`#z5rB z;@b`H4%S)2qEYu}*adZc_8;jt3mG_7J83AXQpb=$j1VWP$}geSbp;xo>SvY1fRimi z=fsukcpTdY=X z&NqFqm(gW?n{FxGRI!Z0)PFfzGq-AQ8@GsE)FRhsNnZab9?Kw4s(Fvb=4S9vK&p$7 zz>dX%CAJMQZAgd7y^Z6_725hwlaF@4k|>p$ zT3>LU^=5ning(R90bh^%6H6AIb?jO-eJO=X86>xKf)+FIo_V zxg%(PC!!e6@r#WG6aAby5=U)S=gQ?;B8d_t_bzc_m%^|~e{9APCM?khn!3ei$RIyz zIKBRxAJOA`iB@+X@@S+OE`C%_gg&+I1bsIeDB1=PQp6oW5%N!*$>0&Kpv_HI&)MKZ zstYtRxwl3NUS$}+lvZ0dv$ z{73P<6wv>glm|!5tVs;O(Wq7ZUQir}4&k*rSIK9L^*MeFO?UsHs-q}(Bx|}Bh3+s7 z2B!E}(13~DgK14#@!r()=fl+fm}_)P!;Mea-pE^9G3h$cD_FZ$nM3J<=b^PK3GGz& zgu4WK`+I5ju)|u0&j^gwg4XwM3-Tk8N_g539~1k>Scyob@&L_pvjLdsvsKtSrRN%Aa8(A!2+xv-s^B-cXJ z{h6PzxMLUM48M78B6;0%a4S3$q8YH+;SNFzKgE?nYIc_w{NX)E1q%LQ4;vCjn^Kpa zAA`p{LN2B)sFL(BzNnA4f`>bi^=W%3>|qbDUuY{IXa3W#HbU_?rU%!P|7Oqo+Rh%0 z1c+_chpUN?q<(#qWf;4+hKUS6u}R3 z7{+_Q!5w2Pqpe}fvHzoI(`KkA+zlOac@15@4Aj$b^oH0J{Gu z32maa0+p9JWw2@e7F!j&ad~jPtN*x>am{TyD`+!a;qCPV$&1`}egH!!DCHww;Ev#g zgf$eq-O_?2HJ>rO#&mkxE$5M5t_t&)Ra0Lo=!4*;g5f}HME?pB0Id~o3-(+Vg5aiK zu7iaLGxslQf~5#toy!clO}{j`R$&t*u(z4rSnbz(v%icu!d@|!CMH3J-1U?Wk@Yj( zGJcqjF3b{JL(;ATb`kwjdAt`HsBp8|C`zM#dg;p>BZ?-8%T09&x61RY{w#?`$e|-K zRxQO2D3#TO?%9L9uvYb)MiKX;b4}k)Qd>=^LiMfkN`eGph7CA;1wC|}t9aKq$r6; z!O0^X42NJ=1PAsoOv!StM4xYA`NorZ4-cEc?UX^VqxSRHzU!{#CMKdTsyhdPzd6pP zh|c6G2zxNS|87q^7r}cvUdbK=Hu&0byy3>{5~m!}Nt%CsSxxC&{HpH;6?I zT%Lws9l;B`ox{Xy$X@!=y5!B&%?4qr)en1Dx%guCkKpJcd=!A(;atq#Ey;AWV*mDB zT=r3)nj6@3*m?8Cn)SxR@F+Hlp&f>g2D+7bU=SG%tuZqEf>6cYx1MGlmTAv+@~F2L z(UFQ;qdr*i(5xETF*R}LeG}bmSIwX73*N|!CT(1N0>(#`(I}qa+k}KJvINZVL_qfE zfqy}L!>rDL7rVK~M|s*ew>_76_HFu^z7jbB-r>tum9;47vh(2&N{?SzXuVNqq)c_DZ6PGD#mGgpQ_Ua(fSIlz5QsALX1w=qfHE`twa%f= zF^|SOQb)$C`hag#%mc!Q0Nm8t#pz}tW`CbE`6>Lx!jHY3w;4EMD&o`o#4hKBk=d2otO}RSYDo^* zr4MT?;bckdOw{3w@s!-j?)w~ERsGy0&f`omM*X;6HdO(AyEQN)c>={m)-)@%CtNlz z3gUSROQ`KyUom}reaSQ!FvTZNH^7{Us{VMF>8s|Q`4SkfJu9tiC4S$ z8Z3qIBz(XKF!bw9I*1y7cUwzB&;RJ{_crJOW5Ca4?;eH*T5pX?cJOIL1I%9+ zi4U6kxda{UcAUxwxaibLoAUJxOn@oJRiuU4-OGkz6m&w?-OHD}9Rk;u2aLzi4ZWNe zZaD%|<;(Z6ZLRriqgPn?9;@VG4Ap&Hh4`=A|B;J>)cS>jB}p$EvCuyI(nUa15+*0E zKUFTOU{>mg9(20?rtFe#BR}K1-2L0m;Bf++=uD!)6-AvuBf$(@-ybif)YZJ73%Dh8 zPvgfZL)GEU} zo+Y5AFlhsEW_{)ato@y@2~5S|`{ksMV(A5gE<@BG(=Sy$a95d~7`6v}0dUN_-A!;_ z!c-5GMN{sZ|3KeN@zX-Ls&w&`4slBX+u2o1eX)-;K1zhTH8V7HwWHrGHqI0GHE zIfc22WwsUaROoE7lg3=*t;an|GaRQcm78`jzVcH$cknEf27H6iVL}L48EE5;JNh95 z3@WY*)#DV)Za0Qp5*`rzy}b--HLLKKTN#Mev|P=sta{n(h?2%nQR^SAKYm)@=nT=m zl9%UU^|CvzJa_kW1H}ghEg>Ef>@h5n=%5AP+q(}6q%^-&>wma9BpjeA*?D>(wT_yV zTXO|QXtAkF%E=hhdY{xus2OKL7qy^G*5d%wj%b3~Y@1iC=Tdtep$F%x2e^(>uEAMn z7nj|Jyx6ZXDB6n0IgcGGS3R)w922cv)d`C&|AiPTMF~3uk05IkdOGNJJh44%ckuav zxpsMW+t!?UQie_q57@YW7pAlCJCyKTaf%zcY!bvklp%Sb*2cOUHSLS%3oELeJ;fuw zB!*V;MWsLyPm;8o)$3Vw5`W%y)WSdrH(0tev^Sej9$|OTL}=~*9>^4>~R95=B()h<>5;PANV~7HNdP*0($#JA9dX{ zj+TrqoM2mk)K#3O4Y1md@?3O!GJd$=ipmytF(diYZ$O+%V@gqTMV(2Gt|OdDUxvnp z1bV-r2rJwbuJ{GqqjN|XL*>T?J) zS|4JY!_PQ;xxF4D=8#YIa*g9$9@v)5C~Qp^Z)E%_jIUg8?EbBQ?{j+MSp`#K zx+!!IeBlcV37>cgkTo-)^lO zIsH`t)A7hi(yJt`k}m3s@llk*mBJiD;SV)~QhYbiudNSOp0(E{1Yi23y{;}w^Y z+e+nhwS_Ks_MRbV#uX34q4m(-%5cZ4IjmVprem~X0JOfrLuWsiX{jPA&Q&9R8_OetJ)P3KR)$9Q`g$;!V z`ET}z?c-Y=FjP1&Z{x}H_gWk18dYFn*lp+kEwh&L>QfKRXzROnTPJPyjZadZ$5OXm z;o|?|N$rsjFVY`cH2kBm^g|ZiM;#3EL~g-`kuO+cGFbNAxgyClh$|}U%ky z_iA+E&M;1Exy=$4n!jv%;0Gnfx2U!{=5Mba6l0d>daTAtGB5u6sjJmCM=y!Xi1xkg zRJEiMD|5~izzrx$6$!fcp0*_frnEl9OUR+xE#&E6 znCbZ!i_Xi;vpk)cFGCpu4gR&_8|g^uSpP`Tmt#ZEo@5W4sSx_ zDWAKgd!EJ7kB?=EjrVw@EuCd*-`rIl>a2)aHQV>ZqA)X2ivK7szo-m!#Td^z>Qyz> zdCM!Br;F(&^MM~QGY1q*y|&s?JOu}R$4(~`^@3-Yl;=@d`xh3B zYi|#x_c*_QAM5p=R+yrK1)oW{y($+0UAK1BmLtfHRGx4b$lM_%}J%rbNyLc&f!^m4Ht(*G#@G^f$t%{2!H!4ucD zG=1Xg&)-@vLpc@Q;k`(PRtKOvVNzbSx0r;Nm*3J(*8Hw6wBXqweRs^G4hz|vBbt&} z2@vet9w5SrZMSDhdIHG#^j_XOLvL=b4~}rN#}@n2ShFd7)LU+*EZ>&l)AM?pOzv~M zF_}vk29ykrm+f~U)Mu}E?0mw{n~hyYeu$a#heuy}J|LEAscon^vjpXYtf%@9lRMD~ z{rpzhES^pn0GSuYA=mS{OHHK{j^&R zF^Uf{Q2Jf40JEric}m~cwFv|Pt(o=KB^w?qTy+fDlLE}QT2>DK)`2eM8Y?9)+Jc1_ zw?7gH6wr-BHt$x#D->m}czc;-2ofk*DbgbF05%`G$YoH0;J0%+W%i(05A%-!F`goP!Br2cPJ5;OF4F$`E zEi$RO%y9|;<+_yEBpB4U%t-lUJ@hv8Rq)`FJkB~Un0ia4UD>d|<_RDfIxtVN)opSA zFpnG=agu6ESbAdi@bP^}L&x6Ax%To{>5>-0dUGnHdu35-?UVR}o<>2)w9}p4ZDb@^ zIR+yada}$r510YpQ_ma3%|j*9-b7U^NG4JWanf@?$+@zATKsKUCWGHSi07;_A91sa z&_Q$~SzwnxeEmdl97iwhaC&O!HB_>{E^k$+e%ku|=g+&M;`&vfxBgJPA38xi3O3LvYU^!m{&ij`EC}OfyCGUuz z4I+<(cf1GI8zF^FL^!ODG1+W4|Hd~_rB(gk=;zJf31 z_<5N$sY)^Eif(6HO`I~x9(60z&)gbfmG~lCs0GPJ*b>Eqf3#n}$Ud!P-N_)=xt4sb zfm7e89~Su}uOTnf%FG;SjpiNwRj+>MbdQ_OzDqhLF|mm~5!GwmiK^1y7ssirRdis2 zGzO;ZhL}@eaA}Zhh_;TwUU?GT*rl)h3l;OsR?SW4e1IrcJUm#J;G|8Msvu7zx$_7z z7<)OUr9M?yliU;AX`7gklH9yBY8ACkK)Owe!43>SDM|DfWn}r6OPYb78h%T#>fm1> z*4p^x2M0U*ydSjJ-!2{pkmpV?{YB-;GPhgWGHbB#i}Q}i+>e>V_JQotwh!GXq++~< z4!Vdvg#k1B0gQmLoCxXGMM2r4vbQvZ$vPMFq-ieu1l7HgDQ4t{=@u5I;KdF~gf-@l zR5$wmd1Cvt>`F}oi;E>=1KX7;FOL1?17DLYJ59wE4KetSR&WL6R=?+34)*gy=iM1wLrfQT5%~JlU z_Y@gO4$%lJ8ylF=nbN@a}&IUyI#m^meqPh$My2hC zJ95`~xA^&QIZGs{9@Txwc@PD`bxYro9~rdksMPu}V0 zz7W9rt@%X;tJuA4?s$K)OAL}SO&5;d!Lta<4oix!@`&ZFFlO=R+$}P1(fATqQ3vL@ z$Rx889%A7A%W=(-2{L+Bg)f$_H!Gieuh-=}n0R?J9_eOR493){T%zz@Q<@_LcH6OZ zLFYS6v8WK4h?G44v7V&I3%2*nK2{57kxJgMyUbpV&-~0t6}^pgf}cr3L4Z^0E7U&< zBiUk20BM(GCiwlMcn0_m5kHo=A1kek)!rv=0!8h%Q!366z^2#sCA}fMZk*`poa(Y} zhHt%zA6Qw-!xkV2SjD`cA+ESW%qD8>}g7yCmWIlxaen@%`mPgLc z0RgtTcdoiiQW@5IbpQc+c_hAzrc)Mbe_ocoWfnqF&+@CJeg#C-rk)tb!>lL$z0C8o zjLg(1Ztq#Ldhjfmk06C{6NJ+ep!ePF4*CQVJv_MCG)D_OkMG^lKBS1-Z171qGYAH# zYR@wNQK;?80ojO^oy%zZo{riqv`>HT3UN_$Tm4sRRl4B#QK?i&@b<{_Yco!A7EMzn zhtCB2CHDQWUR@ouB%VS9oB%28T7|F@jLqxZ@eJz&ifj#O)%UbH+MhK+dJ9vk`GC9* z{M@uCj%6>=v$9)xpg8;b#@#=c+(chP?2eFVt~GdM$4du3L%@B2VP8YB$eVptwKPI(eY!#7#788hU#+^tTf2_**zA_2#ckz!Gk1DPIT0H} zK82DBLnk)n-~7oTl2R3p?gL8$OT8LY~@};iGS`V)rrmD zmGn99?fb>L@EUFaJ8V14ZDeDy`%4Z&*i%O zG3+A?2Mo_X;SR(A-CQL2VpAG^%hnm&URi&it*v}}&rP+CD|l_Q#Y$~#j%x+^uKfl{ zwV5!AgBgYOwTs}g_tz)QzR6{YMoZcWRFyuLT!{5!WWALSa1+Tt9cdc?v;>aO!&;#f zYuwH~LTNsyqxGVvt*cVGb=0J-I6QgRPs~jS47m1Tyu-L0m5xCOQ~x+`oh z{XP)xXviK3`yrWR_@-Cz^AkG80t@o!`C*i%HSrbc9?m-Iq{-Vp&bnvYQ=njlF1OCN ziZjoWIy~{qm64`Fv9Lj z@Nw_GO6tKif7+D6Lt~;j;ucn}OO72OMaaeW7=-n_eJ?27P@VlM?MJ--bG|5Vkfes? zr>sj|gTTAy{14dz>@4|c`j=tDly8ju3Y=-e=Y_Kz68SG zw2Nu7<(Vy!7Qu{_NFZ}L5*jdqnV_iFay`ss|MaoKyj{QOheGeD?40Livo4~lx?LRS zMV|jC1dskvG%x>XzxIzJ)Eha}Zv2npY3A6)CEg{bZyHy{OKx?z?DGz+)lQBHb;Lgke-X(+YHM@sJlTR42P1bXgU&_GDqQ=|TbFCN_8m$|P@G9h zZw@8lofAh}-)XDN%{hnustPfNpN5gX@=4VKxzShcU_mNX0$>;YeXSKBba@n@4X_L( zgmYf?e`(|6f3j$V9^o#pDBslkRN7x~gGSWn6=hb~Z>`Fym!vjAAC5)uqKf3aQu)4v z)?&?iT(Qmc&O^K3yl5NueM~Gn)!&l1>^KQVE-wyxGt~?2vXZ4A#594$P$13K7@`J& zgZ}HqYT;qcGYPeo%(iGk^r3lO0DMwN!Z!oD#J0TeSJ{C8nr)GO0M2mq{YP;w0|V9> z-+56SOhy3l6ltw<@da?UK;~cKrTdz=runYy0&VWNGW>@mFQi z9tW=)s(S)N>}{nbRV`Hd%a&ZGx||<}N&#lJA)4Y?6?_5E8$lx8dfQ#{FFE*Q(q3OH z_?Yeb*0Zrxuz8~A&&vuWo{cUokZ|ZxFp9fl?`qLMimjNNX6Pxh@$%jput|1N7XnZ1 zyui;}JG9*kN&V!xzvzS*ggv%$MZ9hyHN!QoPWwFfLv+jhUEB>*^OsQ=o0cT zR1E}(`$5nF&qXXz8#o9Zkur$E1L+2RvFS59PsTlFXX_82+19hxvYrbZ&dc=(ici(C zM0N;j$`lQiH1uQ}EI`rSEd_y+yefWc*~J?iuUskr3bJP$o1pBJzC1i^iE?0tiy+IXv)t5fBU`Y$=pKz1$HlnTw6Pc?o^3#f-sYw~bX0jMS+ zK5x(|8BD4^ovJRhVyQ zJetC1`0;0KKS9%hhi58@5gdz+BoQ5F!IEiST#F_XEX8c*pCQa6Fh_{kzIpYX2?`qr*cqWD- zUog>&`~{GACI9D*3|&e6+rOV%fy29tCiRMoI8jnNk8;xVtoy`)(>+9V0$zg|!9+cR z*DEx>prZ$$b_1Kw97#L4g7;l359+`m8T|eFGX%yW5Y|OKCEM1Sn!9c@h&KTq)z?>- znR6o>D`SCsD@fsQpK`nE#h25;XedJa_gB~x(&s%HhZGL8FK>oU;$Yi{(NHcRDb-cC z4#(1aN2_+1Z}=VTS{d6fmS`0MltUcP8U*sm^M zar@}T`y9++Z5-$`$6M2uDNnVKm2oZy4Eyor*yR=4=vLh?rtWoWBGEsWEXD1VTT-67 zYO66vjr`EpqnPQjqutlQJ{!RI<0Sf8vORRM?fI*OJ)tI|c$Z7#!&gRU+K^kwQV*lG z_}1uiBIZ-Ozy)9{UwKUjTY}xuUUwPIkqBv9eE$LRiSx;OuKDlR21c`{lVdhx(h?=N z_PkK^fG83Y#s#8LbkOK^1VtR%O?z*7RGjLK&0Fkj$_x8{{keWL_x;Ngex}Z>Kfq-Y z>OZ&ahNkTef;`HusB}l%oiLM1vNJSSZULmkHJ40HUoQ7R=FL{|k=QXqY{G|qC2q3t zi_|JNc&_-TeJ`Itk5CSqLG74L4j$&NPf534-+oA@!}wT@2aDFXfs%_+tPpf^SbY$x z)sc>0S^wc_p3&p#O}4tWYb9eyMGjw^KuvTZ_VOSM*+)J|0s6j{*uGQU#Bi# zRg{~H!B-Jt{BXLiQwWW>9rei-5 z8`)vmNo-eV1&}SE@0dR|-SKiWScs4kwqtK#c=X4&+HIR86nC zZzKkZzM21lt z?z2VgVR0&!HIwU8c{I*<=Qp)m*(G4N246Sc@j5Zv*Y{!xLArq=AUv7@Ux&XDXbtN! zrUTfnY5Jy>InPOb8B_^}CxbZ&Em$ZNTiI3Hgrj+nbZ(sXk*hIr zhq=B=yZU*`dzVkK+GHan*KD{EzdC8QNY^$tAs3Nx`X{=b-`~2A_rv8~o5@%3>q1X> zWQ7d*s2ZeUYlrb2M*&Exj@^{MZ1oeWATHrf0>F#1Jn~Dn{epT9eTn|3VYt>n0*=GV`R^$2$ zVc2tgV6pe74+mDT0HN9I(p-ljbU(5%ZSB==GJa)4cc(mqiI9KL39S``c5FU6fI{1_$Xq{r< z#L3zaZI`T+y9R9#Z1}bVFiDC!51EG=tOyCET`%tbaW7+z-J9K_j^nvgAMv*`m*lll z8DZ5yE33(}=4T9|cB{9V{!6oY>!#h@XS`(MYdxbIXRpn)hB&aUd!-lw82%$+6(G^{ zR>{``w6OU*$|9r>N|F;vhE-E?#LZLC^+4n!B=@Zb+5*3DO&x>%{Jg)G zn|Mu>>T8YwVcW!?l${oVRu#%GsU^Js>pF@F4S1$$MZQYrEkR1aJ7rxz9DXv&>vR*; zEFcSg)$(rr`SF5J<(rETghM%@a)qs{!okoV&0OSFq$O5RbCIJM{m8;zf^IX#eD1D! zCkIX1elj-UAvO*bL8iBRyt5?TQg81rcekM`6(sVe#oYN#=_TE(8*`6Cz9c^WOS%>$ zmayW{z~9U>a?e`dbLIopjL^m`mioanNi1nZ$Ha-p;){4Q3@cl*o{i*RD6z zPZd-()+YKc^lpRsy%$`4`HZMeg zJt{ecV9Q}@Ciqk=H-!ynny2Zd?H?KF@tTA8w|YsPlJx47@lv~T^Hi&HQNhv(foKq| z{-0eke`}a!?R&~*FM0({BSVn9wRC>V4ad`;FF*}xozoLnTmAe3R*_fjZx}DiV!F2r zqgVYC*$4P4s9gEd?YS2y2McKrwjyOtg)hQ2A7UJ=S98i&%~)fGgt6^;c=W5k{3rpbX((|Ji*ardKBWDtn zMqk%zlWxXiat7*lpw+H>r{CN>-8}tee{{~Lyr^(z@9~a(&jD9OjA()SZ3I_l%yG*G z1mjW!1V!e0j_X>rS6gk$98JMkC*3C2j@&btlQ@u&nQVPcUW8K0eW?rUo=H2$*C2-Y zd7bORI~x_$D5P%Z4fMb1vu&iMIH|D5A58eb5*P`heMQD;_Sl*5x>5b%(<(G}a z>L+ux>TLdeXPrYOvCbo(-lOXy-yw8xu6x!PWF)#jWo3-gQQs497#Ck$v{kLMv2gPm zdjvA&M8M|PUzPE;m9?QtB#OFIlqziX2X`f_yZ8dJH4<%eW801nrX zW=`EYk_`fbM*{ifuySCE{Gtgb7ggsjyGhd!{S)S2CWGd@W~P}`@FIpWFbZui&CbjW zYrF{i1=;IaP4UpmGzS<@RN|$mu9BS_2X7!)(}XjXA>`ie006bsd4K?(nxEd0?11CT z6iJSn+8yk0fyRUBE;`6+V91LBC&nCL(OUQ5SuIcJH^DIRu@GRpM@9`P?2JLg;Hd zW{(HJ(o>rD*kAz;gic;Sa%c0~Oulei(HB{56(X`Nk3;PgDDP-hYQU!)(m-M=C>E9_`liVagabEZ@1h0zVVYF7bH(z}- zj=9*$RXi@So-xu%O3W!xD1{Eqa7guMUs6SI`Qu{pok%=^5c7=?*wfBRfI9_vK83Bp z{wA1b4BlQ03SG=&8{n;!hK_>daPITt88~+j;0loWrO5yZQ#_1R-*~_5D&O_(Yn;k_ zekOcK66O0>_`AWgM<@NNl|_(O&`7~sIOfci-kb0xApfM6*VZbUk z(yMsG_gzv;)gVP-(f%P(Z79DSpIfrzb{+z1opS!(s3JeKNO$i=H4A80{vMd)N4U)5 z&oI0SE+H1-1mtzWxeL~8CpJ)~$8uLE4J}y98QMv=p9(x`cvzd{l?-JH9y>qWJ6)9| znXGo8TlAtqQOP^WLtb7Lb3?x3hL=8C{!s7tJ9M9=e8X-2%Dew+5)=qirdL0^X^}(yc~bZ?^&vU7+8Z;~QueOI>DrcC;DCZTNMU z_g=%bd_VJQwS18Wsb5jI8I%8;&Eu7BG!w0T6KonrM3hVN zSgeuzPn$~?)*nr_5Pxx%eI3<)QDEL3IqYy3*ZK7pC*H?yZ|mZd#goJ)Zuz)o8zmJy zXIoiQ;}*L57vOOOJ?uwT)wWAaZ`|JDA~Q7yelS}~GJn2v5HuT$@`6HwCs1`S-hQG=Y;AoxgG_1;Z^$~ya4h7)*cuc-;2O?gBBTrK8 zmXP$#JNNuF)9}g{C?MH+cm*7T`9~3Dr|Br(`infn(bzsx?CQqxYf$(d-8{DfotX3& zc~?!WRPIHz%-DNPcU;k`EJ~_Aa@F03w_D{I+0Jz4YGU$`hHwJ7z_nOu2l@RkDdSHl za`6}BWYyCVM!fltVyKrqfy8sy0v`GewFUEkI!?cd!$1gtEb-$dVvVS8L!u;iPa?F4 zcZaS{*2Y8z8aM}dD)oF-j(U2wA;i)W+BP3eA`o^lhjVZ{f|p+aHoq$)AyU)uE4PPY zo87QcQnzA~8hg^Q@Z->?o?C;jSiPV+y)cUYA}Fg4&MAAlS=+vwY72iEcoYn} z%q<_SbKWVfPI}p|5Qy>vqMZbDfu(!j&V(~9BRi8z^JfYcR=@f{f<+yv(+EDt%m02uXve?+?JOHOrAo2`t;qr$4rX zg}*18WuW_38@=NtQxpJMxwK~p{Uur%R5JvIJOk>EAi%zW0MZTdXa4s1c7h3xYJeB| z4h&H6U--xWG5=VW_P}cBzBi3v3o81C%!QpodOzMC(CTvu9z`AjKad5vM+?k3 z^Q_wHYl>AyPH)OvL1f8-2p+=2;$Sq0UGo|em|z4^8BLZs*H-zncTp$lxQq;DQ;N@` ziYq4)X#KBsb+C93dBdq+OrynPkNF}arsa7R%SyrrLA{obT*v7N5`B(RVR+w*DosnA z%D{Qhj=z3?vu^FJm&*7;A9-!01@RH2#?gFH{0OmBHXVI*ln(~4Ovnr7ew83bHs z*)Z?vHwM@t%4;HG;l4jg%!Wm>*7%9M%`Q+6?b&dj*BqL4%L z1b-)oZEVVA+6$)r=f}2Aa#}IFOwyhbnP`RQ+rxZs-IrzK`_>y(T~bX;@t1z&_LfPo z7wIzLHlV8p)k6C_n0ABNrw+Z_m^UW?C$e{TQqEqotGqc}syqXQ{|O@E8sbk5=aTWc zg!Br8X;phIb~&CCy)*DI0&TcId{1G}=+Ya8>W`E{?-C;}Hxw*p+%pAu&ve+LuvVEB z2Vrj(S~uTwa8|`6L*VnP{Q~4;cmC&pD@T@RXI2Knz@o-$hpYs0pVF?3MlaU`TN?-G zec|*@w?9XQvyt|IqdwE-8Lr}^by&IQ6eZ*e(!GO=q>g>A*VFTMGfeP{^n+yf zhxzxk9=y3rJzVQb0S3&;JITKwtcW`RnqY5Cc#0EN;v1tRSd7ZS758P;#FLJWp0i10 zRi$Wf*j|47ZGn=8aM}VnGYI;75$$v~U>U4zyNkL69GHC-e0rE+(=PwDn_nwR#Y+;~HbwfD`1 zxH5yT%FjM>^8+cY+>kMO14fLtaLfuA6+x)%p z^fi6?4#w~h4YS5A*v;~}>oMWYpd@G&q!YzJvYJ5XVn9*Y`kK5K=-(rD!Reya=<_MD3{l@2Oj>9g3`N^lW^R5&Ta=LQh5fjGY&Jx6ctoguqJ(b zJwo^3_5i>2&kn5V@|h_4#y^Ux65#!4SPnaoV|_8bBr@(J$Fh_pbNav7d+(s8!gpOX zH0ez`NRg^^ktQ9bBLdQEr1#!?liooBPKnNJMGu$i!FyTtnfUxP#wyf4Xgh@gbN5g})Kmp#(o}hCAR-;U@sqS- z(|qcKbM&%P{aFKdw*U7>e4PQg?sOpLhK?xwL!mfG2iIczP81kG9mqRv#W0?oSi!e; z(%v;p2m!dls!hcZPd7p8an2U=S}Z0N=2lxv1GW9tGf44Jje-7|_fRK*joRD97w2Q5%o4=P#L)FZ_nds+IvbpYD5fD~} z4SqGg*s;O&uN&e(_r3X>9itRqQo$o7I9)==gA#>~9+Jw^lrN@AhMcjhh{od#uhen7 z@ECmq!M| z$)hO>;vOcX^Ey-%ae~Yf?1Hfp9$6omcO=Tpz7n7`@|B?`%6jscn-`o1nvTnGC#0Na*axTY?>G$BXt$#@?T}H6MvdVk^5-u71b;w4Pw5Xx z^OVoIwcxwC~Y9gsLRF7TNu?;9&rwDT{f?ru|nO$X`Fjf3(P#uzogib-U~@^E4CZ%almKx3^o9W8h5kMDz~ZNk>3U}2f^tn zP1bY$Lo<7tc#{?qMTF8iSugM0tA_O$y+KV4_4Hs?pj(4{YJ{_L9L~Rm5}L4X8eFP4 zyCis3wKu=iKR$f#HwsXRcQ!`2G|+9UW@yKABlJ)^GPm=sX8iNqQn+`Ad9fA*qLzDu z46gg_>HNDs-*V3NGX}bo$NmP0di}?kHC0;{8u+=Q4ZcyAtx;eP_nY8^1vMr1(QHGA z0*R4VB?@r+oIB}NVTn9O9NtGCFYnT8i7kW{l#>6G9fNYbB;`)!Ea0mBZ zuQQXEF9QVK9K(~tXCuxPG3-FF^{Ez^W8=>`cR0?ukwQO01Pp}XkIGYu8i#7txCno# zy;`rN?QEH0S0??)L-}CPTaWb9>V9QNL~1`Tigg$NcnWAiSb`vKs#?h^%L1k z(&F|Ot+icPD}^@sT{l4NHqjnPh55t{jAMlCc9RfC|~Ni7V%O^*}9DnFn#0yN7W zSO-xBya|7)G1d@GuyMLNP3j-fa)r(%hw@;?YUD3IAU}eM0#`I|GcYn}r8&$)RWB#B*cgteO>jeh>pzch-%;pcQW%1<}18P3#SSUff=1t!9TFx zdFp#hY?7r}(X3+Q;o(a&??aUJls}1slWcbZ6r6q%B6~GLp7ghE;!x5t;Zhcuf70Y< z5S!EoSJ>jcEA3`NFs*XZkW$^mj9?uNlzSAu8bK(d2V0kZi{>H8f*y3`QHsjD2M%|P z%$39XnoTI~mUC%`MxB;)oW%p&J0%Qg>D#hUu@6)AirZ#Y7B8XSh`%Bk2<$Vk(7gTD z*>jo?HQ2c#C0-X0j?-jeMBpYVZ zB05SU)JT#0CNhdtfz@Pm-cyI9ceXh#7GjI9eAZX6g2v!F&` z!e;NbaeXppyGT)KeUCn2{nx8)_a{xnx82+;7*>E*%wd$AaAOY9=pMaAwrQWh7!UrvRRGZnd<+hvT!Cc zgn(zq-_?~^Vut0YvxmWLorxj71bv8mSElvfFKt8%IIKfXlSJiH19?vP;3crG;fTZ% z96=d;*pw`p*%^&##fb|=%I6v{SAB7*?d+tRy#);AKez}<1oHF>j(-cqTvX3H889FR z?FbBC)e^Jj_(T$lUFY0rgfBqu$gu~`z*w4K0`8hqU?NmB->q`~{EiUsH@m20EKX4>>EROC3Fjr;c1WS$ zV%CoiZ0hKz4WE-I3>S4a>d_wlWOd2cAV(=Px!g9`Dem@u&sHJm_(>DV?ME5eohRrg z+v%*Ri0387+PFu{zf-?`YGvTM5rMrMihO~kKzK~14a%f$thCoZp1X*Tl_NxR!UY?9 zfUk+>s&f3D#G%qfJIn8l8&2xG@Q3hZlU)a=26F;6pRK-koIF z`Q=04(qeSKtzt&zXA+l#tvGOp_8=rVoHKq9L%!$^HqE7b3*9i)B4!@}ZXnNI^}WrB zB@dziqaCu{bQ=T)x)i-ho_jA>nk((wCCS$%wo8W7V@rrHni9bzqM8vTE*QooekgGP z*ZEpb;y}b%2F&=e-N!LcHTgIn(!qDUzt4#Lnn=Fxx1{90S z-I*CyO6RTSuE;)%`k!5L%;}>TuHwU;FokC}f=%ojn)gL&9KL86Br*Zw$1ySH0moB2 zTf_j^r^EjfEFxAs?>A3$-?NGi*nCr2*2c3S!siqBUVKrIbiH?BjgO@egEU4Rz^jk} ze{FhU=Uf}6&EWJq6@a7X>V4(f+mY!cC-EpG&k3L)7=Fl>ZP-s82r)-ooh)M>Ewv}7 z-d!<(Ut}G0uDlW$U&XFf=1d@5ozHPtUll%DM1K6aAlyG*6{-zJ>6LV9N6T@m{zV}u zw>e5>llLMkS2NmJVt77}g>Zx{rLRjJ?vMAJ4VSEqt7X346j{1^q_Z0Ccq|}?;8@7Z z2pP33xUmbBD;VFxy6hHRl80_GJgi?63A+rDX)o}ae$M?I3vJv~0mBz;ilp`avcI}8VTj$(weOQfBi$q4Q6*%5|RZWvpLwwMduWq-TtH{iPK!)L=3`Gi{W zriU%}cLoL^U`Ghn!DkHNRSC-9Gf-gN5I6CVpOz0R7QQo;lCWm!pVH4v_Ue1$1?G*V zV{0NFBlj0%$hnS}r7UY;KUZG5_^b|qhq8QG(o1C8i<4^ss~ zo-GKqf0eON_rPD@Ik)|&w!}28j0f=_P0-7py^tZ#^^pH@A1RM~ShCOcVB(j0YQtUG zGxgiNaGalvA2J(I5krPh`|{Em=C2K-y=txXnT4q*AFm@X?*F>pUda!i9Y^ZIuTp&h zSTNcrnptnedrjHF&h|iTy`x8yqmJ14ysx);i*0a>`a9zdH$+rMbLT70w$VxDj(h@` z!Obp45h3`_gEqO2Dd1z=xAG+FOi-#xP8(C58(t(^X2(SJhxL#&Lp3-g2|@wzME5`X z3t_`Txd37Yy;gODG*b}{{Y4G|4)>>2CdtNl=-EIf3~hxZVQx1*N6@9|_-*iOMuFYc zh@sKtorP1ol#IO%8OMon10fMw=7GWO{Oc~{M-;3I?a%`Eg^;@my7$plx-1`vH;D>) zkdBqIx1`b2>NE~XE>^%Ekq^vJY@q0#CO=&c6|1zcfF9D0W}RSW za6}XN-=DtGqPO+@9`g~Qbz9hHxdpfyD>wNuMA?*JeC3gZ7stNK6zS4}O8h-oAt=0K z46S+F7%G7<+CEF{12{KS7EePpYn&v!z-HRcbE+TAu1Va#e=LLvXW|pKXMJsdMU`~+ zw`4~!ybD>)R)=dX7C&`?x;NSF(R}-HTXuMW6E)_aMIXk?d>wYWYuFz@9)S}IzL94o z)81uG-K1NV@!R#F)Djy#`7xcxg(j+;9Lu1U76!%vNTU5?I`qkHZ*$Swm5wFtfV40d zeE7u@Pfgf&$fePV?A8{|U z)Z&JEt)}a&Nn5-UMQP|0Z~9IKqo}bE1C`4KMP&goxz_+eUdk%puc=Yi^Gpa(!d&eZ z!X)(phaLwSkOKx-r4Qv~5oQ|shPmvI>Gi&31kG3Q#eSaovMaZAEzuah2#iJw0sEho z9PQkd4@bFZ&23KFi+|VJ7Y!hK#1h1i6ExG{tCJiMuHuuWdi;%MU!GX*VW8eF-D_(^ zR}7280(Y*l{tWAzn;l7yJf4)5y|WYf8+Eh`D(prrVu%n%epkGtG-9OdmfjTlSw6hl z_WFBb$=(D;P};gJmWRi>QZ#2~ISCa%F5jA$22?7`M*xcLzQ+je-9fj;^>x$Q1LX15 z9r{ zEbjOa8cz|42k7py5{WfJvzi~9RKRf6*bETF?Uuy%lcB8;1cF79L`)ZW=$FANnp%7YPl_Gi5e*< ztxX#~U~14X9w#HQ9fwe&y^hmN7T^t8{(LXfPmpuwMq_h(mu3Ys5Y8i!h!7h1ZNB0G zYa(<0{98t1J$Cd{!}<%{=k@AOad}OG@%e*+UE+Z3K~Zhbyq05v+f~qI1eR;G#Z6o= zS;+bK6l25)*`C(?pv~1W_^WOzejO{-jZ2>o>`p!V9QrZLi^mesg`hWb?rD@`4V&ktH`>1f3mHt|V zsn@@0mJ!{6A_OEkgi3k+OlW>eZuWDb2F@o6=|pOy0q&XVOfN9K zQ8blY-Bk7xLw`UFC~^&;ogjoiC@Z7`hs4X6*m!x=9&{O=n+$WpM`aQ@b=oLE58e(8 zTt|-Wf*bsT*W*VBXs z`1e*0Po!?~w5x$KV^k?zepLHf9vriUBmnw<$|qq6Fi!ZQu=5`f8AcKsD<$mHHwdU$;Cx z_I$)T8B97|jsucFTA=3O3rP3bJ}vnEu4BP4%VS{XDu2(!b-$=7Gx{|j=cDdd1lHX{ z8S8I~#_CZVW6<#t@cOs{A_tl6Req448zb#RY0)^9D0-RXt6n6c5!6b^tT+hO|5aFY zZQ67GxPN>(qP=Sl31MRT3G3KH2Ws%(BvL_zf1C_8)- zD0It_1h#GC$MgYmDtDX!{__xz$68*pJu+DUiCy#;l@}l!cvBNVNZ|czjFkj!29uS< z321PlL+X6r4$7lFW3(*>Z4C7j-WEqVm&Aeb<)|DX#27)rasWyc7;r+nFz99F8DJlf zY2wd8dHxYs7@zHuUhK`iLjGibZM_W$K+=;4-3JUSD!_<^;iHSJHn=xgBPnpTzPWya zGfULgo5|Mh8JUs4s$^4+%%ke?F)5+w`|#Wb_?h|AX)!1-IOVtK*C5d^5Se806U2{J zg{PpM{_)#pIm#nehHzrbpO%bZX_NU=_Qhk^HbX^}1*5P!y?vVMI%XMb;7KDL@X=i! zgB7#ZF*|Nw_hV%Y>=;L@ow~&71lY~rV=Kf-Zny~)l}>g_MLO4@rS5BnX~;L{C0-tF z-9Z%${C*3`(}Z`H+05-PS_L|UN$m#3(#v1@Q$<|`;N1i9O+Xye@xFyB1DPe=c0$vK zg$A*7(uAhUF1M@#uB_jh2|3;Cdu4BbVOBo4oI+x@=-NF}ACJQ42oAS^=?)Q)!u6mo~6Cr)5o4w~gu$;(p^dWq53)HUp zmG$ME%zd}2Ek`3^3#j?fdHs|?Z~W6~^LKYt@1K)~5h~M6f8X3o#0%v@OvI{HgXSouIRTVIUpOCaR`pHZ55k0+o#>D?gYDJP)*y`++a|DcoQPtt)0R^SK@RS_(7s;) zZaNiywgc2ZC<4JS^MIc5#LE-z!-uZn6a4mL-(VgcQ(k;n6vkzn-f3&D{(B$j+Jl}N z_I7WCf0cU>fg3)YACOXJ5F{$gWA;foqG!g#$B(^c+*+S#2Vz?i2`29ggO>>B(Nso?&X4>dcp8 z>I~|}dHP>bTbn;NVIT6OSl9Mnq{9MEcn}guxAx3^xbHGw?W)=H<0H_UXM0KoiIRMt z28loVn$@R$$d7w>Kg*E-V-7W?fv=h3QF?WUn%{F*?b2Dh6;>rhzNBFdvI>K;O15_9%PfMlzQnf zA#aMFLlwX*j4?~W-~rzl%tHtj>ch;~WKn@zZ}P0_^T*Ew!aJ4?T(dM6tKDf3RVQ1p z-c*}y()|Qcbn+SD*4kmS$nB4ZJXs?VJ*~O&rz>lI@hs?ud`aFdab1{M6e&ES~fQkVPoSP zScRa9Ml}x4M%Epr2zUu*eTz(n2h%e(@LOxSOY*4IDN*S+#Q{z@d%x%H+dir~bU2(Y zc^jd`#5BA~3t)95w0_AQPTS`mg_El!BzuO%Ng35*hUxORMoJh_zjh^(tZf(NrYaqI z&7N#IxhMOqeAr8p;8;p?DIHWf@fF$ol-}Lv2CssRk0iQrBlhE6FDLkM>Ph`5GR8RB zn$0h!=SnI=)Bk{Q_prioot-6dM(ASxfY{7ddV#6CY79{*Cj!XP)5RwE#gyZoe9?6B z5kCJuz0mVuEogA}NmKM6kc|*DV0(OsHCAGi4uS0AE~%cW+xS-D;^ZYMJVDLd@b{$; z0;dD3Q#iLLz0JoD(o_4X&|;`~8Hr6v_)=Q8mjjb3NuFnY10z)yb#aW$$^f{zYA`*P zMHa;+-o2|$R*=&@Wh0(u&fOz$mH3J<7^)oLzFzuK*;kT-cb9GZ z*X+uVuH$t?)eyLKJnr%=W{c@P1dge!I-+~5_}JttKb`RB>ZG}LXLZ~$HA(2CB7Ot) zMxm)9pN08N_O5?km19I(Ra(0R`#1h$S0ENxUmvE2W-8MZ)Urp-87P2)jiw@6jgF7t zChNeG48cEZLP)lg*`76`z_aohH|-su-PMl<8m~5I*Zi#Q+PA4M zBM!7q!hY$2cdSUG`yFm88sr@kd{4-MoVT4r2^p-EeH*=LnA3MqslSO!fu7Hx31q9D zHfw46!1t>OS>7E#AP;aUv8EKuEZ8lE;#5Gty2vCF7E5a`iyY_7IuuS&2{Fi-@a5_} z1R#TZ|F1b|!x5;;Cd@fH&?6ksgqL%cIKI2_%9n_a_!AzOM=}Ht zpuiwPGijDk7^@=9QXO92h%PU8`cHTVDZC}+sz6M~$coIhkvSRLHw+dk z-tRDQiY|(pFc3(?V!L}MxDaseNZs4~4oGxXVBTo4d~f?A+G0mDraweHh&^q!>+K|? zQfim_L;gP?K{@>kF{BptB28~8^fdCg{Jp?p)PbR6S)|;fWuP3|L>ah%Z0tg5V4b>HPM@#nv`1qm4T?8^00icGIlf-qz_dh6rqM$QmqgCwzm$5@K4Y{!Cs(g8 z>sW~=sHMJ+=8X8ieEubqYiewYN}9I~k4%yCq2y1#eUCMOR3{r50+;;}*DcVopD0!k zBXEqY%)fun#F$;hPldNu^Ir9JQ9K(C*icu$;>60#ES6gLrEpVzIQ!rHl^g&PbncI` zNG|zJ-Go%duB&5a9WO?ORa#Or%Hk{r10IoQjbx~}960lqb9Yi1@fsVOIQff1?Td)a zOijizhVPQr-1Ca8t;JUWfr$3P?>mLxUq%z|Fw+fr58r94Ha1^3)%5(5sVX}6M%7-~ zA4`3PDA>rx96&Iz1wMxLXR>_SEixr#($2N(GO6OcpR@E%FEZ%9F@`$llmx-Lri~1j zZ@U_v5VbHg3xQBNcaeHko14)(rft+eDwis!R@%>DeJo)E);20YQSJNz4a+Akd|MC1 z9}(}_=p;&)T5sVN%gCtsPFBHqk>umn+ni)L3(%)$0*j!)VuvUgmU{r4r!!QjXM@>h z>xaL;y~)*8_dUDE+r`@ZrcEVn_{y#&R%W-#6nJm@^l0HwJQUagM!3n8YQ3Y{v)Fil zLfzeVm%x~hT8St*<8kyVF3{VaGnoF5h5m=m8{i`<*eDbk?&KzczI4p_hA==6$A*Z5 zO5y@{l&obxgYp*uQ~Z@q0WkEGB!z~+&JubKwft%VO}H)O#ItW1=?blWoVUbqKZ@f? ztyN`Xya;~qVb%DrA~Q_^ZEA(0{|elAka@u`$6ELP?`DQu7mXy)UzYfX3{P>gKRsx(&&o1)O4})JPg^q z!@imVZ}InSk^GJ&o3Q*nEKlv+orc_8_oBgjApJ5maSulVwxH1>G< zQejbjj8UBl->}-XT0#f<3t9?8>>K9(L300>=$@KMV}29vEaX6J5f$|)HFN;~#(3t) z=qI2v^;c`^e{((9bP9GavvGSm&y-C$$zWpy4O7|nGEyMIt{%7tdg%BM=l$1#|HqXP zsfcUKX!-!VvNATUIF$zY;-5!aj5FBygR`i~oWD`);2HDRH&o_^xCHKG`ShqL5lyT5 zv)Pt3{QctBbS9{^8^u7Ek>LL10J!0id3)SBOmzK34s)M*v^w)OIeRA0o3AXyc5#F^ zb@O=uOOwg&4LMWb%x=|aucPl4b>QMKb+GSULgkz{M75c{jRu9U6$fPm)u$*R=5wYY zTKt(Zr2y@a-QP9&$0edRukZLn=jSjkWrpIhvRo3V!O6kF3e?#WE$wJjrcz2B1{$an z{nxAi{a=P%t!-^0OllmFU)Hy*V>iZ816sLN=Eq?^l4w~1 zF+kG1;SI5i9g*2kA@4tLiN^Y$cJkL&{(aTBRjry#@OS3UDf}v$7h$jQIUFI=UTy$B zjr#A~iVANi&6=}MF{Ow!pqQ87LfswuyiZ!y7xDQ@J_A zy!4~+@mIQyAPz&j-**XFW5NGvDi4M~ICTQ*nTk%-0V228hGJw}hB(|!6a<6c8G*w- zH%e?+AgxD2wDXH8ELzDp3C_4a%lY$oSg4xC(^z_cZ$Vu3+Hw`jSdr%Y5%u9Z58~ zH7}nT&@`ikj^TCzcjQc|^4CEA6`ARNC6S;MeOxy2?9usbxwqU@=(Zv?_Yrc4E0N0{XM9fI$+c<|EY8dctF4tV#jvoRIbf%Emal@YY7P+FxEY~VzXWP z{m(s1wBqld2N!F&AoL=>RHv3IseVFz6XFu0mbf*Bca)w%vn@a*e#6$ol;OM$5e5HqL} zu#YMaz`&>YmviS7Irn{25^ATzjH4!gFHQaz5A|gum|HCiQ7q3g`|9rvMt3sLp~lJ4=SpN|`Ln}QEh51$AtQvH8=cFQ>*z?%22mOVGr$v2!hjO_k^d^6P0 zytmZ+WSlPJx&tXMqG*M!3>&X55&n8I1(0rsc=rT_lVMgK1k04M(M zJU_c-5un8Zxo}zWGXHN9HQngvx~qW4kBS8jBi29j|7SA0Uo%O-{LVvo{E$!J%$UgY zTuSwOY-S@18t0Rq3ANJMhYD9s1q;Y+I9F9($WA&Qs%to3bULA@2$R#g6mZXOjnf)m zeu%#0`AQ2q2sHs~iteXwU%6}$*YeQ$)SI^cd|_M1{$ro(34xm1TZSo+HXBGCgx*IG z1EX9Wd5M4uR;G+1eCFwVJKrb4vlHEK&X&Fiv$w{*6!GpqEEUESX+BAEcPObNhNFV`S^fO#XGQ+f%opQ_Pqd*X+vH?U{TxddPvQzopex+uEzmf}jP>pG{uXal z>xe!djjUda*e}On>F|9dfF#=8q8;64)_lH%X5Nvm+;X#Pgob6Fs>&!m6XwB*Tvy+B z_W~=TvMpNSUGaX}RL&YFP8FszLBc6_e3*L}=pS%muj)mr?SBdn2(^dPo%kVgR}>{M zB(tKangC-~aBR+HV_End)%X&YwP(G5%ebE&v>%2VF-Ef>2CbrfnYB3@$=7Ua3Tbm0 zUE#!A>+vvlRD{yf1+%otO4H@f%3@~0u{pa>Ne?~*5>JjMX$E%khjO+lhTSQ}&+)>|P->HWkaB%ZPZ_Q4>W~CaNAUoF$96YjWbiy% z3n*{Ms1@e41AxhjiQ)ZiJ2Q8wV>Fw)vi1;2 zcY%9O(Eu)zfejA_f}L1hHJPE@Yfye)8!iWk2;_lZL zkrh&nw6Nf%%n_`7Be+e7!`1w_i(YKzC%BVm$Sq`qg&F=v$2m9nETM^I_?XVHj`ZuB zqaPW9yG|lWI|{mao|5j{N$2uwFX_?BH!A3GL|SXVf0I>RV*$>@mkenA%A?o#&3w2v zX%hz~TkT`?Js2x7<^Hcez7n3!T~M(WI7%0bl=T|7($Y)4e)bN!zp*KY zih_~H$uV>zB2q8uFTRSbfIeUIpN1cMy`Pfqlr+G-JSJ?)JCSz>$EmnzHuwx%a?koQ zT`9#F_b>Pxi(^vvIMe)#-`BQ`OVWIYbanuZnVD2Dfedlk0o)nUw*XeQ3gOAK3-V1X zeQC47TXPTTEuXMb8u%6Ba>k5OH3V>M@T1|oPS8*7xvfpeWaiqV$f?``TS+_F1pJN% z3x--T+5Pbw;sLq&u@#K5uP40Ryp#D~jtyq1ZMYj6-lI_b%u!tjFvzwE#Q-8WSKIwj z+a(EBcbdu*VYeG)R^NlBXH$36bLby1M`C|EZO&?Iapc>17~uha{Y-=Lq%nSnuR)wC z#v{aswzz>bQJ{n5JgE21dAI?IaoRVm8-EBVhT3>t{ul=#?Txdy>8vNgY$?wHph{!T z8=RD7C$huHn=a1QsbKasyA3>p%bmf^Ei0$tqg5{H_Im1l-QU`5A3wh1)%SXXiYZ+Z zoc}3(r)m^}6UqSZMYWCR0c=R^-+l};3cZsZskqCLh|j;ua18p9aBpS*Y81u30Q?=Y zc6z>st?5x0=x)IFDu%1DRbp?WB=|xoU08VsvaYv19(}p=t3AZbELE93`)&RY+;j50 zQt5{BqhsFNe8?7x_+4>gDP~=s#KW(blyx+i8?ybe!(rVaq+vDLMZInII+v?Ty^pp$zghV zfoPZN$4|Yf6^674t;~lqZMoi&c0Lo>J>VEfdsA%qBUIegkbf|38|<6)*y3hEnCYU~ zJAvW)klDIU&*^SlvOb6W>jI<#+&?w!MlsY6@#(ThyV|Lkt+%}`GwwN`SAg#V&5X*c z1d%6Ws!v@mUXN1dI6U~E^s=;B0?(QdbUDao8$#qqt=IZA*+XwXJqg@?HCz(g&z?M} z_pCZFZ{)lYU>@-mN%BxIcZ|^MGad7dRq$!93!#P5 zT>p+HUiud({?%$goo`t?m)2=`(ws8Q7w4e;k*x$ID={FB!@202s%@HhdUxydyj%Z@ zCvlyy4a<+~I~!ERge)D`E$}I1PU{@R@hq`epdWsgnjpjDbtrLb`XcTt6NFu%I= z`ZZ%m*P0-qLcOtScmK2Am|``#oa^m4d#As> z7`#tgu!WNc_|+KL{F;_b(Py`D7qU-6Ef57G{Tc<=GODug-=x2@Qn$-?l#O|88?}NX zi$~#-tH}3_RV|eEwn7FEF?6IqcR?@Ip6a7K*t_5-sYLgnd%X|O0qKz5=mu_ z$*|apxn} z>@hIqt2#6b9ltG-i*?LaZgunWhTrlN)FC)+4}=R@o0Tnz|1Tta@e`~)qP%A zd+ymUfA)d9OgFWthg2d=yRW(|X{2p0odq)qCJujyepUhugX;G#7rjr~WV-V)(Cxl) zJU=d%E&q7-FCc-iy==I{h{*V90fxqS(t)}3 zKFyowp*pR%6>=OVas@B}f=rkIx7DwHCU&ImLM~PwYf$v|v9i#dhKK*f<2OcHGqa2j zs+S!tI_v6K6;xabXR{!T5w=?~0KH>6hSix7GRE2x;ojNd=LY(?WZRm#tyXGBe0PT4 z<6S{f1#*VwMgYt)d_x-kmGZ!&N(<)jF;^kLLOsL}89k0VZ+(p$j7NM(>Zakuo$$te z#s;Me4}did-twM~!-|V;OYCYt=iLP;Yqh*NUwt$r<%2MVk&y;Bg!_e0(n$e8yRK$(Q3bB3yj~eNF*GKlKend+$Wx*sspv}riri7+B)BL0vuhE}0-%Duvg`FY@ z*%llYFGyW17z;FNMO}nCMZt^!4H^Pk(A3h^3@j-NuL0(l>q()?q7 zlfS#^n7c5_ya+du@lQka^w|j-I-X0!j&txN-QWyqSE|D-7`2GRleI$le4Nv#>hFl1 z58GyEe8kVbY|4}O5V{r@0*GE$+yIIQP4=d83{%8}6uj#;x<2CKss7|fO=-hSK3eg{ z9W69_8mj2vQ5qOyP%yNzu;%=9dem0a%6(6~SY2i|nex?BTDBJaAI#1!>FYk*Xw%#` zxyYW;>DXFLJP2~fgtBtb%d>Wef!iKG80Tixz`BBRnoP!KJ14bc{58Z`kN3{aim>-2p~n}*eO9yAq)x@U~{i#D9JfX*iN?8{-wi-u2y9@bCZ{eHLWaW7C0 zHWPP>w%FBDkrmQt1x<*)I}9{1V6gX>;jQK@j_x<;y6ur;*jv|G3Vpm2#xvZNmPp&- z_ra}MdK$;Wgdypi09sL^fk=F+7RrA<$wjDre<+G8>N=|j$W8cq8 zkspd`oPPHgxz!y6P<}J9RLXuP>dN?pJ@Xk~9T`zGTg(BN<1nJLB=SW|L?w!K2*Zi^ zB4z%8uizV%_KjAV$n7?#U}ekd36U!Ah>u0U@dA8zy!Z}^(gnW0^O&D8wQ5~p*O8lw zy0hqAHkoweIp`QfbG|intBs7j%?N!Gw9Om>E8G-?k2Y*v2|M@jmsXsAAG8lN;PjT9 znWkuZo&%asq1n>$4rcWaeIA$RvFB} zclj2M#`}rTPH_2gd7_D(E!=n3lwYiRJ3lHik5I+p-^Jr6Gh#BnOR)O{m)xqpqJHW* zACJkbuMnkaLwbVfk=u(kb2av!SZ;-F3VOb15iAbbAh8BzwV9cjwJPoAd5Cj*T91F8 z8%ySXWoCp>sOU$BgW>yQGth_~@l21M^mtZc(G&UM zu3DBcEwC=3D4gx5AoXymtry{@de93N>)vm`+2?r0OC97e}>9`;%ABi3Iel{my7W592( z$WD7H2(dns4#?$fpJO&ziSl&5c1G>+72$uS04hGJRq4%lU(CYt6>j8enQrrcLDpS{ z#aSMs#^F>$J+;@lQjIkM9^UUbLdnH4GQFkTpQn#Ol*$&4*_yQki5<&Z(;g8GRF`q3 zkd|U&wF^p)Jxb#>O;Ydpc6*%eez%kme1Scg1W#Et zoO>xLMhrJET%Z7#0)^ACMnJ-$seiJ=zz5wViw#pc|H4%Of|O z!qD=*)W>-w9|^o-T@jX#Z+HPBnKSZ{alm zb|?;noq$Y@GJ3zhfYYIEqTZNL84mQ#^i%%bYWlxF|FiA(f7jyw%v$_6@pYsB8RFC! zK}GEkwB+7f0c|7vKMVh7>fYC?Kn?WSu6Cj+Yn+TGd}Ej=Nrt>;yw+shT-f+jgT{ts z@BTA)B@Qo8q$0rbPvj53gH1U3T=iB)oj!{^OlE^D?rzap;53 z>&@?Fb*u%FVpl~pWi@s#cXvY9Z@2<+Mj<5Oc#f8&h|zeYdy9j>t|oo~^}14*h+2sZ z|4;9Fa?TfDnx_Q&0u~~X*e;z)Y_90#;r<-Ak?`>Z%h@9WaGoS( zN}5W9N_DA$v-!YoWf~PMKI*ui5iJY9isBcxnd2|(ve%8`tnJR#uIsj!+v~SP#Q@@B zTf^xoT@V&ItX1gI7Cd7h_xE0mk7VcLR+}sM=i_Q7BB{c-4F%61s_SoFra%Lj5)mIt z5YGUn?zEPwgWnND$=dk9?6YG6*z(X67_fasCbPvWIpWsW=wH+*UlhiN5K>zVRRla) zFj*!YROnKG`!{q`cCuhEA79Dh%hQw=od3bzdq*|ZMf;*42m%7qJ5fOCpme0fLKTsw zfV7D8EYC3#vVJ1x#wPMuDO0iBtk9E!b_XU_LT_i=u`r*r~p)^&Oxm^>=ZtezyAnW3SIA5 z(^VQ$+7B^XkI!c^8OLLII@X0+&`FvUV0IKYG-K(v4THX7g>H=a8`g5MD>y0ItHB@U zQl^pj3Ntd$*RPhO4(-L-iJl=_85XOQmqg(7Ub3=>Y5||>e-uyHr*wUN8S-pEL|EqZ z;l=1cXHaKZ!qiy?`2xxKUrgYGkOao?Nl=_~eHNq9x0h!qsI$8mW;qw zr=b7rQfG_OMsadqOh)b?AE*#oNhtCuo!v0dlG@{^_ijF?kfVl7-sZv zHE+Gy4YHq0@|j`^TF*!MssIq)MzP9FL#YvO(JPCbgd!-|03KK2Ss>!tXjfGb{{3^7 zsAouDJGX$*_)#?~L4xNtqySiTHECfc!)QllK9clA07SU^cQ-Z)iw!HCYwZAMuObv3 zZ^#58T5$pd$b0rjI$m@|i|7Q%dGb|a>hUw8_M$YO?x{}8Qs^9wm(I)%=jO`Q%;K~M zFw85RQ-O$1dA12Z)#`)ew?tVSglDUO9av|x^vrt6w0Q$Q=es-;j%lvsoa>IJz5F8m zUBz`N72%%=5^WV+Lg1U>!go*2!$*0k;q>*g6u0p|wc2uIcf#)BOcM5B&pu^%-oVty zNxfU7p^jkqxH7q*$%Ws2yTr`6X~#bD3S(bn)#c({>8E9UIaw|=kIBg2y6$0ru=#nm z6{G30C3s3Wh`5Jis$JfZ-{uS#CtPgAdi)w5Sf8nzWCF3MyMVHv%=c)H-SlQiC)IBLV@ zzXD`nl7Q&j0za9DJZyKFIDrqo^O+EyyL_r*4`B9N48#kwsFRh2`yZ+9cTr`Wyy4(B zg9Ms9;+ZnEIY7tU1U753tWe)0=J;?9BigOyr4i5ceaS_8`Vz+j`+idQrO?4gdzJ@?QpCBSYBU4nLmGB1E6AG*-hL{cAot%}39!?5HT%~}@Mw%O zsKGgtU?(jf9PQPr{zJ|#WH`BzdSE|9n>2P3d*#NE)vBfx3{31;l*Q7>VuhEkMR6tB zk1LFny62eLNY^cKxiPb$xixLVs4m^^f90pSR+#g#r#~DL4)|y>1H?x()~w@I+fdXy zd{059KYK$C>lWw1oNfP7X0^)~mjn^ZSFhqDeg%D1x0rwcgleE{*2(mAD7cV=--H z#k4ygXWoTyrC0U(V;*E4&2jMW4h9QECWw{u{6e3a!Zgl`$RaTF(MfH*XSftGcTcevmxswTU&0&4|!8>#&U;>!i$=@wfjVA0cg&6odzUeWh0yKU)SN_Ff*^Ck5i$b z42+=II3G5o?XeS}U#P0yi53MrGfyLMK3!<6GMR0No9KTEz5|frQh)2tNM8l~Q!0he zX3f+QO1gN$0>^KRw%9{Ah34emHLe7vR(1Ib1by6$6=ycco)tHsY-b&!cF;RV9IA&s z=IVvdJoqtldhK*Ezv_Ecaz!9h5i6Dp)NMBC^ZE#rr&)gz&0ZwZ%vgj2WONaWF3BV= zB(Vr+nDv}~@rL>1lmr9JcbX*)U@`kqObm`zbWo9@2mLz=Ifc|p~m6Pg~JrWZLJlmP=IDO&Ub zGT1|1dMGB{vKfdWox#N9_Ej~n^~Vo?-S0c;43N5!bBul|D05cm(1Kr&Quo0ZXi(j$ zYcQ}*e&`VttaHPM^1^~kT(;Nl$1l{lpy%|zs}su13@lXx+lCUt*}ewP3tHZ>f*a&Tq97LnA*lnzTI!!uEKltAQ%*6Sv?BC zp@9V1WJPgBwSmyPZ=@TuBw5p5>B)5OEINvb@_-+XXp8GN2GRWu;!Hy@K)aTZ7+IiA zD*&(pk`|~Bt-)Mwa zZ(Q61ZL&b+yPIbpM2_2(%o_LksASF7eabp-(_2!LPN~k;6DF$dwj=m*A90Sz-18Sj z16K@*uM{Sky7Z{*xFFes6T#G?S$^S@rM(Hee=9?F*hfky-Pz|mpr8h@BXcC2HJlk* zwEPl%N!SfHDO=@OJ8ot9xSo=2jz{zcM!3%DTfz*4b`9f@`sG9E*2Y95YpmId5ta&A zR$xAa+(mSv`i;`C#(Vgz5?|l)!S%bK>E(0-XY*;{3Y3;tCyjc*ip$Stu@8RDdc~>f zXg5$~fdV0>WeJjqzEFL+kuVfl>_BZH>S@vN-EX+XkuvEM#Ue-0`B-XL+390osw68C zuY7Pvb0{!?&TTYH{rH@y7FyT#W!!t^t-Z08k|e)a%KnpdgY!R=Qimal;17zs3>OTg`e#8F>9{m&4T;q29jcI%OdY&e)n+qzc+X&WU~Eyw+vtVfLL;Ra|(8Yz@qdM zUTE2~Mwu14%Zut9FXK z$-Zy(@U__fba!%k*RJ@_!LVTMt7>ZR_W?+c@jtS`xBS{DTwUf z%8~ylz-;_KXQTafvi^*#6RWr$2h$Ga%rBkNaVl7LrsH>Q(-+;RDpzOnSg8Qb3>}BG zO+5V+dU|TDzrv#X!N@`AacxGVvLB9zI_nn2$|Rr_bDnY>Sua2fD2aFebo+J*I$)b3 z8Ho-_XN{x%!YtRI@z7!d&4S{AT0n@(l_Ukjo7@3uB?CSl=X#Z_>r4<=Z~{3>^!;Jl zUfew*tK%_qhZ?5XHS94~azNEIG-SjvMQ=*(=Jo#1pB5uksh?^40ceOztvn^fvHQee z_{SdRxT83`<PK1*!1$AMYM{m!yXi5`RSt}(k!?DP5B z3p_;(3gS2Jwmgl$L-=YexsK*@2iLWbC*jO8fyt6xZn%Ka>fT&xx!HV;oo^Q5_W6k+ zFFM~U?WlZ(Ja@%HzQon#TrW8?^tVs+B~C14XbUMFx<w{d)|so;`$e_X*i_v!38isaTwzXf?AmU_K;J}DLCb0UGzqC@0c z;;x?=P*n^wGtKur9K1;t@4bsCOrfI($4BNlQqWy~*zCPYE2q(rKm?l;^G`jXYPU0% zMH5=tmIm7Bzu)i=DVa6|AHU}Os;oEjEtSW~CTj-GeOiCC(1jG-0I`wSilGNxa$IBe zaatev_;63|wR+Rsg3ih*(ecnyCzwWACEr{3(1y_=$v;3WRpAQ6fkkw*x~R`G}sFY-!GRk#fgPXK#**qUxlE{jH!z*jSSl4lzlZ~A}L z;;QK!qBax0|2S>-yxOh5DBvY##lI8Z{QjMQhfG&2pRHq#4LNB+9kaIxMluaCOf3kop}{I)g`juXj{`=@`g;o zOVsUH-~oHcrtm&2P$%jG@8iXddG_=WhZo9`p#PN`p{mKO~}ysi=EKj?w}4UGrI z1Gtm7c(Iui&a`P1_E!=gtDeT*YsCNw(x(x zA;Rw^{!7c^OBisC}jiTuxz6w(&&feu{CUZT1IMy01@rH z_cSE4I!sL)HgtN26xK>KyavGCXk5Fx3seZ6y#h+zsHyRD>;pHbFEy!9NicC|QR*Z4 z30xR7)?zUr$0uG>g9y=T#fP1BcK8OqYwZo?%--F5oF7FQ)y}Qbi`N@SzBa5{wAU=z z6Rt`!ZY6r)t!;=!ORhWh;+~fq3Z@L3s#f*aQm%LR_UlRfq6XdDA@f7i_j)1B>asY- zJ0dYZZAL4Rt0_`(qXr*X%^%L{V;L^V>0_Q3Sa_tYyJ*A4PGw>41ZE8Af(Q8u;c8}8 z((ecL{-rt%FFF;Bdl+JTZp`jpyPJ1Oh2LUy{GL+Kll;yE$u(I(rnoE)#k+;##M5@Q zaSDX?7Rcx5RX%Ngh4G-*P98OktkkiN;DKHYenu(GIrmE0VH116oCIfAScrl!)f>fO z+w!o{rLUhbUp%jsd>o%n89BwzMSV(7Fk<$AH^gKt+X{jCHZ(Z_+pw80Punu|vzFBo zRjximim`oR5~fanZ;7xwL^oQHa`uwI^JC~k)O_{zlk}&4Bek1*j2_R3xm`IH@zO=E zPba)Cw`jpQ9~IoVY?dNN_2kD~IMfvkoW;9`?!Cl{CZJfMU_C+ZQH2V7)-9x@`^}d@ zpCtOEjC+J6gykBucp5)P=+2)*RRXTIK?AthE&T9nz>pzIw9N&~&;s#o);1mdVt1WU9RO|er2p!w1s9Kk6`D5jEkN-`!v~!&U z`=5CDmHY4BFl@JYM`AjA2Q$Ed_&m_Gn$jE3h(4H{b0Iqdwb^wojcV`^nl)!`rZT=< z3IDX1M*`Pg7=p}4Ac`JvUfA8z@Nu94#lx6c;rhEF;dfrP6lh0MA~%9VFDw`Cce7l* z;JIn|IGVThE?%;|8Jqx9cJhGxe)y?`^(dM0OJpB0yyCP!&9vx1;fSLq=$i!_eEF5O zBdA8WR2RjRkmrYZ6i!KPgrz_Aj?n(WmxCp<9cAF%e^l%Z4s))i5 z@dclJveRxj6B1P?q%OaBMcg1c6*=l?Ce&B5BaEv#$KdOYZ#k- zvKW9IyBTQjVy`_bR#;mf+NW@K?U;O-XXjn|BgWy^rtSPe%e7)7g=i%*FBxbefiR$p zcRlbG9atOkthoO&f1NGN?l91hF}wOHDHp`4)Z@&QxgX1*PNwflWS zg7~hmI=$u7YJ-Apq z)#P+>Mtv}EG0C}n^u)*4-@{@1rsNtD3!Ll3gzIdKaJfo65p+em_{00 z!$96RB&~#6l#?D40PWZaO&(}bFV^P9tnJ40z`+%hZ`{3m^qiE(nJOawk&G^14-X{P z-<#N3;B_(2v%B}A1$ha(HPlLt%@at3lras9q>oeQp41esNpZgyeQF8QsV9!%WFyJ! z_sY@yp1T^e&Y`cHi580nQ@c7UQ{?|1m5EK#qeQ^ zS}IG2$ZzxaMQ_8u?{Ei+&3iPdPCayS5U08v!wB&j?`LFGi)J^Mjaz^ucKyyP;7FmX zFKKu)eRag%d-4kN>#LG67a)8!-{lk13akmaILu2;x*0cvYHI*fS=}NYWi%ErrF9Z4 z({k7I&ci31CX*tsD6W+d?-Cpy6W=L1R6x0`@y27YRM}JK*^Xm`+P9(1SMsadd~M3o z;ZTy{INB{S6&t$rf^aQ!sgB^NbmCP!(;?mWDNtPY%~+P#QUooZk+I~V#gg_OMh(4V zM6|sb9&ca!^_2ElAp=F)J7`@{$#YnlNi`pG2i!^HSu#A2=_OY|d_=@?!+5L9M^^*` zO#0m>8T2X5A=d0iS!T{pvC2XIXJ4G?yOCnIF*LQBf&ic^t&C(*PZTDcbRApiv{hQy zf6s)M=CJlDcA1n8<*Mv zJI;zl_|#t%WCP|MVDWJ<0L1GJcT|d(4{7FxP-4~ao`S1mFrFnZNDsEp-k}g{6sp)+kA`VM zH+r9iAm7#xVX2mfy1{Y03tbD-wOzl1-ZRIDDE%&ItkhfXk&#c8;fRj9Van~Y)AY_w~l<4`ysvb z)fT~%uS+-^|9h48KM=&u{e$TD=kx!b4EZNU|LYhrftJvu_~*fA4S<;u(zXXcnKJ@j z;|62soknu<^IeH`!VTRgg$WWge{-tge@*=7^hZcrXQ-l^nni#{^!d)r8vHT(^p|hu zZQ;AuhsLdIK=)3Oz1WGeSP~l&ny`B-3mb$84A`3zF_F*sMUNqt;4z>qHL5q7hf; zs3nBrZtsj!%tKXu2k&S7Aw1NAx2ahrSLomle^Dgn^hVKkrLvRU+R%7`FY%h)S#$#3 zpLBGtxFsb8eK6+o4de!ix=$;N8gAch_U=WH*lM+!M$s-sVd`GIKY80$XC42d;FZw! z`4Z~=GWEm91-5XbnUf{<)Xs+Z4`QP4HMIdE^9N*otLTy!Lx&*W80_j&uDwgi=Jl$! z)>|3%mx4t_GRD*W^hFNrL zjdc}g7C74WpUxA-!`r)od~rhPmyE~RvWnHyw|!n;|8;Nuw0Lp?!UJ#?I%f#ru02+` z7u*RD8Lqfiz8aQ0bZXuwlrb>3hFM+j@7)I5<@ry*AjG>%pyY6-><-j*eQM38Lq5J# z)CJfjN(QO>w<#j@E=OJvVX>f(_e)=%8>0Vm_Ez)S-0iDXLl`it0eip6NV*V@<&#MH z;e=zz3-|?TO%oKc?+HnT&a)5Ci#*{+^tQ5sBf#|n^@UKsN!-f9 z)Ytda$l^Pb9kkpBiErsJ1Rnnak1cqtCR291AOr9$eJkdE9#~2hI2|4AHGK(jbbDO< zR9{r;R-Za$-%m4DH;)ua+tj3R+Nl}+Q*W62xGiPD{Er_Bo_?Grbe>^B^k>vaD!gp_ z9`O!Yo`_rCJD!{YFUjk%Z3D79@rjLTs1;2kTfn&jrEs3$&W_5(q4W{q# z5SeWD0+<;;oX$G#t45^7EOv6cqv$83E++T%_FzTkDZ9z99GB_OwKiQ0UF>V{>kdyp zzd}7;)jUz>MF3ZBf$K_QcbEeGlHD#HC=As)IW<`aH9RK$MRDD$(^Cyr+s~X^pnP0I zZh5;ezjfhh!n{c2c{+Y~j)xa10A{`h1v2U~U@sdx3!f?lA6`XPhKmxdF?KR|(oL7H zJ#OX5K(Sp@i#BU+Is$pFhlgt7=i@^PQdS^EefTxj;aTJuHOY+siTarz~v% zY3cbw@bvHP>El${M%$*7%JLcO&#U2>Ic#)vL4`eF_RJDrZ0)`4R0mI24s!*b^iQ@`6B1m^8&d`qvUDgoXTr?3}?EsIjLRqJMxK0+0gpB{%e zb*FIeo_4hFKnmg1nhb!JlS>qMiEUWs8ait&xTUSFNi}C{?G}~Z)Z#@k3Z@7@16HHA zFx|7aNJS*bfZ(zunk0h)5t|9r!JoV6=d9*Get2}?HJ2IuOzy$rGp4x(#fQ!rZgf4< zHY>XTj{|hcBm4@W_@!=3fLKp1bSdMvIMe2|*{HL)EEd;=gNB(TcMRf}>LU#*Vp)3V zvx77^9y(?ma_k4cM4cyjXY^o=62c`&ke11+!}uS7pb4MKwzPA=#mgAeAJt_?FUEpxmUNY#HtdkQ>S&8!QC202EbwJauWFl{x}tY1Ix_! zN^34U@c<1k5^auBg?uS^Y53 zH@RNokQTJ6a^>;!att*UL=dWcY)mX!8k7zfbO&=Gy~721dmdz;fBkHB&~w{hCbw-z zO0Rv#E0&s-!m7X#=lnZmP+pWwH|fi<(3#3*d&i%DUc5C>^W%>n#TFaqVP~hRqzj41 zVfd7)B^AZgoi|6)re4}M)?vB*kDn%7;apI%ozZ$cmzH;kL%ef$?^9KZJzx4BqD+FH z6?mZ(`rZ+v^e4;kjR~!Q-Ef)vb&NEH=6pej{j`0pQW!p@j8u25`pjjpkNP^{>r2(XMwhLtvG(9aPB?1-T9B%q^rqqQzen z3>8a3HTaoRvs1oP%NbC82*`DxJmd>lcx|0vT7m}APzTj@?y8WYZ*Mt+oH3nxLWxVt zkvm1kLWXP)ZnZ@wy0(KdVgA6QKeL`jJGXiB(ew-*H@y24s@fRqLskbglIb=e_(Y<$ z4t^4GjM&bV3^h{r9+Ll>>@e3T-54~B6BR6NjXm}y3IGjspsL{^F`w0+wXH7*Okhd_LSi$e&#=c^P+pq!!YdK{P$I%7>}+&&}F zL(U;s^#C`5U!J(Ox{$Yt3Tc(G?qSQfru0OjpL{Xd08@iqJdC1wf7IiUEI&^Gi|)oa zl=YnXDmA2;nuXmYCMZT56j&3NUmjH+e_G75{*EvE5MFXGN|snwY&k?wTaNB+T()NT z;v7S$J2bEkb+kC}TB=L1e5FurQt&jGg*Uk<=h4?RdC{H~QAl?7FN%)4YX{** zbT}Fr(CITB z+wt?M#r3nMs}zyukcMy8!A;aG+uF}hI#a2kdmYcO?!F~3_l`n$x7Pecg5@8VyiE{F zK$&-kP+g3i7De5Fs9J^hgILrlE8Sm_=!hlYDD@jv-^T_^_3b(E4KCac-lNwsPp)%B zMldLyH?7a}77d+U4W}8h_doR|xn>wj3@56XG`!NyiJ5cSoYmvgJo?QC5e4!tOG@(s zOq)QPQn$b|RMCTcjPV?{)w;j@#37_wq)D#v&FI(46;B)Qb`}0J`+Joc&zTqu@6@OR zD}m5_6#)Fo0NkBwtpjzGJ5oarSWiB?_La;onckDQBy1oqPn> zu6Lk`CLpHE#IQ5uS<{M*k?%30_AFP^-^C|;&0uUYSTl3yAL4{o5A4oHZdh58y3gK( z(*w#T5UN&1B-8~*)A;W3{cNgJ&97Sa4QbvYOi_6&4L0kDT#cU_3$dVD#*;`*2@Ju< zmatp4T=m$qxW=ae!@a<8XdbBAS#YcR5#Sr?BS56G7)Jsgc#wEAqNu^dRr!Hpn`z94 z#~8`5wb(%sof{D}owJlJ6qH-w3xIRSZ9F92N8O1aysUAOd?eXo=K4up(!!EdhNw8FnGZaVeu?vCHwp^n|ls8-7)# z)30=&*;`cr)Kb9Jg)B}KHpkN@Jeo25A;j|a=@myEbEfnwmm|JzRW?yO`dwH?!2o*` zP1sXn*az33EI7}e4@tVP?*i|m@0kpBSv4%=)Z+~CK-(hM%dnz%8=mbgBWnowM5Qiq#mum62NTaDO;lsvR(r z*}=QqChp;Xueax{c1^QM*kI>$-p^y#F5l5(U%cKW_j$$1GU9dzNMkO%AI{$DwIqq8 zh1n6C0+*$4cooO=W7XJW6!K)IWMm$TJodh?yUxmq50AO|neohCwsNdQe~sI}!t&DY0TS8I-@B!BL`ECAd$qaWiJZWF_f0p2xu zTMaI}qiK<`M(Sw{30?59%T4wLoG5@f_yVLC&JVLCV^3X3*WAv9C2r3{rdwYXY5L^M zI|uzm;p@9+kZ)&a@0AKeMv%|<@SN3YDu1_F*YkWWxG2}FM|vi?*N+FE``g>&r6f)^ zC0qvX6;?}TQ+yHLbL=C#J+DV~=JRIW+4rmm({^7Z-ND159qlHYaa=~E6nfUXOVAh4 zo8tnNBT*jh=0DFdI0IY7AE2qrU ztwVJoKZVx6A83p98JIWme4FP&$F`DK-}#m2w!6tFrO0*Ofn2! zNO`4u%rps$D5MH6zPk(;oChYj|H9R_8~@ z^5{-R*K3ENk}#f+;R9q%JSO#Mj}JyeOd`|A_L%V{-|O|@MlK#qWw{Bl=D$ntj<66G zp_z%kI0E!O8$J>9my8l~8k2YH(JZc$tg~AdTtPDklVCpKhus}sMe)#wkHXJB(QNtJ z2FUxmV2|+N?HF}5aL!zJpB46*nT-qkd?z$Fv{SHiXCF}K-B{hw=hVa8kkIFS#aRp5Kcv%aXr8XA ztadSWr$eEy(;rYGtFGW_<9AW4gZP7PP1$DDk6r0&4H_pIW;*O zEQsRL#YxUkk0}~>yseZKO7(qdbLV4E(QL4%Q=po@2!Hhhx$yI6DdDWdF$^FDpxzAW zp0n;~Jmy`&&reOoeRYF<09L}&IM15dR>D5$`I#(H1E1RkKCe#avD{C{vA@uT!TKkGb zlSsOrZ@L~u*0myqT!Y&xZ5Ib*rzNekF$J82y+lnh4^5F~eEw8(eagPr*A6E+-7oyn zuf!NrCXRv=NM`Se!d*GBi7-RoV?)V%(Pd4qh5J4$ZUwz_2H&DX=EErQcX5oVDGEdU zq({V>kY)ekw^q_}*a<1m$E)$na}qioj#&Q8UzF5Lp%(QdGrTfM3LP7M8P7ZeuZ1^y z2~O^4Lh@IA$g;A2-k8#*qYt?)7EapS2nJ16*mdG)&T9l?z5mDRSN2?5GebVBZ%=-~ zf8q?Mr{?67{IPBBD3h~nv@?k4JO$HbCW)Z&Y4FZlKavqOXBmB`Vz1#tZjIgtVKphg za9dkB@sPPG-?sXHr8ZIiQx)&e=l_eM=AZcdPt+6tH+k|OR15#{pVQL*_wphoMQw%y zz-*gl8+IaNJ4d!k8)7-wEs-3abDx|R_#(?LQt}Ag0!Zi-#-oRA@>*k6b;-P=d<=XF zmhT!P6%)jYOrjrZ1LCC{fM)xDQ*->ae(x*`Mehb-@kU7io_+Oual1&Taq3C40R>;1 zZ#%;3&$9MAE_PQx+)-OX(~9s0cgE8X5d-~V^P^Z#$!@DP$4Gq*3ISKD`2VwhvQby2Bi=cW z`^mByk;f)s=VRG_190g4R{+Pq;f-@K%txzsvXa~v+(dsJx^g!bKrWh1C9KEBlAc6) zhKoIkD*dVQ1~;2A7_9I}T;W;@=#;h>ai{>`MUo&m-D3d0z5!?@^l_tmTN1<%KCP<2 zw?Vw{;jzCc(r>_%K~tK*rSHoCztpDyq+(aBC_h#lXs|pXj*(*!q_jkmE4hPEcE$+) zCCo*f^ws9yR(AkZAZ?ca7Mp* z;rlwWgzDu4)hWL`@IMEh`p*#qb~xX=UIV?Tf80|6{(p?u<4a*m5Puo-Kkixd&yd*m zu>1ds!k;Mo{d)X~!k;Mo>s0wC7yjhJpIrE}QUW!|pL*f%O6*S*{zTzltMWg&@Fy4k z&8NdeDD&_y6xk0YKRw?c8Rpu3zSn zsRHd`*y$*JHy-P&X!HcX{=4rVgPmtEfbMv`(q+HL!5%>I?7ZPWP9VYmmKWt8#_|7} zar`GX|No5*^S>!%@6bCh3?R1EI+{-sQA5Y*Z3BjiJyCe}+F8!EY-f_v+>CD?e_+QZ zU|4kbxajPidf-w8GY`>a@!}-*T5*h}j4(l<)Ru}vLqZN3`{_h^(Ir{+ms*S zn^Kwki0zuwTQF99>h|7Z8*}%(%BaGePG?_Ms9QDeagmSecV6{fT5A5M4KKrHuxozL zvFnYnD`!P@p!j*=adpZn*PPfWb&nD)QH0*aC6QD*m4hd~-5=!Sp50tI*E+#T%wHZk zwLx~WsKfEe2s*gOFFUJW2#-_y*xF8YUUljef$H;vr zl?Fr@Ey*$K|_15Fs&k|wCNKX>W&VVLC{Inuk> zKN^uL*lDiy$}wW3`E$eHQg%tazYzD%N>NhK{ay$UOqh7ve;IOK33CI^5FiR zRY8N$$Cnz0`+YOAHY3_2#`yqknX$sw)1|U*L*-?c7nLx7H;0hoyFth`>#ghct;6bC zl?ff~)RO0vWgh-MqFSGUV;wN?OR}<#X9zOSEOh49r_A?W&U?nO`n6xuZw9L_{QMN~-dram7K4q(+(Vl1HLJ znkT2%D$=maYu17b+AyC|@+g`uT!^k7`2s;#-Dt=|B{FNyex*wunOw~hrIPqL85KdF ze$(q*x(4u%$O7uV^^cIzWJzMw;wmEAyB^6h)#ZqNRA1chG``l7I_TJS*-|*#Z}i^o zqlavh6gb%(vt?NdV#=iUSuyNlxWJTqjgfRpx!`-j66Zbd0*5ZiI|-(SMf9pNQdSMo~g(;GpDl&h_Jpsq$9F^ea&UzA z;f@F3vQQ4Yy4ZGaS<-pp>4fxNK~I@iP5tZ*F|lHt@6f>5n&&wQPyUhPWDWvA>8o?; zfwNUD#Gx+2uI2U$GS`K00z6k!0gZY}I!WQ_nXk#hm{&ny0*+q3C)At>{~8iRr<=yqh5FmEqL1OpNpTemOsN2n-N)9V+&@&3!fi7*#H@rWz(Xd0Jc zfcILKy?zjG^rgP}TAr-md0qWAFDUljZ();VBu8oO81S7GUH?7r!? z_N;VGjK%gL|GBQDJTZrefPCdJx}=GE&2NRDGi*i>T7p*%rXIZh@fU>$mo+Bi*ss7P z7hO7tP}+U7hPponcZ0;ES*Wp-?L#jo?ZokQrgGXJ7q*ODH$zwRE4>Qyd8UKUQROjR zxXk||J<6#`BrHuE3h!7*xoOlBqL@sxcdr?bNrWkE3RV93N&4Kq=w$mG z|BTWUc7j3In3D~mED@%!O4mJtB*mZ-L?}i8N7RsV$cQCaqQtmt}nRy=z({*n_ zYJ)#D0aA!gdfz^lyjf%dAUsHEz|ASga6>k}>xl><}HV|+i)PbglfXA?Qk(b@~W z^++w=CJ?96D=CaiO(4OS;PhW%bc@-9wAPq4wRhQg%d_+=AXbn%NM02zae!%)vGr8j z^q;Eo-tl>7T_K*n%=LXTIjX#)qXU>zpQ60*%H4aMKhbsT-RKzJBtk>fQm%kRsMrt1 z#~i!wbzjw{SYJ(%A4LV9#k2+!tUxaXsqvYOU5~xhuh|_L#i8rH9-Y%z?P@toN>y8V z^@fm_=grSs_!k8mV8US&js@WXG+Y-k;B;t5TC30A4!>eGb z>!1yD`A8my*U`otmcv|@eO?4B6>!%j4F(MVG;id6$+@Mh-aBE;Rv#k%g(cGRMb42C zD*88y&dDYs7N`9!SJW#PCGSXl@mUr(~e_IlXu_))XHF{IHQ~DQGL9yzKqRR zKxV;y9VC^0oynSq<9DF8o?i>KQ{c10R@p^N?-#O^9klEAxIz$~+_qR{ayT<{EzibD z2Ub4Osrx$HW9Jt|6MwSWLtQ@nZ?xkR_m;5 z)J8n>U1>({@DPyg4PHQkLe9$^A{e^w&d$4G>l?~_U6_M&=C7JQ(*5?Ws$SQuN71lG zRU|B1+wUeM`H-0fDkKXcK3xqoytegiex{E{;%d^BC#pPVy%&Tf{4RVIY68E2a|jbB z@yNTxe5Ra$mp`KWIICm}98NX5v;Ly^d9E}#BowvL>pP>Uj`W>9`Y74sL%yNyKsYcY zat4%!C<-thy@#(;d|-8n?cWdbd+=>{{w9v&E9}WxsRAepd`SUBO^nhj*wuL6yS7GG z^`=j4Rx3!`jpNfD$Mj%{_=Ag_z;s(eBPtRmuMI_X`tZZ-2$}OGvfc1l1U|}bq}b@m zQ2Fgpjo$s4mua1paUbaQeD)mjc#r$Ds@{#!ORjjC9p_Gx^p^*%I~FKl=luyZwlwAq zWd-$zHBR`(ihfklJtU4K#N?JmQi1 z)-CaYM-Ow?Jyr%inOuNASw-Ii~sGeH-7n{ft9s#;av<3Q%vUm8kY~E4yhsE&Jxrt%=6htV3`<&6{5YN%woJea!)_|1Cp0`L~w>jf*JQTg{$L!A2sAEHqUnPchc&) zywY-_E?W1HBYolLUwPUh%SQZp2akzRl#M%KjjzjBdyru|Unb}%&XO6FG1q(Uce=RW zr>5x{&NCQZ0?V_PMzx9iqCJBX#}!acQt{Mc7CZuE8DCwU;zP zx=YN(El_SgzpHD%s9&`sGM;prwYKFbEn>jg(bzB1j|tgO;VE65AVt09UATY(c-}7h z6ZMuPa5)s}X7&2FZ=zXjU%DC1*xI|@vLNQ7b8615C&%HyZe}6QPMnA=f#yKh8u5tu z-MSV^eh(f4*LeC$-Ffvu^+|g?7{?CbRnUN2CEoM8>}oZ)mSj@O_N(;Ul>fc>fbR%k0NqN~jJOH;z8mOqWY%FF1 zK2}_h8vd274~%mLjh(b2YAX;BOpl>f8s=gz-9@+z{n@pX5YXgG=--veI&)&U$i~7& zus4Y1r&USY_xFJzi!B~%3=CpPlfjeew%vWyVmE8(yE7s_(utmHv$j4f)Kn&38#Q8w z0x}iJtEtgXx@Kpm+>e`+=PECgM)f^dBX5CjbS>Tb^(OFRrqYhRxR3vKf@BUpIFY1= z+q>w7lEVWb+~lnj3JrOEiN}cg(z8deBP)x~6<@j~g!1_hmY|P6G+3u=))%7ui7o`P z5eIP;x8%}o#9#|$=*7?Eeyx;oHuxYbt;=||YW$W+%Y$GFN^X_!KV}Y{#I>tB)S@{K z5WRa?<*tQutwxJ;d_A1ZGWp9jANE?4`$8S;*}Xq}qIQt~HYy<$19_9uRK*;PW+BTE z$1GYA7&s%MeV&)IG*qpkO^0r`*lXZr4)!`Pt8vy9)F!v;$CaQjO_|%Fs~m(?^v(?& zI*u#*bNCRT@3E`y_0IC%a6@hIhr7kov-&(&eoTJXamyCw>!r}pxq;9l>JsLMmUZeY zh_k|##^R$VD%-=7@IC{bb$R}4y#D7%PrGkiwAUXNqj_;7C?}Tdodc;0LwqCwTzIIE$RrNBZKnC?^hs#vsF;q3gK?1T9L4C+zYXM2X8ILPI?kRm+`dG)g72WKe z)*ZE_d}Gm($?{|7*FF0KNt zy-SxsC<4+26r@H(nh24Ov`7sd=@LpvBA`GZ0SOxk@$C0^#<<_^80Xxt_a8{c*!$V* znQN}O=3He0;W1T@9NM1->1#mCwY=;w2`GQWkmh{FN6@DPbd^u9$lt&N`{a3}I2yNt z2$idI8m8JBUS2<2(7&_a z)@|`(H^()+bJQn{|9YZSa`6cTqzTFh&_%3R_R0tIh)Zle@*gJqeeEo?(eJkgEY3xF zNIvJ|eYPKM9MIY0I|ns(N2aNuFedoJ-XCzB1n95jxqq9KUw=}1Z~DO2$I3)~F>Qab z=Tk`f=kDg{fGmH`Pq2po&SO;}4nb<`kST}vIF??uwafH_zBYS1bb8{ZGmN9nXjD z-kefSh%+Qvy;p9UNyW`ke$(&IN}L6g#p#NOuZImBq~E4*v|8MO72!ECj*n+SFb|ww zHIJ!{y0B?;`dzRVs>z_jqd71x?%daR*Rt+tEF~*-cdM%hq(qz!(XIQ?^^jCSyi#?G zP^5;d7??O?57U}&>TNK|GI_WAXX`i9BSQPjtDh57CD``pFC-`I>gvEe>Hr>`oYsI) zG2*1eBm9%i?2Eroptc~1$l|!(^eoOzP$+TgPd(YNxa9# zW*Oa}C+lrx`0<`0+s6>ebFqqNmDN=$uUvXz21aM6fd1%XkEwx`R3$)WwH@)whL#lb z$*|@6505zxf{aLuWr9_1t+Pe(StkD{4S+Nyan@Hm+=bLa;EV$SAdveg?dP=GvH{$w zGW=Fh3j2)S1H;myRHZ?NpOw-LPU9IB?jJe`cx1mL6HJ)&lBP^<>g{#m`FP!cB|Lk{ z{8Gp*mVmE|OsB=^m?h~9-ylC+X_)+lOcwwNKfy~y|LB-+L+Owl3C{aBRU5q9@=}Cb zPEtm&?IPihaFuP{v%qu-^#R}(NoK;u7q-pL7KWZxuFCV?iKjBRZwCr0f;|I!-&?wb zA-=op+#fSUfD{5~*-6s`enY>(<6bORyu5#NiZF8!>53myShp&Q?PuUJgf;Bd*U6<* zQ=LHj?s5du!$EjD2+O;PT5RiVJezCX!_X|CM89u%A!F?Z8ZbD8x(4GTD-eQ_M0>J8 zA3yZ0YsdU*r`x&oDN#NJUX8{Z+7@J;X2@w zaa#O&zaH6SA_HV*#NwZH!>J!7)%)P(A{}CvG{e>)!I#0C#+QC=GBdCH(Py)=m8y1IDYD?j8=FT^kf%I+Bq{lbVwVR~|dG!2a+QySIF?H<;@o z_vH;|@GI81${wLAAM{_=#4#C5iT&P1kBaw&nLTrzqTYg0vX_}dBGb;P<%KW=N<(_i zN;idvv>zM6d?%GXqQs3zx}ftk*E_ByBjxpgwu4%brtZt*JD_Jew{Bq{HLG(y#MCPs|BK{)~Yr8A6HA?d?*9u+RjE>uGhEJJ*{~C1)%gM>GZ=B}vWAlSpJFT}NY8yTxyE_&sNLs{0 z<8@`jl+4N4*d4RE+{$Xcm3GOr$>fgb(xkR);^{@*;;{ydFF)ojTR5`+a%|>D5dh>L z^LR%NUziDgS(COox8ChnnlLxDvP^AkZSBZWPGcJt9!WWqKCnUOHUkSK6YPNq9E$Pr zW-&*>J+PwM^}FFlv?><`&gqM->MSs-q;vHKy^|;;xXWIdieS>z&Hm73OKL&;C0z?! zG$27idO!ZKm>15a)$as%4$1E<7*0Wr~5GSP@m3IDE_uUU) z>3%FPjm^$|g)1qSXq{uzUt1dNCM^2F$cON7>8phL6W(BzKZs;%M8z)%TX06Qkfl7* zslxqGsE<|n$SaslmFQn$SM9@n`MlO$rNW2m%2JY{Z>;-uMNg_a;AC^X#sXl6$$Mo)Jfvq=OQjSEJ{!JyAg z{iTc^MT!FHzqfE)uh@(Q$ba#4pjHQt$R z6zHJ3AQ!#a+jsUe?mMV}?%)Bzp8zl|lTBM-)dY1eY(#HnNA^iw?4~+CXJwIoS6*K7 zj){8<*L%^Qbu5Y=t*Xnf17#p?7LJ#~pp@5SZAb3LiI?CY62`0$eSqMSO#8T0_QxhZ zZT~iNSl{HQm#^8J?ixv+Zmdr@R7eKHt{^0M_k6JixpT5)mePF#&b;1u5DFko!|at>I<^nMn4=QH1W+r<_kC|$8xNMZJ=#Z zZ{m~-_#fp6!!kGQmejAXaH~s-^{sLl{Z}t-i$@4PmbCu>7Ck(vTF38 z`FfT3f#B)nee;ECw8I4;kEGR8tVy=3Qmv`B9g*rCh*g$t7>r}-;CyRfOm-Baz5rrM z!es2~00LUX1) zR#}by(fuj6X<@znR;FRoSO!EGfJcTPu=Q}p2kthJ2r_AgQ{`Ua2L&lWP&>19D)qPb zw2a`l-(UUdHI7@QQGhvl69S^&`#>mumt#3h8m*~)b3O7Bc`87v?#YJ;uUDjOgDm!MaoV4o&6jWN6QH~FX~w7yo6H|T+VZ=hJ- zDo?+$*{_7<44)5OT3=5}qSV4HoaS{UsoY&tR1MizSxdj$%DQTTJ?pRCo5I|T`SC0^ z1o0+dX!SU;ADZgG20&M5$;gzCg|h{sY>t3_6;jYq{77o4-srw|;Xbm@_F7 zl?LN^KK)~q$eTG_Y)9EgAL8;jLfU>ldlq|E{H=Iqca5Hr(qttv4T`JrQ}Gi3khqFi z7<(WdA_%}A6!);6^_@~*Z*Dn0Y!Tqr=f;Q|-V+XRyNLfYBPg=s4$J^a1J}O=y2Kv!6BLrM zjJ1slXFBRW9?oHEIuB;Ej2A67n$qa$vJ}HouKad|k_pdsP$YvCk`anUzdt5)~><=-AZy@fB57v=0OW=75GUJ|Y@&_c2_ z4ly(zs>#>4w|&r-!n!Pqpa*YocllrrZBNwA@c{9CVZ z@r-I(#c|P$Mi=xh+KFykf(0xY_(_dCDY<`FS0;B=jzl7vD_71E(?4C{1bdeRa37D319#~~0r{WH9xsyX?6>L-m(N$DFTz<%Po4d}#C=xM-`&`#XqJ!6 zlmPc;_rqVA(T0*xxY_wv+Kxu1UcuTh`<5K^TCFo;Z5yW&N z+|5hU!fryuT+1iTJ~r3y4#Qq#{A1(@3X_XQ@IwfkJ-=K44_W_TQC9*>M^36e;mvt0 zFCX4h^69+cJuRqPHYl%w1sqWxDg;cgrX3`{lw_97<g19pA*ns+se9}r*=)uMw z=A+^zB^R-tLQT!NIzMkklWd1S68$0q24HC?vFmP^@iKtIK}nH-Slqj`~mA z>b{;ET(M10{rpi;GpqI^*NYg6!GJ>Q%6UMk1mmeWqo!G0Ry{8Jr&E4FNp9_AnlnfJ zb;$3p|I?Q~Si;p`Qe6JOryBnXTL2ZSMOwHwSb==1IqubGXk+}S@uMMnvyrB|9F)O( z6-=Q_Oe*s1>_%dVcVPFR9`Llxuy9=oJCGy;rCnDa-T6^0XN55{@*Z4~_Tq~9YF_XJ zRB))Tca;~Qiv{aRSAdL9OS*X_Qm*#vp$VqkxwD$GaaACn%b)QF}>KBtzv#)rdS$y zSW7j4vu|puY$Q5$s=aV1T5|gT`YGuu#Cj6lInMJ_WsxuTip645dF*_@lfWBg3@USA|vOF$@!<@V#pDQpN zTm27n4C{Q^MQj~kL)!^Ojn(w#>7?Hx{5P-%6bJ&{SjJyUXt6wk4DlxW9Wj-VpqAuI zsS;xM&x{Amb>$;t;9f{xcLx?=n#9u|b*YWt#vvE}c`V?{ndT4OOn2`67aT_qW>SrX zwm?DeS9fNjd6F_`jKHCT80MLI<0hpUQ~3ITL)N&x`U(7#bhtF#i|LB6@+8Yygai0I zgu&;bMs7)^@)tv98p}zMeOBu`dl31R{V}#s+ZHl?i|*#bcKk;`kDS;85$d=Kv%p=- zS7;cWYsm>UTC;z=tWO{2de^^K;TyRJ#28k6NOAYvl4*M8bWqs(>w zuKu8_`>ghdz-S{4ZQ^1M=YpZeBt?pE7{Cs62?4=4Gn0X?YaO=i62>WG#jXsi&#r!| z9CCHN@bJcvB)y}82fR@MjT8Va^bx0E?Cl+-QEW#`{y(}$OVt)sznM-fIR7|9^~&hOo`<=S+^i=T4Q4y!L ztB@Cs{q-%D6PFoh=hzKNwSc)!b(mE3 zm#JoHYaktdxd=I_6?)GpZ9Kc^!@eH50?rk4Wke@DKXh2*r3Wr|(36F6*xrq){G$$d zK!k70DW~&I$3ptY$=-fSAynt*1ko)SLIwJSbyazV7tuEt<(i9^p)?flj{T6$b(Rd=RoPpIzC1)sd zZyNPREfL%d^tv zv1>5PJEx(IXtU>k5gTV4mPhz>6%= zR|1JW4lE=UFf+vI!3NLVsqW806>`|{iX6J(7x zJ2nT}zrC0%ayq^VQ*R}Sy{$HtBObg{z|SflL@P!x~m#%&<1k@au8>u zK=OdQz+AJ|7AT({uB+EN4`SVk9=qp()Ay%|;D_Ls za42?WN=4)LIWN`uNzdkUqZ@0s3Gol#GnLzFbc_28LGA;&eX1*hq?HnUcn!$mPS>og zmDInQ2)H`X-rO&=w{4)ek{x%;QvZODJcAH}yALVv<5M8fE$|lFjV zcb?;!8%*Rs`G6qR73g2>3<>)=MHLP&@2$9~Upbh2-FVN>Y2@eoffv@(504U8;mIwI zoS;n7FCD{_(4i3w(!+dViI!9U=o@RCC zq7jku2l=W^q1QYe!TFOUw~;JZI;HRdm10rXRs>&5F%qiC*|=~+Ln`^_Hza|rw&qrzP7-8q(t1pit8Tp}~$*6g*ui{Sw^t5ITM*|@uT zxI97vCx2M^gfWU+zh0mzFFM#V>i0(FdY3jRhD4>!p_&}~I-`1VZ1Zg=l)SRC_17xx zmodZYcs-E>Tw<>DJ31}vx8v+DDu^-o#>pDmDS$9Aht{)I;QftBDDxecXGi3u$dYqY zpWfmZ487dzEKym*Cu4NcZYSe=KJ&LR*y9@7l%w#UG=9fdr&lA%qzBgv67%gXS9C0V zm@b8WVHt0=%Lb*)BV3AJn~wBhgkCInhww*WwJyWlR`9La`Al0D;Sb3n8LfRh6v+DUDesk^y!dCdSK#-Y)x{9K(a(`6M@2AX27$-Y zgNh^r9F}83#L7WoUI=~9I?cYAjtghBWGYV;AOE)Q8HngaQd*3?Q+T# zQ(HP^?(cHczMi&|o>Q!Gv_D_{f+Z9C@qN%y?#T%Py6px(Vbt`GFLRZaQ`TKXUIjH^ z#?Y5yU}C__E;A+z^7&&^eyq#%#eKJvedln|H_l?)4?@QRumW&*Q7CTyRUqzwcLSV_c`~59jOeE3rSpFj7#nu)kq68V7z-dlanGr@=9KTu_*#0Ignuq+ z!=y-!F!(eyK7R6&Wa=FHzA9C8F7CNaF@d+(+em(@;G4Qrg5b7+vpG@%*dkl#GE-&d zXwpXIqE5hUF?Aq>#b6t?IP;?ze_zd|>s=$XO z)VrrV?;{IH?RAB2r*+?eWsf)eJMq_t8Xu0LBMV4Pmi5jgXwl}2p>L_Z?E0Mf#6V$8b37|+I;H2cF`Xrt{ zk?3HZxxTirzqXt0w=$q6G-*6p$L{$;^le&BftP4{k)LQyqlD)jZid@p$)D&>|8^8W zQ9p`8w-NB28}o|~@dm5waQ8dF?g?@lY;JxyE@0jM(N$zX$M>ld0LO#^Hq`T8NGDpV zZciW?2OtBFgSV@mI{2!-adTyVV!)*I$ zB5si~HeVzrTK3h0g4DVDuzfGnKb|^$P1oWxZ5%7yb@4a42PF`7ZKx{jss5?WY2&FU z({5d_M2PvpA(w?qFIHJ<&VBOuk#0YdUy-T;Szw|(BN35FI7i;CeB;GmbFVQRts3&2G8F*HeS#1LXk{ys+R%+w`+p;8(^I2Q2cf)n4_rdj&lUuCsjGnKG8K*{m5~|u0D%3(DGwVRH;WHcAH&9 zD0dr^6Dr#hQos4)qrn;`LwGnap2p{$oxbp?O}Yo{kSXwK$V~u({H=S96knJ%jxq-X_|_KqXM-!fcexg3fw z8W`F4>T@t855M4|=lj_P-QGXG5yolic$TUP%u1mWoY_SiZOSvx9IU;$T__uRCU^9k zI(_UX!Wvz`!_k5lDY>_;$xH*b*fdnVK%XCYJo9}^oh5c7Yzy2`Qx^6& zmXFJa3r~+<&$P?^W(K8{Wv`-QvACUv)iA0y#=fr6$VUO=Vjt)K4lO@@EwaZ_9oyFR z1w>bI;E`m~K3mK*Rgrt2dqic7IJ>|pw>CR8IyI;XTVi`b$8pz)bZov*ftT*}S_BpP zZWBogICBoH@w6!Cy)PN}8=JFkniN=vS|^2%cfU5b(ssIH@E~?Vf0!l+sF3l;gnx7i zG)1cMT!)7E_ig#cqmoHnTf$@Fh7p@n2Yz)sFOI`NaMOz@bhL#t_?Ch^71m${WD^_( z9K#j|Kna0|-1e{LoJpHfU#@Nsp7R9zr339h1Gb^xn~IF=b9rG`$egB)GjKn60=NBu zc|_tC}C6+6|v2Jm0)_zv~U>S6``@Oy?f1P5w&yVroJijV|UxT$wW9!$udUX zN1hPontX>X%Rv0<@Nn3L81cB7hZ@!W6ao2PKrXJh==d>6XRxWosi02D#|Dj z>qXcgIwn5G>|-_9BfxF_7xonGs?mGE(nt_D6>P7m^U%AaH-~@Ua1*B|`PnVCuud{7 z(tP#s8y2v#sr^de8yW{^`wJGq*uv z7{s)(^#m0q>Diz!76E1V_5jxGxwP`CXR-?gR@Vn-8Ffa43!2UURN@8{)S3^W>d4b|XA7iiiq*O3*P= zK>v?yP8q@W8;$`B;y*f4x);S}9qepQO2?0d2DJ;rGl|&sNNS<;P9f<^?X%uo{fs9w zHBUOHYd_cC(^fmD?OXBs;Y=*&j1T~&XdrCiKN2o{xb9;tY#;2MsKFCH&wl>=#%|#} z*0+5!TYc#)b*mrcHW7ys_&xuWdv4vzU(W)4gZZ#F_uff?wj&P0 z>$!6E1fd-v9fO}Q_o_a*xIV07V4AZwZu6)#X@{X#VNS&SXahaE`W`(|tVW#ZHF&2KaY>tH+_ z6gFm3{Yh>EenfZ!*g;EpM0!ym4ZFt%i_Y$c;VVxT8bSi<8qz@^!_xs71Owu$H!(ZKuTNXUh~Un8iq-abJS@nUS#+ok99{7OB3 zB{R~o`WC<4SJ+Mw!i4P;RuF!Bw*3T?mfIp%8{<=+gp4z-IXZMZ9 zzN5J+9ezO>zm;-**kmw)YG?z(XtRh$)}gh3biOGy%6Hnu+!ol(*1dOIMi)@cA#P2P zwq&0mCcqZIM!q|-9rtnNqLMSjYuU_bjfT)U>A6e$kGFF{y&aF_P?U8lF!UG z%@str`SLZcC9#+>RPHH<`cLfT8r-IP->>&MY7EX#yY#9Nnhxccnuke?B=39JI27>b zfboWvt@&zh7{fEKPia+I(hJC2?LOz5YRX_}h6_LdsjV-|l-+Ig>Dt{daF5q;&iai- zp9pBLjuxfCFVW$=AEQ?kgFVCV9E1}H1Js-MtVb9=w~jBlfyyXXH132$jvjV3=USSm zPyD;aAKHiphCOOck*fDmz_f_dx_dI`vwwThp?;(A5$L2~=yUcC#33JWld--OplPSsjk4kw2F@(f>CktGdmt zdt!Sx<1ZQwCBl`Ct#79o&?b&`wNdg9vd8wRy@lHYSlQt5&EiPM_ebVFpE>#d(G4O$ z!{>|8v=mQlIk?%PPZ}XJ{eEcC%nZI^%}oB$-BnW=gegtSZk%*P zUEACn5L%zspTwuV5`0*^ved=tedJ}I*kishftT*Caag=Vs_0t~#?2Nj&0GAs|NHgO zHKUa4am2F2_?1xZPl|!xhQM_tIq+njL#EMGfT0s41p%1KdCPV6QX&y<$Gj$DyIP}K zhs1GJdCg~YJH~sVOGDDn!a}LMXLw;}5=a3mIbX}oSVN5%;zK!M*ZH=gjS2%_qgVi2 z({@lSJWsuaH`5oDFskER`oqDK7C^Loy~as|O6aI}QG|0J3+E1fifPm$pVg ztx+U`2qkYHQ;wpZIYyL+2K@4zKttj*4F*6o(2E;6xfv<+kIt+k(PBDS*zsU4wE1Xn z%_6gvu8(hU>-89(rYlLJVQs`Y`V!H&eH$+7W8q{Mdr z93F3ydj4=It;=<3X9E;H+y#p`@BPjRHZTA$5^R=h054isFyurgr)wJdI!Z8V3?xH! zxx%77XlH=8QZ2n$q5z84U0|BvadU97cv(U4@YD63Pn^w0(p#I!H5#hP33G0}E6_w5 zFN)}bGf(iVxw8=a2;Cr+vy3R8iG^OuW-q>=tg zk;>DT?=5GnI1YBUNL zT53-_B`D7UFNL0rIM8#T43Mi(=FF-I51gA@EBc1(MD`}O zVHb@Rdkl?_lBT+6?f3FT?d)KUr{w-@RsS+yF_J%5Fv6zp^3cVpn=!kgxzyU8LyIDr zjwevO$!1Nj+@@@;=cWxrvb>XPzva|>;XCzGpOEk08XrkszFp`cQt zIwRVVJGX~+eqO$q_$P&^sB=?BqwJXIJ-QYDi|-mE-IA?f`Oh+c3(oPn0Qy!)22 ztyU%_|iBedAJ}Bgz;1+XI;0Sb5zh zjD!nAhQ_?KRF?Y8TiN>OG4Rp^Xc@MQ8ZZWMG2iG&K0p zZGNh*@@`K5+k5ZqwHlp|@z$e|{qG{_hQdkG9P?mUYGPW)owBe*N+S7Bv3k?wCEIEp zAkWVvFx?Gs?*M?77=F80dV^rXd4b)>jAgl>NHh1xeL2GR|tJKyg{39qH}UOO%NWk%UHV(a*k!BU#9 zC^|3Zn;YHbfmu3wi(skF z2D%~rHEMloHff_6<^15kD<%1xfA>77zZJ^9Dn_o;-_w_%yP7IC`wJpSV{~^sFFtj^ zNfbtMgduwCl`(f4o-F$MNcx{<^A}V5w(>GH{pGXS{c38`T8MT$a0r^I#Bc#*&>kf7oZow=)=y~GHdbq^;yRhz8xM>D77!!20_ovz(0 zuSbbo_N!_m!dDB^OVefg4l)*Y3FwSJL)sE#1A=mHmtf(`wnUTvU0dKuQbqP1UwRWB zT7K4yRY%q;%L$m1R+5}>L@6OHQN^>w_f{d9IhWsDJhfwTosPpu^02b7vChI~sT)XH zT?DVGQ)H%?CbqLGi^3_2eQr)~S*kOFyssVd9c5O8VIKem$0{(zlOkWyQZj!#GJ|Dv z^7Qebx3VC^yn#evS!-NqrKI)NLs-e`#KQesq);LclKLX?k=L8q_|ayJMGHtQgnqal z=znRSV?EpJXSi4IYIdW`biRqjUAgV>QB7L*u?B6*LASZg z7r7q)xFy0Rb<4r92n%R)(1HjQ$e0EvOu4~kHork;XlaW zC0e2q5&8`UwgzR53S90euz6dAF1D@hG^|G=wrSRj49-J~>qhOq6P=lbCzHv#=cpj< z7H?e(9NW<5Y2a$-OM)HZF_^9XGctEV@<^)#y?-6i89#C8{${>|Md4N-+zoQ1p@31M z_1GxTUbP~dxB9w7VE_FHoGgu3>r)`YTR^b!?Q4DOvDyL^Ss$6M!Q+>=4h2^=0-LU< zCu&Fd+|e)iUMVAiV?9IK2TQt&Qgt{SBeVJ=9kK4L>sQE7>=3@MU2~!V!h5fsf*9Yq zy_z5Q>8-e#2FBiPgoF)fu6J1gF~?Ut;9ODHurP-XveaB23}b4g8T#X1Z(xOko_J74 z`l?alQKV0Dv0e~cfc{u7Y-QY>1?*p*H2@C&5^Wh~lQr84e&Wz5wIY$Dh{WNL zD)2TG&$O1&@-%MiN-T^*k9|Udpj$HR)}=`m1Q#dg6U2e;&GV|x0BngMx^I`eo#}jR zWJcobeGZeIr3y2~M$I-U`1n2Rc-%E9T|h}lzEO427n@*b535)CDDQn()`$fn?3R-toGGI*jmSSRBx0My>>T*{6fH4u8IB2YeKtSn1 z2_YuOJeI}^Pi&irA&~YxLIx(K8c`l^L)d$qMcPff519=KQJXv3AYDx8KSYD_Z>kIM zwkGVkUda!8kNsPvy}@h^i{n}6d&B#?7nB%9(v@arQ~qx_H0McOUf9_-l5~oSUy`m0 zIruQG!{zh0=B$-!aMj_zrZqzo%Ag5I6XR-uHgjwkeDwrDxs$Y+@!28P zw+N0&QsPPPyMX)vHuf^p;I6RBT$HG1F5{r5VS;d(`SqIGivg0BpLXnsE`s#A5)u+B z1tf{pla_7;dWDzz<$rfd0z(7gm7bOcYeo^FLC5*lW_wSFEGXE9uhCG|hFzC)Krox$}->SJNQig-5+(G4f&O9+<{n+qf{M(Lc zjwP-aQG5q}$x$5e9uqRE8!8BGqJcpEY;es<%a5oD6cOT+RJyzo9_Ko?Ffahpp>s9h zv|R>=OcN4)n~n?&Ec0wr#_t=?dOHqxd}*`j%WU!YS5vqZ{rtQPV|i^Seg9^-%Ut5I zyThWHTj=L7jz`k^>9@T^Z&ypOU6UC5$>s0q7!PlltHvQ0vi4Uw(}IP4%!whGw0d)I zk-p58h9N=wRaNKECG|~48G(BM>+x-%+PI(_Z2OiaX<|jN>V)Y(wh=lvH&6EtOjm!& zkcb`T*f|np+H_gikvP))JfQa+yz&c699^HA~GC5@-8$_;6 zXxf2!5~{(vS7Biehk>5+Y6D2MHC)h+gkHVZW{iFS}~l@C)r%6wwfmzy0zDV26REDXXWA~%1sL) zF#MJ5n1Q%Q=Kb8eYv=fEvGAbx;sDkPYIAf*(FE6ScXSy%xT$ip9T)t{RK|7-#7aTd z4QSiPjvkxb5x4y5BQpT&%tOww%b3b7Bi24QNURT)u7bhmPgQ+4iIW z^!dV`_gqm2P7|tN%+Oa-UPUIR`C}^VikoZcrXxJ{@9Z;Ho(<_RGVxvg5Q?%aR8>Fm zT16412@|gnoK#2hX?xO#{?#H2h52K}l|7jxaaX-SF2#meQGxTTZi4ESx))hPPdar4 zrC(7_Vqh9CFpsi#;O@JK(SaScBin%Vzzoj=g;P-zv;Bi-NL{YgvqH?`5Aq_i6!{j&*-S z=&=2Bm@`1@w6;-|@RrxZ=ssB|)+X_lsX-UaHMOFThkTlnv*>ECTfaPkTex~4h_-?d z$UhvRVeBD>$70)lduELg_l4pYM~~5-$6Z}F$kyAr9(cbLaNT2!DMkK|PlQ$S$gzCH z`HruDzHZ|lJwD81u`^Jtl}sYAJRoRvmzmZ0@|c@I9)!gNS$_|fBul>u%4vS*5Dx5h zO?)}(at&K-&}zVRT{%e%QUQNF+Xsi>>G2IRvoy1sy8LsK!ejhvI8t#y4~?_MY;13l zd+~B#N$CEJ)aRSJJRzqxCrrSxmNe>Buu+A<)8u7AUOuPA=`BZ&u+TdsP_zm-_cm8K zmwWgd`1qWP{DDvPv6zsK8IsHjm(2Gm6TZaX{`F{!)J`~a_$?zE!UH>l|4IcV+Cupe ztV+_h?-YzQAH0M1>;R`l^!dBWPTobGA0Z)Dk%=8Dl~qFhqi*+R7LGEJNNB|6z~$_V z+J|Rl)-qBd?0+Ch*cPUjLF{scWjVQwHTYMrY4}Ipm*k#iU&a*`e)t028?EB|YxeNr z@2$%BsTo|NhVGh~lV5`Aebg2jrpJH4P}B&%Jtis-$sIu&#Yp^aH#=V0WV){%p0H0; zptW@EN)K<1FE>$|V41a1V^LDywOy*iz*3g(LgK@|lJrV5zne3qbIY{7)j9ieg1)2F zkBvZib8R0%#*4H0&RKICpuF+SS)nk1ovn~PSfxh&*IK|vWXmXY^LS$zJ5_Rm@=mWH zY2BP|5?2bv>s-AO8+5Xo>F68rJivZ8{vVy|a>zeAw5DSpGQCR;foH6H-;!5mlk#X= zc~Q_@*K=`TRPwcmPe}JFH#3X%_b#3Pfqz(V{k#YJ-?RX=@VBPCVgn?wv}nVRjv`=# zXb(aPfDoHr}Ix+lH`b!&dE|Nuil?|Xc0{(LdT@%$W80LEY~4HR_vi~ zW`&A*S==njXTB~HQ2QZ1_3pPjMI(i4J7`n2d^0#jihSY z8+R8Fl;o4*4`g{PU~sppk_RRBc;?hCiv4ky-BCeE==iqva??7TKZ+;p76BT!PI5~v zdA+Edq|Nh83Z~IF>uQWJ#T1N&TrFE?BYHtj<1iJ#Wu1<34m+5 zXaCV5$^<()yoEB8s8r{)6~7`>*G|(EXDp$+rvIlnn6RS`Bgse-#j zUJwy}=cf|BtTc?4w7AL*#a#aJSICd}w*2vy?lpj?Z1Y@_Pc6*DHLH~F;rDu9OU`=+ zOqiB!)U&aheo127KsO#G`oG$H@2IAuFJCk?QBmnCH7E!wAiX0|QHqEN7Nkg2#0U|P z9v~zL(wl&Qh!Bw`Dj-s&BuH0;NDYJ%ARr(up@cw+@9Xc*eRtMfZ)VoqS@+Glclaad zTE>-p5Br?6_x_aa2%k{-=`k@)`yG7AY~_vGQtZ&g(U}`nu}bv^_VH<`X)OXA1~!oP z^-+04wMfh8B|QCnRjpr=$`U((*zlG=t^S9ViY{aLG1~vtD@*vNFHS|(eUjwF%1T?k z;%)Q)Gxw_0nYTD~HS4~PZ1zZy3&1`91A3}|EB9zRajxCp^|UI_9X|P4nN98|As~87tHYoYSOa2+!+l zzwIAv9qSA<>QWmntAFxXlIuC=nxeV6L7BRUeTD8S{iFusF%aQvZdfQS4-whIfatF4 za87tRF^~-_9b%(7gJr;V#r+4A>I3jjKNSMb!Fg>6on=#sOM~7Ngs%%&QjrNjr*b5w z!MxCQNGITZa-eF4@^QP7wzUiK7q%n3%}?*^5Z!_-^ZbQTYFaX}zy$~gJh!$9w+Ikd z288HE3n0~WtsiHMYt$zh-+1L%7g;)&$sQ-IxjE_o0R>$B1L{wx3gM@$Ua9B>v@>wi zezKs0ooo7&_BS9-)BW!zgZIxG888)rKF0{9=nmbPRm@6YRVsH7nMsv_P*`munRSc4 z<*`O%QRC-c-`#nbe2NA-+06!UyUP<8CkDkxzF2wHiJCg%mfK%2a?hQc>+k2k4s z`s(CG{VO|2CF0C*s*SmHliT@wjALonB4q~n@Mi8Qgu-Y22SlzaVrU>`09Pd` zjkY1S`hf4^h@nNv7<`{}`sacMA;-`Y7wrOX@|g6dhN``qnWlpoS4J1+n#+;?&*!nw z7d0wxn|9uJ^uvf(z9=VcKSm*eOAl}kHErSN2ejUn8BZIul)Jl2KA6jP2b_8pSeO>~ zO}2dU@cpYIptJh3m+kFD(u=y#pFA>Qo&Y)$U6=3m)F+T^c~cH~uN6oC6@n}6 zjd|pZuTsX-5v0h5JHYz{&8Hw@bamHXeVaTH9B6()Ql*kEtNdI zpZuI6%@iL@Z9i=F&f%k1k zDZRfVK%KboWb8{~pNh<}ba)s}?c$;QcQVPTwa%D)_*bkRlRu8kQypIH8Z^T`LbZLi zlJG0}eN&jTr(&p-ll-v<3AEB#IT%;<`5vGqxJ>)GO$JoFIM+5n#ufqt`bdJ6if7Mi zI{d2duVjfd*yKKa8fFmlOX$?|>{y05ci0|8DdA#3DvfJg_ArD}rXXfW(d+;))Elqn zmS(Bfrz2w^QCJ=3RsEq9N~f?@zwhvp@&wscz{EdPRkI$8SYU{bA<;=*c#5f5;v zIaA0jIDYmxtAOmh@`114zDg7;v-j%YV^) zfMwx}*1@kITKbFTJD+t6Oq;Pi6HVcdfWXkB8DvF7xF@aI^_5w_j`Q)RmLu7-bFV$u zw#W%1-67f2RX@SaJ9UT;-`Q>2K5?rC(zYWF)$0Ls3H2JUX=Q+~0|RoKc?B>blcvL+ z>L}2}O3}5Ys;m=s65r%f54Ik-(0xRCEk*zJtT}Hi@C+POSo@-MDz$4moSxD0Xe7hD zzjC+|Xi>9BRo%jw(&~YaGTdGta;-Noh`HnHtiav}@R`_R0WD5W{;VRK_8{_d3R#O5 zfv8zxP{P?Fw$0-jQ$@5I+8oU{Lp|g}=RbHzSN;bNNf$4rNOU`G@U8NOXo_hot{gT- z{|11gy!JqU@@6*Uv}-z?ilapiAwPNKQ^g%tWgeJB!kW&WJMm?+X`>89SNvPi?9e;W zz-0wTH#KsD)rJ#5UI&i&0^o?B_`oWf zVPU>8R1O$6PB?F4f>-aM(((%%r=5@F0$^wL0XR4g#pNc*tP!NITL50n`!o_3H{A2I zjA=E%S?I{ZOj8e&=q6dM*Cj9-($@8y;Lo1pYh-_RV+Hga^8VkC96d(^gC8 zB2Uz2T@1TpeY~AB87xqGi#mHU`l$Q4HH_%J0Tf z4>mg!=n(S(!$U}(()PN@Y$FUS+xw$-%v-fUtM;op z2e!yVSZhkh(iD|6#ZEWmorJ`fxlDG(6;uZ3Upb*dz`VcGQ;0q>PDTGOioe3p!%&e1u4#A~2Yszs(4AG}Dl~S<=kXzA z)(6|usVC2>2Oo&sUt6R(dhuPoe2_}}Gs-$smimfb(Z%j$cQ!JtG85_z(`P)${$4fM zCFfV$I#YUs1opl$hx7Q+j)*FZf=7TyH-5aspgbE(FC|;EUK`0X&H4-bi~#ryEx2HE zird~LGFv+P5kbQ10Kr6I{S3Ez4ELopou|V-D;OTOIR7&UpD#Ev;T<6T7ZN+JV*-}# z296kvA~FlbR;%4$p1N}ap4eSMhK|&=&@ic!uyE*9b@}AW2K}ME?kT|*bJVA%OQ(H@*R| zE;s2z)RI4-Ho&!`eXE_VhO0gdbxYU!Tv<~!2L2w_Cx7zIr*CpOfgqu__t)(!Tl0SI zoWTlZECJXd&%tL1jK}q_59WiZ>`!B0%?=ECWNuD!xd%~J4{t$fA@@=MUZ_RLnH|du zi!BrKl#K-K)Q`j3U0LQ55>a=l)q7^-V3LBVcGpuJGUS5OkSC~22i&qdg%cw3nB7GB zAc59ckutl8z3S7xs_|`v6mWT=l+6X8&q_~`XQ^Cd-*tMhci>|Ff~soy6Kd!q1J7506x5sK%Qb`e^@BKQvoWub^i* zXwn-TGoA;u+*L+=9Tb+i7#G^68gZ1wgHEl5_|5ywd=h-5W)`2B&0;V6CQyuN7>pGF zH9C>W0JqusB{R=QI*QXR;js1+<6Oouz{y7WDJdt2fMY7qt*7|IjrhaAq7Fn}tTGM! z^(tWf3}A!wkDfx$uv92e9)tF4ntzBa$(vmrxqhV*ngEbRwJT=B{S>16NP%3(H8qSl zesd_}OL+^xmDmjDcc^}FMRa}4gZ8|S5Lt*;gMVK;dh!g1bY$b!)Zc9CmXk6)d>R9! zQ!4bUo6u#5!e4eG;@<2EkVi8}!F(G9^f=(;76z=gaEFYJ17|lY955`}T4!Y}u|0|G zQAscIkM$$pM`q^?pnA)R@N6IG&ah+MZ7A{T5FdVIefpy9Ua2E3#MhzV)k}|8iYP97 z8iFsp0^DQno?R<{2~uY>S#L;E-59Tj zWiHn@UVKpEsa91C>}-3NoKyfyhtzzIH%VD2eliStXc6h^_&PwTy&+>#KI1;7YIT|S zozi86(D~#%=jSztm*qmiv`i6mEez zO1)tlEIOdwLeo%hzmc5Hc;bV3OaKzmqknOz;Q=P^yMI)KF6d_AX}+@oo+C_P7Dz~P zO`zVoaMw7CsST-vzoQpXYMLQO8zlTD(cBmRhr!ODtMdD6*KrcPryqQ#pugvsz0Iv-* zx93WN0Wdu&5)idPCbLwy5N-}xSq`^SOkb^B*Ic($Jd$GS+@#d{`XngG@B53&&j9wM z%>G*El8t+2bo_UDJ5Tp&{N{~hijGLc{oyYgHa|@3#T%*1hev7UtnAgvZG~4>0vA^F zU$%X8b~VBnp!`VDCy%VW{<0)2a&_&zb?sL{oHnZF6`#u zRfG7%&2Pv+`iUd$*?eYUc!#VOAjyi{+*@U-XcMWGS+a6(-d_H+lofYE%kx8C&!4Cm z?Vk+{Dx3g{0ItAC$rG5S@=4U|&Ef~-EsA@gSBGr+1lKRO{EDcS=>lgb?mOEZk~O(1 zvVhX1@%^ubi9uB@T>wuUV$8@Se0j?AafxjMk&4%Ua!t$P4N6%He|+CC-R8K>5aC9j%s}bmdu)-|0KW;5C-0k1 zCx)fCwi6C!_XM|po0#N zKgt?$X3o44sH2|+Q5HN)Of{=^P883jEaxfyxEK~ zcU48R_r2 zln-3~tlGk9IB}kLPXYZpL(lOMwBib`Vzt%XMENT5mqF(h+KEszj{?`{?GGGR5=NhN z%F6hO#=S%Gu-+nX7FYtsyExM$1^eAXn*7y;HvkzQzHE>G z3fcP`$7}WVqyo0TQnVuR`ziO8Y>zy%PdB#nQ^pc+KD9BjsYeuhFL)KqAjg%kns<$3L*;fjqeW5>fp_>2(9KCcaceoK@NK(|d}Dljw}?d8CGolACuD+mU=Ola>^;ld*sVJ* zg&7Q0#9;%o=8(6<;F!Ij!zu6>yO>Qw@;qqS5!R-%eU=o4q45#W8?P?!Kqg5oW%L`k z14syEj$zEOW$fqTB{r1Fc6U|Gb&=#rjqx5@c)-#HV2R=+n8MUlfYm~xMA?%@L;i^* z`s$yNM8%}sz7RA}Z)baD=Sak2B+z#RLtrJPgMb2`Ddv@U%1I&oR}^esy`;)^gq(5asn?s#Q8(GSzAr z0v-8Pq>LmLhFKfqhjYRxb9s9X&%mVvni_bh>i>P0K)dB7e)X9^OAI*dL@ zzl--%o>>h*hxoJI$Ct-mk~HySub=R8{WjM_AN-30VCe}|iD_OM4gg1{AaxaA{)rHl zEN6*@0XmQ6?Vf>leaS(+q9@it(p;2^D-~I^B|71w`B8Y5rOL%fZ5bDvU<-ew^oUx? z9Tv{o^sAKqhL=`GwC|T(kNK&QzfAiwFA4_8*)FlQ5sTy_G#n81NMg=8%W zd^BiSRcq*G_$0(7zTV6SDuKT(VoWHRV)d74-?ivK`pdM}V`v;6srV7M3M*YXdvHHI z6LM~L%ifTWwxw1SisY03tTFY18kz3*+_a0PdSV<`jd!GGS8W+8^ED@V+wJT_0eak`5w_+nodlkjmuFW3@l4E;~z^Rb7Bq zfZMG0*_%$4aUh=zRbu!qy+~}IZXep2KI*g9ad4~_(VTdMuc@8qvTJ*H(v1}#|AeV( zfGrw&&Y^peONwKgVH0-1l~bMxrdOUuSxqGIHquWQKQ84n8|*v0V8S3 z{lb!9FGWYkF*n-)xLV3@=PoNHkB>e~#Zb;r-uZ6PAZ~q(0BS%RPr(5yLJ~2+%BFhf zVBb7e=Clzl`JLLOWY$F?HJN~i(95az7wO%M`>x`b1-+(7;dM_2U@|KSn+aF=D~daK zADnkF9(j?-WXvstu)^ptCmpCHx>J}Tzcl77Q5*kaZM`EC=b6EtP;3L@sw~QOVjo?s zh#ua0U>!c8aqs=Og_^QT%Dhl7pR}34=})}5-ltzQjxwJORqJ7*Ne|Hg8#xw{>e`>t zQqx@!qgKJN@SS+5}wHhc^P4K0Q1O>|HUx*hhyrP zblRD2Wz+XxdQfd)BLM3dumQS_G0Rm@DB&J2JyC8 z8d;@Jk9H6VFQZn^*nrfH-kVOsf2%~|4l++rvcA@#pBf6g(kxZ3UawRm$tBMDe3RXT zJ=9a60QJoFI+XR=(B}=)gn&AM+(VtD_)eVm%evL?@zI9eK0WD|&EcZsyrN|C#dl^v_L1j2?~1Fwl?nR@cu`-? zcxQ5=`U|z-)#Z2&+Y8^mn4LW@33elWW~FNF!^$Bn$h@&kKd&+b?tFc4+-UK#sBB$m z$7e+cgmbdZ(8{BaX%T+BYWxbwIbkGsI+i~H^TEOU~jgFKJ12{QmkHg|0rxFFj~1{BY!c) z@()PAg44`!V;(+GNgBaTC$(e;*nzoFaz&91YGo5Z9i0(U(DAOMpp~>JJwm*wt9#V= zX{h?`bqAw;tPK8VDCGsTSXl$quMF{2*<*6Bup!iQK<>-_cbztuED%#S_a~oL!Tqkc77fz(e5$&<@8 zXMJY!PPvB^#fl--0yVD_zyEX`bu?BgJ3#4d$WN|4P?Vh9DSNz8#fC1yxD40!oJuez zfBf*KGsiL2VZNH;=6w;N#ww7LkN~d@p1U6un<>{fkUu^VrNR)4^P{3WbQ{jrumydo zzQDFxE1!u$p&?xzT@})QL1=^fSqveCC|sqH=Gn3gRxQ%AIIc9ubHo^(2g7!={l~V( zV|QAnqFPk;GLKPQl7QHBbFb_YXg%V-)+L*bS1Nn@Wq4B;^aQjY1kNE%q%A6gc^R+He7o71m`8(DEbas1SCgTppYzPCPi9XGn~4hK7;2yt&9 zO9UzxTj(t2q4?uS6^)~eYc33J4W^U-j{y8-Dt~Ok2OLwl+~E#>6dzIPb7pC!$GyDX zaHU-*_*cC-?xB@5^3veOVi{3(S}8}ZSMy6mtG-m)vmp2QieuZ-GkF?Uc(-mJcn~@) z2M(n7QhHHmn92mK_?cW*qE@Yqp!c!$)?;$!8nd2B0psmDhpJAS+d+#hb^PtT(rfF6b^?M^{sSyl}!6UZf3{$Kqg7d@4s-#x7&S=NS$ zU@Ly1qsajP{#K?uX;JSmFL2N1ci)BLV<1pT4oFf+>!5y0lg&~daN@W8@HS#3F-4BF?k?(#OW&2M`D*;fKhzD?q?<@dLMEXJX0INY*Q9}Gr~{Ybv`Ow=pj~3x8fXa3b?y7OkUI?6(%tSpEm&1* zuMNu#UXr=HA@cwnOs}V4TA*S^Qoo^x3{9~U?c3M8(hn%5uQh*tn{0sm$SbwCbJbEe zKUFkmF4i@OcR6Fa{$$mi;C3TPia}2w55NlRp&4qlD!~Ky4|B8SnU(jTpBZ21>47xW`aB zV!-L(BNu6>aO%vhXQ_?&{lI-1l%UDRzcr)yWejd|eMs-fqTw~z_FLn# zfgyoqU*I!%A$GStJCmG!eHzk~BxyBy&=%@^rugAd@^5kXrEz4xr|ikZ3*L4Fh15{> zkp-+IQ<5H&kLX1m1ExqM2Tw0w<%3mMf3AM&+pRu+LN8>9QZ8J>bx=VT^xVv*!a#f0 zJI}Yoxf2buRPV7OVrWrAPO2Vn>igV#DeC22BBhhkwa((g8=?WUsY`Je=r@Z^*T#r+ z#-+6xaA1Ja%p~ik)uiGW>fgu12TT5~^ym7JY5KN#DO0g*S=aWQ9l7Fm6^x`7Xvs76rv3gvUn2r_w21i(zB`MZ{USM6iWs+5&U zsYsKVXWZVra?jP(ZwD_U2>%}0qRF+Y%`>*uQE`ARIIF~ysay;{sPd`aOLtm9#(fCMkOFC)7BO@67S-2Xz$MhXeV34-y{wU0*u-tFeO?{0}%sb}GB5 zrR*>5;`5jzo>o@D$_gOLsk^T+zj@W@_N;^y8=3;?st|u7N{HUeDw{z!D?10e(D*A> z*4aa)^~_b($D{Ry?LGRj9`H=uHR~-KL(cOaK#qHDI4XuVYbbIx3I|?1*s*#gkbO1> z<<&Db7t1KL7K~|~y5e$md3dx&a?a2hkQ4$$^1VM%YF`U}^IF$Y=3)&EWG(X-wGUSR z>N9PhG&zSD<9vUBf(yNyMIxVhgUuVvZIJHmJ_I43=gVoG%z7wM^)h-uI?{ z2qD}K9m|i8AE?)?60e&Fw)ydSIE69INq6?7sZz0}O4ZJuBMl!s6+Cp?e>jV7-9hLq zZBx{{CXYn=k@#Heo)5Tdxw|didZvsU86p}yi`A+DeUqO$8jair`c6mZCfwXKXNZ!b z=|!!WgOC|IRxN2K{1Im7_-Q<=(zoj@ycNRbn{Yu*xnwS3gI-_)ib@#XW5dra__gc; zJ&JJ_fxAI3R%nMj%P~ZABf_thTSBbul#UO$ujIyuCCq;RE;_&?Hut8Tloen}<(iBv zpbDan;y)r@W&w^6#FE4hUQZqmWM73}y0(2O`7poMQxBbp9+1qf*WVY$vJ5nXm)jb2 z{MU$MGAXChk_XnrZr=?Dobf!F!oTdmw0l4A`zw8#a61`FgI3l%ugeieMW>+^e@Q^s zfZ1aov4EHc*p40{DZw$=L7?yE!MGTCB@p$XcJwvO3t#mRQ`c(=_i07nMQ_X6cd+8? zYS@u!7{;E3bbq!0J??$S(IYxojX@jJrZF4QIG|-}p(ecqC!sk0q4fbzcH#H_;}hIN z%53TfkgGu0c@m?Iobc*b03U#H{F?&0C=hlcWl@{sd<-Z9#_)7#95TdLurS{lx6jYI zugi_sz$Q9-Q1c%ERnV3D8-@@vQMqQ>nPEWsx@M)BBNH*^rxtg+y)VSbpSh?&>xgpr z0<>$jNiDXjBW`{0Ek4(?tq*VCf8B93VVuL}y99Uqn&P}?Gz4G(8US6`xoId32h4eb zetTz5v#Qv}!5K*FjwFpAP?d*2ScLJ{UglIQpzKz{9R+X<;Jq|Yrp&9{fdzT6l-`>$nAsjM}qiAebhkaGSnZ{MT)$Dc_pHZEwq?khu>*=V8`yN zf#_slG+>Vfq38ZRG$b@YLn61Z4XOP|GYUA?6EG0%l5=nNcOu60~Jmt^e8xT=bAMb^FTb^l1jp*NE;$CZ;i zx1+4h3%YREEZ4#3teqSv&Qr81O8wMC<|IY{@oKS+P%Z5ma$!j|xiv-OeJEa*=bZn$ zGh>HZKtX8_x&^E+iG-ef8w>ic`ua2YFFT2G{%^8b<4=Lo+^GR^MzRZ7HF^tG$n)qt z3XBUezWlR2`(VOHVVC$l4-E)IN3@FVIQIh&^Tf`o@r$uh-c4@bfC+vpZcx2oQ^_ldk4W}9@f7)Rd|2`=telF z=w^Q7!43o%@N7(LeaqrS9cv}^E64AYUra8(C;3SKq%;20HSG2!5k2jd)-=GyF8|;A zEF38&DS4M<#uE3+Y{&q&Sql5R(@BbSQLrB{_SF(c4=MaDBv#N@SP^IY$vc&q|bg%Z%t&pVEg?a)pLC>$3>ClmFKry0#8*KN2c$m&T& z%O1yiRI{>ikM11qHat6pBl23;{JhU0o49IH)zD~02*o`PmVMsy$Y zqrr>jZx(dK@0G6wh+SEl`>`I7P)pkKmn4@2Cx~2kFP9UYB5@lX`bG%?A8nC;uLY%F zW*Uc-h84%Mw~v)uiIbwDi%eMqRphBO5eU$hu_okAqRVoIJdG@hdydq5syq; z&b7i1s#|+`=9j#%cY6I0TG!vgC8#~oME*Hz!9_E@3dHLvo!XQ6BG#A8{=;ARKl;G` z$^W1K&(Qz>$2{kM@eAHYw*9m2K;{ryPIY=fd1D5=)dCH@&EbxuWg!#0YV(@ zr=Em7;uyFN{QSE4hS%Ei>t-JBP^i=;9p0gMusz66WDIPty8D*hb=eJu-A%H4GVC6Q z|4G+`rp}3wQv)ENMfmr{@u&A+zS#~Ogr4u;3RQn+X!37w0#>a_Y)y2t;2Si)jC~PJEnVe| z-w&|7ruP1X%mHfk;}Cl9|MU$S_V0d$_WIpb_#2J8tFXHY|NUgzjfLG<*o}pMepm1A zh}|8ryCZgY#BK(?TSx3xQ@b_gZe_jOU)b%k?Dm>=J8rvu$KCGhZV&puYA2qnX=e|b z{10^D4@mUR1kX_sj_kq(8qxi|9Z?}eB(Qnr^@Ef^!%eNc{|21=H}ItIUj|S9EAk|E zpLv&8^KZof|DXQdP4jOp((b?SZlr%61N?sm{^d=>e}Y~_#ZLu%HS=X8#niRT|NI@l z=&3NgQff_9-cCZSW54l{3LN+{Z?;bfkerV zv8BynmNC7UIywdUYPPX$qyS%d3t04K@_gRb7&FYdrSm+U+SzolMJ`m`>owsG!n5@i zBn}C=H=VuTHtWj3lto;iT&$Vc)N>bTSEluV>WqhVGX65tneINtg3(r4MOyqZ(n>YS zhFnt_N$w38pQYY%?V*tNg~SJ0QgNXsHjQQM{mRs$JH5)jkWlG;u$nrmq`4RJu6yE8 z_pwMmmv+_9b=B1N3lWTu=ZlPQO6N1~NY;TbBNl07Ru+@zJwA5=kz8dl`ta0g*H7lY z(Jk-RLj{HO1xlYFbhY}BDy&j0C(?1y88BIlK$?}ity4v_m#pAQMSU7Fdza94@eWuu zr%M!58ZTXE63TZQ*QzY7B8td))MxRY`phz&aO|PUNs(O$KLgO5F_Tk>|{A< zQR-<=>6fT)x2*fw;(+>d^oaOn*>RN-4|itO^R(+((Rl|`idIscco}<;K7%MVq+IG{ zs$u(_6XjX*h?Rl%Ty2f7{DiGS_Kc#ea7vqwa0+||M?ZmQCSnB9i$nN7Ad{}^OCJkR z5y6%v1FTSjU!z8gy?pNUSr5+&SK`fvngI1>*xJ<711Z`AJc%O05!^XVucnL+17<34 zYSER3AtP}(cvL$G*}RXmv~`#vcUtny8QJ)pL*5*s;0~+p;}8Md(w#xvMv6UPSGdpf z4@eH*4y7GQ0=%923RSP3G4|d{F?unGb6*`n8xMN=TH3bfTw1|srmuIfvfpWcyMI5i zK7F{jg;RYWZ+U6PR~)dGi{$0YQs5RNz0WDM$%t6RG{C#<{u5E7fn<;SK_|bRjX>G6 zyD$d~c>oP)IXw$dOGO76+7DqKziJ$K^1bJM#hC&jULLWl7wQky{;J1~_R|9C9F)8! zeQ0z8FAN;jVD5!_UXpLCZg!^RyIwLg^Un9}2P!?alFN@%YDapbbk5Xh+&lrteBQ9d zgFmCA{eZL+)q~|B7+T4tx@p{g94LQ(&FoVr)l^n(CL`fyjN$8F*r-xFMFR;1KkuB} zcXqDYNAwE|)JKVSt$34x?+N-aF&3#tAlQW{eAiK=1;_cv zTh`wj^^$aXIvjZI+-iL6b{u;@nCeUCo9v_*WoUOpJA||fMVMXAhs9@clXhn1V+KLC zEzo@%tAgw{bY(~QW8^)xq|4OAva?-}2^OK>7vgdz|8pFkTNK2Rx z2*9rJvHz_JzF6hU%@Ze@Thr~1?ai>h2^uSCGfIc)!GDg z{*Cm}!wb$aZ!J3*J*s-Tl7ug|>-VTAenF-;RizD01Y3CTXotTiUIf2prB4xwKZ`eS z#GWOsa&5AjC>b4mmZmhPD*A%|qU`9r5Y&+q0q?q$K%Y3b?u3#L~1`=epai$6YF!lIcGkzNsJf+lGEm2G(Xeek)Zx& zQcCQ=UHdTqKCcS(h)w$7Gg(H&G~oob_Fk#8CoT~7n~i<+Wpo7QabZP@Wm&n z!`-30V|o`+81!| zov~C~L+|VS_q0O*gQ z9XX2Yd@U1)0B5E!)Q`7Td+E{ywouuD7FmgVM`L$JdD($^pU0XHd0(G(oQYq%vd-jS z0dB%>B_3@kLlTA$ald;jdh9}M5iSkJdBzz@H9#puT_+Hj;gGr1cW2`uVTpD9?@H zD05w4!bA4?9m4NFpcZr#U^HtxnXS;|BoyA+uNi&OwVr3jxvT3Kh;vO%se>!Ei7S>l zLZ4;GA|Fy9ZC#i|+~>ieuKIEOMyiKlX3dBBDhj*GoX{@g7gy|3vO=ziKI1-YHL z62UvsH`JT5P7@9pZjg<9EP6Eg;YjV8gWyXi+?ip*NTX*yxg5V+BKf9eZ1JM%KhN< zhcio(2RI=%Mm$XEpI9EIRv%k>{;G%3_X9Pya_;b~VpW$HrB^v*cpS6ei##A}sb5x| z#eQ^Kv4sd4i8A*9_g@67!00&LfGs43)S-!0IRJ)Ym-ut=pIOJ(zHcW_f_3!p9yw_! z0p=mfrJ`k1FQB4|NMDwgh^(%9^iZHJzu-?W#|nC_2+-Sn13= z)Q5|J5w(z!pj}8_+m1s?RjaGvtup1hR5=Z$lm<6x-cGQ#nTOH5Xno15H_2E9R~;_i|wXJWmz>N{V)05N>hd|2N&>WaRYfM()~1KgJ{ z$Aou8oYV}BtYasjbD;?M)x*Siq0#Tol@XG1@2#spITnANOg#UqZv0VU$`g*wlZ{6;#k_acQ`~%)CVB|ZrMjy9A;ox`}wtw0auUssbPUkM9#Tr<7EFEb;32~~^?pr6e}`p{k9)4A+NMKbt) zjW{N!!UK;Q-N?go7~DSe?r+byNr`oyd0 zn01}S9bOxJVbOdBFg0C%juuAeDWGH80Jr%MH)4OaTuV6e_`0UYPlMAmp_AXZLe06J zLZ3qqpiWG%f2cB%^y}y+&bX8w2SrYVa^S(Q6}CxZZBHHo1Fhy2w|FP#TBH;KOJ+;H zDQtp<P+wR>K+x-?MAtv2&D3&HqRKSG^QPWQ1eDZFY`Q4 z9@H@_>(QmE@2Keu&gnP&IW%3!j37T!_N03b@GeSoC_R`T{+SICk0HxDc2OKqtoam6{<=rrb=q1CU4$C zrDYs$7q;_@a>qd-gQrWbCT>Rat>XtV&d?}B=fuRci=)3bMa?wRl6o;C7ENGE2@bZp z2jP92`QeLFI&EGsa(&gj*3Z*-LU{fyP81m6%0KeKf|cI@n;r+>AjtO~xpZE?LG@$1 zvC_xdW0_v@wi}M`-{sx_fttA9h|(P>q{$=8s}v}7$PW`KEpbQtj`K_=an%%qbeko_ z%ptvfn)alLF|X2`i=`@!l7W61QyAP_w+C0a*h~LSgY|pd`?B}(G{=uKlBW#lJ!-%W zK)J!ceGDb_2UMO&`U5gsS^V*LejLwjKzyW&gYf?WQTRS%Emn4+S^ga#ihBjo%$kGG(*uGoJA7AJ-`SeuG2gz zs~sT{tr~FcpoEgNL0Zl|wK&}~KLvg_n@qf0dWX6>xiWtUVvL)_pbr`G*(0@UfD_TXTvV)iSaX za`#|HX1W{-T~59LJ1~4O;@jzlUe{08Dz0|?_7kyogq`~*h1Y*qdhP!CKY-iawfH}C pEjV@^Uv_b^e~ydo{{7#Mhh4{)|I3<1yFveN2mOC^jrjkJ{6Cl_6)pe( diff --git a/docs/interview/WePay/WePay.md b/docs/interview/WePay/WePay.md deleted file mode 100644 index 1ca2679b3..000000000 --- a/docs/interview/WePay/WePay.md +++ /dev/null @@ -1,34 +0,0 @@ -如图,![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/interview%20question/WePay/WePay.jpg) - -就是一个slide windows 的题目 - -```python -inputs = [5,1,2,100,2,2] -def alert(inputs, windowSize, allowedIncrease): - b = [] - tmp = {} - for i in range(len(inputs) - windowSize): - for j in range(i, i+windowSize+1): - if j in tmp.keys(): - if j > len(inputs) - windowSize-1: - tmp.get(j).append(inputs[i+1:i + windowSize+1]) - else: - tmp.get(j).append(inputs[i:i+windowSize]) - else: - print(j,j, i, i+ windowSize) - if j > len(inputs) - windowSize -1: - tmp[j] = [inputs[i+1:i + windowSize+1]] - else: - tmp[j] = [inputs[i:i+windowSize]] - b = [inputs[i:i+windowSize] for i in range(len(inputs)-windowSize)] - print(tmp) - for num in tmp.keys(): - if all(inputs[num] > sum(lis)/windowSize*allowedIncrease for lis in tmp.get(num)): - return True - b = [sum(i)/windowSize for i in b] - for i in range(len(b)): - if any(b[i] > b[j]*allowedIncrease for j in range(i)): - return True - return False -print(alert(inputs,3,1.5)) -``` diff --git a/docs/interview/WePay/power_number.md b/docs/interview/WePay/power_number.md deleted file mode 100644 index 6b3ae864e..000000000 --- a/docs/interview/WePay/power_number.md +++ /dev/null @@ -1,36 +0,0 @@ - - - - - -```python -import heapq -cache = {} -def power_number(index): - if index in cache: - return cache[index] - tmp = set() - for i in range(2, index+3): - for j in range(2, 27): - tmp.add(pow(i, j)) - gene = heapsort(tmp) - tmp_index = 0 - for i in range(index+1): - if tmp_index not in cache: - cache[tmp_index] = next(gene) - else: - next(gene) - if tmp_index == index: - return cache[tmp_index] - tmp_index += 1 - - -def heapsort(iterable): - h = [] - for value in iterable: - heapq.heappush(h, value) - for i in range(len(h)): - yield heapq.heappop(h) - -print(power_number(6500)) -``` diff --git a/docs/interview/pocketgems/pocketgems.md b/docs/interview/pocketgems/pocketgems.md deleted file mode 100644 index 0b108c0df..000000000 --- a/docs/interview/pocketgems/pocketgems.md +++ /dev/null @@ -1,121 +0,0 @@ -## 1. delete and earn -```python -class Solution(object): - def deleteAndEarn(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - dp = [0] * 10001 - for num in nums: - dp[num] += num - for i in range(2, 10001): - dp[i] = max(dp[i]+dp[i-2], dp[i-1]) - return dp[-1] -``` - -## 2. movie ratings - -```python - -cache = {} -class Solution(object): - def movierating(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - if not nums: - return 0 - if len(nums) == 1: - return nums[0] if nums[0] > 0 else 0 - if (1, len(nums)+1) not in cache: - cache[(1, len(nums)+1)] = self.movierating(nums[1:]) - a = self.movierating(nums[1:]) - else: - a = self.movierating(nums[1:]) - if (2, len(nums)+2) not in cache: - cache[(2, len(nums)+2)] = self.movierating(nums[2:]) - b = self.movierating(nums[2:]) - else: - b = self.movierating(nums[2:]) - return max(nums[0]+a, nums[1]+b) - - - -a = Solution() -res = a.movierating([-1,-2,-3,-4,-5]) - -print(res) - -``` - -## 3. roman names -```python -class Solution(object): - def roman2Int(self, s): - lookup = { - 'M': 1000, - 'D': 500, - 'C': 100, - 'L': 50, - 'X': 10, - 'V': 5, - 'I': 1 - } - res = 0 - for i in range(len(s)): - if i > 0 and lookup[s[i]] > lookup[s[i-1]]: - res = res + lookup[s[i]] - 2 * lookup[s[i-1]] - else: - res += lookup[s[i]] - return res - - def royalNames(self, names): - """ - :type nums: List[int] - :rtype: int - """ - for x in range(1, len(names)): - for i in range(len(names)-x): - if names[i].split(' ')[0] > names[i+1].split(' ')[0]: - names[i], names[i+1] = names[i+1], names[i] - elif names[i].split(' ')[0] == names[i+1].split(' ')[0]: - if self.roman2Int(names[i].split(' ')[1]) > self.roman2Int(names[i+1].split(' ')[1]): - names[i], names[i + 1] = names[i + 1], names[i] - return names - -a = Solution() -res = a.royalNames(['Akk IX', 'Ak VIII', 'Louis IX', 'Louis VIII']) -print(res) -``` - - -## 4. wealthy sam time -```python -class Solution(object): - def minMoves(self, nums): - """ - :type nums: List[int] - :rtype: int - """ - res = 0 - minVal = min(nums) - for num in nums: - res += num -minVal - return res -``` - -## 5. design - - - - - - - - - - - - diff --git "a/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" "b/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" deleted file mode 100644 index 32c443af2..000000000 --- "a/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" +++ /dev/null @@ -1,246 +0,0 @@ -最近正在面试,最开始因为没有这样准备过,所以总是被问的一脸懵逼,相信很多人跟我有过一样的经历,时间长就是忘了嘛,对不对,无奈。 -怒🔥一上来打算好好整理下,面试前过一遍,岂不是美滋滋! - -# Java基础 -## 1. 面向对象和面向过程的区别 -- 面向过程强调动作,物体本身只是一个属性或者参数,具体为一件事该怎么做。 ```吃.(狗,屎) 吃.(🐶, 💩)``` - - 优点:性能比面向对象高,因为类调用时需要实例化,比较消耗资源;较底层的东西比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。 - - 缺点:没有面向对象易维护、易复用、易扩展 -- 面向对象强调object,动作只是一个函数,具体为一件事该让谁去做。         ```狗.吃(屎) 🐶.吃(💩)``` - - 优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护 - - 缺点:性能比面向过程低 - -## 2. Java的四个基本特性(抽象、封装、继承,多态) -- ***抽象***:就是把现实生活中的某一类东西提取出来,用类或者接口表示。抽象包括两个方面:一个是数据抽象,一个是过程抽象。数据抽象也就是对象的属性。过程抽象是对象的行为特征。 -- ***封装***:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行封装隐藏。封装分为属性的封装和方法的封装。 -    - 1. 安全 -    - 2. 将内外隔离 -    - 3. 便于使用 -    - 4. 提供重复性,具有模块化 -- ***继承***:父类抽取多类事物的共性,不同子类继承父类根据自身条件不同对父类方法进行重载或重写。 -- ***多态***:从某种角度上来说,封装和继承就是为了多态而做准备的。多态采用的方法是动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。多态必须同时满足三个条件: - - 1. 要有继承 - - 2. 要有重写 - - 3. 父类引用指向子类对象 - - 多态其实就是父类提供一个接口,基于同一个接口,使用不同的实例就可以使用不同的功能 - ```java - Father f = new Son(); - ``` -## 3. 重载和重写的区别 -- 重载:发生在同一个类中,方法名必须相同,参数类型、个数或者顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。 -- 重写:发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类;如果父类方法访问修饰符为private则子类中就不是重写。 - -## 4. 构造器Constructor是否可被override -构造器不能被重写,不能用static修饰构造器,只能用public,private,protected这三个权限修饰符,且不能有返回语句。 -1. 构造器与类同名 (构造函数,initilize 函数) -2. 每个类可以有一个以上的构造器 -3. 构造器可以有0个,1个以及多个参数 (无参构造函数,有参构造函数) -4. 构造器没有返回值(与void明显不同,构造器不会返回任何东西,你别无选择。) -5. 构造器总是伴随着new操作符一起调用 -6. 构造器不可被继承 - -## 5. 访问控制符public,protected,private,以及默认的区别 - -| | 任意地方 | 同一个包 | 子类 | 同一个类 | -| :----------------: | :------: | :--: | :--: | :--: | -| Public (接口访问权限) | 🌈 | 🌈 | 🌈 | 🌈 | -| Protected (继承访问权限) | 🌈(需要继承) | 🌈 | 🌈 | 🌈 | -| Default (包访问权限) | | 🌈 | 🌈 | 🌈 | -| Private (类访问权限) | | | | 🌈 | - - -- public(接口访问权限):任何地方都能访问; -- protected(继承访问权限): 介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。在同包内的类及包外的子类能访问; -- default(包访问权限):即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访问。 -- private(类访问权限): 只有在本类中才能访问; -(只限在Java语言中……) - -## 6. 是否可以继承String类 -String类是final类故不可以继承,一切由final修饰过的都不能继承。 - -## 7. String和StringBuffer、StringBuilder的区别 -- 可变性 - -String类中使用字符数组保存字符串,private final char value[],所以string对象是不可变的。 -StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,char[] value, -这两种对象都是可变的。 -- 线程安全性 - -String中的对象是不可变的,也就可以理解为常量,线程安全。 -AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。 -StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是**线程安全**的。 -StringBuilder并没有对方法进行加同步锁,所以是**非线程安全**的。 -- 性能 - -每次对 String 类型进行改变的时候,都会生成一个新的String 对象,然后将指针指向新的String 对象。StringBuffer每次都会对 -StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用StirngBuilder 相比使用 -StringBuffer 仅能获得10%~15% 左右的性能提升,但却要冒多线程不安全的风险。大多数情况下建议使用StirngBuilder。 -综合速度```String < StringBuffer < StirngBuilder``` - -## 8. hashCode和equals方法的关系 - -Java对象的eqauls方法和hashCode方法是这样规定的: - -1. 相等(相同)的对象必须具有相等的哈希码(或者散列码)。 -2. 如果两个对象的hashCode相同,它们并不一定相同。 - -- 关于第一点,相等(相同)的对象必须具有相等的哈希码(或者散列码),为什么? - - 想象一下,假如两个Java对象A和B,A和B相等(eqauls结果为true),但A和B的哈希码不同,则A和B存入HashMap时的哈希码计算得到的HashMap内部数组位置索引可能不同,那么A和B很有可能允许同时存入HashMap,显然相等/相同的元素是不允许同时存入HashMap,HashMap不允许存放重复元素。 - -- 关于第二点,两个对象的hashCode相同,它们并不一定相同 - - 也就是说,不同对象的hashCode可能相同;假如两个Java对象A和B,A和B不相等(eqauls结果为false),但A和B的哈希码相等,将A和B都存入HashMap时会发生哈希冲突,也就是A和B存放在HashMap内部数组的位置索引相同这时HashMap会在该位置建立一个链接表,将A和B串起来放在该位置,显然,该情况不违反HashMap的使用原则,是允许的。当然,哈希冲突越少越好,尽量采用好的哈希算法以避免哈希冲突。 - - **注意⚠️**:在object类中,hashcode()方法是本地方法,返回的是对象的地址值,而object类中的equals()方法比较的也是两个对象的地址值,如果equals()相等,说明两个对象地址值也相等,当然hashcode()也就相等了;在String类中,equals()返回的是两个对象内容的比较,当两个对象内容相等时,Hashcode()方法根据String类的重写代码的分析,也可知道hashcode()返回结果也会相等。以此类推,可以知道Integer、Double等封装类中经过重写的equals()和hashcode()方法也同样适合于这个原则。当然没有经过重写的类,在继承了object类的equals()和hashcode()方法后,也会遵守这个原则。 - - 当集合要添加新的元素时,如果每增加一个元素就检查一次equals方法,那么当元素很多时,后添加到集合中的元素比较的次数就非常多了。也就是说,如果集合中现在已经有1000个元素,那么第1001个元素加入集合时,它就要调用1000次equals方法。这显然会大大降低效率。正确的做法是先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;如果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址。所以这里存在一个冲突解决的问题。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。 - - ## 9. 抽象类和接口的区别 -- 语法层次 - -抽象类和接口分别给出了不同的语法定义。 -- 设计层次 - -抽象层次不同,抽象类是对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。抽象类是自底向上抽象而来的,接口是自顶向下设计出来的。 -- 跨域不同 - -抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is-a" -关系,即父类和派生类在概念本质上应该是相同的。对于接口则不然,并不要求接口的实现者和接口定义在概念本质上是一致的,仅仅是实现了接口定义的契约而已,"like-a" 或者 "can do a"的关系。 - -## 10. 自动装箱与拆箱 -- 装箱:将基本类型用它们对应的引用类型包装起来; -- 拆箱:将包装类型转换为基本数据类型; - -Java使用自动装箱和拆箱机制,节省了常用数值的内存开销和创建对象的开销,提高了效率,由编译器来完成,编译器会在编译期根据语法决定是否进行装箱和拆箱动作。 - -## 11. 什么是泛型、为什么要使用以及类型擦除 -泛型,即“参数化类型”。 -创建集合时就指定集合元素的类型,该集合只能保存其指定类型的元素,避免使用强制类型转换。 -Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会在编译器在编译的时候去掉。这个过程就称为类型擦除。 -类型擦除的主要过程如下: -- 1. 将所有的泛型参数用其最左边界(最顶级的父类型)类型替换。 -- 2. 移除所有的类型参数。 - -```java -public class Test4 { - public static void main(String[] args) { - ArrayList arrayList1=new ArrayList(); - arrayList1.add("abc"); - ArrayList arrayList2=new ArrayList(); - arrayList2.add(123); - System.out.println(arrayList1.getClass()==arrayList2.getClass()); - } -} -``` - -在这个例子中,我们定义了两个ArrayList数组,不过一个是ArrayList泛型类型,只能存储字符串。一个是ArrayList泛型类型,只能存储整形。最后,我们通过arrayList1对象和arrayList2对象的getClass方法获取它们的类的信息,最后发现结果为true。说明泛型类型String和Integer都被擦除掉了,只剩下了**原始类型**。 - -```java -public class Test4 { - public static void main(String[] args) throws IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { - ArrayList arrayList3=new ArrayList(); - arrayList3.add(1);//这样调用add方法只能存储整形,因为泛型类型的实例为Integer - arrayList3.getClass().getMethod("add", Object.class).invoke(arrayList3, "asd"); - for (int i=0;i Date: Wed, 18 Apr 2018 18:37:25 -0500 Subject: [PATCH 0498/2496] . --- docs/Interview/Google/Google.md | 59 +++++ docs/Interview/PPd/ppd.md | 91 +++++++ docs/Interview/WePay/WePay.jpg | Bin 0 -> 492900 bytes docs/Interview/WePay/WePay.md | 34 +++ docs/Interview/WePay/power_number.md | 36 +++ docs/Interview/pocketgems/pocketgems.md | 121 +++++++++ ...\275\215(Java)\346\200\273\347\273\223.md" | 246 ++++++++++++++++++ 7 files changed, 587 insertions(+) create mode 100644 docs/Interview/Google/Google.md create mode 100644 docs/Interview/PPd/ppd.md create mode 100644 docs/Interview/WePay/WePay.jpg create mode 100644 docs/Interview/WePay/WePay.md create mode 100644 docs/Interview/WePay/power_number.md create mode 100644 docs/Interview/pocketgems/pocketgems.md create mode 100644 "docs/Interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" diff --git a/docs/Interview/Google/Google.md b/docs/Interview/Google/Google.md new file mode 100644 index 000000000..d14b8fae0 --- /dev/null +++ b/docs/Interview/Google/Google.md @@ -0,0 +1,59 @@ +### 第一轮: +1. Talk about the work experience of you + + +2. 算法题:给一个number,例如21200, + + + +Idx: 0 1 2 3 4 +Number: 2 1 2 0 0 + +- 0th位置有个2,并且整个number里面有2个0; +- 1th有个1,所以整个number里面有一个1; +- 2th有个2,所以整个number里面有两个2; +- 3th有个0,所以整个number里面有0个3; +- 4th有个0,所以整个number里面有0个4 + +满足这个property的number是self_describing的 +叫你写一个函数 +def self_describing(self, number), return 这个number是不是满足self_describing,True or False + + + +3. 算法题,面试官自己工作中的,写了一串, +- 问你是```BFS```还是DFS, +- 问你是```recursive```还是iterative,recursive方法有什么limitation +- 不管结果,你给他的代码转换成```iterative``` or recursive + + + + +### 第二轮: +1. talk about the most challenging work that you have been worked on + + +2. HashTable 和 BST的比较,你知道什么说什么,时间复杂度,实现,插入,删除,查找 + +3. HashTable 和 BST 的concurrency对比 + + + +4. 算法题 + +首先,morse_code = { + 'a': '..', + 'b': '.-', + 'c': '...', + ‘d’: '-' + , + , + ......... + } +给你一串words, +- 例如['ab','cd'],这时候因为words里面的两个word的对应的morse_code是一样的,所以我们返回他们的morse_code,即['...-'] +- 再例如有很多words,有着相同morse_code的words很多,你要返回所有相同morse_code 的words所对应的那个morse_code,例如['...-', '..'] + + + + diff --git a/docs/Interview/PPd/ppd.md b/docs/Interview/PPd/ppd.md new file mode 100644 index 000000000..74b73713d --- /dev/null +++ b/docs/Interview/PPd/ppd.md @@ -0,0 +1,91 @@ +# 第一轮(一个很nice的QA小姐姐) +### 1. 介绍自己及相关项目 + +### 2. 一道简单算法热身,2个排好序的数组,如何取出它们中相同的元素 +答:O(N),就是两个数组同时从```index = 0```开始比较,小的往前进一步,如果相同就加入到```res```中,这样```n```步肯定可以走完。所以是```O(N)``` + +### 3. 类是怎么加载的 +答:五大步骤:加载、验证、准备、解析、初始化,其中解析根据是静态绑定还是动态绑定, 略... +详见[类加载机制](https://blog.csdn.net/ns_code/article/details/17881581),当时在这里看到的,就记了一下 + +### 4. GC 的原理 +答:没引用的对象就是可以回收的了,不定时选择回收与否, 略... + +### 5. 栈和堆内存的区别 +答:略... + +### 6. 永生代是什么,为啥要有这个 +答:略... + +### 7. Spring如何实现AOP和IOC +答:略... + +### 8. 平常开发管理代码用什么方法,Git clone 还是 Git branch,解释一下它们的区别 +答:平常用Git branch,就是按照功能,bug修复开分支,不断merge, 略... + +### 9. 解释RESTful的好处 +答:根据方法不同判断api的功能,非常方便,略... + +### 10. 遇到的困难和如何解决的 +答:略... + +### 11. 你有什么问题要问我的 +答:内心。。没啥要问的哈哈哈😂,略... + + +# 第二轮(一个很严谨的后端开发小哥哥) +### 1. 45分钟做了一套java试题(20单选,2编程,2问答) +反馈:说我做得还可以 + +### 1. 介绍自己及相关项目 + +### 2. 简单解释下面向对象的基本概念:继承、封装和多态 +答: +- 继承就是说现在有一个类A,我们如果想要有更多的有着相同功能的类,那么只要继承最开始的这个类A,我们就可以拥有跟类A一样的功能,根据自己条件的不同还可以对A的方法进行重写或者重载 +- 封装使得内部功能和外部隔离开来,一来安全,二来可以更加具有模块化 +- 多态就是说,类似于Father f = new Son();这种,这种可以用于任何时候我们想应用更加specific功能的时候,此时多态就产生效果了。嗯,多态其实就是基于同一个接口,使用不同的实例就可以使用不同的功能 + +### 3. Java应用程序有没有可能内存泄露?具体场景。如果有一个Java应用程序在生产上发现有内存泄漏问题,作为开发人员你打算如何对其进行问题定位?现在就有这么一个程序,代码也给到你,你怎么弄?流程思路? +答:第一印象是使用测试工具,先进行模块化检测,我一般手动,注释掉一部分然后检查,采用二分法,一般可以定位到,然后仔细检查下代码逻辑,看看会不会有长期不用的对象仍然被引用着。我觉得工业上肯定会有很多高级工具可以检查内存,但是目前我还没有使用过 + +### 4. 简单讲讲哈希表的数据结构和算法(get/put操作)。 +答:略...小学生题目不会估计就GG了 + +### 5. 如果有一个100G的大文件(假定文件里头都是一行行的字符串记录、每个记录约100个字符),要求对这个文件进行排序,请给出你的排序算法。 +答:过程讨论持续15分钟,先后给出3种方法不断优化。 +- 我们可以先遍历所有行,根据每行的前3个字符作为键放到一个hash结构中,这样问题已经可以用O(N^2*lgn)解决了。被否决,有可能前三个字符都是一样的,需要对整个字符串进行排序 +- 或者我们可以先搞一个Trie树,然后遍历一遍全部存好,每一最后字符再多存一个数字表示这一字符串出现次数,然后对这个Trie树进行层次遍历,依次append,返回。回复说文件有100G大小,假设你手头电脑只有8g内存。嗯嗯,我可能会采用先把所有的文件分开很多份分别处理,关键在于最后怎么合并起来还是有序的 +- 其实就是外部排序,先将这个大文件分成很多份,把这些子文件依次读入内存,并利用自定义的有效的内部排序方法(也就是我的方法吧)对它们进行排序,再将排序后得到的有序子文件重新写入外存;可以使用多路归并排序。 + +### 6. 谈谈你对软件研发生命周期过程的理解,如何确保软件的质量。 +答:生命周期主要有问题定义,可行性分析,系统架构设计,编码实现,测试,验收,最后维护。至于确保软件的质量,就是要选用好的,合适的软件生命周期模型。 +大概模型有瀑布模型,螺旋模型,快速原型模型。 +- 需求明确,使用瀑布模型; +- 需求很不明确,快速原型模型; +- 项目不确定性太多使用螺旋模型 + +### 7. 你是如何管理自己的时间的?举一个你设定并达成目标的例子。 +答:略... + +### 8. 你如何理解领导力?举一个由你主动牵头推进的事情。 +答:略... + +### 9. 谈谈你的强项和弱项,基于对自己的认识,你打算如何规划你的职业道路? +答:略... + +### 10. 你有什么问题要问我的 +答:这次我准备了,哈哈哈哈😂,不告诉你们,略... + + +# 总结: +1. 两点最重要:1)开放学习成长的心态,2)积极主动 +2. 后端开发的话,一开始协助做好单元和性能测试,做样例sample,先学习,证明有足够能力后,开始自己独立设计和开发小型模块。最重要的内容是打好基本功,写好像模像样的单元测试,养成良好的工程习惯。 + + + + + + + + + diff --git a/docs/Interview/WePay/WePay.jpg b/docs/Interview/WePay/WePay.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9f5eeadb506a3264da89a6f07240aac5d463eae5 GIT binary patch literal 492900 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

    Jv-3Cy$R|jHNNfYsgzX?J12?)}S0a46PrYe$ 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 literal 0 HcmV?d00001 diff --git a/interview question/pocketgems.md b/interview question/pocketgems/pocketgems.md similarity index 100% rename from interview question/pocketgems.md rename to interview question/pocketgems/pocketgems.md From b5f9a77bcfaab1277372d53b2b8112137452a5ab Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 3 Mar 2018 06:01:43 -0600 Subject: [PATCH 0401/2496] Create WePay.md --- interview question/WePay/WePay.md | 34 +++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 interview question/WePay/WePay.md diff --git a/interview question/WePay/WePay.md b/interview question/WePay/WePay.md new file mode 100644 index 000000000..a3048653a --- /dev/null +++ b/interview question/WePay/WePay.md @@ -0,0 +1,34 @@ + + +就是一个slide windows 的题目 + +```python +inputs = [5,1,2,100,2,2] +def alert(inputs, windowSize, allowedIncrease): + b = [] + tmp = {} + for i in range(len(inputs) - windowSize): + for j in range(i, i+windowSize+1): + if j in tmp.keys(): + if j > len(inputs) - windowSize-1: + tmp.get(j).append(inputs[i+1:i + windowSize+1]) + else: + tmp.get(j).append(inputs[i:i+windowSize]) + else: + print(j,j, i, i+ windowSize) + if j > len(inputs) - windowSize -1: + tmp[j] = [inputs[i+1:i + windowSize+1]] + else: + tmp[j] = [inputs[i:i+windowSize]] + b = [inputs[i:i+windowSize] for i in range(len(inputs)-windowSize)] + print(tmp) + for num in tmp.keys(): + if all(inputs[num] > sum(lis)/windowSize*allowedIncrease for lis in tmp.get(num)): + return True + b = [sum(i)/windowSize for i in b] + for i in range(len(b)): + if any(b[i] > b[j]*allowedIncrease for j in range(i)): + return True + return False +print(alert(inputs,3,1.5)) +``` From 1816cf68f985d237a319fc5a7a2d0d02b3564df0 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 3 Mar 2018 06:02:22 -0600 Subject: [PATCH 0402/2496] Update WePay.md --- interview question/WePay/WePay.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interview question/WePay/WePay.md b/interview question/WePay/WePay.md index a3048653a..1ca2679b3 100644 --- a/interview question/WePay/WePay.md +++ b/interview question/WePay/WePay.md @@ -1,4 +1,4 @@ - +如图,![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/interview%20question/WePay/WePay.jpg) 就是一个slide windows 的题目 From 8049024db2fc88cba782906858bc4e27707fc9b4 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 3 Mar 2018 06:08:50 -0600 Subject: [PATCH 0403/2496] Create power_number.md --- interview question/WePay/power_number.md | 36 ++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 interview question/WePay/power_number.md diff --git a/interview question/WePay/power_number.md b/interview question/WePay/power_number.md new file mode 100644 index 000000000..6b3ae864e --- /dev/null +++ b/interview question/WePay/power_number.md @@ -0,0 +1,36 @@ + + + + + +```python +import heapq +cache = {} +def power_number(index): + if index in cache: + return cache[index] + tmp = set() + for i in range(2, index+3): + for j in range(2, 27): + tmp.add(pow(i, j)) + gene = heapsort(tmp) + tmp_index = 0 + for i in range(index+1): + if tmp_index not in cache: + cache[tmp_index] = next(gene) + else: + next(gene) + if tmp_index == index: + return cache[tmp_index] + tmp_index += 1 + + +def heapsort(iterable): + h = [] + for value in iterable: + heapq.heappush(h, value) + for i in range(len(h)): + yield heapq.heappop(h) + +print(power_number(6500)) +``` From 41cf9a7fdea105b25263cbb832c9919ddcf8ae73 Mon Sep 17 00:00:00 2001 From: GaofanHu Date: Thu, 22 Mar 2018 15:51:15 -0500 Subject: [PATCH 0404/2496] =?UTF-8?q?Update=20001.=5Fclone=E6=9C=80?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "001._clone\346\234\200\346\226\260" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/001._clone\346\234\200\346\226\260" "b/001._clone\346\234\200\346\226\260" index 9135c5048..22063ae2c 100644 --- "a/001._clone\346\234\200\346\226\260" +++ "b/001._clone\346\234\200\346\226\260" @@ -1 +1 @@ -001._记得先clone最新 +001._记得先clone最新. From 5e5a3f28117e55a2503f4cec0989e19f65fafc5c Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 22 Mar 2018 16:24:10 -0500 Subject: [PATCH 0405/2496] Update 366. Find Leaves of Binary Tree.md --- 366. Find Leaves of Binary Tree.md | 40 ++++++++++++++--------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/366. Find Leaves of Binary Tree.md b/366. Find Leaves of Binary Tree.md index 569296cb0..e82d592cc 100644 --- a/366. Find Leaves of Binary Tree.md +++ b/366. Find Leaves of Binary Tree.md @@ -18,7 +18,7 @@ AC代码 -``` +```python class Solution(object): def findLeaves(self, root): """ @@ -26,29 +26,27 @@ class Solution(object): :rtype: List[List[int]] """ def findLeaf(root): - if root == None: - return [] - elif root.left == None and root.right == None: - return [root.val] - else: - return findLeaf(root.left) + findLeaf(root.right) - + if not root: + return [] + elif not root.left and not root.right: + return [root.val] + else: + return findLeaf(root.left) + findLeaf(root.right) def removeLeaf(root): - if root == None: - return None - elif root.left == None and root.right == None: - return None - else: - if root.left: - root.left = removeLeaf(root.left) - if root.right: - root.right = removeLeaf(root.right) - return root - + if not root: + return None + elif not root.left and not root.right: + return None + else: + if root.left: + root.left = removeLeaf(root.left) + if root.right: + root.right = removeLeaf(root.right) + return root res = [] while root: - res.append(findLeaf(root)) - root = removeLeaf(root) + res.append(findLeaf(root)) + root = removeLeaf(root) return res ``` From 543527c68c8a3520fd298f8fbcf7d71d90dfc4d5 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 24 Mar 2018 23:39:03 -0500 Subject: [PATCH 0406/2496] Update 018._4sum.md --- 018._4sum.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/018._4sum.md b/018._4sum.md index 10a3c4dff..063dada92 100644 --- a/018._4sum.md +++ b/018._4sum.md @@ -1,4 +1,4 @@ -###18. 4Sum +### 18. 4Sum 题目: @@ -91,4 +91,4 @@ class Solution(object): 参考 - \ No newline at end of file + From fed01d91fabbf6c9e83ed7a4afcbd1747d69a327 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 24 Mar 2018 23:51:42 -0500 Subject: [PATCH 0407/2496] Update 018._4sum.md --- 018._4sum.md | 54 ++++++++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/018._4sum.md b/018._4sum.md index 063dada92..2b8488ec1 100644 --- a/018._4sum.md +++ b/018._4sum.md @@ -16,7 +16,7 @@ Medium 固定两个数,活动别的 -``` +```python class Solution(object): def fourSum(self, nums, target): """ @@ -26,14 +26,13 @@ class Solution(object): """ n = len(nums) nums.sort() - ans = [] + res = [] for i in range(n): for j in range(i+1,n): l, r = j+1, n-1 while l < r: temp = nums[i] + nums[j] + nums[l] + nums[r] if temp == target: - # print nums[i],nums[j],nums[l],nums[r] if [nums[i],nums[j],nums[l],nums[r]] not in ans: ans.append([nums[i],nums[j],nums[l],nums[r]]) l += 1 @@ -45,10 +44,10 @@ class Solution(object): return ans ``` -然后这里如果要continue则要这么写 +可以通过加判断条件,前后数字相等可以直接跳过,使得算法更快 -``` +```python class Solution(object): def fourSum(self, nums, target): """ @@ -56,33 +55,34 @@ class Solution(object): :type target: int :rtype: List[List[int]] """ - n = len(nums) + n, res = len(nums), [] nums.sort() - ans = [] for i in range(n): - if i > 0 and nums[i] == nums[i-1]: continue - for j in range(i+1,n): - if j > i+1 and nums[j] == nums[j-1]: continue - l, r = j+1, n-1 - while l < r: - temp = nums[i] + nums[j] + nums[l] + nums[r] - if temp == target: - # print nums[i],nums[j],nums[l],nums[r] - # if [nums[i],nums[j],nums[l],nums[r]] not in ans: - ans.append([nums[i],nums[j],nums[l],nums[r]]) - l += 1 - r -= 1 - while l < r and nums[l] == nums[l-1]: l += 1 - while l < r and nums[r] == nums[r+1]: r -= 1 - elif temp > target: - r -= 1 - else: - l+=1 - return ans + if i > 0 and nums[i] == nums[i-1]: # 因为i=0这个元素会直接往下执行 + continue + for j in range(i+1, n): + if j > i+1 and nums[j] == nums[j-1]: # 因为j=i+1这个元素会直接往下执行 + continue + l, r = j+1, n-1 + while l < r: + tmp = nums[i] + nums[j] + nums[l] + nums[r] + if tmp == target: + res.append([nums[i], nums[j], nums[l], nums[r]]) + l += 1 + r -= 1 + while l < r and nums[l] == nums[l-1]: + l += 1 + while l < r and nums[r] == nums[r+1]: + r -= 1 + elif tmp > target: + r -= 1 + else: + l += 1 + return res ``` -可以用一些判断来加速,比如枚举第一个数的时候 +还可以再用一些判断来加速,比如枚举第一个数的时候 - nums[i] + nums[i + 1] + nums[i + 2] + nums[i + 3] > target: break 这是当前能凑齐的最小的4个数,比target后面都不用做了 From fd9ddb8e412a90be8fec1573b41655986d05b4d8 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 24 Mar 2018 23:56:04 -0500 Subject: [PATCH 0408/2496] Update 018._4sum.md --- 018._4sum.md | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/018._4sum.md b/018._4sum.md index 2b8488ec1..ba6862056 100644 --- a/018._4sum.md +++ b/018._4sum.md @@ -92,3 +92,45 @@ class Solution(object): 参考 + + +```python +class Solution(object): + def fourSum(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[List[int]] + """ + n, res = len(nums), [] + nums.sort() + for i in range(n): + if i > 0 and nums[i] == nums[i-1]: # 因为i=0这个元素会直接往下执行 + continue + if i+3 <= n-1: + if nums[i] + nums[i+1] + nums[i+2] + nums[i+3] > target: + break + if i < n-3: + if nums[i] + nums[n-3] + nums[n-2] + nums[n-1] < target: + continue + for j in range(i+1, n): + if j > i+1 and nums[j] == nums[j-1]: # 因为j=i+1这个元素会直接往下执行 + continue + l, r = j+1, n-1 + while l < r: + tmp = nums[i] + nums[j] + nums[l] + nums[r] + if tmp == target: + res.append([nums[i], nums[j], nums[l], nums[r]]) + l += 1 + r -= 1 + while l < r and nums[l] == nums[l-1]: + l += 1 + while l < r and nums[r] == nums[r+1]: + r -= 1 + elif tmp > target: + r -= 1 + else: + l += 1 + return res + +``` From e1e091c05fe3a467239a475589f4e4fb15aa2694 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sun, 25 Mar 2018 00:05:16 -0500 Subject: [PATCH 0409/2496] Update 015._3sum.md --- 015._3sum.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/015._3sum.md b/015._3sum.md index 72a73cb31..9f962f9e2 100644 --- a/015._3sum.md +++ b/015._3sum.md @@ -1,4 +1,4 @@ -###15. 3Sum +### 15. 3Sum 题目: From edad408d453c3f0477922747da685803f7f20bfa Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Tue, 27 Mar 2018 14:31:19 -0500 Subject: [PATCH 0410/2496] Update 055._jump_game.md --- 055._jump_game.md | 58 ++++++++++++----------------------------------- 1 file changed, 15 insertions(+), 43 deletions(-) diff --git a/055._jump_game.md b/055._jump_game.md index fe68b059c..1de4f1d02 100644 --- a/055._jump_game.md +++ b/055._jump_game.md @@ -1,4 +1,4 @@ -###55. Jump Game +### 55. Jump Game 题目: @@ -8,60 +8,32 @@ Medium -dp - 问题出现在一旦有0,而且这个0是不可跨过的那么无解,无法达到 -貌似对于dp[i] <= i,就无法达到,不能成立 -尝试一: +看了hint,根本不用这个数组,直接用一个数来记录可达最远距离,非常巧妙 -超时 -``` +```python class Solution(object): def canJump(self, nums): """ :type nums: List[int] :rtype: bool """ - if len(nums) < 2: return True - - far = [0 for i in range(len(nums))] - far[0] = nums[0] - - for i in range(len(nums)-1): - for j in range(i): - if far[j] > far[i]: - far[i] = far[j] - far[i] = max(far[i],i+nums[i]) - if far[i] <= i: - return False - return True -``` - -尝试二,看了hint,根本不用这个数组,直接用一个数来记录可达最远距离,非常巧妙 - - -``` -class Solution(object): - def canJump(self, nums): - """ - :type nums: List[int] - :rtype: bool - """ - i = 0 - reach = 0 - - # i > reach also means terminate it can not really reach - while i < len(nums) and i <= reach: - reach = max(i+nums[i],reach) - i += 1 - - return reach >= len(nums) -1 + if not nums: + return True + if len(nums) == 1: + return True + n = len(nums) + idx, reach = 0, 0 + while idx < n-1 and idx <= reach: # idx <= reach是为了处理nums[idx] == 0的情况,若idx>reach说明已经失败了 + reach = max(reach, idx+nums[idx]) + idx += 1 + return reach >= n-1 ``` -i记录当前loop位置,reach记录当前可到位置 +idx记录当前loop位置,reach记录当前可到位置 -注意这里的while循环的条件是 `i < len(nums) and i <= reach`,之所以加上 `i <= reach` 是因为如果reach < i说明i层不可达,其实也可以直接terminate.也就是我一开始写的dp[i] <= i会导致依旧不可达。 \ No newline at end of file +注意这里的while循环的条件是 `idx < n-1 and idx <= reach`,之所以加上 `idx <= reach` 是因为如果```idx > reach```说明```idx```层不可达,其实也可以直接terminate. From 18a4e0c1adf55adce6ac444b293a04dd8a4a3792 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Tue, 27 Mar 2018 14:43:22 -0500 Subject: [PATCH 0411/2496] Create 258_ Add_Digits.md --- 258_ Add_Digits.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 258_ Add_Digits.md diff --git a/258_ Add_Digits.md b/258_ Add_Digits.md new file mode 100644 index 000000000..2fa72406a --- /dev/null +++ b/258_ Add_Digits.md @@ -0,0 +1,34 @@ +### 258. Add Digits + +题目: + + + +难度: + +Easy + + +思路 + +这就简单的一p了。。 + + +```python +class Solution(object): + def addDigits(self, num): + """ + :type num: int + :rtype: int + """ + while num / 10 >= 1: + tmp = 0 + while num / 10 >= 1: + tmp += num % 10 + num /= 10 + tmp += num % 10 + num = tmp + return num +``` + + From 2f47964ef4cff15a1d3a76bde3c1da28285c795b Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Tue, 27 Mar 2018 17:37:48 -0500 Subject: [PATCH 0412/2496] Create 045._Jump_Game_II.md --- 045._Jump_Game_II.md | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 045._Jump_Game_II.md diff --git a/045._Jump_Game_II.md b/045._Jump_Game_II.md new file mode 100644 index 000000000..c54bfb9de --- /dev/null +++ b/045._Jump_Game_II.md @@ -0,0 +1,43 @@ +### 45. Jump Game II + +题目: + + + +难度: + +Easy + + +思路 + +# greedy solution, the current jump is ```[i, cur_end]```, and the ```cur_farthest``` is the farthest point +# that all of point in ```[i, cur_end]``` can reach, whenever ```cur_farthest``` is larger than the last point' index, +# return current ```jump+1```; whenever ```i``` reaches ```cur_end```, update ```cur_end``` to ```current cur_farthest```. +# Time: O(log(n)) +# Space: O(1) + +```python +class Solution(object): + def jump(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + # Note You can assume that you can always reach the last index. + cur_end, cur_farthest, step, n = 0, 0, 0, len(nums) + for i in range(n-1): + cur_farthest = max(cur_farthest, i + nums[i]) + if cur_farthest >= n - 1: + step += 1 + break + if i == cur_end: + cur_end = cur_farthest + step += 1 + return step + + + +``` + + From 584707f3e14e60ca00fd83d485ea781558d74828 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Tue, 27 Mar 2018 17:38:28 -0500 Subject: [PATCH 0413/2496] Update 045._Jump_Game_II.md --- 045._Jump_Game_II.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/045._Jump_Game_II.md b/045._Jump_Game_II.md index c54bfb9de..ae8caf9a1 100644 --- a/045._Jump_Game_II.md +++ b/045._Jump_Game_II.md @@ -11,11 +11,11 @@ Easy 思路 -# greedy solution, the current jump is ```[i, cur_end]```, and the ```cur_farthest``` is the farthest point -# that all of point in ```[i, cur_end]``` can reach, whenever ```cur_farthest``` is larger than the last point' index, -# return current ```jump+1```; whenever ```i``` reaches ```cur_end```, update ```cur_end``` to ```current cur_farthest```. -# Time: O(log(n)) -# Space: O(1) +greedy solution, the current jump is ```[i, cur_end]```, and the ```cur_farthest``` is the farthest point +that all of point in ```[i, cur_end]``` can reach, whenever ```cur_farthest``` is larger than the last point' index, +return current ```jump+1```; whenever ```i``` reaches ```cur_end```, update ```cur_end``` to ```current cur_farthest```. +- Time: O(log(n)) +- Space: O(1) ```python class Solution(object): From 53b423740977d7ac3688a94adad2907b40f50ce8 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 28 Mar 2018 22:02:26 -0500 Subject: [PATCH 0414/2496] Update 051._n-queens.md --- 051._n-queens.md | 56 ++++++++++++++++++++---------------------------- 1 file changed, 23 insertions(+), 33 deletions(-) diff --git a/051._n-queens.md b/051._n-queens.md index 960ce32d5..3e7c197c3 100644 --- a/051._n-queens.md +++ b/051._n-queens.md @@ -1,4 +1,4 @@ -###51. N-Queens +### 51. N-Queens 题目: @@ -7,42 +7,32 @@ 难度: Hard -偷懒,用52, 依旧需要挖掘 +八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当n = 1或n ≥ 4时问题有解[1]。 -``` +对于任意(x,y),如果要让新的点和它不能处于同一条横行、纵行或斜线上,则新点(p,q)必须要满足p+q != x+y 和p-q!= x-y, 前者针对左下右上斜线,后者针对左上右下斜线,两者同时都保证了不在同一条横行和纵行上。 + +代码中变量的含义: +- col_per_row: 每一行皇后的column位置组成的列表 +- cur_row:目前正在判断的row的index +- xy_diff:所有x-y组成的列表 +- xy_sum:所有x+y组成的列表 + +```python class Solution(object): def solveNQueens(self, n): """ :type n: int :rtype: List[List[str]] """ - self.board = [] - self.res = [] - self.placequeen(0,n) - return self.res - - def danger(self, board ,row, col): - for (i, j) in board: - if row == i: return True - if col == j: return True - if abs(row - i) == abs(col - j): return True - - return False - - - def placequeen(self, row, n): - if row >= n: - tmpRes = [['.' for i in range(n)] for j in range(n)] - for (row,col) in self.board: - tmpRes[row][col] = 'Q' - tmpRes = [''.join(i) for i in tmpRes] - self.res.append(tmpRes) - - else: - for col in range(0, n): - if not self.danger(self.board, row, col): - self.board.append((row, col)) - self.placequeen(row + 1, n) - self.board.remove((row,col)) - -``` \ No newline at end of file + def dfs(col_per_row, xy_diff, xy_sum): + cur_row = len(col_per_row) + if cur_row == n: + ress.append(col_per_row) + for col in range(n): + if col not in col_per_row and cur_row-col not in xy_diff and cur_row+col not in xy_sum: + dfs(col_per_row+[col], xy_diff+[cur_row-col], xy_sum+[cur_row+col]) + ress = [] + dfs([], [], []) + return [['.'*i + 'Q' + '.'*(n-i-1) for i in res] for res in ress] + +``` From 8f75cf7a665062ba64c31929113a7065c7376bb2 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 28 Mar 2018 22:07:09 -0500 Subject: [PATCH 0415/2496] Update 052._n-queens_ii.md --- 052._n-queens_ii.md | 46 ++++++++++++++++++++------------------------- 1 file changed, 20 insertions(+), 26 deletions(-) diff --git a/052._n-queens_ii.md b/052._n-queens_ii.md index 07d153553..1d65adc16 100644 --- a/052._n-queens_ii.md +++ b/052._n-queens_ii.md @@ -1,4 +1,4 @@ -###52. N-Queens II +### 52. N-Queens II 题目: @@ -11,40 +11,34 @@ Hard n queens还是属于比较难的,需要花时间吃透的问题 +八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当n = 1或n ≥ 4时问题有解[1]。 -``` +对于任意(x,y),如果要让新的点和它不能处于同一条横行、纵行或斜线上,则新点(p,q)必须要满足p+q != x+y 和p-q!= x-y, 前者针对左下右上斜线,后者针对左上右下斜线,两者同时都保证了不在同一条横行和纵行上。 +代码中变量的含义: +- col_per_row: 每一行皇后的column位置组成的列表 +- cur_row:目前正在判断的row的index +- xy_diff:所有x-y组成的列表 +- xy_sum:所有x+y组成的列表 +```python class Solution(object): def totalNQueens(self, n): """ :type n: int :rtype: int """ - self.board = [] - self.cnt = 0 - self.placequeen(0,n) - return self.cnt - - def danger(self, board ,row, col): - for (i, j) in board: - if row == i: return True - if col == j: return True - if abs(row - i) == abs(col - j): return True - - return False - - - def placequeen(self, row, n): - if row >= n: - #print self.board - self.cnt +=1 - else: - for col in range(0, n): - if not self.danger(self.board, row, col): - self.board.append((row, col)) - self.placequeen(row + 1, n) - self.board.remove((row,col)) + def dfs(col_per_row, xy_diff, xy_sum): + cur_row = len(col_per_row) + if cur_row == n: + ress.append(col_per_row) + for col in range(n): + if col not in col_per_row and cur_row-col not in xy_diff and cur_row+col not in xy_sum: + dfs(col_per_row+[col], xy_diff+[cur_row-col], xy_sum+[cur_row+col]) + ress = [] + dfs([], [], []) + return len(ress) + ``` From b4c5263db42d57383ec92a99852c4cacc052880d Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 29 Mar 2018 02:20:43 -0500 Subject: [PATCH 0416/2496] =?UTF-8?q?Update=20Python=E5=88=B7=E9=A2=98?= =?UTF-8?q?=E6=8A=80=E5=B7=A7=E7=AC=94=E8=AE=B0.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...00\345\267\247\347\254\224\350\256\260.md" | 262 +++++------------- 1 file changed, 63 insertions(+), 199 deletions(-) diff --git "a/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.md" "b/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.md" index 9287535cb..b0a0a8b93 100644 --- "a/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.md" +++ "b/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.md" @@ -1,227 +1,91 @@ -### Python刷题技巧笔记 +# python有无数奇技淫巧和许多人不知道的秘密,这里用简洁的语言一条条表述出来,不断更新, 大家一起贡献! -备份自己的帖子 +# 1. python 排序 +# 用lst.sort() 而不是nlst = sorted(lst), 区别在于lst.sort()是 in-place sort,改变lst, sorted会创建新list,成本比较高。 -有的时候 - - -**用Python解题经常可以作弊,Python 处理string非常方便, python内置模块非常多,比如排列组合啥的各种....** - - -有的时候 - - -**Python大法好,就是偶尔慢** - - - - -Python也是可以追求运行速度的,除了算法方面的提升,也有些常见函数之间的区别 - - -还有我刷的Python 2 和 3 已经迷茫了,如果有说错的地方敬请指出 - - - - -===========初级技巧================= - - - - --  排序 - - -用lst.sort() 而不是nlst = sorted(lst) - - -区别在于lst.sort()是 in-place sort,改变lst, sorted会创建新list,成本比较高。 - - - - -- 用xrange  - - -xrangge 和 range的区别是在于 range会产生list存在memory中,xrange更像是生成器,generate on demand - - -所以有的时候xrange会更快 - - --  三目运算符 - - -python 的三目运算符是这么写的 x if y else z - - -考虑这种list of list: matrix = [ [1,2,3] , [4,5,6] ] - - -```row  = len(matrix)```, -```col = len(matrix[0]) if row else 0 ``` - - -这样写通用的原因是, 当matrix = [], row = 0, col =0 - - -- list 填 0 +# 2. xrange和range的区别 +# range会产生list存在memory中,xrange更像是生成器,generate on demand所以有的时候xrange会更快 +# 3. python处理矩阵 +row  = len(matrix) +col = len(matrix[0]) if row else 0  +# 这样写通用的原因是, 当matrix = [], row = 0, col =0 +# 4. python列表生成式 lst = [0 for i in range(3)] # lst = [0,0,0] - - lst  = [[0 for i in range(3)] for j in range(2)]  # lst =  [[0, 0, 0], [0, 0, 0]] - - - - -下面这种写法危险: - - -lst1 = [ 0, 0, 0 ] -lst2  = [lst1] * 2  # lst2 = [ [0,0,0] , [0,0,0] ] -lst2\[0]\[0] = 1  # lst2 = [ [1,0,0], [1,0,0]] - - -因为lst1是object,这样写会踩坑 - - - - -- D.get(key, default) - - -如果这个key 没有在dict里面,给它一个默认值: - - +# 下面这种写法危险: +# lst1 = [ 0, 0, 0 ] +# lst2  = [lst1] * 2  # lst2 = [ [0,0,0] , [0,0,0] ] +# lst2[0][0] = 1  # lst2 = [ [1,0,0], [1,0,0]] +# 因为lst1是object,改一个相当于全改, 这样写会踩坑 + +# 5. D.get(key, default) +# 如果这个key 没有在dict里面,给它一个默认值: D = {} if 1 in D:   val = D[1] else :   val = 0 - - -等同于这样写: - - +# 等同于这样写: val = D.get(1, 0) - - - -- reverse list - - -lst = [1,2,3] - - -print lst[::-1] #[3,2,1] - - -lst 也有reverse函数 - - -这也也适用于str, str可是没有reverse 函数的,str[::-1] 可用 √ - - - - -=================进阶一下===================== - - -Python 也是有自己的数据结构的!!!! - - -- deque -   还在用list来做queue么? deque,当求快queue的时候,你值得拥有 - - -- Counter -   Counter做啥就顾名思义了 - - -- yield -   用yield不用return ( 我也还在学习阶段 - - - - - - - - -import collections就可以用了,参见  [collections — High-performance container datatypes](https://docs.python.org/2/library/collections.html) - - - - - - -===============举个当时我就震惊了的例子=============== - - - - -看到在stackoverflow上看到有人求这样一个数据结构: - - -[Anyone know this Python data structure?](http://stackoverflow.com/questions/4098179/anyone-know-this-python-data-structure) - - - - - -Close to **O(1) performance** for as many of the following four operations. -Maintaining **sorted order while inserting** an object into the container. -Ability to **peek at last value** (the largest value) contained in the object. -Allowing for **pops on both sides** (getting the smallest or largest values). -Capability of **getting the total size** or number of objects being stored. -Being a **ready made solution** like the code in Python's standard library. - - - - - -然后真的可以implement出来 - +# 6. 字典赋值 +if key in D: +  D[key].append(1) +else : +  D[key] = [] + +# 7. 字符串反转 +# python字符串没有reverse函数,只能str[::-1] +string[::-1] +# python的list可以直接reverse(),因此也可以借用这个特性 +"".join([string].reverse()) + +# 8. 快速统计 import collections -import bisect - -class FastTable: - -    def __init__(self): -        self.__deque = collections.deque() - -    def __len__(self): -        return len(self.__deque) - -    def head(self): -        return self.__deque.popleft() +lst = [1, 1, 1, 2, 3, 4, 5, 5] +collections.Counter(lst) # Counter({1: 3, 5: 2, 2: 1, 3: 1, 4: 1}) -    def tail(self): -        return self.__deque.pop() +# 9. python自带小顶堆heapq +# Python有built-in heap, 默认min heap. +heapq.heappush(heap, item) # 把item添加到heap中(heap是一个列表) -    def peek(self): -        return self.__deque[-1] +heapq.heappop(heap) # 把堆顶元素弹出,返回的就是堆顶 -    def insert(self, obj): -        index = bisect.bisect_left(self.__deque, obj) -        self.__deque.rotate(-index) -        self.__deque.appendleft(obj) -        self.__deque.rotate(index) +heapq.heappushpop(heap, item) # 先把item加入到堆中,然后再pop,比heappush()再heappop()要快得多 -复制代码 -对此我只想表示牛,并且我硬生生的用它来解过人家不是要这种思路的题目。 +heapq.heapreplace(heap, item) # 先pop,然后再把item加入到堆中,比heappop()再heappush()要快得多 +heapq.heapify(x) # 将列表x进行堆调整,默认的是小顶堆 +heapq.merge(*iterables) # 将多个列表合并,并进行堆调整,返回的是合并后的列表的迭代器 +heapq.nlargest(n, iterable, key=None) # 返回最大的n个元素(Top-K问题) -**补充内容 (2016-10-28 00:40):** -Python有built-inheap,是min heap.  heapq,如何来用它实现max heap呢,看到过一个有意思的方法是把key取负,比如把100变成-100,5变成-5。 +heapq.nsmallest(n, iterable, key=None) # 返回最小的n个元素(Top-K问题) +# 如何来用它实现max heap呢,看到过一个有意思的方法是把key取负,比如把100变成-100,5变成-5 +import heapq +mylist = [1, 2, 3, 4, 5, 10, 9, 8, 7, 6] +largest = heapq.nlargest(3, mylist) # [10, 9, 8] +smallest = heapq.nsmallest(3, mylist) # [1, 2, 3] +# 10. 双端队列deque [http://stackoverflow.com/questions/4098179/anyone-know-this-python-data-structure] +# 可以很简单的.popleft(), .popright(), .appendleft(), .appendright(),最关键的是时间是O(1), 而用list来模拟队列是O(n)的时间复杂度 +# 还有很好用的rotate函数, +# 一个简单的跑马灯程序 +import sys +import time +from collections import deque +fancy_loading = deque('>--------------------') +while True: + print('\r%s' % ''.join(fancy_loading)) + fancy_loading.rotate(1) + sys.stdout.flush() + time.sleep(0.08) +# 11. 用yield 不用return,可以返回一个generator From 7500da04c6f2f05319bc8ae47f55868d89a866cf Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 29 Mar 2018 02:21:08 -0500 Subject: [PATCH 0417/2496] =?UTF-8?q?Rename=20Python=E5=88=B7=E9=A2=98?= =?UTF-8?q?=E6=8A=80=E5=B7=A7=E7=AC=94=E8=AE=B0.md=20to=20Python=E5=88=B7?= =?UTF-8?q?=E9=A2=98=E6=8A=80=E5=B7=A7=E7=AC=94=E8=AE=B0.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...51\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.md" => "Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" (100%) diff --git "a/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.md" "b/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" similarity index 100% rename from "Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.md" rename to "Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" From 8692a1b297d4e75dd28a41e07c65ae8f156e981a Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sun, 1 Apr 2018 18:08:18 -0500 Subject: [PATCH 0418/2496] Update 151._reverse_words_in_a_string.md --- 151._reverse_words_in_a_string.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/151._reverse_words_in_a_string.md b/151._reverse_words_in_a_string.md index fbf3493be..48a966f19 100644 --- a/151._reverse_words_in_a_string.md +++ b/151._reverse_words_in_a_string.md @@ -1,4 +1,4 @@ -###151. Reverse Words in a String +### 151. Reverse Words in a String 题目: @@ -7,19 +7,19 @@ 难度: Medium +太简单了 -这对我Python来说,实在太简单,或许我应该看看别的语言的思路和算法 - -``` - +```python class Solution(object): def reverseWords(self, s): """ :type s: str :rtype: str """ - sList = s.split() - sList.reverse() - return " ".join(sList) + tmp = s.split() + res = " ".join(tmp[::-1]) + # tmp.reverse() + # res = " ".join(tmp) + return res -``` \ No newline at end of file +``` From ef6a7ae908836790723931bc2b04bb9b349e3f32 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sun, 1 Apr 2018 18:09:05 -0500 Subject: [PATCH 0419/2496] Update 151._reverse_words_in_a_string.md --- 151._reverse_words_in_a_string.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/151._reverse_words_in_a_string.md b/151._reverse_words_in_a_string.md index 48a966f19..10414801b 100644 --- a/151._reverse_words_in_a_string.md +++ b/151._reverse_words_in_a_string.md @@ -18,8 +18,20 @@ class Solution(object): """ tmp = s.split() res = " ".join(tmp[::-1]) - # tmp.reverse() - # res = " ".join(tmp) + return res + +``` + +```python +class Solution(object): + def reverseWords(self, s): + """ + :type s: str + :rtype: str + """ + tmp = s.split() + tmp.reverse() + res = " ".join(tmp) return res ``` From e5c520957568ef575dbb72ec60dcb87673aaae6b Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sun, 1 Apr 2018 18:26:02 -0500 Subject: [PATCH 0420/2496] Update 206._reverse_linked_list.md --- 206._reverse_linked_list.md | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/206._reverse_linked_list.md b/206._reverse_linked_list.md index b8fb116ae..71aa2c720 100644 --- a/206._reverse_linked_list.md +++ b/206._reverse_linked_list.md @@ -1,4 +1,4 @@ -###206. Reverse Linked List +### 206. Reverse Linked List 题目: @@ -12,7 +12,7 @@ Easy -``` +```python class Solution(object): def reverseList(self, head): """ @@ -33,20 +33,18 @@ class Solution(object): 递归版本,可以再消化一下. -``` +```python class Solution(object): def reverseList(self, head): """ :type head: ListNode :rtype: ListNode """ - return self.doReverse(head, None) - - - def doReverse(self, head, newHead): - if head == None: - return newHead + return self.reverseHelper(head, None) + + def reverseHelper(self, head, new_head): + if not head: + return new_head nxt = head.next - head.next = newHead - return self.doReverse(nxt, head) -``` \ No newline at end of file + head.next = new_head + return self.reverseHelper(nxt, head)``` From 8ab525f917ed4004daf37486387fc0bbe3aa6e23 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sun, 1 Apr 2018 18:26:22 -0500 Subject: [PATCH 0421/2496] Update 206._reverse_linked_list.md --- 206._reverse_linked_list.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/206._reverse_linked_list.md b/206._reverse_linked_list.md index 71aa2c720..485a55e05 100644 --- a/206._reverse_linked_list.md +++ b/206._reverse_linked_list.md @@ -47,4 +47,5 @@ class Solution(object): return new_head nxt = head.next head.next = new_head - return self.reverseHelper(nxt, head)``` + return self.reverseHelper(nxt, head) +``` From 2beef72201ecd552ebeae6cc40b2820b7cb365bf Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 4 Apr 2018 17:50:20 -0500 Subject: [PATCH 0422/2496] Update 127._word_ladder.md --- 127._word_ladder.md | 83 +++++++++++---------------------------------- 1 file changed, 20 insertions(+), 63 deletions(-) diff --git a/127._word_ladder.md b/127._word_ladder.md index e602a0847..e0a23bb10 100644 --- a/127._word_ladder.md +++ b/127._word_ladder.md @@ -1,4 +1,4 @@ -###127. Word Ladder +### 127. Word Ladder 题目: @@ -10,76 +10,33 @@ Medium tag可以算BFS,其实就是求shortest path的变体 +reference from [kamyu104](https://github.com/kamyu104/LeetCode/blob/71e0ba555ee49befa01fcd9fc78c3528e2ab63a9/Python/word-ladder.py) -按照BFS的微码改了一下,尝试AC,超时 - -``` +```python class Solution(object): def ladderLength(self, beginWord, endWord, wordList): """ :type beginWord: str :type endWord: str - :type wordList: Set[str] + :type wordList: List[str] :rtype: int """ - queue = [(beginWord, [beginWord])] - visited = set() + distance, cur, visited, lookup = 0, [beginWord], set([beginWord]), set(wordList) + + while cur: + next_queue = [] + + for word in cur: + if word == endWord: + return distance + 1 + for i in xrange(len(word)): + for j in 'abcdefghijklmnopqrstuvwxyz': + candidate = word[:i] + j + word[i + 1:] + if candidate not in visited and candidate in lookup: + next_queue.append(candidate) + visited.add(candidate) + distance += 1 + cur = next_queue - while queue: - (vertex, path) = queue.pop(0) - if vertex not in visited: - if self.oneDiff(vertex, endWord): - return len(path) + 1 - visited.add(vertex) - for word in wordList: - if self.oneDiff(vertex, word): - queue.append((word, path + [word])) return 0 - - def oneDiff(self,s1, s2): - countDiffs = 0 - for a, b in zip(s1,s2): - if a != b: - countDiffs += 1 - return countDiffs == 1 ``` - -着手优化 - - -实在发现优化基本无所提升,然后看别人的解法,思路一致,但是用了collection里面的结构deque和增加set帮助解题。 - -collection有待研究 - -``` -class Solution(object): - def ladderLength(self, beginWord, endWord, wordList): - """ - :type beginWord: str - :type endWord: str - :type wordList: Set[str] - :rtype: int - """ - from collections import deque, defaultdict - - queue = deque([(beginWord, [beginWord])]) - visited = set() - wordSet = set(wordList) - wordSet.add(endWord) - - while queue: - (vertex, path) = queue.popleft() - if vertex not in visited: - if vertex == endWord: - return len(path) - visited.add(vertex) - for i in range(len(beginWord)): - part1 = vertex[:i]; part2 = vertex[i+1:] - for j in 'abcdefghijklmnopqrstuvwxyz': - if vertex[i] != j: - nextWord = part1 + j + part2 - if nextWord in wordSet: - queue.append((nextWord, path + [nextWord])) - wordSet.remove(nextWord) - return 0 -``` \ No newline at end of file From 3be77ec7f2c76f3e5d92b7de588ee2b1654a606b Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 4 Apr 2018 17:50:33 -0500 Subject: [PATCH 0423/2496] Update 127._word_ladder.md --- 127._word_ladder.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/127._word_ladder.md b/127._word_ladder.md index e0a23bb10..42a14a7af 100644 --- a/127._word_ladder.md +++ b/127._word_ladder.md @@ -10,7 +10,8 @@ Medium tag可以算BFS,其实就是求shortest path的变体 -reference from [kamyu104](https://github.com/kamyu104/LeetCode/blob/71e0ba555ee49befa01fcd9fc78c3528e2ab63a9/Python/word-ladder.py) + +Reference from [kamyu104](https://github.com/kamyu104/LeetCode/blob/71e0ba555ee49befa01fcd9fc78c3528e2ab63a9/Python/word-ladder.py) ```python class Solution(object): From 5a7f8fb394c24fde6d126a31edbe688ffef5028c Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 4 Apr 2018 18:50:46 -0500 Subject: [PATCH 0424/2496] Update Readme.md --- Readme.md | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/Readme.md b/Readme.md index 18ccfc183..851306b5d 100644 --- a/Readme.md +++ b/Readme.md @@ -1,10 +1,27 @@ -### Appreciation +### Reference and Appreciation: + +[kamyu104的Github](https://github.com/kamyu104/LeetCode) + +[KrisYu的GItuhub](https://github.com/KrisYu/LeetCode-CLRS-Python) + +[数据结构与算法/leetcode/lintcode题解](https://algorithm.yuanbin.me/zh-hans/) + +[Leetcode 讨论区](https://discuss.leetcode.com/) + +[visualgo算法可视化网站](https://visualgo.net/en) + +[Data Structure Visualization](https://www.cs.usfca.edu/~galles/visualization/Algorithms.html) + +[我的算法学习之路 - Lucida](http://zh.lucida.me/blog/on-learning-algorithms/) + +[HiredInTech](https://www.hiredintech.com/) System Design 的总结特别适合入门 + +[mitcc的Github](https://github.com/mitcc/AlgoSolutions) + + -This repository is modified and added based on https://github.com/KrisYu/LeetCode-CLRS-Python, appreciate for his effort. -### LeetCode × Python × CLRS -Finally, going to take LeetCode, Python can make you focus on the ideas, while CLRS is really kind of tedious, so whenever you finished some reading, you just, just would feel so happy that you can do LeetCode. - 📚📖✏️📓 From 0a4466533593b2d1eab8aa8cf2eb56dca0773c3c Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 4 Apr 2018 18:52:15 -0500 Subject: [PATCH 0425/2496] Update Readme.md --- Readme.md | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/Readme.md b/Readme.md index 851306b5d..48469aef4 100644 --- a/Readme.md +++ b/Readme.md @@ -1,22 +1,22 @@ ### Reference and Appreciation: -[kamyu104的Github](https://github.com/kamyu104/LeetCode) +1. [kamyu104的Github](https://github.com/kamyu104/LeetCode) -[KrisYu的GItuhub](https://github.com/KrisYu/LeetCode-CLRS-Python) +2. [KrisYu的GItuhub](https://github.com/KrisYu/LeetCode-CLRS-Python) -[数据结构与算法/leetcode/lintcode题解](https://algorithm.yuanbin.me/zh-hans/) +3. [数据结构与算法/leetcode/lintcode题解](https://algorithm.yuanbin.me/zh-hans/) -[Leetcode 讨论区](https://discuss.leetcode.com/) +4. [Leetcode 讨论区](https://discuss.leetcode.com/) -[visualgo算法可视化网站](https://visualgo.net/en) +5. [visualgo算法可视化网站](https://visualgo.net/en) -[Data Structure Visualization](https://www.cs.usfca.edu/~galles/visualization/Algorithms.html) +6. [Data Structure Visualization](https://www.cs.usfca.edu/~galles/visualization/Algorithms.html) -[我的算法学习之路 - Lucida](http://zh.lucida.me/blog/on-learning-algorithms/) +7. [我的算法学习之路 - Lucida](http://zh.lucida.me/blog/on-learning-algorithms/) -[HiredInTech](https://www.hiredintech.com/) System Design 的总结特别适合入门 +8. [HiredInTech](https://www.hiredintech.com/) System Design 的总结特别适合入门 -[mitcc的Github](https://github.com/mitcc/AlgoSolutions) +9. [mitcc的Github](https://github.com/mitcc/AlgoSolutions) @@ -24,10 +24,8 @@ - - 📚📖✏️📓 - - 🍔🍝🍛🍣 - - 😕😐😮😏 - - 🙌👎👍💪 + + - 💪就是干! From 460517629ad764bd5ea7f9698a2d789e956c3850 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 4 Apr 2018 20:14:22 -0500 Subject: [PATCH 0426/2496] Update Readme.md --- Readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Readme.md b/Readme.md index 48469aef4..a2aa4fa2b 100644 --- a/Readme.md +++ b/Readme.md @@ -18,6 +18,8 @@ 9. [mitcc的Github](https://github.com/mitcc/AlgoSolutions) +10. [小土刀的面试刷题笔记](http://wdxtub.com/interview/14520594642530.html) + From e1b03bb865c8dbcb07414bac75c5fc1d409620bf Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 5 Apr 2018 00:03:56 -0500 Subject: [PATCH 0427/2496] Update Readme.md --- Readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Readme.md b/Readme.md index a2aa4fa2b..ea453be99 100644 --- a/Readme.md +++ b/Readme.md @@ -1,8 +1,8 @@ ### Reference and Appreciation: -1. [kamyu104的Github](https://github.com/kamyu104/LeetCode) +1. [KrisYu的GItuhub](https://github.com/KrisYu/LeetCode-CLRS-Python) -2. [KrisYu的GItuhub](https://github.com/KrisYu/LeetCode-CLRS-Python) +2. [kamyu104的Github](https://github.com/kamyu104/LeetCode) 3. [数据结构与算法/leetcode/lintcode题解](https://algorithm.yuanbin.me/zh-hans/) From e880a52a941affc9eab41b373adc9fcb81e9c07c Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Thu, 5 Apr 2018 14:10:55 +0800 Subject: [PATCH 0428/2496] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=AC=AC=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E7=89=88=E6=9C=AC-=E4=BC=98=E5=8C=96=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E6=8E=92=E7=89=88=E5=92=8C=E7=9B=AE=E5=BD=95=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "001._clone\346\234\200\346\226\260" | 1 - Readme.md | 315 +++++++++++++++++- 001._two_sum.md => docs/001._two_sum.md | 0 .../002._add_two_numbers.md | 0 ..._substring_without_repeating_characters.md | 0 .../004._median_of_two_sorted_arrays.md | 0 .../005._longest_palindromic_substring.md | 0 .../007._Reverse_Integer.md | 0 .../008._string_to_integer_(atoi).md | 0 .../010._regular_expression_matching.md | 0 .../011._container_with_most_water.md | 0 .../012._Integer_to_Roman.md | 0 .../013._Roman_to_Integer.md | 0 .../014._longest_common_prefix.md | 0 015._3sum.md => docs/015._3sum.md | 0 .../016._3sum_closest.md | 0 ...._letter_combinations_of_a_phone_number.md | 0 018._4sum.md => docs/018._4sum.md | 0 .../019._remove_nth_node_from_end_of_list.md | 0 .../020._valid_parentheses.md | 0 .../021._merge_two_sorted_lists.md | 0 .../022._generate_parentheses.md | 0 .../023._merge_k_sorted_lists.md | 0 .../024._swap_nodes_in_pairs.md | 0 ...26._Remove_Duplicates_from_Sorted_Array.md | 0 .../027._Remove_Element.md | 0 .../028._implement_strstr().md | 0 ...bstring_with_Concatenation_of_All_Words.md | 0 .../031._next_permutation.md | 0 .../033._search_in_rotated_sorted_array.md | 0 .../034._Search for a Range.md | 0 .../035._search_insert_position.md | 0 .../038._Count_and_Say.md | 0 .../039._combination_sum.md | 0 .../040._combination_sum_ii.md | 0 .../042._trapping_rain_water.md | 0 .../043._multiply_strings.md | 0 .../044._wildcard_matching.md | 0 .../045._Jump_Game_II.md | 0 .../046._permutations.md | 0 .../047._permutations_ii.md | 0 .../048._rotate_image.md | 0 .../049._group_anagrams_python.md | 0 050._pow(x,_n).md => docs/050._pow(x,_n).md | 0 051._n-queens.md => docs/051._n-queens.md | 0 .../052._n-queens_ii.md | 0 .../053._maximum_subarray.md | 0 .../054._spiral_matrix.md | 0 055._jump_game.md => docs/055._jump_game.md | 0 .../056._Merge_Intervals.md | 0 .../058._length_of_last_word.md | 0 .../059._spiral_matrix_ii.md | 0 .../060._permutation_sequence.md | 0 .../061._rotate_list.md | 0 .../064._minimum_path_sum.md | 0 .../065.unique_paths_ii.md | 0 066._plus_one.md => docs/066._plus_one.md | 0 067._add_binary.md => docs/067._add_binary.md | 0 069._sqrt(x).md => docs/069._sqrt(x).md | 0 .../070. Climbing Stairs.md | 0 .../072._edit_distance.md | 0 .../073. Set Matrix Zeroes.md | 0 .../074._search_a_2d_matrix.md | 0 .../075._sort_colors.md | 0 .../076._Minimum_Window_Substring.md | 0 .../077._combinations.md | 0 078.Subsets .md => docs/078.Subsets .md | 0 .../079._word_search.md | 0 ...._remove_duplicates_from_sorted_list_ii.md | 0 ...083._remove_duplicates_from_sorted_list.md | 0 .../086._partition_list.md | 0 .../088._merge_sorted_array.md | 0 089._gray_code.md => docs/089._gray_code.md | 0 090._subsets_ii.md => docs/090._subsets_ii.md | 0 .../091._decode_ways.md | 0 .../092._reverse_linked_list_ii.md | 0 .../093._restore_ip_addresses.md | 0 .../094._binary_tree_inorder_traversal.md | 0 .../096._unique_binary_search_trees.md | 0 .../098._validate_binary_search_tree.md | 0 100._same_tree.md => docs/100._same_tree.md | 0 .../101._symmetric_tree.md | 0 .../102._binary_tree_level_order_traversal.md | 0 ...inary_tree_zigzag_level_order_traversal.md | 0 .../104._maximum_depth_of_binary_tree.md | 0 ...ree_from_preorder_and_inorder_traversal.md | 0 ...ee_from_inorder_and_postorder_traversal.md | 0 ...7._binary_tree_level_order_traversal_ii.md | 0 ...vert_sorted_array_to_binary_search_tree.md | 0 ...nvert_sorted_list_to_binary_search_tree.md | 0 .../110._balanced_binary_tree.md | 0 .../111._minimum_depth_of_binary_tree.md | 0 112._path_sum.md => docs/112._path_sum.md | 0 .../113._path_sum_ii.md | 0 ...114._flatten_binary_tree_to_linked_list.md | 0 ...lating_next_right_pointers_in_each_node.md | 0 .../118._pascal's_triangle.md | 0 .../119. Pascal's Triangle II.md | 0 120. Triangle.md => docs/120. Triangle.md | 0 .../121._Best_Time_to_Buy_and_Sell_Stock.md | 0 .../125._valid_palindrome.md | 0 .../126. Word Ladder II.md | 0 .../127._word_ladder.md | 0 .../128._Longest_Consecutive_Sequence.md | 0 .../129._sum_root_to_leaf_numbers.md | 0 .../130._surrounded_regions.md | 0 .../131._palindrome_partitioning.md | 0 .../133._clone_graph.md | 0 .../136._single_number.md | 0 139._word_break.md => docs/139._word_break.md | 0 .../140._word_break_ii.md | 0 .../141._linked_list_cycle.md | 0 .../142_Linked_List_Cycle_II.md | 0 .../143._reorder_list.md | 0 .../144._binary_tree_preorder_traversal.md | 0 .../145._binary_tree_postorder_traversal.md | 0 .../147._insertion_sort_list.md | 0 148._sort_list.md => docs/148._sort_list.md | 0 .../150._evaluate_reverse_polish_notation.md | 0 .../151._reverse_words_in_a_string.md | 0 .../152._maximum_product_subarray.md | 0 ...3._find_minimum_in_rotated_sorted_array.md | 0 155._min_stack.md => docs/155._min_stack.md | 0 ...ng_with_At_Most_Two_Distinct_Characters.md | 0 .../160._intersection_of_two_linked_lists.md | 0 .../162._find_peak_element.md | 0 .../165._compare_version_numbers.md | 0 .../166._Fraction_to_Recurring_Decimal.md | 0 ...167._two_sum_ii_-_input_array_is_sorted.md | 0 .../168._excel_sheet_column_title.md | 0 .../169._majority_element.md | 0 .../171._excel_sheet_column_number.md | 0 .../173._binary_search_tree_iterator.md | 0 .../189._rotate_array.md | 0 .../191._number_of_1_bits.md | 0 .../198._house_robber.md | 0 .../199._binary_tree_right_side_view.md | 0 .../200._number_of_islands.md | 0 .../203._remove_linked_list_elements.md | 0 .../204._count_primes.md | 0 .../205._isomorphic_strings.md | 0 .../206._reverse_linked_list.md | 0 .../207._course_schedule.md | 0 .../208._implement_trie_(prefix_tree).md | 0 .../210._course_schedule_ii.md | 0 ...and Search Word - Data structure design.md | 0 .../213._house_robber_ii.md | 0 .../216._combination_sum_iii.md | 0 .../217._contains_duplicate.md | 0 .../218._The _Skyline_Problem .md | 0 .../219._contains_duplicate_ii.md | 0 .../221._maximal_square.md | 0 .../222._count_complete_tree_nodes.md | 0 .../223._rectangle_area.md | 0 .../224. Basic Calculator .md | 0 .../225._implement_stack_using_queues.md | 0 .../226._invert_binary_tree.md | 0 .../227._basic_calculator_ii.md | 0 .../228._summary_ranges.md | 0 .../229._majority_element_ii.md | 0 .../230._kth_smallest_element_in_a_bst.md | 0 .../231. _Power_of_Two.md | 0 .../232._implement_queue_using_stacks.md | 0 .../234._palindrome_linked_list.md | 0 ...common_ancestor_of_a_binary_search_tree.md | 0 ...lowest_common_ancestor_of_a_binary_tree.md | 0 .../237._delete_node_in_a_linked_list.md | 0 .../238._product_of_array_except_self.md | 0 .../240._search_a_2d_matrix_ii.md | 0 .../242._valid_anagram.md | 0 .../252. Meeting Rooms.md | 0 ...Preorder_Sequence_in_Binary_Search_Tree.md | 0 .../256. Paint House.md | 0 .../257._binary_tree_paths.md | 0 258_ Add_Digits.md => docs/258_ Add_Digits.md | 0 .../261. Graph Valid Tree.md | 0 .../263._ugly_number.md | 0 .../264._ugly_number_ii.md | 0 .../265. Paint House II.md | 0 .../266. Palindrome Permutation.md | 0 .../267. Palindrome Permutation II.md | 0 .../268._missing_number.md | 0 .../270. Closest Binary Search Tree Value.md | 0 .../276. Paint Fence.md | 0 .../277. Find the Celebrity.md | 0 .../278._First_Bad _Version.md | 0 .../279._perfect_squares.md | 0 .../280._Wiggle_Sort.md | 0 .../283._move_zeroes.md | 0 .../285._inorder_successor_in_bst.md | 0 .../286. Walls and Gates.md | 0 .../289._game_of_life.md | 0 .../290._word_pattern.md | 0 292._nim_game.md => docs/292._nim_game.md | 0 .../296. Best Meeting Point.md | 0 ...inary Tree Longest Consecutive Sequence.md | 0 .../299._bulls_and_cows.md | 0 .../300._longest_increasing_subsequence.md | 0 .../303._range_sum_query_-_immutable.md | 0 .../316._Remove_Duplicate_Letters.md | 0 .../319._Bulb_Switcher.md | 0 .../322. Coin Change.md | 0 ...ected Components in an Undirected Graph.md | 0 .../324._Wiggle_Sort_II.md | 0 .../326._power_of_three.md | 0 .../328._odd_even_linked_list.md | 0 .../334._increasing_triplet_subsequence.md | 0 .../337._house_robber_iii.md | 0 .../338. Counting Bits.md | 0 .../339. Nested List Weight Sum.md | 0 .../341._Flatten_Nested_List_Iterator.md | 0 .../342._Power_of_Four.md | 0 .../344._reverse_string.md | 0 .../345._Reverse_Vowels_of_a_String.md | 0 .../349._intersection_of_two_arrays.md | 0 .../350._intersection_of_two_arrays_ii.md | 0 .../353. Design Snake Game.md | 0 .../364. Nested List Weight Sum II.md | 0 .../366. Find Leaves of Binary Tree.md | 0 .../367._valid_perfect_square.md | 0 .../369.Plus One Linked List.md | 0 .../371._sum_of_two_integers.md | 0 .../374._Guess_Number_Higher_or_Lower.md | 0 .../377._combination_sum_iv.md | 0 ...kth_smallest_element_in_a_sorted_matrix.md | 0 .../380. Insert Delete GetRandom O(1).md | 0 ...ete GetRandom O(1) - Duplicates allowed.md | 0 .../382._linked_list_random_node.md | 0 .../383._ransom_note.md | 0 .../384. Shuffle an Array.md | 0 ...387._first_unique_character_in_a_string.md | 0 .../388._Longest_Absolute_File_Path.md | 0 .../389._find_the_difference.md | 0 .../392._is_subsequence.md | 0 .../394._decode_string.md | 0 400. Nth Digit.md => docs/400. Nth Digit.md | 0 .../401._binary_watch.md | 0 .../404._sum_of_left_leaves.md | 0 .../405. Convert a Number to Hexadecimal.md | 0 .../406._Queue_Reconstruction_by_Height.md | 0 412._fizz_buzz.md => docs/412._fizz_buzz.md | 0 .../413. Arithmetic Slices.md | 0 .../414._third_maximum_number.md | 0 .../415._add_strings.md | 0 .../416. Partition Equal Subset Sum.md | 0 ..._Maximum_XOR_of_Two_Numbers_in_an_Array.md | 0 .../422. Valid Word Square.md | 0 .../434._number_of_segments_in_a_string.md | 0 .../437._path_sum_iii.md | 0 .../438._Find_All_Anagrams_in_a_String.md | 0 .../439. Ternary Expression Parser.md | 0 .../441._arranging_coins.md | 0 ...ind_All_Numbers_Disappeared_in_an_Array.md | 0 .../450. Delete Node in a BST.md | 0 ...._Minimum_Moves_to_Equal_Array_Elements.md | 0 .../459._Repeated_Substring_Pattern.md | 0 .../461._Hamming Distance.md | 0 .../463._Island_Perimeter.md | 0 ..._Unique_Substrings_in_Wraparound_String.md | 0 .../469. Convex Polygon.md | 0 .../476._Number_Complement.md | 0 .../477._Total_Hamming_Distance.md | 0 .../485._Max_Consecutive_Ones.md | 0 .../587._Erect_the_Fence .md | 0 .../599._Minimum_Index_Sum_of_Two_Lists.md | 0 .../647._Palindromic_Substrings.md | 0 .../657._Judge_Route_Circle.md | 0 .../665._Non-decreasing_Array.md | 0 .../672._Bulb_Switcher_II.md | 0 .../681._Next_Closest_Time.md | 0 .../682._Baseball_Game.md | 0 .../687._Longest_Univalue_Path.md | 0 .../740._delete_and_earn.md | 0 .../760._Find_Anagram_Mappings.md | 0 ...00\345\267\247\347\254\224\350\256\260.py" | 0 .../SortingAlgorithm/README.md | 22 +- ...47\232\204\345\220\204\347\247\215pass.md" | 0 ...\214_graph_search\357\274\214_dfs,_bfs.md" | 0 .../interview}/Google/Google.md | 0 .../interview}/WePay/WePay.jpg | Bin .../interview}/WePay/WePay.md | 0 .../interview}/WePay/power_number.md | 0 .../interview}/pocketgems/pocketgems.md | 0 ...7\346\263\225\346\200\247\350\203\275.png" | Bin ...7\346\263\225\346\200\273\347\273\223.png" | Bin ...2\346\263\241\346\216\222\345\272\217.gif" | Bin ...2\346\225\260\346\216\222\345\272\217.gif" | Bin ...4\345\260\224\346\216\222\345\272\217.png" | Bin ...2\345\271\266\346\216\222\345\272\217.gif" | Bin ...3\351\200\237\346\216\222\345\272\217.gif" | Bin ...2\345\244\247\351\241\266\345\240\206.png" | Bin ...2\345\205\245\346\216\222\345\272\217.gif" | Bin ...1\346\213\251\346\216\222\345\272\217.gif" | Bin ...4\345\244\247\351\241\266\345\240\206.png" | Bin ...h \344\270\215\346\230\223\345\206\231.md" | 0 .../Data Structure and Algorthim Review.md | 0 .../Dynamic Programming.md | 0 ...hing Algorithms \342\200\223 topcoder.pdf" | Bin ...13\347\232\204\350\275\254\346\215\242.md" | 0 .../LinkedList\346\212\200\345\267\247.md" | 0 .../Maximal Square.pdf | Bin .../Range Sum Query 2D - Immutable.pdf | Bin .../Recusrion & BackTracking.md | 0 .../backtracking\346\200\235\350\267\257.md" | 0 ..._a_linked_list\351\227\256\351\242\230.md" | 0 ...60\347\232\204\346\200\235\350\267\257.md" | 0 .../slide_windows_template.md | 0 .../\344\275\215\350\277\220\347\256\227.md" | 0 ...22\345\210\227\347\256\227\346\263\225.md" | 0 ...06\345\220\210\351\227\256\351\242\230.md" | 0 .../\346\200\273\347\273\223.md" | 0 ...04\345\220\210\351\227\256\351\242\230.md" | 0 .../\351\200\222\345\275\222_recursion.md" | 0 src/py2.x/SortingAlgorithm/BubbleSort.py | 19 ++ src/py2.x/SortingAlgorithm/InsertSort.py | 24 ++ src/py2.x/SortingAlgorithm/MergeSort.py | 35 ++ src/py2.x/SortingAlgorithm/QuickSort.py | 35 ++ src/py2.x/SortingAlgorithm/SelectionSort.py | 28 ++ src/py2.x/SortingAlgorithm/ShellSort.py | 25 ++ src/py2.x/TreeRecursionIterator.py | 34 ++ src/py2.x/list2iteration.py | 30 ++ 321 files changed, 539 insertions(+), 29 deletions(-) delete mode 100644 "001._clone\346\234\200\346\226\260" rename 001._two_sum.md => docs/001._two_sum.md (100%) rename 002._add_two_numbers.md => docs/002._add_two_numbers.md (100%) rename 003._longest_substring_without_repeating_characters.md => docs/003._longest_substring_without_repeating_characters.md (100%) rename 004._median_of_two_sorted_arrays.md => docs/004._median_of_two_sorted_arrays.md (100%) rename 005._longest_palindromic_substring.md => docs/005._longest_palindromic_substring.md (100%) rename 007._Reverse_Integer.md => docs/007._Reverse_Integer.md (100%) rename 008._string_to_integer_(atoi).md => docs/008._string_to_integer_(atoi).md (100%) rename 010._regular_expression_matching.md => docs/010._regular_expression_matching.md (100%) rename 011._container_with_most_water.md => docs/011._container_with_most_water.md (100%) rename 012._Integer_to_Roman.md => docs/012._Integer_to_Roman.md (100%) rename 013._Roman_to_Integer.md => docs/013._Roman_to_Integer.md (100%) rename 014._longest_common_prefix.md => docs/014._longest_common_prefix.md (100%) rename 015._3sum.md => docs/015._3sum.md (100%) rename 016._3sum_closest.md => docs/016._3sum_closest.md (100%) rename 017._letter_combinations_of_a_phone_number.md => docs/017._letter_combinations_of_a_phone_number.md (100%) rename 018._4sum.md => docs/018._4sum.md (100%) rename 019._remove_nth_node_from_end_of_list.md => docs/019._remove_nth_node_from_end_of_list.md (100%) rename 020._valid_parentheses.md => docs/020._valid_parentheses.md (100%) rename 021._merge_two_sorted_lists.md => docs/021._merge_two_sorted_lists.md (100%) rename 022._generate_parentheses.md => docs/022._generate_parentheses.md (100%) rename 023._merge_k_sorted_lists.md => docs/023._merge_k_sorted_lists.md (100%) rename 024._swap_nodes_in_pairs.md => docs/024._swap_nodes_in_pairs.md (100%) rename 026._Remove_Duplicates_from_Sorted_Array.md => docs/026._Remove_Duplicates_from_Sorted_Array.md (100%) rename 027._Remove_Element.md => docs/027._Remove_Element.md (100%) rename 028._implement_strstr().md => docs/028._implement_strstr().md (100%) rename 030._Substring_with_Concatenation_of_All_Words.md => docs/030._Substring_with_Concatenation_of_All_Words.md (100%) rename 031._next_permutation.md => docs/031._next_permutation.md (100%) rename 033._search_in_rotated_sorted_array.md => docs/033._search_in_rotated_sorted_array.md (100%) rename 034._Search for a Range.md => docs/034._Search for a Range.md (100%) rename 035._search_insert_position.md => docs/035._search_insert_position.md (100%) rename 038._Count_and_Say.md => docs/038._Count_and_Say.md (100%) rename 039._combination_sum.md => docs/039._combination_sum.md (100%) rename 040._combination_sum_ii.md => docs/040._combination_sum_ii.md (100%) rename 042._trapping_rain_water.md => docs/042._trapping_rain_water.md (100%) rename 043._multiply_strings.md => docs/043._multiply_strings.md (100%) rename 044._wildcard_matching.md => docs/044._wildcard_matching.md (100%) rename 045._Jump_Game_II.md => docs/045._Jump_Game_II.md (100%) rename 046._permutations.md => docs/046._permutations.md (100%) rename 047._permutations_ii.md => docs/047._permutations_ii.md (100%) rename 048._rotate_image.md => docs/048._rotate_image.md (100%) rename 049._group_anagrams_python.md => docs/049._group_anagrams_python.md (100%) rename 050._pow(x,_n).md => docs/050._pow(x,_n).md (100%) rename 051._n-queens.md => docs/051._n-queens.md (100%) rename 052._n-queens_ii.md => docs/052._n-queens_ii.md (100%) rename 053._maximum_subarray.md => docs/053._maximum_subarray.md (100%) rename 054._spiral_matrix.md => docs/054._spiral_matrix.md (100%) rename 055._jump_game.md => docs/055._jump_game.md (100%) rename 056._Merge_Intervals.md => docs/056._Merge_Intervals.md (100%) rename 058._length_of_last_word.md => docs/058._length_of_last_word.md (100%) rename 059._spiral_matrix_ii.md => docs/059._spiral_matrix_ii.md (100%) rename 060._permutation_sequence.md => docs/060._permutation_sequence.md (100%) rename 061._rotate_list.md => docs/061._rotate_list.md (100%) rename 064._minimum_path_sum.md => docs/064._minimum_path_sum.md (100%) rename 065.unique_paths_ii.md => docs/065.unique_paths_ii.md (100%) rename 066._plus_one.md => docs/066._plus_one.md (100%) rename 067._add_binary.md => docs/067._add_binary.md (100%) rename 069._sqrt(x).md => docs/069._sqrt(x).md (100%) rename 070. Climbing Stairs.md => docs/070. Climbing Stairs.md (100%) rename 072._edit_distance.md => docs/072._edit_distance.md (100%) rename 073. Set Matrix Zeroes.md => docs/073. Set Matrix Zeroes.md (100%) rename 074._search_a_2d_matrix.md => docs/074._search_a_2d_matrix.md (100%) rename 075._sort_colors.md => docs/075._sort_colors.md (100%) rename 076._Minimum_Window_Substring.md => docs/076._Minimum_Window_Substring.md (100%) rename 077._combinations.md => docs/077._combinations.md (100%) rename 078.Subsets .md => docs/078.Subsets .md (100%) rename 079._word_search.md => docs/079._word_search.md (100%) rename 082._remove_duplicates_from_sorted_list_ii.md => docs/082._remove_duplicates_from_sorted_list_ii.md (100%) rename 083._remove_duplicates_from_sorted_list.md => docs/083._remove_duplicates_from_sorted_list.md (100%) rename 086._partition_list.md => docs/086._partition_list.md (100%) rename 088._merge_sorted_array.md => docs/088._merge_sorted_array.md (100%) rename 089._gray_code.md => docs/089._gray_code.md (100%) rename 090._subsets_ii.md => docs/090._subsets_ii.md (100%) rename 091._decode_ways.md => docs/091._decode_ways.md (100%) rename 092._reverse_linked_list_ii.md => docs/092._reverse_linked_list_ii.md (100%) rename 093._restore_ip_addresses.md => docs/093._restore_ip_addresses.md (100%) rename 094._binary_tree_inorder_traversal.md => docs/094._binary_tree_inorder_traversal.md (100%) rename 096._unique_binary_search_trees.md => docs/096._unique_binary_search_trees.md (100%) rename 098._validate_binary_search_tree.md => docs/098._validate_binary_search_tree.md (100%) rename 100._same_tree.md => docs/100._same_tree.md (100%) rename 101._symmetric_tree.md => docs/101._symmetric_tree.md (100%) rename 102._binary_tree_level_order_traversal.md => docs/102._binary_tree_level_order_traversal.md (100%) rename 103._binary_tree_zigzag_level_order_traversal.md => docs/103._binary_tree_zigzag_level_order_traversal.md (100%) rename 104._maximum_depth_of_binary_tree.md => docs/104._maximum_depth_of_binary_tree.md (100%) rename 105._construct_binary_tree_from_preorder_and_inorder_traversal.md => docs/105._construct_binary_tree_from_preorder_and_inorder_traversal.md (100%) rename 106._construct_binary_tree_from_inorder_and_postorder_traversal.md => docs/106._construct_binary_tree_from_inorder_and_postorder_traversal.md (100%) rename 107._binary_tree_level_order_traversal_ii.md => docs/107._binary_tree_level_order_traversal_ii.md (100%) rename 108._convert_sorted_array_to_binary_search_tree.md => docs/108._convert_sorted_array_to_binary_search_tree.md (100%) rename 109._convert_sorted_list_to_binary_search_tree.md => docs/109._convert_sorted_list_to_binary_search_tree.md (100%) rename 110._balanced_binary_tree.md => docs/110._balanced_binary_tree.md (100%) rename 111._minimum_depth_of_binary_tree.md => docs/111._minimum_depth_of_binary_tree.md (100%) rename 112._path_sum.md => docs/112._path_sum.md (100%) rename 113._path_sum_ii.md => docs/113._path_sum_ii.md (100%) rename 114._flatten_binary_tree_to_linked_list.md => docs/114._flatten_binary_tree_to_linked_list.md (100%) rename 116._populating_next_right_pointers_in_each_node.md => docs/116._populating_next_right_pointers_in_each_node.md (100%) rename 118._pascal's_triangle.md => docs/118._pascal's_triangle.md (100%) rename 119. Pascal's Triangle II.md => docs/119. Pascal's Triangle II.md (100%) rename 120. Triangle.md => docs/120. Triangle.md (100%) rename 121._Best_Time_to_Buy_and_Sell_Stock.md => docs/121._Best_Time_to_Buy_and_Sell_Stock.md (100%) rename 125._valid_palindrome.md => docs/125._valid_palindrome.md (100%) rename 126. Word Ladder II.md => docs/126. Word Ladder II.md (100%) rename 127._word_ladder.md => docs/127._word_ladder.md (100%) rename 128._Longest_Consecutive_Sequence.md => docs/128._Longest_Consecutive_Sequence.md (100%) rename 129._sum_root_to_leaf_numbers.md => docs/129._sum_root_to_leaf_numbers.md (100%) rename 130._surrounded_regions.md => docs/130._surrounded_regions.md (100%) rename 131._palindrome_partitioning.md => docs/131._palindrome_partitioning.md (100%) rename 133._clone_graph.md => docs/133._clone_graph.md (100%) rename 136._single_number.md => docs/136._single_number.md (100%) rename 139._word_break.md => docs/139._word_break.md (100%) rename 140._word_break_ii.md => docs/140._word_break_ii.md (100%) rename 141._linked_list_cycle.md => docs/141._linked_list_cycle.md (100%) rename 142_Linked_List_Cycle_II.md => docs/142_Linked_List_Cycle_II.md (100%) rename 143._reorder_list.md => docs/143._reorder_list.md (100%) rename 144._binary_tree_preorder_traversal.md => docs/144._binary_tree_preorder_traversal.md (100%) rename 145._binary_tree_postorder_traversal.md => docs/145._binary_tree_postorder_traversal.md (100%) rename 147._insertion_sort_list.md => docs/147._insertion_sort_list.md (100%) rename 148._sort_list.md => docs/148._sort_list.md (100%) rename 150._evaluate_reverse_polish_notation.md => docs/150._evaluate_reverse_polish_notation.md (100%) rename 151._reverse_words_in_a_string.md => docs/151._reverse_words_in_a_string.md (100%) rename 152._maximum_product_subarray.md => docs/152._maximum_product_subarray.md (100%) rename 153._find_minimum_in_rotated_sorted_array.md => docs/153._find_minimum_in_rotated_sorted_array.md (100%) rename 155._min_stack.md => docs/155._min_stack.md (100%) rename 159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md => docs/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md (100%) rename 160._intersection_of_two_linked_lists.md => docs/160._intersection_of_two_linked_lists.md (100%) rename 162._find_peak_element.md => docs/162._find_peak_element.md (100%) rename 165._compare_version_numbers.md => docs/165._compare_version_numbers.md (100%) rename 166._Fraction_to_Recurring_Decimal.md => docs/166._Fraction_to_Recurring_Decimal.md (100%) rename 167._two_sum_ii_-_input_array_is_sorted.md => docs/167._two_sum_ii_-_input_array_is_sorted.md (100%) rename 168._excel_sheet_column_title.md => docs/168._excel_sheet_column_title.md (100%) rename 169._majority_element.md => docs/169._majority_element.md (100%) rename 171._excel_sheet_column_number.md => docs/171._excel_sheet_column_number.md (100%) rename 173._binary_search_tree_iterator.md => docs/173._binary_search_tree_iterator.md (100%) rename 189._rotate_array.md => docs/189._rotate_array.md (100%) rename 191._number_of_1_bits.md => docs/191._number_of_1_bits.md (100%) rename 198._house_robber.md => docs/198._house_robber.md (100%) rename 199._binary_tree_right_side_view.md => docs/199._binary_tree_right_side_view.md (100%) rename 200._number_of_islands.md => docs/200._number_of_islands.md (100%) rename 203._remove_linked_list_elements.md => docs/203._remove_linked_list_elements.md (100%) rename 204._count_primes.md => docs/204._count_primes.md (100%) rename 205._isomorphic_strings.md => docs/205._isomorphic_strings.md (100%) rename 206._reverse_linked_list.md => docs/206._reverse_linked_list.md (100%) rename 207._course_schedule.md => docs/207._course_schedule.md (100%) rename 208._implement_trie_(prefix_tree).md => docs/208._implement_trie_(prefix_tree).md (100%) rename 210._course_schedule_ii.md => docs/210._course_schedule_ii.md (100%) rename 211. Add and Search Word - Data structure design.md => docs/211. Add and Search Word - Data structure design.md (100%) rename 213._house_robber_ii.md => docs/213._house_robber_ii.md (100%) rename 216._combination_sum_iii.md => docs/216._combination_sum_iii.md (100%) rename 217._contains_duplicate.md => docs/217._contains_duplicate.md (100%) rename 218._The _Skyline_Problem .md => docs/218._The _Skyline_Problem .md (100%) rename 219._contains_duplicate_ii.md => docs/219._contains_duplicate_ii.md (100%) rename 221._maximal_square.md => docs/221._maximal_square.md (100%) rename 222._count_complete_tree_nodes.md => docs/222._count_complete_tree_nodes.md (100%) rename 223._rectangle_area.md => docs/223._rectangle_area.md (100%) rename 224. Basic Calculator .md => docs/224. Basic Calculator .md (100%) rename 225._implement_stack_using_queues.md => docs/225._implement_stack_using_queues.md (100%) rename 226._invert_binary_tree.md => docs/226._invert_binary_tree.md (100%) rename 227._basic_calculator_ii.md => docs/227._basic_calculator_ii.md (100%) rename 228._summary_ranges.md => docs/228._summary_ranges.md (100%) rename 229._majority_element_ii.md => docs/229._majority_element_ii.md (100%) rename 230._kth_smallest_element_in_a_bst.md => docs/230._kth_smallest_element_in_a_bst.md (100%) rename 231. _Power_of_Two.md => docs/231. _Power_of_Two.md (100%) rename 232._implement_queue_using_stacks.md => docs/232._implement_queue_using_stacks.md (100%) rename 234._palindrome_linked_list.md => docs/234._palindrome_linked_list.md (100%) rename 235._lowest_common_ancestor_of_a_binary_search_tree.md => docs/235._lowest_common_ancestor_of_a_binary_search_tree.md (100%) rename 236._lowest_common_ancestor_of_a_binary_tree.md => docs/236._lowest_common_ancestor_of_a_binary_tree.md (100%) rename 237._delete_node_in_a_linked_list.md => docs/237._delete_node_in_a_linked_list.md (100%) rename 238._product_of_array_except_self.md => docs/238._product_of_array_except_self.md (100%) rename 240._search_a_2d_matrix_ii.md => docs/240._search_a_2d_matrix_ii.md (100%) rename 242._valid_anagram.md => docs/242._valid_anagram.md (100%) rename 252. Meeting Rooms.md => docs/252. Meeting Rooms.md (100%) rename 255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md => docs/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md (100%) rename 256. Paint House.md => docs/256. Paint House.md (100%) rename 257._binary_tree_paths.md => docs/257._binary_tree_paths.md (100%) rename 258_ Add_Digits.md => docs/258_ Add_Digits.md (100%) rename 261. Graph Valid Tree.md => docs/261. Graph Valid Tree.md (100%) rename 263._ugly_number.md => docs/263._ugly_number.md (100%) rename 264._ugly_number_ii.md => docs/264._ugly_number_ii.md (100%) rename 265. Paint House II.md => docs/265. Paint House II.md (100%) rename 266. Palindrome Permutation.md => docs/266. Palindrome Permutation.md (100%) rename 267. Palindrome Permutation II.md => docs/267. Palindrome Permutation II.md (100%) rename 268._missing_number.md => docs/268._missing_number.md (100%) rename 270. Closest Binary Search Tree Value.md => docs/270. Closest Binary Search Tree Value.md (100%) rename 276. Paint Fence.md => docs/276. Paint Fence.md (100%) rename 277. Find the Celebrity.md => docs/277. Find the Celebrity.md (100%) rename 278._First_Bad _Version.md => docs/278._First_Bad _Version.md (100%) rename 279._perfect_squares.md => docs/279._perfect_squares.md (100%) rename 280._Wiggle_Sort.md => docs/280._Wiggle_Sort.md (100%) rename 283._move_zeroes.md => docs/283._move_zeroes.md (100%) rename 285._inorder_successor_in_bst.md => docs/285._inorder_successor_in_bst.md (100%) rename 286. Walls and Gates.md => docs/286. Walls and Gates.md (100%) rename 289._game_of_life.md => docs/289._game_of_life.md (100%) rename 290._word_pattern.md => docs/290._word_pattern.md (100%) rename 292._nim_game.md => docs/292._nim_game.md (100%) rename 296. Best Meeting Point.md => docs/296. Best Meeting Point.md (100%) rename 298. Binary Tree Longest Consecutive Sequence.md => docs/298. Binary Tree Longest Consecutive Sequence.md (100%) rename 299._bulls_and_cows.md => docs/299._bulls_and_cows.md (100%) rename 300._longest_increasing_subsequence.md => docs/300._longest_increasing_subsequence.md (100%) rename 303._range_sum_query_-_immutable.md => docs/303._range_sum_query_-_immutable.md (100%) rename 316._Remove_Duplicate_Letters.md => docs/316._Remove_Duplicate_Letters.md (100%) rename 319._Bulb_Switcher.md => docs/319._Bulb_Switcher.md (100%) rename 322. Coin Change.md => docs/322. Coin Change.md (100%) rename 323. Number of Connected Components in an Undirected Graph.md => docs/323. Number of Connected Components in an Undirected Graph.md (100%) rename 324._Wiggle_Sort_II.md => docs/324._Wiggle_Sort_II.md (100%) rename 326._power_of_three.md => docs/326._power_of_three.md (100%) rename 328._odd_even_linked_list.md => docs/328._odd_even_linked_list.md (100%) rename 334._increasing_triplet_subsequence.md => docs/334._increasing_triplet_subsequence.md (100%) rename 337._house_robber_iii.md => docs/337._house_robber_iii.md (100%) rename 338. Counting Bits.md => docs/338. Counting Bits.md (100%) rename 339. Nested List Weight Sum.md => docs/339. Nested List Weight Sum.md (100%) rename 341._Flatten_Nested_List_Iterator.md => docs/341._Flatten_Nested_List_Iterator.md (100%) rename 342._Power_of_Four.md => docs/342._Power_of_Four.md (100%) rename 344._reverse_string.md => docs/344._reverse_string.md (100%) rename 345._Reverse_Vowels_of_a_String.md => docs/345._Reverse_Vowels_of_a_String.md (100%) rename 349._intersection_of_two_arrays.md => docs/349._intersection_of_two_arrays.md (100%) rename 350._intersection_of_two_arrays_ii.md => docs/350._intersection_of_two_arrays_ii.md (100%) rename 353. Design Snake Game.md => docs/353. Design Snake Game.md (100%) rename 364. Nested List Weight Sum II.md => docs/364. Nested List Weight Sum II.md (100%) rename 366. Find Leaves of Binary Tree.md => docs/366. Find Leaves of Binary Tree.md (100%) rename 367._valid_perfect_square.md => docs/367._valid_perfect_square.md (100%) rename 369.Plus One Linked List.md => docs/369.Plus One Linked List.md (100%) rename 371._sum_of_two_integers.md => docs/371._sum_of_two_integers.md (100%) rename 374._Guess_Number_Higher_or_Lower.md => docs/374._Guess_Number_Higher_or_Lower.md (100%) rename 377._combination_sum_iv.md => docs/377._combination_sum_iv.md (100%) rename 378._kth_smallest_element_in_a_sorted_matrix.md => docs/378._kth_smallest_element_in_a_sorted_matrix.md (100%) rename 380. Insert Delete GetRandom O(1).md => docs/380. Insert Delete GetRandom O(1).md (100%) rename 381. Insert Delete GetRandom O(1) - Duplicates allowed.md => docs/381. Insert Delete GetRandom O(1) - Duplicates allowed.md (100%) rename 382._linked_list_random_node.md => docs/382._linked_list_random_node.md (100%) rename 383._ransom_note.md => docs/383._ransom_note.md (100%) rename 384. Shuffle an Array.md => docs/384. Shuffle an Array.md (100%) rename 387._first_unique_character_in_a_string.md => docs/387._first_unique_character_in_a_string.md (100%) rename 388._Longest_Absolute_File_Path.md => docs/388._Longest_Absolute_File_Path.md (100%) rename 389._find_the_difference.md => docs/389._find_the_difference.md (100%) rename 392._is_subsequence.md => docs/392._is_subsequence.md (100%) rename 394._decode_string.md => docs/394._decode_string.md (100%) rename 400. Nth Digit.md => docs/400. Nth Digit.md (100%) rename 401._binary_watch.md => docs/401._binary_watch.md (100%) rename 404._sum_of_left_leaves.md => docs/404._sum_of_left_leaves.md (100%) rename 405. Convert a Number to Hexadecimal.md => docs/405. Convert a Number to Hexadecimal.md (100%) rename 406._Queue_Reconstruction_by_Height.md => docs/406._Queue_Reconstruction_by_Height.md (100%) rename 412._fizz_buzz.md => docs/412._fizz_buzz.md (100%) rename 413. Arithmetic Slices.md => docs/413. Arithmetic Slices.md (100%) rename 414._third_maximum_number.md => docs/414._third_maximum_number.md (100%) rename 415._add_strings.md => docs/415._add_strings.md (100%) rename 416. Partition Equal Subset Sum.md => docs/416. Partition Equal Subset Sum.md (100%) rename 421._Maximum_XOR_of_Two_Numbers_in_an_Array.md => docs/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md (100%) rename 422. Valid Word Square.md => docs/422. Valid Word Square.md (100%) rename 434._number_of_segments_in_a_string.md => docs/434._number_of_segments_in_a_string.md (100%) rename 437._path_sum_iii.md => docs/437._path_sum_iii.md (100%) rename 438._Find_All_Anagrams_in_a_String.md => docs/438._Find_All_Anagrams_in_a_String.md (100%) rename 439. Ternary Expression Parser.md => docs/439. Ternary Expression Parser.md (100%) rename 441._arranging_coins.md => docs/441._arranging_coins.md (100%) rename 448._Find_All_Numbers_Disappeared_in_an_Array.md => docs/448._Find_All_Numbers_Disappeared_in_an_Array.md (100%) rename 450. Delete Node in a BST.md => docs/450. Delete Node in a BST.md (100%) rename 453._Minimum_Moves_to_Equal_Array_Elements.md => docs/453._Minimum_Moves_to_Equal_Array_Elements.md (100%) rename 459._Repeated_Substring_Pattern.md => docs/459._Repeated_Substring_Pattern.md (100%) rename 461._Hamming Distance.md => docs/461._Hamming Distance.md (100%) rename 463._Island_Perimeter.md => docs/463._Island_Perimeter.md (100%) rename 467._Unique_Substrings_in_Wraparound_String.md => docs/467._Unique_Substrings_in_Wraparound_String.md (100%) rename 469. Convex Polygon.md => docs/469. Convex Polygon.md (100%) rename 476._Number_Complement.md => docs/476._Number_Complement.md (100%) rename 477._Total_Hamming_Distance.md => docs/477._Total_Hamming_Distance.md (100%) rename 485._Max_Consecutive_Ones.md => docs/485._Max_Consecutive_Ones.md (100%) rename 587._Erect_the_Fence .md => docs/587._Erect_the_Fence .md (100%) rename 599._Minimum_Index_Sum_of_Two_Lists.md => docs/599._Minimum_Index_Sum_of_Two_Lists.md (100%) rename 647._Palindromic_Substrings.md => docs/647._Palindromic_Substrings.md (100%) rename 657._Judge_Route_Circle.md => docs/657._Judge_Route_Circle.md (100%) rename 665._Non-decreasing_Array.md => docs/665._Non-decreasing_Array.md (100%) rename 672._Bulb_Switcher_II.md => docs/672._Bulb_Switcher_II.md (100%) rename 681._Next_Closest_Time.md => docs/681._Next_Closest_Time.md (100%) rename 682._Baseball_Game.md => docs/682._Baseball_Game.md (100%) rename 687._Longest_Univalue_Path.md => docs/687._Longest_Univalue_Path.md (100%) rename 740._delete_and_earn.md => docs/740._delete_and_earn.md (100%) rename 760._Find_Anagram_Mappings.md => docs/760._Find_Anagram_Mappings.md (100%) rename "Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" => "docs/SortingAlgorithm/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" (100%) rename "python\345\256\236\347\216\260\345\205\253\345\244\247\346\216\222\345\272\217.md" => docs/SortingAlgorithm/README.md (92%) rename "python\347\232\204\345\220\204\347\247\215pass.md" => "docs/SortingAlgorithm/python\347\232\204\345\220\204\347\247\215pass.md" (100%) rename "tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" => "docs/SortingAlgorithm/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" (100%) rename {interview question => docs/interview}/Google/Google.md (100%) rename {interview question => docs/interview}/WePay/WePay.jpg (100%) rename {interview question => docs/interview}/WePay/WePay.md (100%) rename {interview question => docs/interview}/WePay/power_number.md (100%) rename {interview question => docs/interview}/pocketgems/pocketgems.md (100%) rename "images/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\247\350\203\275\346\257\224\350\276\203.png" => "images/SortingAlgorithm/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\247\350\203\275.png" (100%) rename "images/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\273\347\273\223.png" => "images/SortingAlgorithm/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\273\347\273\223.png" (100%) rename "images/\345\206\222\346\263\241\346\216\222\345\272\217.gif" => "images/SortingAlgorithm/\345\206\222\346\263\241\346\216\222\345\272\217.gif" (100%) rename "images/\345\237\272\346\225\260\346\216\222\345\272\217.gif" => "images/SortingAlgorithm/\345\237\272\346\225\260\346\216\222\345\272\217.gif" (100%) rename "images/\345\270\214\345\260\224\346\216\222\345\272\217.png" => "images/SortingAlgorithm/\345\270\214\345\260\224\346\216\222\345\272\217.png" (100%) rename "images/\345\275\222\345\271\266\346\216\222\345\272\217.gif" => "images/SortingAlgorithm/\345\275\222\345\271\266\346\216\222\345\272\217.gif" (100%) rename "images/\345\277\253\351\200\237\346\216\222\345\272\217.gif" => "images/SortingAlgorithm/\345\277\253\351\200\237\346\216\222\345\272\217.gif" (100%) rename "images/\346\236\204\345\273\272\345\244\247\351\241\266\345\240\206.png" => "images/SortingAlgorithm/\346\236\204\345\273\272\345\244\247\351\241\266\345\240\206.png" (100%) rename "images/\347\233\264\346\216\245\346\217\222\345\205\245\346\216\222\345\272\217.gif" => "images/SortingAlgorithm/\347\233\264\346\216\245\346\217\222\345\205\245\346\216\222\345\272\217.gif" (100%) rename "images/\347\256\200\345\215\225\351\200\211\346\213\251\346\216\222\345\272\217.gif" => "images/SortingAlgorithm/\347\256\200\345\215\225\351\200\211\346\213\251\346\216\222\345\272\217.gif" (100%) rename "images/\350\260\203\346\225\264\345\244\247\351\241\266\345\240\206.png" => "images/SortingAlgorithm/\350\260\203\346\225\264\345\244\247\351\241\266\345\240\206.png" (100%) rename "Binary Search \344\270\215\346\230\223\345\206\231.md" => "others/Binary Search \344\270\215\346\230\223\345\206\231.md" (100%) rename Data Structure and Algorthim Review.md => others/Data Structure and Algorthim Review.md (100%) rename Dynamic Programming.md => others/Dynamic Programming.md (100%) rename "Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" => "others/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" (100%) rename "Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" => "others/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" (100%) rename "LinkedList\346\212\200\345\267\247.md" => "others/LinkedList\346\212\200\345\267\247.md" (100%) rename Maximal Square.pdf => others/Maximal Square.pdf (100%) rename Range Sum Query 2D - Immutable.pdf => others/Range Sum Query 2D - Immutable.pdf (100%) rename Recusrion & BackTracking.md => others/Recusrion & BackTracking.md (100%) rename "backtracking\346\200\235\350\267\257.md" => "others/backtracking\346\200\235\350\267\257.md" (100%) rename "delete_node_in_a_linked_list\351\227\256\351\242\230.md" => "others/delete_node_in_a_linked_list\351\227\256\351\242\230.md" (100%) rename "local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" => "others/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" (100%) rename slide_windows_template.md => others/slide_windows_template.md (100%) rename "\344\275\215\350\277\220\347\256\227.md" => "others/\344\275\215\350\277\220\347\256\227.md" (100%) rename "\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" => "others/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" (100%) rename "\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" => "others/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" (100%) rename "\346\200\273\347\273\223.md" => "others/\346\200\273\347\273\223.md" (100%) rename "\347\273\204\345\220\210\351\227\256\351\242\230.md" => "others/\347\273\204\345\220\210\351\227\256\351\242\230.md" (100%) rename "\351\200\222\345\275\222_recursion.md" => "others/\351\200\222\345\275\222_recursion.md" (100%) create mode 100644 src/py2.x/SortingAlgorithm/BubbleSort.py create mode 100644 src/py2.x/SortingAlgorithm/InsertSort.py create mode 100644 src/py2.x/SortingAlgorithm/MergeSort.py create mode 100644 src/py2.x/SortingAlgorithm/QuickSort.py create mode 100644 src/py2.x/SortingAlgorithm/SelectionSort.py create mode 100644 src/py2.x/SortingAlgorithm/ShellSort.py create mode 100644 src/py2.x/TreeRecursionIterator.py create mode 100644 src/py2.x/list2iteration.py diff --git "a/001._clone\346\234\200\346\226\260" "b/001._clone\346\234\200\346\226\260" deleted file mode 100644 index 22063ae2c..000000000 --- "a/001._clone\346\234\200\346\226\260" +++ /dev/null @@ -1 +0,0 @@ -001._记得先clone最新. diff --git a/Readme.md b/Readme.md index ea453be99..9fafaced9 100644 --- a/Readme.md +++ b/Readme.md @@ -1,32 +1,313 @@ -### Reference and Appreciation: +# LeetCode 面试题 -1. [KrisYu的GItuhub](https://github.com/KrisYu/LeetCode-CLRS-Python) +## [八大算法算](/docs/SortingAlgorithm/README.md) -2. [kamyu104的Github](https://github.com/kamyu104/LeetCode) +![](/images/SortingAlgorithm/八大排序算法性能.png) -3. [数据结构与算法/leetcode/lintcode题解](https://algorithm.yuanbin.me/zh-hans/) +| 名称 | 文档 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | -4. [Leetcode 讨论区](https://discuss.leetcode.com/) +## 面试问答 -5. [visualgo算法可视化网站](https://visualgo.net/en) +* [Google面试题](/docs/interview/Google/Google.md) +* [pocketgems 面试题](/docs/interview/pocketgems/pocketgems.md) +* [WePay 面试题](/docs/interview/WePay/WePay.md) -6. [Data Structure Visualization](https://www.cs.usfca.edu/~galles/visualization/Algorithms.html) +## LeetCode算法题 -7. [我的算法学习之路 - Lucida](http://zh.lucida.me/blog/on-learning-algorithms/) +* [](docs/LeetCode/001._two_sum.md) +* [](/docs/LeetCode/002._add_two_numbers.md) +* [](/docs/LeetCode/003._longest_substring_without_repeating_characters.md) +* [](/docs/LeetCode/004._median_of_two_sorted_arrays.md) +* [](/docs/LeetCode/005._longest_palindromic_substring.md) +* [](/docs/LeetCode/007._Reverse_Integer.md) +* [](/docs/LeetCode/008._string_to_integer_(atoi).md) +* [](/docs/LeetCode/010._regular_expression_matching.md) +* [](/docs/LeetCode/011._container_with_most_water.md) +* [](/docs/LeetCode/012._Integer_to_Roman.md) +* [](/docs/LeetCode/013._Roman_to_Integer.md) +* [](/docs/LeetCode/014._longest_common_prefix.md) +* [](/docs/LeetCode/015._3sum.md) +* [](/docs/LeetCode/016._3sum_closest.md) +* [](/docs/LeetCode/017._letter_combinations_of_a_phone_number.md) +* [](/docs/LeetCode/018._4sum.md) +* [](/docs/LeetCode/019._remove_nth_node_from_end_of_list.md) +* [](/docs/LeetCode/020._valid_parentheses.md) +* [](/docs/LeetCode/021._merge_two_sorted_lists.md) +* [](/docs/LeetCode/022._generate_parentheses.md) +* [](/docs/LeetCode/023._merge_k_sorted_lists.md) +* [](/docs/LeetCode/024._swap_nodes_in_pairs.md) +* [](/docs/LeetCode/026._Remove_Duplicates_from_Sorted_Array.md) +* [](/docs/LeetCode/027._Remove_Element.md) +* [](/docs/LeetCode/028._implement_strstr().md) +* [](/docs/LeetCode/030._Substring_with_Concatenation_of_All_Words.md) +* [](/docs/LeetCode/031._next_permutation.md) +* [](/docs/LeetCode/033._search_in_rotated_sorted_array.md) +* [](/docs/LeetCode/034._SearchforaRange.md) +* [](/docs/LeetCode/035._search_insert_position.md) +* [](/docs/LeetCode/038._Count_and_Say.md) +* [](/docs/LeetCode/039._combination_sum.md) +* [](/docs/LeetCode/040._combination_sum_ii.md) +* [](/docs/LeetCode/042._trapping_rain_water.md) +* [](/docs/LeetCode/043._multiply_strings.md) +* [](/docs/LeetCode/044._wildcard_matching.md) +* [](/docs/LeetCode/045._Jump_Game_II.md) +* [](/docs/LeetCode/046._permutations.md) +* [](/docs/LeetCode/047._permutations_ii.md) +* [](/docs/LeetCode/048._rotate_image.md) +* [](/docs/LeetCode/049._group_anagrams_python.md) +* [](/docs/LeetCode/050._pow(x,_n).md) +* [](/docs/LeetCode/051._n-queens.md) +* [](/docs/LeetCode/052._n-queens_ii.md) +* [](/docs/LeetCode/053._maximum_subarray.md) +* [](/docs/LeetCode/054._spiral_matrix.md) +* [](/docs/LeetCode/055._jump_game.md) +* [](/docs/LeetCode/056._Merge_Intervals.md) +* [](/docs/LeetCode/058._length_of_last_word.md) +* [](/docs/LeetCode/059._spiral_matrix_ii.md) +* [](/docs/LeetCode/060._permutation_sequence.md) +* [](/docs/LeetCode/061._rotate_list.md) +* [](/docs/LeetCode/064._minimum_path_sum.md) +* [](/docs/LeetCode/065.unique_paths_ii.md) +* [](/docs/LeetCode/066._plus_one.md) +* [](/docs/LeetCode/067._add_binary.md) +* [](/docs/LeetCode/069._sqrt(x).md) +* [](/docs/LeetCode/070.ClimbingStairs.md) +* [](/docs/LeetCode/072._edit_distance.md) +* [](/docs/LeetCode/073.SetMatrixZeroes.md) +* [](/docs/LeetCode/074._search_a_2d_matrix.md) +* [](/docs/LeetCode/075._sort_colors.md) +* [](/docs/LeetCode/076._Minimum_Window_Substring.md) +* [](/docs/LeetCode/077._combinations.md) +* [](/docs/LeetCode/078.Subsets.md) +* [](/docs/LeetCode/079._word_search.md) +* [](/docs/LeetCode/082._remove_duplicates_from_sorted_list_ii.md) +* [](/docs/LeetCode/083._remove_duplicates_from_sorted_list.md) +* [](/docs/LeetCode/086._partition_list.md) +* [](/docs/LeetCode/088._merge_sorted_array.md) +* [](/docs/LeetCode/089._gray_code.md) +* [](/docs/LeetCode/090._subsets_ii.md) +* [](/docs/LeetCode/091._decode_ways.md) +* [](/docs/LeetCode/092._reverse_linked_list_ii.md) +* [](/docs/LeetCode/093._restore_ip_addresses.md) +* [](/docs/LeetCode/094._binary_tree_inorder_traversal.md) +* [](/docs/LeetCode/096._unique_binary_search_trees.md) +* [](/docs/LeetCode/098._validate_binary_search_tree.md) +* [](/docs/LeetCode/100._same_tree.md) +* [](/docs/LeetCode/101._symmetric_tree.md) +* [](/docs/LeetCode/102._binary_tree_level_order_traversal.md) +* [](/docs/LeetCode/103._binary_tree_zigzag_level_order_traversal.md) +* [](/docs/LeetCode/104._maximum_depth_of_binary_tree.md) +* [](/docs/LeetCode/105._construct_binary_tree_from_preorder_and_inorder_traversal.md) +* [](/docs/LeetCode/106._construct_binary_tree_from_inorder_and_postorder_traversal.md) +* [](/docs/LeetCode/107._binary_tree_level_order_traversal_ii.md) +* [](/docs/LeetCode/108._convert_sorted_array_to_binary_search_tree.md) +* [](/docs/LeetCode/109._convert_sorted_list_to_binary_search_tree.md) +* [](/docs/LeetCode/110._balanced_binary_tree.md) +* [](/docs/LeetCode/111._minimum_depth_of_binary_tree.md) +* [](/docs/LeetCode/112._path_sum.md) +* [](/docs/LeetCode/113._path_sum_ii.md) +* [](/docs/LeetCode/114._flatten_binary_tree_to_linked_list.md) +* [](/docs/LeetCode/116._populating_next_right_pointers_in_each_node.md) +* [](/docs/LeetCode/118._pascal's_triangle.md) +* [](/docs/LeetCode/119.Pascal'sTriangleII.md) +* [](/docs/LeetCode/120.Triangle.md) +* [](/docs/LeetCode/121._Best_Time_to_Buy_and_Sell_Stock.md) +* [](/docs/LeetCode/125._valid_palindrome.md) +* [](/docs/LeetCode/126.WordLadderII.md) +* [](/docs/LeetCode/127._word_ladder.md) +* [](/docs/LeetCode/128._Longest_Consecutive_Sequence.md) +* [](/docs/LeetCode/129._sum_root_to_leaf_numbers.md) +* [](/docs/LeetCode/130._surrounded_regions.md) +* [](/docs/LeetCode/131._palindrome_partitioning.md) +* [](/docs/LeetCode/133._clone_graph.md) +* [](/docs/LeetCode/136._single_number.md) +* [](/docs/LeetCode/139._word_break.md) +* [](/docs/LeetCode/140._word_break_ii.md) +* [](/docs/LeetCode/141._linked_list_cycle.md) +* [](/docs/LeetCode/142_Linked_List_Cycle_II.md) +* [](/docs/LeetCode/143._reorder_list.md) +* [](/docs/LeetCode/144._binary_tree_preorder_traversal.md) +* [](/docs/LeetCode/145._binary_tree_postorder_traversal.md) +* [](/docs/LeetCode/147._insertion_sort_list.md) +* [](/docs/LeetCode/148._sort_list.md) +* [](/docs/LeetCode/150._evaluate_reverse_polish_notation.md) +* [](/docs/LeetCode/151._reverse_words_in_a_string.md) +* [](/docs/LeetCode/152._maximum_product_subarray.md) +* [](/docs/LeetCode/153._find_minimum_in_rotated_sorted_array.md) +* [](/docs/LeetCode/155._min_stack.md) +* [](/docs/LeetCode/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md) +* [](/docs/LeetCode/160._intersection_of_two_linked_lists.md) +* [](/docs/LeetCode/162._find_peak_element.md) +* [](/docs/LeetCode/165._compare_version_numbers.md) +* [](/docs/LeetCode/166._Fraction_to_Recurring_Decimal.md) +* [](/docs/LeetCode/167._two_sum_ii_-_input_array_is_sorted.md) +* [](/docs/LeetCode/168._excel_sheet_column_title.md) +* [](/docs/LeetCode/169._majority_element.md) +* [](/docs/LeetCode/171._excel_sheet_column_number.md) +* [](/docs/LeetCode/173._binary_search_tree_iterator.md) +* [](/docs/LeetCode/189._rotate_array.md) +* [](/docs/LeetCode/191._number_of_1_bits.md) +* [](/docs/LeetCode/198._house_robber.md) +* [](/docs/LeetCode/199._binary_tree_right_side_view.md) +* [](/docs/LeetCode/200._number_of_islands.md) +* [](/docs/LeetCode/203._remove_linked_list_elements.md) +* [](/docs/LeetCode/204._count_primes.md) +* [](/docs/LeetCode/205._isomorphic_strings.md) +* [](/docs/LeetCode/206._reverse_linked_list.md) +* [](/docs/LeetCode/207._course_schedule.md) +* [](/docs/LeetCode/208._implement_trie_(prefix_tree).md) +* [](/docs/LeetCode/210._course_schedule_ii.md) +* [](/docs/LeetCode/211.AddandSearchWord-Datastructuredesign.md) +* [](/docs/LeetCode/213._house_robber_ii.md) +* [](/docs/LeetCode/216._combination_sum_iii.md) +* [](/docs/LeetCode/217._contains_duplicate.md) +* [](/docs/LeetCode/218._The_Skyline_Problem.md) +* [](/docs/LeetCode/219._contains_duplicate_ii.md) +* [](/docs/LeetCode/221._maximal_square.md) +* [](/docs/LeetCode/222._count_complete_tree_nodes.md) +* [](/docs/LeetCode/223._rectangle_area.md) +* [](/docs/LeetCode/224.BasicCalculator.md) +* [](/docs/LeetCode/225._implement_stack_using_queues.md) +* [](/docs/LeetCode/226._invert_binary_tree.md) +* [](/docs/LeetCode/227._basic_calculator_ii.md) +* [](/docs/LeetCode/228._summary_ranges.md) +* [](/docs/LeetCode/229._majority_element_ii.md) +* [](/docs/LeetCode/230._kth_smallest_element_in_a_bst.md) +* [](/docs/LeetCode/231._Power_of_Two.md) +* [](/docs/LeetCode/232._implement_queue_using_stacks.md) +* [](/docs/LeetCode/234._palindrome_linked_list.md) +* [](/docs/LeetCode/235._lowest_common_ancestor_of_a_binary_search_tree.md) +* [](/docs/LeetCode/236._lowest_common_ancestor_of_a_binary_tree.md) +* [](/docs/LeetCode/237._delete_node_in_a_linked_list.md) +* [](/docs/LeetCode/238._product_of_array_except_self.md) +* [](/docs/LeetCode/240._search_a_2d_matrix_ii.md) +* [](/docs/LeetCode/242._valid_anagram.md) +* [](/docs/LeetCode/252.MeetingRooms.md) +* [](/docs/LeetCode/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md) +* [](/docs/LeetCode/256.PaintHouse.md) +* [](/docs/LeetCode/257._binary_tree_paths.md) +* [](/docs/LeetCode/258_Add_Digits.md) +* [](/docs/LeetCode/261.GraphValidTree.md) +* [](/docs/LeetCode/263._ugly_number.md) +* [](/docs/LeetCode/264._ugly_number_ii.md) +* [](/docs/LeetCode/265.PaintHouseII.md) +* [](/docs/LeetCode/266.PalindromePermutation.md) +* [](/docs/LeetCode/267.PalindromePermutationII.md) +* [](/docs/LeetCode/268._missing_number.md) +* [](/docs/LeetCode/270.ClosestBinarySearchTreeValue.md) +* [](/docs/LeetCode/276.PaintFence.md) +* [](/docs/LeetCode/277.FindtheCelebrity.md) +* [](/docs/LeetCode/278._First_Bad_Version.md) +* [](/docs/LeetCode/279._perfect_squares.md) +* [](/docs/LeetCode/280._Wiggle_Sort.md) +* [](/docs/LeetCode/283._move_zeroes.md) +* [](/docs/LeetCode/285._inorder_successor_in_bst.md) +* [](/docs/LeetCode/286.WallsandGates.md) +* [](/docs/LeetCode/289._game_of_life.md) +* [](/docs/LeetCode/290._word_pattern.md) +* [](/docs/LeetCode/292._nim_game.md) +* [](/docs/LeetCode/296.BestMeetingPoint.md) +* [](/docs/LeetCode/298.BinaryTreeLongestConsecutiveSequence.md) +* [](/docs/LeetCode/299._bulls_and_cows.md) +* [](/docs/LeetCode/300._longest_increasing_subsequence.md) +* [](/docs/LeetCode/303._range_sum_query_-_immutable.md) +* [](/docs/LeetCode/316._Remove_Duplicate_Letters.md) +* [](/docs/LeetCode/319._Bulb_Switcher.md) +* [](/docs/LeetCode/322.CoinChange.md) +* [](/docs/LeetCode/323.NumberofConnectedComponentsinanUndirectedGraph.md) +* [](/docs/LeetCode/324._Wiggle_Sort_II.md) +* [](/docs/LeetCode/326._power_of_three.md) +* [](/docs/LeetCode/328._odd_even_linked_list.md) +* [](/docs/LeetCode/334._increasing_triplet_subsequence.md) +* [](/docs/LeetCode/337._house_robber_iii.md) +* [](/docs/LeetCode/338.CountingBits.md) +* [](/docs/LeetCode/339.NestedListWeightSum.md) +* [](/docs/LeetCode/341._Flatten_Nested_List_Iterator.md) +* [](/docs/LeetCode/342._Power_of_Four.md) +* [](/docs/LeetCode/344._reverse_string.md) +* [](/docs/LeetCode/345._Reverse_Vowels_of_a_String.md) +* [](/docs/LeetCode/349._intersection_of_two_arrays.md) +* [](/docs/LeetCode/350._intersection_of_two_arrays_ii.md) +* [](/docs/LeetCode/353.DesignSnakeGame.md) +* [](/docs/LeetCode/364.NestedListWeightSumII.md) +* [](/docs/LeetCode/366.FindLeavesofBinaryTree.md) +* [](/docs/LeetCode/367._valid_perfect_square.md) +* [](/docs/LeetCode/369.PlusOneLinkedList.md) +* [](/docs/LeetCode/371._sum_of_two_integers.md) +* [](/docs/LeetCode/374._Guess_Number_Higher_or_Lower.md) +* [](/docs/LeetCode/377._combination_sum_iv.md) +* [](/docs/LeetCode/378._kth_smallest_element_in_a_sorted_matrix.md) +* [](/docs/LeetCode/380.InsertDeleteGetRandomO(1).md) +* [](/docs/LeetCode/381.InsertDeleteGetRandomO(1)-Duplicatesallowed.md) +* [](/docs/LeetCode/382._linked_list_random_node.md) +* [](/docs/LeetCode/383._ransom_note.md) +* [](/docs/LeetCode/384.ShuffleanArray.md) +* [](/docs/LeetCode/387._first_unique_character_in_a_string.md) +* [](/docs/LeetCode/388._Longest_Absolute_File_Path.md) +* [](/docs/LeetCode/389._find_the_difference.md) +* [](/docs/LeetCode/392._is_subsequence.md) +* [](/docs/LeetCode/394._decode_string.md) +* [](/docs/LeetCode/400.NthDigit.md) +* [](/docs/LeetCode/401._binary_watch.md) +* [](/docs/LeetCode/404._sum_of_left_leaves.md) +* [](/docs/LeetCode/405.ConvertaNumbertoHexadecimal.md) +* [](/docs/LeetCode/406._Queue_Reconstruction_by_Height.md) +* [](/docs/LeetCode/412._fizz_buzz.md) +* [](/docs/LeetCode/413.ArithmeticSlices.md) +* [](/docs/LeetCode/414._third_maximum_number.md) +* [](/docs/LeetCode/415._add_strings.md) +* [](/docs/LeetCode/416.PartitionEqualSubsetSum.md) +* [](/docs/LeetCode/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md) +* [](/docs/LeetCode/422.ValidWordSquare.md) +* [](/docs/LeetCode/434._number_of_segments_in_a_string.md) +* [](/docs/LeetCode/437._path_sum_iii.md) +* [](/docs/LeetCode/438._Find_All_Anagrams_in_a_String.md) +* [](/docs/LeetCode/439.TernaryExpressionParser.md) +* [](/docs/LeetCode/441._arranging_coins.md) +* [](/docs/LeetCode/448._Find_All_Numbers_Disappeared_in_an_Array.md) +* [](/docs/LeetCode/450.DeleteNodeinaBST.md) +* [](/docs/LeetCode/453._Minimum_Moves_to_Equal_Array_Elements.md) +* [](/docs/LeetCode/459._Repeated_Substring_Pattern.md) +* [](/docs/LeetCode/461._HammingDistance.md) +* [](/docs/LeetCode/463._Island_Perimeter.md) +* [](/docs/LeetCode/467._Unique_Substrings_in_Wraparound_String.md) +* [](/docs/LeetCode/469.ConvexPolygon.md) +* [](/docs/LeetCode/476._Number_Complement.md) +* [](/docs/LeetCode/477._Total_Hamming_Distance.md) +* [](/docs/LeetCode/485._Max_Consecutive_Ones.md) +* [](/docs/LeetCode/587._Erect_the_Fence.md) +* [](/docs/LeetCode/599._Minimum_Index_Sum_of_Two_Lists.md) +* [](/docs/LeetCode/647._Palindromic_Substrings.md) +* [](/docs/LeetCode/657._Judge_Route_Circle.md) +* [](/docs/LeetCode/665._Non-decreasing_Array.md) +* [](/docs/LeetCode/672._Bulb_Switcher_II.md) +* [](/docs/LeetCode/681._Next_Closest_Time.md) +* [](/docs/LeetCode/682._Baseball_Game.md) +* [](/docs/LeetCode/687._Longest_Univalue_Path.md) +* [](/docs/LeetCode/740._delete_and_earn.md) +* [](/docs/LeetCode/760._Find_Anagram_Mappings.md) -8. [HiredInTech](https://www.hiredintech.com/) System Design 的总结特别适合入门 +## 推荐的一些LeetCode网站 +1. [KrisYu的GItuhub](https://github.com/KrisYu/LeetCode-CLRS-Python) +2. [kamyu104的Github](https://github.com/kamyu104/LeetCode) +3. [数据结构与算法/leetcode/lintcode题解](https://algorithm.yuanbin.me/zh-hans/) +4. [Leetcode 讨论区](https://discuss.leetcode.com/) +5. [visualgo算法可视化网站](https://visualgo.net/en) +6. [Data Structure Visualization](https://www.cs.usfca.edu/~galles/visualization/Algorithms.html) +7. [我的算法学习之路 - Lucida](http://zh.lucida.me/blog/on-learning-algorithms/) +8. [HiredInTech](https://www.hiredintech.com/) System Design 的总结特别适合入门 9. [mitcc的Github](https://github.com/mitcc/AlgoSolutions) - 10. [小土刀的面试刷题笔记](http://wdxtub.com/interview/14520594642530.html) - - - - - - - - 💪就是干! diff --git a/001._two_sum.md b/docs/001._two_sum.md similarity index 100% rename from 001._two_sum.md rename to docs/001._two_sum.md diff --git a/002._add_two_numbers.md b/docs/002._add_two_numbers.md similarity index 100% rename from 002._add_two_numbers.md rename to docs/002._add_two_numbers.md diff --git a/003._longest_substring_without_repeating_characters.md b/docs/003._longest_substring_without_repeating_characters.md similarity index 100% rename from 003._longest_substring_without_repeating_characters.md rename to docs/003._longest_substring_without_repeating_characters.md diff --git a/004._median_of_two_sorted_arrays.md b/docs/004._median_of_two_sorted_arrays.md similarity index 100% rename from 004._median_of_two_sorted_arrays.md rename to docs/004._median_of_two_sorted_arrays.md diff --git a/005._longest_palindromic_substring.md b/docs/005._longest_palindromic_substring.md similarity index 100% rename from 005._longest_palindromic_substring.md rename to docs/005._longest_palindromic_substring.md diff --git a/007._Reverse_Integer.md b/docs/007._Reverse_Integer.md similarity index 100% rename from 007._Reverse_Integer.md rename to docs/007._Reverse_Integer.md diff --git a/008._string_to_integer_(atoi).md b/docs/008._string_to_integer_(atoi).md similarity index 100% rename from 008._string_to_integer_(atoi).md rename to docs/008._string_to_integer_(atoi).md diff --git a/010._regular_expression_matching.md b/docs/010._regular_expression_matching.md similarity index 100% rename from 010._regular_expression_matching.md rename to docs/010._regular_expression_matching.md diff --git a/011._container_with_most_water.md b/docs/011._container_with_most_water.md similarity index 100% rename from 011._container_with_most_water.md rename to docs/011._container_with_most_water.md diff --git a/012._Integer_to_Roman.md b/docs/012._Integer_to_Roman.md similarity index 100% rename from 012._Integer_to_Roman.md rename to docs/012._Integer_to_Roman.md diff --git a/013._Roman_to_Integer.md b/docs/013._Roman_to_Integer.md similarity index 100% rename from 013._Roman_to_Integer.md rename to docs/013._Roman_to_Integer.md diff --git a/014._longest_common_prefix.md b/docs/014._longest_common_prefix.md similarity index 100% rename from 014._longest_common_prefix.md rename to docs/014._longest_common_prefix.md diff --git a/015._3sum.md b/docs/015._3sum.md similarity index 100% rename from 015._3sum.md rename to docs/015._3sum.md diff --git a/016._3sum_closest.md b/docs/016._3sum_closest.md similarity index 100% rename from 016._3sum_closest.md rename to docs/016._3sum_closest.md diff --git a/017._letter_combinations_of_a_phone_number.md b/docs/017._letter_combinations_of_a_phone_number.md similarity index 100% rename from 017._letter_combinations_of_a_phone_number.md rename to docs/017._letter_combinations_of_a_phone_number.md diff --git a/018._4sum.md b/docs/018._4sum.md similarity index 100% rename from 018._4sum.md rename to docs/018._4sum.md diff --git a/019._remove_nth_node_from_end_of_list.md b/docs/019._remove_nth_node_from_end_of_list.md similarity index 100% rename from 019._remove_nth_node_from_end_of_list.md rename to docs/019._remove_nth_node_from_end_of_list.md diff --git a/020._valid_parentheses.md b/docs/020._valid_parentheses.md similarity index 100% rename from 020._valid_parentheses.md rename to docs/020._valid_parentheses.md diff --git a/021._merge_two_sorted_lists.md b/docs/021._merge_two_sorted_lists.md similarity index 100% rename from 021._merge_two_sorted_lists.md rename to docs/021._merge_two_sorted_lists.md diff --git a/022._generate_parentheses.md b/docs/022._generate_parentheses.md similarity index 100% rename from 022._generate_parentheses.md rename to docs/022._generate_parentheses.md diff --git a/023._merge_k_sorted_lists.md b/docs/023._merge_k_sorted_lists.md similarity index 100% rename from 023._merge_k_sorted_lists.md rename to docs/023._merge_k_sorted_lists.md diff --git a/024._swap_nodes_in_pairs.md b/docs/024._swap_nodes_in_pairs.md similarity index 100% rename from 024._swap_nodes_in_pairs.md rename to docs/024._swap_nodes_in_pairs.md diff --git a/026._Remove_Duplicates_from_Sorted_Array.md b/docs/026._Remove_Duplicates_from_Sorted_Array.md similarity index 100% rename from 026._Remove_Duplicates_from_Sorted_Array.md rename to docs/026._Remove_Duplicates_from_Sorted_Array.md diff --git a/027._Remove_Element.md b/docs/027._Remove_Element.md similarity index 100% rename from 027._Remove_Element.md rename to docs/027._Remove_Element.md diff --git a/028._implement_strstr().md b/docs/028._implement_strstr().md similarity index 100% rename from 028._implement_strstr().md rename to docs/028._implement_strstr().md diff --git a/030._Substring_with_Concatenation_of_All_Words.md b/docs/030._Substring_with_Concatenation_of_All_Words.md similarity index 100% rename from 030._Substring_with_Concatenation_of_All_Words.md rename to docs/030._Substring_with_Concatenation_of_All_Words.md diff --git a/031._next_permutation.md b/docs/031._next_permutation.md similarity index 100% rename from 031._next_permutation.md rename to docs/031._next_permutation.md diff --git a/033._search_in_rotated_sorted_array.md b/docs/033._search_in_rotated_sorted_array.md similarity index 100% rename from 033._search_in_rotated_sorted_array.md rename to docs/033._search_in_rotated_sorted_array.md diff --git a/034._Search for a Range.md b/docs/034._Search for a Range.md similarity index 100% rename from 034._Search for a Range.md rename to docs/034._Search for a Range.md diff --git a/035._search_insert_position.md b/docs/035._search_insert_position.md similarity index 100% rename from 035._search_insert_position.md rename to docs/035._search_insert_position.md diff --git a/038._Count_and_Say.md b/docs/038._Count_and_Say.md similarity index 100% rename from 038._Count_and_Say.md rename to docs/038._Count_and_Say.md diff --git a/039._combination_sum.md b/docs/039._combination_sum.md similarity index 100% rename from 039._combination_sum.md rename to docs/039._combination_sum.md diff --git a/040._combination_sum_ii.md b/docs/040._combination_sum_ii.md similarity index 100% rename from 040._combination_sum_ii.md rename to docs/040._combination_sum_ii.md diff --git a/042._trapping_rain_water.md b/docs/042._trapping_rain_water.md similarity index 100% rename from 042._trapping_rain_water.md rename to docs/042._trapping_rain_water.md diff --git a/043._multiply_strings.md b/docs/043._multiply_strings.md similarity index 100% rename from 043._multiply_strings.md rename to docs/043._multiply_strings.md diff --git a/044._wildcard_matching.md b/docs/044._wildcard_matching.md similarity index 100% rename from 044._wildcard_matching.md rename to docs/044._wildcard_matching.md diff --git a/045._Jump_Game_II.md b/docs/045._Jump_Game_II.md similarity index 100% rename from 045._Jump_Game_II.md rename to docs/045._Jump_Game_II.md diff --git a/046._permutations.md b/docs/046._permutations.md similarity index 100% rename from 046._permutations.md rename to docs/046._permutations.md diff --git a/047._permutations_ii.md b/docs/047._permutations_ii.md similarity index 100% rename from 047._permutations_ii.md rename to docs/047._permutations_ii.md diff --git a/048._rotate_image.md b/docs/048._rotate_image.md similarity index 100% rename from 048._rotate_image.md rename to docs/048._rotate_image.md diff --git a/049._group_anagrams_python.md b/docs/049._group_anagrams_python.md similarity index 100% rename from 049._group_anagrams_python.md rename to docs/049._group_anagrams_python.md diff --git a/050._pow(x,_n).md b/docs/050._pow(x,_n).md similarity index 100% rename from 050._pow(x,_n).md rename to docs/050._pow(x,_n).md diff --git a/051._n-queens.md b/docs/051._n-queens.md similarity index 100% rename from 051._n-queens.md rename to docs/051._n-queens.md diff --git a/052._n-queens_ii.md b/docs/052._n-queens_ii.md similarity index 100% rename from 052._n-queens_ii.md rename to docs/052._n-queens_ii.md diff --git a/053._maximum_subarray.md b/docs/053._maximum_subarray.md similarity index 100% rename from 053._maximum_subarray.md rename to docs/053._maximum_subarray.md diff --git a/054._spiral_matrix.md b/docs/054._spiral_matrix.md similarity index 100% rename from 054._spiral_matrix.md rename to docs/054._spiral_matrix.md diff --git a/055._jump_game.md b/docs/055._jump_game.md similarity index 100% rename from 055._jump_game.md rename to docs/055._jump_game.md diff --git a/056._Merge_Intervals.md b/docs/056._Merge_Intervals.md similarity index 100% rename from 056._Merge_Intervals.md rename to docs/056._Merge_Intervals.md diff --git a/058._length_of_last_word.md b/docs/058._length_of_last_word.md similarity index 100% rename from 058._length_of_last_word.md rename to docs/058._length_of_last_word.md diff --git a/059._spiral_matrix_ii.md b/docs/059._spiral_matrix_ii.md similarity index 100% rename from 059._spiral_matrix_ii.md rename to docs/059._spiral_matrix_ii.md diff --git a/060._permutation_sequence.md b/docs/060._permutation_sequence.md similarity index 100% rename from 060._permutation_sequence.md rename to docs/060._permutation_sequence.md diff --git a/061._rotate_list.md b/docs/061._rotate_list.md similarity index 100% rename from 061._rotate_list.md rename to docs/061._rotate_list.md diff --git a/064._minimum_path_sum.md b/docs/064._minimum_path_sum.md similarity index 100% rename from 064._minimum_path_sum.md rename to docs/064._minimum_path_sum.md diff --git a/065.unique_paths_ii.md b/docs/065.unique_paths_ii.md similarity index 100% rename from 065.unique_paths_ii.md rename to docs/065.unique_paths_ii.md diff --git a/066._plus_one.md b/docs/066._plus_one.md similarity index 100% rename from 066._plus_one.md rename to docs/066._plus_one.md diff --git a/067._add_binary.md b/docs/067._add_binary.md similarity index 100% rename from 067._add_binary.md rename to docs/067._add_binary.md diff --git a/069._sqrt(x).md b/docs/069._sqrt(x).md similarity index 100% rename from 069._sqrt(x).md rename to docs/069._sqrt(x).md diff --git a/070. Climbing Stairs.md b/docs/070. Climbing Stairs.md similarity index 100% rename from 070. Climbing Stairs.md rename to docs/070. Climbing Stairs.md diff --git a/072._edit_distance.md b/docs/072._edit_distance.md similarity index 100% rename from 072._edit_distance.md rename to docs/072._edit_distance.md diff --git a/073. Set Matrix Zeroes.md b/docs/073. Set Matrix Zeroes.md similarity index 100% rename from 073. Set Matrix Zeroes.md rename to docs/073. Set Matrix Zeroes.md diff --git a/074._search_a_2d_matrix.md b/docs/074._search_a_2d_matrix.md similarity index 100% rename from 074._search_a_2d_matrix.md rename to docs/074._search_a_2d_matrix.md diff --git a/075._sort_colors.md b/docs/075._sort_colors.md similarity index 100% rename from 075._sort_colors.md rename to docs/075._sort_colors.md diff --git a/076._Minimum_Window_Substring.md b/docs/076._Minimum_Window_Substring.md similarity index 100% rename from 076._Minimum_Window_Substring.md rename to docs/076._Minimum_Window_Substring.md diff --git a/077._combinations.md b/docs/077._combinations.md similarity index 100% rename from 077._combinations.md rename to docs/077._combinations.md diff --git a/078.Subsets .md b/docs/078.Subsets .md similarity index 100% rename from 078.Subsets .md rename to docs/078.Subsets .md diff --git a/079._word_search.md b/docs/079._word_search.md similarity index 100% rename from 079._word_search.md rename to docs/079._word_search.md diff --git a/082._remove_duplicates_from_sorted_list_ii.md b/docs/082._remove_duplicates_from_sorted_list_ii.md similarity index 100% rename from 082._remove_duplicates_from_sorted_list_ii.md rename to docs/082._remove_duplicates_from_sorted_list_ii.md diff --git a/083._remove_duplicates_from_sorted_list.md b/docs/083._remove_duplicates_from_sorted_list.md similarity index 100% rename from 083._remove_duplicates_from_sorted_list.md rename to docs/083._remove_duplicates_from_sorted_list.md diff --git a/086._partition_list.md b/docs/086._partition_list.md similarity index 100% rename from 086._partition_list.md rename to docs/086._partition_list.md diff --git a/088._merge_sorted_array.md b/docs/088._merge_sorted_array.md similarity index 100% rename from 088._merge_sorted_array.md rename to docs/088._merge_sorted_array.md diff --git a/089._gray_code.md b/docs/089._gray_code.md similarity index 100% rename from 089._gray_code.md rename to docs/089._gray_code.md diff --git a/090._subsets_ii.md b/docs/090._subsets_ii.md similarity index 100% rename from 090._subsets_ii.md rename to docs/090._subsets_ii.md diff --git a/091._decode_ways.md b/docs/091._decode_ways.md similarity index 100% rename from 091._decode_ways.md rename to docs/091._decode_ways.md diff --git a/092._reverse_linked_list_ii.md b/docs/092._reverse_linked_list_ii.md similarity index 100% rename from 092._reverse_linked_list_ii.md rename to docs/092._reverse_linked_list_ii.md diff --git a/093._restore_ip_addresses.md b/docs/093._restore_ip_addresses.md similarity index 100% rename from 093._restore_ip_addresses.md rename to docs/093._restore_ip_addresses.md diff --git a/094._binary_tree_inorder_traversal.md b/docs/094._binary_tree_inorder_traversal.md similarity index 100% rename from 094._binary_tree_inorder_traversal.md rename to docs/094._binary_tree_inorder_traversal.md diff --git a/096._unique_binary_search_trees.md b/docs/096._unique_binary_search_trees.md similarity index 100% rename from 096._unique_binary_search_trees.md rename to docs/096._unique_binary_search_trees.md diff --git a/098._validate_binary_search_tree.md b/docs/098._validate_binary_search_tree.md similarity index 100% rename from 098._validate_binary_search_tree.md rename to docs/098._validate_binary_search_tree.md diff --git a/100._same_tree.md b/docs/100._same_tree.md similarity index 100% rename from 100._same_tree.md rename to docs/100._same_tree.md diff --git a/101._symmetric_tree.md b/docs/101._symmetric_tree.md similarity index 100% rename from 101._symmetric_tree.md rename to docs/101._symmetric_tree.md diff --git a/102._binary_tree_level_order_traversal.md b/docs/102._binary_tree_level_order_traversal.md similarity index 100% rename from 102._binary_tree_level_order_traversal.md rename to docs/102._binary_tree_level_order_traversal.md diff --git a/103._binary_tree_zigzag_level_order_traversal.md b/docs/103._binary_tree_zigzag_level_order_traversal.md similarity index 100% rename from 103._binary_tree_zigzag_level_order_traversal.md rename to docs/103._binary_tree_zigzag_level_order_traversal.md diff --git a/104._maximum_depth_of_binary_tree.md b/docs/104._maximum_depth_of_binary_tree.md similarity index 100% rename from 104._maximum_depth_of_binary_tree.md rename to docs/104._maximum_depth_of_binary_tree.md diff --git a/105._construct_binary_tree_from_preorder_and_inorder_traversal.md b/docs/105._construct_binary_tree_from_preorder_and_inorder_traversal.md similarity index 100% rename from 105._construct_binary_tree_from_preorder_and_inorder_traversal.md rename to docs/105._construct_binary_tree_from_preorder_and_inorder_traversal.md diff --git a/106._construct_binary_tree_from_inorder_and_postorder_traversal.md b/docs/106._construct_binary_tree_from_inorder_and_postorder_traversal.md similarity index 100% rename from 106._construct_binary_tree_from_inorder_and_postorder_traversal.md rename to docs/106._construct_binary_tree_from_inorder_and_postorder_traversal.md diff --git a/107._binary_tree_level_order_traversal_ii.md b/docs/107._binary_tree_level_order_traversal_ii.md similarity index 100% rename from 107._binary_tree_level_order_traversal_ii.md rename to docs/107._binary_tree_level_order_traversal_ii.md diff --git a/108._convert_sorted_array_to_binary_search_tree.md b/docs/108._convert_sorted_array_to_binary_search_tree.md similarity index 100% rename from 108._convert_sorted_array_to_binary_search_tree.md rename to docs/108._convert_sorted_array_to_binary_search_tree.md diff --git a/109._convert_sorted_list_to_binary_search_tree.md b/docs/109._convert_sorted_list_to_binary_search_tree.md similarity index 100% rename from 109._convert_sorted_list_to_binary_search_tree.md rename to docs/109._convert_sorted_list_to_binary_search_tree.md diff --git a/110._balanced_binary_tree.md b/docs/110._balanced_binary_tree.md similarity index 100% rename from 110._balanced_binary_tree.md rename to docs/110._balanced_binary_tree.md diff --git a/111._minimum_depth_of_binary_tree.md b/docs/111._minimum_depth_of_binary_tree.md similarity index 100% rename from 111._minimum_depth_of_binary_tree.md rename to docs/111._minimum_depth_of_binary_tree.md diff --git a/112._path_sum.md b/docs/112._path_sum.md similarity index 100% rename from 112._path_sum.md rename to docs/112._path_sum.md diff --git a/113._path_sum_ii.md b/docs/113._path_sum_ii.md similarity index 100% rename from 113._path_sum_ii.md rename to docs/113._path_sum_ii.md diff --git a/114._flatten_binary_tree_to_linked_list.md b/docs/114._flatten_binary_tree_to_linked_list.md similarity index 100% rename from 114._flatten_binary_tree_to_linked_list.md rename to docs/114._flatten_binary_tree_to_linked_list.md diff --git a/116._populating_next_right_pointers_in_each_node.md b/docs/116._populating_next_right_pointers_in_each_node.md similarity index 100% rename from 116._populating_next_right_pointers_in_each_node.md rename to docs/116._populating_next_right_pointers_in_each_node.md diff --git a/118._pascal's_triangle.md b/docs/118._pascal's_triangle.md similarity index 100% rename from 118._pascal's_triangle.md rename to docs/118._pascal's_triangle.md diff --git a/119. Pascal's Triangle II.md b/docs/119. Pascal's Triangle II.md similarity index 100% rename from 119. Pascal's Triangle II.md rename to docs/119. Pascal's Triangle II.md diff --git a/120. Triangle.md b/docs/120. Triangle.md similarity index 100% rename from 120. Triangle.md rename to docs/120. Triangle.md diff --git a/121._Best_Time_to_Buy_and_Sell_Stock.md b/docs/121._Best_Time_to_Buy_and_Sell_Stock.md similarity index 100% rename from 121._Best_Time_to_Buy_and_Sell_Stock.md rename to docs/121._Best_Time_to_Buy_and_Sell_Stock.md diff --git a/125._valid_palindrome.md b/docs/125._valid_palindrome.md similarity index 100% rename from 125._valid_palindrome.md rename to docs/125._valid_palindrome.md diff --git a/126. Word Ladder II.md b/docs/126. Word Ladder II.md similarity index 100% rename from 126. Word Ladder II.md rename to docs/126. Word Ladder II.md diff --git a/127._word_ladder.md b/docs/127._word_ladder.md similarity index 100% rename from 127._word_ladder.md rename to docs/127._word_ladder.md diff --git a/128._Longest_Consecutive_Sequence.md b/docs/128._Longest_Consecutive_Sequence.md similarity index 100% rename from 128._Longest_Consecutive_Sequence.md rename to docs/128._Longest_Consecutive_Sequence.md diff --git a/129._sum_root_to_leaf_numbers.md b/docs/129._sum_root_to_leaf_numbers.md similarity index 100% rename from 129._sum_root_to_leaf_numbers.md rename to docs/129._sum_root_to_leaf_numbers.md diff --git a/130._surrounded_regions.md b/docs/130._surrounded_regions.md similarity index 100% rename from 130._surrounded_regions.md rename to docs/130._surrounded_regions.md diff --git a/131._palindrome_partitioning.md b/docs/131._palindrome_partitioning.md similarity index 100% rename from 131._palindrome_partitioning.md rename to docs/131._palindrome_partitioning.md diff --git a/133._clone_graph.md b/docs/133._clone_graph.md similarity index 100% rename from 133._clone_graph.md rename to docs/133._clone_graph.md diff --git a/136._single_number.md b/docs/136._single_number.md similarity index 100% rename from 136._single_number.md rename to docs/136._single_number.md diff --git a/139._word_break.md b/docs/139._word_break.md similarity index 100% rename from 139._word_break.md rename to docs/139._word_break.md diff --git a/140._word_break_ii.md b/docs/140._word_break_ii.md similarity index 100% rename from 140._word_break_ii.md rename to docs/140._word_break_ii.md diff --git a/141._linked_list_cycle.md b/docs/141._linked_list_cycle.md similarity index 100% rename from 141._linked_list_cycle.md rename to docs/141._linked_list_cycle.md diff --git a/142_Linked_List_Cycle_II.md b/docs/142_Linked_List_Cycle_II.md similarity index 100% rename from 142_Linked_List_Cycle_II.md rename to docs/142_Linked_List_Cycle_II.md diff --git a/143._reorder_list.md b/docs/143._reorder_list.md similarity index 100% rename from 143._reorder_list.md rename to docs/143._reorder_list.md diff --git a/144._binary_tree_preorder_traversal.md b/docs/144._binary_tree_preorder_traversal.md similarity index 100% rename from 144._binary_tree_preorder_traversal.md rename to docs/144._binary_tree_preorder_traversal.md diff --git a/145._binary_tree_postorder_traversal.md b/docs/145._binary_tree_postorder_traversal.md similarity index 100% rename from 145._binary_tree_postorder_traversal.md rename to docs/145._binary_tree_postorder_traversal.md diff --git a/147._insertion_sort_list.md b/docs/147._insertion_sort_list.md similarity index 100% rename from 147._insertion_sort_list.md rename to docs/147._insertion_sort_list.md diff --git a/148._sort_list.md b/docs/148._sort_list.md similarity index 100% rename from 148._sort_list.md rename to docs/148._sort_list.md diff --git a/150._evaluate_reverse_polish_notation.md b/docs/150._evaluate_reverse_polish_notation.md similarity index 100% rename from 150._evaluate_reverse_polish_notation.md rename to docs/150._evaluate_reverse_polish_notation.md diff --git a/151._reverse_words_in_a_string.md b/docs/151._reverse_words_in_a_string.md similarity index 100% rename from 151._reverse_words_in_a_string.md rename to docs/151._reverse_words_in_a_string.md diff --git a/152._maximum_product_subarray.md b/docs/152._maximum_product_subarray.md similarity index 100% rename from 152._maximum_product_subarray.md rename to docs/152._maximum_product_subarray.md diff --git a/153._find_minimum_in_rotated_sorted_array.md b/docs/153._find_minimum_in_rotated_sorted_array.md similarity index 100% rename from 153._find_minimum_in_rotated_sorted_array.md rename to docs/153._find_minimum_in_rotated_sorted_array.md diff --git a/155._min_stack.md b/docs/155._min_stack.md similarity index 100% rename from 155._min_stack.md rename to docs/155._min_stack.md diff --git a/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md b/docs/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md similarity index 100% rename from 159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md rename to docs/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md diff --git a/160._intersection_of_two_linked_lists.md b/docs/160._intersection_of_two_linked_lists.md similarity index 100% rename from 160._intersection_of_two_linked_lists.md rename to docs/160._intersection_of_two_linked_lists.md diff --git a/162._find_peak_element.md b/docs/162._find_peak_element.md similarity index 100% rename from 162._find_peak_element.md rename to docs/162._find_peak_element.md diff --git a/165._compare_version_numbers.md b/docs/165._compare_version_numbers.md similarity index 100% rename from 165._compare_version_numbers.md rename to docs/165._compare_version_numbers.md diff --git a/166._Fraction_to_Recurring_Decimal.md b/docs/166._Fraction_to_Recurring_Decimal.md similarity index 100% rename from 166._Fraction_to_Recurring_Decimal.md rename to docs/166._Fraction_to_Recurring_Decimal.md diff --git a/167._two_sum_ii_-_input_array_is_sorted.md b/docs/167._two_sum_ii_-_input_array_is_sorted.md similarity index 100% rename from 167._two_sum_ii_-_input_array_is_sorted.md rename to docs/167._two_sum_ii_-_input_array_is_sorted.md diff --git a/168._excel_sheet_column_title.md b/docs/168._excel_sheet_column_title.md similarity index 100% rename from 168._excel_sheet_column_title.md rename to docs/168._excel_sheet_column_title.md diff --git a/169._majority_element.md b/docs/169._majority_element.md similarity index 100% rename from 169._majority_element.md rename to docs/169._majority_element.md diff --git a/171._excel_sheet_column_number.md b/docs/171._excel_sheet_column_number.md similarity index 100% rename from 171._excel_sheet_column_number.md rename to docs/171._excel_sheet_column_number.md diff --git a/173._binary_search_tree_iterator.md b/docs/173._binary_search_tree_iterator.md similarity index 100% rename from 173._binary_search_tree_iterator.md rename to docs/173._binary_search_tree_iterator.md diff --git a/189._rotate_array.md b/docs/189._rotate_array.md similarity index 100% rename from 189._rotate_array.md rename to docs/189._rotate_array.md diff --git a/191._number_of_1_bits.md b/docs/191._number_of_1_bits.md similarity index 100% rename from 191._number_of_1_bits.md rename to docs/191._number_of_1_bits.md diff --git a/198._house_robber.md b/docs/198._house_robber.md similarity index 100% rename from 198._house_robber.md rename to docs/198._house_robber.md diff --git a/199._binary_tree_right_side_view.md b/docs/199._binary_tree_right_side_view.md similarity index 100% rename from 199._binary_tree_right_side_view.md rename to docs/199._binary_tree_right_side_view.md diff --git a/200._number_of_islands.md b/docs/200._number_of_islands.md similarity index 100% rename from 200._number_of_islands.md rename to docs/200._number_of_islands.md diff --git a/203._remove_linked_list_elements.md b/docs/203._remove_linked_list_elements.md similarity index 100% rename from 203._remove_linked_list_elements.md rename to docs/203._remove_linked_list_elements.md diff --git a/204._count_primes.md b/docs/204._count_primes.md similarity index 100% rename from 204._count_primes.md rename to docs/204._count_primes.md diff --git a/205._isomorphic_strings.md b/docs/205._isomorphic_strings.md similarity index 100% rename from 205._isomorphic_strings.md rename to docs/205._isomorphic_strings.md diff --git a/206._reverse_linked_list.md b/docs/206._reverse_linked_list.md similarity index 100% rename from 206._reverse_linked_list.md rename to docs/206._reverse_linked_list.md diff --git a/207._course_schedule.md b/docs/207._course_schedule.md similarity index 100% rename from 207._course_schedule.md rename to docs/207._course_schedule.md diff --git a/208._implement_trie_(prefix_tree).md b/docs/208._implement_trie_(prefix_tree).md similarity index 100% rename from 208._implement_trie_(prefix_tree).md rename to docs/208._implement_trie_(prefix_tree).md diff --git a/210._course_schedule_ii.md b/docs/210._course_schedule_ii.md similarity index 100% rename from 210._course_schedule_ii.md rename to docs/210._course_schedule_ii.md diff --git a/211. Add and Search Word - Data structure design.md b/docs/211. Add and Search Word - Data structure design.md similarity index 100% rename from 211. Add and Search Word - Data structure design.md rename to docs/211. Add and Search Word - Data structure design.md diff --git a/213._house_robber_ii.md b/docs/213._house_robber_ii.md similarity index 100% rename from 213._house_robber_ii.md rename to docs/213._house_robber_ii.md diff --git a/216._combination_sum_iii.md b/docs/216._combination_sum_iii.md similarity index 100% rename from 216._combination_sum_iii.md rename to docs/216._combination_sum_iii.md diff --git a/217._contains_duplicate.md b/docs/217._contains_duplicate.md similarity index 100% rename from 217._contains_duplicate.md rename to docs/217._contains_duplicate.md diff --git a/218._The _Skyline_Problem .md b/docs/218._The _Skyline_Problem .md similarity index 100% rename from 218._The _Skyline_Problem .md rename to docs/218._The _Skyline_Problem .md diff --git a/219._contains_duplicate_ii.md b/docs/219._contains_duplicate_ii.md similarity index 100% rename from 219._contains_duplicate_ii.md rename to docs/219._contains_duplicate_ii.md diff --git a/221._maximal_square.md b/docs/221._maximal_square.md similarity index 100% rename from 221._maximal_square.md rename to docs/221._maximal_square.md diff --git a/222._count_complete_tree_nodes.md b/docs/222._count_complete_tree_nodes.md similarity index 100% rename from 222._count_complete_tree_nodes.md rename to docs/222._count_complete_tree_nodes.md diff --git a/223._rectangle_area.md b/docs/223._rectangle_area.md similarity index 100% rename from 223._rectangle_area.md rename to docs/223._rectangle_area.md diff --git a/224. Basic Calculator .md b/docs/224. Basic Calculator .md similarity index 100% rename from 224. Basic Calculator .md rename to docs/224. Basic Calculator .md diff --git a/225._implement_stack_using_queues.md b/docs/225._implement_stack_using_queues.md similarity index 100% rename from 225._implement_stack_using_queues.md rename to docs/225._implement_stack_using_queues.md diff --git a/226._invert_binary_tree.md b/docs/226._invert_binary_tree.md similarity index 100% rename from 226._invert_binary_tree.md rename to docs/226._invert_binary_tree.md diff --git a/227._basic_calculator_ii.md b/docs/227._basic_calculator_ii.md similarity index 100% rename from 227._basic_calculator_ii.md rename to docs/227._basic_calculator_ii.md diff --git a/228._summary_ranges.md b/docs/228._summary_ranges.md similarity index 100% rename from 228._summary_ranges.md rename to docs/228._summary_ranges.md diff --git a/229._majority_element_ii.md b/docs/229._majority_element_ii.md similarity index 100% rename from 229._majority_element_ii.md rename to docs/229._majority_element_ii.md diff --git a/230._kth_smallest_element_in_a_bst.md b/docs/230._kth_smallest_element_in_a_bst.md similarity index 100% rename from 230._kth_smallest_element_in_a_bst.md rename to docs/230._kth_smallest_element_in_a_bst.md diff --git a/231. _Power_of_Two.md b/docs/231. _Power_of_Two.md similarity index 100% rename from 231. _Power_of_Two.md rename to docs/231. _Power_of_Two.md diff --git a/232._implement_queue_using_stacks.md b/docs/232._implement_queue_using_stacks.md similarity index 100% rename from 232._implement_queue_using_stacks.md rename to docs/232._implement_queue_using_stacks.md diff --git a/234._palindrome_linked_list.md b/docs/234._palindrome_linked_list.md similarity index 100% rename from 234._palindrome_linked_list.md rename to docs/234._palindrome_linked_list.md diff --git a/235._lowest_common_ancestor_of_a_binary_search_tree.md b/docs/235._lowest_common_ancestor_of_a_binary_search_tree.md similarity index 100% rename from 235._lowest_common_ancestor_of_a_binary_search_tree.md rename to docs/235._lowest_common_ancestor_of_a_binary_search_tree.md diff --git a/236._lowest_common_ancestor_of_a_binary_tree.md b/docs/236._lowest_common_ancestor_of_a_binary_tree.md similarity index 100% rename from 236._lowest_common_ancestor_of_a_binary_tree.md rename to docs/236._lowest_common_ancestor_of_a_binary_tree.md diff --git a/237._delete_node_in_a_linked_list.md b/docs/237._delete_node_in_a_linked_list.md similarity index 100% rename from 237._delete_node_in_a_linked_list.md rename to docs/237._delete_node_in_a_linked_list.md diff --git a/238._product_of_array_except_self.md b/docs/238._product_of_array_except_self.md similarity index 100% rename from 238._product_of_array_except_self.md rename to docs/238._product_of_array_except_self.md diff --git a/240._search_a_2d_matrix_ii.md b/docs/240._search_a_2d_matrix_ii.md similarity index 100% rename from 240._search_a_2d_matrix_ii.md rename to docs/240._search_a_2d_matrix_ii.md diff --git a/242._valid_anagram.md b/docs/242._valid_anagram.md similarity index 100% rename from 242._valid_anagram.md rename to docs/242._valid_anagram.md diff --git a/252. Meeting Rooms.md b/docs/252. Meeting Rooms.md similarity index 100% rename from 252. Meeting Rooms.md rename to docs/252. Meeting Rooms.md diff --git a/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md b/docs/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md similarity index 100% rename from 255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md rename to docs/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md diff --git a/256. Paint House.md b/docs/256. Paint House.md similarity index 100% rename from 256. Paint House.md rename to docs/256. Paint House.md diff --git a/257._binary_tree_paths.md b/docs/257._binary_tree_paths.md similarity index 100% rename from 257._binary_tree_paths.md rename to docs/257._binary_tree_paths.md diff --git a/258_ Add_Digits.md b/docs/258_ Add_Digits.md similarity index 100% rename from 258_ Add_Digits.md rename to docs/258_ Add_Digits.md diff --git a/261. Graph Valid Tree.md b/docs/261. Graph Valid Tree.md similarity index 100% rename from 261. Graph Valid Tree.md rename to docs/261. Graph Valid Tree.md diff --git a/263._ugly_number.md b/docs/263._ugly_number.md similarity index 100% rename from 263._ugly_number.md rename to docs/263._ugly_number.md diff --git a/264._ugly_number_ii.md b/docs/264._ugly_number_ii.md similarity index 100% rename from 264._ugly_number_ii.md rename to docs/264._ugly_number_ii.md diff --git a/265. Paint House II.md b/docs/265. Paint House II.md similarity index 100% rename from 265. Paint House II.md rename to docs/265. Paint House II.md diff --git a/266. Palindrome Permutation.md b/docs/266. Palindrome Permutation.md similarity index 100% rename from 266. Palindrome Permutation.md rename to docs/266. Palindrome Permutation.md diff --git a/267. Palindrome Permutation II.md b/docs/267. Palindrome Permutation II.md similarity index 100% rename from 267. Palindrome Permutation II.md rename to docs/267. Palindrome Permutation II.md diff --git a/268._missing_number.md b/docs/268._missing_number.md similarity index 100% rename from 268._missing_number.md rename to docs/268._missing_number.md diff --git a/270. Closest Binary Search Tree Value.md b/docs/270. Closest Binary Search Tree Value.md similarity index 100% rename from 270. Closest Binary Search Tree Value.md rename to docs/270. Closest Binary Search Tree Value.md diff --git a/276. Paint Fence.md b/docs/276. Paint Fence.md similarity index 100% rename from 276. Paint Fence.md rename to docs/276. Paint Fence.md diff --git a/277. Find the Celebrity.md b/docs/277. Find the Celebrity.md similarity index 100% rename from 277. Find the Celebrity.md rename to docs/277. Find the Celebrity.md diff --git a/278._First_Bad _Version.md b/docs/278._First_Bad _Version.md similarity index 100% rename from 278._First_Bad _Version.md rename to docs/278._First_Bad _Version.md diff --git a/279._perfect_squares.md b/docs/279._perfect_squares.md similarity index 100% rename from 279._perfect_squares.md rename to docs/279._perfect_squares.md diff --git a/280._Wiggle_Sort.md b/docs/280._Wiggle_Sort.md similarity index 100% rename from 280._Wiggle_Sort.md rename to docs/280._Wiggle_Sort.md diff --git a/283._move_zeroes.md b/docs/283._move_zeroes.md similarity index 100% rename from 283._move_zeroes.md rename to docs/283._move_zeroes.md diff --git a/285._inorder_successor_in_bst.md b/docs/285._inorder_successor_in_bst.md similarity index 100% rename from 285._inorder_successor_in_bst.md rename to docs/285._inorder_successor_in_bst.md diff --git a/286. Walls and Gates.md b/docs/286. Walls and Gates.md similarity index 100% rename from 286. Walls and Gates.md rename to docs/286. Walls and Gates.md diff --git a/289._game_of_life.md b/docs/289._game_of_life.md similarity index 100% rename from 289._game_of_life.md rename to docs/289._game_of_life.md diff --git a/290._word_pattern.md b/docs/290._word_pattern.md similarity index 100% rename from 290._word_pattern.md rename to docs/290._word_pattern.md diff --git a/292._nim_game.md b/docs/292._nim_game.md similarity index 100% rename from 292._nim_game.md rename to docs/292._nim_game.md diff --git a/296. Best Meeting Point.md b/docs/296. Best Meeting Point.md similarity index 100% rename from 296. Best Meeting Point.md rename to docs/296. Best Meeting Point.md diff --git a/298. Binary Tree Longest Consecutive Sequence.md b/docs/298. Binary Tree Longest Consecutive Sequence.md similarity index 100% rename from 298. Binary Tree Longest Consecutive Sequence.md rename to docs/298. Binary Tree Longest Consecutive Sequence.md diff --git a/299._bulls_and_cows.md b/docs/299._bulls_and_cows.md similarity index 100% rename from 299._bulls_and_cows.md rename to docs/299._bulls_and_cows.md diff --git a/300._longest_increasing_subsequence.md b/docs/300._longest_increasing_subsequence.md similarity index 100% rename from 300._longest_increasing_subsequence.md rename to docs/300._longest_increasing_subsequence.md diff --git a/303._range_sum_query_-_immutable.md b/docs/303._range_sum_query_-_immutable.md similarity index 100% rename from 303._range_sum_query_-_immutable.md rename to docs/303._range_sum_query_-_immutable.md diff --git a/316._Remove_Duplicate_Letters.md b/docs/316._Remove_Duplicate_Letters.md similarity index 100% rename from 316._Remove_Duplicate_Letters.md rename to docs/316._Remove_Duplicate_Letters.md diff --git a/319._Bulb_Switcher.md b/docs/319._Bulb_Switcher.md similarity index 100% rename from 319._Bulb_Switcher.md rename to docs/319._Bulb_Switcher.md diff --git a/322. Coin Change.md b/docs/322. Coin Change.md similarity index 100% rename from 322. Coin Change.md rename to docs/322. Coin Change.md diff --git a/323. Number of Connected Components in an Undirected Graph.md b/docs/323. Number of Connected Components in an Undirected Graph.md similarity index 100% rename from 323. Number of Connected Components in an Undirected Graph.md rename to docs/323. Number of Connected Components in an Undirected Graph.md diff --git a/324._Wiggle_Sort_II.md b/docs/324._Wiggle_Sort_II.md similarity index 100% rename from 324._Wiggle_Sort_II.md rename to docs/324._Wiggle_Sort_II.md diff --git a/326._power_of_three.md b/docs/326._power_of_three.md similarity index 100% rename from 326._power_of_three.md rename to docs/326._power_of_three.md diff --git a/328._odd_even_linked_list.md b/docs/328._odd_even_linked_list.md similarity index 100% rename from 328._odd_even_linked_list.md rename to docs/328._odd_even_linked_list.md diff --git a/334._increasing_triplet_subsequence.md b/docs/334._increasing_triplet_subsequence.md similarity index 100% rename from 334._increasing_triplet_subsequence.md rename to docs/334._increasing_triplet_subsequence.md diff --git a/337._house_robber_iii.md b/docs/337._house_robber_iii.md similarity index 100% rename from 337._house_robber_iii.md rename to docs/337._house_robber_iii.md diff --git a/338. Counting Bits.md b/docs/338. Counting Bits.md similarity index 100% rename from 338. Counting Bits.md rename to docs/338. Counting Bits.md diff --git a/339. Nested List Weight Sum.md b/docs/339. Nested List Weight Sum.md similarity index 100% rename from 339. Nested List Weight Sum.md rename to docs/339. Nested List Weight Sum.md diff --git a/341._Flatten_Nested_List_Iterator.md b/docs/341._Flatten_Nested_List_Iterator.md similarity index 100% rename from 341._Flatten_Nested_List_Iterator.md rename to docs/341._Flatten_Nested_List_Iterator.md diff --git a/342._Power_of_Four.md b/docs/342._Power_of_Four.md similarity index 100% rename from 342._Power_of_Four.md rename to docs/342._Power_of_Four.md diff --git a/344._reverse_string.md b/docs/344._reverse_string.md similarity index 100% rename from 344._reverse_string.md rename to docs/344._reverse_string.md diff --git a/345._Reverse_Vowels_of_a_String.md b/docs/345._Reverse_Vowels_of_a_String.md similarity index 100% rename from 345._Reverse_Vowels_of_a_String.md rename to docs/345._Reverse_Vowels_of_a_String.md diff --git a/349._intersection_of_two_arrays.md b/docs/349._intersection_of_two_arrays.md similarity index 100% rename from 349._intersection_of_two_arrays.md rename to docs/349._intersection_of_two_arrays.md diff --git a/350._intersection_of_two_arrays_ii.md b/docs/350._intersection_of_two_arrays_ii.md similarity index 100% rename from 350._intersection_of_two_arrays_ii.md rename to docs/350._intersection_of_two_arrays_ii.md diff --git a/353. Design Snake Game.md b/docs/353. Design Snake Game.md similarity index 100% rename from 353. Design Snake Game.md rename to docs/353. Design Snake Game.md diff --git a/364. Nested List Weight Sum II.md b/docs/364. Nested List Weight Sum II.md similarity index 100% rename from 364. Nested List Weight Sum II.md rename to docs/364. Nested List Weight Sum II.md diff --git a/366. Find Leaves of Binary Tree.md b/docs/366. Find Leaves of Binary Tree.md similarity index 100% rename from 366. Find Leaves of Binary Tree.md rename to docs/366. Find Leaves of Binary Tree.md diff --git a/367._valid_perfect_square.md b/docs/367._valid_perfect_square.md similarity index 100% rename from 367._valid_perfect_square.md rename to docs/367._valid_perfect_square.md diff --git a/369.Plus One Linked List.md b/docs/369.Plus One Linked List.md similarity index 100% rename from 369.Plus One Linked List.md rename to docs/369.Plus One Linked List.md diff --git a/371._sum_of_two_integers.md b/docs/371._sum_of_two_integers.md similarity index 100% rename from 371._sum_of_two_integers.md rename to docs/371._sum_of_two_integers.md diff --git a/374._Guess_Number_Higher_or_Lower.md b/docs/374._Guess_Number_Higher_or_Lower.md similarity index 100% rename from 374._Guess_Number_Higher_or_Lower.md rename to docs/374._Guess_Number_Higher_or_Lower.md diff --git a/377._combination_sum_iv.md b/docs/377._combination_sum_iv.md similarity index 100% rename from 377._combination_sum_iv.md rename to docs/377._combination_sum_iv.md diff --git a/378._kth_smallest_element_in_a_sorted_matrix.md b/docs/378._kth_smallest_element_in_a_sorted_matrix.md similarity index 100% rename from 378._kth_smallest_element_in_a_sorted_matrix.md rename to docs/378._kth_smallest_element_in_a_sorted_matrix.md diff --git a/380. Insert Delete GetRandom O(1).md b/docs/380. Insert Delete GetRandom O(1).md similarity index 100% rename from 380. Insert Delete GetRandom O(1).md rename to docs/380. Insert Delete GetRandom O(1).md diff --git a/381. Insert Delete GetRandom O(1) - Duplicates allowed.md b/docs/381. Insert Delete GetRandom O(1) - Duplicates allowed.md similarity index 100% rename from 381. Insert Delete GetRandom O(1) - Duplicates allowed.md rename to docs/381. Insert Delete GetRandom O(1) - Duplicates allowed.md diff --git a/382._linked_list_random_node.md b/docs/382._linked_list_random_node.md similarity index 100% rename from 382._linked_list_random_node.md rename to docs/382._linked_list_random_node.md diff --git a/383._ransom_note.md b/docs/383._ransom_note.md similarity index 100% rename from 383._ransom_note.md rename to docs/383._ransom_note.md diff --git a/384. Shuffle an Array.md b/docs/384. Shuffle an Array.md similarity index 100% rename from 384. Shuffle an Array.md rename to docs/384. Shuffle an Array.md diff --git a/387._first_unique_character_in_a_string.md b/docs/387._first_unique_character_in_a_string.md similarity index 100% rename from 387._first_unique_character_in_a_string.md rename to docs/387._first_unique_character_in_a_string.md diff --git a/388._Longest_Absolute_File_Path.md b/docs/388._Longest_Absolute_File_Path.md similarity index 100% rename from 388._Longest_Absolute_File_Path.md rename to docs/388._Longest_Absolute_File_Path.md diff --git a/389._find_the_difference.md b/docs/389._find_the_difference.md similarity index 100% rename from 389._find_the_difference.md rename to docs/389._find_the_difference.md diff --git a/392._is_subsequence.md b/docs/392._is_subsequence.md similarity index 100% rename from 392._is_subsequence.md rename to docs/392._is_subsequence.md diff --git a/394._decode_string.md b/docs/394._decode_string.md similarity index 100% rename from 394._decode_string.md rename to docs/394._decode_string.md diff --git a/400. Nth Digit.md b/docs/400. Nth Digit.md similarity index 100% rename from 400. Nth Digit.md rename to docs/400. Nth Digit.md diff --git a/401._binary_watch.md b/docs/401._binary_watch.md similarity index 100% rename from 401._binary_watch.md rename to docs/401._binary_watch.md diff --git a/404._sum_of_left_leaves.md b/docs/404._sum_of_left_leaves.md similarity index 100% rename from 404._sum_of_left_leaves.md rename to docs/404._sum_of_left_leaves.md diff --git a/405. Convert a Number to Hexadecimal.md b/docs/405. Convert a Number to Hexadecimal.md similarity index 100% rename from 405. Convert a Number to Hexadecimal.md rename to docs/405. Convert a Number to Hexadecimal.md diff --git a/406._Queue_Reconstruction_by_Height.md b/docs/406._Queue_Reconstruction_by_Height.md similarity index 100% rename from 406._Queue_Reconstruction_by_Height.md rename to docs/406._Queue_Reconstruction_by_Height.md diff --git a/412._fizz_buzz.md b/docs/412._fizz_buzz.md similarity index 100% rename from 412._fizz_buzz.md rename to docs/412._fizz_buzz.md diff --git a/413. Arithmetic Slices.md b/docs/413. Arithmetic Slices.md similarity index 100% rename from 413. Arithmetic Slices.md rename to docs/413. Arithmetic Slices.md diff --git a/414._third_maximum_number.md b/docs/414._third_maximum_number.md similarity index 100% rename from 414._third_maximum_number.md rename to docs/414._third_maximum_number.md diff --git a/415._add_strings.md b/docs/415._add_strings.md similarity index 100% rename from 415._add_strings.md rename to docs/415._add_strings.md diff --git a/416. Partition Equal Subset Sum.md b/docs/416. Partition Equal Subset Sum.md similarity index 100% rename from 416. Partition Equal Subset Sum.md rename to docs/416. Partition Equal Subset Sum.md diff --git a/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md b/docs/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md similarity index 100% rename from 421._Maximum_XOR_of_Two_Numbers_in_an_Array.md rename to docs/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md diff --git a/422. Valid Word Square.md b/docs/422. Valid Word Square.md similarity index 100% rename from 422. Valid Word Square.md rename to docs/422. Valid Word Square.md diff --git a/434._number_of_segments_in_a_string.md b/docs/434._number_of_segments_in_a_string.md similarity index 100% rename from 434._number_of_segments_in_a_string.md rename to docs/434._number_of_segments_in_a_string.md diff --git a/437._path_sum_iii.md b/docs/437._path_sum_iii.md similarity index 100% rename from 437._path_sum_iii.md rename to docs/437._path_sum_iii.md diff --git a/438._Find_All_Anagrams_in_a_String.md b/docs/438._Find_All_Anagrams_in_a_String.md similarity index 100% rename from 438._Find_All_Anagrams_in_a_String.md rename to docs/438._Find_All_Anagrams_in_a_String.md diff --git a/439. Ternary Expression Parser.md b/docs/439. Ternary Expression Parser.md similarity index 100% rename from 439. Ternary Expression Parser.md rename to docs/439. Ternary Expression Parser.md diff --git a/441._arranging_coins.md b/docs/441._arranging_coins.md similarity index 100% rename from 441._arranging_coins.md rename to docs/441._arranging_coins.md diff --git a/448._Find_All_Numbers_Disappeared_in_an_Array.md b/docs/448._Find_All_Numbers_Disappeared_in_an_Array.md similarity index 100% rename from 448._Find_All_Numbers_Disappeared_in_an_Array.md rename to docs/448._Find_All_Numbers_Disappeared_in_an_Array.md diff --git a/450. Delete Node in a BST.md b/docs/450. Delete Node in a BST.md similarity index 100% rename from 450. Delete Node in a BST.md rename to docs/450. Delete Node in a BST.md diff --git a/453._Minimum_Moves_to_Equal_Array_Elements.md b/docs/453._Minimum_Moves_to_Equal_Array_Elements.md similarity index 100% rename from 453._Minimum_Moves_to_Equal_Array_Elements.md rename to docs/453._Minimum_Moves_to_Equal_Array_Elements.md diff --git a/459._Repeated_Substring_Pattern.md b/docs/459._Repeated_Substring_Pattern.md similarity index 100% rename from 459._Repeated_Substring_Pattern.md rename to docs/459._Repeated_Substring_Pattern.md diff --git a/461._Hamming Distance.md b/docs/461._Hamming Distance.md similarity index 100% rename from 461._Hamming Distance.md rename to docs/461._Hamming Distance.md diff --git a/463._Island_Perimeter.md b/docs/463._Island_Perimeter.md similarity index 100% rename from 463._Island_Perimeter.md rename to docs/463._Island_Perimeter.md diff --git a/467._Unique_Substrings_in_Wraparound_String.md b/docs/467._Unique_Substrings_in_Wraparound_String.md similarity index 100% rename from 467._Unique_Substrings_in_Wraparound_String.md rename to docs/467._Unique_Substrings_in_Wraparound_String.md diff --git a/469. Convex Polygon.md b/docs/469. Convex Polygon.md similarity index 100% rename from 469. Convex Polygon.md rename to docs/469. Convex Polygon.md diff --git a/476._Number_Complement.md b/docs/476._Number_Complement.md similarity index 100% rename from 476._Number_Complement.md rename to docs/476._Number_Complement.md diff --git a/477._Total_Hamming_Distance.md b/docs/477._Total_Hamming_Distance.md similarity index 100% rename from 477._Total_Hamming_Distance.md rename to docs/477._Total_Hamming_Distance.md diff --git a/485._Max_Consecutive_Ones.md b/docs/485._Max_Consecutive_Ones.md similarity index 100% rename from 485._Max_Consecutive_Ones.md rename to docs/485._Max_Consecutive_Ones.md diff --git a/587._Erect_the_Fence .md b/docs/587._Erect_the_Fence .md similarity index 100% rename from 587._Erect_the_Fence .md rename to docs/587._Erect_the_Fence .md diff --git a/599._Minimum_Index_Sum_of_Two_Lists.md b/docs/599._Minimum_Index_Sum_of_Two_Lists.md similarity index 100% rename from 599._Minimum_Index_Sum_of_Two_Lists.md rename to docs/599._Minimum_Index_Sum_of_Two_Lists.md diff --git a/647._Palindromic_Substrings.md b/docs/647._Palindromic_Substrings.md similarity index 100% rename from 647._Palindromic_Substrings.md rename to docs/647._Palindromic_Substrings.md diff --git a/657._Judge_Route_Circle.md b/docs/657._Judge_Route_Circle.md similarity index 100% rename from 657._Judge_Route_Circle.md rename to docs/657._Judge_Route_Circle.md diff --git a/665._Non-decreasing_Array.md b/docs/665._Non-decreasing_Array.md similarity index 100% rename from 665._Non-decreasing_Array.md rename to docs/665._Non-decreasing_Array.md diff --git a/672._Bulb_Switcher_II.md b/docs/672._Bulb_Switcher_II.md similarity index 100% rename from 672._Bulb_Switcher_II.md rename to docs/672._Bulb_Switcher_II.md diff --git a/681._Next_Closest_Time.md b/docs/681._Next_Closest_Time.md similarity index 100% rename from 681._Next_Closest_Time.md rename to docs/681._Next_Closest_Time.md diff --git a/682._Baseball_Game.md b/docs/682._Baseball_Game.md similarity index 100% rename from 682._Baseball_Game.md rename to docs/682._Baseball_Game.md diff --git a/687._Longest_Univalue_Path.md b/docs/687._Longest_Univalue_Path.md similarity index 100% rename from 687._Longest_Univalue_Path.md rename to docs/687._Longest_Univalue_Path.md diff --git a/740._delete_and_earn.md b/docs/740._delete_and_earn.md similarity index 100% rename from 740._delete_and_earn.md rename to docs/740._delete_and_earn.md diff --git a/760._Find_Anagram_Mappings.md b/docs/760._Find_Anagram_Mappings.md similarity index 100% rename from 760._Find_Anagram_Mappings.md rename to docs/760._Find_Anagram_Mappings.md diff --git "a/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" "b/docs/SortingAlgorithm/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" similarity index 100% rename from "Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" rename to "docs/SortingAlgorithm/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" diff --git "a/python\345\256\236\347\216\260\345\205\253\345\244\247\346\216\222\345\272\217.md" b/docs/SortingAlgorithm/README.md similarity index 92% rename from "python\345\256\236\347\216\260\345\205\253\345\244\247\346\216\222\345\272\217.md" rename to docs/SortingAlgorithm/README.md index b45d9c9ff..189bfb603 100644 --- "a/python\345\256\236\347\216\260\345\205\253\345\244\247\346\216\222\345\272\217.md" +++ b/docs/SortingAlgorithm/README.md @@ -2,15 +2,15 @@ 八大排序,三大查找是《数据结构》当中非常基础的知识点,在这里为了复习顺带总结了一下常见的八种排序算法。 常见的八大排序算法,他们之间关系如下: -![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/images/%E5%85%AB%E5%A4%A7%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95%E6%80%BB%E7%BB%93.png) +![](/images/SortingAlgorithm/八大排序算法总结.png) 他们的性能比较: -![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/images/%E5%85%AB%E5%A4%A7%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95%E6%80%A7%E8%83%BD%E6%AF%94%E8%BE%83.png) +![](/images/SortingAlgorithm/八大排序算法性能.png) ### 直接插入排序 (Insertion sort) -![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/images/%E7%9B%B4%E6%8E%A5%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F.gif) +![](/images/SortingAlgorithm/直接插入排序.gif) 直接插入排序的核心思想就是:将数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已排序的元素小,则交换,直到全部元素都比较过。 因此,从上面的描述中我们可以发现,直接插入排序可以用两个循环完成: @@ -33,7 +33,7 @@ def insert_sort(L): ``` ### 希尔排序 (Shell sort) -![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/images/%E5%B8%8C%E5%B0%94%E6%8E%92%E5%BA%8F.png) +![](/images/SortingAlgorithm/希尔排序.png) 希尔排序的算法思想:将待排序数组按照步长gap进行分组,然后将每组的元素利用直接插入排序的方法进行排序;每次将gap折半减小,循环上述操作;当gap=1时,利用直接插入,完成排序。 同样的:从上面的描述中我们可以发现:希尔排序的总体实现应该由三个循环完成: @@ -62,7 +62,7 @@ def insert_shell(L): ### 简单选择排序 (Selection sort) -![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/images/%E7%AE%80%E5%8D%95%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F.gif) +![](/images/SortingAlgorithm/简单选择排序.gif) 简单选择排序的基本思想:比较+交换。 @@ -102,7 +102,7 @@ def select_sort(L): (这样满足了大顶堆那条性质:位于根节点的元素一定是当前序列的最大值) -![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/images/%E6%9E%84%E5%BB%BA%E5%A4%A7%E9%A1%B6%E5%A0%86.png) +![](/images/SortingAlgorithm/构建大顶堆.png) 2. 取出当前大顶堆的根节点,将其与序列末尾元素进行交换; @@ -110,7 +110,7 @@ def select_sort(L): 3. 对交换后的n-1个序列元素进行调整,使其满足大顶堆的性质; -![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/images/%E8%B0%83%E6%95%B4%E5%A4%A7%E9%A1%B6%E5%A0%86.png) +![](/images/SortingAlgorithm/调整大顶堆.png) 4. 重复2.3步骤,直至堆中只有1个元素为止 @@ -161,7 +161,7 @@ def heap_sort(L): ``` ### 冒泡排序 (Bubble sort) -![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/images/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F.gif) +![](/images/SortingAlgorithm/冒泡排序.gif) 冒泡排序思路比较简单: @@ -186,7 +186,7 @@ def bubble_sort(L): ### 快速排序 (Quick sort) -![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/images/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F.gif) +![](/images/SortingAlgorithm/快速排序.gif) 快速排序的基本思想:挖坑填数+分治法 @@ -235,7 +235,7 @@ def quick_sort(L, start, end): ### 归并排序 (Merge sort) -![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/images/%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F.gif) +![](/images/SortingAlgorithm/归并排序.gif) 1. 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个典型的应用。它的基本操作是:将已有的子序列合并,达到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。 2. 归并排序其实要做两件事: @@ -302,7 +302,7 @@ def merge_sort_array(L): ### 基数排序 (Radix sort) -![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/images/%E5%9F%BA%E6%95%B0%E6%8E%92%E5%BA%8F.gif) +![](/images/SortingAlgorithm/基数排序.gif) 1. 基数排序:通过序列中各个元素的值,对排序的N个元素进行若干趟的“分配”与“收集”来实现排序。 - 分配:我们将L[i]中的元素取出,首先确定其个位上的数字,根据该数字分配到与之序号相同的桶中 diff --git "a/python\347\232\204\345\220\204\347\247\215pass.md" "b/docs/SortingAlgorithm/python\347\232\204\345\220\204\347\247\215pass.md" similarity index 100% rename from "python\347\232\204\345\220\204\347\247\215pass.md" rename to "docs/SortingAlgorithm/python\347\232\204\345\220\204\347\247\215pass.md" diff --git "a/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" "b/docs/SortingAlgorithm/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" similarity index 100% rename from "tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" rename to "docs/SortingAlgorithm/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" diff --git a/interview question/Google/Google.md b/docs/interview/Google/Google.md similarity index 100% rename from interview question/Google/Google.md rename to docs/interview/Google/Google.md diff --git a/interview question/WePay/WePay.jpg b/docs/interview/WePay/WePay.jpg similarity index 100% rename from interview question/WePay/WePay.jpg rename to docs/interview/WePay/WePay.jpg diff --git a/interview question/WePay/WePay.md b/docs/interview/WePay/WePay.md similarity index 100% rename from interview question/WePay/WePay.md rename to docs/interview/WePay/WePay.md diff --git a/interview question/WePay/power_number.md b/docs/interview/WePay/power_number.md similarity index 100% rename from interview question/WePay/power_number.md rename to docs/interview/WePay/power_number.md diff --git a/interview question/pocketgems/pocketgems.md b/docs/interview/pocketgems/pocketgems.md similarity index 100% rename from interview question/pocketgems/pocketgems.md rename to docs/interview/pocketgems/pocketgems.md diff --git "a/images/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\247\350\203\275\346\257\224\350\276\203.png" "b/images/SortingAlgorithm/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\247\350\203\275.png" similarity index 100% rename from "images/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\247\350\203\275\346\257\224\350\276\203.png" rename to "images/SortingAlgorithm/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\247\350\203\275.png" diff --git "a/images/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\273\347\273\223.png" "b/images/SortingAlgorithm/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\273\347\273\223.png" similarity index 100% rename from "images/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\273\347\273\223.png" rename to "images/SortingAlgorithm/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\273\347\273\223.png" diff --git "a/images/\345\206\222\346\263\241\346\216\222\345\272\217.gif" "b/images/SortingAlgorithm/\345\206\222\346\263\241\346\216\222\345\272\217.gif" similarity index 100% rename from "images/\345\206\222\346\263\241\346\216\222\345\272\217.gif" rename to "images/SortingAlgorithm/\345\206\222\346\263\241\346\216\222\345\272\217.gif" diff --git "a/images/\345\237\272\346\225\260\346\216\222\345\272\217.gif" "b/images/SortingAlgorithm/\345\237\272\346\225\260\346\216\222\345\272\217.gif" similarity index 100% rename from "images/\345\237\272\346\225\260\346\216\222\345\272\217.gif" rename to "images/SortingAlgorithm/\345\237\272\346\225\260\346\216\222\345\272\217.gif" diff --git "a/images/\345\270\214\345\260\224\346\216\222\345\272\217.png" "b/images/SortingAlgorithm/\345\270\214\345\260\224\346\216\222\345\272\217.png" similarity index 100% rename from "images/\345\270\214\345\260\224\346\216\222\345\272\217.png" rename to "images/SortingAlgorithm/\345\270\214\345\260\224\346\216\222\345\272\217.png" diff --git "a/images/\345\275\222\345\271\266\346\216\222\345\272\217.gif" "b/images/SortingAlgorithm/\345\275\222\345\271\266\346\216\222\345\272\217.gif" similarity index 100% rename from "images/\345\275\222\345\271\266\346\216\222\345\272\217.gif" rename to "images/SortingAlgorithm/\345\275\222\345\271\266\346\216\222\345\272\217.gif" diff --git "a/images/\345\277\253\351\200\237\346\216\222\345\272\217.gif" "b/images/SortingAlgorithm/\345\277\253\351\200\237\346\216\222\345\272\217.gif" similarity index 100% rename from "images/\345\277\253\351\200\237\346\216\222\345\272\217.gif" rename to "images/SortingAlgorithm/\345\277\253\351\200\237\346\216\222\345\272\217.gif" diff --git "a/images/\346\236\204\345\273\272\345\244\247\351\241\266\345\240\206.png" "b/images/SortingAlgorithm/\346\236\204\345\273\272\345\244\247\351\241\266\345\240\206.png" similarity index 100% rename from "images/\346\236\204\345\273\272\345\244\247\351\241\266\345\240\206.png" rename to "images/SortingAlgorithm/\346\236\204\345\273\272\345\244\247\351\241\266\345\240\206.png" diff --git "a/images/\347\233\264\346\216\245\346\217\222\345\205\245\346\216\222\345\272\217.gif" "b/images/SortingAlgorithm/\347\233\264\346\216\245\346\217\222\345\205\245\346\216\222\345\272\217.gif" similarity index 100% rename from "images/\347\233\264\346\216\245\346\217\222\345\205\245\346\216\222\345\272\217.gif" rename to "images/SortingAlgorithm/\347\233\264\346\216\245\346\217\222\345\205\245\346\216\222\345\272\217.gif" diff --git "a/images/\347\256\200\345\215\225\351\200\211\346\213\251\346\216\222\345\272\217.gif" "b/images/SortingAlgorithm/\347\256\200\345\215\225\351\200\211\346\213\251\346\216\222\345\272\217.gif" similarity index 100% rename from "images/\347\256\200\345\215\225\351\200\211\346\213\251\346\216\222\345\272\217.gif" rename to "images/SortingAlgorithm/\347\256\200\345\215\225\351\200\211\346\213\251\346\216\222\345\272\217.gif" diff --git "a/images/\350\260\203\346\225\264\345\244\247\351\241\266\345\240\206.png" "b/images/SortingAlgorithm/\350\260\203\346\225\264\345\244\247\351\241\266\345\240\206.png" similarity index 100% rename from "images/\350\260\203\346\225\264\345\244\247\351\241\266\345\240\206.png" rename to "images/SortingAlgorithm/\350\260\203\346\225\264\345\244\247\351\241\266\345\240\206.png" diff --git "a/Binary Search \344\270\215\346\230\223\345\206\231.md" "b/others/Binary Search \344\270\215\346\230\223\345\206\231.md" similarity index 100% rename from "Binary Search \344\270\215\346\230\223\345\206\231.md" rename to "others/Binary Search \344\270\215\346\230\223\345\206\231.md" diff --git a/Data Structure and Algorthim Review.md b/others/Data Structure and Algorthim Review.md similarity index 100% rename from Data Structure and Algorthim Review.md rename to others/Data Structure and Algorthim Review.md diff --git a/Dynamic Programming.md b/others/Dynamic Programming.md similarity index 100% rename from Dynamic Programming.md rename to others/Dynamic Programming.md diff --git "a/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" "b/others/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" similarity index 100% rename from "Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" rename to "others/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" diff --git "a/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" "b/others/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" similarity index 100% rename from "Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" rename to "others/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" diff --git "a/LinkedList\346\212\200\345\267\247.md" "b/others/LinkedList\346\212\200\345\267\247.md" similarity index 100% rename from "LinkedList\346\212\200\345\267\247.md" rename to "others/LinkedList\346\212\200\345\267\247.md" diff --git a/Maximal Square.pdf b/others/Maximal Square.pdf similarity index 100% rename from Maximal Square.pdf rename to others/Maximal Square.pdf diff --git a/Range Sum Query 2D - Immutable.pdf b/others/Range Sum Query 2D - Immutable.pdf similarity index 100% rename from Range Sum Query 2D - Immutable.pdf rename to others/Range Sum Query 2D - Immutable.pdf diff --git a/Recusrion & BackTracking.md b/others/Recusrion & BackTracking.md similarity index 100% rename from Recusrion & BackTracking.md rename to others/Recusrion & BackTracking.md diff --git "a/backtracking\346\200\235\350\267\257.md" "b/others/backtracking\346\200\235\350\267\257.md" similarity index 100% rename from "backtracking\346\200\235\350\267\257.md" rename to "others/backtracking\346\200\235\350\267\257.md" diff --git "a/delete_node_in_a_linked_list\351\227\256\351\242\230.md" "b/others/delete_node_in_a_linked_list\351\227\256\351\242\230.md" similarity index 100% rename from "delete_node_in_a_linked_list\351\227\256\351\242\230.md" rename to "others/delete_node_in_a_linked_list\351\227\256\351\242\230.md" diff --git "a/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" "b/others/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" similarity index 100% rename from "local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" rename to "others/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" diff --git a/slide_windows_template.md b/others/slide_windows_template.md similarity index 100% rename from slide_windows_template.md rename to others/slide_windows_template.md diff --git "a/\344\275\215\350\277\220\347\256\227.md" "b/others/\344\275\215\350\277\220\347\256\227.md" similarity index 100% rename from "\344\275\215\350\277\220\347\256\227.md" rename to "others/\344\275\215\350\277\220\347\256\227.md" diff --git "a/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" "b/others/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" similarity index 100% rename from "\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" rename to "others/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" diff --git "a/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" "b/others/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" similarity index 100% rename from "\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" rename to "others/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" diff --git "a/\346\200\273\347\273\223.md" "b/others/\346\200\273\347\273\223.md" similarity index 100% rename from "\346\200\273\347\273\223.md" rename to "others/\346\200\273\347\273\223.md" diff --git "a/\347\273\204\345\220\210\351\227\256\351\242\230.md" "b/others/\347\273\204\345\220\210\351\227\256\351\242\230.md" similarity index 100% rename from "\347\273\204\345\220\210\351\227\256\351\242\230.md" rename to "others/\347\273\204\345\220\210\351\227\256\351\242\230.md" diff --git "a/\351\200\222\345\275\222_recursion.md" "b/others/\351\200\222\345\275\222_recursion.md" similarity index 100% rename from "\351\200\222\345\275\222_recursion.md" rename to "others/\351\200\222\345\275\222_recursion.md" diff --git a/src/py2.x/SortingAlgorithm/BubbleSort.py b/src/py2.x/SortingAlgorithm/BubbleSort.py new file mode 100644 index 000000000..6e2f23940 --- /dev/null +++ b/src/py2.x/SortingAlgorithm/BubbleSort.py @@ -0,0 +1,19 @@ +# coding:utf-8 + + +# 冒泡排序 +def bubble_sort(l): + length = len(l) + # 外层循环 length遍,内层循环少一遍 + while length: + for j in range(length - 1): + # 找出最大值,然后交换位置到最后 + if l[j] > l[length - 1]: + l[j], l[length - 1] = l[length - 1], l[j] + length -= 1 + + +if __name__ == "__main__": + l = [5, 1, 9, 3, 2, 7] + bubble_sort(l) + print l diff --git a/src/py2.x/SortingAlgorithm/InsertSort.py b/src/py2.x/SortingAlgorithm/InsertSort.py new file mode 100644 index 000000000..09b935114 --- /dev/null +++ b/src/py2.x/SortingAlgorithm/InsertSort.py @@ -0,0 +1,24 @@ +# coding:utf8 +""" +插入排序和冒泡排序的区别在于: + +插入排序的前提是:左边是有序的数列 +而冒泡排序:相邻的值进行交换,一共进行n次交换 +""" + + +def insert_sort(l): + # 循环 除第一个数字组成的有序数组 以外的数字 + for i in range(1, len(l)): + # 每一个数字,依次和有序数组进行比较 + print l[:i] + for j in range(len(l[:i])): + if l[i] < l[j]: + l[i], l[j] = l[j], l[i] + + +if __name__ == "__main__": + l = [5, 1, 9, 3, 2, 7] + print l + insert_sort(l) + print("result: " + str(l)) diff --git a/src/py2.x/SortingAlgorithm/MergeSort.py b/src/py2.x/SortingAlgorithm/MergeSort.py new file mode 100644 index 000000000..1ad19e86d --- /dev/null +++ b/src/py2.x/SortingAlgorithm/MergeSort.py @@ -0,0 +1,35 @@ +# coding: utf-8 + + +def MergeSort(lists): + if len(lists) <= 1: + return lists + num = int(len(lists) / 2) + # 从中间,进行数据的拆分, 递归的返回数据进行迭代排序 + left = MergeSort(lists[:num]) + right = MergeSort(lists[num:]) + print left + print "*" * 20 + print right + print "_" * 20 + return Merge(left, right) + + +def Merge(left, right): + r, l = 0, 0 + result = [] + while l < len(left) and r < len(right): + if left[l] < right[r]: + result.append(left[l]) + l += 1 + else: + result.append(right[r]) + r += 1 + result += right[r:] + result += left[l:] + print 'result:', result + return result + + +if __name__ == "__main__": + print MergeSort([1, 2, 3, 4, 5, 6, 7, 90, 21, 23, 45]) diff --git a/src/py2.x/SortingAlgorithm/QuickSort.py b/src/py2.x/SortingAlgorithm/QuickSort.py new file mode 100644 index 000000000..acf81118a --- /dev/null +++ b/src/py2.x/SortingAlgorithm/QuickSort.py @@ -0,0 +1,35 @@ +#!/usr/bin/python +# coding:utf8 + + +def quick_sort(l, start, end): + i = start + j = end + # 结束排序 + if i >= j: + return + # 保存首个数值 + key = l[i] + # 一次排序,i和j的值不断的靠拢,然后最终停止,结束一次排序 + while i < j: + # 和最右边的比较,如果>=key,然后j-1,慢慢的和前一个值比较;如果值key,那么就交换位置 + while i < j and key >= l[i]: + print key, l[i], '*' * 30 + i += 1 + l[j] = l[i] + l[i] = key + # 左边排序 + quick_sort(l, start, j-1) + # 右边排序 + quick_sort(l, i+1, end) + + +if __name__ == "__main__": + l = [5, 1, 9, 3, 2, 7] + quick_sort(l, 0, len(l) - 1) + print l diff --git a/src/py2.x/SortingAlgorithm/SelectionSort.py b/src/py2.x/SortingAlgorithm/SelectionSort.py new file mode 100644 index 000000000..98ef64f72 --- /dev/null +++ b/src/py2.x/SortingAlgorithm/SelectionSort.py @@ -0,0 +1,28 @@ +# coding:utf8 +""" +选择排序和冒泡排序的区别在于: + +选择排序的前提是:找到最大值的位置,最后才进行1次交换 +而冒泡排序:相邻的值进行交换,一共进行n次交换 +""" + + +def selection_sort(l): + length = len(l) - 1 + + while length: + index = length + # 第一个数字,和后面每一个数字进行对比,找出最大值,放到最后!! + for j in range(length): + if l[j] > l[index]: + index = j + l[length], l[index] = l[index], l[length] + print len(l) - length, l + length -= 1 + + +if __name__ == "__main__": + l = [5, 1, 9, 3, 2, 7] + print l + selection_sort(l) + print("result: " + str(l)) \ No newline at end of file diff --git a/src/py2.x/SortingAlgorithm/ShellSort.py b/src/py2.x/SortingAlgorithm/ShellSort.py new file mode 100644 index 000000000..9f591a84b --- /dev/null +++ b/src/py2.x/SortingAlgorithm/ShellSort.py @@ -0,0 +1,25 @@ +# coding: utf8 + +def insert_sort(l, start, increment): + for i in range(start+increment, len(l), increment): + for j in range(start, len(l[:i]), increment): + if l[i] < l[j]: + l[i], l[j] = l[j], l[i] + print increment, '--',l + return l + +def shell_sort(l, increment): + # 依次进行分层 + while increment: + # 每一层,都进行n次插入排序 + for i in range(0, increment): + insert_sort(l, i, increment) + increment -= 1 + return l + +if __name__ == "__main__": + l = [5, 2, 9, 8, 1, 10, 3, 4, 7] + increment = len(l)/3+1 if len(l)%3 else len(l)/3 + print "开始", l + l = shell_sort(l, increment) + print "结束", l \ No newline at end of file diff --git a/src/py2.x/TreeRecursionIterator.py b/src/py2.x/TreeRecursionIterator.py new file mode 100644 index 000000000..ffb4be32f --- /dev/null +++ b/src/py2.x/TreeRecursionIterator.py @@ -0,0 +1,34 @@ +# coding:utf8 + +class Node(): + def __init__(self, value, left=None, right=None): + self.value = value + self.left = left + self.right = right + +def midRecusion(node): + if node is None: + return + midRecusion(node.left) + print node.value, + midRecusion(node.right) + +def midIterator(node): + stack = [] + while stack or node: + if node is not None: + stack.append(node) + node = node.left + else: + node = stack.pop(-1) + print node.value, + node = node.right + +if __name__ == "__main__": + node = Node("D", Node("B", Node("A"), Node("C")), Node("E", right=Node("G", left=Node("F")))) + + print('\n中序遍历<递归>:') + midRecusion(node) + + print('\n中序遍历<迭代>:') + midIterator(node) \ No newline at end of file diff --git a/src/py2.x/list2iteration.py b/src/py2.x/list2iteration.py new file mode 100644 index 000000000..145fd8335 --- /dev/null +++ b/src/py2.x/list2iteration.py @@ -0,0 +1,30 @@ +#!/usr/bin/python +# coding:utf8 +''' +迭代使用的是循环结构。 +递归使用的是选择结构。 +''' + +# 递归求解 +def calculate(l): + if len(l) <= 1: + return l[0] + value = calculate(l[1:]) + return 10**(len(l) - 1) * l[0] + value + + +# 迭代求解 +def calculate2(l): + result = 0 + while len(l) >= 1: + result += 10 ** (len(l)-1) * l[0] + l = l[1:] + return result + + +l1 = [1, 2, 3] +l2 = [4, 5] +sum = 0 +result = calculate(l1) + calculate(l2) +# result = calculate2(l1) + calculate2(l2) +print(result) From 8c5d5429e1528ae7124b2c20ea18891759815783 Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Thu, 5 Apr 2018 14:14:39 +0800 Subject: [PATCH 0429/2496] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20License?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSE | 674 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ Readme.md | 4 +- 2 files changed, 676 insertions(+), 2 deletions(-) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..9cecc1d46 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {one line to give the program's name and a brief idea of what it does.} + Copyright (C) {year} {name of author} + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + {project} Copyright (C) {year} {fullname} + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/Readme.md b/Readme.md index 9fafaced9..c28592379 100644 --- a/Readme.md +++ b/Readme.md @@ -4,7 +4,7 @@ ![](/images/SortingAlgorithm/八大排序算法性能.png) -| 名称 | 文档 | 代码 | +| 名称 | 动图 | 代码 | | --- | --- | --- | | 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/BubbleSort.py) | | 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | @@ -20,7 +20,7 @@ * [pocketgems 面试题](/docs/interview/pocketgems/pocketgems.md) * [WePay 面试题](/docs/interview/WePay/WePay.md) -## LeetCode算法题 +## LeetCode算法题 * [](docs/LeetCode/001._two_sum.md) * [](/docs/LeetCode/002._add_two_numbers.md) From 5f50fdcee2c684bb5fbccf13bb01baca905b768e Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Thu, 5 Apr 2018 14:23:08 +0800 Subject: [PATCH 0430/2496] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Readme.md | 318 --------------- docs/SortingAlgorithm/README.md | 693 ++++++++++++++------------------ 2 files changed, 308 insertions(+), 703 deletions(-) delete mode 100644 Readme.md diff --git a/Readme.md b/Readme.md deleted file mode 100644 index c28592379..000000000 --- a/Readme.md +++ /dev/null @@ -1,318 +0,0 @@ -# LeetCode 面试题 - -## [八大算法算](/docs/SortingAlgorithm/README.md) - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | - -## 面试问答 - -* [Google面试题](/docs/interview/Google/Google.md) -* [pocketgems 面试题](/docs/interview/pocketgems/pocketgems.md) -* [WePay 面试题](/docs/interview/WePay/WePay.md) - -## LeetCode算法题 - -* [](docs/LeetCode/001._two_sum.md) -* [](/docs/LeetCode/002._add_two_numbers.md) -* [](/docs/LeetCode/003._longest_substring_without_repeating_characters.md) -* [](/docs/LeetCode/004._median_of_two_sorted_arrays.md) -* [](/docs/LeetCode/005._longest_palindromic_substring.md) -* [](/docs/LeetCode/007._Reverse_Integer.md) -* [](/docs/LeetCode/008._string_to_integer_(atoi).md) -* [](/docs/LeetCode/010._regular_expression_matching.md) -* [](/docs/LeetCode/011._container_with_most_water.md) -* [](/docs/LeetCode/012._Integer_to_Roman.md) -* [](/docs/LeetCode/013._Roman_to_Integer.md) -* [](/docs/LeetCode/014._longest_common_prefix.md) -* [](/docs/LeetCode/015._3sum.md) -* [](/docs/LeetCode/016._3sum_closest.md) -* [](/docs/LeetCode/017._letter_combinations_of_a_phone_number.md) -* [](/docs/LeetCode/018._4sum.md) -* [](/docs/LeetCode/019._remove_nth_node_from_end_of_list.md) -* [](/docs/LeetCode/020._valid_parentheses.md) -* [](/docs/LeetCode/021._merge_two_sorted_lists.md) -* [](/docs/LeetCode/022._generate_parentheses.md) -* [](/docs/LeetCode/023._merge_k_sorted_lists.md) -* [](/docs/LeetCode/024._swap_nodes_in_pairs.md) -* [](/docs/LeetCode/026._Remove_Duplicates_from_Sorted_Array.md) -* [](/docs/LeetCode/027._Remove_Element.md) -* [](/docs/LeetCode/028._implement_strstr().md) -* [](/docs/LeetCode/030._Substring_with_Concatenation_of_All_Words.md) -* [](/docs/LeetCode/031._next_permutation.md) -* [](/docs/LeetCode/033._search_in_rotated_sorted_array.md) -* [](/docs/LeetCode/034._SearchforaRange.md) -* [](/docs/LeetCode/035._search_insert_position.md) -* [](/docs/LeetCode/038._Count_and_Say.md) -* [](/docs/LeetCode/039._combination_sum.md) -* [](/docs/LeetCode/040._combination_sum_ii.md) -* [](/docs/LeetCode/042._trapping_rain_water.md) -* [](/docs/LeetCode/043._multiply_strings.md) -* [](/docs/LeetCode/044._wildcard_matching.md) -* [](/docs/LeetCode/045._Jump_Game_II.md) -* [](/docs/LeetCode/046._permutations.md) -* [](/docs/LeetCode/047._permutations_ii.md) -* [](/docs/LeetCode/048._rotate_image.md) -* [](/docs/LeetCode/049._group_anagrams_python.md) -* [](/docs/LeetCode/050._pow(x,_n).md) -* [](/docs/LeetCode/051._n-queens.md) -* [](/docs/LeetCode/052._n-queens_ii.md) -* [](/docs/LeetCode/053._maximum_subarray.md) -* [](/docs/LeetCode/054._spiral_matrix.md) -* [](/docs/LeetCode/055._jump_game.md) -* [](/docs/LeetCode/056._Merge_Intervals.md) -* [](/docs/LeetCode/058._length_of_last_word.md) -* [](/docs/LeetCode/059._spiral_matrix_ii.md) -* [](/docs/LeetCode/060._permutation_sequence.md) -* [](/docs/LeetCode/061._rotate_list.md) -* [](/docs/LeetCode/064._minimum_path_sum.md) -* [](/docs/LeetCode/065.unique_paths_ii.md) -* [](/docs/LeetCode/066._plus_one.md) -* [](/docs/LeetCode/067._add_binary.md) -* [](/docs/LeetCode/069._sqrt(x).md) -* [](/docs/LeetCode/070.ClimbingStairs.md) -* [](/docs/LeetCode/072._edit_distance.md) -* [](/docs/LeetCode/073.SetMatrixZeroes.md) -* [](/docs/LeetCode/074._search_a_2d_matrix.md) -* [](/docs/LeetCode/075._sort_colors.md) -* [](/docs/LeetCode/076._Minimum_Window_Substring.md) -* [](/docs/LeetCode/077._combinations.md) -* [](/docs/LeetCode/078.Subsets.md) -* [](/docs/LeetCode/079._word_search.md) -* [](/docs/LeetCode/082._remove_duplicates_from_sorted_list_ii.md) -* [](/docs/LeetCode/083._remove_duplicates_from_sorted_list.md) -* [](/docs/LeetCode/086._partition_list.md) -* [](/docs/LeetCode/088._merge_sorted_array.md) -* [](/docs/LeetCode/089._gray_code.md) -* [](/docs/LeetCode/090._subsets_ii.md) -* [](/docs/LeetCode/091._decode_ways.md) -* [](/docs/LeetCode/092._reverse_linked_list_ii.md) -* [](/docs/LeetCode/093._restore_ip_addresses.md) -* [](/docs/LeetCode/094._binary_tree_inorder_traversal.md) -* [](/docs/LeetCode/096._unique_binary_search_trees.md) -* [](/docs/LeetCode/098._validate_binary_search_tree.md) -* [](/docs/LeetCode/100._same_tree.md) -* [](/docs/LeetCode/101._symmetric_tree.md) -* [](/docs/LeetCode/102._binary_tree_level_order_traversal.md) -* [](/docs/LeetCode/103._binary_tree_zigzag_level_order_traversal.md) -* [](/docs/LeetCode/104._maximum_depth_of_binary_tree.md) -* [](/docs/LeetCode/105._construct_binary_tree_from_preorder_and_inorder_traversal.md) -* [](/docs/LeetCode/106._construct_binary_tree_from_inorder_and_postorder_traversal.md) -* [](/docs/LeetCode/107._binary_tree_level_order_traversal_ii.md) -* [](/docs/LeetCode/108._convert_sorted_array_to_binary_search_tree.md) -* [](/docs/LeetCode/109._convert_sorted_list_to_binary_search_tree.md) -* [](/docs/LeetCode/110._balanced_binary_tree.md) -* [](/docs/LeetCode/111._minimum_depth_of_binary_tree.md) -* [](/docs/LeetCode/112._path_sum.md) -* [](/docs/LeetCode/113._path_sum_ii.md) -* [](/docs/LeetCode/114._flatten_binary_tree_to_linked_list.md) -* [](/docs/LeetCode/116._populating_next_right_pointers_in_each_node.md) -* [](/docs/LeetCode/118._pascal's_triangle.md) -* [](/docs/LeetCode/119.Pascal'sTriangleII.md) -* [](/docs/LeetCode/120.Triangle.md) -* [](/docs/LeetCode/121._Best_Time_to_Buy_and_Sell_Stock.md) -* [](/docs/LeetCode/125._valid_palindrome.md) -* [](/docs/LeetCode/126.WordLadderII.md) -* [](/docs/LeetCode/127._word_ladder.md) -* [](/docs/LeetCode/128._Longest_Consecutive_Sequence.md) -* [](/docs/LeetCode/129._sum_root_to_leaf_numbers.md) -* [](/docs/LeetCode/130._surrounded_regions.md) -* [](/docs/LeetCode/131._palindrome_partitioning.md) -* [](/docs/LeetCode/133._clone_graph.md) -* [](/docs/LeetCode/136._single_number.md) -* [](/docs/LeetCode/139._word_break.md) -* [](/docs/LeetCode/140._word_break_ii.md) -* [](/docs/LeetCode/141._linked_list_cycle.md) -* [](/docs/LeetCode/142_Linked_List_Cycle_II.md) -* [](/docs/LeetCode/143._reorder_list.md) -* [](/docs/LeetCode/144._binary_tree_preorder_traversal.md) -* [](/docs/LeetCode/145._binary_tree_postorder_traversal.md) -* [](/docs/LeetCode/147._insertion_sort_list.md) -* [](/docs/LeetCode/148._sort_list.md) -* [](/docs/LeetCode/150._evaluate_reverse_polish_notation.md) -* [](/docs/LeetCode/151._reverse_words_in_a_string.md) -* [](/docs/LeetCode/152._maximum_product_subarray.md) -* [](/docs/LeetCode/153._find_minimum_in_rotated_sorted_array.md) -* [](/docs/LeetCode/155._min_stack.md) -* [](/docs/LeetCode/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md) -* [](/docs/LeetCode/160._intersection_of_two_linked_lists.md) -* [](/docs/LeetCode/162._find_peak_element.md) -* [](/docs/LeetCode/165._compare_version_numbers.md) -* [](/docs/LeetCode/166._Fraction_to_Recurring_Decimal.md) -* [](/docs/LeetCode/167._two_sum_ii_-_input_array_is_sorted.md) -* [](/docs/LeetCode/168._excel_sheet_column_title.md) -* [](/docs/LeetCode/169._majority_element.md) -* [](/docs/LeetCode/171._excel_sheet_column_number.md) -* [](/docs/LeetCode/173._binary_search_tree_iterator.md) -* [](/docs/LeetCode/189._rotate_array.md) -* [](/docs/LeetCode/191._number_of_1_bits.md) -* [](/docs/LeetCode/198._house_robber.md) -* [](/docs/LeetCode/199._binary_tree_right_side_view.md) -* [](/docs/LeetCode/200._number_of_islands.md) -* [](/docs/LeetCode/203._remove_linked_list_elements.md) -* [](/docs/LeetCode/204._count_primes.md) -* [](/docs/LeetCode/205._isomorphic_strings.md) -* [](/docs/LeetCode/206._reverse_linked_list.md) -* [](/docs/LeetCode/207._course_schedule.md) -* [](/docs/LeetCode/208._implement_trie_(prefix_tree).md) -* [](/docs/LeetCode/210._course_schedule_ii.md) -* [](/docs/LeetCode/211.AddandSearchWord-Datastructuredesign.md) -* [](/docs/LeetCode/213._house_robber_ii.md) -* [](/docs/LeetCode/216._combination_sum_iii.md) -* [](/docs/LeetCode/217._contains_duplicate.md) -* [](/docs/LeetCode/218._The_Skyline_Problem.md) -* [](/docs/LeetCode/219._contains_duplicate_ii.md) -* [](/docs/LeetCode/221._maximal_square.md) -* [](/docs/LeetCode/222._count_complete_tree_nodes.md) -* [](/docs/LeetCode/223._rectangle_area.md) -* [](/docs/LeetCode/224.BasicCalculator.md) -* [](/docs/LeetCode/225._implement_stack_using_queues.md) -* [](/docs/LeetCode/226._invert_binary_tree.md) -* [](/docs/LeetCode/227._basic_calculator_ii.md) -* [](/docs/LeetCode/228._summary_ranges.md) -* [](/docs/LeetCode/229._majority_element_ii.md) -* [](/docs/LeetCode/230._kth_smallest_element_in_a_bst.md) -* [](/docs/LeetCode/231._Power_of_Two.md) -* [](/docs/LeetCode/232._implement_queue_using_stacks.md) -* [](/docs/LeetCode/234._palindrome_linked_list.md) -* [](/docs/LeetCode/235._lowest_common_ancestor_of_a_binary_search_tree.md) -* [](/docs/LeetCode/236._lowest_common_ancestor_of_a_binary_tree.md) -* [](/docs/LeetCode/237._delete_node_in_a_linked_list.md) -* [](/docs/LeetCode/238._product_of_array_except_self.md) -* [](/docs/LeetCode/240._search_a_2d_matrix_ii.md) -* [](/docs/LeetCode/242._valid_anagram.md) -* [](/docs/LeetCode/252.MeetingRooms.md) -* [](/docs/LeetCode/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md) -* [](/docs/LeetCode/256.PaintHouse.md) -* [](/docs/LeetCode/257._binary_tree_paths.md) -* [](/docs/LeetCode/258_Add_Digits.md) -* [](/docs/LeetCode/261.GraphValidTree.md) -* [](/docs/LeetCode/263._ugly_number.md) -* [](/docs/LeetCode/264._ugly_number_ii.md) -* [](/docs/LeetCode/265.PaintHouseII.md) -* [](/docs/LeetCode/266.PalindromePermutation.md) -* [](/docs/LeetCode/267.PalindromePermutationII.md) -* [](/docs/LeetCode/268._missing_number.md) -* [](/docs/LeetCode/270.ClosestBinarySearchTreeValue.md) -* [](/docs/LeetCode/276.PaintFence.md) -* [](/docs/LeetCode/277.FindtheCelebrity.md) -* [](/docs/LeetCode/278._First_Bad_Version.md) -* [](/docs/LeetCode/279._perfect_squares.md) -* [](/docs/LeetCode/280._Wiggle_Sort.md) -* [](/docs/LeetCode/283._move_zeroes.md) -* [](/docs/LeetCode/285._inorder_successor_in_bst.md) -* [](/docs/LeetCode/286.WallsandGates.md) -* [](/docs/LeetCode/289._game_of_life.md) -* [](/docs/LeetCode/290._word_pattern.md) -* [](/docs/LeetCode/292._nim_game.md) -* [](/docs/LeetCode/296.BestMeetingPoint.md) -* [](/docs/LeetCode/298.BinaryTreeLongestConsecutiveSequence.md) -* [](/docs/LeetCode/299._bulls_and_cows.md) -* [](/docs/LeetCode/300._longest_increasing_subsequence.md) -* [](/docs/LeetCode/303._range_sum_query_-_immutable.md) -* [](/docs/LeetCode/316._Remove_Duplicate_Letters.md) -* [](/docs/LeetCode/319._Bulb_Switcher.md) -* [](/docs/LeetCode/322.CoinChange.md) -* [](/docs/LeetCode/323.NumberofConnectedComponentsinanUndirectedGraph.md) -* [](/docs/LeetCode/324._Wiggle_Sort_II.md) -* [](/docs/LeetCode/326._power_of_three.md) -* [](/docs/LeetCode/328._odd_even_linked_list.md) -* [](/docs/LeetCode/334._increasing_triplet_subsequence.md) -* [](/docs/LeetCode/337._house_robber_iii.md) -* [](/docs/LeetCode/338.CountingBits.md) -* [](/docs/LeetCode/339.NestedListWeightSum.md) -* [](/docs/LeetCode/341._Flatten_Nested_List_Iterator.md) -* [](/docs/LeetCode/342._Power_of_Four.md) -* [](/docs/LeetCode/344._reverse_string.md) -* [](/docs/LeetCode/345._Reverse_Vowels_of_a_String.md) -* [](/docs/LeetCode/349._intersection_of_two_arrays.md) -* [](/docs/LeetCode/350._intersection_of_two_arrays_ii.md) -* [](/docs/LeetCode/353.DesignSnakeGame.md) -* [](/docs/LeetCode/364.NestedListWeightSumII.md) -* [](/docs/LeetCode/366.FindLeavesofBinaryTree.md) -* [](/docs/LeetCode/367._valid_perfect_square.md) -* [](/docs/LeetCode/369.PlusOneLinkedList.md) -* [](/docs/LeetCode/371._sum_of_two_integers.md) -* [](/docs/LeetCode/374._Guess_Number_Higher_or_Lower.md) -* [](/docs/LeetCode/377._combination_sum_iv.md) -* [](/docs/LeetCode/378._kth_smallest_element_in_a_sorted_matrix.md) -* [](/docs/LeetCode/380.InsertDeleteGetRandomO(1).md) -* [](/docs/LeetCode/381.InsertDeleteGetRandomO(1)-Duplicatesallowed.md) -* [](/docs/LeetCode/382._linked_list_random_node.md) -* [](/docs/LeetCode/383._ransom_note.md) -* [](/docs/LeetCode/384.ShuffleanArray.md) -* [](/docs/LeetCode/387._first_unique_character_in_a_string.md) -* [](/docs/LeetCode/388._Longest_Absolute_File_Path.md) -* [](/docs/LeetCode/389._find_the_difference.md) -* [](/docs/LeetCode/392._is_subsequence.md) -* [](/docs/LeetCode/394._decode_string.md) -* [](/docs/LeetCode/400.NthDigit.md) -* [](/docs/LeetCode/401._binary_watch.md) -* [](/docs/LeetCode/404._sum_of_left_leaves.md) -* [](/docs/LeetCode/405.ConvertaNumbertoHexadecimal.md) -* [](/docs/LeetCode/406._Queue_Reconstruction_by_Height.md) -* [](/docs/LeetCode/412._fizz_buzz.md) -* [](/docs/LeetCode/413.ArithmeticSlices.md) -* [](/docs/LeetCode/414._third_maximum_number.md) -* [](/docs/LeetCode/415._add_strings.md) -* [](/docs/LeetCode/416.PartitionEqualSubsetSum.md) -* [](/docs/LeetCode/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md) -* [](/docs/LeetCode/422.ValidWordSquare.md) -* [](/docs/LeetCode/434._number_of_segments_in_a_string.md) -* [](/docs/LeetCode/437._path_sum_iii.md) -* [](/docs/LeetCode/438._Find_All_Anagrams_in_a_String.md) -* [](/docs/LeetCode/439.TernaryExpressionParser.md) -* [](/docs/LeetCode/441._arranging_coins.md) -* [](/docs/LeetCode/448._Find_All_Numbers_Disappeared_in_an_Array.md) -* [](/docs/LeetCode/450.DeleteNodeinaBST.md) -* [](/docs/LeetCode/453._Minimum_Moves_to_Equal_Array_Elements.md) -* [](/docs/LeetCode/459._Repeated_Substring_Pattern.md) -* [](/docs/LeetCode/461._HammingDistance.md) -* [](/docs/LeetCode/463._Island_Perimeter.md) -* [](/docs/LeetCode/467._Unique_Substrings_in_Wraparound_String.md) -* [](/docs/LeetCode/469.ConvexPolygon.md) -* [](/docs/LeetCode/476._Number_Complement.md) -* [](/docs/LeetCode/477._Total_Hamming_Distance.md) -* [](/docs/LeetCode/485._Max_Consecutive_Ones.md) -* [](/docs/LeetCode/587._Erect_the_Fence.md) -* [](/docs/LeetCode/599._Minimum_Index_Sum_of_Two_Lists.md) -* [](/docs/LeetCode/647._Palindromic_Substrings.md) -* [](/docs/LeetCode/657._Judge_Route_Circle.md) -* [](/docs/LeetCode/665._Non-decreasing_Array.md) -* [](/docs/LeetCode/672._Bulb_Switcher_II.md) -* [](/docs/LeetCode/681._Next_Closest_Time.md) -* [](/docs/LeetCode/682._Baseball_Game.md) -* [](/docs/LeetCode/687._Longest_Univalue_Path.md) -* [](/docs/LeetCode/740._delete_and_earn.md) -* [](/docs/LeetCode/760._Find_Anagram_Mappings.md) - -## 推荐的一些LeetCode网站 - -1. [KrisYu的GItuhub](https://github.com/KrisYu/LeetCode-CLRS-Python) -2. [kamyu104的Github](https://github.com/kamyu104/LeetCode) -3. [数据结构与算法/leetcode/lintcode题解](https://algorithm.yuanbin.me/zh-hans/) -4. [Leetcode 讨论区](https://discuss.leetcode.com/) -5. [visualgo算法可视化网站](https://visualgo.net/en) -6. [Data Structure Visualization](https://www.cs.usfca.edu/~galles/visualization/Algorithms.html) -7. [我的算法学习之路 - Lucida](http://zh.lucida.me/blog/on-learning-algorithms/) -8. [HiredInTech](https://www.hiredintech.com/) System Design 的总结特别适合入门 -9. [mitcc的Github](https://github.com/mitcc/AlgoSolutions) -10. [小土刀的面试刷题笔记](http://wdxtub.com/interview/14520594642530.html) - - - 💪就是干! - - - - - - - diff --git a/docs/SortingAlgorithm/README.md b/docs/SortingAlgorithm/README.md index 189bfb603..2d6c32fc4 100644 --- a/docs/SortingAlgorithm/README.md +++ b/docs/SortingAlgorithm/README.md @@ -1,389 +1,312 @@ -## 前言 -八大排序,三大查找是《数据结构》当中非常基础的知识点,在这里为了复习顺带总结了一下常见的八种排序算法。 -常见的八大排序算法,他们之间关系如下: +# LeetCode 面试题 -![](/images/SortingAlgorithm/八大排序算法总结.png) - -他们的性能比较: +## [八大算法算](/docs/SortingAlgorithm/README.md) ![](/images/SortingAlgorithm/八大排序算法性能.png) -### 直接插入排序 (Insertion sort) - -![](/images/SortingAlgorithm/直接插入排序.gif) - -直接插入排序的核心思想就是:将数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已排序的元素小,则交换,直到全部元素都比较过。 -因此,从上面的描述中我们可以发现,直接插入排序可以用两个循环完成: - -1. 第一层循环:遍历待比较的所有数组元素 -2. 第二层循环:将本轮选择的元素(selected)与已经排好序的元素(ordered)相比较。 - - 如果```selected > ordered```,那么将二者交换 - -```python -#直接插入排序 -def insert_sort(L): - #遍历数组中的所有元素,其中0号索引元素默认已排序,因此从1开始 - for x in range(1,len(L)): - #将该元素与已排序好的前序数组依次比较,如果该元素小,则交换 - #range(x-1,-1,-1):从x-1倒序循环到0 - for i in range(x-1,-1,-1): - #判断:如果符合条件则交换 - if L[i] > L[i+1]: - L[i], L[i+1] = L[i+1], L[i] -``` -### 希尔排序 (Shell sort) - -![](/images/SortingAlgorithm/希尔排序.png) - -希尔排序的算法思想:将待排序数组按照步长gap进行分组,然后将每组的元素利用直接插入排序的方法进行排序;每次将gap折半减小,循环上述操作;当gap=1时,利用直接插入,完成排序。 -同样的:从上面的描述中我们可以发现:希尔排序的总体实现应该由三个循环完成: - -1. 第一层循环:将gap依次折半,对序列进行分组,直到gap=1 -2. 第二、三层循环:也即直接插入排序所需要的两次循环。具体描述见上。 - -```python -#希尔排序 -def insert_shell(L): - #初始化gap值,此处利用序列长度的一半为其赋值 - gap = int(len(L)/2) - #第一层循环:依次改变gap值对列表进行分组 - while (gap >= 1): - #下面:利用直接插入排序的思想对分组数据进行排序 - #range(gap,len(L)):从gap开始 - for x in range(gap,len(L)): - #range(x-gap,-1,-gap):从x-gap开始与选定元素开始倒序比较,每个比较元素之间间隔gap - for i in range(x-gap,-1,-gap): - #如果该组当中两个元素满足交换条件,则进行交换 - if L[i] > L[i+gap]: - L[i], L[i+gap] = L[i+gap], L[i] - #while循环条件折半 - gap = int((gap/2)) -``` - -### 简单选择排序 (Selection sort) - -![](/images/SortingAlgorithm/简单选择排序.gif) - -简单选择排序的基本思想:比较+交换。 - -1. 从待排序序列中,找到关键字最小的元素; -2. 如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换; -3. 从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。 -因此我们可以发现,简单选择排序也是通过两层循环实现。 - - 第一层循环:依次遍历序列当中的每一个元素 - - 第二层循环:将遍历得到的当前元素依次与余下的元素进行比较,符合最小元素的条件,则交换。 - -```python -# 简单选择排序 -def select_sort(L): -#依次遍历序列中的每一个元素 - for x in range(0,len(L)): -#将当前位置的元素定义此轮循环当中的最小值 - minimum = L[x] -#将该元素与剩下的元素依次比较寻找最小元素 - for i in range(x+1,len(L)): - if L[i] < minimum: - L[i], minimum = minimum, L[i] -#将比较后得到的真正的最小值赋值给当前位置 - L[x] = minimum -``` - -### 堆排序 (Heap sort) - -#### 堆的概念 - -堆:本质是一种数组对象。特别重要的一点性质:任意的叶子节点小于(或大于)它所有的父节点。对此,又分为大顶堆和小顶堆,大顶堆要求节点的元素都要大于其孩子,小顶堆要求节点元素都小于其左右孩子,两者对左右孩子的大小关系不做任何要求。 -利用堆排序,就是基于大顶堆或者小顶堆的一种排序方法。下面,我们通过大顶堆来实现。 - -基本思想: -堆排序可以按照以下步骤来完成: - -1. 首先将序列构建称为大顶堆; - -(这样满足了大顶堆那条性质:位于根节点的元素一定是当前序列的最大值) - -![](/images/SortingAlgorithm/构建大顶堆.png) - -2. 取出当前大顶堆的根节点,将其与序列末尾元素进行交换; - -(此时:序列末尾的元素为已排序的最大值;由于交换了元素,当前位于根节点的堆并不一定满足大顶堆的性质) - -3. 对交换后的n-1个序列元素进行调整,使其满足大顶堆的性质; - -![](/images/SortingAlgorithm/调整大顶堆.png) - -4. 重复2.3步骤,直至堆中只有1个元素为止 - -```python -#-------------------------堆排序-------------------------------- -#**********获取左右叶子节点********** -def LEFT(i): - return 2*i + 1 -def RIGHT(i): - return 2*i + 2 -#********** 调整大顶堆 ********** -#L:待调整序列 length: 序列长度 i:需要调整的结点 -def adjust_max_heap(L, length, i): -#定义一个int值保存当前序列最大值的下标 - largest = i -#获得序列左右叶子节点的下标 - left, right = LEFT(i), RIGHT(i) -#当左叶子节点的下标小于序列长度 并且 左叶子节点的值大于父节点时,将左叶子节点的下标赋值给largest - if (left < length) and (L[left] > L[i]): - largest = left -#当右叶子节点的下标小于序列长度 并且 右叶子节点的值大于父节点时,将右叶子节点的下标值赋值给largest - if (right < length) and (L[right] > L[largest]): - largest = right -#如果largest不等于i 说明当前的父节点不是最大值,需要交换值 - if (largest != i): - L[i], L[largest] = L[largest], L[i] - # 执行递归操作:两个任务:1 寻找最大值的下标;2.最大值与父节点交换 - adjust_max_heap(L, length, largest) -#********** 建立大顶堆 ********** -def build_max_heap(L): - length = len(L) - for x in range(int((length-1)/2), -1, -1): - adjust_max_heap(L, length, x) -#********** 堆排序 ********** -def heap_sort(L): -#先建立大顶堆,保证最大值位于根节点;并且父节点的值大于叶子结点 - build_max_heap(L) -#i:当前堆中序列的长度.初始化为序列的长度 - i = len(L) -#执行循环:1. 每次取出堆顶元素置于序列的最后(len-1,len-2,len-3...) -# 2. 调整堆,使其继续满足大顶堆的性质,注意实时修改堆中序列的长度 - while (i > 0): - L[i-1], L[0] = L[0], L[i-1] -#堆中序列长度减1 - i -= 1 -#调整大顶堆 - adjust_max_heap(L, i, 0) -``` -### 冒泡排序 (Bubble sort) - -![](/images/SortingAlgorithm/冒泡排序.gif) - -冒泡排序思路比较简单: - -1. 将序列当中的左右元素,依次比较,保证右边的元素始终大于左边的元素; -( 第一轮结束后,序列最后一个元素一定是当前序列的最大值;) -2. 对序列当中剩下的n-1个元素再次执行步骤1。 -3. 对于长度为n的序列,一共需要执行n-1轮比较 -(利用while循环可以减少执行次数) - -```python -#冒泡排序 -def bubble_sort(L): - length = len(L) -#序列长度为length,需要执行length-1轮交换 - for x in range(1, length): -#对于每一轮交换,都将序列当中的左右元素进行比较 -#每轮交换当中,由于序列最后的元素一定是最大的,因此每轮循环到序列未排序的位置即可 - for i in range(0, length-x): - if L[i] > L[i+1]: - L[i], L[i+1] = L[i+1], L[i] -``` - -### 快速排序 (Quick sort) - -![](/images/SortingAlgorithm/快速排序.gif) - -快速排序的基本思想:挖坑填数+分治法 - -1. 从序列当中选择一个基准数(pivot) -在这里我们选择序列当中第一个数作为基准数 -2. 将序列当中的所有数依次遍历,比基准数大的位于其右侧,比基准数小的位于其左侧 -3. 重复步骤1.2,直到所有子集当中只有一个元素为止。 - -用伪代码描述如下: -- i =L; j = R; 将基准数挖出形成第一个坑a[i]。 -- j--由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中。 -- i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中。 -- 再重复执行2,3二步,直到i==j,将基准数填入a[i]中 - -```python -#快速排序 -#L:待排序的序列;start排序的开始index,end序列末尾的index -#对于长度为length的序列:start = 0;end = length-1 -def quick_sort(L, start, end): - if start < end: - i, j, pivot = start, end, L[start] - while i < j: -#从右开始向左寻找第一个小于pivot的值 - while (i < j) and (L[j] >= pivot): - j -= 1 -#将小于pivot的值移到左边 - if (i < j): - L[i] = L[j] - i += 1 -#从左开始向右寻找第一个大于pivot的值 - while (i < j) and (L[i] <= pivot): - i += 1 -#将大于pivot的值移到右边 - if (i < j): - L[j] = L[i] - j -= 1 -#循环结束后,说明 i=j,此时左边的值全都小于pivot,右边的值全都大于pivot -#pivot的位置移动正确,那么此时只需对左右两侧的序列调用此函数进一步排序即可 -#递归调用函数:依次对左侧序列:从0 ~ i-1//右侧序列:从i+1 ~ end - L[i] = pivot -#左侧序列继续排序 - quick_sort(L, start, i-1) -#右侧序列继续排序 - quick_sort(L, i+1, end) -``` - -### 归并排序 (Merge sort) - -![](/images/SortingAlgorithm/归并排序.gif) - -1. 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个典型的应用。它的基本操作是:将已有的子序列合并,达到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。 -2. 归并排序其实要做两件事: - - 分解----将序列每次折半拆分 - - 合并----将划分后的序列段两两排序合并 -因此,归并排序实际上就是两个操作,拆分+合并 -3. 如何合并? - - L[first...mid]为第一段,L[mid+1...last]为第二段,并且两端已经有序,现在我们要将两端合成达到L[first...last]并且也有序。 - - 首先依次从第一段与第二段中取出元素比较,将较小的元素赋值给temp[] - - 重复执行上一步,当某一段赋值结束,则将另一段剩下的元素赋值给temp[] - - 此时将temp[]中的元素复制给L[],则得到的L[first...last]有序 -4. 如何分解? - - 在这里,我们采用递归的方法,首先将待排序列分成A,B两组; - - 然后重复对A、B序列分组; - - 直到分组后组内只有一个元素,此时我们认为组内所有元素有序,则分组结束。 - -```python -# 归并排序 -#这是合并的函数 -# 将序列L[first...mid]与序列L[mid+1...last]进行合并 -def mergearray(L, first, mid, last, temp): -#对i,j,k分别进行赋值 - i, j, k = first, mid+1, 0 -#当左右两边都有数时进行比较,取较小的数 - while (i <= mid) and (j <= last): - if L[i] <= L[j]: - temp[k] = L[i] - i += 1 - k += 1 - else: - temp[k] = L[j] - j += 1 - k += 1 -#如果左边序列还有数 - while (i <= mid): - temp[k] = L[i] - i += 1 - k += 1 -#如果右边序列还有数 - while (j <= last): - temp[k] = L[j] - j += 1 - k += 1 -#将temp当中该段有序元素赋值给L待排序列使之部分有序 - for x in range(0, k): - L[first+x] = temp[x] -# 这是分组的函数 -def merge_sort(L, first, last, temp): - if first < last: - mid = int(((first + last) / 2)) -#使左边序列有序 - merge_sort(L, first, mid, temp) -#使右边序列有序 - merge_sort(L, mid+1, last, temp) -#将两个有序序列合并 - mergearray(L, first, mid, last, temp) -# 归并排序的函数 -def merge_sort_array(L): -#声明一个长度为len(L)的空列表 - temp = len(L)*[None] -#调用归并排序 - merge_sort(L, 0, len(L)-1, temp) -``` - -### 基数排序 (Radix sort) - -![](/images/SortingAlgorithm/基数排序.gif) - -1. 基数排序:通过序列中各个元素的值,对排序的N个元素进行若干趟的“分配”与“收集”来实现排序。 - - 分配:我们将L[i]中的元素取出,首先确定其个位上的数字,根据该数字分配到与之序号相同的桶中 - - 收集:当序列中所有的元素都分配到对应的桶中,再按照顺序依次将桶中的元素收集形成新的一个待排序列L[ ] - - 对新形成的序列L[]重复执行分配和收集元素中的十位、百位...直到分配完该序列中的最高位,则排序结束 -2. 根据上述“基数排序”的展示,我们可以清楚的看到整个实现的过程 - -```python -#************************基数排序**************************** -#确定排序的次数 -#排序的顺序跟序列中最大数的位数相关 -def radix_sort_nums(L): - maxNum = L[0] -#寻找序列中的最大数 - for x in L: - if maxNum < x: - maxNum = x -#确定序列中的最大元素的位数 - times = 0 - while (maxNum > 0): - maxNum = int((maxNum/10)) - times += 1 - return times -#找到num从低到高第pos位的数据 -def get_num_pos(num, pos): - return (int((num/(10**(pos-1))))) % 10 -#基数排序 -def radix_sort(L): - count = 10 * [None] #存放各个桶的数据统计个数 - bucket = len(L) * [None] #暂时存放排序结果 -#从低位到高位依次执行循环 - for pos in range(1, radix_sort_nums(L)+1): - #置空各个桶的数据统计 - for x in range(0, 10): - count[x] = 0 - #统计当前该位(个位,十位,百位....)的元素数目 - for x in range(0, len(L)): - #统计各个桶将要装进去的元素个数 - j = get_num_pos(int(L[x]), pos) - count[j] += 1 - #count[i]表示第i个桶的右边界索引 - for x in range(1,10): - count[x] += count[x-1] - #将数据依次装入桶中 - for x in range(len(L)-1, -1, -1): - #求出元素第K位的数字 - j = get_num_pos(L[x], pos) - #放入对应的桶中,count[j]-1是第j个桶的右边界索引 - bucket[count[j]-1] = L[x] - #对应桶的装入数据索引-1 - count[j] -= 1 - # 将已分配好的桶中数据再倒出来,此时已是对应当前位数有序的表 - for x in range(0, len(L)): - L[x] = bucket[x] -``` - - - - - -## 运行时间实测 -10w数据 -``` -直接插入排序:1233.581131 -希尔排序:1409.8012320000003 -简单选择排序:466.66974500000015 -堆排序:1.2036720000000969 -冒泡排序:751.274449 -#**************************************************** -快速排序:1.0000003385357559e-06 -#快速排序有误:实际上并未执行 -#RecursionError: maximum recursion depth exceeded in comparison -#**************************************************** -归并排序:0.8262230000000272 -基数排序:1.1162899999999354 -``` -从运行结果上来看,堆排序、归并排序、基数排序真的快。 -对于快速排序迭代深度超过的问题,可以将考虑将快排通过非递归的方式进行实现。 - -## Resources - -1. [算法导论》笔记汇总](http://mindlee.com/2011/08/21/study-notes-directory/) -2. [八大排序算法的 Python 实现](http://python.jobbole.com/82270/) -3. [数据结构常见的八大排序算法(详细整理)](https://www.jianshu.com/p/7d037c332a9d) +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | + +## 面试问答 + +* [Google面试题](/docs/interview/Google/Google.md) +* [pocketgems 面试题](/docs/interview/pocketgems/pocketgems.md) +* [WePay 面试题](/docs/interview/WePay/WePay.md) + +## LeetCode算法题 + +* [](docs/某类别/001._two_sum.md) +* [](/docs/某类别/002._add_two_numbers.md) +* [](/docs/某类别/003._longest_substring_without_repeating_characters.md) +* [](/docs/某类别/004._median_of_two_sorted_arrays.md) +* [](/docs/某类别/005._longest_palindromic_substring.md) +* [](/docs/某类别/007._Reverse_Integer.md) +* [](/docs/某类别/008._string_to_integer_(atoi).md) +* [](/docs/某类别/010._regular_expression_matching.md) +* [](/docs/某类别/011._container_with_most_water.md) +* [](/docs/某类别/012._Integer_to_Roman.md) +* [](/docs/某类别/013._Roman_to_Integer.md) +* [](/docs/某类别/014._longest_common_prefix.md) +* [](/docs/某类别/015._3sum.md) +* [](/docs/某类别/016._3sum_closest.md) +* [](/docs/某类别/017._letter_combinations_of_a_phone_number.md) +* [](/docs/某类别/018._4sum.md) +* [](/docs/某类别/019._remove_nth_node_from_end_of_list.md) +* [](/docs/某类别/020._valid_parentheses.md) +* [](/docs/某类别/021._merge_two_sorted_lists.md) +* [](/docs/某类别/022._generate_parentheses.md) +* [](/docs/某类别/023._merge_k_sorted_lists.md) +* [](/docs/某类别/024._swap_nodes_in_pairs.md) +* [](/docs/某类别/026._Remove_Duplicates_from_Sorted_Array.md) +* [](/docs/某类别/027._Remove_Element.md) +* [](/docs/某类别/028._implement_strstr().md) +* [](/docs/某类别/030._Substring_with_Concatenation_of_All_Words.md) +* [](/docs/某类别/031._next_permutation.md) +* [](/docs/某类别/033._search_in_rotated_sorted_array.md) +* [](/docs/某类别/034._SearchforaRange.md) +* [](/docs/某类别/035._search_insert_position.md) +* [](/docs/某类别/038._Count_and_Say.md) +* [](/docs/某类别/039._combination_sum.md) +* [](/docs/某类别/040._combination_sum_ii.md) +* [](/docs/某类别/042._trapping_rain_water.md) +* [](/docs/某类别/043._multiply_strings.md) +* [](/docs/某类别/044._wildcard_matching.md) +* [](/docs/某类别/045._Jump_Game_II.md) +* [](/docs/某类别/046._permutations.md) +* [](/docs/某类别/047._permutations_ii.md) +* [](/docs/某类别/048._rotate_image.md) +* [](/docs/某类别/049._group_anagrams_python.md) +* [](/docs/某类别/050._pow(x,_n).md) +* [](/docs/某类别/051._n-queens.md) +* [](/docs/某类别/052._n-queens_ii.md) +* [](/docs/某类别/053._maximum_subarray.md) +* [](/docs/某类别/054._spiral_matrix.md) +* [](/docs/某类别/055._jump_game.md) +* [](/docs/某类别/056._Merge_Intervals.md) +* [](/docs/某类别/058._length_of_last_word.md) +* [](/docs/某类别/059._spiral_matrix_ii.md) +* [](/docs/某类别/060._permutation_sequence.md) +* [](/docs/某类别/061._rotate_list.md) +* [](/docs/某类别/064._minimum_path_sum.md) +* [](/docs/某类别/065.unique_paths_ii.md) +* [](/docs/某类别/066._plus_one.md) +* [](/docs/某类别/067._add_binary.md) +* [](/docs/某类别/069._sqrt(x).md) +* [](/docs/某类别/070.ClimbingStairs.md) +* [](/docs/某类别/072._edit_distance.md) +* [](/docs/某类别/073.SetMatrixZeroes.md) +* [](/docs/某类别/074._search_a_2d_matrix.md) +* [](/docs/某类别/075._sort_colors.md) +* [](/docs/某类别/076._Minimum_Window_Substring.md) +* [](/docs/某类别/077._combinations.md) +* [](/docs/某类别/078.Subsets.md) +* [](/docs/某类别/079._word_search.md) +* [](/docs/某类别/082._remove_duplicates_from_sorted_list_ii.md) +* [](/docs/某类别/083._remove_duplicates_from_sorted_list.md) +* [](/docs/某类别/086._partition_list.md) +* [](/docs/某类别/088._merge_sorted_array.md) +* [](/docs/某类别/089._gray_code.md) +* [](/docs/某类别/090._subsets_ii.md) +* [](/docs/某类别/091._decode_ways.md) +* [](/docs/某类别/092._reverse_linked_list_ii.md) +* [](/docs/某类别/093._restore_ip_addresses.md) +* [](/docs/某类别/094._binary_tree_inorder_traversal.md) +* [](/docs/某类别/096._unique_binary_search_trees.md) +* [](/docs/某类别/098._validate_binary_search_tree.md) +* [](/docs/某类别/100._same_tree.md) +* [](/docs/某类别/101._symmetric_tree.md) +* [](/docs/某类别/102._binary_tree_level_order_traversal.md) +* [](/docs/某类别/103._binary_tree_zigzag_level_order_traversal.md) +* [](/docs/某类别/104._maximum_depth_of_binary_tree.md) +* [](/docs/某类别/105._construct_binary_tree_from_preorder_and_inorder_traversal.md) +* [](/docs/某类别/106._construct_binary_tree_from_inorder_and_postorder_traversal.md) +* [](/docs/某类别/107._binary_tree_level_order_traversal_ii.md) +* [](/docs/某类别/108._convert_sorted_array_to_binary_search_tree.md) +* [](/docs/某类别/109._convert_sorted_list_to_binary_search_tree.md) +* [](/docs/某类别/110._balanced_binary_tree.md) +* [](/docs/某类别/111._minimum_depth_of_binary_tree.md) +* [](/docs/某类别/112._path_sum.md) +* [](/docs/某类别/113._path_sum_ii.md) +* [](/docs/某类别/114._flatten_binary_tree_to_linked_list.md) +* [](/docs/某类别/116._populating_next_right_pointers_in_each_node.md) +* [](/docs/某类别/118._pascal's_triangle.md) +* [](/docs/某类别/119.Pascal'sTriangleII.md) +* [](/docs/某类别/120.Triangle.md) +* [](/docs/某类别/121._Best_Time_to_Buy_and_Sell_Stock.md) +* [](/docs/某类别/125._valid_palindrome.md) +* [](/docs/某类别/126.WordLadderII.md) +* [](/docs/某类别/127._word_ladder.md) +* [](/docs/某类别/128._Longest_Consecutive_Sequence.md) +* [](/docs/某类别/129._sum_root_to_leaf_numbers.md) +* [](/docs/某类别/130._surrounded_regions.md) +* [](/docs/某类别/131._palindrome_partitioning.md) +* [](/docs/某类别/133._clone_graph.md) +* [](/docs/某类别/136._single_number.md) +* [](/docs/某类别/139._word_break.md) +* [](/docs/某类别/140._word_break_ii.md) +* [](/docs/某类别/141._linked_list_cycle.md) +* [](/docs/某类别/142_Linked_List_Cycle_II.md) +* [](/docs/某类别/143._reorder_list.md) +* [](/docs/某类别/144._binary_tree_preorder_traversal.md) +* [](/docs/某类别/145._binary_tree_postorder_traversal.md) +* [](/docs/某类别/147._insertion_sort_list.md) +* [](/docs/某类别/148._sort_list.md) +* [](/docs/某类别/150._evaluate_reverse_polish_notation.md) +* [](/docs/某类别/151._reverse_words_in_a_string.md) +* [](/docs/某类别/152._maximum_product_subarray.md) +* [](/docs/某类别/153._find_minimum_in_rotated_sorted_array.md) +* [](/docs/某类别/155._min_stack.md) +* [](/docs/某类别/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md) +* [](/docs/某类别/160._intersection_of_two_linked_lists.md) +* [](/docs/某类别/162._find_peak_element.md) +* [](/docs/某类别/165._compare_version_numbers.md) +* [](/docs/某类别/166._Fraction_to_Recurring_Decimal.md) +* [](/docs/某类别/167._two_sum_ii_-_input_array_is_sorted.md) +* [](/docs/某类别/168._excel_sheet_column_title.md) +* [](/docs/某类别/169._majority_element.md) +* [](/docs/某类别/171._excel_sheet_column_number.md) +* [](/docs/某类别/173._binary_search_tree_iterator.md) +* [](/docs/某类别/189._rotate_array.md) +* [](/docs/某类别/191._number_of_1_bits.md) +* [](/docs/某类别/198._house_robber.md) +* [](/docs/某类别/199._binary_tree_right_side_view.md) +* [](/docs/某类别/200._number_of_islands.md) +* [](/docs/某类别/203._remove_linked_list_elements.md) +* [](/docs/某类别/204._count_primes.md) +* [](/docs/某类别/205._isomorphic_strings.md) +* [](/docs/某类别/206._reverse_linked_list.md) +* [](/docs/某类别/207._course_schedule.md) +* [](/docs/某类别/208._implement_trie_(prefix_tree).md) +* [](/docs/某类别/210._course_schedule_ii.md) +* [](/docs/某类别/211.AddandSearchWord-Datastructuredesign.md) +* [](/docs/某类别/213._house_robber_ii.md) +* [](/docs/某类别/216._combination_sum_iii.md) +* [](/docs/某类别/217._contains_duplicate.md) +* [](/docs/某类别/218._The_Skyline_Problem.md) +* [](/docs/某类别/219._contains_duplicate_ii.md) +* [](/docs/某类别/221._maximal_square.md) +* [](/docs/某类别/222._count_complete_tree_nodes.md) +* [](/docs/某类别/223._rectangle_area.md) +* [](/docs/某类别/224.BasicCalculator.md) +* [](/docs/某类别/225._implement_stack_using_queues.md) +* [](/docs/某类别/226._invert_binary_tree.md) +* [](/docs/某类别/227._basic_calculator_ii.md) +* [](/docs/某类别/228._summary_ranges.md) +* [](/docs/某类别/229._majority_element_ii.md) +* [](/docs/某类别/230._kth_smallest_element_in_a_bst.md) +* [](/docs/某类别/231._Power_of_Two.md) +* [](/docs/某类别/232._implement_queue_using_stacks.md) +* [](/docs/某类别/234._palindrome_linked_list.md) +* [](/docs/某类别/235._lowest_common_ancestor_of_a_binary_search_tree.md) +* [](/docs/某类别/236._lowest_common_ancestor_of_a_binary_tree.md) +* [](/docs/某类别/237._delete_node_in_a_linked_list.md) +* [](/docs/某类别/238._product_of_array_except_self.md) +* [](/docs/某类别/240._search_a_2d_matrix_ii.md) +* [](/docs/某类别/242._valid_anagram.md) +* [](/docs/某类别/252.MeetingRooms.md) +* [](/docs/某类别/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md) +* [](/docs/某类别/256.PaintHouse.md) +* [](/docs/某类别/257._binary_tree_paths.md) +* [](/docs/某类别/258_Add_Digits.md) +* [](/docs/某类别/261.GraphValidTree.md) +* [](/docs/某类别/263._ugly_number.md) +* [](/docs/某类别/264._ugly_number_ii.md) +* [](/docs/某类别/265.PaintHouseII.md) +* [](/docs/某类别/266.PalindromePermutation.md) +* [](/docs/某类别/267.PalindromePermutationII.md) +* [](/docs/某类别/268._missing_number.md) +* [](/docs/某类别/270.ClosestBinarySearchTreeValue.md) +* [](/docs/某类别/276.PaintFence.md) +* [](/docs/某类别/277.FindtheCelebrity.md) +* [](/docs/某类别/278._First_Bad_Version.md) +* [](/docs/某类别/279._perfect_squares.md) +* [](/docs/某类别/280._Wiggle_Sort.md) +* [](/docs/某类别/283._move_zeroes.md) +* [](/docs/某类别/285._inorder_successor_in_bst.md) +* [](/docs/某类别/286.WallsandGates.md) +* [](/docs/某类别/289._game_of_life.md) +* [](/docs/某类别/290._word_pattern.md) +* [](/docs/某类别/292._nim_game.md) +* [](/docs/某类别/296.BestMeetingPoint.md) +* [](/docs/某类别/298.BinaryTreeLongestConsecutiveSequence.md) +* [](/docs/某类别/299._bulls_and_cows.md) +* [](/docs/某类别/300._longest_increasing_subsequence.md) +* [](/docs/某类别/303._range_sum_query_-_immutable.md) +* [](/docs/某类别/316._Remove_Duplicate_Letters.md) +* [](/docs/某类别/319._Bulb_Switcher.md) +* [](/docs/某类别/322.CoinChange.md) +* [](/docs/某类别/323.NumberofConnectedComponentsinanUndirectedGraph.md) +* [](/docs/某类别/324._Wiggle_Sort_II.md) +* [](/docs/某类别/326._power_of_three.md) +* [](/docs/某类别/328._odd_even_linked_list.md) +* [](/docs/某类别/334._increasing_triplet_subsequence.md) +* [](/docs/某类别/337._house_robber_iii.md) +* [](/docs/某类别/338.CountingBits.md) +* [](/docs/某类别/339.NestedListWeightSum.md) +* [](/docs/某类别/341._Flatten_Nested_List_Iterator.md) +* [](/docs/某类别/342._Power_of_Four.md) +* [](/docs/某类别/344._reverse_string.md) +* [](/docs/某类别/345._Reverse_Vowels_of_a_String.md) +* [](/docs/某类别/349._intersection_of_two_arrays.md) +* [](/docs/某类别/350._intersection_of_two_arrays_ii.md) +* [](/docs/某类别/353.DesignSnakeGame.md) +* [](/docs/某类别/364.NestedListWeightSumII.md) +* [](/docs/某类别/366.FindLeavesofBinaryTree.md) +* [](/docs/某类别/367._valid_perfect_square.md) +* [](/docs/某类别/369.PlusOneLinkedList.md) +* [](/docs/某类别/371._sum_of_two_integers.md) +* [](/docs/某类别/374._Guess_Number_Higher_or_Lower.md) +* [](/docs/某类别/377._combination_sum_iv.md) +* [](/docs/某类别/378._kth_smallest_element_in_a_sorted_matrix.md) +* [](/docs/某类别/380.InsertDeleteGetRandomO(1).md) +* [](/docs/某类别/381.InsertDeleteGetRandomO(1)-Duplicatesallowed.md) +* [](/docs/某类别/382._linked_list_random_node.md) +* [](/docs/某类别/383._ransom_note.md) +* [](/docs/某类别/384.ShuffleanArray.md) +* [](/docs/某类别/387._first_unique_character_in_a_string.md) +* [](/docs/某类别/388._Longest_Absolute_File_Path.md) +* [](/docs/某类别/389._find_the_difference.md) +* [](/docs/某类别/392._is_subsequence.md) +* [](/docs/某类别/394._decode_string.md) +* [](/docs/某类别/400.NthDigit.md) +* [](/docs/某类别/401._binary_watch.md) +* [](/docs/某类别/404._sum_of_left_leaves.md) +* [](/docs/某类别/405.ConvertaNumbertoHexadecimal.md) +* [](/docs/某类别/406._Queue_Reconstruction_by_Height.md) +* [](/docs/某类别/412._fizz_buzz.md) +* [](/docs/某类别/413.ArithmeticSlices.md) +* [](/docs/某类别/414._third_maximum_number.md) +* [](/docs/某类别/415._add_strings.md) +* [](/docs/某类别/416.PartitionEqualSubsetSum.md) +* [](/docs/某类别/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md) +* [](/docs/某类别/422.ValidWordSquare.md) +* [](/docs/某类别/434._number_of_segments_in_a_string.md) +* [](/docs/某类别/437._path_sum_iii.md) +* [](/docs/某类别/438._Find_All_Anagrams_in_a_String.md) +* [](/docs/某类别/439.TernaryExpressionParser.md) +* [](/docs/某类别/441._arranging_coins.md) +* [](/docs/某类别/448._Find_All_Numbers_Disappeared_in_an_Array.md) +* [](/docs/某类别/450.DeleteNodeinaBST.md) +* [](/docs/某类别/453._Minimum_Moves_to_Equal_Array_Elements.md) +* [](/docs/某类别/459._Repeated_Substring_Pattern.md) +* [](/docs/某类别/461._HammingDistance.md) +* [](/docs/某类别/463._Island_Perimeter.md) +* [](/docs/某类别/467._Unique_Substrings_in_Wraparound_String.md) +* [](/docs/某类别/469.ConvexPolygon.md) +* [](/docs/某类别/476._Number_Complement.md) +* [](/docs/某类别/477._Total_Hamming_Distance.md) +* [](/docs/某类别/485._Max_Consecutive_Ones.md) +* [](/docs/某类别/587._Erect_the_Fence.md) +* [](/docs/某类别/599._Minimum_Index_Sum_of_Two_Lists.md) +* [](/docs/某类别/647._Palindromic_Substrings.md) +* [](/docs/某类别/657._Judge_Route_Circle.md) +* [](/docs/某类别/665._Non-decreasing_Array.md) +* [](/docs/某类别/672._Bulb_Switcher_II.md) +* [](/docs/某类别/681._Next_Closest_Time.md) +* [](/docs/某类别/682._Baseball_Game.md) +* [](/docs/某类别/687._Longest_Univalue_Path.md) +* [](/docs/某类别/740._delete_and_earn.md) +* [](/docs/某类别/760._Find_Anagram_Mappings.md) + +## 推荐的一些LeetCode网站 + +1. [KrisYu的GItuhub](https://github.com/KrisYu/LeetCode-CLRS-Python) +2. [kamyu104的Github](https://github.com/kamyu104/LeetCode) +3. [数据结构与算法/leetcode/lintcode题解](https://algorithm.yuanbin.me/zh-hans/) +4. [Leetcode 讨论区](https://discuss.leetcode.com/) +5. [visualgo算法可视化网站](https://visualgo.net/en) +6. [Data Structure Visualization](https://www.cs.usfca.edu/~galles/visualization/Algorithms.html) +7. [我的算法学习之路 - Lucida](http://zh.lucida.me/blog/on-learning-algorithms/) +8. [HiredInTech](https://www.hiredintech.com/) System Design 的总结特别适合入门 +9. [mitcc的Github](https://github.com/mitcc/AlgoSolutions) +10. [小土刀的面试刷题笔记](http://wdxtub.com/interview/14520594642530.html) + + - 💪就是干! + \ No newline at end of file From bcf54df0b3c5db98a0476f6dc501059782848b57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=89=87=E5=88=BB?= Date: Thu, 5 Apr 2018 14:25:30 +0800 Subject: [PATCH 0431/2496] Create README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 000000000..aa9fcd7f9 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# LeetCode +LeetCode 面试题 From 272647c72765b49eccdc21a5f1fcbd1edbbd9216 Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Thu, 5 Apr 2018 14:34:01 +0800 Subject: [PATCH 0432/2496] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 313 ++++++++++++++- docs/SortingAlgorithm/README.md | 690 ++++++++++++++++++-------------- 2 files changed, 693 insertions(+), 310 deletions(-) diff --git a/README.md b/README.md index aa9fcd7f9..7f0f815c4 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,311 @@ -# LeetCode -LeetCode 面试题 +# LeetCode 面试题 + +## [八大算法算](/docs/SortingAlgorithm/README.md) + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | + +## 面试问答 + +* [Google面试题](/docs/interview/Google/Google.md) +* [pocketgems 面试题](/docs/interview/pocketgems/pocketgems.md) +* [WePay 面试题](/docs/interview/WePay/WePay.md) + +## LeetCode算法题 + +* [](docs/某类别/001._two_sum.md) +* [](/docs/某类别/002._add_two_numbers.md) +* [](/docs/某类别/003._longest_substring_without_repeating_characters.md) +* [](/docs/某类别/004._median_of_two_sorted_arrays.md) +* [](/docs/某类别/005._longest_palindromic_substring.md) +* [](/docs/某类别/007._Reverse_Integer.md) +* [](/docs/某类别/008._string_to_integer_(atoi).md) +* [](/docs/某类别/010._regular_expression_matching.md) +* [](/docs/某类别/011._container_with_most_water.md) +* [](/docs/某类别/012._Integer_to_Roman.md) +* [](/docs/某类别/013._Roman_to_Integer.md) +* [](/docs/某类别/014._longest_common_prefix.md) +* [](/docs/某类别/015._3sum.md) +* [](/docs/某类别/016._3sum_closest.md) +* [](/docs/某类别/017._letter_combinations_of_a_phone_number.md) +* [](/docs/某类别/018._4sum.md) +* [](/docs/某类别/019._remove_nth_node_from_end_of_list.md) +* [](/docs/某类别/020._valid_parentheses.md) +* [](/docs/某类别/021._merge_two_sorted_lists.md) +* [](/docs/某类别/022._generate_parentheses.md) +* [](/docs/某类别/023._merge_k_sorted_lists.md) +* [](/docs/某类别/024._swap_nodes_in_pairs.md) +* [](/docs/某类别/026._Remove_Duplicates_from_Sorted_Array.md) +* [](/docs/某类别/027._Remove_Element.md) +* [](/docs/某类别/028._implement_strstr().md) +* [](/docs/某类别/030._Substring_with_Concatenation_of_All_Words.md) +* [](/docs/某类别/031._next_permutation.md) +* [](/docs/某类别/033._search_in_rotated_sorted_array.md) +* [](/docs/某类别/034._SearchforaRange.md) +* [](/docs/某类别/035._search_insert_position.md) +* [](/docs/某类别/038._Count_and_Say.md) +* [](/docs/某类别/039._combination_sum.md) +* [](/docs/某类别/040._combination_sum_ii.md) +* [](/docs/某类别/042._trapping_rain_water.md) +* [](/docs/某类别/043._multiply_strings.md) +* [](/docs/某类别/044._wildcard_matching.md) +* [](/docs/某类别/045._Jump_Game_II.md) +* [](/docs/某类别/046._permutations.md) +* [](/docs/某类别/047._permutations_ii.md) +* [](/docs/某类别/048._rotate_image.md) +* [](/docs/某类别/049._group_anagrams_python.md) +* [](/docs/某类别/050._pow(x,_n).md) +* [](/docs/某类别/051._n-queens.md) +* [](/docs/某类别/052._n-queens_ii.md) +* [](/docs/某类别/053._maximum_subarray.md) +* [](/docs/某类别/054._spiral_matrix.md) +* [](/docs/某类别/055._jump_game.md) +* [](/docs/某类别/056._Merge_Intervals.md) +* [](/docs/某类别/058._length_of_last_word.md) +* [](/docs/某类别/059._spiral_matrix_ii.md) +* [](/docs/某类别/060._permutation_sequence.md) +* [](/docs/某类别/061._rotate_list.md) +* [](/docs/某类别/064._minimum_path_sum.md) +* [](/docs/某类别/065.unique_paths_ii.md) +* [](/docs/某类别/066._plus_one.md) +* [](/docs/某类别/067._add_binary.md) +* [](/docs/某类别/069._sqrt(x).md) +* [](/docs/某类别/070.ClimbingStairs.md) +* [](/docs/某类别/072._edit_distance.md) +* [](/docs/某类别/073.SetMatrixZeroes.md) +* [](/docs/某类别/074._search_a_2d_matrix.md) +* [](/docs/某类别/075._sort_colors.md) +* [](/docs/某类别/076._Minimum_Window_Substring.md) +* [](/docs/某类别/077._combinations.md) +* [](/docs/某类别/078.Subsets.md) +* [](/docs/某类别/079._word_search.md) +* [](/docs/某类别/082._remove_duplicates_from_sorted_list_ii.md) +* [](/docs/某类别/083._remove_duplicates_from_sorted_list.md) +* [](/docs/某类别/086._partition_list.md) +* [](/docs/某类别/088._merge_sorted_array.md) +* [](/docs/某类别/089._gray_code.md) +* [](/docs/某类别/090._subsets_ii.md) +* [](/docs/某类别/091._decode_ways.md) +* [](/docs/某类别/092._reverse_linked_list_ii.md) +* [](/docs/某类别/093._restore_ip_addresses.md) +* [](/docs/某类别/094._binary_tree_inorder_traversal.md) +* [](/docs/某类别/096._unique_binary_search_trees.md) +* [](/docs/某类别/098._validate_binary_search_tree.md) +* [](/docs/某类别/100._same_tree.md) +* [](/docs/某类别/101._symmetric_tree.md) +* [](/docs/某类别/102._binary_tree_level_order_traversal.md) +* [](/docs/某类别/103._binary_tree_zigzag_level_order_traversal.md) +* [](/docs/某类别/104._maximum_depth_of_binary_tree.md) +* [](/docs/某类别/105._construct_binary_tree_from_preorder_and_inorder_traversal.md) +* [](/docs/某类别/106._construct_binary_tree_from_inorder_and_postorder_traversal.md) +* [](/docs/某类别/107._binary_tree_level_order_traversal_ii.md) +* [](/docs/某类别/108._convert_sorted_array_to_binary_search_tree.md) +* [](/docs/某类别/109._convert_sorted_list_to_binary_search_tree.md) +* [](/docs/某类别/110._balanced_binary_tree.md) +* [](/docs/某类别/111._minimum_depth_of_binary_tree.md) +* [](/docs/某类别/112._path_sum.md) +* [](/docs/某类别/113._path_sum_ii.md) +* [](/docs/某类别/114._flatten_binary_tree_to_linked_list.md) +* [](/docs/某类别/116._populating_next_right_pointers_in_each_node.md) +* [](/docs/某类别/118._pascal's_triangle.md) +* [](/docs/某类别/119.Pascal'sTriangleII.md) +* [](/docs/某类别/120.Triangle.md) +* [](/docs/某类别/121._Best_Time_to_Buy_and_Sell_Stock.md) +* [](/docs/某类别/125._valid_palindrome.md) +* [](/docs/某类别/126.WordLadderII.md) +* [](/docs/某类别/127._word_ladder.md) +* [](/docs/某类别/128._Longest_Consecutive_Sequence.md) +* [](/docs/某类别/129._sum_root_to_leaf_numbers.md) +* [](/docs/某类别/130._surrounded_regions.md) +* [](/docs/某类别/131._palindrome_partitioning.md) +* [](/docs/某类别/133._clone_graph.md) +* [](/docs/某类别/136._single_number.md) +* [](/docs/某类别/139._word_break.md) +* [](/docs/某类别/140._word_break_ii.md) +* [](/docs/某类别/141._linked_list_cycle.md) +* [](/docs/某类别/142_Linked_List_Cycle_II.md) +* [](/docs/某类别/143._reorder_list.md) +* [](/docs/某类别/144._binary_tree_preorder_traversal.md) +* [](/docs/某类别/145._binary_tree_postorder_traversal.md) +* [](/docs/某类别/147._insertion_sort_list.md) +* [](/docs/某类别/148._sort_list.md) +* [](/docs/某类别/150._evaluate_reverse_polish_notation.md) +* [](/docs/某类别/151._reverse_words_in_a_string.md) +* [](/docs/某类别/152._maximum_product_subarray.md) +* [](/docs/某类别/153._find_minimum_in_rotated_sorted_array.md) +* [](/docs/某类别/155._min_stack.md) +* [](/docs/某类别/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md) +* [](/docs/某类别/160._intersection_of_two_linked_lists.md) +* [](/docs/某类别/162._find_peak_element.md) +* [](/docs/某类别/165._compare_version_numbers.md) +* [](/docs/某类别/166._Fraction_to_Recurring_Decimal.md) +* [](/docs/某类别/167._two_sum_ii_-_input_array_is_sorted.md) +* [](/docs/某类别/168._excel_sheet_column_title.md) +* [](/docs/某类别/169._majority_element.md) +* [](/docs/某类别/171._excel_sheet_column_number.md) +* [](/docs/某类别/173._binary_search_tree_iterator.md) +* [](/docs/某类别/189._rotate_array.md) +* [](/docs/某类别/191._number_of_1_bits.md) +* [](/docs/某类别/198._house_robber.md) +* [](/docs/某类别/199._binary_tree_right_side_view.md) +* [](/docs/某类别/200._number_of_islands.md) +* [](/docs/某类别/203._remove_linked_list_elements.md) +* [](/docs/某类别/204._count_primes.md) +* [](/docs/某类别/205._isomorphic_strings.md) +* [](/docs/某类别/206._reverse_linked_list.md) +* [](/docs/某类别/207._course_schedule.md) +* [](/docs/某类别/208._implement_trie_(prefix_tree).md) +* [](/docs/某类别/210._course_schedule_ii.md) +* [](/docs/某类别/211.AddandSearchWord-Datastructuredesign.md) +* [](/docs/某类别/213._house_robber_ii.md) +* [](/docs/某类别/216._combination_sum_iii.md) +* [](/docs/某类别/217._contains_duplicate.md) +* [](/docs/某类别/218._The_Skyline_Problem.md) +* [](/docs/某类别/219._contains_duplicate_ii.md) +* [](/docs/某类别/221._maximal_square.md) +* [](/docs/某类别/222._count_complete_tree_nodes.md) +* [](/docs/某类别/223._rectangle_area.md) +* [](/docs/某类别/224.BasicCalculator.md) +* [](/docs/某类别/225._implement_stack_using_queues.md) +* [](/docs/某类别/226._invert_binary_tree.md) +* [](/docs/某类别/227._basic_calculator_ii.md) +* [](/docs/某类别/228._summary_ranges.md) +* [](/docs/某类别/229._majority_element_ii.md) +* [](/docs/某类别/230._kth_smallest_element_in_a_bst.md) +* [](/docs/某类别/231._Power_of_Two.md) +* [](/docs/某类别/232._implement_queue_using_stacks.md) +* [](/docs/某类别/234._palindrome_linked_list.md) +* [](/docs/某类别/235._lowest_common_ancestor_of_a_binary_search_tree.md) +* [](/docs/某类别/236._lowest_common_ancestor_of_a_binary_tree.md) +* [](/docs/某类别/237._delete_node_in_a_linked_list.md) +* [](/docs/某类别/238._product_of_array_except_self.md) +* [](/docs/某类别/240._search_a_2d_matrix_ii.md) +* [](/docs/某类别/242._valid_anagram.md) +* [](/docs/某类别/252.MeetingRooms.md) +* [](/docs/某类别/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md) +* [](/docs/某类别/256.PaintHouse.md) +* [](/docs/某类别/257._binary_tree_paths.md) +* [](/docs/某类别/258_Add_Digits.md) +* [](/docs/某类别/261.GraphValidTree.md) +* [](/docs/某类别/263._ugly_number.md) +* [](/docs/某类别/264._ugly_number_ii.md) +* [](/docs/某类别/265.PaintHouseII.md) +* [](/docs/某类别/266.PalindromePermutation.md) +* [](/docs/某类别/267.PalindromePermutationII.md) +* [](/docs/某类别/268._missing_number.md) +* [](/docs/某类别/270.ClosestBinarySearchTreeValue.md) +* [](/docs/某类别/276.PaintFence.md) +* [](/docs/某类别/277.FindtheCelebrity.md) +* [](/docs/某类别/278._First_Bad_Version.md) +* [](/docs/某类别/279._perfect_squares.md) +* [](/docs/某类别/280._Wiggle_Sort.md) +* [](/docs/某类别/283._move_zeroes.md) +* [](/docs/某类别/285._inorder_successor_in_bst.md) +* [](/docs/某类别/286.WallsandGates.md) +* [](/docs/某类别/289._game_of_life.md) +* [](/docs/某类别/290._word_pattern.md) +* [](/docs/某类别/292._nim_game.md) +* [](/docs/某类别/296.BestMeetingPoint.md) +* [](/docs/某类别/298.BinaryTreeLongestConsecutiveSequence.md) +* [](/docs/某类别/299._bulls_and_cows.md) +* [](/docs/某类别/300._longest_increasing_subsequence.md) +* [](/docs/某类别/303._range_sum_query_-_immutable.md) +* [](/docs/某类别/316._Remove_Duplicate_Letters.md) +* [](/docs/某类别/319._Bulb_Switcher.md) +* [](/docs/某类别/322.CoinChange.md) +* [](/docs/某类别/323.NumberofConnectedComponentsinanUndirectedGraph.md) +* [](/docs/某类别/324._Wiggle_Sort_II.md) +* [](/docs/某类别/326._power_of_three.md) +* [](/docs/某类别/328._odd_even_linked_list.md) +* [](/docs/某类别/334._increasing_triplet_subsequence.md) +* [](/docs/某类别/337._house_robber_iii.md) +* [](/docs/某类别/338.CountingBits.md) +* [](/docs/某类别/339.NestedListWeightSum.md) +* [](/docs/某类别/341._Flatten_Nested_List_Iterator.md) +* [](/docs/某类别/342._Power_of_Four.md) +* [](/docs/某类别/344._reverse_string.md) +* [](/docs/某类别/345._Reverse_Vowels_of_a_String.md) +* [](/docs/某类别/349._intersection_of_two_arrays.md) +* [](/docs/某类别/350._intersection_of_two_arrays_ii.md) +* [](/docs/某类别/353.DesignSnakeGame.md) +* [](/docs/某类别/364.NestedListWeightSumII.md) +* [](/docs/某类别/366.FindLeavesofBinaryTree.md) +* [](/docs/某类别/367._valid_perfect_square.md) +* [](/docs/某类别/369.PlusOneLinkedList.md) +* [](/docs/某类别/371._sum_of_two_integers.md) +* [](/docs/某类别/374._Guess_Number_Higher_or_Lower.md) +* [](/docs/某类别/377._combination_sum_iv.md) +* [](/docs/某类别/378._kth_smallest_element_in_a_sorted_matrix.md) +* [](/docs/某类别/380.InsertDeleteGetRandomO(1).md) +* [](/docs/某类别/381.InsertDeleteGetRandomO(1)-Duplicatesallowed.md) +* [](/docs/某类别/382._linked_list_random_node.md) +* [](/docs/某类别/383._ransom_note.md) +* [](/docs/某类别/384.ShuffleanArray.md) +* [](/docs/某类别/387._first_unique_character_in_a_string.md) +* [](/docs/某类别/388._Longest_Absolute_File_Path.md) +* [](/docs/某类别/389._find_the_difference.md) +* [](/docs/某类别/392._is_subsequence.md) +* [](/docs/某类别/394._decode_string.md) +* [](/docs/某类别/400.NthDigit.md) +* [](/docs/某类别/401._binary_watch.md) +* [](/docs/某类别/404._sum_of_left_leaves.md) +* [](/docs/某类别/405.ConvertaNumbertoHexadecimal.md) +* [](/docs/某类别/406._Queue_Reconstruction_by_Height.md) +* [](/docs/某类别/412._fizz_buzz.md) +* [](/docs/某类别/413.ArithmeticSlices.md) +* [](/docs/某类别/414._third_maximum_number.md) +* [](/docs/某类别/415._add_strings.md) +* [](/docs/某类别/416.PartitionEqualSubsetSum.md) +* [](/docs/某类别/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md) +* [](/docs/某类别/422.ValidWordSquare.md) +* [](/docs/某类别/434._number_of_segments_in_a_string.md) +* [](/docs/某类别/437._path_sum_iii.md) +* [](/docs/某类别/438._Find_All_Anagrams_in_a_String.md) +* [](/docs/某类别/439.TernaryExpressionParser.md) +* [](/docs/某类别/441._arranging_coins.md) +* [](/docs/某类别/448._Find_All_Numbers_Disappeared_in_an_Array.md) +* [](/docs/某类别/450.DeleteNodeinaBST.md) +* [](/docs/某类别/453._Minimum_Moves_to_Equal_Array_Elements.md) +* [](/docs/某类别/459._Repeated_Substring_Pattern.md) +* [](/docs/某类别/461._HammingDistance.md) +* [](/docs/某类别/463._Island_Perimeter.md) +* [](/docs/某类别/467._Unique_Substrings_in_Wraparound_String.md) +* [](/docs/某类别/469.ConvexPolygon.md) +* [](/docs/某类别/476._Number_Complement.md) +* [](/docs/某类别/477._Total_Hamming_Distance.md) +* [](/docs/某类别/485._Max_Consecutive_Ones.md) +* [](/docs/某类别/587._Erect_the_Fence.md) +* [](/docs/某类别/599._Minimum_Index_Sum_of_Two_Lists.md) +* [](/docs/某类别/647._Palindromic_Substrings.md) +* [](/docs/某类别/657._Judge_Route_Circle.md) +* [](/docs/某类别/665._Non-decreasing_Array.md) +* [](/docs/某类别/672._Bulb_Switcher_II.md) +* [](/docs/某类别/681._Next_Closest_Time.md) +* [](/docs/某类别/682._Baseball_Game.md) +* [](/docs/某类别/687._Longest_Univalue_Path.md) +* [](/docs/某类别/740._delete_and_earn.md) +* [](/docs/某类别/760._Find_Anagram_Mappings.md) + +## 推荐的一些LeetCode网站 + +1. [KrisYu的GItuhub](https://github.com/KrisYu/LeetCode-CLRS-Python) +2. [kamyu104的Github](https://github.com/kamyu104/LeetCode) +3. [数据结构与算法/leetcode/lintcode题解](https://algorithm.yuanbin.me/zh-hans/) +4. [Leetcode 讨论区](https://discuss.leetcode.com/) +5. [visualgo算法可视化网站](https://visualgo.net/en) +6. [Data Structure Visualization](https://www.cs.usfca.edu/~galles/visualization/Algorithms.html) +7. [我的算法学习之路 - Lucida](http://zh.lucida.me/blog/on-learning-algorithms/) +8. [HiredInTech](https://www.hiredintech.com/) System Design 的总结特别适合入门 +9. [mitcc的Github](https://github.com/mitcc/AlgoSolutions) +10. [小土刀的面试刷题笔记](http://wdxtub.com/interview/14520594642530.html) + + - 💪就是干! diff --git a/docs/SortingAlgorithm/README.md b/docs/SortingAlgorithm/README.md index 2d6c32fc4..83b327202 100644 --- a/docs/SortingAlgorithm/README.md +++ b/docs/SortingAlgorithm/README.md @@ -1,312 +1,386 @@ -# LeetCode 面试题 +## 前言 +八大排序,三大查找是《数据结构》当中非常基础的知识点,在这里为了复习顺带总结了一下常见的八种排序算法。 +常见的八大排序算法,他们之间关系如下: -## [八大算法算](/docs/SortingAlgorithm/README.md) +![](/images/SortingAlgorithm/八大排序算法总结.png) + +他们的性能比较: ![](/images/SortingAlgorithm/八大排序算法性能.png) -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | - -## 面试问答 - -* [Google面试题](/docs/interview/Google/Google.md) -* [pocketgems 面试题](/docs/interview/pocketgems/pocketgems.md) -* [WePay 面试题](/docs/interview/WePay/WePay.md) - -## LeetCode算法题 - -* [](docs/某类别/001._two_sum.md) -* [](/docs/某类别/002._add_two_numbers.md) -* [](/docs/某类别/003._longest_substring_without_repeating_characters.md) -* [](/docs/某类别/004._median_of_two_sorted_arrays.md) -* [](/docs/某类别/005._longest_palindromic_substring.md) -* [](/docs/某类别/007._Reverse_Integer.md) -* [](/docs/某类别/008._string_to_integer_(atoi).md) -* [](/docs/某类别/010._regular_expression_matching.md) -* [](/docs/某类别/011._container_with_most_water.md) -* [](/docs/某类别/012._Integer_to_Roman.md) -* [](/docs/某类别/013._Roman_to_Integer.md) -* [](/docs/某类别/014._longest_common_prefix.md) -* [](/docs/某类别/015._3sum.md) -* [](/docs/某类别/016._3sum_closest.md) -* [](/docs/某类别/017._letter_combinations_of_a_phone_number.md) -* [](/docs/某类别/018._4sum.md) -* [](/docs/某类别/019._remove_nth_node_from_end_of_list.md) -* [](/docs/某类别/020._valid_parentheses.md) -* [](/docs/某类别/021._merge_two_sorted_lists.md) -* [](/docs/某类别/022._generate_parentheses.md) -* [](/docs/某类别/023._merge_k_sorted_lists.md) -* [](/docs/某类别/024._swap_nodes_in_pairs.md) -* [](/docs/某类别/026._Remove_Duplicates_from_Sorted_Array.md) -* [](/docs/某类别/027._Remove_Element.md) -* [](/docs/某类别/028._implement_strstr().md) -* [](/docs/某类别/030._Substring_with_Concatenation_of_All_Words.md) -* [](/docs/某类别/031._next_permutation.md) -* [](/docs/某类别/033._search_in_rotated_sorted_array.md) -* [](/docs/某类别/034._SearchforaRange.md) -* [](/docs/某类别/035._search_insert_position.md) -* [](/docs/某类别/038._Count_and_Say.md) -* [](/docs/某类别/039._combination_sum.md) -* [](/docs/某类别/040._combination_sum_ii.md) -* [](/docs/某类别/042._trapping_rain_water.md) -* [](/docs/某类别/043._multiply_strings.md) -* [](/docs/某类别/044._wildcard_matching.md) -* [](/docs/某类别/045._Jump_Game_II.md) -* [](/docs/某类别/046._permutations.md) -* [](/docs/某类别/047._permutations_ii.md) -* [](/docs/某类别/048._rotate_image.md) -* [](/docs/某类别/049._group_anagrams_python.md) -* [](/docs/某类别/050._pow(x,_n).md) -* [](/docs/某类别/051._n-queens.md) -* [](/docs/某类别/052._n-queens_ii.md) -* [](/docs/某类别/053._maximum_subarray.md) -* [](/docs/某类别/054._spiral_matrix.md) -* [](/docs/某类别/055._jump_game.md) -* [](/docs/某类别/056._Merge_Intervals.md) -* [](/docs/某类别/058._length_of_last_word.md) -* [](/docs/某类别/059._spiral_matrix_ii.md) -* [](/docs/某类别/060._permutation_sequence.md) -* [](/docs/某类别/061._rotate_list.md) -* [](/docs/某类别/064._minimum_path_sum.md) -* [](/docs/某类别/065.unique_paths_ii.md) -* [](/docs/某类别/066._plus_one.md) -* [](/docs/某类别/067._add_binary.md) -* [](/docs/某类别/069._sqrt(x).md) -* [](/docs/某类别/070.ClimbingStairs.md) -* [](/docs/某类别/072._edit_distance.md) -* [](/docs/某类别/073.SetMatrixZeroes.md) -* [](/docs/某类别/074._search_a_2d_matrix.md) -* [](/docs/某类别/075._sort_colors.md) -* [](/docs/某类别/076._Minimum_Window_Substring.md) -* [](/docs/某类别/077._combinations.md) -* [](/docs/某类别/078.Subsets.md) -* [](/docs/某类别/079._word_search.md) -* [](/docs/某类别/082._remove_duplicates_from_sorted_list_ii.md) -* [](/docs/某类别/083._remove_duplicates_from_sorted_list.md) -* [](/docs/某类别/086._partition_list.md) -* [](/docs/某类别/088._merge_sorted_array.md) -* [](/docs/某类别/089._gray_code.md) -* [](/docs/某类别/090._subsets_ii.md) -* [](/docs/某类别/091._decode_ways.md) -* [](/docs/某类别/092._reverse_linked_list_ii.md) -* [](/docs/某类别/093._restore_ip_addresses.md) -* [](/docs/某类别/094._binary_tree_inorder_traversal.md) -* [](/docs/某类别/096._unique_binary_search_trees.md) -* [](/docs/某类别/098._validate_binary_search_tree.md) -* [](/docs/某类别/100._same_tree.md) -* [](/docs/某类别/101._symmetric_tree.md) -* [](/docs/某类别/102._binary_tree_level_order_traversal.md) -* [](/docs/某类别/103._binary_tree_zigzag_level_order_traversal.md) -* [](/docs/某类别/104._maximum_depth_of_binary_tree.md) -* [](/docs/某类别/105._construct_binary_tree_from_preorder_and_inorder_traversal.md) -* [](/docs/某类别/106._construct_binary_tree_from_inorder_and_postorder_traversal.md) -* [](/docs/某类别/107._binary_tree_level_order_traversal_ii.md) -* [](/docs/某类别/108._convert_sorted_array_to_binary_search_tree.md) -* [](/docs/某类别/109._convert_sorted_list_to_binary_search_tree.md) -* [](/docs/某类别/110._balanced_binary_tree.md) -* [](/docs/某类别/111._minimum_depth_of_binary_tree.md) -* [](/docs/某类别/112._path_sum.md) -* [](/docs/某类别/113._path_sum_ii.md) -* [](/docs/某类别/114._flatten_binary_tree_to_linked_list.md) -* [](/docs/某类别/116._populating_next_right_pointers_in_each_node.md) -* [](/docs/某类别/118._pascal's_triangle.md) -* [](/docs/某类别/119.Pascal'sTriangleII.md) -* [](/docs/某类别/120.Triangle.md) -* [](/docs/某类别/121._Best_Time_to_Buy_and_Sell_Stock.md) -* [](/docs/某类别/125._valid_palindrome.md) -* [](/docs/某类别/126.WordLadderII.md) -* [](/docs/某类别/127._word_ladder.md) -* [](/docs/某类别/128._Longest_Consecutive_Sequence.md) -* [](/docs/某类别/129._sum_root_to_leaf_numbers.md) -* [](/docs/某类别/130._surrounded_regions.md) -* [](/docs/某类别/131._palindrome_partitioning.md) -* [](/docs/某类别/133._clone_graph.md) -* [](/docs/某类别/136._single_number.md) -* [](/docs/某类别/139._word_break.md) -* [](/docs/某类别/140._word_break_ii.md) -* [](/docs/某类别/141._linked_list_cycle.md) -* [](/docs/某类别/142_Linked_List_Cycle_II.md) -* [](/docs/某类别/143._reorder_list.md) -* [](/docs/某类别/144._binary_tree_preorder_traversal.md) -* [](/docs/某类别/145._binary_tree_postorder_traversal.md) -* [](/docs/某类别/147._insertion_sort_list.md) -* [](/docs/某类别/148._sort_list.md) -* [](/docs/某类别/150._evaluate_reverse_polish_notation.md) -* [](/docs/某类别/151._reverse_words_in_a_string.md) -* [](/docs/某类别/152._maximum_product_subarray.md) -* [](/docs/某类别/153._find_minimum_in_rotated_sorted_array.md) -* [](/docs/某类别/155._min_stack.md) -* [](/docs/某类别/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md) -* [](/docs/某类别/160._intersection_of_two_linked_lists.md) -* [](/docs/某类别/162._find_peak_element.md) -* [](/docs/某类别/165._compare_version_numbers.md) -* [](/docs/某类别/166._Fraction_to_Recurring_Decimal.md) -* [](/docs/某类别/167._two_sum_ii_-_input_array_is_sorted.md) -* [](/docs/某类别/168._excel_sheet_column_title.md) -* [](/docs/某类别/169._majority_element.md) -* [](/docs/某类别/171._excel_sheet_column_number.md) -* [](/docs/某类别/173._binary_search_tree_iterator.md) -* [](/docs/某类别/189._rotate_array.md) -* [](/docs/某类别/191._number_of_1_bits.md) -* [](/docs/某类别/198._house_robber.md) -* [](/docs/某类别/199._binary_tree_right_side_view.md) -* [](/docs/某类别/200._number_of_islands.md) -* [](/docs/某类别/203._remove_linked_list_elements.md) -* [](/docs/某类别/204._count_primes.md) -* [](/docs/某类别/205._isomorphic_strings.md) -* [](/docs/某类别/206._reverse_linked_list.md) -* [](/docs/某类别/207._course_schedule.md) -* [](/docs/某类别/208._implement_trie_(prefix_tree).md) -* [](/docs/某类别/210._course_schedule_ii.md) -* [](/docs/某类别/211.AddandSearchWord-Datastructuredesign.md) -* [](/docs/某类别/213._house_robber_ii.md) -* [](/docs/某类别/216._combination_sum_iii.md) -* [](/docs/某类别/217._contains_duplicate.md) -* [](/docs/某类别/218._The_Skyline_Problem.md) -* [](/docs/某类别/219._contains_duplicate_ii.md) -* [](/docs/某类别/221._maximal_square.md) -* [](/docs/某类别/222._count_complete_tree_nodes.md) -* [](/docs/某类别/223._rectangle_area.md) -* [](/docs/某类别/224.BasicCalculator.md) -* [](/docs/某类别/225._implement_stack_using_queues.md) -* [](/docs/某类别/226._invert_binary_tree.md) -* [](/docs/某类别/227._basic_calculator_ii.md) -* [](/docs/某类别/228._summary_ranges.md) -* [](/docs/某类别/229._majority_element_ii.md) -* [](/docs/某类别/230._kth_smallest_element_in_a_bst.md) -* [](/docs/某类别/231._Power_of_Two.md) -* [](/docs/某类别/232._implement_queue_using_stacks.md) -* [](/docs/某类别/234._palindrome_linked_list.md) -* [](/docs/某类别/235._lowest_common_ancestor_of_a_binary_search_tree.md) -* [](/docs/某类别/236._lowest_common_ancestor_of_a_binary_tree.md) -* [](/docs/某类别/237._delete_node_in_a_linked_list.md) -* [](/docs/某类别/238._product_of_array_except_self.md) -* [](/docs/某类别/240._search_a_2d_matrix_ii.md) -* [](/docs/某类别/242._valid_anagram.md) -* [](/docs/某类别/252.MeetingRooms.md) -* [](/docs/某类别/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md) -* [](/docs/某类别/256.PaintHouse.md) -* [](/docs/某类别/257._binary_tree_paths.md) -* [](/docs/某类别/258_Add_Digits.md) -* [](/docs/某类别/261.GraphValidTree.md) -* [](/docs/某类别/263._ugly_number.md) -* [](/docs/某类别/264._ugly_number_ii.md) -* [](/docs/某类别/265.PaintHouseII.md) -* [](/docs/某类别/266.PalindromePermutation.md) -* [](/docs/某类别/267.PalindromePermutationII.md) -* [](/docs/某类别/268._missing_number.md) -* [](/docs/某类别/270.ClosestBinarySearchTreeValue.md) -* [](/docs/某类别/276.PaintFence.md) -* [](/docs/某类别/277.FindtheCelebrity.md) -* [](/docs/某类别/278._First_Bad_Version.md) -* [](/docs/某类别/279._perfect_squares.md) -* [](/docs/某类别/280._Wiggle_Sort.md) -* [](/docs/某类别/283._move_zeroes.md) -* [](/docs/某类别/285._inorder_successor_in_bst.md) -* [](/docs/某类别/286.WallsandGates.md) -* [](/docs/某类别/289._game_of_life.md) -* [](/docs/某类别/290._word_pattern.md) -* [](/docs/某类别/292._nim_game.md) -* [](/docs/某类别/296.BestMeetingPoint.md) -* [](/docs/某类别/298.BinaryTreeLongestConsecutiveSequence.md) -* [](/docs/某类别/299._bulls_and_cows.md) -* [](/docs/某类别/300._longest_increasing_subsequence.md) -* [](/docs/某类别/303._range_sum_query_-_immutable.md) -* [](/docs/某类别/316._Remove_Duplicate_Letters.md) -* [](/docs/某类别/319._Bulb_Switcher.md) -* [](/docs/某类别/322.CoinChange.md) -* [](/docs/某类别/323.NumberofConnectedComponentsinanUndirectedGraph.md) -* [](/docs/某类别/324._Wiggle_Sort_II.md) -* [](/docs/某类别/326._power_of_three.md) -* [](/docs/某类别/328._odd_even_linked_list.md) -* [](/docs/某类别/334._increasing_triplet_subsequence.md) -* [](/docs/某类别/337._house_robber_iii.md) -* [](/docs/某类别/338.CountingBits.md) -* [](/docs/某类别/339.NestedListWeightSum.md) -* [](/docs/某类别/341._Flatten_Nested_List_Iterator.md) -* [](/docs/某类别/342._Power_of_Four.md) -* [](/docs/某类别/344._reverse_string.md) -* [](/docs/某类别/345._Reverse_Vowels_of_a_String.md) -* [](/docs/某类别/349._intersection_of_two_arrays.md) -* [](/docs/某类别/350._intersection_of_two_arrays_ii.md) -* [](/docs/某类别/353.DesignSnakeGame.md) -* [](/docs/某类别/364.NestedListWeightSumII.md) -* [](/docs/某类别/366.FindLeavesofBinaryTree.md) -* [](/docs/某类别/367._valid_perfect_square.md) -* [](/docs/某类别/369.PlusOneLinkedList.md) -* [](/docs/某类别/371._sum_of_two_integers.md) -* [](/docs/某类别/374._Guess_Number_Higher_or_Lower.md) -* [](/docs/某类别/377._combination_sum_iv.md) -* [](/docs/某类别/378._kth_smallest_element_in_a_sorted_matrix.md) -* [](/docs/某类别/380.InsertDeleteGetRandomO(1).md) -* [](/docs/某类别/381.InsertDeleteGetRandomO(1)-Duplicatesallowed.md) -* [](/docs/某类别/382._linked_list_random_node.md) -* [](/docs/某类别/383._ransom_note.md) -* [](/docs/某类别/384.ShuffleanArray.md) -* [](/docs/某类别/387._first_unique_character_in_a_string.md) -* [](/docs/某类别/388._Longest_Absolute_File_Path.md) -* [](/docs/某类别/389._find_the_difference.md) -* [](/docs/某类别/392._is_subsequence.md) -* [](/docs/某类别/394._decode_string.md) -* [](/docs/某类别/400.NthDigit.md) -* [](/docs/某类别/401._binary_watch.md) -* [](/docs/某类别/404._sum_of_left_leaves.md) -* [](/docs/某类别/405.ConvertaNumbertoHexadecimal.md) -* [](/docs/某类别/406._Queue_Reconstruction_by_Height.md) -* [](/docs/某类别/412._fizz_buzz.md) -* [](/docs/某类别/413.ArithmeticSlices.md) -* [](/docs/某类别/414._third_maximum_number.md) -* [](/docs/某类别/415._add_strings.md) -* [](/docs/某类别/416.PartitionEqualSubsetSum.md) -* [](/docs/某类别/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md) -* [](/docs/某类别/422.ValidWordSquare.md) -* [](/docs/某类别/434._number_of_segments_in_a_string.md) -* [](/docs/某类别/437._path_sum_iii.md) -* [](/docs/某类别/438._Find_All_Anagrams_in_a_String.md) -* [](/docs/某类别/439.TernaryExpressionParser.md) -* [](/docs/某类别/441._arranging_coins.md) -* [](/docs/某类别/448._Find_All_Numbers_Disappeared_in_an_Array.md) -* [](/docs/某类别/450.DeleteNodeinaBST.md) -* [](/docs/某类别/453._Minimum_Moves_to_Equal_Array_Elements.md) -* [](/docs/某类别/459._Repeated_Substring_Pattern.md) -* [](/docs/某类别/461._HammingDistance.md) -* [](/docs/某类别/463._Island_Perimeter.md) -* [](/docs/某类别/467._Unique_Substrings_in_Wraparound_String.md) -* [](/docs/某类别/469.ConvexPolygon.md) -* [](/docs/某类别/476._Number_Complement.md) -* [](/docs/某类别/477._Total_Hamming_Distance.md) -* [](/docs/某类别/485._Max_Consecutive_Ones.md) -* [](/docs/某类别/587._Erect_the_Fence.md) -* [](/docs/某类别/599._Minimum_Index_Sum_of_Two_Lists.md) -* [](/docs/某类别/647._Palindromic_Substrings.md) -* [](/docs/某类别/657._Judge_Route_Circle.md) -* [](/docs/某类别/665._Non-decreasing_Array.md) -* [](/docs/某类别/672._Bulb_Switcher_II.md) -* [](/docs/某类别/681._Next_Closest_Time.md) -* [](/docs/某类别/682._Baseball_Game.md) -* [](/docs/某类别/687._Longest_Univalue_Path.md) -* [](/docs/某类别/740._delete_and_earn.md) -* [](/docs/某类别/760._Find_Anagram_Mappings.md) - -## 推荐的一些LeetCode网站 - -1. [KrisYu的GItuhub](https://github.com/KrisYu/LeetCode-CLRS-Python) -2. [kamyu104的Github](https://github.com/kamyu104/LeetCode) -3. [数据结构与算法/leetcode/lintcode题解](https://algorithm.yuanbin.me/zh-hans/) -4. [Leetcode 讨论区](https://discuss.leetcode.com/) -5. [visualgo算法可视化网站](https://visualgo.net/en) -6. [Data Structure Visualization](https://www.cs.usfca.edu/~galles/visualization/Algorithms.html) -7. [我的算法学习之路 - Lucida](http://zh.lucida.me/blog/on-learning-algorithms/) -8. [HiredInTech](https://www.hiredintech.com/) System Design 的总结特别适合入门 -9. [mitcc的Github](https://github.com/mitcc/AlgoSolutions) -10. [小土刀的面试刷题笔记](http://wdxtub.com/interview/14520594642530.html) - - - 💪就是干! - \ No newline at end of file +### 直接插入排序 (Insertion sort) + +![](/images/SortingAlgorithm/直接插入排序.gif) + +直接插入排序的核心思想就是:将数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已排序的元素小,则交换,直到全部元素都比较过。 +因此,从上面的描述中我们可以发现,直接插入排序可以用两个循环完成: + +1. 第一层循环:遍历待比较的所有数组元素 +2. 第二层循环:将本轮选择的元素(selected)与已经排好序的元素(ordered)相比较。 + - 如果```selected > ordered```,那么将二者交换 + +```python +#直接插入排序 +def insert_sort(L): + #遍历数组中的所有元素,其中0号索引元素默认已排序,因此从1开始 + for x in range(1,len(L)): + #将该元素与已排序好的前序数组依次比较,如果该元素小,则交换 + #range(x-1,-1,-1):从x-1倒序循环到0 + for i in range(x-1,-1,-1): + #判断:如果符合条件则交换 + if L[i] > L[i+1]: + L[i], L[i+1] = L[i+1], L[i] +``` +### 希尔排序 (Shell sort) + +![](/images/SortingAlgorithm/希尔排序.png) + +希尔排序的算法思想:将待排序数组按照步长gap进行分组,然后将每组的元素利用直接插入排序的方法进行排序;每次将gap折半减小,循环上述操作;当gap=1时,利用直接插入,完成排序。 +同样的:从上面的描述中我们可以发现:希尔排序的总体实现应该由三个循环完成: + +1. 第一层循环:将gap依次折半,对序列进行分组,直到gap=1 +2. 第二、三层循环:也即直接插入排序所需要的两次循环。具体描述见上。 + +```python +#希尔排序 +def insert_shell(L): + #初始化gap值,此处利用序列长度的一半为其赋值 + gap = int(len(L)/2) + #第一层循环:依次改变gap值对列表进行分组 + while (gap >= 1): + #下面:利用直接插入排序的思想对分组数据进行排序 + #range(gap,len(L)):从gap开始 + for x in range(gap,len(L)): + #range(x-gap,-1,-gap):从x-gap开始与选定元素开始倒序比较,每个比较元素之间间隔gap + for i in range(x-gap,-1,-gap): + #如果该组当中两个元素满足交换条件,则进行交换 + if L[i] > L[i+gap]: + L[i], L[i+gap] = L[i+gap], L[i] + #while循环条件折半 + gap = int((gap/2)) +``` + +### 简单选择排序 (Selection sort) + +![](/images/SortingAlgorithm/简单选择排序.gif) + +简单选择排序的基本思想:比较+交换。 + +1. 从待排序序列中,找到关键字最小的元素; +2. 如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换; +3. 从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。 +因此我们可以发现,简单选择排序也是通过两层循环实现。 + - 第一层循环:依次遍历序列当中的每一个元素 + - 第二层循环:将遍历得到的当前元素依次与余下的元素进行比较,符合最小元素的条件,则交换。 + +```python +# 简单选择排序 +def select_sort(L): +#依次遍历序列中的每一个元素 + for x in range(0,len(L)): +#将当前位置的元素定义此轮循环当中的最小值 + minimum = L[x] +#将该元素与剩下的元素依次比较寻找最小元素 + for i in range(x+1,len(L)): + if L[i] < minimum: + L[i], minimum = minimum, L[i] +#将比较后得到的真正的最小值赋值给当前位置 + L[x] = minimum +``` + +### 堆排序 (Heap sort) + +#### 堆的概念 + +堆:本质是一种数组对象。特别重要的一点性质:任意的叶子节点小于(或大于)它所有的父节点。对此,又分为大顶堆和小顶堆,大顶堆要求节点的元素都要大于其孩子,小顶堆要求节点元素都小于其左右孩子,两者对左右孩子的大小关系不做任何要求。 +利用堆排序,就是基于大顶堆或者小顶堆的一种排序方法。下面,我们通过大顶堆来实现。 + +基本思想: +堆排序可以按照以下步骤来完成: + +1. 首先将序列构建称为大顶堆; + +(这样满足了大顶堆那条性质:位于根节点的元素一定是当前序列的最大值) + +![](/images/SortingAlgorithm/构建大顶堆.png) + +2. 取出当前大顶堆的根节点,将其与序列末尾元素进行交换; + +(此时:序列末尾的元素为已排序的最大值;由于交换了元素,当前位于根节点的堆并不一定满足大顶堆的性质) + +3. 对交换后的n-1个序列元素进行调整,使其满足大顶堆的性质; + +![](/images/SortingAlgorithm/调整大顶堆.png) + +4. 重复2.3步骤,直至堆中只有1个元素为止 + +```python +#-------------------------堆排序-------------------------------- +#**********获取左右叶子节点********** +def LEFT(i): + return 2*i + 1 +def RIGHT(i): + return 2*i + 2 +#********** 调整大顶堆 ********** +#L:待调整序列 length: 序列长度 i:需要调整的结点 +def adjust_max_heap(L, length, i): +#定义一个int值保存当前序列最大值的下标 + largest = i +#获得序列左右叶子节点的下标 + left, right = LEFT(i), RIGHT(i) +#当左叶子节点的下标小于序列长度 并且 左叶子节点的值大于父节点时,将左叶子节点的下标赋值给largest + if (left < length) and (L[left] > L[i]): + largest = left +#当右叶子节点的下标小于序列长度 并且 右叶子节点的值大于父节点时,将右叶子节点的下标值赋值给largest + if (right < length) and (L[right] > L[largest]): + largest = right +#如果largest不等于i 说明当前的父节点不是最大值,需要交换值 + if (largest != i): + L[i], L[largest] = L[largest], L[i] + # 执行递归操作:两个任务:1 寻找最大值的下标;2.最大值与父节点交换 + adjust_max_heap(L, length, largest) +#********** 建立大顶堆 ********** +def build_max_heap(L): + length = len(L) + for x in range(int((length-1)/2), -1, -1): + adjust_max_heap(L, length, x) +#********** 堆排序 ********** +def heap_sort(L): +#先建立大顶堆,保证最大值位于根节点;并且父节点的值大于叶子结点 + build_max_heap(L) +#i:当前堆中序列的长度.初始化为序列的长度 + i = len(L) +#执行循环:1. 每次取出堆顶元素置于序列的最后(len-1,len-2,len-3...) +# 2. 调整堆,使其继续满足大顶堆的性质,注意实时修改堆中序列的长度 + while (i > 0): + L[i-1], L[0] = L[0], L[i-1] +#堆中序列长度减1 + i -= 1 +#调整大顶堆 + adjust_max_heap(L, i, 0) +``` +### 冒泡排序 (Bubble sort) + +![](/images/SortingAlgorithm/冒泡排序.gif) + +冒泡排序思路比较简单: + +1. 将序列当中的左右元素,依次比较,保证右边的元素始终大于左边的元素; +( 第一轮结束后,序列最后一个元素一定是当前序列的最大值;) +2. 对序列当中剩下的n-1个元素再次执行步骤1。 +3. 对于长度为n的序列,一共需要执行n-1轮比较 +(利用while循环可以减少执行次数) + +```python +#冒泡排序 +def bubble_sort(L): + length = len(L) +#序列长度为length,需要执行length-1轮交换 + for x in range(1, length): +#对于每一轮交换,都将序列当中的左右元素进行比较 +#每轮交换当中,由于序列最后的元素一定是最大的,因此每轮循环到序列未排序的位置即可 + for i in range(0, length-x): + if L[i] > L[i+1]: + L[i], L[i+1] = L[i+1], L[i] +``` + +### 快速排序 (Quick sort) + +![](/images/SortingAlgorithm/快速排序.gif) + +快速排序的基本思想:挖坑填数+分治法 + +1. 从序列当中选择一个基准数(pivot) +在这里我们选择序列当中第一个数作为基准数 +2. 将序列当中的所有数依次遍历,比基准数大的位于其右侧,比基准数小的位于其左侧 +3. 重复步骤1.2,直到所有子集当中只有一个元素为止。 + +用伪代码描述如下: +- i =L; j = R; 将基准数挖出形成第一个坑a[i]。 +- j--由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中。 +- i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中。 +- 再重复执行2,3二步,直到i==j,将基准数填入a[i]中 + +```python +#快速排序 +#L:待排序的序列;start排序的开始index,end序列末尾的index +#对于长度为length的序列:start = 0;end = length-1 +def quick_sort(L, start, end): + if start < end: + i, j, pivot = start, end, L[start] + while i < j: +#从右开始向左寻找第一个小于pivot的值 + while (i < j) and (L[j] >= pivot): + j -= 1 +#将小于pivot的值移到左边 + if (i < j): + L[i] = L[j] + i += 1 +#从左开始向右寻找第一个大于pivot的值 + while (i < j) and (L[i] <= pivot): + i += 1 +#将大于pivot的值移到右边 + if (i < j): + L[j] = L[i] + j -= 1 +#循环结束后,说明 i=j,此时左边的值全都小于pivot,右边的值全都大于pivot +#pivot的位置移动正确,那么此时只需对左右两侧的序列调用此函数进一步排序即可 +#递归调用函数:依次对左侧序列:从0 ~ i-1//右侧序列:从i+1 ~ end + L[i] = pivot +#左侧序列继续排序 + quick_sort(L, start, i-1) +#右侧序列继续排序 + quick_sort(L, i+1, end) +``` + +### 归并排序 (Merge sort) + +![](/images/SortingAlgorithm/归并排序.gif) + +1. 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个典型的应用。它的基本操作是:将已有的子序列合并,达到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。 +2. 归并排序其实要做两件事: + - 分解----将序列每次折半拆分 + - 合并----将划分后的序列段两两排序合并 +因此,归并排序实际上就是两个操作,拆分+合并 +3. 如何合并? + - L[first...mid]为第一段,L[mid+1...last]为第二段,并且两端已经有序,现在我们要将两端合成达到L[first...last]并且也有序。 + - 首先依次从第一段与第二段中取出元素比较,将较小的元素赋值给temp[] + - 重复执行上一步,当某一段赋值结束,则将另一段剩下的元素赋值给temp[] + - 此时将temp[]中的元素复制给L[],则得到的L[first...last]有序 +4. 如何分解? + - 在这里,我们采用递归的方法,首先将待排序列分成A,B两组; + - 然后重复对A、B序列分组; + - 直到分组后组内只有一个元素,此时我们认为组内所有元素有序,则分组结束。 + +```python +# 归并排序 +#这是合并的函数 +# 将序列L[first...mid]与序列L[mid+1...last]进行合并 +def mergearray(L, first, mid, last, temp): +#对i,j,k分别进行赋值 + i, j, k = first, mid+1, 0 +#当左右两边都有数时进行比较,取较小的数 + while (i <= mid) and (j <= last): + if L[i] <= L[j]: + temp[k] = L[i] + i += 1 + k += 1 + else: + temp[k] = L[j] + j += 1 + k += 1 +#如果左边序列还有数 + while (i <= mid): + temp[k] = L[i] + i += 1 + k += 1 +#如果右边序列还有数 + while (j <= last): + temp[k] = L[j] + j += 1 + k += 1 +#将temp当中该段有序元素赋值给L待排序列使之部分有序 + for x in range(0, k): + L[first+x] = temp[x] +# 这是分组的函数 +def merge_sort(L, first, last, temp): + if first < last: + mid = int(((first + last) / 2)) +#使左边序列有序 + merge_sort(L, first, mid, temp) +#使右边序列有序 + merge_sort(L, mid+1, last, temp) +#将两个有序序列合并 + mergearray(L, first, mid, last, temp) +# 归并排序的函数 +def merge_sort_array(L): +#声明一个长度为len(L)的空列表 + temp = len(L)*[None] +#调用归并排序 + merge_sort(L, 0, len(L)-1, temp) +``` + +### 基数排序 (Radix sort) + +![](/images/SortingAlgorithm/基数排序.gif) + +1. 基数排序:通过序列中各个元素的值,对排序的N个元素进行若干趟的“分配”与“收集”来实现排序。 + - 分配:我们将L[i]中的元素取出,首先确定其个位上的数字,根据该数字分配到与之序号相同的桶中 + - 收集:当序列中所有的元素都分配到对应的桶中,再按照顺序依次将桶中的元素收集形成新的一个待排序列L[ ] + - 对新形成的序列L[]重复执行分配和收集元素中的十位、百位...直到分配完该序列中的最高位,则排序结束 +2. 根据上述“基数排序”的展示,我们可以清楚的看到整个实现的过程 + +```python +#************************基数排序**************************** +#确定排序的次数 +#排序的顺序跟序列中最大数的位数相关 +def radix_sort_nums(L): + maxNum = L[0] +#寻找序列中的最大数 + for x in L: + if maxNum < x: + maxNum = x +#确定序列中的最大元素的位数 + times = 0 + while (maxNum > 0): + maxNum = int((maxNum/10)) + times += 1 + return times +#找到num从低到高第pos位的数据 +def get_num_pos(num, pos): + return (int((num/(10**(pos-1))))) % 10 +#基数排序 +def radix_sort(L): + count = 10 * [None] #存放各个桶的数据统计个数 + bucket = len(L) * [None] #暂时存放排序结果 +#从低位到高位依次执行循环 + for pos in range(1, radix_sort_nums(L)+1): + #置空各个桶的数据统计 + for x in range(0, 10): + count[x] = 0 + #统计当前该位(个位,十位,百位....)的元素数目 + for x in range(0, len(L)): + #统计各个桶将要装进去的元素个数 + j = get_num_pos(int(L[x]), pos) + count[j] += 1 + #count[i]表示第i个桶的右边界索引 + for x in range(1,10): + count[x] += count[x-1] + #将数据依次装入桶中 + for x in range(len(L)-1, -1, -1): + #求出元素第K位的数字 + j = get_num_pos(L[x], pos) + #放入对应的桶中,count[j]-1是第j个桶的右边界索引 + bucket[count[j]-1] = L[x] + #对应桶的装入数据索引-1 + count[j] -= 1 + # 将已分配好的桶中数据再倒出来,此时已是对应当前位数有序的表 + for x in range(0, len(L)): + L[x] = bucket[x] +``` + +## 运行时间实测 + +10w数据 +``` +直接插入排序:1233.581131 +希尔排序:1409.8012320000003 +简单选择排序:466.66974500000015 +堆排序:1.2036720000000969 +冒泡排序:751.274449 +#**************************************************** +快速排序:1.0000003385357559e-06 +#快速排序有误:实际上并未执行 +#RecursionError: maximum recursion depth exceeded in comparison +#**************************************************** +归并排序:0.8262230000000272 +基数排序:1.1162899999999354 +``` +从运行结果上来看,堆排序、归并排序、基数排序真的快。 +对于快速排序迭代深度超过的问题,可以将考虑将快排通过非递归的方式进行实现。 + +## Resources + +1. [算法导论》笔记汇总](http://mindlee.com/2011/08/21/study-notes-directory/) +2. [八大排序算法的 Python 实现](http://python.jobbole.com/82270/) +3. [数据结构常见的八大排序算法(详细整理)](https://www.jianshu.com/p/7d037c332a9d) From 057e7a12122599ae4ddfb835a1ef1b595617f081 Mon Sep 17 00:00:00 2001 From: jiangzhonglian Date: Thu, 5 Apr 2018 14:37:16 +0800 Subject: [PATCH 0433/2496] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A0=87=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7f0f815c4..940a4301c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # LeetCode 面试题 -## [八大算法算](/docs/SortingAlgorithm/README.md) +## [八大排序算法](/docs/SortingAlgorithm/README.md) ![](/images/SortingAlgorithm/八大排序算法性能.png) From 6acdb14db1b5b1bb7c6bf409d7fe2bfdb3cb49d8 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 5 Apr 2018 01:50:12 -0500 Subject: [PATCH 0434/2496] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 940a4301c..bf1be3417 100644 --- a/README.md +++ b/README.md @@ -308,4 +308,7 @@ 9. [mitcc的Github](https://github.com/mitcc/AlgoSolutions) 10. [小土刀的面试刷题笔记](http://wdxtub.com/interview/14520594642530.html) + +Please note, this repository is inspired from [KrisYu](https://github.com/KrisYu/LeetCode-CLRS-Python). However, it has been modified, added and imrpoved to reflect our knowledge, wisdom and effort. + - 💪就是干! From 1437b7e7332a3f406d34bcc8367f3040e900eba9 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 5 Apr 2018 01:50:59 -0500 Subject: [PATCH 0435/2496] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bf1be3417..31bf2b468 100644 --- a/README.md +++ b/README.md @@ -309,6 +309,6 @@ 10. [小土刀的面试刷题笔记](http://wdxtub.com/interview/14520594642530.html) -Please note, this repository is inspired from [KrisYu](https://github.com/KrisYu/LeetCode-CLRS-Python). However, it has been modified, added and imrpoved to reflect our knowledge, wisdom and effort. +### Please note, this repository is inspired from [KrisYu](https://github.com/KrisYu/LeetCode-CLRS-Python). However, it has been modified, added and imrpoved to reflect our knowledge, wisdom and effort. - 💪就是干! From 5c1450b8644182e8a9c6d7f9ff31cf23dc9ad93f Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 5 Apr 2018 16:46:33 -0500 Subject: [PATCH 0436/2496] Update 126. Word Ladder II.md --- docs/126. Word Ladder II.md | 74 ++++++++++++++++++------------------- 1 file changed, 36 insertions(+), 38 deletions(-) diff --git a/docs/126. Word Ladder II.md b/docs/126. Word Ladder II.md index e6ef281cc..99e75f495 100644 --- a/docs/126. Word Ladder II.md +++ b/docs/126. Word Ladder II.md @@ -1,4 +1,4 @@ -###126. Word Ladder II +### 126. Word Ladder II 题目: @@ -19,8 +19,8 @@ Hard 就是基本的bfs,典型的level order traverse 有两个坑: -1. 不要判断字典里的某两个word是否只相差一个字母,而是要判断某个word的邻居(和他只相差一个字母的所有word)是否在字典里,这样的改进会使这一步的复杂度下降了很多,否则超时妥妥 -2. 记录每一层已经访问过的word,一层结束后把他们加到大的visited里面,记住每次要访问的word不可以是在visited里面的 +1. 不要判断字典里的某两个word是否只相差一个字母,而是要判断某个word的邻居(和他只相差一个字母的所有word)是否在字典里,这样的改进会使这一步的复杂度下降很多,否则超时妥妥 +2. 每一轮访问过的word一定要从字典中删除掉,否则一定会超时 最后见到end word就收 完成 @@ -41,58 +41,56 @@ Hard cog ``` -生成了如下的一个trace 字典,然后再根据这个来寻找路径 +routine 字典,然后再根据这个来寻找路径 `{'cog': ['log', 'dog'], 'hit': [], 'log': ['lot'], 'dog': ['dot'], 'hot': ['hit'], 'lot': ['hot'], 'dot': ['hot']}` +```'cog': ['log', 'dog']```这里的意思就是说在走到```'cog'```之前尝试过了```'log'```和```'dog'```,即previous tried node + 而生成字典的过程就是BFS的,此处保证寻找的路径就是最短的。 AC代码: -``` +```python class Solution(object): - def findLadders(self, beginWord, endWord, wordlist): + def findLadders(self, beginWord, endWord, wordList): """ :type beginWord: str :type endWord: str - :type wordlist: Set[str] - :rtype: List[List[int]] + :type wordList: List[str] + :rtype: List[List[str]] """ + def backtrack(result, trace, path, word): - if len(trace[word]) == 0: - result.append([word] + path) - else: - for prev in trace[word]: - backtrack(result, trace, [word] + path, prev) - - - wordSet = set(wordlist) - wordSet.add(beginWord) - wordSet.add(endWord) - - result, trace, current = [], {word: [] for word in wordSet}, set([beginWord]) - # print result, trace, current - while current and endWord not in current: - for word in current: - wordSet.remove(word) - net = set([]) - for word in current: - for i in range(len(word)): - for j in 'abcdefghijklmnopqrstuvwxyz': - candidate = word[:i] + j + word[i+1:] - if candidate in wordSet: - trace[candidate].append(word) - net.add(candidate) - current = net - - if current: - backtrack(result, trace, [], endWord) - return result + if len(trace[word]) == 0: + result.append([word] + path) + else: + for prev in trace[word]: + backtrack(result, trace, [word] + path, prev) + + lookup = set(wordList) | set([beginWord]) + res, cur, routine = [], set([beginWord]), {word: [] for word in lookup} + while cur and endWord not in cur: + next_queue = set() + for word in cur: + lookup.remove(word) + for word in cur: + for i in range(len(word)): + for j in 'abcdefghijklmnopqrstuvwxyz': + candidate = word[:i] + j + word[i + 1:] + if candidate in lookup: + next_queue.add(candidate) + routine[candidate].append(word) + cur = next_queue + + if cur: + backtrack(res, routine, [], endWord) + return res ``` -这样可以beat 约 60% +这样可以beat 69.09% From a64ed933e416a07498d0f4af971c50e604f290f1 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 6 Apr 2018 12:03:05 -0500 Subject: [PATCH 0437/2496] Update 008._string_to_integer_(atoi).md --- docs/008._string_to_integer_(atoi).md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/docs/008._string_to_integer_(atoi).md b/docs/008._string_to_integer_(atoi).md index c8a9ce4fd..4ff1cddcf 100644 --- a/docs/008._string_to_integer_(atoi).md +++ b/docs/008._string_to_integer_(atoi).md @@ -1,17 +1,23 @@ -###8. String to Integer (atoi) +### 8. String to Integer (atoi) 题目: 难度: -Easy +Medium 需要考虑比较多的边界条件&特殊情况 +1. 首先输入可能会有空格,所以先去掉空格 +2. 去掉空格后要考虑空字符串情况 +3. 字符串首位可能会有正负号,要考虑 +4. 开始转换成数字,题目说只要遇到非数字就可以break了 +5. 结果太大或者太小超过```int```限制就要返回特定数字 ```2147483647``` 或者 ```-2147483648``` +6. 根据之前的正负号结果返回对应数值 -``` +```python class Solution(object): def myAtoi(self, str): """ @@ -44,4 +50,4 @@ class Solution(object): strNum = 0 - strNum return strNum -``` \ No newline at end of file +``` From ac232fbda248870c9bfd59b21da6208823d20568 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 6 Apr 2018 12:14:31 -0500 Subject: [PATCH 0438/2496] Create 009._Palindrome_Number.md --- docs/009._Palindrome_Number.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 docs/009._Palindrome_Number.md diff --git a/docs/009._Palindrome_Number.md b/docs/009._Palindrome_Number.md new file mode 100644 index 000000000..c31957d81 --- /dev/null +++ b/docs/009._Palindrome_Number.md @@ -0,0 +1,31 @@ +### 9. Palindrome Number + +题目: + + +难度: +Medium + + +- 首先负数肯定不是palindrome +- 其次如果一个数字是一个正数,并且能被我0整除那它肯定也不是palindrome + +这样降低了复杂度 + +```python +class Solution(object): + def isPalindrome(self, x): + """ + :type x: int + :rtype: bool + """ + if x < 0 or (x != 0 and x % 10 == 0 ): + return False + rev, y = 0, x + while x > 0: + rev = rev * 10 + x % 10 + x /= 10 + return y == rev + +``` + From 283dcf85452c7227e053a4a3ff24796c65509b33 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 6 Apr 2018 12:14:48 -0500 Subject: [PATCH 0439/2496] Update 009._Palindrome_Number.md --- docs/009._Palindrome_Number.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/009._Palindrome_Number.md b/docs/009._Palindrome_Number.md index c31957d81..8e14084f7 100644 --- a/docs/009._Palindrome_Number.md +++ b/docs/009._Palindrome_Number.md @@ -19,7 +19,7 @@ class Solution(object): :type x: int :rtype: bool """ - if x < 0 or (x != 0 and x % 10 == 0 ): + if x < 0 or (x != 0 and x % 10 == 0): return False rev, y = 0, x while x > 0: From b6b80b9bd016a030180350d00f0c9a493b9de4ac Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 6 Apr 2018 20:05:28 -0500 Subject: [PATCH 0440/2496] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 31bf2b468..f9547934f 100644 --- a/README.md +++ b/README.md @@ -309,6 +309,6 @@ 10. [小土刀的面试刷题笔记](http://wdxtub.com/interview/14520594642530.html) -### Please note, this repository is inspired from [KrisYu](https://github.com/KrisYu/LeetCode-CLRS-Python). However, it has been modified, added and imrpoved to reflect our knowledge, wisdom and effort. +### Please note, this repository is inspired from [KrisYu](https://github.com/KrisYu/LeetCode-CLRS-Python). However, it has been modified, added and improved to reflect our knowledge, wisdom and effort. - 💪就是干! From 67ef661c2129a3587b0a7fcaddd1b705b78e3222 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 6 Apr 2018 20:33:21 -0500 Subject: [PATCH 0441/2496] =?UTF-8?q?Create=20=E5=BC=80=E5=8F=91=E5=B2=97?= =?UTF-8?q?=E4=BD=8D(Java)=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...5\262\227\344\275\215(Java)\346\200\273\347\273\223.md" | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 "docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" diff --git "a/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" "b/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" new file mode 100644 index 000000000..ceebd095e --- /dev/null +++ "b/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" @@ -0,0 +1,7 @@ +最近正在面试,最开始因为没有这样准备过,所以总是被问的一脸懵逼,相信很多人跟我有过一样的经历,时间长就是忘了嘛,对不对,无奈。 +🔥一上来打算好好整理下,面试前过一遍,岂不是美滋滋! + +# Java基础 +## 1. 面向对象和面向过程的区别 +- 面向过程强调动作,物体本身只是一个属性或者参数,具体为一件事该怎么做。 ```吃.(狗,屎) 吃.(🐶, 💩)``` +- 面向对象强调object,动作只是一个函数,具体为一件事该让谁去做。 ```狗.吃(屎) 🐶.吃(💩)``` From b21dd0e3b52d08dc4c588befd03fe69d4b1eb16c Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 6 Apr 2018 21:16:03 -0500 Subject: [PATCH 0442/2496] =?UTF-8?q?Update=20=E5=BC=80=E5=8F=91=E5=B2=97?= =?UTF-8?q?=E4=BD=8D(Java)=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\275\215(Java)\346\200\273\347\273\223.md" | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git "a/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" "b/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" index ceebd095e..705bc0449 100644 --- "a/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" +++ "b/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" @@ -1,7 +1,35 @@ 最近正在面试,最开始因为没有这样准备过,所以总是被问的一脸懵逼,相信很多人跟我有过一样的经历,时间长就是忘了嘛,对不对,无奈。 -🔥一上来打算好好整理下,面试前过一遍,岂不是美滋滋! +怒🔥一上来打算好好整理下,面试前过一遍,岂不是美滋滋! # Java基础 ## 1. 面向对象和面向过程的区别 - 面向过程强调动作,物体本身只是一个属性或者参数,具体为一件事该怎么做。 ```吃.(狗,屎) 吃.(🐶, 💩)``` -- 面向对象强调object,动作只是一个函数,具体为一件事该让谁去做。 ```狗.吃(屎) 🐶.吃(💩)``` + - 优点:性能比面向对象高,因为类调用时需要实例化,比较消耗资源;较底层的东西比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。 + - 缺点:没有面向对象易维护、易复用、易扩展 +- 面向对象强调object,动作只是一个函数,具体为一件事该让谁去做。         ```狗.吃(屎) 🐶.吃(💩)``` + - 优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护 + - 缺点:性能比面向过程低 + +## 2. Java的四个基本特性(抽象、封装、继承,多态) +- ***抽象***:就是把现实生活中的某一类东西提取出来,用类或者接口表示。抽象包括两个方面:一个是数据抽象,一个是过程抽象。数据抽象也就是对象的属性。过程抽象是对象的行为特征。 +- ***封装***:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行封装隐藏。封装分为属性的封装和方法的封装。 +    - 1. 安全 +    - 2. 将内外隔离 +    - 3. 便于使用 +    - 4. 提供重复性,具有模块化 +- ***继承***:父类抽取多类事物的共性,不同子类继承父类根据自身条件不同对父类方法进行重载或重写。 +- ***多态***:从某种角度上来说,封装和继承就是为了多态而做准备的。多态采用的方法是动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。多态必须同时满足三个条件: + - 1. 要有继承 + - 2. 要有重写 + - 3. 父类引用指向子类对象 + + 多态其实就是父类提供一个接口,基于同一个接口,使用不同的实例就可以使用不同的功能 + ```java + Father f = new Son(); + ``` +## 3. 重载和重写的区别 +- 重载:发生在同一个类中,方法名必须相同,参数类型、个数或者顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。 +- 重写:发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类;如果父类方法访问修饰符为private则子类中就不是重写。 + +# 4. 构造器Constructor是否可被override +构造器不能被重写,不能用static修饰构造器,只能用public,private,protected这三个权限修饰符,且不能有返回语句。 From 670dd16a2cd738480066b122a3b88829b303e6bf Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 6 Apr 2018 23:14:38 -0500 Subject: [PATCH 0443/2496] Update 019._remove_nth_node_from_end_of_list.md --- docs/019._remove_nth_node_from_end_of_list.md | 80 +++++++++---------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/docs/019._remove_nth_node_from_end_of_list.md b/docs/019._remove_nth_node_from_end_of_list.md index eca0f9ac5..9afa344d4 100644 --- a/docs/019._remove_nth_node_from_end_of_list.md +++ b/docs/019._remove_nth_node_from_end_of_list.md @@ -1,41 +1,41 @@ -###19. Remove Nth Node From End of List - -题目: - - - - -难度: Easy - - -AC击败了95.80%的Python用户,技巧 dummy head 和双指针。 - - +### 19. Remove Nth Node From End of List + +题目: + + + + +难度: Medium + + +AC击败了95.80%的Python用户,技巧 dummy head 和双指针。 +切记最后要返回```dummy.next```而不是```head```,因为有这样一种情况,删掉节点后```linked list```空了,那返回```head```的话结果显然不同。如: +输入链表为```[1]```, ```n = 1```, 应该返回```None```而不是```[1]``` + +```python +class Solution(object): + def removeNthFromEnd(self, head, n): + """ + :type head: ListNode + :type n: int + :rtype: ListNode + """ + dummy = ListNode(-1) + dummy.next = head + p, q = dummy, dummy + + for i in range(n): + q = q.next + + while q.next: + p = p.next + q = q.next + + p.next = p.next.next + return dummy.next + ``` -class Solution(object): - def removeNthFromEnd(self, head, n): - """ - :type head: ListNode - :type n: int - :rtype: ListNode - """ - dummy = ListNode(-1) - dummy.next = head - p = dummy - q = dummy - - for i in range(n): - q = q.next - - while q.next: - p = p.next - q = q.next - - p.next = p.next.next - return dummy.next - -``` - - - - + + + + From 396384a3a85c769652ffbde006acf1994d6cbfc9 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Fri, 6 Apr 2018 23:21:03 -0500 Subject: [PATCH 0444/2496] Update 019._remove_nth_node_from_end_of_list.md --- docs/019._remove_nth_node_from_end_of_list.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/019._remove_nth_node_from_end_of_list.md b/docs/019._remove_nth_node_from_end_of_list.md index 9afa344d4..5bdefb7a0 100644 --- a/docs/019._remove_nth_node_from_end_of_list.md +++ b/docs/019._remove_nth_node_from_end_of_list.md @@ -9,6 +9,7 @@ AC击败了95.80%的Python用户,技巧 dummy head 和双指针。 + 切记最后要返回```dummy.next```而不是```head```,因为有这样一种情况,删掉节点后```linked list```空了,那返回```head```的话结果显然不同。如: 输入链表为```[1]```, ```n = 1```, 应该返回```None```而不是```[1]``` From 8ea62e8a2d9baa3c96642cba51c423d4f965a77a Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 00:02:39 -0500 Subject: [PATCH 0445/2496] Create 006._ZigZag_Conversion.md --- docs/006._ZigZag_Conversion.md | 67 ++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 docs/006._ZigZag_Conversion.md diff --git a/docs/006._ZigZag_Conversion.md b/docs/006._ZigZag_Conversion.md new file mode 100644 index 000000000..f0ef15acf --- /dev/null +++ b/docs/006._ZigZag_Conversion.md @@ -0,0 +1,67 @@ +### 6. ZigZag Conversion + +题目: + + + +难度: + +Medium + + +思路 + +参考大神[pharrellyhy](https://leetcode.com/problems/zigzag-conversion/discuss/3404/Python-O(n)-Solution-in-96ms-(99.43)?page=2)的思路, +纵向思维考虑,```index```从```0```开始,我们要一直自增直到```numRows-1```,此时又一直自减到```0```,重复执行。 +多给个例子:```s = “abcdefghijklmn”```, ```numRows = 4``` +``` +a g m +b f h l n +c e i k +d j +``` +看明白了吗,下来上去,下来上去,zigzag + + +```python +class Solution(object): + def convert(self, s, numRows): + """ + :type s: str + :type numRows: int + :rtype: str + """ + if numRows == 1 or numRows >= len(s): + return s + + L = [''] * numRows + index, step = 0, 1 + + for x in s: + L[index] += x + if index == 0: + step = 1 + elif index == numRows -1: + step = -1 + index += step + + return ''.join(L) +``` +假设用我上面给的例子,并且在```L[index] += x```这一行后面打印出index, step, L的值, 输出结果如下: +``` +(0, 1, ['a', '', '', '']) +(1, 1, ['a', 'b', '', '']) +(2, 1, ['a', 'b', 'c', '']) +(3, 1, ['a', 'b', 'c', 'd']) +(2, -1, ['a', 'b', 'ce', 'd']) +(1, -1, ['a', 'bf', 'ce', 'd']) +(0, -1, ['ag', 'bf', 'ce', 'd']) +(1, 1, ['ag', 'bfh', 'ce', 'd']) +(2, 1, ['ag', 'bfh', 'cei', 'd']) +(3, 1, ['ag', 'bfh', 'cei', 'dj']) +(2, -1, ['ag', 'bfh', 'ceik', 'dj']) +(1, -1, ['ag', 'bfhl', 'ceik', 'dj']) +(0, -1, ['agm', 'bfhl', 'ceik', 'dj']) +(1, 1, ['agm', 'bfhln', 'ceik', 'dj']) +``` + From ae111cc40d400e537a3b932dd323bcc2ba71fc33 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 00:03:38 -0500 Subject: [PATCH 0446/2496] Update 006._ZigZag_Conversion.md --- docs/006._ZigZag_Conversion.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/006._ZigZag_Conversion.md b/docs/006._ZigZag_Conversion.md index f0ef15acf..cc7bcbe33 100644 --- a/docs/006._ZigZag_Conversion.md +++ b/docs/006._ZigZag_Conversion.md @@ -12,8 +12,8 @@ Medium 思路 参考大神[pharrellyhy](https://leetcode.com/problems/zigzag-conversion/discuss/3404/Python-O(n)-Solution-in-96ms-(99.43)?page=2)的思路, -纵向思维考虑,```index```从```0```开始,我们要一直自增直到```numRows-1```,此时又一直自减到```0```,重复执行。 -多给个例子:```s = “abcdefghijklmn”```, ```numRows = 4``` +纵向思维考虑,```index```从```0```开始,我们要一直***自增***直到```numRows-1```,此后又一直***自减***到```0```,重复执行。 +给个例子容易懂一些:```s = “abcdefghijklmn”```, ```numRows = 4``` ``` a g m b f h l n From b02d37adf65566c9d65d5274b102d8a96b845e7b Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 00:08:02 -0500 Subject: [PATCH 0447/2496] add one interview content --- .../paipaidai.md" | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 "docs/interview/\346\213\215\346\213\215\350\264\267/paipaidai.md" diff --git "a/docs/interview/\346\213\215\346\213\215\350\264\267/paipaidai.md" "b/docs/interview/\346\213\215\346\213\215\350\264\267/paipaidai.md" new file mode 100644 index 000000000..1ca2679b3 --- /dev/null +++ "b/docs/interview/\346\213\215\346\213\215\350\264\267/paipaidai.md" @@ -0,0 +1,34 @@ +如图,![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/interview%20question/WePay/WePay.jpg) + +就是一个slide windows 的题目 + +```python +inputs = [5,1,2,100,2,2] +def alert(inputs, windowSize, allowedIncrease): + b = [] + tmp = {} + for i in range(len(inputs) - windowSize): + for j in range(i, i+windowSize+1): + if j in tmp.keys(): + if j > len(inputs) - windowSize-1: + tmp.get(j).append(inputs[i+1:i + windowSize+1]) + else: + tmp.get(j).append(inputs[i:i+windowSize]) + else: + print(j,j, i, i+ windowSize) + if j > len(inputs) - windowSize -1: + tmp[j] = [inputs[i+1:i + windowSize+1]] + else: + tmp[j] = [inputs[i:i+windowSize]] + b = [inputs[i:i+windowSize] for i in range(len(inputs)-windowSize)] + print(tmp) + for num in tmp.keys(): + if all(inputs[num] > sum(lis)/windowSize*allowedIncrease for lis in tmp.get(num)): + return True + b = [sum(i)/windowSize for i in b] + for i in range(len(b)): + if any(b[i] > b[j]*allowedIncrease for j in range(i)): + return True + return False +print(alert(inputs,3,1.5)) +``` From b5e06ca884e55f81ef337c999660b178d9a8de02 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 00:35:45 -0500 Subject: [PATCH 0448/2496] Update paipaidai.md --- .../paipaidai.md" | 125 +++++++++++++----- 1 file changed, 91 insertions(+), 34 deletions(-) diff --git "a/docs/interview/\346\213\215\346\213\215\350\264\267/paipaidai.md" "b/docs/interview/\346\213\215\346\213\215\350\264\267/paipaidai.md" index 1ca2679b3..03b55ddab 100644 --- "a/docs/interview/\346\213\215\346\213\215\350\264\267/paipaidai.md" +++ "b/docs/interview/\346\213\215\346\213\215\350\264\267/paipaidai.md" @@ -1,34 +1,91 @@ -如图,![](https://github.com/Lisanaaa/thinking_in_lc/blob/master/interview%20question/WePay/WePay.jpg) - -就是一个slide windows 的题目 - -```python -inputs = [5,1,2,100,2,2] -def alert(inputs, windowSize, allowedIncrease): - b = [] - tmp = {} - for i in range(len(inputs) - windowSize): - for j in range(i, i+windowSize+1): - if j in tmp.keys(): - if j > len(inputs) - windowSize-1: - tmp.get(j).append(inputs[i+1:i + windowSize+1]) - else: - tmp.get(j).append(inputs[i:i+windowSize]) - else: - print(j,j, i, i+ windowSize) - if j > len(inputs) - windowSize -1: - tmp[j] = [inputs[i+1:i + windowSize+1]] - else: - tmp[j] = [inputs[i:i+windowSize]] - b = [inputs[i:i+windowSize] for i in range(len(inputs)-windowSize)] - print(tmp) - for num in tmp.keys(): - if all(inputs[num] > sum(lis)/windowSize*allowedIncrease for lis in tmp.get(num)): - return True - b = [sum(i)/windowSize for i in b] - for i in range(len(b)): - if any(b[i] > b[j]*allowedIncrease for j in range(i)): - return True - return False -print(alert(inputs,3,1.5)) -``` +# 一轮(一个很nice的QA小姐姐) +## 1. 介绍自己及相关项目 + +## 2. 一道简单算法热身,2个排好序的数组,如何取出它们中相同的元素 +答:O(N),就是两个数组同时从```index = 0```开始比较,小的往前进一步,如果相同就加入到```res```中,这样```n```步肯定可以走完。所以是```O(N)``` + +## 3. 类是怎么加载的 +答:五大步骤:加载、验证、准备、解析、初始化,其中解析根据是静态绑定还是动态绑定, 略... +详见[类加载机制](https://blog.csdn.net/ns_code/article/details/17881581),当时在这里看到的,就记了一下 + +## 4. GC 的原理 +答:没引用的对象就是可以回收的了,不定时选择回收与否, 略... + +## 5. 栈和堆内存的区别 +答:略... + +## 6. 永生代是什么,为啥要有这个 +答:略... + +## 7. Spring如何实现AOP和IOC +答:略... + +## 8. 平常开发管理代码用什么方法,Git clone 还是 Git branch,解释一下它们的区别 +答:平常用Git branch,就是按照功能,bug修复开分支,不断merge, 略... + +## 9. 解释RESTful的好处 +答:根据方法不同判断api的功能,非常方便,略... + +## 10. 遇到的困难和如何解决的 +答:略... + +## 11. 你有什么问题要问我的 +答:内心。。没啥要问的哈哈哈😂,略... + + +# 第二轮(一个很严谨的后端开发小哥哥) +## 1. 45分钟做了一套java试题(20单选,2编程,2问答) +反馈:说我做得还可以 + +## 1. 介绍自己及相关项目 + +## 2. 简单解释下面向对象的基本概念:继承、封装和多态 +答: +- 继承就是说现在有一个类A,我们如果想要有更多的有着相同功能的类,那么只要继承最开始的这个类A,我们就可以拥有跟类A一样的功能,根据自己条件的不同还可以对A的方法进行重写或者重载 +- 封装使得内部功能和外部隔离开来,一来安全,二来可以更加具有模块化 +- 多态就是说,类似于Father f = new Son();这种,这种可以用于任何时候我们想应用更加specific功能的时候,此时多态就产生效果了。嗯,多态其实就是基于同一个接口,使用不同的实例就可以使用不同的功能 + +## 3. Java应用程序有没有可能内存泄露?具体场景。如果有一个Java应用程序在生产上发现有内存泄漏问题,作为开发人员你打算如何对其进行问题定位?现在就有这么一个程序,代码也给到你,你怎么弄?流程思路? +答:第一印象是使用测试工具,先进行模块化检测,我一般手动,注释掉一部分然后检查,采用二分法,一般可以定位到,然后仔细检查下代码逻辑,看看会不会有长期不用的对象仍然被引用着。我觉得工业上肯定会有很多高级工具可以检查内存,但是目前我还没有使用过 + +## 4. 简单讲讲哈希表的数据结构和算法(get/put操作)。 +答:略...小学生题目不会估计就GG了 + +## 5. 如果有一个100G的大文件(假定文件里头都是一行行的字符串记录、每个记录约100个字符),要求对这个文件进行排序,请给出你的排序算法。 +答:过程讨论持续15分钟,先后给出3种方法不断优化。 +- 我们可以先遍历所有行,根据每行的前3个字符作为键放到一个hash结构中,这样问题已经可以用O(N^2*lgn)解决了。被否决,有可能前三个字符都是一样的,需要对整个字符串进行排序 +- 或者我们可以先搞一个Trie树,然后遍历一遍全部存好,每一最后字符再多存一个数字表示这一字符串出现次数,然后对这个Trie树进行层次遍历,依次append,返回。回复说文件有100G大小,假设你手头电脑只有8g内存。嗯嗯,我可能会采用先把所有的文件分开很多份分别处理,关键在于最后怎么合并起来还是有序的 +- 其实就是外部排序,先将这个大文件分成很多份,把这些子文件依次读入内存,并利用自定义的有效的内部排序方法(也就是我的方法吧)对它们进行排序,再将排序后得到的有序子文件重新写入外存;可以使用多路归并排序。 + +## 6. 谈谈你对软件研发生命周期过程的理解,如何确保软件的质量。 +答:生命周期主要有问题定义,可行性分析,系统架构设计,编码实现,测试,验收,最后维护。至于确保软件的质量,就是要选用好的,合适的软件生命周期模型。 +大概模型有瀑布模型,螺旋模型,快速原型模型。 +- 需求明确,使用瀑布模型; +- 需求很不明确,快速原型模型; +- 项目不确定性太多使用螺旋模型 + +## 7. 你是如何管理自己的时间的?举一个你设定并达成目标的例子。 +答:略... + +## 8. 你如何理解领导力?举一个由你主动牵头推进的事情。 +答:略... + +## 9. 谈谈你的强项和弱项,基于对自己的认识,你打算如何规划你的职业道路? +答:略... + +## 10. 你有什么问题要问我的 +答:这次我准备了,哈哈哈哈😂,不告诉你们,略... + + +总结: +1. 两点最重要:1)开放学习成长的心态,2)积极主动 +2. 后端开发的话,一开始协助做好单元和性能测试,做样例sample,先学习,证明有足够能力后,开始自己独立设计和开发小型模块。最重要的内容是打好基本功,写好像模像样的单元测试,养成良好的工程习惯。 + + + + + + + + + From f0348679f5a60984ec2dd7f9e2cc10561e1e6cc4 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 00:37:04 -0500 Subject: [PATCH 0449/2496] Update paipaidai.md --- .../paipaidai.md" | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git "a/docs/interview/\346\213\215\346\213\215\350\264\267/paipaidai.md" "b/docs/interview/\346\213\215\346\213\215\350\264\267/paipaidai.md" index 03b55ddab..6c0b2babb 100644 --- "a/docs/interview/\346\213\215\346\213\215\350\264\267/paipaidai.md" +++ "b/docs/interview/\346\213\215\346\213\215\350\264\267/paipaidai.md" @@ -1,83 +1,83 @@ # 一轮(一个很nice的QA小姐姐) -## 1. 介绍自己及相关项目 +### 1. 介绍自己及相关项目 -## 2. 一道简单算法热身,2个排好序的数组,如何取出它们中相同的元素 +### 2. 一道简单算法热身,2个排好序的数组,如何取出它们中相同的元素 答:O(N),就是两个数组同时从```index = 0```开始比较,小的往前进一步,如果相同就加入到```res```中,这样```n```步肯定可以走完。所以是```O(N)``` -## 3. 类是怎么加载的 +### 3. 类是怎么加载的 答:五大步骤:加载、验证、准备、解析、初始化,其中解析根据是静态绑定还是动态绑定, 略... 详见[类加载机制](https://blog.csdn.net/ns_code/article/details/17881581),当时在这里看到的,就记了一下 -## 4. GC 的原理 +### 4. GC 的原理 答:没引用的对象就是可以回收的了,不定时选择回收与否, 略... -## 5. 栈和堆内存的区别 +### 5. 栈和堆内存的区别 答:略... -## 6. 永生代是什么,为啥要有这个 +### 6. 永生代是什么,为啥要有这个 答:略... -## 7. Spring如何实现AOP和IOC +### 7. Spring如何实现AOP和IOC 答:略... -## 8. 平常开发管理代码用什么方法,Git clone 还是 Git branch,解释一下它们的区别 +### 8. 平常开发管理代码用什么方法,Git clone 还是 Git branch,解释一下它们的区别 答:平常用Git branch,就是按照功能,bug修复开分支,不断merge, 略... -## 9. 解释RESTful的好处 +### 9. 解释RESTful的好处 答:根据方法不同判断api的功能,非常方便,略... -## 10. 遇到的困难和如何解决的 +### 10. 遇到的困难和如何解决的 答:略... -## 11. 你有什么问题要问我的 +### 11. 你有什么问题要问我的 答:内心。。没啥要问的哈哈哈😂,略... # 第二轮(一个很严谨的后端开发小哥哥) -## 1. 45分钟做了一套java试题(20单选,2编程,2问答) +### 1. 45分钟做了一套java试题(20单选,2编程,2问答) 反馈:说我做得还可以 -## 1. 介绍自己及相关项目 +### 1. 介绍自己及相关项目 -## 2. 简单解释下面向对象的基本概念:继承、封装和多态 +### 2. 简单解释下面向对象的基本概念:继承、封装和多态 答: - 继承就是说现在有一个类A,我们如果想要有更多的有着相同功能的类,那么只要继承最开始的这个类A,我们就可以拥有跟类A一样的功能,根据自己条件的不同还可以对A的方法进行重写或者重载 - 封装使得内部功能和外部隔离开来,一来安全,二来可以更加具有模块化 - 多态就是说,类似于Father f = new Son();这种,这种可以用于任何时候我们想应用更加specific功能的时候,此时多态就产生效果了。嗯,多态其实就是基于同一个接口,使用不同的实例就可以使用不同的功能 -## 3. Java应用程序有没有可能内存泄露?具体场景。如果有一个Java应用程序在生产上发现有内存泄漏问题,作为开发人员你打算如何对其进行问题定位?现在就有这么一个程序,代码也给到你,你怎么弄?流程思路? +### 3. Java应用程序有没有可能内存泄露?具体场景。如果有一个Java应用程序在生产上发现有内存泄漏问题,作为开发人员你打算如何对其进行问题定位?现在就有这么一个程序,代码也给到你,你怎么弄?流程思路? 答:第一印象是使用测试工具,先进行模块化检测,我一般手动,注释掉一部分然后检查,采用二分法,一般可以定位到,然后仔细检查下代码逻辑,看看会不会有长期不用的对象仍然被引用着。我觉得工业上肯定会有很多高级工具可以检查内存,但是目前我还没有使用过 -## 4. 简单讲讲哈希表的数据结构和算法(get/put操作)。 +### 4. 简单讲讲哈希表的数据结构和算法(get/put操作)。 答:略...小学生题目不会估计就GG了 -## 5. 如果有一个100G的大文件(假定文件里头都是一行行的字符串记录、每个记录约100个字符),要求对这个文件进行排序,请给出你的排序算法。 +### 5. 如果有一个100G的大文件(假定文件里头都是一行行的字符串记录、每个记录约100个字符),要求对这个文件进行排序,请给出你的排序算法。 答:过程讨论持续15分钟,先后给出3种方法不断优化。 - 我们可以先遍历所有行,根据每行的前3个字符作为键放到一个hash结构中,这样问题已经可以用O(N^2*lgn)解决了。被否决,有可能前三个字符都是一样的,需要对整个字符串进行排序 - 或者我们可以先搞一个Trie树,然后遍历一遍全部存好,每一最后字符再多存一个数字表示这一字符串出现次数,然后对这个Trie树进行层次遍历,依次append,返回。回复说文件有100G大小,假设你手头电脑只有8g内存。嗯嗯,我可能会采用先把所有的文件分开很多份分别处理,关键在于最后怎么合并起来还是有序的 - 其实就是外部排序,先将这个大文件分成很多份,把这些子文件依次读入内存,并利用自定义的有效的内部排序方法(也就是我的方法吧)对它们进行排序,再将排序后得到的有序子文件重新写入外存;可以使用多路归并排序。 -## 6. 谈谈你对软件研发生命周期过程的理解,如何确保软件的质量。 +### 6. 谈谈你对软件研发生命周期过程的理解,如何确保软件的质量。 答:生命周期主要有问题定义,可行性分析,系统架构设计,编码实现,测试,验收,最后维护。至于确保软件的质量,就是要选用好的,合适的软件生命周期模型。 大概模型有瀑布模型,螺旋模型,快速原型模型。 - 需求明确,使用瀑布模型; - 需求很不明确,快速原型模型; - 项目不确定性太多使用螺旋模型 -## 7. 你是如何管理自己的时间的?举一个你设定并达成目标的例子。 +### 7. 你是如何管理自己的时间的?举一个你设定并达成目标的例子。 答:略... -## 8. 你如何理解领导力?举一个由你主动牵头推进的事情。 +### 8. 你如何理解领导力?举一个由你主动牵头推进的事情。 答:略... -## 9. 谈谈你的强项和弱项,基于对自己的认识,你打算如何规划你的职业道路? +### 9. 谈谈你的强项和弱项,基于对自己的认识,你打算如何规划你的职业道路? 答:略... -## 10. 你有什么问题要问我的 +### 10. 你有什么问题要问我的 答:这次我准备了,哈哈哈哈😂,不告诉你们,略... -总结: +# 总结: 1. 两点最重要:1)开放学习成长的心态,2)积极主动 2. 后端开发的话,一开始协助做好单元和性能测试,做样例sample,先学习,证明有足够能力后,开始自己独立设计和开发小型模块。最重要的内容是打好基本功,写好像模像样的单元测试,养成良好的工程习惯。 From 0abf01453130936dfe61a664629b134003fabdc0 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 00:37:23 -0500 Subject: [PATCH 0450/2496] Update paipaidai.md --- .../\346\213\215\346\213\215\350\264\267/paipaidai.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/docs/interview/\346\213\215\346\213\215\350\264\267/paipaidai.md" "b/docs/interview/\346\213\215\346\213\215\350\264\267/paipaidai.md" index 6c0b2babb..74b73713d 100644 --- "a/docs/interview/\346\213\215\346\213\215\350\264\267/paipaidai.md" +++ "b/docs/interview/\346\213\215\346\213\215\350\264\267/paipaidai.md" @@ -1,4 +1,4 @@ -# 一轮(一个很nice的QA小姐姐) +# 第一轮(一个很nice的QA小姐姐) ### 1. 介绍自己及相关项目 ### 2. 一道简单算法热身,2个排好序的数组,如何取出它们中相同的元素 From aceb68be85ff276eb3ad23d8a74edd00ef2a41e6 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 13:16:16 -0500 Subject: [PATCH 0451/2496] Reconstructuring the whole repository, expanding the scope from Leetcode to Algorithms --- .../Algorithm Templates/Sort}/BubbleSort.py | 0 .../Algorithm Templates/Sort}/InsertSort.py | 0 .../Algorithm Templates/Sort}/MergeSort.py | 0 .../Algorithm Templates/Sort}/QuickSort.py | 0 .../Sort}/SelectionSort.py | 0 .../Algorithm Templates/Sort}/ShellSort.py | 0 docs/{ => Leetcode Solutions}/001._two_sum.md | 0 .../002._add_two_numbers.md | 0 ..._substring_without_repeating_characters.md | 0 .../004._median_of_two_sorted_arrays.md | 0 .../005._longest_palindromic_substring.md | 0 .../006._ZigZag_Conversion.md | 0 .../007._Reverse_Integer.md | 0 .../008._string_to_integer_(atoi).md | 0 .../009._Palindrome_Number.md | 0 .../010._regular_expression_matching.md | 0 .../011._container_with_most_water.md | 0 .../012._Integer_to_Roman.md | 0 .../013._Roman_to_Integer.md | 0 .../014._longest_common_prefix.md | 0 docs/{ => Leetcode Solutions}/015._3sum.md | 0 .../016._3sum_closest.md | 0 ...._letter_combinations_of_a_phone_number.md | 0 docs/{ => Leetcode Solutions}/018._4sum.md | 0 .../019._remove_nth_node_from_end_of_list.md | 0 .../020._valid_parentheses.md | 0 .../021._merge_two_sorted_lists.md | 0 .../022._generate_parentheses.md | 0 .../023._merge_k_sorted_lists.md | 0 .../024._swap_nodes_in_pairs.md | 0 ...26._Remove_Duplicates_from_Sorted_Array.md | 0 .../027._Remove_Element.md | 0 .../028._implement_strstr().md | 0 ...bstring_with_Concatenation_of_All_Words.md | 0 .../031._next_permutation.md | 0 .../033._search_in_rotated_sorted_array.md | 0 .../034._Search for a Range.md | 0 .../035._search_insert_position.md | 0 .../038._Count_and_Say.md | 0 .../039._combination_sum.md | 0 .../040._combination_sum_ii.md | 0 .../042._trapping_rain_water.md | 0 .../043._multiply_strings.md | 0 .../044._wildcard_matching.md | 0 .../045._Jump_Game_II.md | 0 .../046._permutations.md | 0 .../047._permutations_ii.md | 0 .../048._rotate_image.md | 0 .../049._group_anagrams_python.md | 0 .../050._pow(x,_n).md | 0 .../{ => Leetcode Solutions}/051._n-queens.md | 0 .../052._n-queens_ii.md | 0 .../053._maximum_subarray.md | 0 .../054._spiral_matrix.md | 0 .../055._jump_game.md | 0 .../056._Merge_Intervals.md | 0 .../058._length_of_last_word.md | 0 .../059._spiral_matrix_ii.md | 0 .../060._permutation_sequence.md | 0 .../061._rotate_list.md | 0 .../064._minimum_path_sum.md | 0 .../065.unique_paths_ii.md | 0 .../{ => Leetcode Solutions}/066._plus_one.md | 0 .../067._add_binary.md | 0 docs/{ => Leetcode Solutions}/069._sqrt(x).md | 0 .../070. Climbing Stairs.md | 0 .../072._edit_distance.md | 0 .../073. Set Matrix Zeroes.md | 0 .../074._search_a_2d_matrix.md | 0 .../075._sort_colors.md | 0 .../076._Minimum_Window_Substring.md | 0 .../077._combinations.md | 0 docs/{ => Leetcode Solutions}/078.Subsets .md | 0 .../079._word_search.md | 0 ...._remove_duplicates_from_sorted_list_ii.md | 0 ...083._remove_duplicates_from_sorted_list.md | 0 .../086._partition_list.md | 0 .../088._merge_sorted_array.md | 0 .../089._gray_code.md | 0 .../090._subsets_ii.md | 0 .../091._decode_ways.md | 0 .../092._reverse_linked_list_ii.md | 0 .../093._restore_ip_addresses.md | 0 .../094._binary_tree_inorder_traversal.md | 0 .../096._unique_binary_search_trees.md | 0 .../098._validate_binary_search_tree.md | 0 .../100._same_tree.md | 0 .../101._symmetric_tree.md | 0 .../102._binary_tree_level_order_traversal.md | 0 ...inary_tree_zigzag_level_order_traversal.md | 0 .../104._maximum_depth_of_binary_tree.md | 0 ...ree_from_preorder_and_inorder_traversal.md | 0 ...ee_from_inorder_and_postorder_traversal.md | 0 ...7._binary_tree_level_order_traversal_ii.md | 0 ...vert_sorted_array_to_binary_search_tree.md | 0 ...nvert_sorted_list_to_binary_search_tree.md | 0 .../110._balanced_binary_tree.md | 0 .../111._minimum_depth_of_binary_tree.md | 0 .../{ => Leetcode Solutions}/112._path_sum.md | 0 .../113._path_sum_ii.md | 0 ...114._flatten_binary_tree_to_linked_list.md | 0 ...lating_next_right_pointers_in_each_node.md | 0 .../118._pascal's_triangle.md | 0 .../119. Pascal's Triangle II.md | 0 .../{ => Leetcode Solutions}/120. Triangle.md | 0 .../121._Best_Time_to_Buy_and_Sell_Stock.md | 0 .../125._valid_palindrome.md | 0 .../126. Word Ladder II.md | 0 .../127._word_ladder.md | 0 .../128._Longest_Consecutive_Sequence.md | 0 .../129._sum_root_to_leaf_numbers.md | 0 .../130._surrounded_regions.md | 0 .../131._palindrome_partitioning.md | 0 .../133._clone_graph.md | 0 .../136._single_number.md | 0 .../139._word_break.md | 0 .../140._word_break_ii.md | 0 .../141._linked_list_cycle.md | 0 .../142_Linked_List_Cycle_II.md | 0 .../143._reorder_list.md | 0 .../144._binary_tree_preorder_traversal.md | 0 .../145._binary_tree_postorder_traversal.md | 0 .../147._insertion_sort_list.md | 0 .../148._sort_list.md | 0 .../150._evaluate_reverse_polish_notation.md | 0 .../151._reverse_words_in_a_string.md | 0 .../152._maximum_product_subarray.md | 0 ...3._find_minimum_in_rotated_sorted_array.md | 0 .../155._min_stack.md | 0 ...ng_with_At_Most_Two_Distinct_Characters.md | 0 .../160._intersection_of_two_linked_lists.md | 0 .../162._find_peak_element.md | 0 .../165._compare_version_numbers.md | 0 .../166._Fraction_to_Recurring_Decimal.md | 0 ...167._two_sum_ii_-_input_array_is_sorted.md | 0 .../168._excel_sheet_column_title.md | 0 .../169._majority_element.md | 0 .../171._excel_sheet_column_number.md | 0 .../173._binary_search_tree_iterator.md | 0 .../189._rotate_array.md | 0 .../191._number_of_1_bits.md | 0 .../198._house_robber.md | 0 .../199._binary_tree_right_side_view.md | 0 .../200._number_of_islands.md | 0 .../203._remove_linked_list_elements.md | 0 .../204._count_primes.md | 0 .../205._isomorphic_strings.md | 0 .../206._reverse_linked_list.md | 0 .../207._course_schedule.md | 0 .../208._implement_trie_(prefix_tree).md | 0 .../210._course_schedule_ii.md | 0 ...and Search Word - Data structure design.md | 0 .../213._house_robber_ii.md | 0 .../216._combination_sum_iii.md | 0 .../217._contains_duplicate.md | 0 .../218._The _Skyline_Problem .md | 0 .../219._contains_duplicate_ii.md | 0 .../221._maximal_square.md | 0 .../222._count_complete_tree_nodes.md | 0 .../223._rectangle_area.md | 0 .../224. Basic Calculator .md | 0 .../225._implement_stack_using_queues.md | 0 .../226._invert_binary_tree.md | 0 .../227._basic_calculator_ii.md | 0 .../228._summary_ranges.md | 0 .../229._majority_element_ii.md | 0 .../230._kth_smallest_element_in_a_bst.md | 0 .../231. _Power_of_Two.md | 0 .../232._implement_queue_using_stacks.md | 0 .../234._palindrome_linked_list.md | 0 ...common_ancestor_of_a_binary_search_tree.md | 0 ...lowest_common_ancestor_of_a_binary_tree.md | 0 .../237._delete_node_in_a_linked_list.md | 0 .../238._product_of_array_except_self.md | 0 .../240._search_a_2d_matrix_ii.md | 0 .../242._valid_anagram.md | 0 .../252. Meeting Rooms.md | 0 ...Preorder_Sequence_in_Binary_Search_Tree.md | 0 .../256. Paint House.md | 0 .../257._binary_tree_paths.md | 0 .../258_ Add_Digits.md | 0 .../261. Graph Valid Tree.md | 0 .../263._ugly_number.md | 0 .../264._ugly_number_ii.md | 0 .../265. Paint House II.md | 0 .../266. Palindrome Permutation.md | 0 .../267. Palindrome Permutation II.md | 0 .../268._missing_number.md | 0 .../270. Closest Binary Search Tree Value.md | 0 .../276. Paint Fence.md | 0 .../277. Find the Celebrity.md | 0 .../278._First_Bad _Version.md | 0 .../279._perfect_squares.md | 0 .../280._Wiggle_Sort.md | 0 .../283._move_zeroes.md | 0 .../285._inorder_successor_in_bst.md | 0 .../286. Walls and Gates.md | 0 .../289._game_of_life.md | 0 .../290._word_pattern.md | 0 .../{ => Leetcode Solutions}/292._nim_game.md | 0 .../296. Best Meeting Point.md | 0 ...inary Tree Longest Consecutive Sequence.md | 0 .../299._bulls_and_cows.md | 0 .../300._longest_increasing_subsequence.md | 0 .../303._range_sum_query_-_immutable.md | 0 .../316._Remove_Duplicate_Letters.md | 0 .../319._Bulb_Switcher.md | 0 .../322. Coin Change.md | 0 ...ected Components in an Undirected Graph.md | 0 .../324._Wiggle_Sort_II.md | 0 .../326._power_of_three.md | 0 .../328._odd_even_linked_list.md | 0 .../334._increasing_triplet_subsequence.md | 0 .../337._house_robber_iii.md | 0 .../338. Counting Bits.md | 0 .../339. Nested List Weight Sum.md | 0 .../341._Flatten_Nested_List_Iterator.md | 0 .../342._Power_of_Four.md | 0 .../344._reverse_string.md | 0 .../345._Reverse_Vowels_of_a_String.md | 0 .../349._intersection_of_two_arrays.md | 0 .../350._intersection_of_two_arrays_ii.md | 0 .../353. Design Snake Game.md | 0 .../364. Nested List Weight Sum II.md | 0 .../366. Find Leaves of Binary Tree.md | 0 .../367._valid_perfect_square.md | 0 .../369.Plus One Linked List.md | 0 .../371._sum_of_two_integers.md | 0 .../374._Guess_Number_Higher_or_Lower.md | 0 .../377._combination_sum_iv.md | 0 ...kth_smallest_element_in_a_sorted_matrix.md | 0 .../380. Insert Delete GetRandom O(1).md | 0 ...ete GetRandom O(1) - Duplicates allowed.md | 0 .../382._linked_list_random_node.md | 0 .../383._ransom_note.md | 0 .../384. Shuffle an Array.md | 0 ...387._first_unique_character_in_a_string.md | 0 .../388._Longest_Absolute_File_Path.md | 0 .../389._find_the_difference.md | 0 .../392._is_subsequence.md | 0 .../394._decode_string.md | 0 .../400. Nth Digit.md | 0 .../401._binary_watch.md | 0 .../404._sum_of_left_leaves.md | 0 .../405. Convert a Number to Hexadecimal.md | 0 .../406._Queue_Reconstruction_by_Height.md | 0 .../412._fizz_buzz.md | 0 .../413. Arithmetic Slices.md | 0 .../414._third_maximum_number.md | 0 .../415._add_strings.md | 0 .../416. Partition Equal Subset Sum.md | 0 ..._Maximum_XOR_of_Two_Numbers_in_an_Array.md | 0 .../422. Valid Word Square.md | 0 .../434._number_of_segments_in_a_string.md | 0 .../437._path_sum_iii.md | 0 .../438._Find_All_Anagrams_in_a_String.md | 0 .../439. Ternary Expression Parser.md | 0 .../441._arranging_coins.md | 0 ...ind_All_Numbers_Disappeared_in_an_Array.md | 0 .../450. Delete Node in a BST.md | 0 ...._Minimum_Moves_to_Equal_Array_Elements.md | 0 .../459._Repeated_Substring_Pattern.md | 0 .../461._Hamming Distance.md | 0 .../463._Island_Perimeter.md | 0 ..._Unique_Substrings_in_Wraparound_String.md | 0 .../469. Convex Polygon.md | 0 .../476._Number_Complement.md | 0 .../477._Total_Hamming_Distance.md | 0 .../485._Max_Consecutive_Ones.md | 0 .../587._Erect_the_Fence .md | 0 .../599._Minimum_Index_Sum_of_Two_Lists.md | 0 .../647._Palindromic_Substrings.md | 0 .../657._Judge_Route_Circle.md | 0 .../665._Non-decreasing_Array.md | 0 .../672._Bulb_Switcher_II.md | 0 .../681._Next_Closest_Time.md | 0 .../682._Baseball_Game.md | 0 .../687._Longest_Univalue_Path.md | 0 .../740._delete_and_earn.md | 0 .../760._Find_Anagram_Mappings.md | 0 ...h \344\270\215\346\230\223\345\206\231.md" | 0 .../Data Structure and Algorthim Review.md | 0 .../Summarization}/Dynamic Programming.md | 0 ...hing Algorithms \342\200\223 topcoder.pdf" | Bin ...13\347\232\204\350\275\254\346\215\242.md" | 0 .../LinkedList\346\212\200\345\267\247.md" | 0 .../Summarization}/Maximal Square.pdf | Bin ...00\345\267\247\347\254\224\350\256\260.py" | 0 .../Range Sum Query 2D - Immutable.pdf | Bin .../Recusrion & BackTracking.md | 0 .../backtracking\346\200\235\350\267\257.md" | 0 ..._a_linked_list\351\227\256\351\242\230.md" | 0 ...60\347\232\204\346\200\235\350\267\257.md" | 0 ...47\232\204\345\220\204\347\247\215pass.md" | 0 .../Summarization}/slide_windows_template.md | 0 ...\214_graph_search\357\274\214_dfs,_bfs.md" | 0 .../\344\275\215\350\277\220\347\256\227.md" | 0 ...22\345\210\227\347\256\227\346\263\225.md" | 0 .../\345\205\253\346\216\222\345\272\217.md" | 0 ...06\345\220\210\351\227\256\351\242\230.md" | 0 .../\346\200\273\347\273\223.md" | 0 ...04\345\220\210\351\227\256\351\242\230.md" | 0 .../\351\200\222\345\275\222_recursion.md" | 0 src/py3.x/TreeRecursionIterator.py | 34 ++++++++++++++++++ src/py3.x/list2iteration.py | 30 ++++++++++++++++ 305 files changed, 64 insertions(+) rename {src/py2.x/SortingAlgorithm => docs/Algorithm Templates/Sort}/BubbleSort.py (100%) rename {src/py2.x/SortingAlgorithm => docs/Algorithm Templates/Sort}/InsertSort.py (100%) rename {src/py2.x/SortingAlgorithm => docs/Algorithm Templates/Sort}/MergeSort.py (100%) rename {src/py2.x/SortingAlgorithm => docs/Algorithm Templates/Sort}/QuickSort.py (100%) rename {src/py2.x/SortingAlgorithm => docs/Algorithm Templates/Sort}/SelectionSort.py (100%) rename {src/py2.x/SortingAlgorithm => docs/Algorithm Templates/Sort}/ShellSort.py (100%) rename docs/{ => Leetcode Solutions}/001._two_sum.md (100%) rename docs/{ => Leetcode Solutions}/002._add_two_numbers.md (100%) rename docs/{ => Leetcode Solutions}/003._longest_substring_without_repeating_characters.md (100%) rename docs/{ => Leetcode Solutions}/004._median_of_two_sorted_arrays.md (100%) rename docs/{ => Leetcode Solutions}/005._longest_palindromic_substring.md (100%) rename docs/{ => Leetcode Solutions}/006._ZigZag_Conversion.md (100%) rename docs/{ => Leetcode Solutions}/007._Reverse_Integer.md (100%) rename docs/{ => Leetcode Solutions}/008._string_to_integer_(atoi).md (100%) rename docs/{ => Leetcode Solutions}/009._Palindrome_Number.md (100%) rename docs/{ => Leetcode Solutions}/010._regular_expression_matching.md (100%) rename docs/{ => Leetcode Solutions}/011._container_with_most_water.md (100%) rename docs/{ => Leetcode Solutions}/012._Integer_to_Roman.md (100%) rename docs/{ => Leetcode Solutions}/013._Roman_to_Integer.md (100%) rename docs/{ => Leetcode Solutions}/014._longest_common_prefix.md (100%) rename docs/{ => Leetcode Solutions}/015._3sum.md (100%) rename docs/{ => Leetcode Solutions}/016._3sum_closest.md (100%) rename docs/{ => Leetcode Solutions}/017._letter_combinations_of_a_phone_number.md (100%) rename docs/{ => Leetcode Solutions}/018._4sum.md (100%) rename docs/{ => Leetcode Solutions}/019._remove_nth_node_from_end_of_list.md (100%) rename docs/{ => Leetcode Solutions}/020._valid_parentheses.md (100%) rename docs/{ => Leetcode Solutions}/021._merge_two_sorted_lists.md (100%) rename docs/{ => Leetcode Solutions}/022._generate_parentheses.md (100%) rename docs/{ => Leetcode Solutions}/023._merge_k_sorted_lists.md (100%) rename docs/{ => Leetcode Solutions}/024._swap_nodes_in_pairs.md (100%) rename docs/{ => Leetcode Solutions}/026._Remove_Duplicates_from_Sorted_Array.md (100%) rename docs/{ => Leetcode Solutions}/027._Remove_Element.md (100%) rename docs/{ => Leetcode Solutions}/028._implement_strstr().md (100%) rename docs/{ => Leetcode Solutions}/030._Substring_with_Concatenation_of_All_Words.md (100%) rename docs/{ => Leetcode Solutions}/031._next_permutation.md (100%) rename docs/{ => Leetcode Solutions}/033._search_in_rotated_sorted_array.md (100%) rename docs/{ => Leetcode Solutions}/034._Search for a Range.md (100%) rename docs/{ => Leetcode Solutions}/035._search_insert_position.md (100%) rename docs/{ => Leetcode Solutions}/038._Count_and_Say.md (100%) rename docs/{ => Leetcode Solutions}/039._combination_sum.md (100%) rename docs/{ => Leetcode Solutions}/040._combination_sum_ii.md (100%) rename docs/{ => Leetcode Solutions}/042._trapping_rain_water.md (100%) rename docs/{ => Leetcode Solutions}/043._multiply_strings.md (100%) rename docs/{ => Leetcode Solutions}/044._wildcard_matching.md (100%) rename docs/{ => Leetcode Solutions}/045._Jump_Game_II.md (100%) rename docs/{ => Leetcode Solutions}/046._permutations.md (100%) rename docs/{ => Leetcode Solutions}/047._permutations_ii.md (100%) rename docs/{ => Leetcode Solutions}/048._rotate_image.md (100%) rename docs/{ => Leetcode Solutions}/049._group_anagrams_python.md (100%) rename docs/{ => Leetcode Solutions}/050._pow(x,_n).md (100%) rename docs/{ => Leetcode Solutions}/051._n-queens.md (100%) rename docs/{ => Leetcode Solutions}/052._n-queens_ii.md (100%) rename docs/{ => Leetcode Solutions}/053._maximum_subarray.md (100%) rename docs/{ => Leetcode Solutions}/054._spiral_matrix.md (100%) rename docs/{ => Leetcode Solutions}/055._jump_game.md (100%) rename docs/{ => Leetcode Solutions}/056._Merge_Intervals.md (100%) rename docs/{ => Leetcode Solutions}/058._length_of_last_word.md (100%) rename docs/{ => Leetcode Solutions}/059._spiral_matrix_ii.md (100%) rename docs/{ => Leetcode Solutions}/060._permutation_sequence.md (100%) rename docs/{ => Leetcode Solutions}/061._rotate_list.md (100%) rename docs/{ => Leetcode Solutions}/064._minimum_path_sum.md (100%) rename docs/{ => Leetcode Solutions}/065.unique_paths_ii.md (100%) rename docs/{ => Leetcode Solutions}/066._plus_one.md (100%) rename docs/{ => Leetcode Solutions}/067._add_binary.md (100%) rename docs/{ => Leetcode Solutions}/069._sqrt(x).md (100%) rename docs/{ => Leetcode Solutions}/070. Climbing Stairs.md (100%) rename docs/{ => Leetcode Solutions}/072._edit_distance.md (100%) rename docs/{ => Leetcode Solutions}/073. Set Matrix Zeroes.md (100%) rename docs/{ => Leetcode Solutions}/074._search_a_2d_matrix.md (100%) rename docs/{ => Leetcode Solutions}/075._sort_colors.md (100%) rename docs/{ => Leetcode Solutions}/076._Minimum_Window_Substring.md (100%) rename docs/{ => Leetcode Solutions}/077._combinations.md (100%) rename docs/{ => Leetcode Solutions}/078.Subsets .md (100%) rename docs/{ => Leetcode Solutions}/079._word_search.md (100%) rename docs/{ => Leetcode Solutions}/082._remove_duplicates_from_sorted_list_ii.md (100%) rename docs/{ => Leetcode Solutions}/083._remove_duplicates_from_sorted_list.md (100%) rename docs/{ => Leetcode Solutions}/086._partition_list.md (100%) rename docs/{ => Leetcode Solutions}/088._merge_sorted_array.md (100%) rename docs/{ => Leetcode Solutions}/089._gray_code.md (100%) rename docs/{ => Leetcode Solutions}/090._subsets_ii.md (100%) rename docs/{ => Leetcode Solutions}/091._decode_ways.md (100%) rename docs/{ => Leetcode Solutions}/092._reverse_linked_list_ii.md (100%) rename docs/{ => Leetcode Solutions}/093._restore_ip_addresses.md (100%) rename docs/{ => Leetcode Solutions}/094._binary_tree_inorder_traversal.md (100%) rename docs/{ => Leetcode Solutions}/096._unique_binary_search_trees.md (100%) rename docs/{ => Leetcode Solutions}/098._validate_binary_search_tree.md (100%) rename docs/{ => Leetcode Solutions}/100._same_tree.md (100%) rename docs/{ => Leetcode Solutions}/101._symmetric_tree.md (100%) rename docs/{ => Leetcode Solutions}/102._binary_tree_level_order_traversal.md (100%) rename docs/{ => Leetcode Solutions}/103._binary_tree_zigzag_level_order_traversal.md (100%) rename docs/{ => Leetcode Solutions}/104._maximum_depth_of_binary_tree.md (100%) rename docs/{ => Leetcode Solutions}/105._construct_binary_tree_from_preorder_and_inorder_traversal.md (100%) rename docs/{ => Leetcode Solutions}/106._construct_binary_tree_from_inorder_and_postorder_traversal.md (100%) rename docs/{ => Leetcode Solutions}/107._binary_tree_level_order_traversal_ii.md (100%) rename docs/{ => Leetcode Solutions}/108._convert_sorted_array_to_binary_search_tree.md (100%) rename docs/{ => Leetcode Solutions}/109._convert_sorted_list_to_binary_search_tree.md (100%) rename docs/{ => Leetcode Solutions}/110._balanced_binary_tree.md (100%) rename docs/{ => Leetcode Solutions}/111._minimum_depth_of_binary_tree.md (100%) rename docs/{ => Leetcode Solutions}/112._path_sum.md (100%) rename docs/{ => Leetcode Solutions}/113._path_sum_ii.md (100%) rename docs/{ => Leetcode Solutions}/114._flatten_binary_tree_to_linked_list.md (100%) rename docs/{ => Leetcode Solutions}/116._populating_next_right_pointers_in_each_node.md (100%) rename docs/{ => Leetcode Solutions}/118._pascal's_triangle.md (100%) rename docs/{ => Leetcode Solutions}/119. Pascal's Triangle II.md (100%) rename docs/{ => Leetcode Solutions}/120. Triangle.md (100%) rename docs/{ => Leetcode Solutions}/121._Best_Time_to_Buy_and_Sell_Stock.md (100%) rename docs/{ => Leetcode Solutions}/125._valid_palindrome.md (100%) rename docs/{ => Leetcode Solutions}/126. Word Ladder II.md (100%) rename docs/{ => Leetcode Solutions}/127._word_ladder.md (100%) rename docs/{ => Leetcode Solutions}/128._Longest_Consecutive_Sequence.md (100%) rename docs/{ => Leetcode Solutions}/129._sum_root_to_leaf_numbers.md (100%) rename docs/{ => Leetcode Solutions}/130._surrounded_regions.md (100%) rename docs/{ => Leetcode Solutions}/131._palindrome_partitioning.md (100%) rename docs/{ => Leetcode Solutions}/133._clone_graph.md (100%) rename docs/{ => Leetcode Solutions}/136._single_number.md (100%) rename docs/{ => Leetcode Solutions}/139._word_break.md (100%) rename docs/{ => Leetcode Solutions}/140._word_break_ii.md (100%) rename docs/{ => Leetcode Solutions}/141._linked_list_cycle.md (100%) rename docs/{ => Leetcode Solutions}/142_Linked_List_Cycle_II.md (100%) rename docs/{ => Leetcode Solutions}/143._reorder_list.md (100%) rename docs/{ => Leetcode Solutions}/144._binary_tree_preorder_traversal.md (100%) rename docs/{ => Leetcode Solutions}/145._binary_tree_postorder_traversal.md (100%) rename docs/{ => Leetcode Solutions}/147._insertion_sort_list.md (100%) rename docs/{ => Leetcode Solutions}/148._sort_list.md (100%) rename docs/{ => Leetcode Solutions}/150._evaluate_reverse_polish_notation.md (100%) rename docs/{ => Leetcode Solutions}/151._reverse_words_in_a_string.md (100%) rename docs/{ => Leetcode Solutions}/152._maximum_product_subarray.md (100%) rename docs/{ => Leetcode Solutions}/153._find_minimum_in_rotated_sorted_array.md (100%) rename docs/{ => Leetcode Solutions}/155._min_stack.md (100%) rename docs/{ => Leetcode Solutions}/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md (100%) rename docs/{ => Leetcode Solutions}/160._intersection_of_two_linked_lists.md (100%) rename docs/{ => Leetcode Solutions}/162._find_peak_element.md (100%) rename docs/{ => Leetcode Solutions}/165._compare_version_numbers.md (100%) rename docs/{ => Leetcode Solutions}/166._Fraction_to_Recurring_Decimal.md (100%) rename docs/{ => Leetcode Solutions}/167._two_sum_ii_-_input_array_is_sorted.md (100%) rename docs/{ => Leetcode Solutions}/168._excel_sheet_column_title.md (100%) rename docs/{ => Leetcode Solutions}/169._majority_element.md (100%) rename docs/{ => Leetcode Solutions}/171._excel_sheet_column_number.md (100%) rename docs/{ => Leetcode Solutions}/173._binary_search_tree_iterator.md (100%) rename docs/{ => Leetcode Solutions}/189._rotate_array.md (100%) rename docs/{ => Leetcode Solutions}/191._number_of_1_bits.md (100%) rename docs/{ => Leetcode Solutions}/198._house_robber.md (100%) rename docs/{ => Leetcode Solutions}/199._binary_tree_right_side_view.md (100%) rename docs/{ => Leetcode Solutions}/200._number_of_islands.md (100%) rename docs/{ => Leetcode Solutions}/203._remove_linked_list_elements.md (100%) rename docs/{ => Leetcode Solutions}/204._count_primes.md (100%) rename docs/{ => Leetcode Solutions}/205._isomorphic_strings.md (100%) rename docs/{ => Leetcode Solutions}/206._reverse_linked_list.md (100%) rename docs/{ => Leetcode Solutions}/207._course_schedule.md (100%) rename docs/{ => Leetcode Solutions}/208._implement_trie_(prefix_tree).md (100%) rename docs/{ => Leetcode Solutions}/210._course_schedule_ii.md (100%) rename docs/{ => Leetcode Solutions}/211. Add and Search Word - Data structure design.md (100%) rename docs/{ => Leetcode Solutions}/213._house_robber_ii.md (100%) rename docs/{ => Leetcode Solutions}/216._combination_sum_iii.md (100%) rename docs/{ => Leetcode Solutions}/217._contains_duplicate.md (100%) rename docs/{ => Leetcode Solutions}/218._The _Skyline_Problem .md (100%) rename docs/{ => Leetcode Solutions}/219._contains_duplicate_ii.md (100%) rename docs/{ => Leetcode Solutions}/221._maximal_square.md (100%) rename docs/{ => Leetcode Solutions}/222._count_complete_tree_nodes.md (100%) rename docs/{ => Leetcode Solutions}/223._rectangle_area.md (100%) rename docs/{ => Leetcode Solutions}/224. Basic Calculator .md (100%) rename docs/{ => Leetcode Solutions}/225._implement_stack_using_queues.md (100%) rename docs/{ => Leetcode Solutions}/226._invert_binary_tree.md (100%) rename docs/{ => Leetcode Solutions}/227._basic_calculator_ii.md (100%) rename docs/{ => Leetcode Solutions}/228._summary_ranges.md (100%) rename docs/{ => Leetcode Solutions}/229._majority_element_ii.md (100%) rename docs/{ => Leetcode Solutions}/230._kth_smallest_element_in_a_bst.md (100%) rename docs/{ => Leetcode Solutions}/231. _Power_of_Two.md (100%) rename docs/{ => Leetcode Solutions}/232._implement_queue_using_stacks.md (100%) rename docs/{ => Leetcode Solutions}/234._palindrome_linked_list.md (100%) rename docs/{ => Leetcode Solutions}/235._lowest_common_ancestor_of_a_binary_search_tree.md (100%) rename docs/{ => Leetcode Solutions}/236._lowest_common_ancestor_of_a_binary_tree.md (100%) rename docs/{ => Leetcode Solutions}/237._delete_node_in_a_linked_list.md (100%) rename docs/{ => Leetcode Solutions}/238._product_of_array_except_self.md (100%) rename docs/{ => Leetcode Solutions}/240._search_a_2d_matrix_ii.md (100%) rename docs/{ => Leetcode Solutions}/242._valid_anagram.md (100%) rename docs/{ => Leetcode Solutions}/252. Meeting Rooms.md (100%) rename docs/{ => Leetcode Solutions}/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md (100%) rename docs/{ => Leetcode Solutions}/256. Paint House.md (100%) rename docs/{ => Leetcode Solutions}/257._binary_tree_paths.md (100%) rename docs/{ => Leetcode Solutions}/258_ Add_Digits.md (100%) rename docs/{ => Leetcode Solutions}/261. Graph Valid Tree.md (100%) rename docs/{ => Leetcode Solutions}/263._ugly_number.md (100%) rename docs/{ => Leetcode Solutions}/264._ugly_number_ii.md (100%) rename docs/{ => Leetcode Solutions}/265. Paint House II.md (100%) rename docs/{ => Leetcode Solutions}/266. Palindrome Permutation.md (100%) rename docs/{ => Leetcode Solutions}/267. Palindrome Permutation II.md (100%) rename docs/{ => Leetcode Solutions}/268._missing_number.md (100%) rename docs/{ => Leetcode Solutions}/270. Closest Binary Search Tree Value.md (100%) rename docs/{ => Leetcode Solutions}/276. Paint Fence.md (100%) rename docs/{ => Leetcode Solutions}/277. Find the Celebrity.md (100%) rename docs/{ => Leetcode Solutions}/278._First_Bad _Version.md (100%) rename docs/{ => Leetcode Solutions}/279._perfect_squares.md (100%) rename docs/{ => Leetcode Solutions}/280._Wiggle_Sort.md (100%) rename docs/{ => Leetcode Solutions}/283._move_zeroes.md (100%) rename docs/{ => Leetcode Solutions}/285._inorder_successor_in_bst.md (100%) rename docs/{ => Leetcode Solutions}/286. Walls and Gates.md (100%) rename docs/{ => Leetcode Solutions}/289._game_of_life.md (100%) rename docs/{ => Leetcode Solutions}/290._word_pattern.md (100%) rename docs/{ => Leetcode Solutions}/292._nim_game.md (100%) rename docs/{ => Leetcode Solutions}/296. Best Meeting Point.md (100%) rename docs/{ => Leetcode Solutions}/298. Binary Tree Longest Consecutive Sequence.md (100%) rename docs/{ => Leetcode Solutions}/299._bulls_and_cows.md (100%) rename docs/{ => Leetcode Solutions}/300._longest_increasing_subsequence.md (100%) rename docs/{ => Leetcode Solutions}/303._range_sum_query_-_immutable.md (100%) rename docs/{ => Leetcode Solutions}/316._Remove_Duplicate_Letters.md (100%) rename docs/{ => Leetcode Solutions}/319._Bulb_Switcher.md (100%) rename docs/{ => Leetcode Solutions}/322. Coin Change.md (100%) rename docs/{ => Leetcode Solutions}/323. Number of Connected Components in an Undirected Graph.md (100%) rename docs/{ => Leetcode Solutions}/324._Wiggle_Sort_II.md (100%) rename docs/{ => Leetcode Solutions}/326._power_of_three.md (100%) rename docs/{ => Leetcode Solutions}/328._odd_even_linked_list.md (100%) rename docs/{ => Leetcode Solutions}/334._increasing_triplet_subsequence.md (100%) rename docs/{ => Leetcode Solutions}/337._house_robber_iii.md (100%) rename docs/{ => Leetcode Solutions}/338. Counting Bits.md (100%) rename docs/{ => Leetcode Solutions}/339. Nested List Weight Sum.md (100%) rename docs/{ => Leetcode Solutions}/341._Flatten_Nested_List_Iterator.md (100%) rename docs/{ => Leetcode Solutions}/342._Power_of_Four.md (100%) rename docs/{ => Leetcode Solutions}/344._reverse_string.md (100%) rename docs/{ => Leetcode Solutions}/345._Reverse_Vowels_of_a_String.md (100%) rename docs/{ => Leetcode Solutions}/349._intersection_of_two_arrays.md (100%) rename docs/{ => Leetcode Solutions}/350._intersection_of_two_arrays_ii.md (100%) rename docs/{ => Leetcode Solutions}/353. Design Snake Game.md (100%) rename docs/{ => Leetcode Solutions}/364. Nested List Weight Sum II.md (100%) rename docs/{ => Leetcode Solutions}/366. Find Leaves of Binary Tree.md (100%) rename docs/{ => Leetcode Solutions}/367._valid_perfect_square.md (100%) rename docs/{ => Leetcode Solutions}/369.Plus One Linked List.md (100%) rename docs/{ => Leetcode Solutions}/371._sum_of_two_integers.md (100%) rename docs/{ => Leetcode Solutions}/374._Guess_Number_Higher_or_Lower.md (100%) rename docs/{ => Leetcode Solutions}/377._combination_sum_iv.md (100%) rename docs/{ => Leetcode Solutions}/378._kth_smallest_element_in_a_sorted_matrix.md (100%) rename docs/{ => Leetcode Solutions}/380. Insert Delete GetRandom O(1).md (100%) rename docs/{ => Leetcode Solutions}/381. Insert Delete GetRandom O(1) - Duplicates allowed.md (100%) rename docs/{ => Leetcode Solutions}/382._linked_list_random_node.md (100%) rename docs/{ => Leetcode Solutions}/383._ransom_note.md (100%) rename docs/{ => Leetcode Solutions}/384. Shuffle an Array.md (100%) rename docs/{ => Leetcode Solutions}/387._first_unique_character_in_a_string.md (100%) rename docs/{ => Leetcode Solutions}/388._Longest_Absolute_File_Path.md (100%) rename docs/{ => Leetcode Solutions}/389._find_the_difference.md (100%) rename docs/{ => Leetcode Solutions}/392._is_subsequence.md (100%) rename docs/{ => Leetcode Solutions}/394._decode_string.md (100%) rename docs/{ => Leetcode Solutions}/400. Nth Digit.md (100%) rename docs/{ => Leetcode Solutions}/401._binary_watch.md (100%) rename docs/{ => Leetcode Solutions}/404._sum_of_left_leaves.md (100%) rename docs/{ => Leetcode Solutions}/405. Convert a Number to Hexadecimal.md (100%) rename docs/{ => Leetcode Solutions}/406._Queue_Reconstruction_by_Height.md (100%) rename docs/{ => Leetcode Solutions}/412._fizz_buzz.md (100%) rename docs/{ => Leetcode Solutions}/413. Arithmetic Slices.md (100%) rename docs/{ => Leetcode Solutions}/414._third_maximum_number.md (100%) rename docs/{ => Leetcode Solutions}/415._add_strings.md (100%) rename docs/{ => Leetcode Solutions}/416. Partition Equal Subset Sum.md (100%) rename docs/{ => Leetcode Solutions}/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md (100%) rename docs/{ => Leetcode Solutions}/422. Valid Word Square.md (100%) rename docs/{ => Leetcode Solutions}/434._number_of_segments_in_a_string.md (100%) rename docs/{ => Leetcode Solutions}/437._path_sum_iii.md (100%) rename docs/{ => Leetcode Solutions}/438._Find_All_Anagrams_in_a_String.md (100%) rename docs/{ => Leetcode Solutions}/439. Ternary Expression Parser.md (100%) rename docs/{ => Leetcode Solutions}/441._arranging_coins.md (100%) rename docs/{ => Leetcode Solutions}/448._Find_All_Numbers_Disappeared_in_an_Array.md (100%) rename docs/{ => Leetcode Solutions}/450. Delete Node in a BST.md (100%) rename docs/{ => Leetcode Solutions}/453._Minimum_Moves_to_Equal_Array_Elements.md (100%) rename docs/{ => Leetcode Solutions}/459._Repeated_Substring_Pattern.md (100%) rename docs/{ => Leetcode Solutions}/461._Hamming Distance.md (100%) rename docs/{ => Leetcode Solutions}/463._Island_Perimeter.md (100%) rename docs/{ => Leetcode Solutions}/467._Unique_Substrings_in_Wraparound_String.md (100%) rename docs/{ => Leetcode Solutions}/469. Convex Polygon.md (100%) rename docs/{ => Leetcode Solutions}/476._Number_Complement.md (100%) rename docs/{ => Leetcode Solutions}/477._Total_Hamming_Distance.md (100%) rename docs/{ => Leetcode Solutions}/485._Max_Consecutive_Ones.md (100%) rename docs/{ => Leetcode Solutions}/587._Erect_the_Fence .md (100%) rename docs/{ => Leetcode Solutions}/599._Minimum_Index_Sum_of_Two_Lists.md (100%) rename docs/{ => Leetcode Solutions}/647._Palindromic_Substrings.md (100%) rename docs/{ => Leetcode Solutions}/657._Judge_Route_Circle.md (100%) rename docs/{ => Leetcode Solutions}/665._Non-decreasing_Array.md (100%) rename docs/{ => Leetcode Solutions}/672._Bulb_Switcher_II.md (100%) rename docs/{ => Leetcode Solutions}/681._Next_Closest_Time.md (100%) rename docs/{ => Leetcode Solutions}/682._Baseball_Game.md (100%) rename docs/{ => Leetcode Solutions}/687._Longest_Univalue_Path.md (100%) rename docs/{ => Leetcode Solutions}/740._delete_and_earn.md (100%) rename docs/{ => Leetcode Solutions}/760._Find_Anagram_Mappings.md (100%) rename "others/Binary Search \344\270\215\346\230\223\345\206\231.md" => "docs/Leetcode Solutions/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" (100%) rename {others => docs/Leetcode Solutions/Summarization}/Data Structure and Algorthim Review.md (100%) rename {others => docs/Leetcode Solutions/Summarization}/Dynamic Programming.md (100%) rename "others/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" => "docs/Leetcode Solutions/Summarization/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" (100%) rename "others/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" => "docs/Leetcode Solutions/Summarization/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" (100%) rename "others/LinkedList\346\212\200\345\267\247.md" => "docs/Leetcode Solutions/Summarization/LinkedList\346\212\200\345\267\247.md" (100%) rename {others => docs/Leetcode Solutions/Summarization}/Maximal Square.pdf (100%) rename "docs/SortingAlgorithm/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" => "docs/Leetcode Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" (100%) rename {others => docs/Leetcode Solutions/Summarization}/Range Sum Query 2D - Immutable.pdf (100%) rename {others => docs/Leetcode Solutions/Summarization}/Recusrion & BackTracking.md (100%) rename "others/backtracking\346\200\235\350\267\257.md" => "docs/Leetcode Solutions/Summarization/backtracking\346\200\235\350\267\257.md" (100%) rename "others/delete_node_in_a_linked_list\351\227\256\351\242\230.md" => "docs/Leetcode Solutions/Summarization/delete_node_in_a_linked_list\351\227\256\351\242\230.md" (100%) rename "others/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" => "docs/Leetcode Solutions/Summarization/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" (100%) rename "docs/SortingAlgorithm/python\347\232\204\345\220\204\347\247\215pass.md" => "docs/Leetcode Solutions/Summarization/python\347\232\204\345\220\204\347\247\215pass.md" (100%) rename {others => docs/Leetcode Solutions/Summarization}/slide_windows_template.md (100%) rename "docs/SortingAlgorithm/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" => "docs/Leetcode Solutions/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" (100%) rename "others/\344\275\215\350\277\220\347\256\227.md" => "docs/Leetcode Solutions/Summarization/\344\275\215\350\277\220\347\256\227.md" (100%) rename "others/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" => "docs/Leetcode Solutions/Summarization/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" (100%) rename docs/SortingAlgorithm/README.md => "docs/Leetcode Solutions/Summarization/\345\205\253\346\216\222\345\272\217.md" (100%) rename "others/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" => "docs/Leetcode Solutions/Summarization/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" (100%) rename "others/\346\200\273\347\273\223.md" => "docs/Leetcode Solutions/Summarization/\346\200\273\347\273\223.md" (100%) rename "others/\347\273\204\345\220\210\351\227\256\351\242\230.md" => "docs/Leetcode Solutions/Summarization/\347\273\204\345\220\210\351\227\256\351\242\230.md" (100%) rename "others/\351\200\222\345\275\222_recursion.md" => "docs/Leetcode Solutions/Summarization/\351\200\222\345\275\222_recursion.md" (100%) create mode 100644 src/py3.x/TreeRecursionIterator.py create mode 100644 src/py3.x/list2iteration.py diff --git a/src/py2.x/SortingAlgorithm/BubbleSort.py b/docs/Algorithm Templates/Sort/BubbleSort.py similarity index 100% rename from src/py2.x/SortingAlgorithm/BubbleSort.py rename to docs/Algorithm Templates/Sort/BubbleSort.py diff --git a/src/py2.x/SortingAlgorithm/InsertSort.py b/docs/Algorithm Templates/Sort/InsertSort.py similarity index 100% rename from src/py2.x/SortingAlgorithm/InsertSort.py rename to docs/Algorithm Templates/Sort/InsertSort.py diff --git a/src/py2.x/SortingAlgorithm/MergeSort.py b/docs/Algorithm Templates/Sort/MergeSort.py similarity index 100% rename from src/py2.x/SortingAlgorithm/MergeSort.py rename to docs/Algorithm Templates/Sort/MergeSort.py diff --git a/src/py2.x/SortingAlgorithm/QuickSort.py b/docs/Algorithm Templates/Sort/QuickSort.py similarity index 100% rename from src/py2.x/SortingAlgorithm/QuickSort.py rename to docs/Algorithm Templates/Sort/QuickSort.py diff --git a/src/py2.x/SortingAlgorithm/SelectionSort.py b/docs/Algorithm Templates/Sort/SelectionSort.py similarity index 100% rename from src/py2.x/SortingAlgorithm/SelectionSort.py rename to docs/Algorithm Templates/Sort/SelectionSort.py diff --git a/src/py2.x/SortingAlgorithm/ShellSort.py b/docs/Algorithm Templates/Sort/ShellSort.py similarity index 100% rename from src/py2.x/SortingAlgorithm/ShellSort.py rename to docs/Algorithm Templates/Sort/ShellSort.py diff --git a/docs/001._two_sum.md b/docs/Leetcode Solutions/001._two_sum.md similarity index 100% rename from docs/001._two_sum.md rename to docs/Leetcode Solutions/001._two_sum.md diff --git a/docs/002._add_two_numbers.md b/docs/Leetcode Solutions/002._add_two_numbers.md similarity index 100% rename from docs/002._add_two_numbers.md rename to docs/Leetcode Solutions/002._add_two_numbers.md diff --git a/docs/003._longest_substring_without_repeating_characters.md b/docs/Leetcode Solutions/003._longest_substring_without_repeating_characters.md similarity index 100% rename from docs/003._longest_substring_without_repeating_characters.md rename to docs/Leetcode Solutions/003._longest_substring_without_repeating_characters.md diff --git a/docs/004._median_of_two_sorted_arrays.md b/docs/Leetcode Solutions/004._median_of_two_sorted_arrays.md similarity index 100% rename from docs/004._median_of_two_sorted_arrays.md rename to docs/Leetcode Solutions/004._median_of_two_sorted_arrays.md diff --git a/docs/005._longest_palindromic_substring.md b/docs/Leetcode Solutions/005._longest_palindromic_substring.md similarity index 100% rename from docs/005._longest_palindromic_substring.md rename to docs/Leetcode Solutions/005._longest_palindromic_substring.md diff --git a/docs/006._ZigZag_Conversion.md b/docs/Leetcode Solutions/006._ZigZag_Conversion.md similarity index 100% rename from docs/006._ZigZag_Conversion.md rename to docs/Leetcode Solutions/006._ZigZag_Conversion.md diff --git a/docs/007._Reverse_Integer.md b/docs/Leetcode Solutions/007._Reverse_Integer.md similarity index 100% rename from docs/007._Reverse_Integer.md rename to docs/Leetcode Solutions/007._Reverse_Integer.md diff --git a/docs/008._string_to_integer_(atoi).md b/docs/Leetcode Solutions/008._string_to_integer_(atoi).md similarity index 100% rename from docs/008._string_to_integer_(atoi).md rename to docs/Leetcode Solutions/008._string_to_integer_(atoi).md diff --git a/docs/009._Palindrome_Number.md b/docs/Leetcode Solutions/009._Palindrome_Number.md similarity index 100% rename from docs/009._Palindrome_Number.md rename to docs/Leetcode Solutions/009._Palindrome_Number.md diff --git a/docs/010._regular_expression_matching.md b/docs/Leetcode Solutions/010._regular_expression_matching.md similarity index 100% rename from docs/010._regular_expression_matching.md rename to docs/Leetcode Solutions/010._regular_expression_matching.md diff --git a/docs/011._container_with_most_water.md b/docs/Leetcode Solutions/011._container_with_most_water.md similarity index 100% rename from docs/011._container_with_most_water.md rename to docs/Leetcode Solutions/011._container_with_most_water.md diff --git a/docs/012._Integer_to_Roman.md b/docs/Leetcode Solutions/012._Integer_to_Roman.md similarity index 100% rename from docs/012._Integer_to_Roman.md rename to docs/Leetcode Solutions/012._Integer_to_Roman.md diff --git a/docs/013._Roman_to_Integer.md b/docs/Leetcode Solutions/013._Roman_to_Integer.md similarity index 100% rename from docs/013._Roman_to_Integer.md rename to docs/Leetcode Solutions/013._Roman_to_Integer.md diff --git a/docs/014._longest_common_prefix.md b/docs/Leetcode Solutions/014._longest_common_prefix.md similarity index 100% rename from docs/014._longest_common_prefix.md rename to docs/Leetcode Solutions/014._longest_common_prefix.md diff --git a/docs/015._3sum.md b/docs/Leetcode Solutions/015._3sum.md similarity index 100% rename from docs/015._3sum.md rename to docs/Leetcode Solutions/015._3sum.md diff --git a/docs/016._3sum_closest.md b/docs/Leetcode Solutions/016._3sum_closest.md similarity index 100% rename from docs/016._3sum_closest.md rename to docs/Leetcode Solutions/016._3sum_closest.md diff --git a/docs/017._letter_combinations_of_a_phone_number.md b/docs/Leetcode Solutions/017._letter_combinations_of_a_phone_number.md similarity index 100% rename from docs/017._letter_combinations_of_a_phone_number.md rename to docs/Leetcode Solutions/017._letter_combinations_of_a_phone_number.md diff --git a/docs/018._4sum.md b/docs/Leetcode Solutions/018._4sum.md similarity index 100% rename from docs/018._4sum.md rename to docs/Leetcode Solutions/018._4sum.md diff --git a/docs/019._remove_nth_node_from_end_of_list.md b/docs/Leetcode Solutions/019._remove_nth_node_from_end_of_list.md similarity index 100% rename from docs/019._remove_nth_node_from_end_of_list.md rename to docs/Leetcode Solutions/019._remove_nth_node_from_end_of_list.md diff --git a/docs/020._valid_parentheses.md b/docs/Leetcode Solutions/020._valid_parentheses.md similarity index 100% rename from docs/020._valid_parentheses.md rename to docs/Leetcode Solutions/020._valid_parentheses.md diff --git a/docs/021._merge_two_sorted_lists.md b/docs/Leetcode Solutions/021._merge_two_sorted_lists.md similarity index 100% rename from docs/021._merge_two_sorted_lists.md rename to docs/Leetcode Solutions/021._merge_two_sorted_lists.md diff --git a/docs/022._generate_parentheses.md b/docs/Leetcode Solutions/022._generate_parentheses.md similarity index 100% rename from docs/022._generate_parentheses.md rename to docs/Leetcode Solutions/022._generate_parentheses.md diff --git a/docs/023._merge_k_sorted_lists.md b/docs/Leetcode Solutions/023._merge_k_sorted_lists.md similarity index 100% rename from docs/023._merge_k_sorted_lists.md rename to docs/Leetcode Solutions/023._merge_k_sorted_lists.md diff --git a/docs/024._swap_nodes_in_pairs.md b/docs/Leetcode Solutions/024._swap_nodes_in_pairs.md similarity index 100% rename from docs/024._swap_nodes_in_pairs.md rename to docs/Leetcode Solutions/024._swap_nodes_in_pairs.md diff --git a/docs/026._Remove_Duplicates_from_Sorted_Array.md b/docs/Leetcode Solutions/026._Remove_Duplicates_from_Sorted_Array.md similarity index 100% rename from docs/026._Remove_Duplicates_from_Sorted_Array.md rename to docs/Leetcode Solutions/026._Remove_Duplicates_from_Sorted_Array.md diff --git a/docs/027._Remove_Element.md b/docs/Leetcode Solutions/027._Remove_Element.md similarity index 100% rename from docs/027._Remove_Element.md rename to docs/Leetcode Solutions/027._Remove_Element.md diff --git a/docs/028._implement_strstr().md b/docs/Leetcode Solutions/028._implement_strstr().md similarity index 100% rename from docs/028._implement_strstr().md rename to docs/Leetcode Solutions/028._implement_strstr().md diff --git a/docs/030._Substring_with_Concatenation_of_All_Words.md b/docs/Leetcode Solutions/030._Substring_with_Concatenation_of_All_Words.md similarity index 100% rename from docs/030._Substring_with_Concatenation_of_All_Words.md rename to docs/Leetcode Solutions/030._Substring_with_Concatenation_of_All_Words.md diff --git a/docs/031._next_permutation.md b/docs/Leetcode Solutions/031._next_permutation.md similarity index 100% rename from docs/031._next_permutation.md rename to docs/Leetcode Solutions/031._next_permutation.md diff --git a/docs/033._search_in_rotated_sorted_array.md b/docs/Leetcode Solutions/033._search_in_rotated_sorted_array.md similarity index 100% rename from docs/033._search_in_rotated_sorted_array.md rename to docs/Leetcode Solutions/033._search_in_rotated_sorted_array.md diff --git a/docs/034._Search for a Range.md b/docs/Leetcode Solutions/034._Search for a Range.md similarity index 100% rename from docs/034._Search for a Range.md rename to docs/Leetcode Solutions/034._Search for a Range.md diff --git a/docs/035._search_insert_position.md b/docs/Leetcode Solutions/035._search_insert_position.md similarity index 100% rename from docs/035._search_insert_position.md rename to docs/Leetcode Solutions/035._search_insert_position.md diff --git a/docs/038._Count_and_Say.md b/docs/Leetcode Solutions/038._Count_and_Say.md similarity index 100% rename from docs/038._Count_and_Say.md rename to docs/Leetcode Solutions/038._Count_and_Say.md diff --git a/docs/039._combination_sum.md b/docs/Leetcode Solutions/039._combination_sum.md similarity index 100% rename from docs/039._combination_sum.md rename to docs/Leetcode Solutions/039._combination_sum.md diff --git a/docs/040._combination_sum_ii.md b/docs/Leetcode Solutions/040._combination_sum_ii.md similarity index 100% rename from docs/040._combination_sum_ii.md rename to docs/Leetcode Solutions/040._combination_sum_ii.md diff --git a/docs/042._trapping_rain_water.md b/docs/Leetcode Solutions/042._trapping_rain_water.md similarity index 100% rename from docs/042._trapping_rain_water.md rename to docs/Leetcode Solutions/042._trapping_rain_water.md diff --git a/docs/043._multiply_strings.md b/docs/Leetcode Solutions/043._multiply_strings.md similarity index 100% rename from docs/043._multiply_strings.md rename to docs/Leetcode Solutions/043._multiply_strings.md diff --git a/docs/044._wildcard_matching.md b/docs/Leetcode Solutions/044._wildcard_matching.md similarity index 100% rename from docs/044._wildcard_matching.md rename to docs/Leetcode Solutions/044._wildcard_matching.md diff --git a/docs/045._Jump_Game_II.md b/docs/Leetcode Solutions/045._Jump_Game_II.md similarity index 100% rename from docs/045._Jump_Game_II.md rename to docs/Leetcode Solutions/045._Jump_Game_II.md diff --git a/docs/046._permutations.md b/docs/Leetcode Solutions/046._permutations.md similarity index 100% rename from docs/046._permutations.md rename to docs/Leetcode Solutions/046._permutations.md diff --git a/docs/047._permutations_ii.md b/docs/Leetcode Solutions/047._permutations_ii.md similarity index 100% rename from docs/047._permutations_ii.md rename to docs/Leetcode Solutions/047._permutations_ii.md diff --git a/docs/048._rotate_image.md b/docs/Leetcode Solutions/048._rotate_image.md similarity index 100% rename from docs/048._rotate_image.md rename to docs/Leetcode Solutions/048._rotate_image.md diff --git a/docs/049._group_anagrams_python.md b/docs/Leetcode Solutions/049._group_anagrams_python.md similarity index 100% rename from docs/049._group_anagrams_python.md rename to docs/Leetcode Solutions/049._group_anagrams_python.md diff --git a/docs/050._pow(x,_n).md b/docs/Leetcode Solutions/050._pow(x,_n).md similarity index 100% rename from docs/050._pow(x,_n).md rename to docs/Leetcode Solutions/050._pow(x,_n).md diff --git a/docs/051._n-queens.md b/docs/Leetcode Solutions/051._n-queens.md similarity index 100% rename from docs/051._n-queens.md rename to docs/Leetcode Solutions/051._n-queens.md diff --git a/docs/052._n-queens_ii.md b/docs/Leetcode Solutions/052._n-queens_ii.md similarity index 100% rename from docs/052._n-queens_ii.md rename to docs/Leetcode Solutions/052._n-queens_ii.md diff --git a/docs/053._maximum_subarray.md b/docs/Leetcode Solutions/053._maximum_subarray.md similarity index 100% rename from docs/053._maximum_subarray.md rename to docs/Leetcode Solutions/053._maximum_subarray.md diff --git a/docs/054._spiral_matrix.md b/docs/Leetcode Solutions/054._spiral_matrix.md similarity index 100% rename from docs/054._spiral_matrix.md rename to docs/Leetcode Solutions/054._spiral_matrix.md diff --git a/docs/055._jump_game.md b/docs/Leetcode Solutions/055._jump_game.md similarity index 100% rename from docs/055._jump_game.md rename to docs/Leetcode Solutions/055._jump_game.md diff --git a/docs/056._Merge_Intervals.md b/docs/Leetcode Solutions/056._Merge_Intervals.md similarity index 100% rename from docs/056._Merge_Intervals.md rename to docs/Leetcode Solutions/056._Merge_Intervals.md diff --git a/docs/058._length_of_last_word.md b/docs/Leetcode Solutions/058._length_of_last_word.md similarity index 100% rename from docs/058._length_of_last_word.md rename to docs/Leetcode Solutions/058._length_of_last_word.md diff --git a/docs/059._spiral_matrix_ii.md b/docs/Leetcode Solutions/059._spiral_matrix_ii.md similarity index 100% rename from docs/059._spiral_matrix_ii.md rename to docs/Leetcode Solutions/059._spiral_matrix_ii.md diff --git a/docs/060._permutation_sequence.md b/docs/Leetcode Solutions/060._permutation_sequence.md similarity index 100% rename from docs/060._permutation_sequence.md rename to docs/Leetcode Solutions/060._permutation_sequence.md diff --git a/docs/061._rotate_list.md b/docs/Leetcode Solutions/061._rotate_list.md similarity index 100% rename from docs/061._rotate_list.md rename to docs/Leetcode Solutions/061._rotate_list.md diff --git a/docs/064._minimum_path_sum.md b/docs/Leetcode Solutions/064._minimum_path_sum.md similarity index 100% rename from docs/064._minimum_path_sum.md rename to docs/Leetcode Solutions/064._minimum_path_sum.md diff --git a/docs/065.unique_paths_ii.md b/docs/Leetcode Solutions/065.unique_paths_ii.md similarity index 100% rename from docs/065.unique_paths_ii.md rename to docs/Leetcode Solutions/065.unique_paths_ii.md diff --git a/docs/066._plus_one.md b/docs/Leetcode Solutions/066._plus_one.md similarity index 100% rename from docs/066._plus_one.md rename to docs/Leetcode Solutions/066._plus_one.md diff --git a/docs/067._add_binary.md b/docs/Leetcode Solutions/067._add_binary.md similarity index 100% rename from docs/067._add_binary.md rename to docs/Leetcode Solutions/067._add_binary.md diff --git a/docs/069._sqrt(x).md b/docs/Leetcode Solutions/069._sqrt(x).md similarity index 100% rename from docs/069._sqrt(x).md rename to docs/Leetcode Solutions/069._sqrt(x).md diff --git a/docs/070. Climbing Stairs.md b/docs/Leetcode Solutions/070. Climbing Stairs.md similarity index 100% rename from docs/070. Climbing Stairs.md rename to docs/Leetcode Solutions/070. Climbing Stairs.md diff --git a/docs/072._edit_distance.md b/docs/Leetcode Solutions/072._edit_distance.md similarity index 100% rename from docs/072._edit_distance.md rename to docs/Leetcode Solutions/072._edit_distance.md diff --git a/docs/073. Set Matrix Zeroes.md b/docs/Leetcode Solutions/073. Set Matrix Zeroes.md similarity index 100% rename from docs/073. Set Matrix Zeroes.md rename to docs/Leetcode Solutions/073. Set Matrix Zeroes.md diff --git a/docs/074._search_a_2d_matrix.md b/docs/Leetcode Solutions/074._search_a_2d_matrix.md similarity index 100% rename from docs/074._search_a_2d_matrix.md rename to docs/Leetcode Solutions/074._search_a_2d_matrix.md diff --git a/docs/075._sort_colors.md b/docs/Leetcode Solutions/075._sort_colors.md similarity index 100% rename from docs/075._sort_colors.md rename to docs/Leetcode Solutions/075._sort_colors.md diff --git a/docs/076._Minimum_Window_Substring.md b/docs/Leetcode Solutions/076._Minimum_Window_Substring.md similarity index 100% rename from docs/076._Minimum_Window_Substring.md rename to docs/Leetcode Solutions/076._Minimum_Window_Substring.md diff --git a/docs/077._combinations.md b/docs/Leetcode Solutions/077._combinations.md similarity index 100% rename from docs/077._combinations.md rename to docs/Leetcode Solutions/077._combinations.md diff --git a/docs/078.Subsets .md b/docs/Leetcode Solutions/078.Subsets .md similarity index 100% rename from docs/078.Subsets .md rename to docs/Leetcode Solutions/078.Subsets .md diff --git a/docs/079._word_search.md b/docs/Leetcode Solutions/079._word_search.md similarity index 100% rename from docs/079._word_search.md rename to docs/Leetcode Solutions/079._word_search.md diff --git a/docs/082._remove_duplicates_from_sorted_list_ii.md b/docs/Leetcode Solutions/082._remove_duplicates_from_sorted_list_ii.md similarity index 100% rename from docs/082._remove_duplicates_from_sorted_list_ii.md rename to docs/Leetcode Solutions/082._remove_duplicates_from_sorted_list_ii.md diff --git a/docs/083._remove_duplicates_from_sorted_list.md b/docs/Leetcode Solutions/083._remove_duplicates_from_sorted_list.md similarity index 100% rename from docs/083._remove_duplicates_from_sorted_list.md rename to docs/Leetcode Solutions/083._remove_duplicates_from_sorted_list.md diff --git a/docs/086._partition_list.md b/docs/Leetcode Solutions/086._partition_list.md similarity index 100% rename from docs/086._partition_list.md rename to docs/Leetcode Solutions/086._partition_list.md diff --git a/docs/088._merge_sorted_array.md b/docs/Leetcode Solutions/088._merge_sorted_array.md similarity index 100% rename from docs/088._merge_sorted_array.md rename to docs/Leetcode Solutions/088._merge_sorted_array.md diff --git a/docs/089._gray_code.md b/docs/Leetcode Solutions/089._gray_code.md similarity index 100% rename from docs/089._gray_code.md rename to docs/Leetcode Solutions/089._gray_code.md diff --git a/docs/090._subsets_ii.md b/docs/Leetcode Solutions/090._subsets_ii.md similarity index 100% rename from docs/090._subsets_ii.md rename to docs/Leetcode Solutions/090._subsets_ii.md diff --git a/docs/091._decode_ways.md b/docs/Leetcode Solutions/091._decode_ways.md similarity index 100% rename from docs/091._decode_ways.md rename to docs/Leetcode Solutions/091._decode_ways.md diff --git a/docs/092._reverse_linked_list_ii.md b/docs/Leetcode Solutions/092._reverse_linked_list_ii.md similarity index 100% rename from docs/092._reverse_linked_list_ii.md rename to docs/Leetcode Solutions/092._reverse_linked_list_ii.md diff --git a/docs/093._restore_ip_addresses.md b/docs/Leetcode Solutions/093._restore_ip_addresses.md similarity index 100% rename from docs/093._restore_ip_addresses.md rename to docs/Leetcode Solutions/093._restore_ip_addresses.md diff --git a/docs/094._binary_tree_inorder_traversal.md b/docs/Leetcode Solutions/094._binary_tree_inorder_traversal.md similarity index 100% rename from docs/094._binary_tree_inorder_traversal.md rename to docs/Leetcode Solutions/094._binary_tree_inorder_traversal.md diff --git a/docs/096._unique_binary_search_trees.md b/docs/Leetcode Solutions/096._unique_binary_search_trees.md similarity index 100% rename from docs/096._unique_binary_search_trees.md rename to docs/Leetcode Solutions/096._unique_binary_search_trees.md diff --git a/docs/098._validate_binary_search_tree.md b/docs/Leetcode Solutions/098._validate_binary_search_tree.md similarity index 100% rename from docs/098._validate_binary_search_tree.md rename to docs/Leetcode Solutions/098._validate_binary_search_tree.md diff --git a/docs/100._same_tree.md b/docs/Leetcode Solutions/100._same_tree.md similarity index 100% rename from docs/100._same_tree.md rename to docs/Leetcode Solutions/100._same_tree.md diff --git a/docs/101._symmetric_tree.md b/docs/Leetcode Solutions/101._symmetric_tree.md similarity index 100% rename from docs/101._symmetric_tree.md rename to docs/Leetcode Solutions/101._symmetric_tree.md diff --git a/docs/102._binary_tree_level_order_traversal.md b/docs/Leetcode Solutions/102._binary_tree_level_order_traversal.md similarity index 100% rename from docs/102._binary_tree_level_order_traversal.md rename to docs/Leetcode Solutions/102._binary_tree_level_order_traversal.md diff --git a/docs/103._binary_tree_zigzag_level_order_traversal.md b/docs/Leetcode Solutions/103._binary_tree_zigzag_level_order_traversal.md similarity index 100% rename from docs/103._binary_tree_zigzag_level_order_traversal.md rename to docs/Leetcode Solutions/103._binary_tree_zigzag_level_order_traversal.md diff --git a/docs/104._maximum_depth_of_binary_tree.md b/docs/Leetcode Solutions/104._maximum_depth_of_binary_tree.md similarity index 100% rename from docs/104._maximum_depth_of_binary_tree.md rename to docs/Leetcode Solutions/104._maximum_depth_of_binary_tree.md diff --git a/docs/105._construct_binary_tree_from_preorder_and_inorder_traversal.md b/docs/Leetcode Solutions/105._construct_binary_tree_from_preorder_and_inorder_traversal.md similarity index 100% rename from docs/105._construct_binary_tree_from_preorder_and_inorder_traversal.md rename to docs/Leetcode Solutions/105._construct_binary_tree_from_preorder_and_inorder_traversal.md diff --git a/docs/106._construct_binary_tree_from_inorder_and_postorder_traversal.md b/docs/Leetcode Solutions/106._construct_binary_tree_from_inorder_and_postorder_traversal.md similarity index 100% rename from docs/106._construct_binary_tree_from_inorder_and_postorder_traversal.md rename to docs/Leetcode Solutions/106._construct_binary_tree_from_inorder_and_postorder_traversal.md diff --git a/docs/107._binary_tree_level_order_traversal_ii.md b/docs/Leetcode Solutions/107._binary_tree_level_order_traversal_ii.md similarity index 100% rename from docs/107._binary_tree_level_order_traversal_ii.md rename to docs/Leetcode Solutions/107._binary_tree_level_order_traversal_ii.md diff --git a/docs/108._convert_sorted_array_to_binary_search_tree.md b/docs/Leetcode Solutions/108._convert_sorted_array_to_binary_search_tree.md similarity index 100% rename from docs/108._convert_sorted_array_to_binary_search_tree.md rename to docs/Leetcode Solutions/108._convert_sorted_array_to_binary_search_tree.md diff --git a/docs/109._convert_sorted_list_to_binary_search_tree.md b/docs/Leetcode Solutions/109._convert_sorted_list_to_binary_search_tree.md similarity index 100% rename from docs/109._convert_sorted_list_to_binary_search_tree.md rename to docs/Leetcode Solutions/109._convert_sorted_list_to_binary_search_tree.md diff --git a/docs/110._balanced_binary_tree.md b/docs/Leetcode Solutions/110._balanced_binary_tree.md similarity index 100% rename from docs/110._balanced_binary_tree.md rename to docs/Leetcode Solutions/110._balanced_binary_tree.md diff --git a/docs/111._minimum_depth_of_binary_tree.md b/docs/Leetcode Solutions/111._minimum_depth_of_binary_tree.md similarity index 100% rename from docs/111._minimum_depth_of_binary_tree.md rename to docs/Leetcode Solutions/111._minimum_depth_of_binary_tree.md diff --git a/docs/112._path_sum.md b/docs/Leetcode Solutions/112._path_sum.md similarity index 100% rename from docs/112._path_sum.md rename to docs/Leetcode Solutions/112._path_sum.md diff --git a/docs/113._path_sum_ii.md b/docs/Leetcode Solutions/113._path_sum_ii.md similarity index 100% rename from docs/113._path_sum_ii.md rename to docs/Leetcode Solutions/113._path_sum_ii.md diff --git a/docs/114._flatten_binary_tree_to_linked_list.md b/docs/Leetcode Solutions/114._flatten_binary_tree_to_linked_list.md similarity index 100% rename from docs/114._flatten_binary_tree_to_linked_list.md rename to docs/Leetcode Solutions/114._flatten_binary_tree_to_linked_list.md diff --git a/docs/116._populating_next_right_pointers_in_each_node.md b/docs/Leetcode Solutions/116._populating_next_right_pointers_in_each_node.md similarity index 100% rename from docs/116._populating_next_right_pointers_in_each_node.md rename to docs/Leetcode Solutions/116._populating_next_right_pointers_in_each_node.md diff --git a/docs/118._pascal's_triangle.md b/docs/Leetcode Solutions/118._pascal's_triangle.md similarity index 100% rename from docs/118._pascal's_triangle.md rename to docs/Leetcode Solutions/118._pascal's_triangle.md diff --git a/docs/119. Pascal's Triangle II.md b/docs/Leetcode Solutions/119. Pascal's Triangle II.md similarity index 100% rename from docs/119. Pascal's Triangle II.md rename to docs/Leetcode Solutions/119. Pascal's Triangle II.md diff --git a/docs/120. Triangle.md b/docs/Leetcode Solutions/120. Triangle.md similarity index 100% rename from docs/120. Triangle.md rename to docs/Leetcode Solutions/120. Triangle.md diff --git a/docs/121._Best_Time_to_Buy_and_Sell_Stock.md b/docs/Leetcode Solutions/121._Best_Time_to_Buy_and_Sell_Stock.md similarity index 100% rename from docs/121._Best_Time_to_Buy_and_Sell_Stock.md rename to docs/Leetcode Solutions/121._Best_Time_to_Buy_and_Sell_Stock.md diff --git a/docs/125._valid_palindrome.md b/docs/Leetcode Solutions/125._valid_palindrome.md similarity index 100% rename from docs/125._valid_palindrome.md rename to docs/Leetcode Solutions/125._valid_palindrome.md diff --git a/docs/126. Word Ladder II.md b/docs/Leetcode Solutions/126. Word Ladder II.md similarity index 100% rename from docs/126. Word Ladder II.md rename to docs/Leetcode Solutions/126. Word Ladder II.md diff --git a/docs/127._word_ladder.md b/docs/Leetcode Solutions/127._word_ladder.md similarity index 100% rename from docs/127._word_ladder.md rename to docs/Leetcode Solutions/127._word_ladder.md diff --git a/docs/128._Longest_Consecutive_Sequence.md b/docs/Leetcode Solutions/128._Longest_Consecutive_Sequence.md similarity index 100% rename from docs/128._Longest_Consecutive_Sequence.md rename to docs/Leetcode Solutions/128._Longest_Consecutive_Sequence.md diff --git a/docs/129._sum_root_to_leaf_numbers.md b/docs/Leetcode Solutions/129._sum_root_to_leaf_numbers.md similarity index 100% rename from docs/129._sum_root_to_leaf_numbers.md rename to docs/Leetcode Solutions/129._sum_root_to_leaf_numbers.md diff --git a/docs/130._surrounded_regions.md b/docs/Leetcode Solutions/130._surrounded_regions.md similarity index 100% rename from docs/130._surrounded_regions.md rename to docs/Leetcode Solutions/130._surrounded_regions.md diff --git a/docs/131._palindrome_partitioning.md b/docs/Leetcode Solutions/131._palindrome_partitioning.md similarity index 100% rename from docs/131._palindrome_partitioning.md rename to docs/Leetcode Solutions/131._palindrome_partitioning.md diff --git a/docs/133._clone_graph.md b/docs/Leetcode Solutions/133._clone_graph.md similarity index 100% rename from docs/133._clone_graph.md rename to docs/Leetcode Solutions/133._clone_graph.md diff --git a/docs/136._single_number.md b/docs/Leetcode Solutions/136._single_number.md similarity index 100% rename from docs/136._single_number.md rename to docs/Leetcode Solutions/136._single_number.md diff --git a/docs/139._word_break.md b/docs/Leetcode Solutions/139._word_break.md similarity index 100% rename from docs/139._word_break.md rename to docs/Leetcode Solutions/139._word_break.md diff --git a/docs/140._word_break_ii.md b/docs/Leetcode Solutions/140._word_break_ii.md similarity index 100% rename from docs/140._word_break_ii.md rename to docs/Leetcode Solutions/140._word_break_ii.md diff --git a/docs/141._linked_list_cycle.md b/docs/Leetcode Solutions/141._linked_list_cycle.md similarity index 100% rename from docs/141._linked_list_cycle.md rename to docs/Leetcode Solutions/141._linked_list_cycle.md diff --git a/docs/142_Linked_List_Cycle_II.md b/docs/Leetcode Solutions/142_Linked_List_Cycle_II.md similarity index 100% rename from docs/142_Linked_List_Cycle_II.md rename to docs/Leetcode Solutions/142_Linked_List_Cycle_II.md diff --git a/docs/143._reorder_list.md b/docs/Leetcode Solutions/143._reorder_list.md similarity index 100% rename from docs/143._reorder_list.md rename to docs/Leetcode Solutions/143._reorder_list.md diff --git a/docs/144._binary_tree_preorder_traversal.md b/docs/Leetcode Solutions/144._binary_tree_preorder_traversal.md similarity index 100% rename from docs/144._binary_tree_preorder_traversal.md rename to docs/Leetcode Solutions/144._binary_tree_preorder_traversal.md diff --git a/docs/145._binary_tree_postorder_traversal.md b/docs/Leetcode Solutions/145._binary_tree_postorder_traversal.md similarity index 100% rename from docs/145._binary_tree_postorder_traversal.md rename to docs/Leetcode Solutions/145._binary_tree_postorder_traversal.md diff --git a/docs/147._insertion_sort_list.md b/docs/Leetcode Solutions/147._insertion_sort_list.md similarity index 100% rename from docs/147._insertion_sort_list.md rename to docs/Leetcode Solutions/147._insertion_sort_list.md diff --git a/docs/148._sort_list.md b/docs/Leetcode Solutions/148._sort_list.md similarity index 100% rename from docs/148._sort_list.md rename to docs/Leetcode Solutions/148._sort_list.md diff --git a/docs/150._evaluate_reverse_polish_notation.md b/docs/Leetcode Solutions/150._evaluate_reverse_polish_notation.md similarity index 100% rename from docs/150._evaluate_reverse_polish_notation.md rename to docs/Leetcode Solutions/150._evaluate_reverse_polish_notation.md diff --git a/docs/151._reverse_words_in_a_string.md b/docs/Leetcode Solutions/151._reverse_words_in_a_string.md similarity index 100% rename from docs/151._reverse_words_in_a_string.md rename to docs/Leetcode Solutions/151._reverse_words_in_a_string.md diff --git a/docs/152._maximum_product_subarray.md b/docs/Leetcode Solutions/152._maximum_product_subarray.md similarity index 100% rename from docs/152._maximum_product_subarray.md rename to docs/Leetcode Solutions/152._maximum_product_subarray.md diff --git a/docs/153._find_minimum_in_rotated_sorted_array.md b/docs/Leetcode Solutions/153._find_minimum_in_rotated_sorted_array.md similarity index 100% rename from docs/153._find_minimum_in_rotated_sorted_array.md rename to docs/Leetcode Solutions/153._find_minimum_in_rotated_sorted_array.md diff --git a/docs/155._min_stack.md b/docs/Leetcode Solutions/155._min_stack.md similarity index 100% rename from docs/155._min_stack.md rename to docs/Leetcode Solutions/155._min_stack.md diff --git a/docs/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md b/docs/Leetcode Solutions/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md similarity index 100% rename from docs/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md rename to docs/Leetcode Solutions/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md diff --git a/docs/160._intersection_of_two_linked_lists.md b/docs/Leetcode Solutions/160._intersection_of_two_linked_lists.md similarity index 100% rename from docs/160._intersection_of_two_linked_lists.md rename to docs/Leetcode Solutions/160._intersection_of_two_linked_lists.md diff --git a/docs/162._find_peak_element.md b/docs/Leetcode Solutions/162._find_peak_element.md similarity index 100% rename from docs/162._find_peak_element.md rename to docs/Leetcode Solutions/162._find_peak_element.md diff --git a/docs/165._compare_version_numbers.md b/docs/Leetcode Solutions/165._compare_version_numbers.md similarity index 100% rename from docs/165._compare_version_numbers.md rename to docs/Leetcode Solutions/165._compare_version_numbers.md diff --git a/docs/166._Fraction_to_Recurring_Decimal.md b/docs/Leetcode Solutions/166._Fraction_to_Recurring_Decimal.md similarity index 100% rename from docs/166._Fraction_to_Recurring_Decimal.md rename to docs/Leetcode Solutions/166._Fraction_to_Recurring_Decimal.md diff --git a/docs/167._two_sum_ii_-_input_array_is_sorted.md b/docs/Leetcode Solutions/167._two_sum_ii_-_input_array_is_sorted.md similarity index 100% rename from docs/167._two_sum_ii_-_input_array_is_sorted.md rename to docs/Leetcode Solutions/167._two_sum_ii_-_input_array_is_sorted.md diff --git a/docs/168._excel_sheet_column_title.md b/docs/Leetcode Solutions/168._excel_sheet_column_title.md similarity index 100% rename from docs/168._excel_sheet_column_title.md rename to docs/Leetcode Solutions/168._excel_sheet_column_title.md diff --git a/docs/169._majority_element.md b/docs/Leetcode Solutions/169._majority_element.md similarity index 100% rename from docs/169._majority_element.md rename to docs/Leetcode Solutions/169._majority_element.md diff --git a/docs/171._excel_sheet_column_number.md b/docs/Leetcode Solutions/171._excel_sheet_column_number.md similarity index 100% rename from docs/171._excel_sheet_column_number.md rename to docs/Leetcode Solutions/171._excel_sheet_column_number.md diff --git a/docs/173._binary_search_tree_iterator.md b/docs/Leetcode Solutions/173._binary_search_tree_iterator.md similarity index 100% rename from docs/173._binary_search_tree_iterator.md rename to docs/Leetcode Solutions/173._binary_search_tree_iterator.md diff --git a/docs/189._rotate_array.md b/docs/Leetcode Solutions/189._rotate_array.md similarity index 100% rename from docs/189._rotate_array.md rename to docs/Leetcode Solutions/189._rotate_array.md diff --git a/docs/191._number_of_1_bits.md b/docs/Leetcode Solutions/191._number_of_1_bits.md similarity index 100% rename from docs/191._number_of_1_bits.md rename to docs/Leetcode Solutions/191._number_of_1_bits.md diff --git a/docs/198._house_robber.md b/docs/Leetcode Solutions/198._house_robber.md similarity index 100% rename from docs/198._house_robber.md rename to docs/Leetcode Solutions/198._house_robber.md diff --git a/docs/199._binary_tree_right_side_view.md b/docs/Leetcode Solutions/199._binary_tree_right_side_view.md similarity index 100% rename from docs/199._binary_tree_right_side_view.md rename to docs/Leetcode Solutions/199._binary_tree_right_side_view.md diff --git a/docs/200._number_of_islands.md b/docs/Leetcode Solutions/200._number_of_islands.md similarity index 100% rename from docs/200._number_of_islands.md rename to docs/Leetcode Solutions/200._number_of_islands.md diff --git a/docs/203._remove_linked_list_elements.md b/docs/Leetcode Solutions/203._remove_linked_list_elements.md similarity index 100% rename from docs/203._remove_linked_list_elements.md rename to docs/Leetcode Solutions/203._remove_linked_list_elements.md diff --git a/docs/204._count_primes.md b/docs/Leetcode Solutions/204._count_primes.md similarity index 100% rename from docs/204._count_primes.md rename to docs/Leetcode Solutions/204._count_primes.md diff --git a/docs/205._isomorphic_strings.md b/docs/Leetcode Solutions/205._isomorphic_strings.md similarity index 100% rename from docs/205._isomorphic_strings.md rename to docs/Leetcode Solutions/205._isomorphic_strings.md diff --git a/docs/206._reverse_linked_list.md b/docs/Leetcode Solutions/206._reverse_linked_list.md similarity index 100% rename from docs/206._reverse_linked_list.md rename to docs/Leetcode Solutions/206._reverse_linked_list.md diff --git a/docs/207._course_schedule.md b/docs/Leetcode Solutions/207._course_schedule.md similarity index 100% rename from docs/207._course_schedule.md rename to docs/Leetcode Solutions/207._course_schedule.md diff --git a/docs/208._implement_trie_(prefix_tree).md b/docs/Leetcode Solutions/208._implement_trie_(prefix_tree).md similarity index 100% rename from docs/208._implement_trie_(prefix_tree).md rename to docs/Leetcode Solutions/208._implement_trie_(prefix_tree).md diff --git a/docs/210._course_schedule_ii.md b/docs/Leetcode Solutions/210._course_schedule_ii.md similarity index 100% rename from docs/210._course_schedule_ii.md rename to docs/Leetcode Solutions/210._course_schedule_ii.md diff --git a/docs/211. Add and Search Word - Data structure design.md b/docs/Leetcode Solutions/211. Add and Search Word - Data structure design.md similarity index 100% rename from docs/211. Add and Search Word - Data structure design.md rename to docs/Leetcode Solutions/211. Add and Search Word - Data structure design.md diff --git a/docs/213._house_robber_ii.md b/docs/Leetcode Solutions/213._house_robber_ii.md similarity index 100% rename from docs/213._house_robber_ii.md rename to docs/Leetcode Solutions/213._house_robber_ii.md diff --git a/docs/216._combination_sum_iii.md b/docs/Leetcode Solutions/216._combination_sum_iii.md similarity index 100% rename from docs/216._combination_sum_iii.md rename to docs/Leetcode Solutions/216._combination_sum_iii.md diff --git a/docs/217._contains_duplicate.md b/docs/Leetcode Solutions/217._contains_duplicate.md similarity index 100% rename from docs/217._contains_duplicate.md rename to docs/Leetcode Solutions/217._contains_duplicate.md diff --git a/docs/218._The _Skyline_Problem .md b/docs/Leetcode Solutions/218._The _Skyline_Problem .md similarity index 100% rename from docs/218._The _Skyline_Problem .md rename to docs/Leetcode Solutions/218._The _Skyline_Problem .md diff --git a/docs/219._contains_duplicate_ii.md b/docs/Leetcode Solutions/219._contains_duplicate_ii.md similarity index 100% rename from docs/219._contains_duplicate_ii.md rename to docs/Leetcode Solutions/219._contains_duplicate_ii.md diff --git a/docs/221._maximal_square.md b/docs/Leetcode Solutions/221._maximal_square.md similarity index 100% rename from docs/221._maximal_square.md rename to docs/Leetcode Solutions/221._maximal_square.md diff --git a/docs/222._count_complete_tree_nodes.md b/docs/Leetcode Solutions/222._count_complete_tree_nodes.md similarity index 100% rename from docs/222._count_complete_tree_nodes.md rename to docs/Leetcode Solutions/222._count_complete_tree_nodes.md diff --git a/docs/223._rectangle_area.md b/docs/Leetcode Solutions/223._rectangle_area.md similarity index 100% rename from docs/223._rectangle_area.md rename to docs/Leetcode Solutions/223._rectangle_area.md diff --git a/docs/224. Basic Calculator .md b/docs/Leetcode Solutions/224. Basic Calculator .md similarity index 100% rename from docs/224. Basic Calculator .md rename to docs/Leetcode Solutions/224. Basic Calculator .md diff --git a/docs/225._implement_stack_using_queues.md b/docs/Leetcode Solutions/225._implement_stack_using_queues.md similarity index 100% rename from docs/225._implement_stack_using_queues.md rename to docs/Leetcode Solutions/225._implement_stack_using_queues.md diff --git a/docs/226._invert_binary_tree.md b/docs/Leetcode Solutions/226._invert_binary_tree.md similarity index 100% rename from docs/226._invert_binary_tree.md rename to docs/Leetcode Solutions/226._invert_binary_tree.md diff --git a/docs/227._basic_calculator_ii.md b/docs/Leetcode Solutions/227._basic_calculator_ii.md similarity index 100% rename from docs/227._basic_calculator_ii.md rename to docs/Leetcode Solutions/227._basic_calculator_ii.md diff --git a/docs/228._summary_ranges.md b/docs/Leetcode Solutions/228._summary_ranges.md similarity index 100% rename from docs/228._summary_ranges.md rename to docs/Leetcode Solutions/228._summary_ranges.md diff --git a/docs/229._majority_element_ii.md b/docs/Leetcode Solutions/229._majority_element_ii.md similarity index 100% rename from docs/229._majority_element_ii.md rename to docs/Leetcode Solutions/229._majority_element_ii.md diff --git a/docs/230._kth_smallest_element_in_a_bst.md b/docs/Leetcode Solutions/230._kth_smallest_element_in_a_bst.md similarity index 100% rename from docs/230._kth_smallest_element_in_a_bst.md rename to docs/Leetcode Solutions/230._kth_smallest_element_in_a_bst.md diff --git a/docs/231. _Power_of_Two.md b/docs/Leetcode Solutions/231. _Power_of_Two.md similarity index 100% rename from docs/231. _Power_of_Two.md rename to docs/Leetcode Solutions/231. _Power_of_Two.md diff --git a/docs/232._implement_queue_using_stacks.md b/docs/Leetcode Solutions/232._implement_queue_using_stacks.md similarity index 100% rename from docs/232._implement_queue_using_stacks.md rename to docs/Leetcode Solutions/232._implement_queue_using_stacks.md diff --git a/docs/234._palindrome_linked_list.md b/docs/Leetcode Solutions/234._palindrome_linked_list.md similarity index 100% rename from docs/234._palindrome_linked_list.md rename to docs/Leetcode Solutions/234._palindrome_linked_list.md diff --git a/docs/235._lowest_common_ancestor_of_a_binary_search_tree.md b/docs/Leetcode Solutions/235._lowest_common_ancestor_of_a_binary_search_tree.md similarity index 100% rename from docs/235._lowest_common_ancestor_of_a_binary_search_tree.md rename to docs/Leetcode Solutions/235._lowest_common_ancestor_of_a_binary_search_tree.md diff --git a/docs/236._lowest_common_ancestor_of_a_binary_tree.md b/docs/Leetcode Solutions/236._lowest_common_ancestor_of_a_binary_tree.md similarity index 100% rename from docs/236._lowest_common_ancestor_of_a_binary_tree.md rename to docs/Leetcode Solutions/236._lowest_common_ancestor_of_a_binary_tree.md diff --git a/docs/237._delete_node_in_a_linked_list.md b/docs/Leetcode Solutions/237._delete_node_in_a_linked_list.md similarity index 100% rename from docs/237._delete_node_in_a_linked_list.md rename to docs/Leetcode Solutions/237._delete_node_in_a_linked_list.md diff --git a/docs/238._product_of_array_except_self.md b/docs/Leetcode Solutions/238._product_of_array_except_self.md similarity index 100% rename from docs/238._product_of_array_except_self.md rename to docs/Leetcode Solutions/238._product_of_array_except_self.md diff --git a/docs/240._search_a_2d_matrix_ii.md b/docs/Leetcode Solutions/240._search_a_2d_matrix_ii.md similarity index 100% rename from docs/240._search_a_2d_matrix_ii.md rename to docs/Leetcode Solutions/240._search_a_2d_matrix_ii.md diff --git a/docs/242._valid_anagram.md b/docs/Leetcode Solutions/242._valid_anagram.md similarity index 100% rename from docs/242._valid_anagram.md rename to docs/Leetcode Solutions/242._valid_anagram.md diff --git a/docs/252. Meeting Rooms.md b/docs/Leetcode Solutions/252. Meeting Rooms.md similarity index 100% rename from docs/252. Meeting Rooms.md rename to docs/Leetcode Solutions/252. Meeting Rooms.md diff --git a/docs/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md b/docs/Leetcode Solutions/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md similarity index 100% rename from docs/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md rename to docs/Leetcode Solutions/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md diff --git a/docs/256. Paint House.md b/docs/Leetcode Solutions/256. Paint House.md similarity index 100% rename from docs/256. Paint House.md rename to docs/Leetcode Solutions/256. Paint House.md diff --git a/docs/257._binary_tree_paths.md b/docs/Leetcode Solutions/257._binary_tree_paths.md similarity index 100% rename from docs/257._binary_tree_paths.md rename to docs/Leetcode Solutions/257._binary_tree_paths.md diff --git a/docs/258_ Add_Digits.md b/docs/Leetcode Solutions/258_ Add_Digits.md similarity index 100% rename from docs/258_ Add_Digits.md rename to docs/Leetcode Solutions/258_ Add_Digits.md diff --git a/docs/261. Graph Valid Tree.md b/docs/Leetcode Solutions/261. Graph Valid Tree.md similarity index 100% rename from docs/261. Graph Valid Tree.md rename to docs/Leetcode Solutions/261. Graph Valid Tree.md diff --git a/docs/263._ugly_number.md b/docs/Leetcode Solutions/263._ugly_number.md similarity index 100% rename from docs/263._ugly_number.md rename to docs/Leetcode Solutions/263._ugly_number.md diff --git a/docs/264._ugly_number_ii.md b/docs/Leetcode Solutions/264._ugly_number_ii.md similarity index 100% rename from docs/264._ugly_number_ii.md rename to docs/Leetcode Solutions/264._ugly_number_ii.md diff --git a/docs/265. Paint House II.md b/docs/Leetcode Solutions/265. Paint House II.md similarity index 100% rename from docs/265. Paint House II.md rename to docs/Leetcode Solutions/265. Paint House II.md diff --git a/docs/266. Palindrome Permutation.md b/docs/Leetcode Solutions/266. Palindrome Permutation.md similarity index 100% rename from docs/266. Palindrome Permutation.md rename to docs/Leetcode Solutions/266. Palindrome Permutation.md diff --git a/docs/267. Palindrome Permutation II.md b/docs/Leetcode Solutions/267. Palindrome Permutation II.md similarity index 100% rename from docs/267. Palindrome Permutation II.md rename to docs/Leetcode Solutions/267. Palindrome Permutation II.md diff --git a/docs/268._missing_number.md b/docs/Leetcode Solutions/268._missing_number.md similarity index 100% rename from docs/268._missing_number.md rename to docs/Leetcode Solutions/268._missing_number.md diff --git a/docs/270. Closest Binary Search Tree Value.md b/docs/Leetcode Solutions/270. Closest Binary Search Tree Value.md similarity index 100% rename from docs/270. Closest Binary Search Tree Value.md rename to docs/Leetcode Solutions/270. Closest Binary Search Tree Value.md diff --git a/docs/276. Paint Fence.md b/docs/Leetcode Solutions/276. Paint Fence.md similarity index 100% rename from docs/276. Paint Fence.md rename to docs/Leetcode Solutions/276. Paint Fence.md diff --git a/docs/277. Find the Celebrity.md b/docs/Leetcode Solutions/277. Find the Celebrity.md similarity index 100% rename from docs/277. Find the Celebrity.md rename to docs/Leetcode Solutions/277. Find the Celebrity.md diff --git a/docs/278._First_Bad _Version.md b/docs/Leetcode Solutions/278._First_Bad _Version.md similarity index 100% rename from docs/278._First_Bad _Version.md rename to docs/Leetcode Solutions/278._First_Bad _Version.md diff --git a/docs/279._perfect_squares.md b/docs/Leetcode Solutions/279._perfect_squares.md similarity index 100% rename from docs/279._perfect_squares.md rename to docs/Leetcode Solutions/279._perfect_squares.md diff --git a/docs/280._Wiggle_Sort.md b/docs/Leetcode Solutions/280._Wiggle_Sort.md similarity index 100% rename from docs/280._Wiggle_Sort.md rename to docs/Leetcode Solutions/280._Wiggle_Sort.md diff --git a/docs/283._move_zeroes.md b/docs/Leetcode Solutions/283._move_zeroes.md similarity index 100% rename from docs/283._move_zeroes.md rename to docs/Leetcode Solutions/283._move_zeroes.md diff --git a/docs/285._inorder_successor_in_bst.md b/docs/Leetcode Solutions/285._inorder_successor_in_bst.md similarity index 100% rename from docs/285._inorder_successor_in_bst.md rename to docs/Leetcode Solutions/285._inorder_successor_in_bst.md diff --git a/docs/286. Walls and Gates.md b/docs/Leetcode Solutions/286. Walls and Gates.md similarity index 100% rename from docs/286. Walls and Gates.md rename to docs/Leetcode Solutions/286. Walls and Gates.md diff --git a/docs/289._game_of_life.md b/docs/Leetcode Solutions/289._game_of_life.md similarity index 100% rename from docs/289._game_of_life.md rename to docs/Leetcode Solutions/289._game_of_life.md diff --git a/docs/290._word_pattern.md b/docs/Leetcode Solutions/290._word_pattern.md similarity index 100% rename from docs/290._word_pattern.md rename to docs/Leetcode Solutions/290._word_pattern.md diff --git a/docs/292._nim_game.md b/docs/Leetcode Solutions/292._nim_game.md similarity index 100% rename from docs/292._nim_game.md rename to docs/Leetcode Solutions/292._nim_game.md diff --git a/docs/296. Best Meeting Point.md b/docs/Leetcode Solutions/296. Best Meeting Point.md similarity index 100% rename from docs/296. Best Meeting Point.md rename to docs/Leetcode Solutions/296. Best Meeting Point.md diff --git a/docs/298. Binary Tree Longest Consecutive Sequence.md b/docs/Leetcode Solutions/298. Binary Tree Longest Consecutive Sequence.md similarity index 100% rename from docs/298. Binary Tree Longest Consecutive Sequence.md rename to docs/Leetcode Solutions/298. Binary Tree Longest Consecutive Sequence.md diff --git a/docs/299._bulls_and_cows.md b/docs/Leetcode Solutions/299._bulls_and_cows.md similarity index 100% rename from docs/299._bulls_and_cows.md rename to docs/Leetcode Solutions/299._bulls_and_cows.md diff --git a/docs/300._longest_increasing_subsequence.md b/docs/Leetcode Solutions/300._longest_increasing_subsequence.md similarity index 100% rename from docs/300._longest_increasing_subsequence.md rename to docs/Leetcode Solutions/300._longest_increasing_subsequence.md diff --git a/docs/303._range_sum_query_-_immutable.md b/docs/Leetcode Solutions/303._range_sum_query_-_immutable.md similarity index 100% rename from docs/303._range_sum_query_-_immutable.md rename to docs/Leetcode Solutions/303._range_sum_query_-_immutable.md diff --git a/docs/316._Remove_Duplicate_Letters.md b/docs/Leetcode Solutions/316._Remove_Duplicate_Letters.md similarity index 100% rename from docs/316._Remove_Duplicate_Letters.md rename to docs/Leetcode Solutions/316._Remove_Duplicate_Letters.md diff --git a/docs/319._Bulb_Switcher.md b/docs/Leetcode Solutions/319._Bulb_Switcher.md similarity index 100% rename from docs/319._Bulb_Switcher.md rename to docs/Leetcode Solutions/319._Bulb_Switcher.md diff --git a/docs/322. Coin Change.md b/docs/Leetcode Solutions/322. Coin Change.md similarity index 100% rename from docs/322. Coin Change.md rename to docs/Leetcode Solutions/322. Coin Change.md diff --git a/docs/323. Number of Connected Components in an Undirected Graph.md b/docs/Leetcode Solutions/323. Number of Connected Components in an Undirected Graph.md similarity index 100% rename from docs/323. Number of Connected Components in an Undirected Graph.md rename to docs/Leetcode Solutions/323. Number of Connected Components in an Undirected Graph.md diff --git a/docs/324._Wiggle_Sort_II.md b/docs/Leetcode Solutions/324._Wiggle_Sort_II.md similarity index 100% rename from docs/324._Wiggle_Sort_II.md rename to docs/Leetcode Solutions/324._Wiggle_Sort_II.md diff --git a/docs/326._power_of_three.md b/docs/Leetcode Solutions/326._power_of_three.md similarity index 100% rename from docs/326._power_of_three.md rename to docs/Leetcode Solutions/326._power_of_three.md diff --git a/docs/328._odd_even_linked_list.md b/docs/Leetcode Solutions/328._odd_even_linked_list.md similarity index 100% rename from docs/328._odd_even_linked_list.md rename to docs/Leetcode Solutions/328._odd_even_linked_list.md diff --git a/docs/334._increasing_triplet_subsequence.md b/docs/Leetcode Solutions/334._increasing_triplet_subsequence.md similarity index 100% rename from docs/334._increasing_triplet_subsequence.md rename to docs/Leetcode Solutions/334._increasing_triplet_subsequence.md diff --git a/docs/337._house_robber_iii.md b/docs/Leetcode Solutions/337._house_robber_iii.md similarity index 100% rename from docs/337._house_robber_iii.md rename to docs/Leetcode Solutions/337._house_robber_iii.md diff --git a/docs/338. Counting Bits.md b/docs/Leetcode Solutions/338. Counting Bits.md similarity index 100% rename from docs/338. Counting Bits.md rename to docs/Leetcode Solutions/338. Counting Bits.md diff --git a/docs/339. Nested List Weight Sum.md b/docs/Leetcode Solutions/339. Nested List Weight Sum.md similarity index 100% rename from docs/339. Nested List Weight Sum.md rename to docs/Leetcode Solutions/339. Nested List Weight Sum.md diff --git a/docs/341._Flatten_Nested_List_Iterator.md b/docs/Leetcode Solutions/341._Flatten_Nested_List_Iterator.md similarity index 100% rename from docs/341._Flatten_Nested_List_Iterator.md rename to docs/Leetcode Solutions/341._Flatten_Nested_List_Iterator.md diff --git a/docs/342._Power_of_Four.md b/docs/Leetcode Solutions/342._Power_of_Four.md similarity index 100% rename from docs/342._Power_of_Four.md rename to docs/Leetcode Solutions/342._Power_of_Four.md diff --git a/docs/344._reverse_string.md b/docs/Leetcode Solutions/344._reverse_string.md similarity index 100% rename from docs/344._reverse_string.md rename to docs/Leetcode Solutions/344._reverse_string.md diff --git a/docs/345._Reverse_Vowels_of_a_String.md b/docs/Leetcode Solutions/345._Reverse_Vowels_of_a_String.md similarity index 100% rename from docs/345._Reverse_Vowels_of_a_String.md rename to docs/Leetcode Solutions/345._Reverse_Vowels_of_a_String.md diff --git a/docs/349._intersection_of_two_arrays.md b/docs/Leetcode Solutions/349._intersection_of_two_arrays.md similarity index 100% rename from docs/349._intersection_of_two_arrays.md rename to docs/Leetcode Solutions/349._intersection_of_two_arrays.md diff --git a/docs/350._intersection_of_two_arrays_ii.md b/docs/Leetcode Solutions/350._intersection_of_two_arrays_ii.md similarity index 100% rename from docs/350._intersection_of_two_arrays_ii.md rename to docs/Leetcode Solutions/350._intersection_of_two_arrays_ii.md diff --git a/docs/353. Design Snake Game.md b/docs/Leetcode Solutions/353. Design Snake Game.md similarity index 100% rename from docs/353. Design Snake Game.md rename to docs/Leetcode Solutions/353. Design Snake Game.md diff --git a/docs/364. Nested List Weight Sum II.md b/docs/Leetcode Solutions/364. Nested List Weight Sum II.md similarity index 100% rename from docs/364. Nested List Weight Sum II.md rename to docs/Leetcode Solutions/364. Nested List Weight Sum II.md diff --git a/docs/366. Find Leaves of Binary Tree.md b/docs/Leetcode Solutions/366. Find Leaves of Binary Tree.md similarity index 100% rename from docs/366. Find Leaves of Binary Tree.md rename to docs/Leetcode Solutions/366. Find Leaves of Binary Tree.md diff --git a/docs/367._valid_perfect_square.md b/docs/Leetcode Solutions/367._valid_perfect_square.md similarity index 100% rename from docs/367._valid_perfect_square.md rename to docs/Leetcode Solutions/367._valid_perfect_square.md diff --git a/docs/369.Plus One Linked List.md b/docs/Leetcode Solutions/369.Plus One Linked List.md similarity index 100% rename from docs/369.Plus One Linked List.md rename to docs/Leetcode Solutions/369.Plus One Linked List.md diff --git a/docs/371._sum_of_two_integers.md b/docs/Leetcode Solutions/371._sum_of_two_integers.md similarity index 100% rename from docs/371._sum_of_two_integers.md rename to docs/Leetcode Solutions/371._sum_of_two_integers.md diff --git a/docs/374._Guess_Number_Higher_or_Lower.md b/docs/Leetcode Solutions/374._Guess_Number_Higher_or_Lower.md similarity index 100% rename from docs/374._Guess_Number_Higher_or_Lower.md rename to docs/Leetcode Solutions/374._Guess_Number_Higher_or_Lower.md diff --git a/docs/377._combination_sum_iv.md b/docs/Leetcode Solutions/377._combination_sum_iv.md similarity index 100% rename from docs/377._combination_sum_iv.md rename to docs/Leetcode Solutions/377._combination_sum_iv.md diff --git a/docs/378._kth_smallest_element_in_a_sorted_matrix.md b/docs/Leetcode Solutions/378._kth_smallest_element_in_a_sorted_matrix.md similarity index 100% rename from docs/378._kth_smallest_element_in_a_sorted_matrix.md rename to docs/Leetcode Solutions/378._kth_smallest_element_in_a_sorted_matrix.md diff --git a/docs/380. Insert Delete GetRandom O(1).md b/docs/Leetcode Solutions/380. Insert Delete GetRandom O(1).md similarity index 100% rename from docs/380. Insert Delete GetRandom O(1).md rename to docs/Leetcode Solutions/380. Insert Delete GetRandom O(1).md diff --git a/docs/381. Insert Delete GetRandom O(1) - Duplicates allowed.md b/docs/Leetcode Solutions/381. Insert Delete GetRandom O(1) - Duplicates allowed.md similarity index 100% rename from docs/381. Insert Delete GetRandom O(1) - Duplicates allowed.md rename to docs/Leetcode Solutions/381. Insert Delete GetRandom O(1) - Duplicates allowed.md diff --git a/docs/382._linked_list_random_node.md b/docs/Leetcode Solutions/382._linked_list_random_node.md similarity index 100% rename from docs/382._linked_list_random_node.md rename to docs/Leetcode Solutions/382._linked_list_random_node.md diff --git a/docs/383._ransom_note.md b/docs/Leetcode Solutions/383._ransom_note.md similarity index 100% rename from docs/383._ransom_note.md rename to docs/Leetcode Solutions/383._ransom_note.md diff --git a/docs/384. Shuffle an Array.md b/docs/Leetcode Solutions/384. Shuffle an Array.md similarity index 100% rename from docs/384. Shuffle an Array.md rename to docs/Leetcode Solutions/384. Shuffle an Array.md diff --git a/docs/387._first_unique_character_in_a_string.md b/docs/Leetcode Solutions/387._first_unique_character_in_a_string.md similarity index 100% rename from docs/387._first_unique_character_in_a_string.md rename to docs/Leetcode Solutions/387._first_unique_character_in_a_string.md diff --git a/docs/388._Longest_Absolute_File_Path.md b/docs/Leetcode Solutions/388._Longest_Absolute_File_Path.md similarity index 100% rename from docs/388._Longest_Absolute_File_Path.md rename to docs/Leetcode Solutions/388._Longest_Absolute_File_Path.md diff --git a/docs/389._find_the_difference.md b/docs/Leetcode Solutions/389._find_the_difference.md similarity index 100% rename from docs/389._find_the_difference.md rename to docs/Leetcode Solutions/389._find_the_difference.md diff --git a/docs/392._is_subsequence.md b/docs/Leetcode Solutions/392._is_subsequence.md similarity index 100% rename from docs/392._is_subsequence.md rename to docs/Leetcode Solutions/392._is_subsequence.md diff --git a/docs/394._decode_string.md b/docs/Leetcode Solutions/394._decode_string.md similarity index 100% rename from docs/394._decode_string.md rename to docs/Leetcode Solutions/394._decode_string.md diff --git a/docs/400. Nth Digit.md b/docs/Leetcode Solutions/400. Nth Digit.md similarity index 100% rename from docs/400. Nth Digit.md rename to docs/Leetcode Solutions/400. Nth Digit.md diff --git a/docs/401._binary_watch.md b/docs/Leetcode Solutions/401._binary_watch.md similarity index 100% rename from docs/401._binary_watch.md rename to docs/Leetcode Solutions/401._binary_watch.md diff --git a/docs/404._sum_of_left_leaves.md b/docs/Leetcode Solutions/404._sum_of_left_leaves.md similarity index 100% rename from docs/404._sum_of_left_leaves.md rename to docs/Leetcode Solutions/404._sum_of_left_leaves.md diff --git a/docs/405. Convert a Number to Hexadecimal.md b/docs/Leetcode Solutions/405. Convert a Number to Hexadecimal.md similarity index 100% rename from docs/405. Convert a Number to Hexadecimal.md rename to docs/Leetcode Solutions/405. Convert a Number to Hexadecimal.md diff --git a/docs/406._Queue_Reconstruction_by_Height.md b/docs/Leetcode Solutions/406._Queue_Reconstruction_by_Height.md similarity index 100% rename from docs/406._Queue_Reconstruction_by_Height.md rename to docs/Leetcode Solutions/406._Queue_Reconstruction_by_Height.md diff --git a/docs/412._fizz_buzz.md b/docs/Leetcode Solutions/412._fizz_buzz.md similarity index 100% rename from docs/412._fizz_buzz.md rename to docs/Leetcode Solutions/412._fizz_buzz.md diff --git a/docs/413. Arithmetic Slices.md b/docs/Leetcode Solutions/413. Arithmetic Slices.md similarity index 100% rename from docs/413. Arithmetic Slices.md rename to docs/Leetcode Solutions/413. Arithmetic Slices.md diff --git a/docs/414._third_maximum_number.md b/docs/Leetcode Solutions/414._third_maximum_number.md similarity index 100% rename from docs/414._third_maximum_number.md rename to docs/Leetcode Solutions/414._third_maximum_number.md diff --git a/docs/415._add_strings.md b/docs/Leetcode Solutions/415._add_strings.md similarity index 100% rename from docs/415._add_strings.md rename to docs/Leetcode Solutions/415._add_strings.md diff --git a/docs/416. Partition Equal Subset Sum.md b/docs/Leetcode Solutions/416. Partition Equal Subset Sum.md similarity index 100% rename from docs/416. Partition Equal Subset Sum.md rename to docs/Leetcode Solutions/416. Partition Equal Subset Sum.md diff --git a/docs/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md b/docs/Leetcode Solutions/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md similarity index 100% rename from docs/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md rename to docs/Leetcode Solutions/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md diff --git a/docs/422. Valid Word Square.md b/docs/Leetcode Solutions/422. Valid Word Square.md similarity index 100% rename from docs/422. Valid Word Square.md rename to docs/Leetcode Solutions/422. Valid Word Square.md diff --git a/docs/434._number_of_segments_in_a_string.md b/docs/Leetcode Solutions/434._number_of_segments_in_a_string.md similarity index 100% rename from docs/434._number_of_segments_in_a_string.md rename to docs/Leetcode Solutions/434._number_of_segments_in_a_string.md diff --git a/docs/437._path_sum_iii.md b/docs/Leetcode Solutions/437._path_sum_iii.md similarity index 100% rename from docs/437._path_sum_iii.md rename to docs/Leetcode Solutions/437._path_sum_iii.md diff --git a/docs/438._Find_All_Anagrams_in_a_String.md b/docs/Leetcode Solutions/438._Find_All_Anagrams_in_a_String.md similarity index 100% rename from docs/438._Find_All_Anagrams_in_a_String.md rename to docs/Leetcode Solutions/438._Find_All_Anagrams_in_a_String.md diff --git a/docs/439. Ternary Expression Parser.md b/docs/Leetcode Solutions/439. Ternary Expression Parser.md similarity index 100% rename from docs/439. Ternary Expression Parser.md rename to docs/Leetcode Solutions/439. Ternary Expression Parser.md diff --git a/docs/441._arranging_coins.md b/docs/Leetcode Solutions/441._arranging_coins.md similarity index 100% rename from docs/441._arranging_coins.md rename to docs/Leetcode Solutions/441._arranging_coins.md diff --git a/docs/448._Find_All_Numbers_Disappeared_in_an_Array.md b/docs/Leetcode Solutions/448._Find_All_Numbers_Disappeared_in_an_Array.md similarity index 100% rename from docs/448._Find_All_Numbers_Disappeared_in_an_Array.md rename to docs/Leetcode Solutions/448._Find_All_Numbers_Disappeared_in_an_Array.md diff --git a/docs/450. Delete Node in a BST.md b/docs/Leetcode Solutions/450. Delete Node in a BST.md similarity index 100% rename from docs/450. Delete Node in a BST.md rename to docs/Leetcode Solutions/450. Delete Node in a BST.md diff --git a/docs/453._Minimum_Moves_to_Equal_Array_Elements.md b/docs/Leetcode Solutions/453._Minimum_Moves_to_Equal_Array_Elements.md similarity index 100% rename from docs/453._Minimum_Moves_to_Equal_Array_Elements.md rename to docs/Leetcode Solutions/453._Minimum_Moves_to_Equal_Array_Elements.md diff --git a/docs/459._Repeated_Substring_Pattern.md b/docs/Leetcode Solutions/459._Repeated_Substring_Pattern.md similarity index 100% rename from docs/459._Repeated_Substring_Pattern.md rename to docs/Leetcode Solutions/459._Repeated_Substring_Pattern.md diff --git a/docs/461._Hamming Distance.md b/docs/Leetcode Solutions/461._Hamming Distance.md similarity index 100% rename from docs/461._Hamming Distance.md rename to docs/Leetcode Solutions/461._Hamming Distance.md diff --git a/docs/463._Island_Perimeter.md b/docs/Leetcode Solutions/463._Island_Perimeter.md similarity index 100% rename from docs/463._Island_Perimeter.md rename to docs/Leetcode Solutions/463._Island_Perimeter.md diff --git a/docs/467._Unique_Substrings_in_Wraparound_String.md b/docs/Leetcode Solutions/467._Unique_Substrings_in_Wraparound_String.md similarity index 100% rename from docs/467._Unique_Substrings_in_Wraparound_String.md rename to docs/Leetcode Solutions/467._Unique_Substrings_in_Wraparound_String.md diff --git a/docs/469. Convex Polygon.md b/docs/Leetcode Solutions/469. Convex Polygon.md similarity index 100% rename from docs/469. Convex Polygon.md rename to docs/Leetcode Solutions/469. Convex Polygon.md diff --git a/docs/476._Number_Complement.md b/docs/Leetcode Solutions/476._Number_Complement.md similarity index 100% rename from docs/476._Number_Complement.md rename to docs/Leetcode Solutions/476._Number_Complement.md diff --git a/docs/477._Total_Hamming_Distance.md b/docs/Leetcode Solutions/477._Total_Hamming_Distance.md similarity index 100% rename from docs/477._Total_Hamming_Distance.md rename to docs/Leetcode Solutions/477._Total_Hamming_Distance.md diff --git a/docs/485._Max_Consecutive_Ones.md b/docs/Leetcode Solutions/485._Max_Consecutive_Ones.md similarity index 100% rename from docs/485._Max_Consecutive_Ones.md rename to docs/Leetcode Solutions/485._Max_Consecutive_Ones.md diff --git a/docs/587._Erect_the_Fence .md b/docs/Leetcode Solutions/587._Erect_the_Fence .md similarity index 100% rename from docs/587._Erect_the_Fence .md rename to docs/Leetcode Solutions/587._Erect_the_Fence .md diff --git a/docs/599._Minimum_Index_Sum_of_Two_Lists.md b/docs/Leetcode Solutions/599._Minimum_Index_Sum_of_Two_Lists.md similarity index 100% rename from docs/599._Minimum_Index_Sum_of_Two_Lists.md rename to docs/Leetcode Solutions/599._Minimum_Index_Sum_of_Two_Lists.md diff --git a/docs/647._Palindromic_Substrings.md b/docs/Leetcode Solutions/647._Palindromic_Substrings.md similarity index 100% rename from docs/647._Palindromic_Substrings.md rename to docs/Leetcode Solutions/647._Palindromic_Substrings.md diff --git a/docs/657._Judge_Route_Circle.md b/docs/Leetcode Solutions/657._Judge_Route_Circle.md similarity index 100% rename from docs/657._Judge_Route_Circle.md rename to docs/Leetcode Solutions/657._Judge_Route_Circle.md diff --git a/docs/665._Non-decreasing_Array.md b/docs/Leetcode Solutions/665._Non-decreasing_Array.md similarity index 100% rename from docs/665._Non-decreasing_Array.md rename to docs/Leetcode Solutions/665._Non-decreasing_Array.md diff --git a/docs/672._Bulb_Switcher_II.md b/docs/Leetcode Solutions/672._Bulb_Switcher_II.md similarity index 100% rename from docs/672._Bulb_Switcher_II.md rename to docs/Leetcode Solutions/672._Bulb_Switcher_II.md diff --git a/docs/681._Next_Closest_Time.md b/docs/Leetcode Solutions/681._Next_Closest_Time.md similarity index 100% rename from docs/681._Next_Closest_Time.md rename to docs/Leetcode Solutions/681._Next_Closest_Time.md diff --git a/docs/682._Baseball_Game.md b/docs/Leetcode Solutions/682._Baseball_Game.md similarity index 100% rename from docs/682._Baseball_Game.md rename to docs/Leetcode Solutions/682._Baseball_Game.md diff --git a/docs/687._Longest_Univalue_Path.md b/docs/Leetcode Solutions/687._Longest_Univalue_Path.md similarity index 100% rename from docs/687._Longest_Univalue_Path.md rename to docs/Leetcode Solutions/687._Longest_Univalue_Path.md diff --git a/docs/740._delete_and_earn.md b/docs/Leetcode Solutions/740._delete_and_earn.md similarity index 100% rename from docs/740._delete_and_earn.md rename to docs/Leetcode Solutions/740._delete_and_earn.md diff --git a/docs/760._Find_Anagram_Mappings.md b/docs/Leetcode Solutions/760._Find_Anagram_Mappings.md similarity index 100% rename from docs/760._Find_Anagram_Mappings.md rename to docs/Leetcode Solutions/760._Find_Anagram_Mappings.md diff --git "a/others/Binary Search \344\270\215\346\230\223\345\206\231.md" "b/docs/Leetcode Solutions/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" similarity index 100% rename from "others/Binary Search \344\270\215\346\230\223\345\206\231.md" rename to "docs/Leetcode Solutions/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" diff --git a/others/Data Structure and Algorthim Review.md b/docs/Leetcode Solutions/Summarization/Data Structure and Algorthim Review.md similarity index 100% rename from others/Data Structure and Algorthim Review.md rename to docs/Leetcode Solutions/Summarization/Data Structure and Algorthim Review.md diff --git a/others/Dynamic Programming.md b/docs/Leetcode Solutions/Summarization/Dynamic Programming.md similarity index 100% rename from others/Dynamic Programming.md rename to docs/Leetcode Solutions/Summarization/Dynamic Programming.md diff --git "a/others/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" "b/docs/Leetcode Solutions/Summarization/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" similarity index 100% rename from "others/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" rename to "docs/Leetcode Solutions/Summarization/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" diff --git "a/others/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" "b/docs/Leetcode Solutions/Summarization/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" similarity index 100% rename from "others/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" rename to "docs/Leetcode Solutions/Summarization/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" diff --git "a/others/LinkedList\346\212\200\345\267\247.md" "b/docs/Leetcode Solutions/Summarization/LinkedList\346\212\200\345\267\247.md" similarity index 100% rename from "others/LinkedList\346\212\200\345\267\247.md" rename to "docs/Leetcode Solutions/Summarization/LinkedList\346\212\200\345\267\247.md" diff --git a/others/Maximal Square.pdf b/docs/Leetcode Solutions/Summarization/Maximal Square.pdf similarity index 100% rename from others/Maximal Square.pdf rename to docs/Leetcode Solutions/Summarization/Maximal Square.pdf diff --git "a/docs/SortingAlgorithm/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" "b/docs/Leetcode Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" similarity index 100% rename from "docs/SortingAlgorithm/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" rename to "docs/Leetcode Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" diff --git a/others/Range Sum Query 2D - Immutable.pdf b/docs/Leetcode Solutions/Summarization/Range Sum Query 2D - Immutable.pdf similarity index 100% rename from others/Range Sum Query 2D - Immutable.pdf rename to docs/Leetcode Solutions/Summarization/Range Sum Query 2D - Immutable.pdf diff --git a/others/Recusrion & BackTracking.md b/docs/Leetcode Solutions/Summarization/Recusrion & BackTracking.md similarity index 100% rename from others/Recusrion & BackTracking.md rename to docs/Leetcode Solutions/Summarization/Recusrion & BackTracking.md diff --git "a/others/backtracking\346\200\235\350\267\257.md" "b/docs/Leetcode Solutions/Summarization/backtracking\346\200\235\350\267\257.md" similarity index 100% rename from "others/backtracking\346\200\235\350\267\257.md" rename to "docs/Leetcode Solutions/Summarization/backtracking\346\200\235\350\267\257.md" diff --git "a/others/delete_node_in_a_linked_list\351\227\256\351\242\230.md" "b/docs/Leetcode Solutions/Summarization/delete_node_in_a_linked_list\351\227\256\351\242\230.md" similarity index 100% rename from "others/delete_node_in_a_linked_list\351\227\256\351\242\230.md" rename to "docs/Leetcode Solutions/Summarization/delete_node_in_a_linked_list\351\227\256\351\242\230.md" diff --git "a/others/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" "b/docs/Leetcode Solutions/Summarization/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" similarity index 100% rename from "others/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" rename to "docs/Leetcode Solutions/Summarization/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" diff --git "a/docs/SortingAlgorithm/python\347\232\204\345\220\204\347\247\215pass.md" "b/docs/Leetcode Solutions/Summarization/python\347\232\204\345\220\204\347\247\215pass.md" similarity index 100% rename from "docs/SortingAlgorithm/python\347\232\204\345\220\204\347\247\215pass.md" rename to "docs/Leetcode Solutions/Summarization/python\347\232\204\345\220\204\347\247\215pass.md" diff --git a/others/slide_windows_template.md b/docs/Leetcode Solutions/Summarization/slide_windows_template.md similarity index 100% rename from others/slide_windows_template.md rename to docs/Leetcode Solutions/Summarization/slide_windows_template.md diff --git "a/docs/SortingAlgorithm/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" "b/docs/Leetcode Solutions/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" similarity index 100% rename from "docs/SortingAlgorithm/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" rename to "docs/Leetcode Solutions/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" diff --git "a/others/\344\275\215\350\277\220\347\256\227.md" "b/docs/Leetcode Solutions/Summarization/\344\275\215\350\277\220\347\256\227.md" similarity index 100% rename from "others/\344\275\215\350\277\220\347\256\227.md" rename to "docs/Leetcode Solutions/Summarization/\344\275\215\350\277\220\347\256\227.md" diff --git "a/others/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" "b/docs/Leetcode Solutions/Summarization/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" similarity index 100% rename from "others/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" rename to "docs/Leetcode Solutions/Summarization/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" diff --git a/docs/SortingAlgorithm/README.md "b/docs/Leetcode Solutions/Summarization/\345\205\253\346\216\222\345\272\217.md" similarity index 100% rename from docs/SortingAlgorithm/README.md rename to "docs/Leetcode Solutions/Summarization/\345\205\253\346\216\222\345\272\217.md" diff --git "a/others/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" "b/docs/Leetcode Solutions/Summarization/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" similarity index 100% rename from "others/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" rename to "docs/Leetcode Solutions/Summarization/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" diff --git "a/others/\346\200\273\347\273\223.md" "b/docs/Leetcode Solutions/Summarization/\346\200\273\347\273\223.md" similarity index 100% rename from "others/\346\200\273\347\273\223.md" rename to "docs/Leetcode Solutions/Summarization/\346\200\273\347\273\223.md" diff --git "a/others/\347\273\204\345\220\210\351\227\256\351\242\230.md" "b/docs/Leetcode Solutions/Summarization/\347\273\204\345\220\210\351\227\256\351\242\230.md" similarity index 100% rename from "others/\347\273\204\345\220\210\351\227\256\351\242\230.md" rename to "docs/Leetcode Solutions/Summarization/\347\273\204\345\220\210\351\227\256\351\242\230.md" diff --git "a/others/\351\200\222\345\275\222_recursion.md" "b/docs/Leetcode Solutions/Summarization/\351\200\222\345\275\222_recursion.md" similarity index 100% rename from "others/\351\200\222\345\275\222_recursion.md" rename to "docs/Leetcode Solutions/Summarization/\351\200\222\345\275\222_recursion.md" diff --git a/src/py3.x/TreeRecursionIterator.py b/src/py3.x/TreeRecursionIterator.py new file mode 100644 index 000000000..ffb4be32f --- /dev/null +++ b/src/py3.x/TreeRecursionIterator.py @@ -0,0 +1,34 @@ +# coding:utf8 + +class Node(): + def __init__(self, value, left=None, right=None): + self.value = value + self.left = left + self.right = right + +def midRecusion(node): + if node is None: + return + midRecusion(node.left) + print node.value, + midRecusion(node.right) + +def midIterator(node): + stack = [] + while stack or node: + if node is not None: + stack.append(node) + node = node.left + else: + node = stack.pop(-1) + print node.value, + node = node.right + +if __name__ == "__main__": + node = Node("D", Node("B", Node("A"), Node("C")), Node("E", right=Node("G", left=Node("F")))) + + print('\n中序遍历<递归>:') + midRecusion(node) + + print('\n中序遍历<迭代>:') + midIterator(node) \ No newline at end of file diff --git a/src/py3.x/list2iteration.py b/src/py3.x/list2iteration.py new file mode 100644 index 000000000..145fd8335 --- /dev/null +++ b/src/py3.x/list2iteration.py @@ -0,0 +1,30 @@ +#!/usr/bin/python +# coding:utf8 +''' +迭代使用的是循环结构。 +递归使用的是选择结构。 +''' + +# 递归求解 +def calculate(l): + if len(l) <= 1: + return l[0] + value = calculate(l[1:]) + return 10**(len(l) - 1) * l[0] + value + + +# 迭代求解 +def calculate2(l): + result = 0 + while len(l) >= 1: + result += 10 ** (len(l)-1) * l[0] + l = l[1:] + return result + + +l1 = [1, 2, 3] +l2 = [4, 5] +sum = 0 +result = calculate(l1) + calculate(l2) +# result = calculate2(l1) + calculate2(l2) +print(result) From b697dd51d59e15c512c2c7d35ea215998f69b17d Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 13:21:21 -0500 Subject: [PATCH 0452/2496] Create README.md --- docs/Leetcode Solutions/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/Leetcode Solutions/README.md diff --git a/docs/Leetcode Solutions/README.md b/docs/Leetcode Solutions/README.md new file mode 100644 index 000000000..43df2acd7 --- /dev/null +++ b/docs/Leetcode Solutions/README.md @@ -0,0 +1 @@ +Leetcode solutions and summarizations! From fe52a5dd48b74976959af3c865b33811102b3b4f Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 13:21:43 -0500 Subject: [PATCH 0453/2496] Update README.md --- docs/Leetcode Solutions/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Leetcode Solutions/README.md b/docs/Leetcode Solutions/README.md index 43df2acd7..c477b8c84 100644 --- a/docs/Leetcode Solutions/README.md +++ b/docs/Leetcode Solutions/README.md @@ -1 +1 @@ -Leetcode solutions and summarizations! +# Leetcode solutions and summarizations! From 89cf8e95ab993161a7c8e866c3bf6ece920fe597 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 13:21:57 -0500 Subject: [PATCH 0454/2496] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f9547934f..75446ced7 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# LeetCode 面试题 +# Algorithms ## [八大排序算法](/docs/SortingAlgorithm/README.md) @@ -20,7 +20,7 @@ * [pocketgems 面试题](/docs/interview/pocketgems/pocketgems.md) * [WePay 面试题](/docs/interview/WePay/WePay.md) -## LeetCode算法题 +## LeetCode Solutions and Summarizations * [](docs/某类别/001._two_sum.md) * [](/docs/某类别/002._add_two_numbers.md) From 20482055a9e54c4bafe210fa7d66d4a63dc2dcee Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 13:23:23 -0500 Subject: [PATCH 0455/2496] Reconstructuring the whole repository, expanding the scope from Leetcode to Algorithms --- docs/Algorithm Templates/README.md | 314 +++++++++++++++++++++++++++++ images/README.md | 314 +++++++++++++++++++++++++++++ 2 files changed, 628 insertions(+) create mode 100644 docs/Algorithm Templates/README.md create mode 100644 images/README.md diff --git a/docs/Algorithm Templates/README.md b/docs/Algorithm Templates/README.md new file mode 100644 index 000000000..f9547934f --- /dev/null +++ b/docs/Algorithm Templates/README.md @@ -0,0 +1,314 @@ +# LeetCode 面试题 + +## [八大排序算法](/docs/SortingAlgorithm/README.md) + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | + +## 面试问答 + +* [Google面试题](/docs/interview/Google/Google.md) +* [pocketgems 面试题](/docs/interview/pocketgems/pocketgems.md) +* [WePay 面试题](/docs/interview/WePay/WePay.md) + +## LeetCode算法题 + +* [](docs/某类别/001._two_sum.md) +* [](/docs/某类别/002._add_two_numbers.md) +* [](/docs/某类别/003._longest_substring_without_repeating_characters.md) +* [](/docs/某类别/004._median_of_two_sorted_arrays.md) +* [](/docs/某类别/005._longest_palindromic_substring.md) +* [](/docs/某类别/007._Reverse_Integer.md) +* [](/docs/某类别/008._string_to_integer_(atoi).md) +* [](/docs/某类别/010._regular_expression_matching.md) +* [](/docs/某类别/011._container_with_most_water.md) +* [](/docs/某类别/012._Integer_to_Roman.md) +* [](/docs/某类别/013._Roman_to_Integer.md) +* [](/docs/某类别/014._longest_common_prefix.md) +* [](/docs/某类别/015._3sum.md) +* [](/docs/某类别/016._3sum_closest.md) +* [](/docs/某类别/017._letter_combinations_of_a_phone_number.md) +* [](/docs/某类别/018._4sum.md) +* [](/docs/某类别/019._remove_nth_node_from_end_of_list.md) +* [](/docs/某类别/020._valid_parentheses.md) +* [](/docs/某类别/021._merge_two_sorted_lists.md) +* [](/docs/某类别/022._generate_parentheses.md) +* [](/docs/某类别/023._merge_k_sorted_lists.md) +* [](/docs/某类别/024._swap_nodes_in_pairs.md) +* [](/docs/某类别/026._Remove_Duplicates_from_Sorted_Array.md) +* [](/docs/某类别/027._Remove_Element.md) +* [](/docs/某类别/028._implement_strstr().md) +* [](/docs/某类别/030._Substring_with_Concatenation_of_All_Words.md) +* [](/docs/某类别/031._next_permutation.md) +* [](/docs/某类别/033._search_in_rotated_sorted_array.md) +* [](/docs/某类别/034._SearchforaRange.md) +* [](/docs/某类别/035._search_insert_position.md) +* [](/docs/某类别/038._Count_and_Say.md) +* [](/docs/某类别/039._combination_sum.md) +* [](/docs/某类别/040._combination_sum_ii.md) +* [](/docs/某类别/042._trapping_rain_water.md) +* [](/docs/某类别/043._multiply_strings.md) +* [](/docs/某类别/044._wildcard_matching.md) +* [](/docs/某类别/045._Jump_Game_II.md) +* [](/docs/某类别/046._permutations.md) +* [](/docs/某类别/047._permutations_ii.md) +* [](/docs/某类别/048._rotate_image.md) +* [](/docs/某类别/049._group_anagrams_python.md) +* [](/docs/某类别/050._pow(x,_n).md) +* [](/docs/某类别/051._n-queens.md) +* [](/docs/某类别/052._n-queens_ii.md) +* [](/docs/某类别/053._maximum_subarray.md) +* [](/docs/某类别/054._spiral_matrix.md) +* [](/docs/某类别/055._jump_game.md) +* [](/docs/某类别/056._Merge_Intervals.md) +* [](/docs/某类别/058._length_of_last_word.md) +* [](/docs/某类别/059._spiral_matrix_ii.md) +* [](/docs/某类别/060._permutation_sequence.md) +* [](/docs/某类别/061._rotate_list.md) +* [](/docs/某类别/064._minimum_path_sum.md) +* [](/docs/某类别/065.unique_paths_ii.md) +* [](/docs/某类别/066._plus_one.md) +* [](/docs/某类别/067._add_binary.md) +* [](/docs/某类别/069._sqrt(x).md) +* [](/docs/某类别/070.ClimbingStairs.md) +* [](/docs/某类别/072._edit_distance.md) +* [](/docs/某类别/073.SetMatrixZeroes.md) +* [](/docs/某类别/074._search_a_2d_matrix.md) +* [](/docs/某类别/075._sort_colors.md) +* [](/docs/某类别/076._Minimum_Window_Substring.md) +* [](/docs/某类别/077._combinations.md) +* [](/docs/某类别/078.Subsets.md) +* [](/docs/某类别/079._word_search.md) +* [](/docs/某类别/082._remove_duplicates_from_sorted_list_ii.md) +* [](/docs/某类别/083._remove_duplicates_from_sorted_list.md) +* [](/docs/某类别/086._partition_list.md) +* [](/docs/某类别/088._merge_sorted_array.md) +* [](/docs/某类别/089._gray_code.md) +* [](/docs/某类别/090._subsets_ii.md) +* [](/docs/某类别/091._decode_ways.md) +* [](/docs/某类别/092._reverse_linked_list_ii.md) +* [](/docs/某类别/093._restore_ip_addresses.md) +* [](/docs/某类别/094._binary_tree_inorder_traversal.md) +* [](/docs/某类别/096._unique_binary_search_trees.md) +* [](/docs/某类别/098._validate_binary_search_tree.md) +* [](/docs/某类别/100._same_tree.md) +* [](/docs/某类别/101._symmetric_tree.md) +* [](/docs/某类别/102._binary_tree_level_order_traversal.md) +* [](/docs/某类别/103._binary_tree_zigzag_level_order_traversal.md) +* [](/docs/某类别/104._maximum_depth_of_binary_tree.md) +* [](/docs/某类别/105._construct_binary_tree_from_preorder_and_inorder_traversal.md) +* [](/docs/某类别/106._construct_binary_tree_from_inorder_and_postorder_traversal.md) +* [](/docs/某类别/107._binary_tree_level_order_traversal_ii.md) +* [](/docs/某类别/108._convert_sorted_array_to_binary_search_tree.md) +* [](/docs/某类别/109._convert_sorted_list_to_binary_search_tree.md) +* [](/docs/某类别/110._balanced_binary_tree.md) +* [](/docs/某类别/111._minimum_depth_of_binary_tree.md) +* [](/docs/某类别/112._path_sum.md) +* [](/docs/某类别/113._path_sum_ii.md) +* [](/docs/某类别/114._flatten_binary_tree_to_linked_list.md) +* [](/docs/某类别/116._populating_next_right_pointers_in_each_node.md) +* [](/docs/某类别/118._pascal's_triangle.md) +* [](/docs/某类别/119.Pascal'sTriangleII.md) +* [](/docs/某类别/120.Triangle.md) +* [](/docs/某类别/121._Best_Time_to_Buy_and_Sell_Stock.md) +* [](/docs/某类别/125._valid_palindrome.md) +* [](/docs/某类别/126.WordLadderII.md) +* [](/docs/某类别/127._word_ladder.md) +* [](/docs/某类别/128._Longest_Consecutive_Sequence.md) +* [](/docs/某类别/129._sum_root_to_leaf_numbers.md) +* [](/docs/某类别/130._surrounded_regions.md) +* [](/docs/某类别/131._palindrome_partitioning.md) +* [](/docs/某类别/133._clone_graph.md) +* [](/docs/某类别/136._single_number.md) +* [](/docs/某类别/139._word_break.md) +* [](/docs/某类别/140._word_break_ii.md) +* [](/docs/某类别/141._linked_list_cycle.md) +* [](/docs/某类别/142_Linked_List_Cycle_II.md) +* [](/docs/某类别/143._reorder_list.md) +* [](/docs/某类别/144._binary_tree_preorder_traversal.md) +* [](/docs/某类别/145._binary_tree_postorder_traversal.md) +* [](/docs/某类别/147._insertion_sort_list.md) +* [](/docs/某类别/148._sort_list.md) +* [](/docs/某类别/150._evaluate_reverse_polish_notation.md) +* [](/docs/某类别/151._reverse_words_in_a_string.md) +* [](/docs/某类别/152._maximum_product_subarray.md) +* [](/docs/某类别/153._find_minimum_in_rotated_sorted_array.md) +* [](/docs/某类别/155._min_stack.md) +* [](/docs/某类别/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md) +* [](/docs/某类别/160._intersection_of_two_linked_lists.md) +* [](/docs/某类别/162._find_peak_element.md) +* [](/docs/某类别/165._compare_version_numbers.md) +* [](/docs/某类别/166._Fraction_to_Recurring_Decimal.md) +* [](/docs/某类别/167._two_sum_ii_-_input_array_is_sorted.md) +* [](/docs/某类别/168._excel_sheet_column_title.md) +* [](/docs/某类别/169._majority_element.md) +* [](/docs/某类别/171._excel_sheet_column_number.md) +* [](/docs/某类别/173._binary_search_tree_iterator.md) +* [](/docs/某类别/189._rotate_array.md) +* [](/docs/某类别/191._number_of_1_bits.md) +* [](/docs/某类别/198._house_robber.md) +* [](/docs/某类别/199._binary_tree_right_side_view.md) +* [](/docs/某类别/200._number_of_islands.md) +* [](/docs/某类别/203._remove_linked_list_elements.md) +* [](/docs/某类别/204._count_primes.md) +* [](/docs/某类别/205._isomorphic_strings.md) +* [](/docs/某类别/206._reverse_linked_list.md) +* [](/docs/某类别/207._course_schedule.md) +* [](/docs/某类别/208._implement_trie_(prefix_tree).md) +* [](/docs/某类别/210._course_schedule_ii.md) +* [](/docs/某类别/211.AddandSearchWord-Datastructuredesign.md) +* [](/docs/某类别/213._house_robber_ii.md) +* [](/docs/某类别/216._combination_sum_iii.md) +* [](/docs/某类别/217._contains_duplicate.md) +* [](/docs/某类别/218._The_Skyline_Problem.md) +* [](/docs/某类别/219._contains_duplicate_ii.md) +* [](/docs/某类别/221._maximal_square.md) +* [](/docs/某类别/222._count_complete_tree_nodes.md) +* [](/docs/某类别/223._rectangle_area.md) +* [](/docs/某类别/224.BasicCalculator.md) +* [](/docs/某类别/225._implement_stack_using_queues.md) +* [](/docs/某类别/226._invert_binary_tree.md) +* [](/docs/某类别/227._basic_calculator_ii.md) +* [](/docs/某类别/228._summary_ranges.md) +* [](/docs/某类别/229._majority_element_ii.md) +* [](/docs/某类别/230._kth_smallest_element_in_a_bst.md) +* [](/docs/某类别/231._Power_of_Two.md) +* [](/docs/某类别/232._implement_queue_using_stacks.md) +* [](/docs/某类别/234._palindrome_linked_list.md) +* [](/docs/某类别/235._lowest_common_ancestor_of_a_binary_search_tree.md) +* [](/docs/某类别/236._lowest_common_ancestor_of_a_binary_tree.md) +* [](/docs/某类别/237._delete_node_in_a_linked_list.md) +* [](/docs/某类别/238._product_of_array_except_self.md) +* [](/docs/某类别/240._search_a_2d_matrix_ii.md) +* [](/docs/某类别/242._valid_anagram.md) +* [](/docs/某类别/252.MeetingRooms.md) +* [](/docs/某类别/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md) +* [](/docs/某类别/256.PaintHouse.md) +* [](/docs/某类别/257._binary_tree_paths.md) +* [](/docs/某类别/258_Add_Digits.md) +* [](/docs/某类别/261.GraphValidTree.md) +* [](/docs/某类别/263._ugly_number.md) +* [](/docs/某类别/264._ugly_number_ii.md) +* [](/docs/某类别/265.PaintHouseII.md) +* [](/docs/某类别/266.PalindromePermutation.md) +* [](/docs/某类别/267.PalindromePermutationII.md) +* [](/docs/某类别/268._missing_number.md) +* [](/docs/某类别/270.ClosestBinarySearchTreeValue.md) +* [](/docs/某类别/276.PaintFence.md) +* [](/docs/某类别/277.FindtheCelebrity.md) +* [](/docs/某类别/278._First_Bad_Version.md) +* [](/docs/某类别/279._perfect_squares.md) +* [](/docs/某类别/280._Wiggle_Sort.md) +* [](/docs/某类别/283._move_zeroes.md) +* [](/docs/某类别/285._inorder_successor_in_bst.md) +* [](/docs/某类别/286.WallsandGates.md) +* [](/docs/某类别/289._game_of_life.md) +* [](/docs/某类别/290._word_pattern.md) +* [](/docs/某类别/292._nim_game.md) +* [](/docs/某类别/296.BestMeetingPoint.md) +* [](/docs/某类别/298.BinaryTreeLongestConsecutiveSequence.md) +* [](/docs/某类别/299._bulls_and_cows.md) +* [](/docs/某类别/300._longest_increasing_subsequence.md) +* [](/docs/某类别/303._range_sum_query_-_immutable.md) +* [](/docs/某类别/316._Remove_Duplicate_Letters.md) +* [](/docs/某类别/319._Bulb_Switcher.md) +* [](/docs/某类别/322.CoinChange.md) +* [](/docs/某类别/323.NumberofConnectedComponentsinanUndirectedGraph.md) +* [](/docs/某类别/324._Wiggle_Sort_II.md) +* [](/docs/某类别/326._power_of_three.md) +* [](/docs/某类别/328._odd_even_linked_list.md) +* [](/docs/某类别/334._increasing_triplet_subsequence.md) +* [](/docs/某类别/337._house_robber_iii.md) +* [](/docs/某类别/338.CountingBits.md) +* [](/docs/某类别/339.NestedListWeightSum.md) +* [](/docs/某类别/341._Flatten_Nested_List_Iterator.md) +* [](/docs/某类别/342._Power_of_Four.md) +* [](/docs/某类别/344._reverse_string.md) +* [](/docs/某类别/345._Reverse_Vowels_of_a_String.md) +* [](/docs/某类别/349._intersection_of_two_arrays.md) +* [](/docs/某类别/350._intersection_of_two_arrays_ii.md) +* [](/docs/某类别/353.DesignSnakeGame.md) +* [](/docs/某类别/364.NestedListWeightSumII.md) +* [](/docs/某类别/366.FindLeavesofBinaryTree.md) +* [](/docs/某类别/367._valid_perfect_square.md) +* [](/docs/某类别/369.PlusOneLinkedList.md) +* [](/docs/某类别/371._sum_of_two_integers.md) +* [](/docs/某类别/374._Guess_Number_Higher_or_Lower.md) +* [](/docs/某类别/377._combination_sum_iv.md) +* [](/docs/某类别/378._kth_smallest_element_in_a_sorted_matrix.md) +* [](/docs/某类别/380.InsertDeleteGetRandomO(1).md) +* [](/docs/某类别/381.InsertDeleteGetRandomO(1)-Duplicatesallowed.md) +* [](/docs/某类别/382._linked_list_random_node.md) +* [](/docs/某类别/383._ransom_note.md) +* [](/docs/某类别/384.ShuffleanArray.md) +* [](/docs/某类别/387._first_unique_character_in_a_string.md) +* [](/docs/某类别/388._Longest_Absolute_File_Path.md) +* [](/docs/某类别/389._find_the_difference.md) +* [](/docs/某类别/392._is_subsequence.md) +* [](/docs/某类别/394._decode_string.md) +* [](/docs/某类别/400.NthDigit.md) +* [](/docs/某类别/401._binary_watch.md) +* [](/docs/某类别/404._sum_of_left_leaves.md) +* [](/docs/某类别/405.ConvertaNumbertoHexadecimal.md) +* [](/docs/某类别/406._Queue_Reconstruction_by_Height.md) +* [](/docs/某类别/412._fizz_buzz.md) +* [](/docs/某类别/413.ArithmeticSlices.md) +* [](/docs/某类别/414._third_maximum_number.md) +* [](/docs/某类别/415._add_strings.md) +* [](/docs/某类别/416.PartitionEqualSubsetSum.md) +* [](/docs/某类别/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md) +* [](/docs/某类别/422.ValidWordSquare.md) +* [](/docs/某类别/434._number_of_segments_in_a_string.md) +* [](/docs/某类别/437._path_sum_iii.md) +* [](/docs/某类别/438._Find_All_Anagrams_in_a_String.md) +* [](/docs/某类别/439.TernaryExpressionParser.md) +* [](/docs/某类别/441._arranging_coins.md) +* [](/docs/某类别/448._Find_All_Numbers_Disappeared_in_an_Array.md) +* [](/docs/某类别/450.DeleteNodeinaBST.md) +* [](/docs/某类别/453._Minimum_Moves_to_Equal_Array_Elements.md) +* [](/docs/某类别/459._Repeated_Substring_Pattern.md) +* [](/docs/某类别/461._HammingDistance.md) +* [](/docs/某类别/463._Island_Perimeter.md) +* [](/docs/某类别/467._Unique_Substrings_in_Wraparound_String.md) +* [](/docs/某类别/469.ConvexPolygon.md) +* [](/docs/某类别/476._Number_Complement.md) +* [](/docs/某类别/477._Total_Hamming_Distance.md) +* [](/docs/某类别/485._Max_Consecutive_Ones.md) +* [](/docs/某类别/587._Erect_the_Fence.md) +* [](/docs/某类别/599._Minimum_Index_Sum_of_Two_Lists.md) +* [](/docs/某类别/647._Palindromic_Substrings.md) +* [](/docs/某类别/657._Judge_Route_Circle.md) +* [](/docs/某类别/665._Non-decreasing_Array.md) +* [](/docs/某类别/672._Bulb_Switcher_II.md) +* [](/docs/某类别/681._Next_Closest_Time.md) +* [](/docs/某类别/682._Baseball_Game.md) +* [](/docs/某类别/687._Longest_Univalue_Path.md) +* [](/docs/某类别/740._delete_and_earn.md) +* [](/docs/某类别/760._Find_Anagram_Mappings.md) + +## 推荐的一些LeetCode网站 + +1. [KrisYu的GItuhub](https://github.com/KrisYu/LeetCode-CLRS-Python) +2. [kamyu104的Github](https://github.com/kamyu104/LeetCode) +3. [数据结构与算法/leetcode/lintcode题解](https://algorithm.yuanbin.me/zh-hans/) +4. [Leetcode 讨论区](https://discuss.leetcode.com/) +5. [visualgo算法可视化网站](https://visualgo.net/en) +6. [Data Structure Visualization](https://www.cs.usfca.edu/~galles/visualization/Algorithms.html) +7. [我的算法学习之路 - Lucida](http://zh.lucida.me/blog/on-learning-algorithms/) +8. [HiredInTech](https://www.hiredintech.com/) System Design 的总结特别适合入门 +9. [mitcc的Github](https://github.com/mitcc/AlgoSolutions) +10. [小土刀的面试刷题笔记](http://wdxtub.com/interview/14520594642530.html) + + +### Please note, this repository is inspired from [KrisYu](https://github.com/KrisYu/LeetCode-CLRS-Python). However, it has been modified, added and improved to reflect our knowledge, wisdom and effort. + + - 💪就是干! diff --git a/images/README.md b/images/README.md new file mode 100644 index 000000000..f9547934f --- /dev/null +++ b/images/README.md @@ -0,0 +1,314 @@ +# LeetCode 面试题 + +## [八大排序算法](/docs/SortingAlgorithm/README.md) + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | + +## 面试问答 + +* [Google面试题](/docs/interview/Google/Google.md) +* [pocketgems 面试题](/docs/interview/pocketgems/pocketgems.md) +* [WePay 面试题](/docs/interview/WePay/WePay.md) + +## LeetCode算法题 + +* [](docs/某类别/001._two_sum.md) +* [](/docs/某类别/002._add_two_numbers.md) +* [](/docs/某类别/003._longest_substring_without_repeating_characters.md) +* [](/docs/某类别/004._median_of_two_sorted_arrays.md) +* [](/docs/某类别/005._longest_palindromic_substring.md) +* [](/docs/某类别/007._Reverse_Integer.md) +* [](/docs/某类别/008._string_to_integer_(atoi).md) +* [](/docs/某类别/010._regular_expression_matching.md) +* [](/docs/某类别/011._container_with_most_water.md) +* [](/docs/某类别/012._Integer_to_Roman.md) +* [](/docs/某类别/013._Roman_to_Integer.md) +* [](/docs/某类别/014._longest_common_prefix.md) +* [](/docs/某类别/015._3sum.md) +* [](/docs/某类别/016._3sum_closest.md) +* [](/docs/某类别/017._letter_combinations_of_a_phone_number.md) +* [](/docs/某类别/018._4sum.md) +* [](/docs/某类别/019._remove_nth_node_from_end_of_list.md) +* [](/docs/某类别/020._valid_parentheses.md) +* [](/docs/某类别/021._merge_two_sorted_lists.md) +* [](/docs/某类别/022._generate_parentheses.md) +* [](/docs/某类别/023._merge_k_sorted_lists.md) +* [](/docs/某类别/024._swap_nodes_in_pairs.md) +* [](/docs/某类别/026._Remove_Duplicates_from_Sorted_Array.md) +* [](/docs/某类别/027._Remove_Element.md) +* [](/docs/某类别/028._implement_strstr().md) +* [](/docs/某类别/030._Substring_with_Concatenation_of_All_Words.md) +* [](/docs/某类别/031._next_permutation.md) +* [](/docs/某类别/033._search_in_rotated_sorted_array.md) +* [](/docs/某类别/034._SearchforaRange.md) +* [](/docs/某类别/035._search_insert_position.md) +* [](/docs/某类别/038._Count_and_Say.md) +* [](/docs/某类别/039._combination_sum.md) +* [](/docs/某类别/040._combination_sum_ii.md) +* [](/docs/某类别/042._trapping_rain_water.md) +* [](/docs/某类别/043._multiply_strings.md) +* [](/docs/某类别/044._wildcard_matching.md) +* [](/docs/某类别/045._Jump_Game_II.md) +* [](/docs/某类别/046._permutations.md) +* [](/docs/某类别/047._permutations_ii.md) +* [](/docs/某类别/048._rotate_image.md) +* [](/docs/某类别/049._group_anagrams_python.md) +* [](/docs/某类别/050._pow(x,_n).md) +* [](/docs/某类别/051._n-queens.md) +* [](/docs/某类别/052._n-queens_ii.md) +* [](/docs/某类别/053._maximum_subarray.md) +* [](/docs/某类别/054._spiral_matrix.md) +* [](/docs/某类别/055._jump_game.md) +* [](/docs/某类别/056._Merge_Intervals.md) +* [](/docs/某类别/058._length_of_last_word.md) +* [](/docs/某类别/059._spiral_matrix_ii.md) +* [](/docs/某类别/060._permutation_sequence.md) +* [](/docs/某类别/061._rotate_list.md) +* [](/docs/某类别/064._minimum_path_sum.md) +* [](/docs/某类别/065.unique_paths_ii.md) +* [](/docs/某类别/066._plus_one.md) +* [](/docs/某类别/067._add_binary.md) +* [](/docs/某类别/069._sqrt(x).md) +* [](/docs/某类别/070.ClimbingStairs.md) +* [](/docs/某类别/072._edit_distance.md) +* [](/docs/某类别/073.SetMatrixZeroes.md) +* [](/docs/某类别/074._search_a_2d_matrix.md) +* [](/docs/某类别/075._sort_colors.md) +* [](/docs/某类别/076._Minimum_Window_Substring.md) +* [](/docs/某类别/077._combinations.md) +* [](/docs/某类别/078.Subsets.md) +* [](/docs/某类别/079._word_search.md) +* [](/docs/某类别/082._remove_duplicates_from_sorted_list_ii.md) +* [](/docs/某类别/083._remove_duplicates_from_sorted_list.md) +* [](/docs/某类别/086._partition_list.md) +* [](/docs/某类别/088._merge_sorted_array.md) +* [](/docs/某类别/089._gray_code.md) +* [](/docs/某类别/090._subsets_ii.md) +* [](/docs/某类别/091._decode_ways.md) +* [](/docs/某类别/092._reverse_linked_list_ii.md) +* [](/docs/某类别/093._restore_ip_addresses.md) +* [](/docs/某类别/094._binary_tree_inorder_traversal.md) +* [](/docs/某类别/096._unique_binary_search_trees.md) +* [](/docs/某类别/098._validate_binary_search_tree.md) +* [](/docs/某类别/100._same_tree.md) +* [](/docs/某类别/101._symmetric_tree.md) +* [](/docs/某类别/102._binary_tree_level_order_traversal.md) +* [](/docs/某类别/103._binary_tree_zigzag_level_order_traversal.md) +* [](/docs/某类别/104._maximum_depth_of_binary_tree.md) +* [](/docs/某类别/105._construct_binary_tree_from_preorder_and_inorder_traversal.md) +* [](/docs/某类别/106._construct_binary_tree_from_inorder_and_postorder_traversal.md) +* [](/docs/某类别/107._binary_tree_level_order_traversal_ii.md) +* [](/docs/某类别/108._convert_sorted_array_to_binary_search_tree.md) +* [](/docs/某类别/109._convert_sorted_list_to_binary_search_tree.md) +* [](/docs/某类别/110._balanced_binary_tree.md) +* [](/docs/某类别/111._minimum_depth_of_binary_tree.md) +* [](/docs/某类别/112._path_sum.md) +* [](/docs/某类别/113._path_sum_ii.md) +* [](/docs/某类别/114._flatten_binary_tree_to_linked_list.md) +* [](/docs/某类别/116._populating_next_right_pointers_in_each_node.md) +* [](/docs/某类别/118._pascal's_triangle.md) +* [](/docs/某类别/119.Pascal'sTriangleII.md) +* [](/docs/某类别/120.Triangle.md) +* [](/docs/某类别/121._Best_Time_to_Buy_and_Sell_Stock.md) +* [](/docs/某类别/125._valid_palindrome.md) +* [](/docs/某类别/126.WordLadderII.md) +* [](/docs/某类别/127._word_ladder.md) +* [](/docs/某类别/128._Longest_Consecutive_Sequence.md) +* [](/docs/某类别/129._sum_root_to_leaf_numbers.md) +* [](/docs/某类别/130._surrounded_regions.md) +* [](/docs/某类别/131._palindrome_partitioning.md) +* [](/docs/某类别/133._clone_graph.md) +* [](/docs/某类别/136._single_number.md) +* [](/docs/某类别/139._word_break.md) +* [](/docs/某类别/140._word_break_ii.md) +* [](/docs/某类别/141._linked_list_cycle.md) +* [](/docs/某类别/142_Linked_List_Cycle_II.md) +* [](/docs/某类别/143._reorder_list.md) +* [](/docs/某类别/144._binary_tree_preorder_traversal.md) +* [](/docs/某类别/145._binary_tree_postorder_traversal.md) +* [](/docs/某类别/147._insertion_sort_list.md) +* [](/docs/某类别/148._sort_list.md) +* [](/docs/某类别/150._evaluate_reverse_polish_notation.md) +* [](/docs/某类别/151._reverse_words_in_a_string.md) +* [](/docs/某类别/152._maximum_product_subarray.md) +* [](/docs/某类别/153._find_minimum_in_rotated_sorted_array.md) +* [](/docs/某类别/155._min_stack.md) +* [](/docs/某类别/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md) +* [](/docs/某类别/160._intersection_of_two_linked_lists.md) +* [](/docs/某类别/162._find_peak_element.md) +* [](/docs/某类别/165._compare_version_numbers.md) +* [](/docs/某类别/166._Fraction_to_Recurring_Decimal.md) +* [](/docs/某类别/167._two_sum_ii_-_input_array_is_sorted.md) +* [](/docs/某类别/168._excel_sheet_column_title.md) +* [](/docs/某类别/169._majority_element.md) +* [](/docs/某类别/171._excel_sheet_column_number.md) +* [](/docs/某类别/173._binary_search_tree_iterator.md) +* [](/docs/某类别/189._rotate_array.md) +* [](/docs/某类别/191._number_of_1_bits.md) +* [](/docs/某类别/198._house_robber.md) +* [](/docs/某类别/199._binary_tree_right_side_view.md) +* [](/docs/某类别/200._number_of_islands.md) +* [](/docs/某类别/203._remove_linked_list_elements.md) +* [](/docs/某类别/204._count_primes.md) +* [](/docs/某类别/205._isomorphic_strings.md) +* [](/docs/某类别/206._reverse_linked_list.md) +* [](/docs/某类别/207._course_schedule.md) +* [](/docs/某类别/208._implement_trie_(prefix_tree).md) +* [](/docs/某类别/210._course_schedule_ii.md) +* [](/docs/某类别/211.AddandSearchWord-Datastructuredesign.md) +* [](/docs/某类别/213._house_robber_ii.md) +* [](/docs/某类别/216._combination_sum_iii.md) +* [](/docs/某类别/217._contains_duplicate.md) +* [](/docs/某类别/218._The_Skyline_Problem.md) +* [](/docs/某类别/219._contains_duplicate_ii.md) +* [](/docs/某类别/221._maximal_square.md) +* [](/docs/某类别/222._count_complete_tree_nodes.md) +* [](/docs/某类别/223._rectangle_area.md) +* [](/docs/某类别/224.BasicCalculator.md) +* [](/docs/某类别/225._implement_stack_using_queues.md) +* [](/docs/某类别/226._invert_binary_tree.md) +* [](/docs/某类别/227._basic_calculator_ii.md) +* [](/docs/某类别/228._summary_ranges.md) +* [](/docs/某类别/229._majority_element_ii.md) +* [](/docs/某类别/230._kth_smallest_element_in_a_bst.md) +* [](/docs/某类别/231._Power_of_Two.md) +* [](/docs/某类别/232._implement_queue_using_stacks.md) +* [](/docs/某类别/234._palindrome_linked_list.md) +* [](/docs/某类别/235._lowest_common_ancestor_of_a_binary_search_tree.md) +* [](/docs/某类别/236._lowest_common_ancestor_of_a_binary_tree.md) +* [](/docs/某类别/237._delete_node_in_a_linked_list.md) +* [](/docs/某类别/238._product_of_array_except_self.md) +* [](/docs/某类别/240._search_a_2d_matrix_ii.md) +* [](/docs/某类别/242._valid_anagram.md) +* [](/docs/某类别/252.MeetingRooms.md) +* [](/docs/某类别/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md) +* [](/docs/某类别/256.PaintHouse.md) +* [](/docs/某类别/257._binary_tree_paths.md) +* [](/docs/某类别/258_Add_Digits.md) +* [](/docs/某类别/261.GraphValidTree.md) +* [](/docs/某类别/263._ugly_number.md) +* [](/docs/某类别/264._ugly_number_ii.md) +* [](/docs/某类别/265.PaintHouseII.md) +* [](/docs/某类别/266.PalindromePermutation.md) +* [](/docs/某类别/267.PalindromePermutationII.md) +* [](/docs/某类别/268._missing_number.md) +* [](/docs/某类别/270.ClosestBinarySearchTreeValue.md) +* [](/docs/某类别/276.PaintFence.md) +* [](/docs/某类别/277.FindtheCelebrity.md) +* [](/docs/某类别/278._First_Bad_Version.md) +* [](/docs/某类别/279._perfect_squares.md) +* [](/docs/某类别/280._Wiggle_Sort.md) +* [](/docs/某类别/283._move_zeroes.md) +* [](/docs/某类别/285._inorder_successor_in_bst.md) +* [](/docs/某类别/286.WallsandGates.md) +* [](/docs/某类别/289._game_of_life.md) +* [](/docs/某类别/290._word_pattern.md) +* [](/docs/某类别/292._nim_game.md) +* [](/docs/某类别/296.BestMeetingPoint.md) +* [](/docs/某类别/298.BinaryTreeLongestConsecutiveSequence.md) +* [](/docs/某类别/299._bulls_and_cows.md) +* [](/docs/某类别/300._longest_increasing_subsequence.md) +* [](/docs/某类别/303._range_sum_query_-_immutable.md) +* [](/docs/某类别/316._Remove_Duplicate_Letters.md) +* [](/docs/某类别/319._Bulb_Switcher.md) +* [](/docs/某类别/322.CoinChange.md) +* [](/docs/某类别/323.NumberofConnectedComponentsinanUndirectedGraph.md) +* [](/docs/某类别/324._Wiggle_Sort_II.md) +* [](/docs/某类别/326._power_of_three.md) +* [](/docs/某类别/328._odd_even_linked_list.md) +* [](/docs/某类别/334._increasing_triplet_subsequence.md) +* [](/docs/某类别/337._house_robber_iii.md) +* [](/docs/某类别/338.CountingBits.md) +* [](/docs/某类别/339.NestedListWeightSum.md) +* [](/docs/某类别/341._Flatten_Nested_List_Iterator.md) +* [](/docs/某类别/342._Power_of_Four.md) +* [](/docs/某类别/344._reverse_string.md) +* [](/docs/某类别/345._Reverse_Vowels_of_a_String.md) +* [](/docs/某类别/349._intersection_of_two_arrays.md) +* [](/docs/某类别/350._intersection_of_two_arrays_ii.md) +* [](/docs/某类别/353.DesignSnakeGame.md) +* [](/docs/某类别/364.NestedListWeightSumII.md) +* [](/docs/某类别/366.FindLeavesofBinaryTree.md) +* [](/docs/某类别/367._valid_perfect_square.md) +* [](/docs/某类别/369.PlusOneLinkedList.md) +* [](/docs/某类别/371._sum_of_two_integers.md) +* [](/docs/某类别/374._Guess_Number_Higher_or_Lower.md) +* [](/docs/某类别/377._combination_sum_iv.md) +* [](/docs/某类别/378._kth_smallest_element_in_a_sorted_matrix.md) +* [](/docs/某类别/380.InsertDeleteGetRandomO(1).md) +* [](/docs/某类别/381.InsertDeleteGetRandomO(1)-Duplicatesallowed.md) +* [](/docs/某类别/382._linked_list_random_node.md) +* [](/docs/某类别/383._ransom_note.md) +* [](/docs/某类别/384.ShuffleanArray.md) +* [](/docs/某类别/387._first_unique_character_in_a_string.md) +* [](/docs/某类别/388._Longest_Absolute_File_Path.md) +* [](/docs/某类别/389._find_the_difference.md) +* [](/docs/某类别/392._is_subsequence.md) +* [](/docs/某类别/394._decode_string.md) +* [](/docs/某类别/400.NthDigit.md) +* [](/docs/某类别/401._binary_watch.md) +* [](/docs/某类别/404._sum_of_left_leaves.md) +* [](/docs/某类别/405.ConvertaNumbertoHexadecimal.md) +* [](/docs/某类别/406._Queue_Reconstruction_by_Height.md) +* [](/docs/某类别/412._fizz_buzz.md) +* [](/docs/某类别/413.ArithmeticSlices.md) +* [](/docs/某类别/414._third_maximum_number.md) +* [](/docs/某类别/415._add_strings.md) +* [](/docs/某类别/416.PartitionEqualSubsetSum.md) +* [](/docs/某类别/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md) +* [](/docs/某类别/422.ValidWordSquare.md) +* [](/docs/某类别/434._number_of_segments_in_a_string.md) +* [](/docs/某类别/437._path_sum_iii.md) +* [](/docs/某类别/438._Find_All_Anagrams_in_a_String.md) +* [](/docs/某类别/439.TernaryExpressionParser.md) +* [](/docs/某类别/441._arranging_coins.md) +* [](/docs/某类别/448._Find_All_Numbers_Disappeared_in_an_Array.md) +* [](/docs/某类别/450.DeleteNodeinaBST.md) +* [](/docs/某类别/453._Minimum_Moves_to_Equal_Array_Elements.md) +* [](/docs/某类别/459._Repeated_Substring_Pattern.md) +* [](/docs/某类别/461._HammingDistance.md) +* [](/docs/某类别/463._Island_Perimeter.md) +* [](/docs/某类别/467._Unique_Substrings_in_Wraparound_String.md) +* [](/docs/某类别/469.ConvexPolygon.md) +* [](/docs/某类别/476._Number_Complement.md) +* [](/docs/某类别/477._Total_Hamming_Distance.md) +* [](/docs/某类别/485._Max_Consecutive_Ones.md) +* [](/docs/某类别/587._Erect_the_Fence.md) +* [](/docs/某类别/599._Minimum_Index_Sum_of_Two_Lists.md) +* [](/docs/某类别/647._Palindromic_Substrings.md) +* [](/docs/某类别/657._Judge_Route_Circle.md) +* [](/docs/某类别/665._Non-decreasing_Array.md) +* [](/docs/某类别/672._Bulb_Switcher_II.md) +* [](/docs/某类别/681._Next_Closest_Time.md) +* [](/docs/某类别/682._Baseball_Game.md) +* [](/docs/某类别/687._Longest_Univalue_Path.md) +* [](/docs/某类别/740._delete_and_earn.md) +* [](/docs/某类别/760._Find_Anagram_Mappings.md) + +## 推荐的一些LeetCode网站 + +1. [KrisYu的GItuhub](https://github.com/KrisYu/LeetCode-CLRS-Python) +2. [kamyu104的Github](https://github.com/kamyu104/LeetCode) +3. [数据结构与算法/leetcode/lintcode题解](https://algorithm.yuanbin.me/zh-hans/) +4. [Leetcode 讨论区](https://discuss.leetcode.com/) +5. [visualgo算法可视化网站](https://visualgo.net/en) +6. [Data Structure Visualization](https://www.cs.usfca.edu/~galles/visualization/Algorithms.html) +7. [我的算法学习之路 - Lucida](http://zh.lucida.me/blog/on-learning-algorithms/) +8. [HiredInTech](https://www.hiredintech.com/) System Design 的总结特别适合入门 +9. [mitcc的Github](https://github.com/mitcc/AlgoSolutions) +10. [小土刀的面试刷题笔记](http://wdxtub.com/interview/14520594642530.html) + + +### Please note, this repository is inspired from [KrisYu](https://github.com/KrisYu/LeetCode-CLRS-Python). However, it has been modified, added and improved to reflect our knowledge, wisdom and effort. + + - 💪就是干! From 1176df3b3b7aec8381f721307c48da7530683d93 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 13:30:23 -0500 Subject: [PATCH 0456/2496] Update README.md --- docs/Algorithm Templates/README.md | 315 +---------------------------- 1 file changed, 1 insertion(+), 314 deletions(-) diff --git a/docs/Algorithm Templates/README.md b/docs/Algorithm Templates/README.md index f9547934f..d5e46e7c8 100644 --- a/docs/Algorithm Templates/README.md +++ b/docs/Algorithm Templates/README.md @@ -1,314 +1 @@ -# LeetCode 面试题 - -## [八大排序算法](/docs/SortingAlgorithm/README.md) - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | - -## 面试问答 - -* [Google面试题](/docs/interview/Google/Google.md) -* [pocketgems 面试题](/docs/interview/pocketgems/pocketgems.md) -* [WePay 面试题](/docs/interview/WePay/WePay.md) - -## LeetCode算法题 - -* [](docs/某类别/001._two_sum.md) -* [](/docs/某类别/002._add_two_numbers.md) -* [](/docs/某类别/003._longest_substring_without_repeating_characters.md) -* [](/docs/某类别/004._median_of_two_sorted_arrays.md) -* [](/docs/某类别/005._longest_palindromic_substring.md) -* [](/docs/某类别/007._Reverse_Integer.md) -* [](/docs/某类别/008._string_to_integer_(atoi).md) -* [](/docs/某类别/010._regular_expression_matching.md) -* [](/docs/某类别/011._container_with_most_water.md) -* [](/docs/某类别/012._Integer_to_Roman.md) -* [](/docs/某类别/013._Roman_to_Integer.md) -* [](/docs/某类别/014._longest_common_prefix.md) -* [](/docs/某类别/015._3sum.md) -* [](/docs/某类别/016._3sum_closest.md) -* [](/docs/某类别/017._letter_combinations_of_a_phone_number.md) -* [](/docs/某类别/018._4sum.md) -* [](/docs/某类别/019._remove_nth_node_from_end_of_list.md) -* [](/docs/某类别/020._valid_parentheses.md) -* [](/docs/某类别/021._merge_two_sorted_lists.md) -* [](/docs/某类别/022._generate_parentheses.md) -* [](/docs/某类别/023._merge_k_sorted_lists.md) -* [](/docs/某类别/024._swap_nodes_in_pairs.md) -* [](/docs/某类别/026._Remove_Duplicates_from_Sorted_Array.md) -* [](/docs/某类别/027._Remove_Element.md) -* [](/docs/某类别/028._implement_strstr().md) -* [](/docs/某类别/030._Substring_with_Concatenation_of_All_Words.md) -* [](/docs/某类别/031._next_permutation.md) -* [](/docs/某类别/033._search_in_rotated_sorted_array.md) -* [](/docs/某类别/034._SearchforaRange.md) -* [](/docs/某类别/035._search_insert_position.md) -* [](/docs/某类别/038._Count_and_Say.md) -* [](/docs/某类别/039._combination_sum.md) -* [](/docs/某类别/040._combination_sum_ii.md) -* [](/docs/某类别/042._trapping_rain_water.md) -* [](/docs/某类别/043._multiply_strings.md) -* [](/docs/某类别/044._wildcard_matching.md) -* [](/docs/某类别/045._Jump_Game_II.md) -* [](/docs/某类别/046._permutations.md) -* [](/docs/某类别/047._permutations_ii.md) -* [](/docs/某类别/048._rotate_image.md) -* [](/docs/某类别/049._group_anagrams_python.md) -* [](/docs/某类别/050._pow(x,_n).md) -* [](/docs/某类别/051._n-queens.md) -* [](/docs/某类别/052._n-queens_ii.md) -* [](/docs/某类别/053._maximum_subarray.md) -* [](/docs/某类别/054._spiral_matrix.md) -* [](/docs/某类别/055._jump_game.md) -* [](/docs/某类别/056._Merge_Intervals.md) -* [](/docs/某类别/058._length_of_last_word.md) -* [](/docs/某类别/059._spiral_matrix_ii.md) -* [](/docs/某类别/060._permutation_sequence.md) -* [](/docs/某类别/061._rotate_list.md) -* [](/docs/某类别/064._minimum_path_sum.md) -* [](/docs/某类别/065.unique_paths_ii.md) -* [](/docs/某类别/066._plus_one.md) -* [](/docs/某类别/067._add_binary.md) -* [](/docs/某类别/069._sqrt(x).md) -* [](/docs/某类别/070.ClimbingStairs.md) -* [](/docs/某类别/072._edit_distance.md) -* [](/docs/某类别/073.SetMatrixZeroes.md) -* [](/docs/某类别/074._search_a_2d_matrix.md) -* [](/docs/某类别/075._sort_colors.md) -* [](/docs/某类别/076._Minimum_Window_Substring.md) -* [](/docs/某类别/077._combinations.md) -* [](/docs/某类别/078.Subsets.md) -* [](/docs/某类别/079._word_search.md) -* [](/docs/某类别/082._remove_duplicates_from_sorted_list_ii.md) -* [](/docs/某类别/083._remove_duplicates_from_sorted_list.md) -* [](/docs/某类别/086._partition_list.md) -* [](/docs/某类别/088._merge_sorted_array.md) -* [](/docs/某类别/089._gray_code.md) -* [](/docs/某类别/090._subsets_ii.md) -* [](/docs/某类别/091._decode_ways.md) -* [](/docs/某类别/092._reverse_linked_list_ii.md) -* [](/docs/某类别/093._restore_ip_addresses.md) -* [](/docs/某类别/094._binary_tree_inorder_traversal.md) -* [](/docs/某类别/096._unique_binary_search_trees.md) -* [](/docs/某类别/098._validate_binary_search_tree.md) -* [](/docs/某类别/100._same_tree.md) -* [](/docs/某类别/101._symmetric_tree.md) -* [](/docs/某类别/102._binary_tree_level_order_traversal.md) -* [](/docs/某类别/103._binary_tree_zigzag_level_order_traversal.md) -* [](/docs/某类别/104._maximum_depth_of_binary_tree.md) -* [](/docs/某类别/105._construct_binary_tree_from_preorder_and_inorder_traversal.md) -* [](/docs/某类别/106._construct_binary_tree_from_inorder_and_postorder_traversal.md) -* [](/docs/某类别/107._binary_tree_level_order_traversal_ii.md) -* [](/docs/某类别/108._convert_sorted_array_to_binary_search_tree.md) -* [](/docs/某类别/109._convert_sorted_list_to_binary_search_tree.md) -* [](/docs/某类别/110._balanced_binary_tree.md) -* [](/docs/某类别/111._minimum_depth_of_binary_tree.md) -* [](/docs/某类别/112._path_sum.md) -* [](/docs/某类别/113._path_sum_ii.md) -* [](/docs/某类别/114._flatten_binary_tree_to_linked_list.md) -* [](/docs/某类别/116._populating_next_right_pointers_in_each_node.md) -* [](/docs/某类别/118._pascal's_triangle.md) -* [](/docs/某类别/119.Pascal'sTriangleII.md) -* [](/docs/某类别/120.Triangle.md) -* [](/docs/某类别/121._Best_Time_to_Buy_and_Sell_Stock.md) -* [](/docs/某类别/125._valid_palindrome.md) -* [](/docs/某类别/126.WordLadderII.md) -* [](/docs/某类别/127._word_ladder.md) -* [](/docs/某类别/128._Longest_Consecutive_Sequence.md) -* [](/docs/某类别/129._sum_root_to_leaf_numbers.md) -* [](/docs/某类别/130._surrounded_regions.md) -* [](/docs/某类别/131._palindrome_partitioning.md) -* [](/docs/某类别/133._clone_graph.md) -* [](/docs/某类别/136._single_number.md) -* [](/docs/某类别/139._word_break.md) -* [](/docs/某类别/140._word_break_ii.md) -* [](/docs/某类别/141._linked_list_cycle.md) -* [](/docs/某类别/142_Linked_List_Cycle_II.md) -* [](/docs/某类别/143._reorder_list.md) -* [](/docs/某类别/144._binary_tree_preorder_traversal.md) -* [](/docs/某类别/145._binary_tree_postorder_traversal.md) -* [](/docs/某类别/147._insertion_sort_list.md) -* [](/docs/某类别/148._sort_list.md) -* [](/docs/某类别/150._evaluate_reverse_polish_notation.md) -* [](/docs/某类别/151._reverse_words_in_a_string.md) -* [](/docs/某类别/152._maximum_product_subarray.md) -* [](/docs/某类别/153._find_minimum_in_rotated_sorted_array.md) -* [](/docs/某类别/155._min_stack.md) -* [](/docs/某类别/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md) -* [](/docs/某类别/160._intersection_of_two_linked_lists.md) -* [](/docs/某类别/162._find_peak_element.md) -* [](/docs/某类别/165._compare_version_numbers.md) -* [](/docs/某类别/166._Fraction_to_Recurring_Decimal.md) -* [](/docs/某类别/167._two_sum_ii_-_input_array_is_sorted.md) -* [](/docs/某类别/168._excel_sheet_column_title.md) -* [](/docs/某类别/169._majority_element.md) -* [](/docs/某类别/171._excel_sheet_column_number.md) -* [](/docs/某类别/173._binary_search_tree_iterator.md) -* [](/docs/某类别/189._rotate_array.md) -* [](/docs/某类别/191._number_of_1_bits.md) -* [](/docs/某类别/198._house_robber.md) -* [](/docs/某类别/199._binary_tree_right_side_view.md) -* [](/docs/某类别/200._number_of_islands.md) -* [](/docs/某类别/203._remove_linked_list_elements.md) -* [](/docs/某类别/204._count_primes.md) -* [](/docs/某类别/205._isomorphic_strings.md) -* [](/docs/某类别/206._reverse_linked_list.md) -* [](/docs/某类别/207._course_schedule.md) -* [](/docs/某类别/208._implement_trie_(prefix_tree).md) -* [](/docs/某类别/210._course_schedule_ii.md) -* [](/docs/某类别/211.AddandSearchWord-Datastructuredesign.md) -* [](/docs/某类别/213._house_robber_ii.md) -* [](/docs/某类别/216._combination_sum_iii.md) -* [](/docs/某类别/217._contains_duplicate.md) -* [](/docs/某类别/218._The_Skyline_Problem.md) -* [](/docs/某类别/219._contains_duplicate_ii.md) -* [](/docs/某类别/221._maximal_square.md) -* [](/docs/某类别/222._count_complete_tree_nodes.md) -* [](/docs/某类别/223._rectangle_area.md) -* [](/docs/某类别/224.BasicCalculator.md) -* [](/docs/某类别/225._implement_stack_using_queues.md) -* [](/docs/某类别/226._invert_binary_tree.md) -* [](/docs/某类别/227._basic_calculator_ii.md) -* [](/docs/某类别/228._summary_ranges.md) -* [](/docs/某类别/229._majority_element_ii.md) -* [](/docs/某类别/230._kth_smallest_element_in_a_bst.md) -* [](/docs/某类别/231._Power_of_Two.md) -* [](/docs/某类别/232._implement_queue_using_stacks.md) -* [](/docs/某类别/234._palindrome_linked_list.md) -* [](/docs/某类别/235._lowest_common_ancestor_of_a_binary_search_tree.md) -* [](/docs/某类别/236._lowest_common_ancestor_of_a_binary_tree.md) -* [](/docs/某类别/237._delete_node_in_a_linked_list.md) -* [](/docs/某类别/238._product_of_array_except_self.md) -* [](/docs/某类别/240._search_a_2d_matrix_ii.md) -* [](/docs/某类别/242._valid_anagram.md) -* [](/docs/某类别/252.MeetingRooms.md) -* [](/docs/某类别/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md) -* [](/docs/某类别/256.PaintHouse.md) -* [](/docs/某类别/257._binary_tree_paths.md) -* [](/docs/某类别/258_Add_Digits.md) -* [](/docs/某类别/261.GraphValidTree.md) -* [](/docs/某类别/263._ugly_number.md) -* [](/docs/某类别/264._ugly_number_ii.md) -* [](/docs/某类别/265.PaintHouseII.md) -* [](/docs/某类别/266.PalindromePermutation.md) -* [](/docs/某类别/267.PalindromePermutationII.md) -* [](/docs/某类别/268._missing_number.md) -* [](/docs/某类别/270.ClosestBinarySearchTreeValue.md) -* [](/docs/某类别/276.PaintFence.md) -* [](/docs/某类别/277.FindtheCelebrity.md) -* [](/docs/某类别/278._First_Bad_Version.md) -* [](/docs/某类别/279._perfect_squares.md) -* [](/docs/某类别/280._Wiggle_Sort.md) -* [](/docs/某类别/283._move_zeroes.md) -* [](/docs/某类别/285._inorder_successor_in_bst.md) -* [](/docs/某类别/286.WallsandGates.md) -* [](/docs/某类别/289._game_of_life.md) -* [](/docs/某类别/290._word_pattern.md) -* [](/docs/某类别/292._nim_game.md) -* [](/docs/某类别/296.BestMeetingPoint.md) -* [](/docs/某类别/298.BinaryTreeLongestConsecutiveSequence.md) -* [](/docs/某类别/299._bulls_and_cows.md) -* [](/docs/某类别/300._longest_increasing_subsequence.md) -* [](/docs/某类别/303._range_sum_query_-_immutable.md) -* [](/docs/某类别/316._Remove_Duplicate_Letters.md) -* [](/docs/某类别/319._Bulb_Switcher.md) -* [](/docs/某类别/322.CoinChange.md) -* [](/docs/某类别/323.NumberofConnectedComponentsinanUndirectedGraph.md) -* [](/docs/某类别/324._Wiggle_Sort_II.md) -* [](/docs/某类别/326._power_of_three.md) -* [](/docs/某类别/328._odd_even_linked_list.md) -* [](/docs/某类别/334._increasing_triplet_subsequence.md) -* [](/docs/某类别/337._house_robber_iii.md) -* [](/docs/某类别/338.CountingBits.md) -* [](/docs/某类别/339.NestedListWeightSum.md) -* [](/docs/某类别/341._Flatten_Nested_List_Iterator.md) -* [](/docs/某类别/342._Power_of_Four.md) -* [](/docs/某类别/344._reverse_string.md) -* [](/docs/某类别/345._Reverse_Vowels_of_a_String.md) -* [](/docs/某类别/349._intersection_of_two_arrays.md) -* [](/docs/某类别/350._intersection_of_two_arrays_ii.md) -* [](/docs/某类别/353.DesignSnakeGame.md) -* [](/docs/某类别/364.NestedListWeightSumII.md) -* [](/docs/某类别/366.FindLeavesofBinaryTree.md) -* [](/docs/某类别/367._valid_perfect_square.md) -* [](/docs/某类别/369.PlusOneLinkedList.md) -* [](/docs/某类别/371._sum_of_two_integers.md) -* [](/docs/某类别/374._Guess_Number_Higher_or_Lower.md) -* [](/docs/某类别/377._combination_sum_iv.md) -* [](/docs/某类别/378._kth_smallest_element_in_a_sorted_matrix.md) -* [](/docs/某类别/380.InsertDeleteGetRandomO(1).md) -* [](/docs/某类别/381.InsertDeleteGetRandomO(1)-Duplicatesallowed.md) -* [](/docs/某类别/382._linked_list_random_node.md) -* [](/docs/某类别/383._ransom_note.md) -* [](/docs/某类别/384.ShuffleanArray.md) -* [](/docs/某类别/387._first_unique_character_in_a_string.md) -* [](/docs/某类别/388._Longest_Absolute_File_Path.md) -* [](/docs/某类别/389._find_the_difference.md) -* [](/docs/某类别/392._is_subsequence.md) -* [](/docs/某类别/394._decode_string.md) -* [](/docs/某类别/400.NthDigit.md) -* [](/docs/某类别/401._binary_watch.md) -* [](/docs/某类别/404._sum_of_left_leaves.md) -* [](/docs/某类别/405.ConvertaNumbertoHexadecimal.md) -* [](/docs/某类别/406._Queue_Reconstruction_by_Height.md) -* [](/docs/某类别/412._fizz_buzz.md) -* [](/docs/某类别/413.ArithmeticSlices.md) -* [](/docs/某类别/414._third_maximum_number.md) -* [](/docs/某类别/415._add_strings.md) -* [](/docs/某类别/416.PartitionEqualSubsetSum.md) -* [](/docs/某类别/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md) -* [](/docs/某类别/422.ValidWordSquare.md) -* [](/docs/某类别/434._number_of_segments_in_a_string.md) -* [](/docs/某类别/437._path_sum_iii.md) -* [](/docs/某类别/438._Find_All_Anagrams_in_a_String.md) -* [](/docs/某类别/439.TernaryExpressionParser.md) -* [](/docs/某类别/441._arranging_coins.md) -* [](/docs/某类别/448._Find_All_Numbers_Disappeared_in_an_Array.md) -* [](/docs/某类别/450.DeleteNodeinaBST.md) -* [](/docs/某类别/453._Minimum_Moves_to_Equal_Array_Elements.md) -* [](/docs/某类别/459._Repeated_Substring_Pattern.md) -* [](/docs/某类别/461._HammingDistance.md) -* [](/docs/某类别/463._Island_Perimeter.md) -* [](/docs/某类别/467._Unique_Substrings_in_Wraparound_String.md) -* [](/docs/某类别/469.ConvexPolygon.md) -* [](/docs/某类别/476._Number_Complement.md) -* [](/docs/某类别/477._Total_Hamming_Distance.md) -* [](/docs/某类别/485._Max_Consecutive_Ones.md) -* [](/docs/某类别/587._Erect_the_Fence.md) -* [](/docs/某类别/599._Minimum_Index_Sum_of_Two_Lists.md) -* [](/docs/某类别/647._Palindromic_Substrings.md) -* [](/docs/某类别/657._Judge_Route_Circle.md) -* [](/docs/某类别/665._Non-decreasing_Array.md) -* [](/docs/某类别/672._Bulb_Switcher_II.md) -* [](/docs/某类别/681._Next_Closest_Time.md) -* [](/docs/某类别/682._Baseball_Game.md) -* [](/docs/某类别/687._Longest_Univalue_Path.md) -* [](/docs/某类别/740._delete_and_earn.md) -* [](/docs/某类别/760._Find_Anagram_Mappings.md) - -## 推荐的一些LeetCode网站 - -1. [KrisYu的GItuhub](https://github.com/KrisYu/LeetCode-CLRS-Python) -2. [kamyu104的Github](https://github.com/kamyu104/LeetCode) -3. [数据结构与算法/leetcode/lintcode题解](https://algorithm.yuanbin.me/zh-hans/) -4. [Leetcode 讨论区](https://discuss.leetcode.com/) -5. [visualgo算法可视化网站](https://visualgo.net/en) -6. [Data Structure Visualization](https://www.cs.usfca.edu/~galles/visualization/Algorithms.html) -7. [我的算法学习之路 - Lucida](http://zh.lucida.me/blog/on-learning-algorithms/) -8. [HiredInTech](https://www.hiredintech.com/) System Design 的总结特别适合入门 -9. [mitcc的Github](https://github.com/mitcc/AlgoSolutions) -10. [小土刀的面试刷题笔记](http://wdxtub.com/interview/14520594642530.html) - - -### Please note, this repository is inspired from [KrisYu](https://github.com/KrisYu/LeetCode-CLRS-Python). However, it has been modified, added and improved to reflect our knowledge, wisdom and effort. - - - 💪就是干! +# Some algorithm templates for better understanding! From f6f33633732595e99e78edf9bf7aa499fdd784c2 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 13:31:34 -0500 Subject: [PATCH 0457/2496] Update README.md --- images/README.md | 315 +---------------------------------------------- 1 file changed, 1 insertion(+), 314 deletions(-) diff --git a/images/README.md b/images/README.md index f9547934f..d71e82389 100644 --- a/images/README.md +++ b/images/README.md @@ -1,314 +1 @@ -# LeetCode 面试题 - -## [八大排序算法](/docs/SortingAlgorithm/README.md) - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | - -## 面试问答 - -* [Google面试题](/docs/interview/Google/Google.md) -* [pocketgems 面试题](/docs/interview/pocketgems/pocketgems.md) -* [WePay 面试题](/docs/interview/WePay/WePay.md) - -## LeetCode算法题 - -* [](docs/某类别/001._two_sum.md) -* [](/docs/某类别/002._add_two_numbers.md) -* [](/docs/某类别/003._longest_substring_without_repeating_characters.md) -* [](/docs/某类别/004._median_of_two_sorted_arrays.md) -* [](/docs/某类别/005._longest_palindromic_substring.md) -* [](/docs/某类别/007._Reverse_Integer.md) -* [](/docs/某类别/008._string_to_integer_(atoi).md) -* [](/docs/某类别/010._regular_expression_matching.md) -* [](/docs/某类别/011._container_with_most_water.md) -* [](/docs/某类别/012._Integer_to_Roman.md) -* [](/docs/某类别/013._Roman_to_Integer.md) -* [](/docs/某类别/014._longest_common_prefix.md) -* [](/docs/某类别/015._3sum.md) -* [](/docs/某类别/016._3sum_closest.md) -* [](/docs/某类别/017._letter_combinations_of_a_phone_number.md) -* [](/docs/某类别/018._4sum.md) -* [](/docs/某类别/019._remove_nth_node_from_end_of_list.md) -* [](/docs/某类别/020._valid_parentheses.md) -* [](/docs/某类别/021._merge_two_sorted_lists.md) -* [](/docs/某类别/022._generate_parentheses.md) -* [](/docs/某类别/023._merge_k_sorted_lists.md) -* [](/docs/某类别/024._swap_nodes_in_pairs.md) -* [](/docs/某类别/026._Remove_Duplicates_from_Sorted_Array.md) -* [](/docs/某类别/027._Remove_Element.md) -* [](/docs/某类别/028._implement_strstr().md) -* [](/docs/某类别/030._Substring_with_Concatenation_of_All_Words.md) -* [](/docs/某类别/031._next_permutation.md) -* [](/docs/某类别/033._search_in_rotated_sorted_array.md) -* [](/docs/某类别/034._SearchforaRange.md) -* [](/docs/某类别/035._search_insert_position.md) -* [](/docs/某类别/038._Count_and_Say.md) -* [](/docs/某类别/039._combination_sum.md) -* [](/docs/某类别/040._combination_sum_ii.md) -* [](/docs/某类别/042._trapping_rain_water.md) -* [](/docs/某类别/043._multiply_strings.md) -* [](/docs/某类别/044._wildcard_matching.md) -* [](/docs/某类别/045._Jump_Game_II.md) -* [](/docs/某类别/046._permutations.md) -* [](/docs/某类别/047._permutations_ii.md) -* [](/docs/某类别/048._rotate_image.md) -* [](/docs/某类别/049._group_anagrams_python.md) -* [](/docs/某类别/050._pow(x,_n).md) -* [](/docs/某类别/051._n-queens.md) -* [](/docs/某类别/052._n-queens_ii.md) -* [](/docs/某类别/053._maximum_subarray.md) -* [](/docs/某类别/054._spiral_matrix.md) -* [](/docs/某类别/055._jump_game.md) -* [](/docs/某类别/056._Merge_Intervals.md) -* [](/docs/某类别/058._length_of_last_word.md) -* [](/docs/某类别/059._spiral_matrix_ii.md) -* [](/docs/某类别/060._permutation_sequence.md) -* [](/docs/某类别/061._rotate_list.md) -* [](/docs/某类别/064._minimum_path_sum.md) -* [](/docs/某类别/065.unique_paths_ii.md) -* [](/docs/某类别/066._plus_one.md) -* [](/docs/某类别/067._add_binary.md) -* [](/docs/某类别/069._sqrt(x).md) -* [](/docs/某类别/070.ClimbingStairs.md) -* [](/docs/某类别/072._edit_distance.md) -* [](/docs/某类别/073.SetMatrixZeroes.md) -* [](/docs/某类别/074._search_a_2d_matrix.md) -* [](/docs/某类别/075._sort_colors.md) -* [](/docs/某类别/076._Minimum_Window_Substring.md) -* [](/docs/某类别/077._combinations.md) -* [](/docs/某类别/078.Subsets.md) -* [](/docs/某类别/079._word_search.md) -* [](/docs/某类别/082._remove_duplicates_from_sorted_list_ii.md) -* [](/docs/某类别/083._remove_duplicates_from_sorted_list.md) -* [](/docs/某类别/086._partition_list.md) -* [](/docs/某类别/088._merge_sorted_array.md) -* [](/docs/某类别/089._gray_code.md) -* [](/docs/某类别/090._subsets_ii.md) -* [](/docs/某类别/091._decode_ways.md) -* [](/docs/某类别/092._reverse_linked_list_ii.md) -* [](/docs/某类别/093._restore_ip_addresses.md) -* [](/docs/某类别/094._binary_tree_inorder_traversal.md) -* [](/docs/某类别/096._unique_binary_search_trees.md) -* [](/docs/某类别/098._validate_binary_search_tree.md) -* [](/docs/某类别/100._same_tree.md) -* [](/docs/某类别/101._symmetric_tree.md) -* [](/docs/某类别/102._binary_tree_level_order_traversal.md) -* [](/docs/某类别/103._binary_tree_zigzag_level_order_traversal.md) -* [](/docs/某类别/104._maximum_depth_of_binary_tree.md) -* [](/docs/某类别/105._construct_binary_tree_from_preorder_and_inorder_traversal.md) -* [](/docs/某类别/106._construct_binary_tree_from_inorder_and_postorder_traversal.md) -* [](/docs/某类别/107._binary_tree_level_order_traversal_ii.md) -* [](/docs/某类别/108._convert_sorted_array_to_binary_search_tree.md) -* [](/docs/某类别/109._convert_sorted_list_to_binary_search_tree.md) -* [](/docs/某类别/110._balanced_binary_tree.md) -* [](/docs/某类别/111._minimum_depth_of_binary_tree.md) -* [](/docs/某类别/112._path_sum.md) -* [](/docs/某类别/113._path_sum_ii.md) -* [](/docs/某类别/114._flatten_binary_tree_to_linked_list.md) -* [](/docs/某类别/116._populating_next_right_pointers_in_each_node.md) -* [](/docs/某类别/118._pascal's_triangle.md) -* [](/docs/某类别/119.Pascal'sTriangleII.md) -* [](/docs/某类别/120.Triangle.md) -* [](/docs/某类别/121._Best_Time_to_Buy_and_Sell_Stock.md) -* [](/docs/某类别/125._valid_palindrome.md) -* [](/docs/某类别/126.WordLadderII.md) -* [](/docs/某类别/127._word_ladder.md) -* [](/docs/某类别/128._Longest_Consecutive_Sequence.md) -* [](/docs/某类别/129._sum_root_to_leaf_numbers.md) -* [](/docs/某类别/130._surrounded_regions.md) -* [](/docs/某类别/131._palindrome_partitioning.md) -* [](/docs/某类别/133._clone_graph.md) -* [](/docs/某类别/136._single_number.md) -* [](/docs/某类别/139._word_break.md) -* [](/docs/某类别/140._word_break_ii.md) -* [](/docs/某类别/141._linked_list_cycle.md) -* [](/docs/某类别/142_Linked_List_Cycle_II.md) -* [](/docs/某类别/143._reorder_list.md) -* [](/docs/某类别/144._binary_tree_preorder_traversal.md) -* [](/docs/某类别/145._binary_tree_postorder_traversal.md) -* [](/docs/某类别/147._insertion_sort_list.md) -* [](/docs/某类别/148._sort_list.md) -* [](/docs/某类别/150._evaluate_reverse_polish_notation.md) -* [](/docs/某类别/151._reverse_words_in_a_string.md) -* [](/docs/某类别/152._maximum_product_subarray.md) -* [](/docs/某类别/153._find_minimum_in_rotated_sorted_array.md) -* [](/docs/某类别/155._min_stack.md) -* [](/docs/某类别/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md) -* [](/docs/某类别/160._intersection_of_two_linked_lists.md) -* [](/docs/某类别/162._find_peak_element.md) -* [](/docs/某类别/165._compare_version_numbers.md) -* [](/docs/某类别/166._Fraction_to_Recurring_Decimal.md) -* [](/docs/某类别/167._two_sum_ii_-_input_array_is_sorted.md) -* [](/docs/某类别/168._excel_sheet_column_title.md) -* [](/docs/某类别/169._majority_element.md) -* [](/docs/某类别/171._excel_sheet_column_number.md) -* [](/docs/某类别/173._binary_search_tree_iterator.md) -* [](/docs/某类别/189._rotate_array.md) -* [](/docs/某类别/191._number_of_1_bits.md) -* [](/docs/某类别/198._house_robber.md) -* [](/docs/某类别/199._binary_tree_right_side_view.md) -* [](/docs/某类别/200._number_of_islands.md) -* [](/docs/某类别/203._remove_linked_list_elements.md) -* [](/docs/某类别/204._count_primes.md) -* [](/docs/某类别/205._isomorphic_strings.md) -* [](/docs/某类别/206._reverse_linked_list.md) -* [](/docs/某类别/207._course_schedule.md) -* [](/docs/某类别/208._implement_trie_(prefix_tree).md) -* [](/docs/某类别/210._course_schedule_ii.md) -* [](/docs/某类别/211.AddandSearchWord-Datastructuredesign.md) -* [](/docs/某类别/213._house_robber_ii.md) -* [](/docs/某类别/216._combination_sum_iii.md) -* [](/docs/某类别/217._contains_duplicate.md) -* [](/docs/某类别/218._The_Skyline_Problem.md) -* [](/docs/某类别/219._contains_duplicate_ii.md) -* [](/docs/某类别/221._maximal_square.md) -* [](/docs/某类别/222._count_complete_tree_nodes.md) -* [](/docs/某类别/223._rectangle_area.md) -* [](/docs/某类别/224.BasicCalculator.md) -* [](/docs/某类别/225._implement_stack_using_queues.md) -* [](/docs/某类别/226._invert_binary_tree.md) -* [](/docs/某类别/227._basic_calculator_ii.md) -* [](/docs/某类别/228._summary_ranges.md) -* [](/docs/某类别/229._majority_element_ii.md) -* [](/docs/某类别/230._kth_smallest_element_in_a_bst.md) -* [](/docs/某类别/231._Power_of_Two.md) -* [](/docs/某类别/232._implement_queue_using_stacks.md) -* [](/docs/某类别/234._palindrome_linked_list.md) -* [](/docs/某类别/235._lowest_common_ancestor_of_a_binary_search_tree.md) -* [](/docs/某类别/236._lowest_common_ancestor_of_a_binary_tree.md) -* [](/docs/某类别/237._delete_node_in_a_linked_list.md) -* [](/docs/某类别/238._product_of_array_except_self.md) -* [](/docs/某类别/240._search_a_2d_matrix_ii.md) -* [](/docs/某类别/242._valid_anagram.md) -* [](/docs/某类别/252.MeetingRooms.md) -* [](/docs/某类别/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md) -* [](/docs/某类别/256.PaintHouse.md) -* [](/docs/某类别/257._binary_tree_paths.md) -* [](/docs/某类别/258_Add_Digits.md) -* [](/docs/某类别/261.GraphValidTree.md) -* [](/docs/某类别/263._ugly_number.md) -* [](/docs/某类别/264._ugly_number_ii.md) -* [](/docs/某类别/265.PaintHouseII.md) -* [](/docs/某类别/266.PalindromePermutation.md) -* [](/docs/某类别/267.PalindromePermutationII.md) -* [](/docs/某类别/268._missing_number.md) -* [](/docs/某类别/270.ClosestBinarySearchTreeValue.md) -* [](/docs/某类别/276.PaintFence.md) -* [](/docs/某类别/277.FindtheCelebrity.md) -* [](/docs/某类别/278._First_Bad_Version.md) -* [](/docs/某类别/279._perfect_squares.md) -* [](/docs/某类别/280._Wiggle_Sort.md) -* [](/docs/某类别/283._move_zeroes.md) -* [](/docs/某类别/285._inorder_successor_in_bst.md) -* [](/docs/某类别/286.WallsandGates.md) -* [](/docs/某类别/289._game_of_life.md) -* [](/docs/某类别/290._word_pattern.md) -* [](/docs/某类别/292._nim_game.md) -* [](/docs/某类别/296.BestMeetingPoint.md) -* [](/docs/某类别/298.BinaryTreeLongestConsecutiveSequence.md) -* [](/docs/某类别/299._bulls_and_cows.md) -* [](/docs/某类别/300._longest_increasing_subsequence.md) -* [](/docs/某类别/303._range_sum_query_-_immutable.md) -* [](/docs/某类别/316._Remove_Duplicate_Letters.md) -* [](/docs/某类别/319._Bulb_Switcher.md) -* [](/docs/某类别/322.CoinChange.md) -* [](/docs/某类别/323.NumberofConnectedComponentsinanUndirectedGraph.md) -* [](/docs/某类别/324._Wiggle_Sort_II.md) -* [](/docs/某类别/326._power_of_three.md) -* [](/docs/某类别/328._odd_even_linked_list.md) -* [](/docs/某类别/334._increasing_triplet_subsequence.md) -* [](/docs/某类别/337._house_robber_iii.md) -* [](/docs/某类别/338.CountingBits.md) -* [](/docs/某类别/339.NestedListWeightSum.md) -* [](/docs/某类别/341._Flatten_Nested_List_Iterator.md) -* [](/docs/某类别/342._Power_of_Four.md) -* [](/docs/某类别/344._reverse_string.md) -* [](/docs/某类别/345._Reverse_Vowels_of_a_String.md) -* [](/docs/某类别/349._intersection_of_two_arrays.md) -* [](/docs/某类别/350._intersection_of_two_arrays_ii.md) -* [](/docs/某类别/353.DesignSnakeGame.md) -* [](/docs/某类别/364.NestedListWeightSumII.md) -* [](/docs/某类别/366.FindLeavesofBinaryTree.md) -* [](/docs/某类别/367._valid_perfect_square.md) -* [](/docs/某类别/369.PlusOneLinkedList.md) -* [](/docs/某类别/371._sum_of_two_integers.md) -* [](/docs/某类别/374._Guess_Number_Higher_or_Lower.md) -* [](/docs/某类别/377._combination_sum_iv.md) -* [](/docs/某类别/378._kth_smallest_element_in_a_sorted_matrix.md) -* [](/docs/某类别/380.InsertDeleteGetRandomO(1).md) -* [](/docs/某类别/381.InsertDeleteGetRandomO(1)-Duplicatesallowed.md) -* [](/docs/某类别/382._linked_list_random_node.md) -* [](/docs/某类别/383._ransom_note.md) -* [](/docs/某类别/384.ShuffleanArray.md) -* [](/docs/某类别/387._first_unique_character_in_a_string.md) -* [](/docs/某类别/388._Longest_Absolute_File_Path.md) -* [](/docs/某类别/389._find_the_difference.md) -* [](/docs/某类别/392._is_subsequence.md) -* [](/docs/某类别/394._decode_string.md) -* [](/docs/某类别/400.NthDigit.md) -* [](/docs/某类别/401._binary_watch.md) -* [](/docs/某类别/404._sum_of_left_leaves.md) -* [](/docs/某类别/405.ConvertaNumbertoHexadecimal.md) -* [](/docs/某类别/406._Queue_Reconstruction_by_Height.md) -* [](/docs/某类别/412._fizz_buzz.md) -* [](/docs/某类别/413.ArithmeticSlices.md) -* [](/docs/某类别/414._third_maximum_number.md) -* [](/docs/某类别/415._add_strings.md) -* [](/docs/某类别/416.PartitionEqualSubsetSum.md) -* [](/docs/某类别/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md) -* [](/docs/某类别/422.ValidWordSquare.md) -* [](/docs/某类别/434._number_of_segments_in_a_string.md) -* [](/docs/某类别/437._path_sum_iii.md) -* [](/docs/某类别/438._Find_All_Anagrams_in_a_String.md) -* [](/docs/某类别/439.TernaryExpressionParser.md) -* [](/docs/某类别/441._arranging_coins.md) -* [](/docs/某类别/448._Find_All_Numbers_Disappeared_in_an_Array.md) -* [](/docs/某类别/450.DeleteNodeinaBST.md) -* [](/docs/某类别/453._Minimum_Moves_to_Equal_Array_Elements.md) -* [](/docs/某类别/459._Repeated_Substring_Pattern.md) -* [](/docs/某类别/461._HammingDistance.md) -* [](/docs/某类别/463._Island_Perimeter.md) -* [](/docs/某类别/467._Unique_Substrings_in_Wraparound_String.md) -* [](/docs/某类别/469.ConvexPolygon.md) -* [](/docs/某类别/476._Number_Complement.md) -* [](/docs/某类别/477._Total_Hamming_Distance.md) -* [](/docs/某类别/485._Max_Consecutive_Ones.md) -* [](/docs/某类别/587._Erect_the_Fence.md) -* [](/docs/某类别/599._Minimum_Index_Sum_of_Two_Lists.md) -* [](/docs/某类别/647._Palindromic_Substrings.md) -* [](/docs/某类别/657._Judge_Route_Circle.md) -* [](/docs/某类别/665._Non-decreasing_Array.md) -* [](/docs/某类别/672._Bulb_Switcher_II.md) -* [](/docs/某类别/681._Next_Closest_Time.md) -* [](/docs/某类别/682._Baseball_Game.md) -* [](/docs/某类别/687._Longest_Univalue_Path.md) -* [](/docs/某类别/740._delete_and_earn.md) -* [](/docs/某类别/760._Find_Anagram_Mappings.md) - -## 推荐的一些LeetCode网站 - -1. [KrisYu的GItuhub](https://github.com/KrisYu/LeetCode-CLRS-Python) -2. [kamyu104的Github](https://github.com/kamyu104/LeetCode) -3. [数据结构与算法/leetcode/lintcode题解](https://algorithm.yuanbin.me/zh-hans/) -4. [Leetcode 讨论区](https://discuss.leetcode.com/) -5. [visualgo算法可视化网站](https://visualgo.net/en) -6. [Data Structure Visualization](https://www.cs.usfca.edu/~galles/visualization/Algorithms.html) -7. [我的算法学习之路 - Lucida](http://zh.lucida.me/blog/on-learning-algorithms/) -8. [HiredInTech](https://www.hiredintech.com/) System Design 的总结特别适合入门 -9. [mitcc的Github](https://github.com/mitcc/AlgoSolutions) -10. [小土刀的面试刷题笔记](http://wdxtub.com/interview/14520594642530.html) - - -### Please note, this repository is inspired from [KrisYu](https://github.com/KrisYu/LeetCode-CLRS-Python). However, it has been modified, added and improved to reflect our knowledge, wisdom and effort. - - - 💪就是干! +# Images for the whole repository! From 8e6039c9363793ad031f673a7307b8917acd6b6a Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 13:32:24 -0500 Subject: [PATCH 0458/2496] Update README.md --- README.md | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/README.md b/README.md index 75446ced7..2e0d34398 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,6 @@ # Algorithms -## [八大排序算法](/docs/SortingAlgorithm/README.md) -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | ## 面试问答 From 3c7451f8af4e0888fda22069c3d7402166eeced5 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 13:40:31 -0500 Subject: [PATCH 0459/2496] Update README.md --- docs/Algorithm Templates/README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/Algorithm Templates/README.md b/docs/Algorithm Templates/README.md index d5e46e7c8..fe9c7bbf3 100644 --- a/docs/Algorithm Templates/README.md +++ b/docs/Algorithm Templates/README.md @@ -1 +1,15 @@ # Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | From 68e6871885bcd5c0b02c046095d953badb3f3739 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 13:45:35 -0500 Subject: [PATCH 0460/2496] Reconstructuring the whole repository, expanding the scope from Leetcode to Algorithms --- docs/Algorithm_Templates/Cipher/README.md | 0 .../Compression}/README.md | 0 docs/Algorithm_Templates/Conversion/README.md | 0 .../Data_Structure/Graph/README.md | 15 +++++++++++++++ .../Data_Structure/HashMap/README.md | 15 +++++++++++++++ .../Data_Structure/HashTable/README.md | 15 +++++++++++++++ .../Data_Structure/Heqp/README.md | 15 +++++++++++++++ .../Data_Structure/LinkedList/README.md | 15 +++++++++++++++ .../Data_Structure/Matrix/README.md | 15 +++++++++++++++ .../Data_Structure/Queue/README.md | 15 +++++++++++++++ .../Algorithm_Templates/Data_Structure/README.md | 15 +++++++++++++++ .../Data_Structure/Stack/README.md | 15 +++++++++++++++ .../Data_Structure/Tree/README.md | 15 +++++++++++++++ .../Dynamic_Programming/README.md | 0 docs/Algorithm_Templates/Hash/README.md | 0 docs/Algorithm_Templates/README.md | 15 +++++++++++++++ docs/Algorithm_Templates/Search/README.md | 0 .../Sort/BubbleSort.py | 0 .../Sort/InsertSort.py | 0 .../Sort/MergeSort.py | 0 .../Sort/QuickSort.py | 0 docs/Algorithm_Templates/Sort/README.md | 15 +++++++++++++++ .../Sort/SelectionSort.py | 0 .../Sort/ShellSort.py | 0 docs/Algorithm_Templates/Traversals/README.md | 0 .../001._two_sum.md | 0 .../002._add_two_numbers.md | 0 ...est_substring_without_repeating_characters.md | 0 .../004._median_of_two_sorted_arrays.md | 0 .../005._longest_palindromic_substring.md | 0 .../006._ZigZag_Conversion.md | 0 .../007._Reverse_Integer.md | 0 .../008._string_to_integer_(atoi).md | 0 .../009._Palindrome_Number.md | 0 .../010._regular_expression_matching.md | 0 .../011._container_with_most_water.md | 0 .../012._Integer_to_Roman.md | 0 .../013._Roman_to_Integer.md | 0 .../014._longest_common_prefix.md | 0 .../015._3sum.md | 0 .../016._3sum_closest.md | 0 ...017._letter_combinations_of_a_phone_number.md | 0 .../018._4sum.md | 0 .../019._remove_nth_node_from_end_of_list.md | 0 .../020._valid_parentheses.md | 0 .../021._merge_two_sorted_lists.md | 0 .../022._generate_parentheses.md | 0 .../023._merge_k_sorted_lists.md | 0 .../024._swap_nodes_in_pairs.md | 0 .../026._Remove_Duplicates_from_Sorted_Array.md | 0 .../027._Remove_Element.md | 0 .../028._implement_strstr().md | 0 ..._Substring_with_Concatenation_of_All_Words.md | 0 .../031._next_permutation.md | 0 .../033._search_in_rotated_sorted_array.md | 0 .../034._Search for a Range.md | 0 .../035._search_insert_position.md | 0 .../038._Count_and_Say.md | 0 .../039._combination_sum.md | 0 .../040._combination_sum_ii.md | 0 .../042._trapping_rain_water.md | 0 .../043._multiply_strings.md | 0 .../044._wildcard_matching.md | 0 .../045._Jump_Game_II.md | 0 .../046._permutations.md | 0 .../047._permutations_ii.md | 0 .../048._rotate_image.md | 0 .../049._group_anagrams_python.md | 0 .../050._pow(x,_n).md | 0 .../051._n-queens.md | 0 .../052._n-queens_ii.md | 0 .../053._maximum_subarray.md | 0 .../054._spiral_matrix.md | 0 .../055._jump_game.md | 0 .../056._Merge_Intervals.md | 0 .../058._length_of_last_word.md | 0 .../059._spiral_matrix_ii.md | 0 .../060._permutation_sequence.md | 0 .../061._rotate_list.md | 0 .../064._minimum_path_sum.md | 0 .../065.unique_paths_ii.md | 0 .../066._plus_one.md | 0 .../067._add_binary.md | 0 .../069._sqrt(x).md | 0 .../070. Climbing Stairs.md | 0 .../072._edit_distance.md | 0 .../073. Set Matrix Zeroes.md | 0 .../074._search_a_2d_matrix.md | 0 .../075._sort_colors.md | 0 .../076._Minimum_Window_Substring.md | 0 .../077._combinations.md | 0 .../078.Subsets .md | 0 .../079._word_search.md | 0 ...082._remove_duplicates_from_sorted_list_ii.md | 0 .../083._remove_duplicates_from_sorted_list.md | 0 .../086._partition_list.md | 0 .../088._merge_sorted_array.md | 0 .../089._gray_code.md | 0 .../090._subsets_ii.md | 0 .../091._decode_ways.md | 0 .../092._reverse_linked_list_ii.md | 0 .../093._restore_ip_addresses.md | 0 .../094._binary_tree_inorder_traversal.md | 0 .../096._unique_binary_search_trees.md | 0 .../098._validate_binary_search_tree.md | 0 .../100._same_tree.md | 0 .../101._symmetric_tree.md | 0 .../102._binary_tree_level_order_traversal.md | 0 ...._binary_tree_zigzag_level_order_traversal.md | 0 .../104._maximum_depth_of_binary_tree.md | 0 ...y_tree_from_preorder_and_inorder_traversal.md | 0 ..._tree_from_inorder_and_postorder_traversal.md | 0 .../107._binary_tree_level_order_traversal_ii.md | 0 ...convert_sorted_array_to_binary_search_tree.md | 0 ..._convert_sorted_list_to_binary_search_tree.md | 0 .../110._balanced_binary_tree.md | 0 .../111._minimum_depth_of_binary_tree.md | 0 .../112._path_sum.md | 0 .../113._path_sum_ii.md | 0 .../114._flatten_binary_tree_to_linked_list.md | 0 ...opulating_next_right_pointers_in_each_node.md | 0 .../118._pascal's_triangle.md | 0 .../119. Pascal's Triangle II.md | 0 .../120. Triangle.md | 0 .../121._Best_Time_to_Buy_and_Sell_Stock.md | 0 .../125._valid_palindrome.md | 0 .../126. Word Ladder II.md | 0 .../127._word_ladder.md | 0 .../128._Longest_Consecutive_Sequence.md | 0 .../129._sum_root_to_leaf_numbers.md | 0 .../130._surrounded_regions.md | 0 .../131._palindrome_partitioning.md | 0 .../133._clone_graph.md | 0 .../136._single_number.md | 0 .../139._word_break.md | 0 .../140._word_break_ii.md | 0 .../141._linked_list_cycle.md | 0 .../142_Linked_List_Cycle_II.md | 0 .../143._reorder_list.md | 0 .../144._binary_tree_preorder_traversal.md | 0 .../145._binary_tree_postorder_traversal.md | 0 .../147._insertion_sort_list.md | 0 .../148._sort_list.md | 0 .../150._evaluate_reverse_polish_notation.md | 0 .../151._reverse_words_in_a_string.md | 0 .../152._maximum_product_subarray.md | 0 .../153._find_minimum_in_rotated_sorted_array.md | 0 .../155._min_stack.md | 0 ...tring_with_At_Most_Two_Distinct_Characters.md | 0 .../160._intersection_of_two_linked_lists.md | 0 .../162._find_peak_element.md | 0 .../165._compare_version_numbers.md | 0 .../166._Fraction_to_Recurring_Decimal.md | 0 .../167._two_sum_ii_-_input_array_is_sorted.md | 0 .../168._excel_sheet_column_title.md | 0 .../169._majority_element.md | 0 .../171._excel_sheet_column_number.md | 0 .../173._binary_search_tree_iterator.md | 0 .../189._rotate_array.md | 0 .../191._number_of_1_bits.md | 0 .../198._house_robber.md | 0 .../199._binary_tree_right_side_view.md | 0 .../200._number_of_islands.md | 0 .../203._remove_linked_list_elements.md | 0 .../204._count_primes.md | 0 .../205._isomorphic_strings.md | 0 .../206._reverse_linked_list.md | 0 .../207._course_schedule.md | 0 .../208._implement_trie_(prefix_tree).md | 0 .../210._course_schedule_ii.md | 0 ...dd and Search Word - Data structure design.md | 0 .../213._house_robber_ii.md | 0 .../216._combination_sum_iii.md | 0 .../217._contains_duplicate.md | 0 .../218._The _Skyline_Problem .md | 0 .../219._contains_duplicate_ii.md | 0 .../221._maximal_square.md | 0 .../222._count_complete_tree_nodes.md | 0 .../223._rectangle_area.md | 0 .../224. Basic Calculator .md | 0 .../225._implement_stack_using_queues.md | 0 .../226._invert_binary_tree.md | 0 .../227._basic_calculator_ii.md | 0 .../228._summary_ranges.md | 0 .../229._majority_element_ii.md | 0 .../230._kth_smallest_element_in_a_bst.md | 0 .../231. _Power_of_Two.md | 0 .../232._implement_queue_using_stacks.md | 0 .../234._palindrome_linked_list.md | 0 ...st_common_ancestor_of_a_binary_search_tree.md | 0 ...6._lowest_common_ancestor_of_a_binary_tree.md | 0 .../237._delete_node_in_a_linked_list.md | 0 .../238._product_of_array_except_self.md | 0 .../240._search_a_2d_matrix_ii.md | 0 .../242._valid_anagram.md | 0 .../252. Meeting Rooms.md | 0 ...fy_Preorder_Sequence_in_Binary_Search_Tree.md | 0 .../256. Paint House.md | 0 .../257._binary_tree_paths.md | 0 .../258_ Add_Digits.md | 0 .../261. Graph Valid Tree.md | 0 .../263._ugly_number.md | 0 .../264._ugly_number_ii.md | 0 .../265. Paint House II.md | 0 .../266. Palindrome Permutation.md | 0 .../267. Palindrome Permutation II.md | 0 .../268._missing_number.md | 0 .../270. Closest Binary Search Tree Value.md | 0 .../276. Paint Fence.md | 0 .../277. Find the Celebrity.md | 0 .../278._First_Bad _Version.md | 0 .../279._perfect_squares.md | 0 .../280._Wiggle_Sort.md | 0 .../283._move_zeroes.md | 0 .../285._inorder_successor_in_bst.md | 0 .../286. Walls and Gates.md | 0 .../289._game_of_life.md | 0 .../290._word_pattern.md | 0 .../292._nim_game.md | 0 .../296. Best Meeting Point.md | 0 .... Binary Tree Longest Consecutive Sequence.md | 0 .../299._bulls_and_cows.md | 0 .../300._longest_increasing_subsequence.md | 0 .../303._range_sum_query_-_immutable.md | 0 .../316._Remove_Duplicate_Letters.md | 0 .../319._Bulb_Switcher.md | 0 .../322. Coin Change.md | 0 ...onnected Components in an Undirected Graph.md | 0 .../324._Wiggle_Sort_II.md | 0 .../326._power_of_three.md | 0 .../328._odd_even_linked_list.md | 0 .../334._increasing_triplet_subsequence.md | 0 .../337._house_robber_iii.md | 0 .../338. Counting Bits.md | 0 .../339. Nested List Weight Sum.md | 0 .../341._Flatten_Nested_List_Iterator.md | 0 .../342._Power_of_Four.md | 0 .../344._reverse_string.md | 0 .../345._Reverse_Vowels_of_a_String.md | 0 .../349._intersection_of_two_arrays.md | 0 .../350._intersection_of_two_arrays_ii.md | 0 .../353. Design Snake Game.md | 0 .../364. Nested List Weight Sum II.md | 0 .../366. Find Leaves of Binary Tree.md | 0 .../367._valid_perfect_square.md | 0 .../369.Plus One Linked List.md | 0 .../371._sum_of_two_integers.md | 0 .../374._Guess_Number_Higher_or_Lower.md | 0 .../377._combination_sum_iv.md | 0 ...8._kth_smallest_element_in_a_sorted_matrix.md | 0 .../380. Insert Delete GetRandom O(1).md | 0 ...Delete GetRandom O(1) - Duplicates allowed.md | 0 .../382._linked_list_random_node.md | 0 .../383._ransom_note.md | 0 .../384. Shuffle an Array.md | 0 .../387._first_unique_character_in_a_string.md | 0 .../388._Longest_Absolute_File_Path.md | 0 .../389._find_the_difference.md | 0 .../392._is_subsequence.md | 0 .../394._decode_string.md | 0 .../400. Nth Digit.md | 0 .../401._binary_watch.md | 0 .../404._sum_of_left_leaves.md | 0 .../405. Convert a Number to Hexadecimal.md | 0 .../406._Queue_Reconstruction_by_Height.md | 0 .../412._fizz_buzz.md | 0 .../413. Arithmetic Slices.md | 0 .../414._third_maximum_number.md | 0 .../415._add_strings.md | 0 .../416. Partition Equal Subset Sum.md | 0 ...21._Maximum_XOR_of_Two_Numbers_in_an_Array.md | 0 .../422. Valid Word Square.md | 0 .../434._number_of_segments_in_a_string.md | 0 .../437._path_sum_iii.md | 0 .../438._Find_All_Anagrams_in_a_String.md | 0 .../439. Ternary Expression Parser.md | 0 .../441._arranging_coins.md | 0 ...._Find_All_Numbers_Disappeared_in_an_Array.md | 0 .../450. Delete Node in a BST.md | 0 ...453._Minimum_Moves_to_Equal_Array_Elements.md | 0 .../459._Repeated_Substring_Pattern.md | 0 .../461._Hamming Distance.md | 0 .../463._Island_Perimeter.md | 0 ...67._Unique_Substrings_in_Wraparound_String.md | 0 .../469. Convex Polygon.md | 0 .../476._Number_Complement.md | 0 .../477._Total_Hamming_Distance.md | 0 .../485._Max_Consecutive_Ones.md | 0 .../587._Erect_the_Fence .md | 0 .../599._Minimum_Index_Sum_of_Two_Lists.md | 0 .../647._Palindromic_Substrings.md | 0 .../657._Judge_Route_Circle.md | 0 .../665._Non-decreasing_Array.md | 0 .../672._Bulb_Switcher_II.md | 0 .../681._Next_Closest_Time.md | 0 .../682._Baseball_Game.md | 0 .../687._Longest_Univalue_Path.md | 0 .../740._delete_and_earn.md | 0 .../760._Find_Anagram_Mappings.md | 0 .../README.md | 0 ...arch \344\270\215\346\230\223\345\206\231.md" | 0 .../Data Structure and Algorthim Review.md | 0 .../Summarization/Dynamic Programming.md | 0 ...arching Algorithms \342\200\223 topcoder.pdf" | Bin ...6\213\347\232\204\350\275\254\346\215\242.md" | 0 .../LinkedList\346\212\200\345\267\247.md" | 0 .../Summarization/Maximal Square.pdf | Bin ...2\200\345\267\247\347\254\224\350\256\260.py" | 0 .../Range Sum Query 2D - Immutable.pdf | Bin .../Summarization/Recusrion & BackTracking.md | 0 .../backtracking\346\200\235\350\267\257.md" | 0 ..._in_a_linked_list\351\227\256\351\242\230.md" | 0 ...6\260\347\232\204\346\200\235\350\267\257.md" | 0 ...n\347\232\204\345\220\204\347\247\215pass.md" | 0 .../Summarization/slide_windows_template.md | 0 ...274\214_graph_search\357\274\214_dfs,_bfs.md" | 0 .../\344\275\215\350\277\220\347\256\227.md" | 0 ...6\222\345\210\227\347\256\227\346\263\225.md" | 0 .../\345\205\253\346\216\222\345\272\217.md" | 0 ...3\206\345\220\210\351\227\256\351\242\230.md" | 0 .../Summarization/\346\200\273\347\273\223.md" | 0 ...3\204\345\220\210\351\227\256\351\242\230.md" | 0 .../\351\200\222\345\275\222_recursion.md" | 0 323 files changed, 180 insertions(+) create mode 100644 docs/Algorithm_Templates/Cipher/README.md rename docs/{Algorithm Templates => Algorithm_Templates/Compression}/README.md (100%) create mode 100644 docs/Algorithm_Templates/Conversion/README.md create mode 100644 docs/Algorithm_Templates/Data_Structure/Graph/README.md create mode 100644 docs/Algorithm_Templates/Data_Structure/HashMap/README.md create mode 100644 docs/Algorithm_Templates/Data_Structure/HashTable/README.md create mode 100644 docs/Algorithm_Templates/Data_Structure/Heqp/README.md create mode 100644 docs/Algorithm_Templates/Data_Structure/LinkedList/README.md create mode 100644 docs/Algorithm_Templates/Data_Structure/Matrix/README.md create mode 100644 docs/Algorithm_Templates/Data_Structure/Queue/README.md create mode 100644 docs/Algorithm_Templates/Data_Structure/README.md create mode 100644 docs/Algorithm_Templates/Data_Structure/Stack/README.md create mode 100644 docs/Algorithm_Templates/Data_Structure/Tree/README.md create mode 100644 docs/Algorithm_Templates/Dynamic_Programming/README.md create mode 100644 docs/Algorithm_Templates/Hash/README.md create mode 100644 docs/Algorithm_Templates/README.md create mode 100644 docs/Algorithm_Templates/Search/README.md rename docs/{Algorithm Templates => Algorithm_Templates}/Sort/BubbleSort.py (100%) rename docs/{Algorithm Templates => Algorithm_Templates}/Sort/InsertSort.py (100%) rename docs/{Algorithm Templates => Algorithm_Templates}/Sort/MergeSort.py (100%) rename docs/{Algorithm Templates => Algorithm_Templates}/Sort/QuickSort.py (100%) create mode 100644 docs/Algorithm_Templates/Sort/README.md rename docs/{Algorithm Templates => Algorithm_Templates}/Sort/SelectionSort.py (100%) rename docs/{Algorithm Templates => Algorithm_Templates}/Sort/ShellSort.py (100%) create mode 100644 docs/Algorithm_Templates/Traversals/README.md rename docs/{Leetcode Solutions => Leetcode_Solutions}/001._two_sum.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/002._add_two_numbers.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/003._longest_substring_without_repeating_characters.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/004._median_of_two_sorted_arrays.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/005._longest_palindromic_substring.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/006._ZigZag_Conversion.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/007._Reverse_Integer.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/008._string_to_integer_(atoi).md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/009._Palindrome_Number.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/010._regular_expression_matching.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/011._container_with_most_water.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/012._Integer_to_Roman.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/013._Roman_to_Integer.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/014._longest_common_prefix.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/015._3sum.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/016._3sum_closest.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/017._letter_combinations_of_a_phone_number.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/018._4sum.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/019._remove_nth_node_from_end_of_list.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/020._valid_parentheses.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/021._merge_two_sorted_lists.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/022._generate_parentheses.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/023._merge_k_sorted_lists.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/024._swap_nodes_in_pairs.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/026._Remove_Duplicates_from_Sorted_Array.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/027._Remove_Element.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/028._implement_strstr().md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/030._Substring_with_Concatenation_of_All_Words.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/031._next_permutation.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/033._search_in_rotated_sorted_array.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/034._Search for a Range.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/035._search_insert_position.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/038._Count_and_Say.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/039._combination_sum.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/040._combination_sum_ii.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/042._trapping_rain_water.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/043._multiply_strings.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/044._wildcard_matching.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/045._Jump_Game_II.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/046._permutations.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/047._permutations_ii.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/048._rotate_image.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/049._group_anagrams_python.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/050._pow(x,_n).md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/051._n-queens.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/052._n-queens_ii.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/053._maximum_subarray.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/054._spiral_matrix.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/055._jump_game.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/056._Merge_Intervals.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/058._length_of_last_word.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/059._spiral_matrix_ii.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/060._permutation_sequence.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/061._rotate_list.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/064._minimum_path_sum.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/065.unique_paths_ii.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/066._plus_one.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/067._add_binary.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/069._sqrt(x).md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/070. Climbing Stairs.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/072._edit_distance.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/073. Set Matrix Zeroes.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/074._search_a_2d_matrix.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/075._sort_colors.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/076._Minimum_Window_Substring.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/077._combinations.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/078.Subsets .md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/079._word_search.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/082._remove_duplicates_from_sorted_list_ii.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/083._remove_duplicates_from_sorted_list.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/086._partition_list.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/088._merge_sorted_array.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/089._gray_code.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/090._subsets_ii.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/091._decode_ways.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/092._reverse_linked_list_ii.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/093._restore_ip_addresses.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/094._binary_tree_inorder_traversal.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/096._unique_binary_search_trees.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/098._validate_binary_search_tree.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/100._same_tree.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/101._symmetric_tree.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/102._binary_tree_level_order_traversal.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/103._binary_tree_zigzag_level_order_traversal.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/104._maximum_depth_of_binary_tree.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/105._construct_binary_tree_from_preorder_and_inorder_traversal.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/106._construct_binary_tree_from_inorder_and_postorder_traversal.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/107._binary_tree_level_order_traversal_ii.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/108._convert_sorted_array_to_binary_search_tree.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/109._convert_sorted_list_to_binary_search_tree.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/110._balanced_binary_tree.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/111._minimum_depth_of_binary_tree.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/112._path_sum.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/113._path_sum_ii.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/114._flatten_binary_tree_to_linked_list.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/116._populating_next_right_pointers_in_each_node.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/118._pascal's_triangle.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/119. Pascal's Triangle II.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/120. Triangle.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/121._Best_Time_to_Buy_and_Sell_Stock.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/125._valid_palindrome.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/126. Word Ladder II.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/127._word_ladder.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/128._Longest_Consecutive_Sequence.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/129._sum_root_to_leaf_numbers.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/130._surrounded_regions.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/131._palindrome_partitioning.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/133._clone_graph.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/136._single_number.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/139._word_break.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/140._word_break_ii.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/141._linked_list_cycle.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/142_Linked_List_Cycle_II.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/143._reorder_list.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/144._binary_tree_preorder_traversal.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/145._binary_tree_postorder_traversal.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/147._insertion_sort_list.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/148._sort_list.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/150._evaluate_reverse_polish_notation.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/151._reverse_words_in_a_string.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/152._maximum_product_subarray.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/153._find_minimum_in_rotated_sorted_array.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/155._min_stack.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/160._intersection_of_two_linked_lists.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/162._find_peak_element.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/165._compare_version_numbers.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/166._Fraction_to_Recurring_Decimal.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/167._two_sum_ii_-_input_array_is_sorted.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/168._excel_sheet_column_title.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/169._majority_element.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/171._excel_sheet_column_number.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/173._binary_search_tree_iterator.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/189._rotate_array.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/191._number_of_1_bits.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/198._house_robber.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/199._binary_tree_right_side_view.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/200._number_of_islands.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/203._remove_linked_list_elements.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/204._count_primes.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/205._isomorphic_strings.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/206._reverse_linked_list.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/207._course_schedule.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/208._implement_trie_(prefix_tree).md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/210._course_schedule_ii.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/211. Add and Search Word - Data structure design.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/213._house_robber_ii.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/216._combination_sum_iii.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/217._contains_duplicate.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/218._The _Skyline_Problem .md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/219._contains_duplicate_ii.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/221._maximal_square.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/222._count_complete_tree_nodes.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/223._rectangle_area.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/224. Basic Calculator .md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/225._implement_stack_using_queues.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/226._invert_binary_tree.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/227._basic_calculator_ii.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/228._summary_ranges.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/229._majority_element_ii.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/230._kth_smallest_element_in_a_bst.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/231. _Power_of_Two.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/232._implement_queue_using_stacks.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/234._palindrome_linked_list.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/235._lowest_common_ancestor_of_a_binary_search_tree.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/236._lowest_common_ancestor_of_a_binary_tree.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/237._delete_node_in_a_linked_list.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/238._product_of_array_except_self.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/240._search_a_2d_matrix_ii.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/242._valid_anagram.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/252. Meeting Rooms.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/256. Paint House.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/257._binary_tree_paths.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/258_ Add_Digits.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/261. Graph Valid Tree.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/263._ugly_number.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/264._ugly_number_ii.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/265. Paint House II.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/266. Palindrome Permutation.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/267. Palindrome Permutation II.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/268._missing_number.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/270. Closest Binary Search Tree Value.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/276. Paint Fence.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/277. Find the Celebrity.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/278._First_Bad _Version.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/279._perfect_squares.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/280._Wiggle_Sort.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/283._move_zeroes.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/285._inorder_successor_in_bst.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/286. Walls and Gates.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/289._game_of_life.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/290._word_pattern.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/292._nim_game.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/296. Best Meeting Point.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/298. Binary Tree Longest Consecutive Sequence.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/299._bulls_and_cows.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/300._longest_increasing_subsequence.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/303._range_sum_query_-_immutable.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/316._Remove_Duplicate_Letters.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/319._Bulb_Switcher.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/322. Coin Change.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/323. Number of Connected Components in an Undirected Graph.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/324._Wiggle_Sort_II.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/326._power_of_three.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/328._odd_even_linked_list.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/334._increasing_triplet_subsequence.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/337._house_robber_iii.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/338. Counting Bits.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/339. Nested List Weight Sum.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/341._Flatten_Nested_List_Iterator.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/342._Power_of_Four.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/344._reverse_string.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/345._Reverse_Vowels_of_a_String.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/349._intersection_of_two_arrays.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/350._intersection_of_two_arrays_ii.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/353. Design Snake Game.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/364. Nested List Weight Sum II.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/366. Find Leaves of Binary Tree.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/367._valid_perfect_square.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/369.Plus One Linked List.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/371._sum_of_two_integers.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/374._Guess_Number_Higher_or_Lower.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/377._combination_sum_iv.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/378._kth_smallest_element_in_a_sorted_matrix.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/380. Insert Delete GetRandom O(1).md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/381. Insert Delete GetRandom O(1) - Duplicates allowed.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/382._linked_list_random_node.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/383._ransom_note.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/384. Shuffle an Array.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/387._first_unique_character_in_a_string.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/388._Longest_Absolute_File_Path.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/389._find_the_difference.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/392._is_subsequence.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/394._decode_string.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/400. Nth Digit.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/401._binary_watch.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/404._sum_of_left_leaves.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/405. Convert a Number to Hexadecimal.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/406._Queue_Reconstruction_by_Height.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/412._fizz_buzz.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/413. Arithmetic Slices.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/414._third_maximum_number.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/415._add_strings.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/416. Partition Equal Subset Sum.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/422. Valid Word Square.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/434._number_of_segments_in_a_string.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/437._path_sum_iii.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/438._Find_All_Anagrams_in_a_String.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/439. Ternary Expression Parser.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/441._arranging_coins.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/448._Find_All_Numbers_Disappeared_in_an_Array.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/450. Delete Node in a BST.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/453._Minimum_Moves_to_Equal_Array_Elements.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/459._Repeated_Substring_Pattern.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/461._Hamming Distance.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/463._Island_Perimeter.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/467._Unique_Substrings_in_Wraparound_String.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/469. Convex Polygon.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/476._Number_Complement.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/477._Total_Hamming_Distance.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/485._Max_Consecutive_Ones.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/587._Erect_the_Fence .md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/599._Minimum_Index_Sum_of_Two_Lists.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/647._Palindromic_Substrings.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/657._Judge_Route_Circle.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/665._Non-decreasing_Array.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/672._Bulb_Switcher_II.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/681._Next_Closest_Time.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/682._Baseball_Game.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/687._Longest_Univalue_Path.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/740._delete_and_earn.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/760._Find_Anagram_Mappings.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/README.md (100%) rename "docs/Leetcode Solutions/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" => "docs/Leetcode_Solutions/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/Summarization/Data Structure and Algorthim Review.md (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/Summarization/Dynamic Programming.md (100%) rename "docs/Leetcode Solutions/Summarization/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" => "docs/Leetcode_Solutions/Summarization/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" (100%) rename "docs/Leetcode Solutions/Summarization/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" => "docs/Leetcode_Solutions/Summarization/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" (100%) rename "docs/Leetcode Solutions/Summarization/LinkedList\346\212\200\345\267\247.md" => "docs/Leetcode_Solutions/Summarization/LinkedList\346\212\200\345\267\247.md" (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/Summarization/Maximal Square.pdf (100%) rename "docs/Leetcode Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" => "docs/Leetcode_Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/Summarization/Range Sum Query 2D - Immutable.pdf (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/Summarization/Recusrion & BackTracking.md (100%) rename "docs/Leetcode Solutions/Summarization/backtracking\346\200\235\350\267\257.md" => "docs/Leetcode_Solutions/Summarization/backtracking\346\200\235\350\267\257.md" (100%) rename "docs/Leetcode Solutions/Summarization/delete_node_in_a_linked_list\351\227\256\351\242\230.md" => "docs/Leetcode_Solutions/Summarization/delete_node_in_a_linked_list\351\227\256\351\242\230.md" (100%) rename "docs/Leetcode Solutions/Summarization/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" => "docs/Leetcode_Solutions/Summarization/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" (100%) rename "docs/Leetcode Solutions/Summarization/python\347\232\204\345\220\204\347\247\215pass.md" => "docs/Leetcode_Solutions/Summarization/python\347\232\204\345\220\204\347\247\215pass.md" (100%) rename docs/{Leetcode Solutions => Leetcode_Solutions}/Summarization/slide_windows_template.md (100%) rename "docs/Leetcode Solutions/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" => "docs/Leetcode_Solutions/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" (100%) rename "docs/Leetcode Solutions/Summarization/\344\275\215\350\277\220\347\256\227.md" => "docs/Leetcode_Solutions/Summarization/\344\275\215\350\277\220\347\256\227.md" (100%) rename "docs/Leetcode Solutions/Summarization/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" => "docs/Leetcode_Solutions/Summarization/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" (100%) rename "docs/Leetcode Solutions/Summarization/\345\205\253\346\216\222\345\272\217.md" => "docs/Leetcode_Solutions/Summarization/\345\205\253\346\216\222\345\272\217.md" (100%) rename "docs/Leetcode Solutions/Summarization/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" => "docs/Leetcode_Solutions/Summarization/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" (100%) rename "docs/Leetcode Solutions/Summarization/\346\200\273\347\273\223.md" => "docs/Leetcode_Solutions/Summarization/\346\200\273\347\273\223.md" (100%) rename "docs/Leetcode Solutions/Summarization/\347\273\204\345\220\210\351\227\256\351\242\230.md" => "docs/Leetcode_Solutions/Summarization/\347\273\204\345\220\210\351\227\256\351\242\230.md" (100%) rename "docs/Leetcode Solutions/Summarization/\351\200\222\345\275\222_recursion.md" => "docs/Leetcode_Solutions/Summarization/\351\200\222\345\275\222_recursion.md" (100%) diff --git a/docs/Algorithm_Templates/Cipher/README.md b/docs/Algorithm_Templates/Cipher/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/Algorithm Templates/README.md b/docs/Algorithm_Templates/Compression/README.md similarity index 100% rename from docs/Algorithm Templates/README.md rename to docs/Algorithm_Templates/Compression/README.md diff --git a/docs/Algorithm_Templates/Conversion/README.md b/docs/Algorithm_Templates/Conversion/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/Algorithm_Templates/Data_Structure/Graph/README.md b/docs/Algorithm_Templates/Data_Structure/Graph/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Data_Structure/Graph/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Data_Structure/HashMap/README.md b/docs/Algorithm_Templates/Data_Structure/HashMap/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Data_Structure/HashMap/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Data_Structure/HashTable/README.md b/docs/Algorithm_Templates/Data_Structure/HashTable/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Data_Structure/HashTable/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Data_Structure/Heqp/README.md b/docs/Algorithm_Templates/Data_Structure/Heqp/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Data_Structure/Heqp/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Data_Structure/LinkedList/README.md b/docs/Algorithm_Templates/Data_Structure/LinkedList/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Data_Structure/LinkedList/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Data_Structure/Matrix/README.md b/docs/Algorithm_Templates/Data_Structure/Matrix/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Data_Structure/Matrix/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Data_Structure/Queue/README.md b/docs/Algorithm_Templates/Data_Structure/Queue/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Data_Structure/Queue/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Data_Structure/README.md b/docs/Algorithm_Templates/Data_Structure/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Data_Structure/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Data_Structure/Stack/README.md b/docs/Algorithm_Templates/Data_Structure/Stack/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Data_Structure/Stack/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Data_Structure/Tree/README.md b/docs/Algorithm_Templates/Data_Structure/Tree/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Data_Structure/Tree/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Dynamic_Programming/README.md b/docs/Algorithm_Templates/Dynamic_Programming/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/Algorithm_Templates/Hash/README.md b/docs/Algorithm_Templates/Hash/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/Algorithm_Templates/README.md b/docs/Algorithm_Templates/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm_Templates/Search/README.md b/docs/Algorithm_Templates/Search/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/Algorithm Templates/Sort/BubbleSort.py b/docs/Algorithm_Templates/Sort/BubbleSort.py similarity index 100% rename from docs/Algorithm Templates/Sort/BubbleSort.py rename to docs/Algorithm_Templates/Sort/BubbleSort.py diff --git a/docs/Algorithm Templates/Sort/InsertSort.py b/docs/Algorithm_Templates/Sort/InsertSort.py similarity index 100% rename from docs/Algorithm Templates/Sort/InsertSort.py rename to docs/Algorithm_Templates/Sort/InsertSort.py diff --git a/docs/Algorithm Templates/Sort/MergeSort.py b/docs/Algorithm_Templates/Sort/MergeSort.py similarity index 100% rename from docs/Algorithm Templates/Sort/MergeSort.py rename to docs/Algorithm_Templates/Sort/MergeSort.py diff --git a/docs/Algorithm Templates/Sort/QuickSort.py b/docs/Algorithm_Templates/Sort/QuickSort.py similarity index 100% rename from docs/Algorithm Templates/Sort/QuickSort.py rename to docs/Algorithm_Templates/Sort/QuickSort.py diff --git a/docs/Algorithm_Templates/Sort/README.md b/docs/Algorithm_Templates/Sort/README.md new file mode 100644 index 000000000..fe9c7bbf3 --- /dev/null +++ b/docs/Algorithm_Templates/Sort/README.md @@ -0,0 +1,15 @@ +# Some algorithm templates for better understanding! + +## 八大排序算法 + +![](/images/SortingAlgorithm/八大排序算法性能.png) + +| 名称 | 动图 | 代码 | +| --- | --- | --- | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | diff --git a/docs/Algorithm Templates/Sort/SelectionSort.py b/docs/Algorithm_Templates/Sort/SelectionSort.py similarity index 100% rename from docs/Algorithm Templates/Sort/SelectionSort.py rename to docs/Algorithm_Templates/Sort/SelectionSort.py diff --git a/docs/Algorithm Templates/Sort/ShellSort.py b/docs/Algorithm_Templates/Sort/ShellSort.py similarity index 100% rename from docs/Algorithm Templates/Sort/ShellSort.py rename to docs/Algorithm_Templates/Sort/ShellSort.py diff --git a/docs/Algorithm_Templates/Traversals/README.md b/docs/Algorithm_Templates/Traversals/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/Leetcode Solutions/001._two_sum.md b/docs/Leetcode_Solutions/001._two_sum.md similarity index 100% rename from docs/Leetcode Solutions/001._two_sum.md rename to docs/Leetcode_Solutions/001._two_sum.md diff --git a/docs/Leetcode Solutions/002._add_two_numbers.md b/docs/Leetcode_Solutions/002._add_two_numbers.md similarity index 100% rename from docs/Leetcode Solutions/002._add_two_numbers.md rename to docs/Leetcode_Solutions/002._add_two_numbers.md diff --git a/docs/Leetcode Solutions/003._longest_substring_without_repeating_characters.md b/docs/Leetcode_Solutions/003._longest_substring_without_repeating_characters.md similarity index 100% rename from docs/Leetcode Solutions/003._longest_substring_without_repeating_characters.md rename to docs/Leetcode_Solutions/003._longest_substring_without_repeating_characters.md diff --git a/docs/Leetcode Solutions/004._median_of_two_sorted_arrays.md b/docs/Leetcode_Solutions/004._median_of_two_sorted_arrays.md similarity index 100% rename from docs/Leetcode Solutions/004._median_of_two_sorted_arrays.md rename to docs/Leetcode_Solutions/004._median_of_two_sorted_arrays.md diff --git a/docs/Leetcode Solutions/005._longest_palindromic_substring.md b/docs/Leetcode_Solutions/005._longest_palindromic_substring.md similarity index 100% rename from docs/Leetcode Solutions/005._longest_palindromic_substring.md rename to docs/Leetcode_Solutions/005._longest_palindromic_substring.md diff --git a/docs/Leetcode Solutions/006._ZigZag_Conversion.md b/docs/Leetcode_Solutions/006._ZigZag_Conversion.md similarity index 100% rename from docs/Leetcode Solutions/006._ZigZag_Conversion.md rename to docs/Leetcode_Solutions/006._ZigZag_Conversion.md diff --git a/docs/Leetcode Solutions/007._Reverse_Integer.md b/docs/Leetcode_Solutions/007._Reverse_Integer.md similarity index 100% rename from docs/Leetcode Solutions/007._Reverse_Integer.md rename to docs/Leetcode_Solutions/007._Reverse_Integer.md diff --git a/docs/Leetcode Solutions/008._string_to_integer_(atoi).md b/docs/Leetcode_Solutions/008._string_to_integer_(atoi).md similarity index 100% rename from docs/Leetcode Solutions/008._string_to_integer_(atoi).md rename to docs/Leetcode_Solutions/008._string_to_integer_(atoi).md diff --git a/docs/Leetcode Solutions/009._Palindrome_Number.md b/docs/Leetcode_Solutions/009._Palindrome_Number.md similarity index 100% rename from docs/Leetcode Solutions/009._Palindrome_Number.md rename to docs/Leetcode_Solutions/009._Palindrome_Number.md diff --git a/docs/Leetcode Solutions/010._regular_expression_matching.md b/docs/Leetcode_Solutions/010._regular_expression_matching.md similarity index 100% rename from docs/Leetcode Solutions/010._regular_expression_matching.md rename to docs/Leetcode_Solutions/010._regular_expression_matching.md diff --git a/docs/Leetcode Solutions/011._container_with_most_water.md b/docs/Leetcode_Solutions/011._container_with_most_water.md similarity index 100% rename from docs/Leetcode Solutions/011._container_with_most_water.md rename to docs/Leetcode_Solutions/011._container_with_most_water.md diff --git a/docs/Leetcode Solutions/012._Integer_to_Roman.md b/docs/Leetcode_Solutions/012._Integer_to_Roman.md similarity index 100% rename from docs/Leetcode Solutions/012._Integer_to_Roman.md rename to docs/Leetcode_Solutions/012._Integer_to_Roman.md diff --git a/docs/Leetcode Solutions/013._Roman_to_Integer.md b/docs/Leetcode_Solutions/013._Roman_to_Integer.md similarity index 100% rename from docs/Leetcode Solutions/013._Roman_to_Integer.md rename to docs/Leetcode_Solutions/013._Roman_to_Integer.md diff --git a/docs/Leetcode Solutions/014._longest_common_prefix.md b/docs/Leetcode_Solutions/014._longest_common_prefix.md similarity index 100% rename from docs/Leetcode Solutions/014._longest_common_prefix.md rename to docs/Leetcode_Solutions/014._longest_common_prefix.md diff --git a/docs/Leetcode Solutions/015._3sum.md b/docs/Leetcode_Solutions/015._3sum.md similarity index 100% rename from docs/Leetcode Solutions/015._3sum.md rename to docs/Leetcode_Solutions/015._3sum.md diff --git a/docs/Leetcode Solutions/016._3sum_closest.md b/docs/Leetcode_Solutions/016._3sum_closest.md similarity index 100% rename from docs/Leetcode Solutions/016._3sum_closest.md rename to docs/Leetcode_Solutions/016._3sum_closest.md diff --git a/docs/Leetcode Solutions/017._letter_combinations_of_a_phone_number.md b/docs/Leetcode_Solutions/017._letter_combinations_of_a_phone_number.md similarity index 100% rename from docs/Leetcode Solutions/017._letter_combinations_of_a_phone_number.md rename to docs/Leetcode_Solutions/017._letter_combinations_of_a_phone_number.md diff --git a/docs/Leetcode Solutions/018._4sum.md b/docs/Leetcode_Solutions/018._4sum.md similarity index 100% rename from docs/Leetcode Solutions/018._4sum.md rename to docs/Leetcode_Solutions/018._4sum.md diff --git a/docs/Leetcode Solutions/019._remove_nth_node_from_end_of_list.md b/docs/Leetcode_Solutions/019._remove_nth_node_from_end_of_list.md similarity index 100% rename from docs/Leetcode Solutions/019._remove_nth_node_from_end_of_list.md rename to docs/Leetcode_Solutions/019._remove_nth_node_from_end_of_list.md diff --git a/docs/Leetcode Solutions/020._valid_parentheses.md b/docs/Leetcode_Solutions/020._valid_parentheses.md similarity index 100% rename from docs/Leetcode Solutions/020._valid_parentheses.md rename to docs/Leetcode_Solutions/020._valid_parentheses.md diff --git a/docs/Leetcode Solutions/021._merge_two_sorted_lists.md b/docs/Leetcode_Solutions/021._merge_two_sorted_lists.md similarity index 100% rename from docs/Leetcode Solutions/021._merge_two_sorted_lists.md rename to docs/Leetcode_Solutions/021._merge_two_sorted_lists.md diff --git a/docs/Leetcode Solutions/022._generate_parentheses.md b/docs/Leetcode_Solutions/022._generate_parentheses.md similarity index 100% rename from docs/Leetcode Solutions/022._generate_parentheses.md rename to docs/Leetcode_Solutions/022._generate_parentheses.md diff --git a/docs/Leetcode Solutions/023._merge_k_sorted_lists.md b/docs/Leetcode_Solutions/023._merge_k_sorted_lists.md similarity index 100% rename from docs/Leetcode Solutions/023._merge_k_sorted_lists.md rename to docs/Leetcode_Solutions/023._merge_k_sorted_lists.md diff --git a/docs/Leetcode Solutions/024._swap_nodes_in_pairs.md b/docs/Leetcode_Solutions/024._swap_nodes_in_pairs.md similarity index 100% rename from docs/Leetcode Solutions/024._swap_nodes_in_pairs.md rename to docs/Leetcode_Solutions/024._swap_nodes_in_pairs.md diff --git a/docs/Leetcode Solutions/026._Remove_Duplicates_from_Sorted_Array.md b/docs/Leetcode_Solutions/026._Remove_Duplicates_from_Sorted_Array.md similarity index 100% rename from docs/Leetcode Solutions/026._Remove_Duplicates_from_Sorted_Array.md rename to docs/Leetcode_Solutions/026._Remove_Duplicates_from_Sorted_Array.md diff --git a/docs/Leetcode Solutions/027._Remove_Element.md b/docs/Leetcode_Solutions/027._Remove_Element.md similarity index 100% rename from docs/Leetcode Solutions/027._Remove_Element.md rename to docs/Leetcode_Solutions/027._Remove_Element.md diff --git a/docs/Leetcode Solutions/028._implement_strstr().md b/docs/Leetcode_Solutions/028._implement_strstr().md similarity index 100% rename from docs/Leetcode Solutions/028._implement_strstr().md rename to docs/Leetcode_Solutions/028._implement_strstr().md diff --git a/docs/Leetcode Solutions/030._Substring_with_Concatenation_of_All_Words.md b/docs/Leetcode_Solutions/030._Substring_with_Concatenation_of_All_Words.md similarity index 100% rename from docs/Leetcode Solutions/030._Substring_with_Concatenation_of_All_Words.md rename to docs/Leetcode_Solutions/030._Substring_with_Concatenation_of_All_Words.md diff --git a/docs/Leetcode Solutions/031._next_permutation.md b/docs/Leetcode_Solutions/031._next_permutation.md similarity index 100% rename from docs/Leetcode Solutions/031._next_permutation.md rename to docs/Leetcode_Solutions/031._next_permutation.md diff --git a/docs/Leetcode Solutions/033._search_in_rotated_sorted_array.md b/docs/Leetcode_Solutions/033._search_in_rotated_sorted_array.md similarity index 100% rename from docs/Leetcode Solutions/033._search_in_rotated_sorted_array.md rename to docs/Leetcode_Solutions/033._search_in_rotated_sorted_array.md diff --git a/docs/Leetcode Solutions/034._Search for a Range.md b/docs/Leetcode_Solutions/034._Search for a Range.md similarity index 100% rename from docs/Leetcode Solutions/034._Search for a Range.md rename to docs/Leetcode_Solutions/034._Search for a Range.md diff --git a/docs/Leetcode Solutions/035._search_insert_position.md b/docs/Leetcode_Solutions/035._search_insert_position.md similarity index 100% rename from docs/Leetcode Solutions/035._search_insert_position.md rename to docs/Leetcode_Solutions/035._search_insert_position.md diff --git a/docs/Leetcode Solutions/038._Count_and_Say.md b/docs/Leetcode_Solutions/038._Count_and_Say.md similarity index 100% rename from docs/Leetcode Solutions/038._Count_and_Say.md rename to docs/Leetcode_Solutions/038._Count_and_Say.md diff --git a/docs/Leetcode Solutions/039._combination_sum.md b/docs/Leetcode_Solutions/039._combination_sum.md similarity index 100% rename from docs/Leetcode Solutions/039._combination_sum.md rename to docs/Leetcode_Solutions/039._combination_sum.md diff --git a/docs/Leetcode Solutions/040._combination_sum_ii.md b/docs/Leetcode_Solutions/040._combination_sum_ii.md similarity index 100% rename from docs/Leetcode Solutions/040._combination_sum_ii.md rename to docs/Leetcode_Solutions/040._combination_sum_ii.md diff --git a/docs/Leetcode Solutions/042._trapping_rain_water.md b/docs/Leetcode_Solutions/042._trapping_rain_water.md similarity index 100% rename from docs/Leetcode Solutions/042._trapping_rain_water.md rename to docs/Leetcode_Solutions/042._trapping_rain_water.md diff --git a/docs/Leetcode Solutions/043._multiply_strings.md b/docs/Leetcode_Solutions/043._multiply_strings.md similarity index 100% rename from docs/Leetcode Solutions/043._multiply_strings.md rename to docs/Leetcode_Solutions/043._multiply_strings.md diff --git a/docs/Leetcode Solutions/044._wildcard_matching.md b/docs/Leetcode_Solutions/044._wildcard_matching.md similarity index 100% rename from docs/Leetcode Solutions/044._wildcard_matching.md rename to docs/Leetcode_Solutions/044._wildcard_matching.md diff --git a/docs/Leetcode Solutions/045._Jump_Game_II.md b/docs/Leetcode_Solutions/045._Jump_Game_II.md similarity index 100% rename from docs/Leetcode Solutions/045._Jump_Game_II.md rename to docs/Leetcode_Solutions/045._Jump_Game_II.md diff --git a/docs/Leetcode Solutions/046._permutations.md b/docs/Leetcode_Solutions/046._permutations.md similarity index 100% rename from docs/Leetcode Solutions/046._permutations.md rename to docs/Leetcode_Solutions/046._permutations.md diff --git a/docs/Leetcode Solutions/047._permutations_ii.md b/docs/Leetcode_Solutions/047._permutations_ii.md similarity index 100% rename from docs/Leetcode Solutions/047._permutations_ii.md rename to docs/Leetcode_Solutions/047._permutations_ii.md diff --git a/docs/Leetcode Solutions/048._rotate_image.md b/docs/Leetcode_Solutions/048._rotate_image.md similarity index 100% rename from docs/Leetcode Solutions/048._rotate_image.md rename to docs/Leetcode_Solutions/048._rotate_image.md diff --git a/docs/Leetcode Solutions/049._group_anagrams_python.md b/docs/Leetcode_Solutions/049._group_anagrams_python.md similarity index 100% rename from docs/Leetcode Solutions/049._group_anagrams_python.md rename to docs/Leetcode_Solutions/049._group_anagrams_python.md diff --git a/docs/Leetcode Solutions/050._pow(x,_n).md b/docs/Leetcode_Solutions/050._pow(x,_n).md similarity index 100% rename from docs/Leetcode Solutions/050._pow(x,_n).md rename to docs/Leetcode_Solutions/050._pow(x,_n).md diff --git a/docs/Leetcode Solutions/051._n-queens.md b/docs/Leetcode_Solutions/051._n-queens.md similarity index 100% rename from docs/Leetcode Solutions/051._n-queens.md rename to docs/Leetcode_Solutions/051._n-queens.md diff --git a/docs/Leetcode Solutions/052._n-queens_ii.md b/docs/Leetcode_Solutions/052._n-queens_ii.md similarity index 100% rename from docs/Leetcode Solutions/052._n-queens_ii.md rename to docs/Leetcode_Solutions/052._n-queens_ii.md diff --git a/docs/Leetcode Solutions/053._maximum_subarray.md b/docs/Leetcode_Solutions/053._maximum_subarray.md similarity index 100% rename from docs/Leetcode Solutions/053._maximum_subarray.md rename to docs/Leetcode_Solutions/053._maximum_subarray.md diff --git a/docs/Leetcode Solutions/054._spiral_matrix.md b/docs/Leetcode_Solutions/054._spiral_matrix.md similarity index 100% rename from docs/Leetcode Solutions/054._spiral_matrix.md rename to docs/Leetcode_Solutions/054._spiral_matrix.md diff --git a/docs/Leetcode Solutions/055._jump_game.md b/docs/Leetcode_Solutions/055._jump_game.md similarity index 100% rename from docs/Leetcode Solutions/055._jump_game.md rename to docs/Leetcode_Solutions/055._jump_game.md diff --git a/docs/Leetcode Solutions/056._Merge_Intervals.md b/docs/Leetcode_Solutions/056._Merge_Intervals.md similarity index 100% rename from docs/Leetcode Solutions/056._Merge_Intervals.md rename to docs/Leetcode_Solutions/056._Merge_Intervals.md diff --git a/docs/Leetcode Solutions/058._length_of_last_word.md b/docs/Leetcode_Solutions/058._length_of_last_word.md similarity index 100% rename from docs/Leetcode Solutions/058._length_of_last_word.md rename to docs/Leetcode_Solutions/058._length_of_last_word.md diff --git a/docs/Leetcode Solutions/059._spiral_matrix_ii.md b/docs/Leetcode_Solutions/059._spiral_matrix_ii.md similarity index 100% rename from docs/Leetcode Solutions/059._spiral_matrix_ii.md rename to docs/Leetcode_Solutions/059._spiral_matrix_ii.md diff --git a/docs/Leetcode Solutions/060._permutation_sequence.md b/docs/Leetcode_Solutions/060._permutation_sequence.md similarity index 100% rename from docs/Leetcode Solutions/060._permutation_sequence.md rename to docs/Leetcode_Solutions/060._permutation_sequence.md diff --git a/docs/Leetcode Solutions/061._rotate_list.md b/docs/Leetcode_Solutions/061._rotate_list.md similarity index 100% rename from docs/Leetcode Solutions/061._rotate_list.md rename to docs/Leetcode_Solutions/061._rotate_list.md diff --git a/docs/Leetcode Solutions/064._minimum_path_sum.md b/docs/Leetcode_Solutions/064._minimum_path_sum.md similarity index 100% rename from docs/Leetcode Solutions/064._minimum_path_sum.md rename to docs/Leetcode_Solutions/064._minimum_path_sum.md diff --git a/docs/Leetcode Solutions/065.unique_paths_ii.md b/docs/Leetcode_Solutions/065.unique_paths_ii.md similarity index 100% rename from docs/Leetcode Solutions/065.unique_paths_ii.md rename to docs/Leetcode_Solutions/065.unique_paths_ii.md diff --git a/docs/Leetcode Solutions/066._plus_one.md b/docs/Leetcode_Solutions/066._plus_one.md similarity index 100% rename from docs/Leetcode Solutions/066._plus_one.md rename to docs/Leetcode_Solutions/066._plus_one.md diff --git a/docs/Leetcode Solutions/067._add_binary.md b/docs/Leetcode_Solutions/067._add_binary.md similarity index 100% rename from docs/Leetcode Solutions/067._add_binary.md rename to docs/Leetcode_Solutions/067._add_binary.md diff --git a/docs/Leetcode Solutions/069._sqrt(x).md b/docs/Leetcode_Solutions/069._sqrt(x).md similarity index 100% rename from docs/Leetcode Solutions/069._sqrt(x).md rename to docs/Leetcode_Solutions/069._sqrt(x).md diff --git a/docs/Leetcode Solutions/070. Climbing Stairs.md b/docs/Leetcode_Solutions/070. Climbing Stairs.md similarity index 100% rename from docs/Leetcode Solutions/070. Climbing Stairs.md rename to docs/Leetcode_Solutions/070. Climbing Stairs.md diff --git a/docs/Leetcode Solutions/072._edit_distance.md b/docs/Leetcode_Solutions/072._edit_distance.md similarity index 100% rename from docs/Leetcode Solutions/072._edit_distance.md rename to docs/Leetcode_Solutions/072._edit_distance.md diff --git a/docs/Leetcode Solutions/073. Set Matrix Zeroes.md b/docs/Leetcode_Solutions/073. Set Matrix Zeroes.md similarity index 100% rename from docs/Leetcode Solutions/073. Set Matrix Zeroes.md rename to docs/Leetcode_Solutions/073. Set Matrix Zeroes.md diff --git a/docs/Leetcode Solutions/074._search_a_2d_matrix.md b/docs/Leetcode_Solutions/074._search_a_2d_matrix.md similarity index 100% rename from docs/Leetcode Solutions/074._search_a_2d_matrix.md rename to docs/Leetcode_Solutions/074._search_a_2d_matrix.md diff --git a/docs/Leetcode Solutions/075._sort_colors.md b/docs/Leetcode_Solutions/075._sort_colors.md similarity index 100% rename from docs/Leetcode Solutions/075._sort_colors.md rename to docs/Leetcode_Solutions/075._sort_colors.md diff --git a/docs/Leetcode Solutions/076._Minimum_Window_Substring.md b/docs/Leetcode_Solutions/076._Minimum_Window_Substring.md similarity index 100% rename from docs/Leetcode Solutions/076._Minimum_Window_Substring.md rename to docs/Leetcode_Solutions/076._Minimum_Window_Substring.md diff --git a/docs/Leetcode Solutions/077._combinations.md b/docs/Leetcode_Solutions/077._combinations.md similarity index 100% rename from docs/Leetcode Solutions/077._combinations.md rename to docs/Leetcode_Solutions/077._combinations.md diff --git a/docs/Leetcode Solutions/078.Subsets .md b/docs/Leetcode_Solutions/078.Subsets .md similarity index 100% rename from docs/Leetcode Solutions/078.Subsets .md rename to docs/Leetcode_Solutions/078.Subsets .md diff --git a/docs/Leetcode Solutions/079._word_search.md b/docs/Leetcode_Solutions/079._word_search.md similarity index 100% rename from docs/Leetcode Solutions/079._word_search.md rename to docs/Leetcode_Solutions/079._word_search.md diff --git a/docs/Leetcode Solutions/082._remove_duplicates_from_sorted_list_ii.md b/docs/Leetcode_Solutions/082._remove_duplicates_from_sorted_list_ii.md similarity index 100% rename from docs/Leetcode Solutions/082._remove_duplicates_from_sorted_list_ii.md rename to docs/Leetcode_Solutions/082._remove_duplicates_from_sorted_list_ii.md diff --git a/docs/Leetcode Solutions/083._remove_duplicates_from_sorted_list.md b/docs/Leetcode_Solutions/083._remove_duplicates_from_sorted_list.md similarity index 100% rename from docs/Leetcode Solutions/083._remove_duplicates_from_sorted_list.md rename to docs/Leetcode_Solutions/083._remove_duplicates_from_sorted_list.md diff --git a/docs/Leetcode Solutions/086._partition_list.md b/docs/Leetcode_Solutions/086._partition_list.md similarity index 100% rename from docs/Leetcode Solutions/086._partition_list.md rename to docs/Leetcode_Solutions/086._partition_list.md diff --git a/docs/Leetcode Solutions/088._merge_sorted_array.md b/docs/Leetcode_Solutions/088._merge_sorted_array.md similarity index 100% rename from docs/Leetcode Solutions/088._merge_sorted_array.md rename to docs/Leetcode_Solutions/088._merge_sorted_array.md diff --git a/docs/Leetcode Solutions/089._gray_code.md b/docs/Leetcode_Solutions/089._gray_code.md similarity index 100% rename from docs/Leetcode Solutions/089._gray_code.md rename to docs/Leetcode_Solutions/089._gray_code.md diff --git a/docs/Leetcode Solutions/090._subsets_ii.md b/docs/Leetcode_Solutions/090._subsets_ii.md similarity index 100% rename from docs/Leetcode Solutions/090._subsets_ii.md rename to docs/Leetcode_Solutions/090._subsets_ii.md diff --git a/docs/Leetcode Solutions/091._decode_ways.md b/docs/Leetcode_Solutions/091._decode_ways.md similarity index 100% rename from docs/Leetcode Solutions/091._decode_ways.md rename to docs/Leetcode_Solutions/091._decode_ways.md diff --git a/docs/Leetcode Solutions/092._reverse_linked_list_ii.md b/docs/Leetcode_Solutions/092._reverse_linked_list_ii.md similarity index 100% rename from docs/Leetcode Solutions/092._reverse_linked_list_ii.md rename to docs/Leetcode_Solutions/092._reverse_linked_list_ii.md diff --git a/docs/Leetcode Solutions/093._restore_ip_addresses.md b/docs/Leetcode_Solutions/093._restore_ip_addresses.md similarity index 100% rename from docs/Leetcode Solutions/093._restore_ip_addresses.md rename to docs/Leetcode_Solutions/093._restore_ip_addresses.md diff --git a/docs/Leetcode Solutions/094._binary_tree_inorder_traversal.md b/docs/Leetcode_Solutions/094._binary_tree_inorder_traversal.md similarity index 100% rename from docs/Leetcode Solutions/094._binary_tree_inorder_traversal.md rename to docs/Leetcode_Solutions/094._binary_tree_inorder_traversal.md diff --git a/docs/Leetcode Solutions/096._unique_binary_search_trees.md b/docs/Leetcode_Solutions/096._unique_binary_search_trees.md similarity index 100% rename from docs/Leetcode Solutions/096._unique_binary_search_trees.md rename to docs/Leetcode_Solutions/096._unique_binary_search_trees.md diff --git a/docs/Leetcode Solutions/098._validate_binary_search_tree.md b/docs/Leetcode_Solutions/098._validate_binary_search_tree.md similarity index 100% rename from docs/Leetcode Solutions/098._validate_binary_search_tree.md rename to docs/Leetcode_Solutions/098._validate_binary_search_tree.md diff --git a/docs/Leetcode Solutions/100._same_tree.md b/docs/Leetcode_Solutions/100._same_tree.md similarity index 100% rename from docs/Leetcode Solutions/100._same_tree.md rename to docs/Leetcode_Solutions/100._same_tree.md diff --git a/docs/Leetcode Solutions/101._symmetric_tree.md b/docs/Leetcode_Solutions/101._symmetric_tree.md similarity index 100% rename from docs/Leetcode Solutions/101._symmetric_tree.md rename to docs/Leetcode_Solutions/101._symmetric_tree.md diff --git a/docs/Leetcode Solutions/102._binary_tree_level_order_traversal.md b/docs/Leetcode_Solutions/102._binary_tree_level_order_traversal.md similarity index 100% rename from docs/Leetcode Solutions/102._binary_tree_level_order_traversal.md rename to docs/Leetcode_Solutions/102._binary_tree_level_order_traversal.md diff --git a/docs/Leetcode Solutions/103._binary_tree_zigzag_level_order_traversal.md b/docs/Leetcode_Solutions/103._binary_tree_zigzag_level_order_traversal.md similarity index 100% rename from docs/Leetcode Solutions/103._binary_tree_zigzag_level_order_traversal.md rename to docs/Leetcode_Solutions/103._binary_tree_zigzag_level_order_traversal.md diff --git a/docs/Leetcode Solutions/104._maximum_depth_of_binary_tree.md b/docs/Leetcode_Solutions/104._maximum_depth_of_binary_tree.md similarity index 100% rename from docs/Leetcode Solutions/104._maximum_depth_of_binary_tree.md rename to docs/Leetcode_Solutions/104._maximum_depth_of_binary_tree.md diff --git a/docs/Leetcode Solutions/105._construct_binary_tree_from_preorder_and_inorder_traversal.md b/docs/Leetcode_Solutions/105._construct_binary_tree_from_preorder_and_inorder_traversal.md similarity index 100% rename from docs/Leetcode Solutions/105._construct_binary_tree_from_preorder_and_inorder_traversal.md rename to docs/Leetcode_Solutions/105._construct_binary_tree_from_preorder_and_inorder_traversal.md diff --git a/docs/Leetcode Solutions/106._construct_binary_tree_from_inorder_and_postorder_traversal.md b/docs/Leetcode_Solutions/106._construct_binary_tree_from_inorder_and_postorder_traversal.md similarity index 100% rename from docs/Leetcode Solutions/106._construct_binary_tree_from_inorder_and_postorder_traversal.md rename to docs/Leetcode_Solutions/106._construct_binary_tree_from_inorder_and_postorder_traversal.md diff --git a/docs/Leetcode Solutions/107._binary_tree_level_order_traversal_ii.md b/docs/Leetcode_Solutions/107._binary_tree_level_order_traversal_ii.md similarity index 100% rename from docs/Leetcode Solutions/107._binary_tree_level_order_traversal_ii.md rename to docs/Leetcode_Solutions/107._binary_tree_level_order_traversal_ii.md diff --git a/docs/Leetcode Solutions/108._convert_sorted_array_to_binary_search_tree.md b/docs/Leetcode_Solutions/108._convert_sorted_array_to_binary_search_tree.md similarity index 100% rename from docs/Leetcode Solutions/108._convert_sorted_array_to_binary_search_tree.md rename to docs/Leetcode_Solutions/108._convert_sorted_array_to_binary_search_tree.md diff --git a/docs/Leetcode Solutions/109._convert_sorted_list_to_binary_search_tree.md b/docs/Leetcode_Solutions/109._convert_sorted_list_to_binary_search_tree.md similarity index 100% rename from docs/Leetcode Solutions/109._convert_sorted_list_to_binary_search_tree.md rename to docs/Leetcode_Solutions/109._convert_sorted_list_to_binary_search_tree.md diff --git a/docs/Leetcode Solutions/110._balanced_binary_tree.md b/docs/Leetcode_Solutions/110._balanced_binary_tree.md similarity index 100% rename from docs/Leetcode Solutions/110._balanced_binary_tree.md rename to docs/Leetcode_Solutions/110._balanced_binary_tree.md diff --git a/docs/Leetcode Solutions/111._minimum_depth_of_binary_tree.md b/docs/Leetcode_Solutions/111._minimum_depth_of_binary_tree.md similarity index 100% rename from docs/Leetcode Solutions/111._minimum_depth_of_binary_tree.md rename to docs/Leetcode_Solutions/111._minimum_depth_of_binary_tree.md diff --git a/docs/Leetcode Solutions/112._path_sum.md b/docs/Leetcode_Solutions/112._path_sum.md similarity index 100% rename from docs/Leetcode Solutions/112._path_sum.md rename to docs/Leetcode_Solutions/112._path_sum.md diff --git a/docs/Leetcode Solutions/113._path_sum_ii.md b/docs/Leetcode_Solutions/113._path_sum_ii.md similarity index 100% rename from docs/Leetcode Solutions/113._path_sum_ii.md rename to docs/Leetcode_Solutions/113._path_sum_ii.md diff --git a/docs/Leetcode Solutions/114._flatten_binary_tree_to_linked_list.md b/docs/Leetcode_Solutions/114._flatten_binary_tree_to_linked_list.md similarity index 100% rename from docs/Leetcode Solutions/114._flatten_binary_tree_to_linked_list.md rename to docs/Leetcode_Solutions/114._flatten_binary_tree_to_linked_list.md diff --git a/docs/Leetcode Solutions/116._populating_next_right_pointers_in_each_node.md b/docs/Leetcode_Solutions/116._populating_next_right_pointers_in_each_node.md similarity index 100% rename from docs/Leetcode Solutions/116._populating_next_right_pointers_in_each_node.md rename to docs/Leetcode_Solutions/116._populating_next_right_pointers_in_each_node.md diff --git a/docs/Leetcode Solutions/118._pascal's_triangle.md b/docs/Leetcode_Solutions/118._pascal's_triangle.md similarity index 100% rename from docs/Leetcode Solutions/118._pascal's_triangle.md rename to docs/Leetcode_Solutions/118._pascal's_triangle.md diff --git a/docs/Leetcode Solutions/119. Pascal's Triangle II.md b/docs/Leetcode_Solutions/119. Pascal's Triangle II.md similarity index 100% rename from docs/Leetcode Solutions/119. Pascal's Triangle II.md rename to docs/Leetcode_Solutions/119. Pascal's Triangle II.md diff --git a/docs/Leetcode Solutions/120. Triangle.md b/docs/Leetcode_Solutions/120. Triangle.md similarity index 100% rename from docs/Leetcode Solutions/120. Triangle.md rename to docs/Leetcode_Solutions/120. Triangle.md diff --git a/docs/Leetcode Solutions/121._Best_Time_to_Buy_and_Sell_Stock.md b/docs/Leetcode_Solutions/121._Best_Time_to_Buy_and_Sell_Stock.md similarity index 100% rename from docs/Leetcode Solutions/121._Best_Time_to_Buy_and_Sell_Stock.md rename to docs/Leetcode_Solutions/121._Best_Time_to_Buy_and_Sell_Stock.md diff --git a/docs/Leetcode Solutions/125._valid_palindrome.md b/docs/Leetcode_Solutions/125._valid_palindrome.md similarity index 100% rename from docs/Leetcode Solutions/125._valid_palindrome.md rename to docs/Leetcode_Solutions/125._valid_palindrome.md diff --git a/docs/Leetcode Solutions/126. Word Ladder II.md b/docs/Leetcode_Solutions/126. Word Ladder II.md similarity index 100% rename from docs/Leetcode Solutions/126. Word Ladder II.md rename to docs/Leetcode_Solutions/126. Word Ladder II.md diff --git a/docs/Leetcode Solutions/127._word_ladder.md b/docs/Leetcode_Solutions/127._word_ladder.md similarity index 100% rename from docs/Leetcode Solutions/127._word_ladder.md rename to docs/Leetcode_Solutions/127._word_ladder.md diff --git a/docs/Leetcode Solutions/128._Longest_Consecutive_Sequence.md b/docs/Leetcode_Solutions/128._Longest_Consecutive_Sequence.md similarity index 100% rename from docs/Leetcode Solutions/128._Longest_Consecutive_Sequence.md rename to docs/Leetcode_Solutions/128._Longest_Consecutive_Sequence.md diff --git a/docs/Leetcode Solutions/129._sum_root_to_leaf_numbers.md b/docs/Leetcode_Solutions/129._sum_root_to_leaf_numbers.md similarity index 100% rename from docs/Leetcode Solutions/129._sum_root_to_leaf_numbers.md rename to docs/Leetcode_Solutions/129._sum_root_to_leaf_numbers.md diff --git a/docs/Leetcode Solutions/130._surrounded_regions.md b/docs/Leetcode_Solutions/130._surrounded_regions.md similarity index 100% rename from docs/Leetcode Solutions/130._surrounded_regions.md rename to docs/Leetcode_Solutions/130._surrounded_regions.md diff --git a/docs/Leetcode Solutions/131._palindrome_partitioning.md b/docs/Leetcode_Solutions/131._palindrome_partitioning.md similarity index 100% rename from docs/Leetcode Solutions/131._palindrome_partitioning.md rename to docs/Leetcode_Solutions/131._palindrome_partitioning.md diff --git a/docs/Leetcode Solutions/133._clone_graph.md b/docs/Leetcode_Solutions/133._clone_graph.md similarity index 100% rename from docs/Leetcode Solutions/133._clone_graph.md rename to docs/Leetcode_Solutions/133._clone_graph.md diff --git a/docs/Leetcode Solutions/136._single_number.md b/docs/Leetcode_Solutions/136._single_number.md similarity index 100% rename from docs/Leetcode Solutions/136._single_number.md rename to docs/Leetcode_Solutions/136._single_number.md diff --git a/docs/Leetcode Solutions/139._word_break.md b/docs/Leetcode_Solutions/139._word_break.md similarity index 100% rename from docs/Leetcode Solutions/139._word_break.md rename to docs/Leetcode_Solutions/139._word_break.md diff --git a/docs/Leetcode Solutions/140._word_break_ii.md b/docs/Leetcode_Solutions/140._word_break_ii.md similarity index 100% rename from docs/Leetcode Solutions/140._word_break_ii.md rename to docs/Leetcode_Solutions/140._word_break_ii.md diff --git a/docs/Leetcode Solutions/141._linked_list_cycle.md b/docs/Leetcode_Solutions/141._linked_list_cycle.md similarity index 100% rename from docs/Leetcode Solutions/141._linked_list_cycle.md rename to docs/Leetcode_Solutions/141._linked_list_cycle.md diff --git a/docs/Leetcode Solutions/142_Linked_List_Cycle_II.md b/docs/Leetcode_Solutions/142_Linked_List_Cycle_II.md similarity index 100% rename from docs/Leetcode Solutions/142_Linked_List_Cycle_II.md rename to docs/Leetcode_Solutions/142_Linked_List_Cycle_II.md diff --git a/docs/Leetcode Solutions/143._reorder_list.md b/docs/Leetcode_Solutions/143._reorder_list.md similarity index 100% rename from docs/Leetcode Solutions/143._reorder_list.md rename to docs/Leetcode_Solutions/143._reorder_list.md diff --git a/docs/Leetcode Solutions/144._binary_tree_preorder_traversal.md b/docs/Leetcode_Solutions/144._binary_tree_preorder_traversal.md similarity index 100% rename from docs/Leetcode Solutions/144._binary_tree_preorder_traversal.md rename to docs/Leetcode_Solutions/144._binary_tree_preorder_traversal.md diff --git a/docs/Leetcode Solutions/145._binary_tree_postorder_traversal.md b/docs/Leetcode_Solutions/145._binary_tree_postorder_traversal.md similarity index 100% rename from docs/Leetcode Solutions/145._binary_tree_postorder_traversal.md rename to docs/Leetcode_Solutions/145._binary_tree_postorder_traversal.md diff --git a/docs/Leetcode Solutions/147._insertion_sort_list.md b/docs/Leetcode_Solutions/147._insertion_sort_list.md similarity index 100% rename from docs/Leetcode Solutions/147._insertion_sort_list.md rename to docs/Leetcode_Solutions/147._insertion_sort_list.md diff --git a/docs/Leetcode Solutions/148._sort_list.md b/docs/Leetcode_Solutions/148._sort_list.md similarity index 100% rename from docs/Leetcode Solutions/148._sort_list.md rename to docs/Leetcode_Solutions/148._sort_list.md diff --git a/docs/Leetcode Solutions/150._evaluate_reverse_polish_notation.md b/docs/Leetcode_Solutions/150._evaluate_reverse_polish_notation.md similarity index 100% rename from docs/Leetcode Solutions/150._evaluate_reverse_polish_notation.md rename to docs/Leetcode_Solutions/150._evaluate_reverse_polish_notation.md diff --git a/docs/Leetcode Solutions/151._reverse_words_in_a_string.md b/docs/Leetcode_Solutions/151._reverse_words_in_a_string.md similarity index 100% rename from docs/Leetcode Solutions/151._reverse_words_in_a_string.md rename to docs/Leetcode_Solutions/151._reverse_words_in_a_string.md diff --git a/docs/Leetcode Solutions/152._maximum_product_subarray.md b/docs/Leetcode_Solutions/152._maximum_product_subarray.md similarity index 100% rename from docs/Leetcode Solutions/152._maximum_product_subarray.md rename to docs/Leetcode_Solutions/152._maximum_product_subarray.md diff --git a/docs/Leetcode Solutions/153._find_minimum_in_rotated_sorted_array.md b/docs/Leetcode_Solutions/153._find_minimum_in_rotated_sorted_array.md similarity index 100% rename from docs/Leetcode Solutions/153._find_minimum_in_rotated_sorted_array.md rename to docs/Leetcode_Solutions/153._find_minimum_in_rotated_sorted_array.md diff --git a/docs/Leetcode Solutions/155._min_stack.md b/docs/Leetcode_Solutions/155._min_stack.md similarity index 100% rename from docs/Leetcode Solutions/155._min_stack.md rename to docs/Leetcode_Solutions/155._min_stack.md diff --git a/docs/Leetcode Solutions/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md b/docs/Leetcode_Solutions/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md similarity index 100% rename from docs/Leetcode Solutions/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md rename to docs/Leetcode_Solutions/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md diff --git a/docs/Leetcode Solutions/160._intersection_of_two_linked_lists.md b/docs/Leetcode_Solutions/160._intersection_of_two_linked_lists.md similarity index 100% rename from docs/Leetcode Solutions/160._intersection_of_two_linked_lists.md rename to docs/Leetcode_Solutions/160._intersection_of_two_linked_lists.md diff --git a/docs/Leetcode Solutions/162._find_peak_element.md b/docs/Leetcode_Solutions/162._find_peak_element.md similarity index 100% rename from docs/Leetcode Solutions/162._find_peak_element.md rename to docs/Leetcode_Solutions/162._find_peak_element.md diff --git a/docs/Leetcode Solutions/165._compare_version_numbers.md b/docs/Leetcode_Solutions/165._compare_version_numbers.md similarity index 100% rename from docs/Leetcode Solutions/165._compare_version_numbers.md rename to docs/Leetcode_Solutions/165._compare_version_numbers.md diff --git a/docs/Leetcode Solutions/166._Fraction_to_Recurring_Decimal.md b/docs/Leetcode_Solutions/166._Fraction_to_Recurring_Decimal.md similarity index 100% rename from docs/Leetcode Solutions/166._Fraction_to_Recurring_Decimal.md rename to docs/Leetcode_Solutions/166._Fraction_to_Recurring_Decimal.md diff --git a/docs/Leetcode Solutions/167._two_sum_ii_-_input_array_is_sorted.md b/docs/Leetcode_Solutions/167._two_sum_ii_-_input_array_is_sorted.md similarity index 100% rename from docs/Leetcode Solutions/167._two_sum_ii_-_input_array_is_sorted.md rename to docs/Leetcode_Solutions/167._two_sum_ii_-_input_array_is_sorted.md diff --git a/docs/Leetcode Solutions/168._excel_sheet_column_title.md b/docs/Leetcode_Solutions/168._excel_sheet_column_title.md similarity index 100% rename from docs/Leetcode Solutions/168._excel_sheet_column_title.md rename to docs/Leetcode_Solutions/168._excel_sheet_column_title.md diff --git a/docs/Leetcode Solutions/169._majority_element.md b/docs/Leetcode_Solutions/169._majority_element.md similarity index 100% rename from docs/Leetcode Solutions/169._majority_element.md rename to docs/Leetcode_Solutions/169._majority_element.md diff --git a/docs/Leetcode Solutions/171._excel_sheet_column_number.md b/docs/Leetcode_Solutions/171._excel_sheet_column_number.md similarity index 100% rename from docs/Leetcode Solutions/171._excel_sheet_column_number.md rename to docs/Leetcode_Solutions/171._excel_sheet_column_number.md diff --git a/docs/Leetcode Solutions/173._binary_search_tree_iterator.md b/docs/Leetcode_Solutions/173._binary_search_tree_iterator.md similarity index 100% rename from docs/Leetcode Solutions/173._binary_search_tree_iterator.md rename to docs/Leetcode_Solutions/173._binary_search_tree_iterator.md diff --git a/docs/Leetcode Solutions/189._rotate_array.md b/docs/Leetcode_Solutions/189._rotate_array.md similarity index 100% rename from docs/Leetcode Solutions/189._rotate_array.md rename to docs/Leetcode_Solutions/189._rotate_array.md diff --git a/docs/Leetcode Solutions/191._number_of_1_bits.md b/docs/Leetcode_Solutions/191._number_of_1_bits.md similarity index 100% rename from docs/Leetcode Solutions/191._number_of_1_bits.md rename to docs/Leetcode_Solutions/191._number_of_1_bits.md diff --git a/docs/Leetcode Solutions/198._house_robber.md b/docs/Leetcode_Solutions/198._house_robber.md similarity index 100% rename from docs/Leetcode Solutions/198._house_robber.md rename to docs/Leetcode_Solutions/198._house_robber.md diff --git a/docs/Leetcode Solutions/199._binary_tree_right_side_view.md b/docs/Leetcode_Solutions/199._binary_tree_right_side_view.md similarity index 100% rename from docs/Leetcode Solutions/199._binary_tree_right_side_view.md rename to docs/Leetcode_Solutions/199._binary_tree_right_side_view.md diff --git a/docs/Leetcode Solutions/200._number_of_islands.md b/docs/Leetcode_Solutions/200._number_of_islands.md similarity index 100% rename from docs/Leetcode Solutions/200._number_of_islands.md rename to docs/Leetcode_Solutions/200._number_of_islands.md diff --git a/docs/Leetcode Solutions/203._remove_linked_list_elements.md b/docs/Leetcode_Solutions/203._remove_linked_list_elements.md similarity index 100% rename from docs/Leetcode Solutions/203._remove_linked_list_elements.md rename to docs/Leetcode_Solutions/203._remove_linked_list_elements.md diff --git a/docs/Leetcode Solutions/204._count_primes.md b/docs/Leetcode_Solutions/204._count_primes.md similarity index 100% rename from docs/Leetcode Solutions/204._count_primes.md rename to docs/Leetcode_Solutions/204._count_primes.md diff --git a/docs/Leetcode Solutions/205._isomorphic_strings.md b/docs/Leetcode_Solutions/205._isomorphic_strings.md similarity index 100% rename from docs/Leetcode Solutions/205._isomorphic_strings.md rename to docs/Leetcode_Solutions/205._isomorphic_strings.md diff --git a/docs/Leetcode Solutions/206._reverse_linked_list.md b/docs/Leetcode_Solutions/206._reverse_linked_list.md similarity index 100% rename from docs/Leetcode Solutions/206._reverse_linked_list.md rename to docs/Leetcode_Solutions/206._reverse_linked_list.md diff --git a/docs/Leetcode Solutions/207._course_schedule.md b/docs/Leetcode_Solutions/207._course_schedule.md similarity index 100% rename from docs/Leetcode Solutions/207._course_schedule.md rename to docs/Leetcode_Solutions/207._course_schedule.md diff --git a/docs/Leetcode Solutions/208._implement_trie_(prefix_tree).md b/docs/Leetcode_Solutions/208._implement_trie_(prefix_tree).md similarity index 100% rename from docs/Leetcode Solutions/208._implement_trie_(prefix_tree).md rename to docs/Leetcode_Solutions/208._implement_trie_(prefix_tree).md diff --git a/docs/Leetcode Solutions/210._course_schedule_ii.md b/docs/Leetcode_Solutions/210._course_schedule_ii.md similarity index 100% rename from docs/Leetcode Solutions/210._course_schedule_ii.md rename to docs/Leetcode_Solutions/210._course_schedule_ii.md diff --git a/docs/Leetcode Solutions/211. Add and Search Word - Data structure design.md b/docs/Leetcode_Solutions/211. Add and Search Word - Data structure design.md similarity index 100% rename from docs/Leetcode Solutions/211. Add and Search Word - Data structure design.md rename to docs/Leetcode_Solutions/211. Add and Search Word - Data structure design.md diff --git a/docs/Leetcode Solutions/213._house_robber_ii.md b/docs/Leetcode_Solutions/213._house_robber_ii.md similarity index 100% rename from docs/Leetcode Solutions/213._house_robber_ii.md rename to docs/Leetcode_Solutions/213._house_robber_ii.md diff --git a/docs/Leetcode Solutions/216._combination_sum_iii.md b/docs/Leetcode_Solutions/216._combination_sum_iii.md similarity index 100% rename from docs/Leetcode Solutions/216._combination_sum_iii.md rename to docs/Leetcode_Solutions/216._combination_sum_iii.md diff --git a/docs/Leetcode Solutions/217._contains_duplicate.md b/docs/Leetcode_Solutions/217._contains_duplicate.md similarity index 100% rename from docs/Leetcode Solutions/217._contains_duplicate.md rename to docs/Leetcode_Solutions/217._contains_duplicate.md diff --git a/docs/Leetcode Solutions/218._The _Skyline_Problem .md b/docs/Leetcode_Solutions/218._The _Skyline_Problem .md similarity index 100% rename from docs/Leetcode Solutions/218._The _Skyline_Problem .md rename to docs/Leetcode_Solutions/218._The _Skyline_Problem .md diff --git a/docs/Leetcode Solutions/219._contains_duplicate_ii.md b/docs/Leetcode_Solutions/219._contains_duplicate_ii.md similarity index 100% rename from docs/Leetcode Solutions/219._contains_duplicate_ii.md rename to docs/Leetcode_Solutions/219._contains_duplicate_ii.md diff --git a/docs/Leetcode Solutions/221._maximal_square.md b/docs/Leetcode_Solutions/221._maximal_square.md similarity index 100% rename from docs/Leetcode Solutions/221._maximal_square.md rename to docs/Leetcode_Solutions/221._maximal_square.md diff --git a/docs/Leetcode Solutions/222._count_complete_tree_nodes.md b/docs/Leetcode_Solutions/222._count_complete_tree_nodes.md similarity index 100% rename from docs/Leetcode Solutions/222._count_complete_tree_nodes.md rename to docs/Leetcode_Solutions/222._count_complete_tree_nodes.md diff --git a/docs/Leetcode Solutions/223._rectangle_area.md b/docs/Leetcode_Solutions/223._rectangle_area.md similarity index 100% rename from docs/Leetcode Solutions/223._rectangle_area.md rename to docs/Leetcode_Solutions/223._rectangle_area.md diff --git a/docs/Leetcode Solutions/224. Basic Calculator .md b/docs/Leetcode_Solutions/224. Basic Calculator .md similarity index 100% rename from docs/Leetcode Solutions/224. Basic Calculator .md rename to docs/Leetcode_Solutions/224. Basic Calculator .md diff --git a/docs/Leetcode Solutions/225._implement_stack_using_queues.md b/docs/Leetcode_Solutions/225._implement_stack_using_queues.md similarity index 100% rename from docs/Leetcode Solutions/225._implement_stack_using_queues.md rename to docs/Leetcode_Solutions/225._implement_stack_using_queues.md diff --git a/docs/Leetcode Solutions/226._invert_binary_tree.md b/docs/Leetcode_Solutions/226._invert_binary_tree.md similarity index 100% rename from docs/Leetcode Solutions/226._invert_binary_tree.md rename to docs/Leetcode_Solutions/226._invert_binary_tree.md diff --git a/docs/Leetcode Solutions/227._basic_calculator_ii.md b/docs/Leetcode_Solutions/227._basic_calculator_ii.md similarity index 100% rename from docs/Leetcode Solutions/227._basic_calculator_ii.md rename to docs/Leetcode_Solutions/227._basic_calculator_ii.md diff --git a/docs/Leetcode Solutions/228._summary_ranges.md b/docs/Leetcode_Solutions/228._summary_ranges.md similarity index 100% rename from docs/Leetcode Solutions/228._summary_ranges.md rename to docs/Leetcode_Solutions/228._summary_ranges.md diff --git a/docs/Leetcode Solutions/229._majority_element_ii.md b/docs/Leetcode_Solutions/229._majority_element_ii.md similarity index 100% rename from docs/Leetcode Solutions/229._majority_element_ii.md rename to docs/Leetcode_Solutions/229._majority_element_ii.md diff --git a/docs/Leetcode Solutions/230._kth_smallest_element_in_a_bst.md b/docs/Leetcode_Solutions/230._kth_smallest_element_in_a_bst.md similarity index 100% rename from docs/Leetcode Solutions/230._kth_smallest_element_in_a_bst.md rename to docs/Leetcode_Solutions/230._kth_smallest_element_in_a_bst.md diff --git a/docs/Leetcode Solutions/231. _Power_of_Two.md b/docs/Leetcode_Solutions/231. _Power_of_Two.md similarity index 100% rename from docs/Leetcode Solutions/231. _Power_of_Two.md rename to docs/Leetcode_Solutions/231. _Power_of_Two.md diff --git a/docs/Leetcode Solutions/232._implement_queue_using_stacks.md b/docs/Leetcode_Solutions/232._implement_queue_using_stacks.md similarity index 100% rename from docs/Leetcode Solutions/232._implement_queue_using_stacks.md rename to docs/Leetcode_Solutions/232._implement_queue_using_stacks.md diff --git a/docs/Leetcode Solutions/234._palindrome_linked_list.md b/docs/Leetcode_Solutions/234._palindrome_linked_list.md similarity index 100% rename from docs/Leetcode Solutions/234._palindrome_linked_list.md rename to docs/Leetcode_Solutions/234._palindrome_linked_list.md diff --git a/docs/Leetcode Solutions/235._lowest_common_ancestor_of_a_binary_search_tree.md b/docs/Leetcode_Solutions/235._lowest_common_ancestor_of_a_binary_search_tree.md similarity index 100% rename from docs/Leetcode Solutions/235._lowest_common_ancestor_of_a_binary_search_tree.md rename to docs/Leetcode_Solutions/235._lowest_common_ancestor_of_a_binary_search_tree.md diff --git a/docs/Leetcode Solutions/236._lowest_common_ancestor_of_a_binary_tree.md b/docs/Leetcode_Solutions/236._lowest_common_ancestor_of_a_binary_tree.md similarity index 100% rename from docs/Leetcode Solutions/236._lowest_common_ancestor_of_a_binary_tree.md rename to docs/Leetcode_Solutions/236._lowest_common_ancestor_of_a_binary_tree.md diff --git a/docs/Leetcode Solutions/237._delete_node_in_a_linked_list.md b/docs/Leetcode_Solutions/237._delete_node_in_a_linked_list.md similarity index 100% rename from docs/Leetcode Solutions/237._delete_node_in_a_linked_list.md rename to docs/Leetcode_Solutions/237._delete_node_in_a_linked_list.md diff --git a/docs/Leetcode Solutions/238._product_of_array_except_self.md b/docs/Leetcode_Solutions/238._product_of_array_except_self.md similarity index 100% rename from docs/Leetcode Solutions/238._product_of_array_except_self.md rename to docs/Leetcode_Solutions/238._product_of_array_except_self.md diff --git a/docs/Leetcode Solutions/240._search_a_2d_matrix_ii.md b/docs/Leetcode_Solutions/240._search_a_2d_matrix_ii.md similarity index 100% rename from docs/Leetcode Solutions/240._search_a_2d_matrix_ii.md rename to docs/Leetcode_Solutions/240._search_a_2d_matrix_ii.md diff --git a/docs/Leetcode Solutions/242._valid_anagram.md b/docs/Leetcode_Solutions/242._valid_anagram.md similarity index 100% rename from docs/Leetcode Solutions/242._valid_anagram.md rename to docs/Leetcode_Solutions/242._valid_anagram.md diff --git a/docs/Leetcode Solutions/252. Meeting Rooms.md b/docs/Leetcode_Solutions/252. Meeting Rooms.md similarity index 100% rename from docs/Leetcode Solutions/252. Meeting Rooms.md rename to docs/Leetcode_Solutions/252. Meeting Rooms.md diff --git a/docs/Leetcode Solutions/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md b/docs/Leetcode_Solutions/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md similarity index 100% rename from docs/Leetcode Solutions/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md rename to docs/Leetcode_Solutions/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md diff --git a/docs/Leetcode Solutions/256. Paint House.md b/docs/Leetcode_Solutions/256. Paint House.md similarity index 100% rename from docs/Leetcode Solutions/256. Paint House.md rename to docs/Leetcode_Solutions/256. Paint House.md diff --git a/docs/Leetcode Solutions/257._binary_tree_paths.md b/docs/Leetcode_Solutions/257._binary_tree_paths.md similarity index 100% rename from docs/Leetcode Solutions/257._binary_tree_paths.md rename to docs/Leetcode_Solutions/257._binary_tree_paths.md diff --git a/docs/Leetcode Solutions/258_ Add_Digits.md b/docs/Leetcode_Solutions/258_ Add_Digits.md similarity index 100% rename from docs/Leetcode Solutions/258_ Add_Digits.md rename to docs/Leetcode_Solutions/258_ Add_Digits.md diff --git a/docs/Leetcode Solutions/261. Graph Valid Tree.md b/docs/Leetcode_Solutions/261. Graph Valid Tree.md similarity index 100% rename from docs/Leetcode Solutions/261. Graph Valid Tree.md rename to docs/Leetcode_Solutions/261. Graph Valid Tree.md diff --git a/docs/Leetcode Solutions/263._ugly_number.md b/docs/Leetcode_Solutions/263._ugly_number.md similarity index 100% rename from docs/Leetcode Solutions/263._ugly_number.md rename to docs/Leetcode_Solutions/263._ugly_number.md diff --git a/docs/Leetcode Solutions/264._ugly_number_ii.md b/docs/Leetcode_Solutions/264._ugly_number_ii.md similarity index 100% rename from docs/Leetcode Solutions/264._ugly_number_ii.md rename to docs/Leetcode_Solutions/264._ugly_number_ii.md diff --git a/docs/Leetcode Solutions/265. Paint House II.md b/docs/Leetcode_Solutions/265. Paint House II.md similarity index 100% rename from docs/Leetcode Solutions/265. Paint House II.md rename to docs/Leetcode_Solutions/265. Paint House II.md diff --git a/docs/Leetcode Solutions/266. Palindrome Permutation.md b/docs/Leetcode_Solutions/266. Palindrome Permutation.md similarity index 100% rename from docs/Leetcode Solutions/266. Palindrome Permutation.md rename to docs/Leetcode_Solutions/266. Palindrome Permutation.md diff --git a/docs/Leetcode Solutions/267. Palindrome Permutation II.md b/docs/Leetcode_Solutions/267. Palindrome Permutation II.md similarity index 100% rename from docs/Leetcode Solutions/267. Palindrome Permutation II.md rename to docs/Leetcode_Solutions/267. Palindrome Permutation II.md diff --git a/docs/Leetcode Solutions/268._missing_number.md b/docs/Leetcode_Solutions/268._missing_number.md similarity index 100% rename from docs/Leetcode Solutions/268._missing_number.md rename to docs/Leetcode_Solutions/268._missing_number.md diff --git a/docs/Leetcode Solutions/270. Closest Binary Search Tree Value.md b/docs/Leetcode_Solutions/270. Closest Binary Search Tree Value.md similarity index 100% rename from docs/Leetcode Solutions/270. Closest Binary Search Tree Value.md rename to docs/Leetcode_Solutions/270. Closest Binary Search Tree Value.md diff --git a/docs/Leetcode Solutions/276. Paint Fence.md b/docs/Leetcode_Solutions/276. Paint Fence.md similarity index 100% rename from docs/Leetcode Solutions/276. Paint Fence.md rename to docs/Leetcode_Solutions/276. Paint Fence.md diff --git a/docs/Leetcode Solutions/277. Find the Celebrity.md b/docs/Leetcode_Solutions/277. Find the Celebrity.md similarity index 100% rename from docs/Leetcode Solutions/277. Find the Celebrity.md rename to docs/Leetcode_Solutions/277. Find the Celebrity.md diff --git a/docs/Leetcode Solutions/278._First_Bad _Version.md b/docs/Leetcode_Solutions/278._First_Bad _Version.md similarity index 100% rename from docs/Leetcode Solutions/278._First_Bad _Version.md rename to docs/Leetcode_Solutions/278._First_Bad _Version.md diff --git a/docs/Leetcode Solutions/279._perfect_squares.md b/docs/Leetcode_Solutions/279._perfect_squares.md similarity index 100% rename from docs/Leetcode Solutions/279._perfect_squares.md rename to docs/Leetcode_Solutions/279._perfect_squares.md diff --git a/docs/Leetcode Solutions/280._Wiggle_Sort.md b/docs/Leetcode_Solutions/280._Wiggle_Sort.md similarity index 100% rename from docs/Leetcode Solutions/280._Wiggle_Sort.md rename to docs/Leetcode_Solutions/280._Wiggle_Sort.md diff --git a/docs/Leetcode Solutions/283._move_zeroes.md b/docs/Leetcode_Solutions/283._move_zeroes.md similarity index 100% rename from docs/Leetcode Solutions/283._move_zeroes.md rename to docs/Leetcode_Solutions/283._move_zeroes.md diff --git a/docs/Leetcode Solutions/285._inorder_successor_in_bst.md b/docs/Leetcode_Solutions/285._inorder_successor_in_bst.md similarity index 100% rename from docs/Leetcode Solutions/285._inorder_successor_in_bst.md rename to docs/Leetcode_Solutions/285._inorder_successor_in_bst.md diff --git a/docs/Leetcode Solutions/286. Walls and Gates.md b/docs/Leetcode_Solutions/286. Walls and Gates.md similarity index 100% rename from docs/Leetcode Solutions/286. Walls and Gates.md rename to docs/Leetcode_Solutions/286. Walls and Gates.md diff --git a/docs/Leetcode Solutions/289._game_of_life.md b/docs/Leetcode_Solutions/289._game_of_life.md similarity index 100% rename from docs/Leetcode Solutions/289._game_of_life.md rename to docs/Leetcode_Solutions/289._game_of_life.md diff --git a/docs/Leetcode Solutions/290._word_pattern.md b/docs/Leetcode_Solutions/290._word_pattern.md similarity index 100% rename from docs/Leetcode Solutions/290._word_pattern.md rename to docs/Leetcode_Solutions/290._word_pattern.md diff --git a/docs/Leetcode Solutions/292._nim_game.md b/docs/Leetcode_Solutions/292._nim_game.md similarity index 100% rename from docs/Leetcode Solutions/292._nim_game.md rename to docs/Leetcode_Solutions/292._nim_game.md diff --git a/docs/Leetcode Solutions/296. Best Meeting Point.md b/docs/Leetcode_Solutions/296. Best Meeting Point.md similarity index 100% rename from docs/Leetcode Solutions/296. Best Meeting Point.md rename to docs/Leetcode_Solutions/296. Best Meeting Point.md diff --git a/docs/Leetcode Solutions/298. Binary Tree Longest Consecutive Sequence.md b/docs/Leetcode_Solutions/298. Binary Tree Longest Consecutive Sequence.md similarity index 100% rename from docs/Leetcode Solutions/298. Binary Tree Longest Consecutive Sequence.md rename to docs/Leetcode_Solutions/298. Binary Tree Longest Consecutive Sequence.md diff --git a/docs/Leetcode Solutions/299._bulls_and_cows.md b/docs/Leetcode_Solutions/299._bulls_and_cows.md similarity index 100% rename from docs/Leetcode Solutions/299._bulls_and_cows.md rename to docs/Leetcode_Solutions/299._bulls_and_cows.md diff --git a/docs/Leetcode Solutions/300._longest_increasing_subsequence.md b/docs/Leetcode_Solutions/300._longest_increasing_subsequence.md similarity index 100% rename from docs/Leetcode Solutions/300._longest_increasing_subsequence.md rename to docs/Leetcode_Solutions/300._longest_increasing_subsequence.md diff --git a/docs/Leetcode Solutions/303._range_sum_query_-_immutable.md b/docs/Leetcode_Solutions/303._range_sum_query_-_immutable.md similarity index 100% rename from docs/Leetcode Solutions/303._range_sum_query_-_immutable.md rename to docs/Leetcode_Solutions/303._range_sum_query_-_immutable.md diff --git a/docs/Leetcode Solutions/316._Remove_Duplicate_Letters.md b/docs/Leetcode_Solutions/316._Remove_Duplicate_Letters.md similarity index 100% rename from docs/Leetcode Solutions/316._Remove_Duplicate_Letters.md rename to docs/Leetcode_Solutions/316._Remove_Duplicate_Letters.md diff --git a/docs/Leetcode Solutions/319._Bulb_Switcher.md b/docs/Leetcode_Solutions/319._Bulb_Switcher.md similarity index 100% rename from docs/Leetcode Solutions/319._Bulb_Switcher.md rename to docs/Leetcode_Solutions/319._Bulb_Switcher.md diff --git a/docs/Leetcode Solutions/322. Coin Change.md b/docs/Leetcode_Solutions/322. Coin Change.md similarity index 100% rename from docs/Leetcode Solutions/322. Coin Change.md rename to docs/Leetcode_Solutions/322. Coin Change.md diff --git a/docs/Leetcode Solutions/323. Number of Connected Components in an Undirected Graph.md b/docs/Leetcode_Solutions/323. Number of Connected Components in an Undirected Graph.md similarity index 100% rename from docs/Leetcode Solutions/323. Number of Connected Components in an Undirected Graph.md rename to docs/Leetcode_Solutions/323. Number of Connected Components in an Undirected Graph.md diff --git a/docs/Leetcode Solutions/324._Wiggle_Sort_II.md b/docs/Leetcode_Solutions/324._Wiggle_Sort_II.md similarity index 100% rename from docs/Leetcode Solutions/324._Wiggle_Sort_II.md rename to docs/Leetcode_Solutions/324._Wiggle_Sort_II.md diff --git a/docs/Leetcode Solutions/326._power_of_three.md b/docs/Leetcode_Solutions/326._power_of_three.md similarity index 100% rename from docs/Leetcode Solutions/326._power_of_three.md rename to docs/Leetcode_Solutions/326._power_of_three.md diff --git a/docs/Leetcode Solutions/328._odd_even_linked_list.md b/docs/Leetcode_Solutions/328._odd_even_linked_list.md similarity index 100% rename from docs/Leetcode Solutions/328._odd_even_linked_list.md rename to docs/Leetcode_Solutions/328._odd_even_linked_list.md diff --git a/docs/Leetcode Solutions/334._increasing_triplet_subsequence.md b/docs/Leetcode_Solutions/334._increasing_triplet_subsequence.md similarity index 100% rename from docs/Leetcode Solutions/334._increasing_triplet_subsequence.md rename to docs/Leetcode_Solutions/334._increasing_triplet_subsequence.md diff --git a/docs/Leetcode Solutions/337._house_robber_iii.md b/docs/Leetcode_Solutions/337._house_robber_iii.md similarity index 100% rename from docs/Leetcode Solutions/337._house_robber_iii.md rename to docs/Leetcode_Solutions/337._house_robber_iii.md diff --git a/docs/Leetcode Solutions/338. Counting Bits.md b/docs/Leetcode_Solutions/338. Counting Bits.md similarity index 100% rename from docs/Leetcode Solutions/338. Counting Bits.md rename to docs/Leetcode_Solutions/338. Counting Bits.md diff --git a/docs/Leetcode Solutions/339. Nested List Weight Sum.md b/docs/Leetcode_Solutions/339. Nested List Weight Sum.md similarity index 100% rename from docs/Leetcode Solutions/339. Nested List Weight Sum.md rename to docs/Leetcode_Solutions/339. Nested List Weight Sum.md diff --git a/docs/Leetcode Solutions/341._Flatten_Nested_List_Iterator.md b/docs/Leetcode_Solutions/341._Flatten_Nested_List_Iterator.md similarity index 100% rename from docs/Leetcode Solutions/341._Flatten_Nested_List_Iterator.md rename to docs/Leetcode_Solutions/341._Flatten_Nested_List_Iterator.md diff --git a/docs/Leetcode Solutions/342._Power_of_Four.md b/docs/Leetcode_Solutions/342._Power_of_Four.md similarity index 100% rename from docs/Leetcode Solutions/342._Power_of_Four.md rename to docs/Leetcode_Solutions/342._Power_of_Four.md diff --git a/docs/Leetcode Solutions/344._reverse_string.md b/docs/Leetcode_Solutions/344._reverse_string.md similarity index 100% rename from docs/Leetcode Solutions/344._reverse_string.md rename to docs/Leetcode_Solutions/344._reverse_string.md diff --git a/docs/Leetcode Solutions/345._Reverse_Vowels_of_a_String.md b/docs/Leetcode_Solutions/345._Reverse_Vowels_of_a_String.md similarity index 100% rename from docs/Leetcode Solutions/345._Reverse_Vowels_of_a_String.md rename to docs/Leetcode_Solutions/345._Reverse_Vowels_of_a_String.md diff --git a/docs/Leetcode Solutions/349._intersection_of_two_arrays.md b/docs/Leetcode_Solutions/349._intersection_of_two_arrays.md similarity index 100% rename from docs/Leetcode Solutions/349._intersection_of_two_arrays.md rename to docs/Leetcode_Solutions/349._intersection_of_two_arrays.md diff --git a/docs/Leetcode Solutions/350._intersection_of_two_arrays_ii.md b/docs/Leetcode_Solutions/350._intersection_of_two_arrays_ii.md similarity index 100% rename from docs/Leetcode Solutions/350._intersection_of_two_arrays_ii.md rename to docs/Leetcode_Solutions/350._intersection_of_two_arrays_ii.md diff --git a/docs/Leetcode Solutions/353. Design Snake Game.md b/docs/Leetcode_Solutions/353. Design Snake Game.md similarity index 100% rename from docs/Leetcode Solutions/353. Design Snake Game.md rename to docs/Leetcode_Solutions/353. Design Snake Game.md diff --git a/docs/Leetcode Solutions/364. Nested List Weight Sum II.md b/docs/Leetcode_Solutions/364. Nested List Weight Sum II.md similarity index 100% rename from docs/Leetcode Solutions/364. Nested List Weight Sum II.md rename to docs/Leetcode_Solutions/364. Nested List Weight Sum II.md diff --git a/docs/Leetcode Solutions/366. Find Leaves of Binary Tree.md b/docs/Leetcode_Solutions/366. Find Leaves of Binary Tree.md similarity index 100% rename from docs/Leetcode Solutions/366. Find Leaves of Binary Tree.md rename to docs/Leetcode_Solutions/366. Find Leaves of Binary Tree.md diff --git a/docs/Leetcode Solutions/367._valid_perfect_square.md b/docs/Leetcode_Solutions/367._valid_perfect_square.md similarity index 100% rename from docs/Leetcode Solutions/367._valid_perfect_square.md rename to docs/Leetcode_Solutions/367._valid_perfect_square.md diff --git a/docs/Leetcode Solutions/369.Plus One Linked List.md b/docs/Leetcode_Solutions/369.Plus One Linked List.md similarity index 100% rename from docs/Leetcode Solutions/369.Plus One Linked List.md rename to docs/Leetcode_Solutions/369.Plus One Linked List.md diff --git a/docs/Leetcode Solutions/371._sum_of_two_integers.md b/docs/Leetcode_Solutions/371._sum_of_two_integers.md similarity index 100% rename from docs/Leetcode Solutions/371._sum_of_two_integers.md rename to docs/Leetcode_Solutions/371._sum_of_two_integers.md diff --git a/docs/Leetcode Solutions/374._Guess_Number_Higher_or_Lower.md b/docs/Leetcode_Solutions/374._Guess_Number_Higher_or_Lower.md similarity index 100% rename from docs/Leetcode Solutions/374._Guess_Number_Higher_or_Lower.md rename to docs/Leetcode_Solutions/374._Guess_Number_Higher_or_Lower.md diff --git a/docs/Leetcode Solutions/377._combination_sum_iv.md b/docs/Leetcode_Solutions/377._combination_sum_iv.md similarity index 100% rename from docs/Leetcode Solutions/377._combination_sum_iv.md rename to docs/Leetcode_Solutions/377._combination_sum_iv.md diff --git a/docs/Leetcode Solutions/378._kth_smallest_element_in_a_sorted_matrix.md b/docs/Leetcode_Solutions/378._kth_smallest_element_in_a_sorted_matrix.md similarity index 100% rename from docs/Leetcode Solutions/378._kth_smallest_element_in_a_sorted_matrix.md rename to docs/Leetcode_Solutions/378._kth_smallest_element_in_a_sorted_matrix.md diff --git a/docs/Leetcode Solutions/380. Insert Delete GetRandom O(1).md b/docs/Leetcode_Solutions/380. Insert Delete GetRandom O(1).md similarity index 100% rename from docs/Leetcode Solutions/380. Insert Delete GetRandom O(1).md rename to docs/Leetcode_Solutions/380. Insert Delete GetRandom O(1).md diff --git a/docs/Leetcode Solutions/381. Insert Delete GetRandom O(1) - Duplicates allowed.md b/docs/Leetcode_Solutions/381. Insert Delete GetRandom O(1) - Duplicates allowed.md similarity index 100% rename from docs/Leetcode Solutions/381. Insert Delete GetRandom O(1) - Duplicates allowed.md rename to docs/Leetcode_Solutions/381. Insert Delete GetRandom O(1) - Duplicates allowed.md diff --git a/docs/Leetcode Solutions/382._linked_list_random_node.md b/docs/Leetcode_Solutions/382._linked_list_random_node.md similarity index 100% rename from docs/Leetcode Solutions/382._linked_list_random_node.md rename to docs/Leetcode_Solutions/382._linked_list_random_node.md diff --git a/docs/Leetcode Solutions/383._ransom_note.md b/docs/Leetcode_Solutions/383._ransom_note.md similarity index 100% rename from docs/Leetcode Solutions/383._ransom_note.md rename to docs/Leetcode_Solutions/383._ransom_note.md diff --git a/docs/Leetcode Solutions/384. Shuffle an Array.md b/docs/Leetcode_Solutions/384. Shuffle an Array.md similarity index 100% rename from docs/Leetcode Solutions/384. Shuffle an Array.md rename to docs/Leetcode_Solutions/384. Shuffle an Array.md diff --git a/docs/Leetcode Solutions/387._first_unique_character_in_a_string.md b/docs/Leetcode_Solutions/387._first_unique_character_in_a_string.md similarity index 100% rename from docs/Leetcode Solutions/387._first_unique_character_in_a_string.md rename to docs/Leetcode_Solutions/387._first_unique_character_in_a_string.md diff --git a/docs/Leetcode Solutions/388._Longest_Absolute_File_Path.md b/docs/Leetcode_Solutions/388._Longest_Absolute_File_Path.md similarity index 100% rename from docs/Leetcode Solutions/388._Longest_Absolute_File_Path.md rename to docs/Leetcode_Solutions/388._Longest_Absolute_File_Path.md diff --git a/docs/Leetcode Solutions/389._find_the_difference.md b/docs/Leetcode_Solutions/389._find_the_difference.md similarity index 100% rename from docs/Leetcode Solutions/389._find_the_difference.md rename to docs/Leetcode_Solutions/389._find_the_difference.md diff --git a/docs/Leetcode Solutions/392._is_subsequence.md b/docs/Leetcode_Solutions/392._is_subsequence.md similarity index 100% rename from docs/Leetcode Solutions/392._is_subsequence.md rename to docs/Leetcode_Solutions/392._is_subsequence.md diff --git a/docs/Leetcode Solutions/394._decode_string.md b/docs/Leetcode_Solutions/394._decode_string.md similarity index 100% rename from docs/Leetcode Solutions/394._decode_string.md rename to docs/Leetcode_Solutions/394._decode_string.md diff --git a/docs/Leetcode Solutions/400. Nth Digit.md b/docs/Leetcode_Solutions/400. Nth Digit.md similarity index 100% rename from docs/Leetcode Solutions/400. Nth Digit.md rename to docs/Leetcode_Solutions/400. Nth Digit.md diff --git a/docs/Leetcode Solutions/401._binary_watch.md b/docs/Leetcode_Solutions/401._binary_watch.md similarity index 100% rename from docs/Leetcode Solutions/401._binary_watch.md rename to docs/Leetcode_Solutions/401._binary_watch.md diff --git a/docs/Leetcode Solutions/404._sum_of_left_leaves.md b/docs/Leetcode_Solutions/404._sum_of_left_leaves.md similarity index 100% rename from docs/Leetcode Solutions/404._sum_of_left_leaves.md rename to docs/Leetcode_Solutions/404._sum_of_left_leaves.md diff --git a/docs/Leetcode Solutions/405. Convert a Number to Hexadecimal.md b/docs/Leetcode_Solutions/405. Convert a Number to Hexadecimal.md similarity index 100% rename from docs/Leetcode Solutions/405. Convert a Number to Hexadecimal.md rename to docs/Leetcode_Solutions/405. Convert a Number to Hexadecimal.md diff --git a/docs/Leetcode Solutions/406._Queue_Reconstruction_by_Height.md b/docs/Leetcode_Solutions/406._Queue_Reconstruction_by_Height.md similarity index 100% rename from docs/Leetcode Solutions/406._Queue_Reconstruction_by_Height.md rename to docs/Leetcode_Solutions/406._Queue_Reconstruction_by_Height.md diff --git a/docs/Leetcode Solutions/412._fizz_buzz.md b/docs/Leetcode_Solutions/412._fizz_buzz.md similarity index 100% rename from docs/Leetcode Solutions/412._fizz_buzz.md rename to docs/Leetcode_Solutions/412._fizz_buzz.md diff --git a/docs/Leetcode Solutions/413. Arithmetic Slices.md b/docs/Leetcode_Solutions/413. Arithmetic Slices.md similarity index 100% rename from docs/Leetcode Solutions/413. Arithmetic Slices.md rename to docs/Leetcode_Solutions/413. Arithmetic Slices.md diff --git a/docs/Leetcode Solutions/414._third_maximum_number.md b/docs/Leetcode_Solutions/414._third_maximum_number.md similarity index 100% rename from docs/Leetcode Solutions/414._third_maximum_number.md rename to docs/Leetcode_Solutions/414._third_maximum_number.md diff --git a/docs/Leetcode Solutions/415._add_strings.md b/docs/Leetcode_Solutions/415._add_strings.md similarity index 100% rename from docs/Leetcode Solutions/415._add_strings.md rename to docs/Leetcode_Solutions/415._add_strings.md diff --git a/docs/Leetcode Solutions/416. Partition Equal Subset Sum.md b/docs/Leetcode_Solutions/416. Partition Equal Subset Sum.md similarity index 100% rename from docs/Leetcode Solutions/416. Partition Equal Subset Sum.md rename to docs/Leetcode_Solutions/416. Partition Equal Subset Sum.md diff --git a/docs/Leetcode Solutions/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md b/docs/Leetcode_Solutions/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md similarity index 100% rename from docs/Leetcode Solutions/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md rename to docs/Leetcode_Solutions/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md diff --git a/docs/Leetcode Solutions/422. Valid Word Square.md b/docs/Leetcode_Solutions/422. Valid Word Square.md similarity index 100% rename from docs/Leetcode Solutions/422. Valid Word Square.md rename to docs/Leetcode_Solutions/422. Valid Word Square.md diff --git a/docs/Leetcode Solutions/434._number_of_segments_in_a_string.md b/docs/Leetcode_Solutions/434._number_of_segments_in_a_string.md similarity index 100% rename from docs/Leetcode Solutions/434._number_of_segments_in_a_string.md rename to docs/Leetcode_Solutions/434._number_of_segments_in_a_string.md diff --git a/docs/Leetcode Solutions/437._path_sum_iii.md b/docs/Leetcode_Solutions/437._path_sum_iii.md similarity index 100% rename from docs/Leetcode Solutions/437._path_sum_iii.md rename to docs/Leetcode_Solutions/437._path_sum_iii.md diff --git a/docs/Leetcode Solutions/438._Find_All_Anagrams_in_a_String.md b/docs/Leetcode_Solutions/438._Find_All_Anagrams_in_a_String.md similarity index 100% rename from docs/Leetcode Solutions/438._Find_All_Anagrams_in_a_String.md rename to docs/Leetcode_Solutions/438._Find_All_Anagrams_in_a_String.md diff --git a/docs/Leetcode Solutions/439. Ternary Expression Parser.md b/docs/Leetcode_Solutions/439. Ternary Expression Parser.md similarity index 100% rename from docs/Leetcode Solutions/439. Ternary Expression Parser.md rename to docs/Leetcode_Solutions/439. Ternary Expression Parser.md diff --git a/docs/Leetcode Solutions/441._arranging_coins.md b/docs/Leetcode_Solutions/441._arranging_coins.md similarity index 100% rename from docs/Leetcode Solutions/441._arranging_coins.md rename to docs/Leetcode_Solutions/441._arranging_coins.md diff --git a/docs/Leetcode Solutions/448._Find_All_Numbers_Disappeared_in_an_Array.md b/docs/Leetcode_Solutions/448._Find_All_Numbers_Disappeared_in_an_Array.md similarity index 100% rename from docs/Leetcode Solutions/448._Find_All_Numbers_Disappeared_in_an_Array.md rename to docs/Leetcode_Solutions/448._Find_All_Numbers_Disappeared_in_an_Array.md diff --git a/docs/Leetcode Solutions/450. Delete Node in a BST.md b/docs/Leetcode_Solutions/450. Delete Node in a BST.md similarity index 100% rename from docs/Leetcode Solutions/450. Delete Node in a BST.md rename to docs/Leetcode_Solutions/450. Delete Node in a BST.md diff --git a/docs/Leetcode Solutions/453._Minimum_Moves_to_Equal_Array_Elements.md b/docs/Leetcode_Solutions/453._Minimum_Moves_to_Equal_Array_Elements.md similarity index 100% rename from docs/Leetcode Solutions/453._Minimum_Moves_to_Equal_Array_Elements.md rename to docs/Leetcode_Solutions/453._Minimum_Moves_to_Equal_Array_Elements.md diff --git a/docs/Leetcode Solutions/459._Repeated_Substring_Pattern.md b/docs/Leetcode_Solutions/459._Repeated_Substring_Pattern.md similarity index 100% rename from docs/Leetcode Solutions/459._Repeated_Substring_Pattern.md rename to docs/Leetcode_Solutions/459._Repeated_Substring_Pattern.md diff --git a/docs/Leetcode Solutions/461._Hamming Distance.md b/docs/Leetcode_Solutions/461._Hamming Distance.md similarity index 100% rename from docs/Leetcode Solutions/461._Hamming Distance.md rename to docs/Leetcode_Solutions/461._Hamming Distance.md diff --git a/docs/Leetcode Solutions/463._Island_Perimeter.md b/docs/Leetcode_Solutions/463._Island_Perimeter.md similarity index 100% rename from docs/Leetcode Solutions/463._Island_Perimeter.md rename to docs/Leetcode_Solutions/463._Island_Perimeter.md diff --git a/docs/Leetcode Solutions/467._Unique_Substrings_in_Wraparound_String.md b/docs/Leetcode_Solutions/467._Unique_Substrings_in_Wraparound_String.md similarity index 100% rename from docs/Leetcode Solutions/467._Unique_Substrings_in_Wraparound_String.md rename to docs/Leetcode_Solutions/467._Unique_Substrings_in_Wraparound_String.md diff --git a/docs/Leetcode Solutions/469. Convex Polygon.md b/docs/Leetcode_Solutions/469. Convex Polygon.md similarity index 100% rename from docs/Leetcode Solutions/469. Convex Polygon.md rename to docs/Leetcode_Solutions/469. Convex Polygon.md diff --git a/docs/Leetcode Solutions/476._Number_Complement.md b/docs/Leetcode_Solutions/476._Number_Complement.md similarity index 100% rename from docs/Leetcode Solutions/476._Number_Complement.md rename to docs/Leetcode_Solutions/476._Number_Complement.md diff --git a/docs/Leetcode Solutions/477._Total_Hamming_Distance.md b/docs/Leetcode_Solutions/477._Total_Hamming_Distance.md similarity index 100% rename from docs/Leetcode Solutions/477._Total_Hamming_Distance.md rename to docs/Leetcode_Solutions/477._Total_Hamming_Distance.md diff --git a/docs/Leetcode Solutions/485._Max_Consecutive_Ones.md b/docs/Leetcode_Solutions/485._Max_Consecutive_Ones.md similarity index 100% rename from docs/Leetcode Solutions/485._Max_Consecutive_Ones.md rename to docs/Leetcode_Solutions/485._Max_Consecutive_Ones.md diff --git a/docs/Leetcode Solutions/587._Erect_the_Fence .md b/docs/Leetcode_Solutions/587._Erect_the_Fence .md similarity index 100% rename from docs/Leetcode Solutions/587._Erect_the_Fence .md rename to docs/Leetcode_Solutions/587._Erect_the_Fence .md diff --git a/docs/Leetcode Solutions/599._Minimum_Index_Sum_of_Two_Lists.md b/docs/Leetcode_Solutions/599._Minimum_Index_Sum_of_Two_Lists.md similarity index 100% rename from docs/Leetcode Solutions/599._Minimum_Index_Sum_of_Two_Lists.md rename to docs/Leetcode_Solutions/599._Minimum_Index_Sum_of_Two_Lists.md diff --git a/docs/Leetcode Solutions/647._Palindromic_Substrings.md b/docs/Leetcode_Solutions/647._Palindromic_Substrings.md similarity index 100% rename from docs/Leetcode Solutions/647._Palindromic_Substrings.md rename to docs/Leetcode_Solutions/647._Palindromic_Substrings.md diff --git a/docs/Leetcode Solutions/657._Judge_Route_Circle.md b/docs/Leetcode_Solutions/657._Judge_Route_Circle.md similarity index 100% rename from docs/Leetcode Solutions/657._Judge_Route_Circle.md rename to docs/Leetcode_Solutions/657._Judge_Route_Circle.md diff --git a/docs/Leetcode Solutions/665._Non-decreasing_Array.md b/docs/Leetcode_Solutions/665._Non-decreasing_Array.md similarity index 100% rename from docs/Leetcode Solutions/665._Non-decreasing_Array.md rename to docs/Leetcode_Solutions/665._Non-decreasing_Array.md diff --git a/docs/Leetcode Solutions/672._Bulb_Switcher_II.md b/docs/Leetcode_Solutions/672._Bulb_Switcher_II.md similarity index 100% rename from docs/Leetcode Solutions/672._Bulb_Switcher_II.md rename to docs/Leetcode_Solutions/672._Bulb_Switcher_II.md diff --git a/docs/Leetcode Solutions/681._Next_Closest_Time.md b/docs/Leetcode_Solutions/681._Next_Closest_Time.md similarity index 100% rename from docs/Leetcode Solutions/681._Next_Closest_Time.md rename to docs/Leetcode_Solutions/681._Next_Closest_Time.md diff --git a/docs/Leetcode Solutions/682._Baseball_Game.md b/docs/Leetcode_Solutions/682._Baseball_Game.md similarity index 100% rename from docs/Leetcode Solutions/682._Baseball_Game.md rename to docs/Leetcode_Solutions/682._Baseball_Game.md diff --git a/docs/Leetcode Solutions/687._Longest_Univalue_Path.md b/docs/Leetcode_Solutions/687._Longest_Univalue_Path.md similarity index 100% rename from docs/Leetcode Solutions/687._Longest_Univalue_Path.md rename to docs/Leetcode_Solutions/687._Longest_Univalue_Path.md diff --git a/docs/Leetcode Solutions/740._delete_and_earn.md b/docs/Leetcode_Solutions/740._delete_and_earn.md similarity index 100% rename from docs/Leetcode Solutions/740._delete_and_earn.md rename to docs/Leetcode_Solutions/740._delete_and_earn.md diff --git a/docs/Leetcode Solutions/760._Find_Anagram_Mappings.md b/docs/Leetcode_Solutions/760._Find_Anagram_Mappings.md similarity index 100% rename from docs/Leetcode Solutions/760._Find_Anagram_Mappings.md rename to docs/Leetcode_Solutions/760._Find_Anagram_Mappings.md diff --git a/docs/Leetcode Solutions/README.md b/docs/Leetcode_Solutions/README.md similarity index 100% rename from docs/Leetcode Solutions/README.md rename to docs/Leetcode_Solutions/README.md diff --git "a/docs/Leetcode Solutions/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" "b/docs/Leetcode_Solutions/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" similarity index 100% rename from "docs/Leetcode Solutions/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" rename to "docs/Leetcode_Solutions/Summarization/Binary Search \344\270\215\346\230\223\345\206\231.md" diff --git a/docs/Leetcode Solutions/Summarization/Data Structure and Algorthim Review.md b/docs/Leetcode_Solutions/Summarization/Data Structure and Algorthim Review.md similarity index 100% rename from docs/Leetcode Solutions/Summarization/Data Structure and Algorthim Review.md rename to docs/Leetcode_Solutions/Summarization/Data Structure and Algorthim Review.md diff --git a/docs/Leetcode Solutions/Summarization/Dynamic Programming.md b/docs/Leetcode_Solutions/Summarization/Dynamic Programming.md similarity index 100% rename from docs/Leetcode Solutions/Summarization/Dynamic Programming.md rename to docs/Leetcode_Solutions/Summarization/Dynamic Programming.md diff --git "a/docs/Leetcode Solutions/Summarization/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" "b/docs/Leetcode_Solutions/Summarization/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" similarity index 100% rename from "docs/Leetcode Solutions/Summarization/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" rename to "docs/Leetcode_Solutions/Summarization/Introduction to String Searching Algorithms \342\200\223 topcoder.pdf" diff --git "a/docs/Leetcode Solutions/Summarization/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" "b/docs/Leetcode_Solutions/Summarization/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" similarity index 100% rename from "docs/Leetcode Solutions/Summarization/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" rename to "docs/Leetcode_Solutions/Summarization/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" diff --git "a/docs/Leetcode Solutions/Summarization/LinkedList\346\212\200\345\267\247.md" "b/docs/Leetcode_Solutions/Summarization/LinkedList\346\212\200\345\267\247.md" similarity index 100% rename from "docs/Leetcode Solutions/Summarization/LinkedList\346\212\200\345\267\247.md" rename to "docs/Leetcode_Solutions/Summarization/LinkedList\346\212\200\345\267\247.md" diff --git a/docs/Leetcode Solutions/Summarization/Maximal Square.pdf b/docs/Leetcode_Solutions/Summarization/Maximal Square.pdf similarity index 100% rename from docs/Leetcode Solutions/Summarization/Maximal Square.pdf rename to docs/Leetcode_Solutions/Summarization/Maximal Square.pdf diff --git "a/docs/Leetcode Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" "b/docs/Leetcode_Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" similarity index 100% rename from "docs/Leetcode Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" rename to "docs/Leetcode_Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" diff --git a/docs/Leetcode Solutions/Summarization/Range Sum Query 2D - Immutable.pdf b/docs/Leetcode_Solutions/Summarization/Range Sum Query 2D - Immutable.pdf similarity index 100% rename from docs/Leetcode Solutions/Summarization/Range Sum Query 2D - Immutable.pdf rename to docs/Leetcode_Solutions/Summarization/Range Sum Query 2D - Immutable.pdf diff --git a/docs/Leetcode Solutions/Summarization/Recusrion & BackTracking.md b/docs/Leetcode_Solutions/Summarization/Recusrion & BackTracking.md similarity index 100% rename from docs/Leetcode Solutions/Summarization/Recusrion & BackTracking.md rename to docs/Leetcode_Solutions/Summarization/Recusrion & BackTracking.md diff --git "a/docs/Leetcode Solutions/Summarization/backtracking\346\200\235\350\267\257.md" "b/docs/Leetcode_Solutions/Summarization/backtracking\346\200\235\350\267\257.md" similarity index 100% rename from "docs/Leetcode Solutions/Summarization/backtracking\346\200\235\350\267\257.md" rename to "docs/Leetcode_Solutions/Summarization/backtracking\346\200\235\350\267\257.md" diff --git "a/docs/Leetcode Solutions/Summarization/delete_node_in_a_linked_list\351\227\256\351\242\230.md" "b/docs/Leetcode_Solutions/Summarization/delete_node_in_a_linked_list\351\227\256\351\242\230.md" similarity index 100% rename from "docs/Leetcode Solutions/Summarization/delete_node_in_a_linked_list\351\227\256\351\242\230.md" rename to "docs/Leetcode_Solutions/Summarization/delete_node_in_a_linked_list\351\227\256\351\242\230.md" diff --git "a/docs/Leetcode Solutions/Summarization/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" "b/docs/Leetcode_Solutions/Summarization/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" similarity index 100% rename from "docs/Leetcode Solutions/Summarization/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" rename to "docs/Leetcode_Solutions/Summarization/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" diff --git "a/docs/Leetcode Solutions/Summarization/python\347\232\204\345\220\204\347\247\215pass.md" "b/docs/Leetcode_Solutions/Summarization/python\347\232\204\345\220\204\347\247\215pass.md" similarity index 100% rename from "docs/Leetcode Solutions/Summarization/python\347\232\204\345\220\204\347\247\215pass.md" rename to "docs/Leetcode_Solutions/Summarization/python\347\232\204\345\220\204\347\247\215pass.md" diff --git a/docs/Leetcode Solutions/Summarization/slide_windows_template.md b/docs/Leetcode_Solutions/Summarization/slide_windows_template.md similarity index 100% rename from docs/Leetcode Solutions/Summarization/slide_windows_template.md rename to docs/Leetcode_Solutions/Summarization/slide_windows_template.md diff --git "a/docs/Leetcode Solutions/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" "b/docs/Leetcode_Solutions/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" similarity index 100% rename from "docs/Leetcode Solutions/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" rename to "docs/Leetcode_Solutions/Summarization/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" diff --git "a/docs/Leetcode Solutions/Summarization/\344\275\215\350\277\220\347\256\227.md" "b/docs/Leetcode_Solutions/Summarization/\344\275\215\350\277\220\347\256\227.md" similarity index 100% rename from "docs/Leetcode Solutions/Summarization/\344\275\215\350\277\220\347\256\227.md" rename to "docs/Leetcode_Solutions/Summarization/\344\275\215\350\277\220\347\256\227.md" diff --git "a/docs/Leetcode Solutions/Summarization/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" "b/docs/Leetcode_Solutions/Summarization/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" similarity index 100% rename from "docs/Leetcode Solutions/Summarization/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" rename to "docs/Leetcode_Solutions/Summarization/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" diff --git "a/docs/Leetcode Solutions/Summarization/\345\205\253\346\216\222\345\272\217.md" "b/docs/Leetcode_Solutions/Summarization/\345\205\253\346\216\222\345\272\217.md" similarity index 100% rename from "docs/Leetcode Solutions/Summarization/\345\205\253\346\216\222\345\272\217.md" rename to "docs/Leetcode_Solutions/Summarization/\345\205\253\346\216\222\345\272\217.md" diff --git "a/docs/Leetcode Solutions/Summarization/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" "b/docs/Leetcode_Solutions/Summarization/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" similarity index 100% rename from "docs/Leetcode Solutions/Summarization/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" rename to "docs/Leetcode_Solutions/Summarization/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" diff --git "a/docs/Leetcode Solutions/Summarization/\346\200\273\347\273\223.md" "b/docs/Leetcode_Solutions/Summarization/\346\200\273\347\273\223.md" similarity index 100% rename from "docs/Leetcode Solutions/Summarization/\346\200\273\347\273\223.md" rename to "docs/Leetcode_Solutions/Summarization/\346\200\273\347\273\223.md" diff --git "a/docs/Leetcode Solutions/Summarization/\347\273\204\345\220\210\351\227\256\351\242\230.md" "b/docs/Leetcode_Solutions/Summarization/\347\273\204\345\220\210\351\227\256\351\242\230.md" similarity index 100% rename from "docs/Leetcode Solutions/Summarization/\347\273\204\345\220\210\351\227\256\351\242\230.md" rename to "docs/Leetcode_Solutions/Summarization/\347\273\204\345\220\210\351\227\256\351\242\230.md" diff --git "a/docs/Leetcode Solutions/Summarization/\351\200\222\345\275\222_recursion.md" "b/docs/Leetcode_Solutions/Summarization/\351\200\222\345\275\222_recursion.md" similarity index 100% rename from "docs/Leetcode Solutions/Summarization/\351\200\222\345\275\222_recursion.md" rename to "docs/Leetcode_Solutions/Summarization/\351\200\222\345\275\222_recursion.md" From 2aa2eb053b4eb94a7643a5ad2a4bc694a0a11a4b Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 13:50:10 -0500 Subject: [PATCH 0461/2496] Update README.md --- README.md | 281 +----------------------------------------------------- 1 file changed, 5 insertions(+), 276 deletions(-) diff --git a/README.md b/README.md index 2e0d34398..07e3c4483 100644 --- a/README.md +++ b/README.md @@ -1,287 +1,16 @@ # Algorithms +## 1. [LeetCode 题解和总结](/docs/Leetcode_Solutions/) +## 2. [面试问答]() -## 面试问答 - -* [Google面试题](/docs/interview/Google/Google.md) +* [Google 面试题](/docs/interview/Google/Google.md) * [pocketgems 面试题](/docs/interview/pocketgems/pocketgems.md) * [WePay 面试题](/docs/interview/WePay/WePay.md) +* [拍拍贷面试题](/docs/interview/拍拍贷/paipaidai.md) -## LeetCode Solutions and Summarizations +## 3. [算法模版](/docs/Algorithm_Templates) -* [](docs/某类别/001._two_sum.md) -* [](/docs/某类别/002._add_two_numbers.md) -* [](/docs/某类别/003._longest_substring_without_repeating_characters.md) -* [](/docs/某类别/004._median_of_two_sorted_arrays.md) -* [](/docs/某类别/005._longest_palindromic_substring.md) -* [](/docs/某类别/007._Reverse_Integer.md) -* [](/docs/某类别/008._string_to_integer_(atoi).md) -* [](/docs/某类别/010._regular_expression_matching.md) -* [](/docs/某类别/011._container_with_most_water.md) -* [](/docs/某类别/012._Integer_to_Roman.md) -* [](/docs/某类别/013._Roman_to_Integer.md) -* [](/docs/某类别/014._longest_common_prefix.md) -* [](/docs/某类别/015._3sum.md) -* [](/docs/某类别/016._3sum_closest.md) -* [](/docs/某类别/017._letter_combinations_of_a_phone_number.md) -* [](/docs/某类别/018._4sum.md) -* [](/docs/某类别/019._remove_nth_node_from_end_of_list.md) -* [](/docs/某类别/020._valid_parentheses.md) -* [](/docs/某类别/021._merge_two_sorted_lists.md) -* [](/docs/某类别/022._generate_parentheses.md) -* [](/docs/某类别/023._merge_k_sorted_lists.md) -* [](/docs/某类别/024._swap_nodes_in_pairs.md) -* [](/docs/某类别/026._Remove_Duplicates_from_Sorted_Array.md) -* [](/docs/某类别/027._Remove_Element.md) -* [](/docs/某类别/028._implement_strstr().md) -* [](/docs/某类别/030._Substring_with_Concatenation_of_All_Words.md) -* [](/docs/某类别/031._next_permutation.md) -* [](/docs/某类别/033._search_in_rotated_sorted_array.md) -* [](/docs/某类别/034._SearchforaRange.md) -* [](/docs/某类别/035._search_insert_position.md) -* [](/docs/某类别/038._Count_and_Say.md) -* [](/docs/某类别/039._combination_sum.md) -* [](/docs/某类别/040._combination_sum_ii.md) -* [](/docs/某类别/042._trapping_rain_water.md) -* [](/docs/某类别/043._multiply_strings.md) -* [](/docs/某类别/044._wildcard_matching.md) -* [](/docs/某类别/045._Jump_Game_II.md) -* [](/docs/某类别/046._permutations.md) -* [](/docs/某类别/047._permutations_ii.md) -* [](/docs/某类别/048._rotate_image.md) -* [](/docs/某类别/049._group_anagrams_python.md) -* [](/docs/某类别/050._pow(x,_n).md) -* [](/docs/某类别/051._n-queens.md) -* [](/docs/某类别/052._n-queens_ii.md) -* [](/docs/某类别/053._maximum_subarray.md) -* [](/docs/某类别/054._spiral_matrix.md) -* [](/docs/某类别/055._jump_game.md) -* [](/docs/某类别/056._Merge_Intervals.md) -* [](/docs/某类别/058._length_of_last_word.md) -* [](/docs/某类别/059._spiral_matrix_ii.md) -* [](/docs/某类别/060._permutation_sequence.md) -* [](/docs/某类别/061._rotate_list.md) -* [](/docs/某类别/064._minimum_path_sum.md) -* [](/docs/某类别/065.unique_paths_ii.md) -* [](/docs/某类别/066._plus_one.md) -* [](/docs/某类别/067._add_binary.md) -* [](/docs/某类别/069._sqrt(x).md) -* [](/docs/某类别/070.ClimbingStairs.md) -* [](/docs/某类别/072._edit_distance.md) -* [](/docs/某类别/073.SetMatrixZeroes.md) -* [](/docs/某类别/074._search_a_2d_matrix.md) -* [](/docs/某类别/075._sort_colors.md) -* [](/docs/某类别/076._Minimum_Window_Substring.md) -* [](/docs/某类别/077._combinations.md) -* [](/docs/某类别/078.Subsets.md) -* [](/docs/某类别/079._word_search.md) -* [](/docs/某类别/082._remove_duplicates_from_sorted_list_ii.md) -* [](/docs/某类别/083._remove_duplicates_from_sorted_list.md) -* [](/docs/某类别/086._partition_list.md) -* [](/docs/某类别/088._merge_sorted_array.md) -* [](/docs/某类别/089._gray_code.md) -* [](/docs/某类别/090._subsets_ii.md) -* [](/docs/某类别/091._decode_ways.md) -* [](/docs/某类别/092._reverse_linked_list_ii.md) -* [](/docs/某类别/093._restore_ip_addresses.md) -* [](/docs/某类别/094._binary_tree_inorder_traversal.md) -* [](/docs/某类别/096._unique_binary_search_trees.md) -* [](/docs/某类别/098._validate_binary_search_tree.md) -* [](/docs/某类别/100._same_tree.md) -* [](/docs/某类别/101._symmetric_tree.md) -* [](/docs/某类别/102._binary_tree_level_order_traversal.md) -* [](/docs/某类别/103._binary_tree_zigzag_level_order_traversal.md) -* [](/docs/某类别/104._maximum_depth_of_binary_tree.md) -* [](/docs/某类别/105._construct_binary_tree_from_preorder_and_inorder_traversal.md) -* [](/docs/某类别/106._construct_binary_tree_from_inorder_and_postorder_traversal.md) -* [](/docs/某类别/107._binary_tree_level_order_traversal_ii.md) -* [](/docs/某类别/108._convert_sorted_array_to_binary_search_tree.md) -* [](/docs/某类别/109._convert_sorted_list_to_binary_search_tree.md) -* [](/docs/某类别/110._balanced_binary_tree.md) -* [](/docs/某类别/111._minimum_depth_of_binary_tree.md) -* [](/docs/某类别/112._path_sum.md) -* [](/docs/某类别/113._path_sum_ii.md) -* [](/docs/某类别/114._flatten_binary_tree_to_linked_list.md) -* [](/docs/某类别/116._populating_next_right_pointers_in_each_node.md) -* [](/docs/某类别/118._pascal's_triangle.md) -* [](/docs/某类别/119.Pascal'sTriangleII.md) -* [](/docs/某类别/120.Triangle.md) -* [](/docs/某类别/121._Best_Time_to_Buy_and_Sell_Stock.md) -* [](/docs/某类别/125._valid_palindrome.md) -* [](/docs/某类别/126.WordLadderII.md) -* [](/docs/某类别/127._word_ladder.md) -* [](/docs/某类别/128._Longest_Consecutive_Sequence.md) -* [](/docs/某类别/129._sum_root_to_leaf_numbers.md) -* [](/docs/某类别/130._surrounded_regions.md) -* [](/docs/某类别/131._palindrome_partitioning.md) -* [](/docs/某类别/133._clone_graph.md) -* [](/docs/某类别/136._single_number.md) -* [](/docs/某类别/139._word_break.md) -* [](/docs/某类别/140._word_break_ii.md) -* [](/docs/某类别/141._linked_list_cycle.md) -* [](/docs/某类别/142_Linked_List_Cycle_II.md) -* [](/docs/某类别/143._reorder_list.md) -* [](/docs/某类别/144._binary_tree_preorder_traversal.md) -* [](/docs/某类别/145._binary_tree_postorder_traversal.md) -* [](/docs/某类别/147._insertion_sort_list.md) -* [](/docs/某类别/148._sort_list.md) -* [](/docs/某类别/150._evaluate_reverse_polish_notation.md) -* [](/docs/某类别/151._reverse_words_in_a_string.md) -* [](/docs/某类别/152._maximum_product_subarray.md) -* [](/docs/某类别/153._find_minimum_in_rotated_sorted_array.md) -* [](/docs/某类别/155._min_stack.md) -* [](/docs/某类别/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md) -* [](/docs/某类别/160._intersection_of_two_linked_lists.md) -* [](/docs/某类别/162._find_peak_element.md) -* [](/docs/某类别/165._compare_version_numbers.md) -* [](/docs/某类别/166._Fraction_to_Recurring_Decimal.md) -* [](/docs/某类别/167._two_sum_ii_-_input_array_is_sorted.md) -* [](/docs/某类别/168._excel_sheet_column_title.md) -* [](/docs/某类别/169._majority_element.md) -* [](/docs/某类别/171._excel_sheet_column_number.md) -* [](/docs/某类别/173._binary_search_tree_iterator.md) -* [](/docs/某类别/189._rotate_array.md) -* [](/docs/某类别/191._number_of_1_bits.md) -* [](/docs/某类别/198._house_robber.md) -* [](/docs/某类别/199._binary_tree_right_side_view.md) -* [](/docs/某类别/200._number_of_islands.md) -* [](/docs/某类别/203._remove_linked_list_elements.md) -* [](/docs/某类别/204._count_primes.md) -* [](/docs/某类别/205._isomorphic_strings.md) -* [](/docs/某类别/206._reverse_linked_list.md) -* [](/docs/某类别/207._course_schedule.md) -* [](/docs/某类别/208._implement_trie_(prefix_tree).md) -* [](/docs/某类别/210._course_schedule_ii.md) -* [](/docs/某类别/211.AddandSearchWord-Datastructuredesign.md) -* [](/docs/某类别/213._house_robber_ii.md) -* [](/docs/某类别/216._combination_sum_iii.md) -* [](/docs/某类别/217._contains_duplicate.md) -* [](/docs/某类别/218._The_Skyline_Problem.md) -* [](/docs/某类别/219._contains_duplicate_ii.md) -* [](/docs/某类别/221._maximal_square.md) -* [](/docs/某类别/222._count_complete_tree_nodes.md) -* [](/docs/某类别/223._rectangle_area.md) -* [](/docs/某类别/224.BasicCalculator.md) -* [](/docs/某类别/225._implement_stack_using_queues.md) -* [](/docs/某类别/226._invert_binary_tree.md) -* [](/docs/某类别/227._basic_calculator_ii.md) -* [](/docs/某类别/228._summary_ranges.md) -* [](/docs/某类别/229._majority_element_ii.md) -* [](/docs/某类别/230._kth_smallest_element_in_a_bst.md) -* [](/docs/某类别/231._Power_of_Two.md) -* [](/docs/某类别/232._implement_queue_using_stacks.md) -* [](/docs/某类别/234._palindrome_linked_list.md) -* [](/docs/某类别/235._lowest_common_ancestor_of_a_binary_search_tree.md) -* [](/docs/某类别/236._lowest_common_ancestor_of_a_binary_tree.md) -* [](/docs/某类别/237._delete_node_in_a_linked_list.md) -* [](/docs/某类别/238._product_of_array_except_self.md) -* [](/docs/某类别/240._search_a_2d_matrix_ii.md) -* [](/docs/某类别/242._valid_anagram.md) -* [](/docs/某类别/252.MeetingRooms.md) -* [](/docs/某类别/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md) -* [](/docs/某类别/256.PaintHouse.md) -* [](/docs/某类别/257._binary_tree_paths.md) -* [](/docs/某类别/258_Add_Digits.md) -* [](/docs/某类别/261.GraphValidTree.md) -* [](/docs/某类别/263._ugly_number.md) -* [](/docs/某类别/264._ugly_number_ii.md) -* [](/docs/某类别/265.PaintHouseII.md) -* [](/docs/某类别/266.PalindromePermutation.md) -* [](/docs/某类别/267.PalindromePermutationII.md) -* [](/docs/某类别/268._missing_number.md) -* [](/docs/某类别/270.ClosestBinarySearchTreeValue.md) -* [](/docs/某类别/276.PaintFence.md) -* [](/docs/某类别/277.FindtheCelebrity.md) -* [](/docs/某类别/278._First_Bad_Version.md) -* [](/docs/某类别/279._perfect_squares.md) -* [](/docs/某类别/280._Wiggle_Sort.md) -* [](/docs/某类别/283._move_zeroes.md) -* [](/docs/某类别/285._inorder_successor_in_bst.md) -* [](/docs/某类别/286.WallsandGates.md) -* [](/docs/某类别/289._game_of_life.md) -* [](/docs/某类别/290._word_pattern.md) -* [](/docs/某类别/292._nim_game.md) -* [](/docs/某类别/296.BestMeetingPoint.md) -* [](/docs/某类别/298.BinaryTreeLongestConsecutiveSequence.md) -* [](/docs/某类别/299._bulls_and_cows.md) -* [](/docs/某类别/300._longest_increasing_subsequence.md) -* [](/docs/某类别/303._range_sum_query_-_immutable.md) -* [](/docs/某类别/316._Remove_Duplicate_Letters.md) -* [](/docs/某类别/319._Bulb_Switcher.md) -* [](/docs/某类别/322.CoinChange.md) -* [](/docs/某类别/323.NumberofConnectedComponentsinanUndirectedGraph.md) -* [](/docs/某类别/324._Wiggle_Sort_II.md) -* [](/docs/某类别/326._power_of_three.md) -* [](/docs/某类别/328._odd_even_linked_list.md) -* [](/docs/某类别/334._increasing_triplet_subsequence.md) -* [](/docs/某类别/337._house_robber_iii.md) -* [](/docs/某类别/338.CountingBits.md) -* [](/docs/某类别/339.NestedListWeightSum.md) -* [](/docs/某类别/341._Flatten_Nested_List_Iterator.md) -* [](/docs/某类别/342._Power_of_Four.md) -* [](/docs/某类别/344._reverse_string.md) -* [](/docs/某类别/345._Reverse_Vowels_of_a_String.md) -* [](/docs/某类别/349._intersection_of_two_arrays.md) -* [](/docs/某类别/350._intersection_of_two_arrays_ii.md) -* [](/docs/某类别/353.DesignSnakeGame.md) -* [](/docs/某类别/364.NestedListWeightSumII.md) -* [](/docs/某类别/366.FindLeavesofBinaryTree.md) -* [](/docs/某类别/367._valid_perfect_square.md) -* [](/docs/某类别/369.PlusOneLinkedList.md) -* [](/docs/某类别/371._sum_of_two_integers.md) -* [](/docs/某类别/374._Guess_Number_Higher_or_Lower.md) -* [](/docs/某类别/377._combination_sum_iv.md) -* [](/docs/某类别/378._kth_smallest_element_in_a_sorted_matrix.md) -* [](/docs/某类别/380.InsertDeleteGetRandomO(1).md) -* [](/docs/某类别/381.InsertDeleteGetRandomO(1)-Duplicatesallowed.md) -* [](/docs/某类别/382._linked_list_random_node.md) -* [](/docs/某类别/383._ransom_note.md) -* [](/docs/某类别/384.ShuffleanArray.md) -* [](/docs/某类别/387._first_unique_character_in_a_string.md) -* [](/docs/某类别/388._Longest_Absolute_File_Path.md) -* [](/docs/某类别/389._find_the_difference.md) -* [](/docs/某类别/392._is_subsequence.md) -* [](/docs/某类别/394._decode_string.md) -* [](/docs/某类别/400.NthDigit.md) -* [](/docs/某类别/401._binary_watch.md) -* [](/docs/某类别/404._sum_of_left_leaves.md) -* [](/docs/某类别/405.ConvertaNumbertoHexadecimal.md) -* [](/docs/某类别/406._Queue_Reconstruction_by_Height.md) -* [](/docs/某类别/412._fizz_buzz.md) -* [](/docs/某类别/413.ArithmeticSlices.md) -* [](/docs/某类别/414._third_maximum_number.md) -* [](/docs/某类别/415._add_strings.md) -* [](/docs/某类别/416.PartitionEqualSubsetSum.md) -* [](/docs/某类别/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md) -* [](/docs/某类别/422.ValidWordSquare.md) -* [](/docs/某类别/434._number_of_segments_in_a_string.md) -* [](/docs/某类别/437._path_sum_iii.md) -* [](/docs/某类别/438._Find_All_Anagrams_in_a_String.md) -* [](/docs/某类别/439.TernaryExpressionParser.md) -* [](/docs/某类别/441._arranging_coins.md) -* [](/docs/某类别/448._Find_All_Numbers_Disappeared_in_an_Array.md) -* [](/docs/某类别/450.DeleteNodeinaBST.md) -* [](/docs/某类别/453._Minimum_Moves_to_Equal_Array_Elements.md) -* [](/docs/某类别/459._Repeated_Substring_Pattern.md) -* [](/docs/某类别/461._HammingDistance.md) -* [](/docs/某类别/463._Island_Perimeter.md) -* [](/docs/某类别/467._Unique_Substrings_in_Wraparound_String.md) -* [](/docs/某类别/469.ConvexPolygon.md) -* [](/docs/某类别/476._Number_Complement.md) -* [](/docs/某类别/477._Total_Hamming_Distance.md) -* [](/docs/某类别/485._Max_Consecutive_Ones.md) -* [](/docs/某类别/587._Erect_the_Fence.md) -* [](/docs/某类别/599._Minimum_Index_Sum_of_Two_Lists.md) -* [](/docs/某类别/647._Palindromic_Substrings.md) -* [](/docs/某类别/657._Judge_Route_Circle.md) -* [](/docs/某类别/665._Non-decreasing_Array.md) -* [](/docs/某类别/672._Bulb_Switcher_II.md) -* [](/docs/某类别/681._Next_Closest_Time.md) -* [](/docs/某类别/682._Baseball_Game.md) -* [](/docs/某类别/687._Longest_Univalue_Path.md) -* [](/docs/某类别/740._delete_and_earn.md) -* [](/docs/某类别/760._Find_Anagram_Mappings.md) ## 推荐的一些LeetCode网站 From 071adfe8b7a5ddb1fc0695e9249695abf09f9f1e Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 13:51:12 -0500 Subject: [PATCH 0462/2496] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 07e3c4483..7915cffa6 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ # Algorithms -## 1. [LeetCode 题解和总结](/docs/Leetcode_Solutions/) +## [LeetCode 题解和总结](/docs/Leetcode_Solutions/) -## 2. [面试问答]() +## [面试问答](/docs/Interview/) * [Google 面试题](/docs/interview/Google/Google.md) * [pocketgems 面试题](/docs/interview/pocketgems/pocketgems.md) * [WePay 面试题](/docs/interview/WePay/WePay.md) * [拍拍贷面试题](/docs/interview/拍拍贷/paipaidai.md) -## 3. [算法模版](/docs/Algorithm_Templates) +## [算法模版](/docs/Algorithm_Templates/) ## 推荐的一些LeetCode网站 From 2398f5e8b660af885740d678f9c09ea4a4f977a0 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 13:52:42 -0500 Subject: [PATCH 0463/2496] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7915cffa6..54c60e39d 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ # Algorithms -## [LeetCode 题解和总结](/docs/Leetcode_Solutions/) +## 1. [LeetCode 题解和总结](/docs/Leetcode_Solutions/) -## [面试问答](/docs/Interview/) +## 2. [面试问答](/docs/Interview/) * [Google 面试题](/docs/interview/Google/Google.md) * [pocketgems 面试题](/docs/interview/pocketgems/pocketgems.md) * [WePay 面试题](/docs/interview/WePay/WePay.md) * [拍拍贷面试题](/docs/interview/拍拍贷/paipaidai.md) -## [算法模版](/docs/Algorithm_Templates/) +## 3. [算法模版](/docs/Algorithm_Templates/) ## 推荐的一些LeetCode网站 From c1f2f98f732700ba1225b158777b4521c9761a92 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 13:53:19 -0500 Subject: [PATCH 0464/2496] Update README.md --- docs/Algorithm_Templates/Compression/README.md | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/docs/Algorithm_Templates/Compression/README.md b/docs/Algorithm_Templates/Compression/README.md index fe9c7bbf3..8b1378917 100644 --- a/docs/Algorithm_Templates/Compression/README.md +++ b/docs/Algorithm_Templates/Compression/README.md @@ -1,15 +1 @@ -# Some algorithm templates for better understanding! -## 八大排序算法 - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | From ceeed809e0b2f65ba248eae8de630c697e476101 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 13:53:38 -0500 Subject: [PATCH 0465/2496] Update README.md --- docs/Algorithm_Templates/Data_Structure/README.md | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/docs/Algorithm_Templates/Data_Structure/README.md b/docs/Algorithm_Templates/Data_Structure/README.md index fe9c7bbf3..8b1378917 100644 --- a/docs/Algorithm_Templates/Data_Structure/README.md +++ b/docs/Algorithm_Templates/Data_Structure/README.md @@ -1,15 +1 @@ -# Some algorithm templates for better understanding! -## 八大排序算法 - -![](/images/SortingAlgorithm/八大排序算法性能.png) - -| 名称 | 动图 | 代码 | -| --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | From 9265752ef1f5ae9ead5ed65de4e81e22a477c2cc Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 13:55:50 -0500 Subject: [PATCH 0466/2496] Update README.md --- docs/Algorithm_Templates/Sort/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/Algorithm_Templates/Sort/README.md b/docs/Algorithm_Templates/Sort/README.md index fe9c7bbf3..3a43278fd 100644 --- a/docs/Algorithm_Templates/Sort/README.md +++ b/docs/Algorithm_Templates/Sort/README.md @@ -6,10 +6,10 @@ | 名称 | 动图 | 代码 | | --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm_Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/Algorithm_Templates/Sort/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/Algorithm_Templates/Sort/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/Algorithm_Templates/Sort/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/Algorithm_Templates/Sort/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/Algorithm_Templates/Sort/MergeSort.py) | | 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | From 5b422b2b117e4ef05e9c15139ccca132206f0259 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 13:59:27 -0500 Subject: [PATCH 0467/2496] Update README.md --- docs/Algorithm_Templates/Sort/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/Algorithm_Templates/Sort/README.md b/docs/Algorithm_Templates/Sort/README.md index 3a43278fd..4237c9827 100644 --- a/docs/Algorithm_Templates/Sort/README.md +++ b/docs/Algorithm_Templates/Sort/README.md @@ -6,10 +6,10 @@ | 名称 | 动图 | 代码 | | --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm_Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/Algorithm_Templates/Sort/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/Algorithm_Templates/Sort/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/Algorithm_Templates/Sort/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/Algorithm_Templates/Sort/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/Algorithm_Templates/Sort/MergeSort.py) | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/MergeSort.py) | | 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | From 117d17a4035c1eb8074237257e1f0f8c11139cf9 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 13:59:51 -0500 Subject: [PATCH 0468/2496] Update README.md --- docs/Algorithm_Templates/README.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/Algorithm_Templates/README.md b/docs/Algorithm_Templates/README.md index fe9c7bbf3..3dbd4dbd6 100644 --- a/docs/Algorithm_Templates/README.md +++ b/docs/Algorithm_Templates/README.md @@ -6,10 +6,11 @@ | 名称 | 动图 | 代码 | | --- | --- | --- | -| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](/opt/git/LeetCode/docs/Algorithm\ Templates/Sort/BubbleSort.py) | -| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/InsertSort.py) | -| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/SelectionSort.py) | -| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/QuickSort.py) | -| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/ShellSort.py) | -| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](/opt/git/LeetCode/docs/src/py2.x/SortingAlgorithm/MergeSort.py) | +| 冒泡排序 | ![](/images/SortingAlgorithm/冒泡排序.gif) | [BubbleSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/BubbleSort.py) | +| 插入排序 | ![](/images/SortingAlgorithm/直接插入排序.gif) | [InsertSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/InsertSort.py) | +| 选择排序 | ![](/images/SortingAlgorithm/简单选择排序.gif) | [SelectionSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/SelectionSort.py) | +| 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/QuickSort.py) | +| 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/ShellSort.py) | +| 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/MergeSort.py) | | 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | + From 3f745078da810eb44dbc01aee40811db9150a45b Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 14:01:08 -0500 Subject: [PATCH 0469/2496] Create RadixSort.py --- docs/Algorithm_Templates/Sort/RadixSort.py | 46 ++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 docs/Algorithm_Templates/Sort/RadixSort.py diff --git a/docs/Algorithm_Templates/Sort/RadixSort.py b/docs/Algorithm_Templates/Sort/RadixSort.py new file mode 100644 index 000000000..e5fc2aba3 --- /dev/null +++ b/docs/Algorithm_Templates/Sort/RadixSort.py @@ -0,0 +1,46 @@ +#************************基数排序**************************** +#确定排序的次数 +#排序的顺序跟序列中最大数的位数相关 +def radix_sort_nums(L): + maxNum = L[0] +#寻找序列中的最大数 + for x in L: + if maxNum < x: + maxNum = x +#确定序列中的最大元素的位数 + times = 0 + while (maxNum > 0): + maxNum = int((maxNum/10)) + times += 1 + return times +#找到num从低到高第pos位的数据 +def get_num_pos(num, pos): + return (int((num/(10**(pos-1))))) % 10 +#基数排序 +def radix_sort(L): + count = 10 * [None] #存放各个桶的数据统计个数 + bucket = len(L) * [None] #暂时存放排序结果 +#从低位到高位依次执行循环 + for pos in range(1, radix_sort_nums(L)+1): + #置空各个桶的数据统计 + for x in range(0, 10): + count[x] = 0 + #统计当前该位(个位,十位,百位....)的元素数目 + for x in range(0, len(L)): + #统计各个桶将要装进去的元素个数 + j = get_num_pos(int(L[x]), pos) + count[j] += 1 + #count[i]表示第i个桶的右边界索引 + for x in range(1,10): + count[x] += count[x-1] + #将数据依次装入桶中 + for x in range(len(L)-1, -1, -1): + #求出元素第K位的数字 + j = get_num_pos(L[x], pos) + #放入对应的桶中,count[j]-1是第j个桶的右边界索引 + bucket[count[j]-1] = L[x] + #对应桶的装入数据索引-1 + count[j] -= 1 + # 将已分配好的桶中数据再倒出来,此时已是对应当前位数有序的表 + for x in range(0, len(L)): + L[x] = bucket[x] From 400d946820392e92a7ded500d588de0cc5f0297b Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 14:02:22 -0500 Subject: [PATCH 0470/2496] Update README.md --- docs/Algorithm_Templates/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Algorithm_Templates/README.md b/docs/Algorithm_Templates/README.md index 3dbd4dbd6..8e0b4dd33 100644 --- a/docs/Algorithm_Templates/README.md +++ b/docs/Algorithm_Templates/README.md @@ -12,5 +12,5 @@ | 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/QuickSort.py) | | 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/ShellSort.py) | | 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | [RadixSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/RadixSort.py) | From 05103037884a8433a7ce5653ba3467cadd978803 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 7 Apr 2018 14:02:49 -0500 Subject: [PATCH 0471/2496] Update README.md --- docs/Algorithm_Templates/Sort/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/Algorithm_Templates/Sort/README.md b/docs/Algorithm_Templates/Sort/README.md index 4237c9827..8e0b4dd33 100644 --- a/docs/Algorithm_Templates/Sort/README.md +++ b/docs/Algorithm_Templates/Sort/README.md @@ -12,4 +12,5 @@ | 快速排序 | ![](/images/SortingAlgorithm/快速排序.gif) | [QuickSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/QuickSort.py) | | 希尔排序 | ![](/images/SortingAlgorithm/希尔排序.png) | [ShellSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/ShellSort.py) | | 归并排序 | ![](/images/SortingAlgorithm/归并排序.gif) | [MergeSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/MergeSort.py) | -| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | | +| 基数排序 | ![](/images/SortingAlgorithm/基数排序.gif) | [RadixSort.py](https://github.com/apachecn/LeetCode/blob/master/docs/Algorithm_Templates/Sort/RadixSort.py) | + From 53f684266722962ab069e7d0ecc74eee76d5f376 Mon Sep 17 00:00:00 2001 From: cclauss Date: Sun, 8 Apr 2018 10:27:51 +0200 Subject: [PATCH 0472/2496] Syntax Error: Illegal characters invariable name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the invisible characters with space characters. flake8 testing of https://github.com/apachecn/LeetCode on Python 2.7 ``` $ __python2 -m flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics__ ./docs/Leetcode_Solutions/Summarization/Python刷题技巧笔记.py:10:4: E999 SyntaxError: invalid syntax row = len(matrix) ^ 1 E999 SyntaxError: invalid syntax ``` --- ...00\345\267\247\347\254\224\350\256\260.py" | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git "a/docs/Leetcode_Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" "b/docs/Leetcode_Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" index b0a0a8b93..69fed8912 100644 --- "a/docs/Leetcode_Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" +++ "b/docs/Leetcode_Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" @@ -7,13 +7,13 @@ # range会产生list存在memory中,xrange更像是生成器,generate on demand所以有的时候xrange会更快 # 3. python处理矩阵 -row  = len(matrix) -col = len(matrix[0]) if row else 0  -# 这样写通用的原因是, 当matrix = [], row = 0, col =0 +row = len(matrix) +col = len(matrix[0]) if row else 0 +# 这样写通用的原因是, 当matrix = [], row = 0, col = 0 # 4. python列表生成式 lst = [0 for i in range(3)] # lst = [0,0,0] -lst  = [[0 for i in range(3)] for j in range(2)]  # lst =  [[0, 0, 0], [0, 0, 0]] +lst = [[0 for i in range(3)] for j in range(2)] # lst =  [[0, 0, 0], [0, 0, 0]] # 下面这种写法危险: # lst1 = [ 0, 0, 0 ] # lst2  = [lst1] * 2  # lst2 = [ [0,0,0] , [0,0,0] ] @@ -24,18 +24,18 @@ # 如果这个key 没有在dict里面,给它一个默认值: D = {} if 1 in D: -  val = D[1] + val = D[1] else : -  val = 0 + val = 0 # 等同于这样写: val = D.get(1, 0) # 6. 字典赋值 if key in D: -  D[key].append(1) + D[key].append(1) else : -  D[key] = [] - + D[key] = [] + # 7. 字符串反转 # python字符串没有reverse函数,只能str[::-1] string[::-1] @@ -86,6 +86,6 @@ print('\r%s' % ''.join(fancy_loading)) fancy_loading.rotate(1) sys.stdout.flush() - time.sleep(0.08) + time.sleep(0.08) # 11. 用yield 不用return,可以返回一个generator From b2374892686a3d948f249a26ffeefdabe9b4f33d Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sun, 8 Apr 2018 05:43:43 -0500 Subject: [PATCH 0473/2496] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 54c60e39d..742aa8a28 100644 --- a/README.md +++ b/README.md @@ -28,4 +28,4 @@ ### Please note, this repository is inspired from [KrisYu](https://github.com/KrisYu/LeetCode-CLRS-Python). However, it has been modified, added and improved to reflect our knowledge, wisdom and effort. - - 💪就是干! + - 💪就是干!如果你觉得有帮助请点个star,谢谢! From e1eeddbd28c2a9cc110c4920514d7f32254ce054 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Tue, 10 Apr 2018 11:34:46 -0500 Subject: [PATCH 0474/2496] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 742aa8a28..3fd6e5de1 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## 1. [LeetCode 题解和总结](/docs/Leetcode_Solutions/) -## 2. [面试问答](/docs/Interview/) +## 2. [面试问答](/docs/interview/) * [Google 面试题](/docs/interview/Google/Google.md) * [pocketgems 面试题](/docs/interview/pocketgems/pocketgems.md) From 915e23db7f7fed4a6aac854521c377b83682a573 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Tue, 10 Apr 2018 14:00:45 -0500 Subject: [PATCH 0475/2496] =?UTF-8?q?Update=20=E5=BC=80=E5=8F=91=E5=B2=97?= =?UTF-8?q?=E4=BD=8D(Java)=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\275\215(Java)\346\200\273\347\273\223.md" | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git "a/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" "b/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" index 705bc0449..281e75a0e 100644 --- "a/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" +++ "b/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" @@ -33,3 +33,47 @@ # 4. 构造器Constructor是否可被override 构造器不能被重写,不能用static修饰构造器,只能用public,private,protected这三个权限修饰符,且不能有返回语句。 +1. 构造器与类同名 (构造函数,initilize 函数) +2. 每个类可以有一个以上的构造器 +3. 构造器可以有0个,1个以及多个参数 (无参构造函数,有参构造函数) +4. 构造器没有返回值(与void明显不同,构造器不会返回任何东西,你别无选择。) +5. 构造器总是伴随着new操作符一起调用 +6. 构造器不可被继承 + +# 5. 访问控制符public,protected,private,以及默认的区别 + +| | 任意地方 | 同一个包 | 子类 | 同一个类 | +| :----------------: | :------: | :--: | :--: | :--: | +| Public (接口访问权限) | 🌈 | 🌈 | 🌈 | 🌈 | +| Protected (继承访问权限) | 🌈(需要继承) | 🌈 | 🌈 | 🌈 | +| Default (包访问权限) | | 🌈 | 🌈 | 🌈 | +| Private (类访问权限) | | | | 🌈 | + + +- public(接口访问权限):任何地方都能访问; +- protected(继承访问权限): 介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。在同包内的类及包外的子类能访问; +- default(包访问权限):即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访问。 +- private(类访问权限): 只有在本类中才能访问; +(只限在Java语言中……) + +# 6. 是否可以继承String类 +String类是final类故不可以继承,一切由final修饰过的都不能继承。 + +# 7. String和StringBuffer、StringBuilder的区别 +- 可变性 + +String类中使用字符数组保存字符串,private final char value[],所以string对象是不可变的。 +StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,char[] value, +这两种对象都是可变的。 +- 线程安全性 + +String中的对象是不可变的,也就可以理解为常量,线程安全。 +AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。 +StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是***线程安全***的。 +StringBuilder并没有对方法进行加同步锁,所以是***非线程安全***的。 +- 性能 + +每次对 String 类型进行改变的时候,都会生成一个新的String 对象,然后将指针指向新的String 对象。StringBuffer每次都会对 +StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用StirngBuilder 相比使用 +StringBuffer 仅能获得10%~15% 左右的性能提升,但却要冒多线程不安全的风险。 +综合速度```String < StringBuffer < StirngBuilder``` From 78fa22759a7f89971b0fdc87daebb1cc963c63da Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Tue, 10 Apr 2018 14:32:40 -0500 Subject: [PATCH 0476/2496] =?UTF-8?q?Update=20=E5=BC=80=E5=8F=91=E5=B2=97?= =?UTF-8?q?=E4=BD=8D(Java)=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\275\215(Java)\346\200\273\347\273\223.md" | 104 ++++++++++++++++-- 1 file changed, 97 insertions(+), 7 deletions(-) diff --git "a/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" "b/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" index 281e75a0e..b5cb0d1ef 100644 --- "a/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" +++ "b/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" @@ -31,7 +31,7 @@ - 重载:发生在同一个类中,方法名必须相同,参数类型、个数或者顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。 - 重写:发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类;如果父类方法访问修饰符为private则子类中就不是重写。 -# 4. 构造器Constructor是否可被override +## 4. 构造器Constructor是否可被override 构造器不能被重写,不能用static修饰构造器,只能用public,private,protected这三个权限修饰符,且不能有返回语句。 1. 构造器与类同名 (构造函数,initilize 函数) 2. 每个类可以有一个以上的构造器 @@ -40,7 +40,7 @@ 5. 构造器总是伴随着new操作符一起调用 6. 构造器不可被继承 -# 5. 访问控制符public,protected,private,以及默认的区别 +## 5. 访问控制符public,protected,private,以及默认的区别 | | 任意地方 | 同一个包 | 子类 | 同一个类 | | :----------------: | :------: | :--: | :--: | :--: | @@ -56,10 +56,10 @@ - private(类访问权限): 只有在本类中才能访问; (只限在Java语言中……) -# 6. 是否可以继承String类 +## 6. 是否可以继承String类 String类是final类故不可以继承,一切由final修饰过的都不能继承。 -# 7. String和StringBuffer、StringBuilder的区别 +## 7. String和StringBuffer、StringBuilder的区别 - 可变性 String类中使用字符数组保存字符串,private final char value[],所以string对象是不可变的。 @@ -69,11 +69,101 @@ StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractSt String中的对象是不可变的,也就可以理解为常量,线程安全。 AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。 -StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是***线程安全***的。 -StringBuilder并没有对方法进行加同步锁,所以是***非线程安全***的。 +StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是**线程安全**的。 +StringBuilder并没有对方法进行加同步锁,所以是**非线程安全**的。 - 性能 每次对 String 类型进行改变的时候,都会生成一个新的String 对象,然后将指针指向新的String 对象。StringBuffer每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用StirngBuilder 相比使用 -StringBuffer 仅能获得10%~15% 左右的性能提升,但却要冒多线程不安全的风险。 +StringBuffer 仅能获得10%~15% 左右的性能提升,但却要冒多线程不安全的风险。大多数情况下建议使用StirngBuilder。 综合速度```String < StringBuffer < StirngBuilder``` + +## 8. hashCode和equals方法的关系 + +Java对象的eqauls方法和hashCode方法是这样规定的: + +1. 相等(相同)的对象必须具有相等的哈希码(或者散列码)。 +2. 如果两个对象的hashCode相同,它们并不一定相同。 + +- 关于第一点,相等(相同)的对象必须具有相等的哈希码(或者散列码),为什么? + + 想象一下,假如两个Java对象A和B,A和B相等(eqauls结果为true),但A和B的哈希码不同,则A和B存入HashMap时的哈希码计算得到的HashMap内部数组位置索引可能不同,那么A和B很有可能允许同时存入HashMap,显然相等/相同的元素是不允许同时存入HashMap,HashMap不允许存放重复元素。 + +- 关于第二点,两个对象的hashCode相同,它们并不一定相同 + + 也就是说,不同对象的hashCode可能相同;假如两个Java对象A和B,A和B不相等(eqauls结果为false),但A和B的哈希码相等,将A和B都存入HashMap时会发生哈希冲突,也就是A和B存放在HashMap内部数组的位置索引相同这时HashMap会在该位置建立一个链接表,将A和B串起来放在该位置,显然,该情况不违反HashMap的使用原则,是允许的。当然,哈希冲突越少越好,尽量采用好的哈希算法以避免哈希冲突。 + + **注意⚠️**:在object类中,hashcode()方法是本地方法,返回的是对象的地址值,而object类中的equals()方法比较的也是两个对象的地址值,如果equals()相等,说明两个对象地址值也相等,当然hashcode()也就相等了;在String类中,equals()返回的是两个对象内容的比较,当两个对象内容相等时,Hashcode()方法根据String类的重写代码的分析,也可知道hashcode()返回结果也会相等。以此类推,可以知道Integer、Double等封装类中经过重写的equals()和hashcode()方法也同样适合于这个原则。当然没有经过重写的类,在继承了object类的equals()和hashcode()方法后,也会遵守这个原则。 + + 当集合要添加新的元素时,如果每增加一个元素就检查一次equals方法,那么当元素很多时,后添加到集合中的元素比较的次数就非常多了。也就是说,如果集合中现在已经有1000个元素,那么第1001个元素加入集合时,它就要调用1000次equals方法。这显然会大大降低效率。正确的做法是先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;如果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址。所以这里存在一个冲突解决的问题。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。 + + ## 9. 抽象类和接口的区别 +- 语法层次 + +抽象类和接口分别给出了不同的语法定义。 +- 设计层次 + +抽象层次不同,抽象类是对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。抽象类是自底向上抽象而来的,接口是自顶向下设计出来的。 +- 跨域不同 + +抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在"is-a" +关系,即父类和派生类在概念本质上应该是相同的。对于接口则不然,并不要求接口的实现者和接口定义在概念本质上是一致的,仅仅是实现了接口定义的契约而已,"like-a" 或者 "can do a"的关系。 + +## 10. 自动装箱与拆箱 +- 装箱:将基本类型用它们对应的引用类型包装起来; +- 拆箱:将包装类型转换为基本数据类型; + +Java使用自动装箱和拆箱机制,节省了常用数值的内存开销和创建对象的开销,提高了效率,由编译器来完成,编译器会在编译期根据语法决定是否进行装箱和拆箱动作。 + +## 11. 什么是泛型、为什么要使用以及类型擦除 +泛型,即“参数化类型”。 +创建集合时就指定集合元素的类型,该集合只能保存其指定类型的元素,避免使用强制类型转换。 +Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会在编译器在编译的时候去掉。这个过程就称为类型擦除。 +类型擦除的主要过程如下: +- 1. 将所有的泛型参数用其最左边界(最顶级的父类型)类型替换。 +- 2. 移除所有的类型参数。 + +```java +public class Test4 { + public static void main(String[] args) { + ArrayList arrayList1=new ArrayList(); + arrayList1.add("abc"); + ArrayList arrayList2=new ArrayList(); + arrayList2.add(123); + System.out.println(arrayList1.getClass()==arrayList2.getClass()); + } +} +``` + +在这个例子中,我们定义了两个ArrayList数组,不过一个是ArrayList泛型类型,只能存储字符串。一个是ArrayList泛型类型,只能存储整形。最后,我们通过arrayList1对象和arrayList2对象的getClass方法获取它们的类的信息,最后发现结果为true。说明泛型类型String和Integer都被擦除掉了,只剩下了**原始类型**。 + +```java +public class Test4 { + public static void main(String[] args) throws IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { + ArrayList arrayList3=new ArrayList(); + arrayList3.add(1);//这样调用add方法只能存储整形,因为泛型类型的实例为Integer + arrayList3.getClass().getMethod("add", Object.class).invoke(arrayList3, "asd"); + for (int i=0;i Date: Tue, 10 Apr 2018 15:23:48 -0500 Subject: [PATCH 0477/2496] =?UTF-8?q?Update=20=E5=BC=80=E5=8F=91=E5=B2=97?= =?UTF-8?q?=E4=BD=8D(Java)=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\275\215(Java)\346\200\273\347\273\223.md" | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git "a/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" "b/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" index b5cb0d1ef..ae0c5108b 100644 --- "a/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" +++ "b/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" @@ -159,6 +159,30 @@ public class Test4 { - SortedSet和SortedMap接口对元素按指定规则排序,SortedMap是对key列进行排序。 ## 13. HashMap实现原理 +具体原理参考文章: +- http://zhangshixi.iteye.com/blog/672697 +- http://www.admin10000.com/document/3322.html + +## 14. HashTable实现原理 +具体原理参考文章: +- http://www.cnblogs.com/skywang12345/p/3310887.html +- http://blog.csdn.net/chdjj/article/details/38581035 + +## 15. HashMap和HashTable区别 +1. HashTable的方法前面都有synchronized来同步,是线程安全的;HashMap未经同步,是非线程安全的。 +2. HashTable不允许null值(key和value都不可以) ;HashMap允许null值(key和value都可以)。 +3. HashTable有一个contains(Object value)功能和containsValue(Object value)功能一样。 +4. HashTable使用Enumeration进行遍历;HashMap使用Iterator进行遍历。 +5. HashTable中hash数组默认大小是11,增加的方式是old*2+1;HashMap中hash数组的默认大小是16,而且一定是2的指数。 +6. 哈希值的使用不同,HashTable直接使用对象的hashCode; HashMap重新计算hash值,而且用与代替求模。 + + + + +## Todo: transient, volatile关键字 +https://www.cnblogs.com/dolphin0520/p/3920373.html + + From f513ff92a093746742da29b521854b5912660889 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Tue, 10 Apr 2018 16:37:15 -0500 Subject: [PATCH 0478/2496] =?UTF-8?q?Update=20=E5=BC=80=E5=8F=91=E5=B2=97?= =?UTF-8?q?=E4=BD=8D(Java)=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\262\227\344\275\215(Java)\346\200\273\347\273\223.md" | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git "a/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" "b/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" index ae0c5108b..a462746fd 100644 --- "a/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" +++ "b/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" @@ -162,6 +162,7 @@ public class Test4 { 具体原理参考文章: - http://zhangshixi.iteye.com/blog/672697 - http://www.admin10000.com/document/3322.html +经典文章!!! ## 14. HashTable实现原理 具体原理参考文章: @@ -173,13 +174,14 @@ public class Test4 { 2. HashTable不允许null值(key和value都不可以) ;HashMap允许null值(key和value都可以)。 3. HashTable有一个contains(Object value)功能和containsValue(Object value)功能一样。 4. HashTable使用Enumeration进行遍历;HashMap使用Iterator进行遍历。 -5. HashTable中hash数组默认大小是11,增加的方式是old*2+1;HashMap中hash数组的默认大小是16,而且一定是2的指数。 -6. 哈希值的使用不同,HashTable直接使用对象的hashCode; HashMap重新计算hash值,而且用与代替求模。 +5. Hashtable的容量为任意正数(最小为1),而HashMap的容量始终为2的n次方。HashTable中hash数组默认大小是11,增加的方式是old*2+1;HashMap中hash数组的默认大小是16,而且一定是2的指数。 +6. 哈希值的使用不同,HashTable直接使用对象的hashCode; HashMap重新计算hash值,而且用 ```&``` 代替求模 ```%```。 +7. HashMap计算索引的方式是h&(length-1),而Hashtable用的是模运算,效率上是低于HashMap的。另外Hashtable计算索引时将hash值先与上0x7FFFFFFF,这是为了保证hash值始终为正数。 -## Todo: transient, volatile关键字 +## Todo: transient, volatile关键字, Fail-fast https://www.cnblogs.com/dolphin0520/p/3920373.html From fe1e860ff02bc2fe547ea05e302e4e0f76509079 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Tue, 10 Apr 2018 16:37:54 -0500 Subject: [PATCH 0479/2496] =?UTF-8?q?Update=20=E5=BC=80=E5=8F=91=E5=B2=97?= =?UTF-8?q?=E4=BD=8D(Java)=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...45\262\227\344\275\215(Java)\346\200\273\347\273\223.md" | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git "a/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" "b/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" index a462746fd..459f46217 100644 --- "a/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" +++ "b/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" @@ -160,9 +160,11 @@ public class Test4 { ## 13. HashMap实现原理 具体原理参考文章: -- http://zhangshixi.iteye.com/blog/672697 -- http://www.admin10000.com/document/3322.html +- http://zhangshixi.iteye.com/blog/672697 经典文章!!! +- http://www.admin10000.com/document/3322.html +经典文章!!! + ## 14. HashTable实现原理 具体原理参考文章: From 7e21e600dd00baae562875dc2861726f75641dfa Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Tue, 10 Apr 2018 21:51:56 -0500 Subject: [PATCH 0480/2496] Update 114._flatten_binary_tree_to_linked_list.md --- ...114._flatten_binary_tree_to_linked_list.md | 95 ++++++++++++------- 1 file changed, 62 insertions(+), 33 deletions(-) diff --git a/docs/Leetcode_Solutions/114._flatten_binary_tree_to_linked_list.md b/docs/Leetcode_Solutions/114._flatten_binary_tree_to_linked_list.md index f23fd7870..81ad647ca 100644 --- a/docs/Leetcode_Solutions/114._flatten_binary_tree_to_linked_list.md +++ b/docs/Leetcode_Solutions/114._flatten_binary_tree_to_linked_list.md @@ -1,42 +1,71 @@ -###114. Flatten Binary Tree to Linked List - -题目: - - - -难度: - -Medium - - -有hint,又是玩DFS的preorder,用的loop,也不算很聪明的算法 - -用stack来放node,每次把pop出来的node左边变成null,把它的right指向下一个pop出来的node,也就是为嘛有prev,然后root处特殊处理一下 - - +### 114. Flatten Binary Tree to Linked List + +题目: + + + +难度: + +Medium + +这道题看了hint,说每个node的右节点都是相应先序遍历中它的下一个节点。 +所以我的思路是先把先序遍历的node顺序搞出来,然后对于这里面的每一个节点,只需要做两个操作: +1. node.left = None +2. node.right = 相应先序遍历中node的下一个节点 + +```python +class Solution(object): + def flatten(self, root): + """ + :type root: TreeNode + :rtype: void Do not return anything, modify root in-place instead. + """ + def preorder(root): + res = [] + if not root: + return res + res.append(root) + if root.left: + res.extend(preorder(root.left)) + if root.right: + res.extend(preorder(root.right)) + return res + if not root: + return + node_order = preorder(root) + for i in range(len(node_order)-1): + node_order[i].left = None + node_order[i].right = node_order[i+1] + node_order[-1].left = None + node_order[-1].right = None ``` +beat 40.67% + +另外一种解法: +1. copy the left and right subtree +2. then cut root’s left subtree +3. do DFS +4. left and right has been flattened and connect them left and right back to the root +```python class Solution(object): def flatten(self, root): """ :type root: TreeNode :rtype: void Do not return anything, modify root in-place instead. """ - if root == None: + if not root: return - s = [] - s.append(root) - prev = root - while s: - node = s.pop() - if node.right: - s.append(node.right) - if node.left: - s.append(node.left) - node.left = None - if node == root: - continue - else: - prev.right = node - prev = node -``` + left_node = root.left + right_node = root.right + root.left = None + self.flatten(left_node) + self.flatten(right_node) + if left_node: + root.right = left_node + while left_node.right: + left_node = left_node.right + left_node.right = right_node +``` +beat 32.18% + From a7a88cc894b4ab49b54bf4c90833c8ec6aeb77b7 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 11 Apr 2018 16:45:42 -0500 Subject: [PATCH 0481/2496] Create TopKWords.java --- docs/Algorithm_Templates/Others/TopKWords.java | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/Algorithm_Templates/Others/TopKWords.java diff --git a/docs/Algorithm_Templates/Others/TopKWords.java b/docs/Algorithm_Templates/Others/TopKWords.java new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/docs/Algorithm_Templates/Others/TopKWords.java @@ -0,0 +1 @@ + From 13b015f0472e9a3ab3253f40905b9cc394df5796 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 11 Apr 2018 16:46:19 -0500 Subject: [PATCH 0482/2496] Update TopKWords.java --- .../Algorithm_Templates/Others/TopKWords.java | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/docs/Algorithm_Templates/Others/TopKWords.java b/docs/Algorithm_Templates/Others/TopKWords.java index 8b1378917..b1cfc92f6 100644 --- a/docs/Algorithm_Templates/Others/TopKWords.java +++ b/docs/Algorithm_Templates/Others/TopKWords.java @@ -1 +1,85 @@ +import java.io.*; +import java.util.*; + +/* display the most frequent K words in the file and the times it appear + in the file – shown in order (ignore case and periods) */ + +public class TopKWords { + static class CountWords { + private String fileName; + + public CountWords(String fileName) { + this.fileName = fileName; + } + + public Map getDictionary() { + Map dictionary = new HashMap<>(); + FileInputStream fis = null; + + try { + + fis = new FileInputStream(fileName); // open the file + int in = 0; + String s = ""; // init a empty word + in = fis.read(); // read one character + + while (-1 != in) { + if (Character.isLetter((char)in)) { + s += (char)in; //if get a letter, append to s + } else { + // this branch means an entire word has just been read + if (s.length() > 0) { + // see whether word exists or not + if (dictionary.containsKey(s)) { + // if exist, count++ + dictionary.put(s, dictionary.get(s) + 1); + } else { + // if not exist, initiate count of this word with 1 + dictionary.put(s, 1); + } + } + s = ""; // reInit a empty word + } + in = fis.read(); + } + return dictionary; + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + // you always have to close the I/O streams + fis.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return null; + } + } + public static void main(String[] args) { + // you can replace the filePath with yours + CountWords cw = new CountWords("/Users/lisanaaa/Desktop/words.txt"); + Map dictionary = cw.getDictionary(); // get the words dictionary: {word: frequency} + + // we change the map to list for convenient sort + List> list = new ArrayList<>(dictionary.entrySet()); + + // sort by lambda valueComparator + list.sort(Comparator.comparing( + m -> m.getValue()) + ); + + Scanner input = new Scanner(System.in); + int k = input.nextInt(); + while (k > list.size()) { + System.out.println("Retype a number, your number is too large"); + input = new Scanner(System.in); + k = input.nextInt(); + } + for (int i = 0; i < k; i++) { + System.out.println(list.get(list.size() - i - 1)); + } + } +} + From 66370a5b7c57d4f2ebad93627e4dcf30e96691ad Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 11 Apr 2018 16:47:02 -0500 Subject: [PATCH 0483/2496] Create words.txt --- docs/Algorithm_Templates/Others/words.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 docs/Algorithm_Templates/Others/words.txt diff --git a/docs/Algorithm_Templates/Others/words.txt b/docs/Algorithm_Templates/Others/words.txt new file mode 100644 index 000000000..b3c4b5679 --- /dev/null +++ b/docs/Algorithm_Templates/Others/words.txt @@ -0,0 +1,11 @@ + + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam non pharetra purus. Quisque non tristique risus. Nulla ultricies eget nunc a volutpat. Aliquam semper, eros sit amet semper pellentesque, elit magna auctor ligula, sit amet vulputate nunc arcu sit amet ipsum. Aenean efficitur, felis ut tincidunt semper, sem sapien facilisis felis, et elementum ipsum risus sit amet metus. Pellentesque et orci at odio hendrerit lobortis vitae non felis. Phasellus nunc eros, ultricies sed dolor vel, ultricies mattis neque. Mauris placerat fringilla libero id efficitur. Donec nec imperdiet augue. Sed sit amet risus in turpis scelerisque rutrum. Ut sed pretium dolor. Donec metus nisl, blandit quis augue et, interdum suscipit metus. Morbi rutrum eros vel lacus aliquet, et maximus erat dapibus. Vivamus est justo, sagittis a augue id, vulputate vehicula nunc. Praesent mattis eros sapien, ac sagittis urna accumsan sit amet. Proin non dui tincidunt, tristique nisi in, vestibulum lorem. + +Quisque fermentum justo lacus, sit amet tempus lectus congue eu. Nulla sed quam nec nulla consequat tincidunt. Sed sed nunc diam. Integer ex ante, accumsan id fermentum a, interdum eu sapien. Aliquam justo dui, luctus vel ligula in, lacinia ornare turpis. Praesent leo purus, fringilla ut lobortis et, porta ac urna. Mauris id velit porta, iaculis felis non, sagittis nunc. Quisque non condimentum nisl, vitae venenatis urna. Nam commodo euismod felis, ac efficitur turpis scelerisque nec. Phasellus sagittis nec lacus eu bibendum. Suspendisse finibus vestibulum quam, quis volutpat ante. Duis nibh ligula, dapibus at est sed, tincidunt convallis augue. Pellentesque non consequat mi. Curabitur consequat imperdiet efficitur. + +Mauris ipsum arcu, fermentum in urna ultricies, venenatis vehicula nisl. Donec viverra non tellus sit amet porta. Phasellus ornare magna eget condimentum mollis. In hac habitasse platea dictumst. Proin in nibh venenatis, fermentum neque nec, commodo urna. In eget condimentum risus, ac interdum dolor. Sed ut neque sapien. Proin nulla diam, lobortis sed ultrices eget, blandit ut libero. + +Fusce at varius dui. Quisque viverra vulputate consectetur. Quisque sagittis id ante a vestibulum. Phasellus vel lobortis lectus. Duis vestibulum, quam vel congue elementum, lacus nibh efficitur odio, consectetur dapibus ipsum velit at diam. Duis eu nunc id diam tempor vestibulum sed luctus arcu. Nunc eu luctus ex. Morbi et commodo eros, non suscipit enim. Ut fringilla odio nec tincidunt scelerisque. Nam quis elit cursus, ullamcorper lorem id, convallis dui. Mauris elementum tortor odio, nec imperdiet nisl bibendum eget. Suspendisse potenti. + +Cras ut efficitur enim. Sed consequat non ante id euismod. Ut at magna viverra, aliquam purus a, lobortis mi. Donec hendrerit odio eu nunc imperdiet, quis pharetra sapien volutpat. Morbi leo libero, egestas vitae tortor eget, dictum volutpat augue. Donec arcu lacus, tristique eu posuere ac, pharetra vel ante. Nunc efficitur arcu elit, quis semper risus vestibulum eu. From 7bae222be831e83be38eac3ab884054be859fc1d Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 11 Apr 2018 16:48:04 -0500 Subject: [PATCH 0484/2496] Update TopKWords.java --- docs/Algorithm_Templates/Others/TopKWords.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/Algorithm_Templates/Others/TopKWords.java b/docs/Algorithm_Templates/Others/TopKWords.java index b1cfc92f6..c9f138000 100644 --- a/docs/Algorithm_Templates/Others/TopKWords.java +++ b/docs/Algorithm_Templates/Others/TopKWords.java @@ -57,8 +57,9 @@ public Map getDictionary() { } } public static void main(String[] args) { - // you can replace the filePath with yours - CountWords cw = new CountWords("/Users/lisanaaa/Desktop/words.txt"); + // you can replace the filePath with yours, e.g. + // CountWords cw = new CountWords("/Users/lisanaaa/Desktop/words.txt"); + CountWords cw = new CountWords("/words.txt"); Map dictionary = cw.getDictionary(); // get the words dictionary: {word: frequency} // we change the map to list for convenient sort From d39024ec161e236bf72a0f9150a45b5d54813d30 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 12 Apr 2018 12:21:07 -0500 Subject: [PATCH 0485/2496] Update 048._rotate_image.md --- docs/Leetcode_Solutions/048._rotate_image.md | 80 ++++++++------------ 1 file changed, 33 insertions(+), 47 deletions(-) diff --git a/docs/Leetcode_Solutions/048._rotate_image.md b/docs/Leetcode_Solutions/048._rotate_image.md index bff771bbb..fa4522359 100644 --- a/docs/Leetcode_Solutions/048._rotate_image.md +++ b/docs/Leetcode_Solutions/048._rotate_image.md @@ -1,4 +1,4 @@ -###48. Rotate Image +### 48. Rotate Image 题目: @@ -11,34 +11,26 @@ Medium + 思路一: -``` -rotate之前: 之后: - 1 2 3 4 13 9 5 1 - 5 6 7 8 14 10 6 2 - 9 10 11 12 15 11 7 3 - 13 14 15 16 16 12 8 4 -``` -看网上的hint,是先沿着对角线变换一次,再验证水平中线变换一次 +先将矩阵上下翻转,然后将矩阵中心对称翻转,即可实现顺时针90度旋转。 -``` -16 12 8 4 13 9 5 1 -15 11 7 3 14 10 6 2 -14 10 6 2 15 11 7 3 -13 9 5 1 16 12 8 4 -``` +- 上下翻转规律 [i][:] --> [n-1-i][:] +- 对角线变换的规律是 [i][j] --> [j][i] -对角线变换的规律是 -(i,j), (n-1-j,n-1-i) -上下变换规律 -(i,j),(n-1-i,j) +例如: +``` +1 1 1 3 3 3 3 2 1 +2 2 2 -> 2 2 2 -> 3 2 1 +3 3 3 1 1 1 3 2 1 +``` -``` +```python class Solution(object): def rotate(self, matrix): """ @@ -46,16 +38,13 @@ class Solution(object): :rtype: void Do not return anything, modify matrix in-place instead. """ n = len(matrix) - for i in range(n): - for j in range(n): - if j < n-1-i: - matrix[i][j],matrix[n-1-j][n-1-i] = matrix[n-1-j][n-1-i],matrix[i][j] - + # 上下翻转 for i in range(n/2): - for j in range(n): - matrix[i][j],matrix[n-1-i][j] = matrix[n-1-i][j],matrix[i][j] - - + matrix[i], matrix[n-1-i] = matrix[n-1-i], matrix[i] + # 主对角线翻转 + for i in range(n): + for j in range(i+1,n): + matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j] ``` @@ -81,18 +70,10 @@ class Solution(object): ``` -观察一下,第一个数开始的变换是 (0,0)->(0,4)->(4,4)->(4,0) -第二个数的变换是 (0,1)->(1,4)->(4,3)->(3,0) - -变换是 (x,y) -> (y, n-1-x) -> (n-1-x,n-1-y)->(n-1-y,x) - -然后处理第一行是从(0,0)->(0,n-2),第二列是(1,1)->(1,n-3). - -第i行(i, i)(i, n – 2 – i).终止条件也有了。 +在思路一的解法下观察得出,每个元素的变换是 [x][y] -> [n-1-x][y] -> [y][n-1-x] -> [n-1-y][x] -虽然都是O(N^2),但是这个比上面的稍快 -``` +```python class Solution(object): def rotate(self, matrix): """ @@ -100,17 +81,22 @@ class Solution(object): :rtype: void Do not return anything, modify matrix in-place instead. """ n = len(matrix) - - # row, col - for i in range(n): - for j in range(i,n-1-i): - matrix[i][j],matrix[j][n-1-i],matrix[n-1-i][n-1-j],matrix[n-1-j][i] = \ - matrix[n-1-j][i],matrix[i][j],matrix[j][n-1-i],matrix[n-1-i][n-1-j] + for i in range(n/2): + for j in range(n-n/2): + matrix[i][j], matrix[~j][i], matrix[~i][~j], matrix[j][~i] = \ + matrix[~j][i], matrix[~i][~j], matrix[j][~i], matrix[i][j] ``` +这里的```[~i]``` 意思就是 ```[n-1-i]``` +思路三: +直接用zip函数,一行, 😂 -这里的问题是矩阵都是方形,如果不是方形,貌似难很多。 - +```python +class Solution: + def rotate(self, A): + A[:] = zip(*A[::-1]) + # A[:] = map(list, zip(*A[::-1])) +``` From 63ee3b6fe6cf1c1c0f8d251c00af0861573bfb2c Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 12 Apr 2018 12:21:27 -0500 Subject: [PATCH 0486/2496] Update 048._rotate_image.md --- docs/Leetcode_Solutions/048._rotate_image.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Leetcode_Solutions/048._rotate_image.md b/docs/Leetcode_Solutions/048._rotate_image.md index fa4522359..5c727dd7c 100644 --- a/docs/Leetcode_Solutions/048._rotate_image.md +++ b/docs/Leetcode_Solutions/048._rotate_image.md @@ -89,6 +89,7 @@ class Solution(object): 这里的```[~i]``` 意思就是 ```[n-1-i]``` 思路三: + 直接用zip函数,一行, 😂 ```python From fec022fde13fce67d4e67281de4cef0a50760fff Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 12 Apr 2018 12:23:06 -0500 Subject: [PATCH 0487/2496] =?UTF-8?q?Update=20Python=E5=88=B7=E9=A2=98?= =?UTF-8?q?=E6=8A=80=E5=B7=A7=E7=AC=94=E8=AE=B0.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...2\230\346\212\200\345\267\247\347\254\224\350\256\260.py" | 5 +++++ 1 file changed, 5 insertions(+) diff --git "a/docs/Leetcode_Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" "b/docs/Leetcode_Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" index 69fed8912..bdd0b3ab5 100644 --- "a/docs/Leetcode_Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" +++ "b/docs/Leetcode_Solutions/Summarization/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.py" @@ -89,3 +89,8 @@ time.sleep(0.08) # 11. 用yield 不用return,可以返回一个generator + +# 12. 符号~的巧妙应用 +for i in range(n): + # 这里的```[~i]``` 意思就是 ```[n-1-i]``` + a[~i] = 1 From 5dce637213312a9a5e7a1480fc23bd1a0362848f Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 12 Apr 2018 18:43:43 -0500 Subject: [PATCH 0488/2496] Update 206._reverse_linked_list.md --- .../206._reverse_linked_list.md | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/docs/Leetcode_Solutions/206._reverse_linked_list.md b/docs/Leetcode_Solutions/206._reverse_linked_list.md index 485a55e05..97c10db26 100644 --- a/docs/Leetcode_Solutions/206._reverse_linked_list.md +++ b/docs/Leetcode_Solutions/206._reverse_linked_list.md @@ -28,7 +28,25 @@ class Solution(object): cur = nxt return prev ``` - +其实一个指针就够了 +```python +class Solution(object): + def reverseList(self, head): + """ + :type head: ListNode + :rtype: ListNode + """ + if not head: + return head + prev = None + while head.next: + tmp = head.next + head.next = prev + prev = head + head = tmp + head.next = prev + return head +``` 递归版本,可以再消化一下. From 61e2ecc9d8d88e6f97bbe19f1ed03d03128e3689 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Thu, 12 Apr 2018 19:32:40 -0500 Subject: [PATCH 0489/2496] Update 234._palindrome_linked_list.md --- .../234._palindrome_linked_list.md | 130 +++++++----------- 1 file changed, 50 insertions(+), 80 deletions(-) diff --git a/docs/Leetcode_Solutions/234._palindrome_linked_list.md b/docs/Leetcode_Solutions/234._palindrome_linked_list.md index 586e69584..0d92492b0 100644 --- a/docs/Leetcode_Solutions/234._palindrome_linked_list.md +++ b/docs/Leetcode_Solutions/234._palindrome_linked_list.md @@ -1,4 +1,4 @@ -###234. Palindrome Linked List +### 234. Palindrome Linked List 题目: @@ -7,51 +7,31 @@ 难度: Easy -这道题我花了很久的时间 +蠢了一下, +思路是:“先翻转整个链表(in-place),然后和之前的链表比较”,但是这样原链表都变了,肯定错。 -思路是:“先翻转整个链表,然后和之前的链表比较” +如果新建一个链表,然后改造成原来链表的翻转链表,还是可行的,但是空间复杂度就是O(n)了。那还不如直接把List中元素拷贝到数组中直接比较,ac代码如下: -但是一直不能AC,然后去谷歌了,然后debug的过程发现原来的linked list也不存在了. - -“先翻转整个链表,然后和之前的链表比较”听起来是可行的,但是当你“翻转了整个链表”以后,“之前的链表”已经不存在了啊。这时候的head其实是指向翻转后的链表的最后一个元素,所以这段代码的本质是:“比较链表的第1个和最后1个元素是否相同”。 - - -如果用这个思路的话,你就必须创建一个原始链表的备份才行。但与其那样做,还不如干脆把List中元素拷贝到数组中算了,因为都是O(N)内存,后者实现起来还简单快捷一些。 - - -所以艰难的第一个AC办法: - - -``` +```python class Solution(object): def isPalindrome(self, head): """ :type head: ListNode :rtype: bool """ - if head == None or head.next == None: - return True - - cur = head - stack = [] - while cur: - stack.append(cur.val) - cur = cur.next - - while head and stack: - if head.val != stack.pop(): - return False - else: - head = head.next - return True + vals = [] + while head: + vals += head.val, + head = head.next + return vals == vals[::-1] ``` 这道题并不能算Easy吧: 思路二: -找到中间的节点,把linked list拆成两个部分,后半部分linkedlist reverse,然后比较两个linked list值是否相同,看例子: +要想实现O(1)的空间复杂度,可以找到中间的节点,把linked list拆成两个部分,后半部分linkedlist reverse,然后比较两个linked list值是否相同,看例子: ``` @@ -61,64 +41,54 @@ class Solution(object): ``` -然后用这个思路的时候还有一个问题,就是特别简单的Python递归可能建议不用递归,因为递归反倒可能recursion到极限,用loop可能更顺. - -第二个AC之法,因为懒,所以老用之前用过的代码: - -这个速度也是慢的厉害 +可以使用快慢指针来找到中间的节点。 - -``` +```python class Solution(object): def isPalindrome(self, head): """ :type head: ListNode :rtype: bool """ - if head == None or head.next == None: - return True - - mid = self.findMid(head) - mid = self.reverseList(mid) - - while head and mid: - if head.val != mid.val: + fast = slow = head + # 找到中间节点 + while fast and fast.next: + fast = fast.next.next + slow = slow.next + # 翻转后半部分 + prev = None + while slow: + tmp = slow.next + slow.next = prev + prev = slow + slow = tmp + # 比较前后两部分 + while prev: # while prev and head: + if prev.val != head.val: return False - else: - head = head.next - mid = mid.next + prev = prev.next + head = head.next return True - - - - def findMid(self, head): - if head == None: - return None - else: - slow = head - fast = head - - while fast.next and fast.next.next: - slow = slow.next - fast = fast.next.next - - print(slow.val) - return slow.next - - def reverseList(self, head): - """ - :type head: ListNode - :rtype: ListNode - """ - prev = None - cur = head - while(cur): - nxt = cur.next - cur.next = prev - prev = cur - cur = nxt - return prev ``` -然后看了一下,如果把这三块写在一起,会轻松一些,AC速度快很多 +给个最终状态的例子: +``` + + fast tmp + None prev slow + ^ ^ ^ + | | | +1 --> 2 --> 3 <-- 2 <-- 1 None + +``` +但是注意最后的while prev不能换成while fast, 因为这是总节点数为奇数的情况,如果是偶数情况就不一样了,如下: +``` +                         tmp +                          slow    + None prev fast + ^ ^ ^ + | | | +1 --> 2 --> 2 <-- 1 None + +``` From 12634b7ec8342655adb8ea32ab0db76e49a81ba1 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sat, 14 Apr 2018 19:07:21 -0500 Subject: [PATCH 0490/2496] =?UTF-8?q?Update=20=E5=BC=80=E5=8F=91=E5=B2=97?= =?UTF-8?q?=E4=BD=8D(Java)=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\275\215(Java)\346\200\273\347\273\223.md" | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git "a/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" "b/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" index 459f46217..436b1126c 100644 --- "a/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" +++ "b/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" @@ -180,6 +180,37 @@ public class Test4 { 6. 哈希值的使用不同,HashTable直接使用对象的hashCode; HashMap重新计算hash值,而且用 ```&``` 代替求模 ```%```。 7. HashMap计算索引的方式是h&(length-1),而Hashtable用的是模运算,效率上是低于HashMap的。另外Hashtable计算索引时将hash值先与上0x7FFFFFFF,这是为了保证hash值始终为正数。 +## 16. ArrayList和vector区别 +1. ArrayList和Vector都实现了List接口,都是通过数组实现的。 +2. Vector是线程安全的,而ArrayList是非线程安全的。 +3. List第一次创建的时候,会有一个初始大小,随着不断向List中增加元素,当List 认为容量不够的时候就会进行扩容。Vector缺省情况下自动增长原来一倍的数组长度,ArrayList增长原来的50%。 + +## 17. ArrayList和LinkedList区别及使用场景 +1. 区别 + + - ArrayList底层是用数组实现的,可以认为ArrayList是一个可改变大小的数组。随着越来越多的元素被添加到ArrayList中,其规模是动态增加的。 + - LinkedList底层是通过双向链表实现的, LinkedList和ArrayList相比,增删的速度较快。但是查询和修改值的速度较慢。同时,LinkedList还实现了Queue接口,所以他还提供了offer(), peek(), poll()等方法。 +2. 使用场景 + + - LinkedList更适合从中间插入或者删除(链表的特性)。 + - ArrayList更适合检索和在末尾插入或删除(数组的特性)。 + +## 18. Collection和Collections的区别 +- java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。 +- java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。 + +## 19. Concurrenthashmap实现原理 +具体原理参考文章: +- http://www.cnblogs.com/ITtangtang/p/3948786.html +- http://ifeve.com/concurrenthashmap/ + +## 20. Error、Exception区别 +Error类和Exception类的父类都是throwable类,他们的区别是: + +- Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢出等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。 +- Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。 + +总结下来:Error类一般不能通过改代码处理,而Exception就是程序员改完代码基本就好了。 From 8243d256ba446037a65c38ab1b7e341abbe7a1b0 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sun, 15 Apr 2018 18:07:39 -0500 Subject: [PATCH 0491/2496] =?UTF-8?q?Update=20=E5=BC=80=E5=8F=91=E5=B2=97?= =?UTF-8?q?=E4=BD=8D(Java)=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\227\344\275\215(Java)\346\200\273\347\273\223.md" | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git "a/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" "b/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" index 436b1126c..f61da329e 100644 --- "a/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" +++ "b/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" @@ -212,6 +212,17 @@ Error类和Exception类的父类都是throwable类,他们的区别是: 总结下来:Error类一般不能通过改代码处理,而Exception就是程序员改完代码基本就好了。 +## 21. Unchecked Exception 和 Checked Exception,各列举几个 +1. Unchecked Exception: + a. 指的是程序的瑕疵或逻辑错误,并且在运行时无法恢复。 + b. Unchecked异常继承自java.lang.RuntimeException类, 包括Error与RuntimeException及其子类,如:OutOfMemoryError, UndeclaredThrowableException, IllegalArgumentException, IllegalMonitorStateException, NullPointerException, IllegalStateException, IndexOutOfBoundsException等。 + c. unchecked异常则可以不必捕获或抛出, 语法上不需要声明抛出异常。 + +2. Checked Exception: + a. 代表程序不能直接控制的无效外界情况(如用户输入,数据库问题,网络异常,文件丢失等) + b. Checked异常继承java.lang.Exception类, 除了Error和RuntimeException及其子类之外,如:ClassNotFoundException, NamingException, ServletException, SQLException, IOException等。 + c. Checked异常必须被显式地捕获或者传递, 需要try catch处理或throws声明抛出异常。 + ## Todo: transient, volatile关键字, Fail-fast From 66f184b1e23985a05363aef0046b9e7acbc5f0fa Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sun, 15 Apr 2018 18:10:00 -0500 Subject: [PATCH 0492/2496] =?UTF-8?q?Update=20=E5=BC=80=E5=8F=91=E5=B2=97?= =?UTF-8?q?=E4=BD=8D(Java)=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...7\344\275\215(Java)\346\200\273\347\273\223.md" | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git "a/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" "b/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" index f61da329e..055275ad2 100644 --- "a/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" +++ "b/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" @@ -214,14 +214,16 @@ Error类和Exception类的父类都是throwable类,他们的区别是: ## 21. Unchecked Exception 和 Checked Exception,各列举几个 1. Unchecked Exception: - a. 指的是程序的瑕疵或逻辑错误,并且在运行时无法恢复。 - b. Unchecked异常继承自java.lang.RuntimeException类, 包括Error与RuntimeException及其子类,如:OutOfMemoryError, UndeclaredThrowableException, IllegalArgumentException, IllegalMonitorStateException, NullPointerException, IllegalStateException, IndexOutOfBoundsException等。 - c. unchecked异常则可以不必捕获或抛出, 语法上不需要声明抛出异常。 + + - 指的是程序的瑕疵或逻辑错误,并且在运行时无法恢复。 + - Unchecked异常继承自java.lang.RuntimeException类, 包括Error与RuntimeException及其子类,如:OutOfMemoryError, UndeclaredThrowableException, IllegalArgumentException, IllegalMonitorStateException, NullPointerException, IllegalStateException, IndexOutOfBoundsException等。 + - unchecked异常则可以不必捕获或抛出, 语法上不需要声明抛出异常。 2. Checked Exception: - a. 代表程序不能直接控制的无效外界情况(如用户输入,数据库问题,网络异常,文件丢失等) - b. Checked异常继承java.lang.Exception类, 除了Error和RuntimeException及其子类之外,如:ClassNotFoundException, NamingException, ServletException, SQLException, IOException等。 - c. Checked异常必须被显式地捕获或者传递, 需要try catch处理或throws声明抛出异常。 + + - 代表程序不能直接控制的无效外界情况(如用户输入,数据库问题,网络异常,文件丢失等) + - Checked异常继承java.lang.Exception类, 除了Error和RuntimeException及其子类之外,如:ClassNotFoundException, NamingException, ServletException, SQLException, IOException等。 + - Checked异常必须被显式地捕获或者传递, 需要try catch处理或throws声明抛出异常。 From dab681cf63de4003155057f12771fc42aa20e22f Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Sun, 15 Apr 2018 18:10:45 -0500 Subject: [PATCH 0493/2496] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3fd6e5de1..452290fe7 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ ## 2. [面试问答](/docs/interview/) +* [面试总结](https://github.com/apachecn/LeetCode/blob/master/docs/interview/%E5%BC%80%E5%8F%91%E5%B2%97%E4%BD%8D(Java)%E6%80%BB%E7%BB%93.md) * [Google 面试题](/docs/interview/Google/Google.md) * [pocketgems 面试题](/docs/interview/pocketgems/pocketgems.md) * [WePay 面试题](/docs/interview/WePay/WePay.md) From 95939d2c4b65a03b6efa10b5e7b29d29950d7be2 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Mon, 16 Apr 2018 20:14:21 -0500 Subject: [PATCH 0494/2496] =?UTF-8?q?Update=20=E5=BC=80=E5=8F=91=E5=B2=97?= =?UTF-8?q?=E4=BD=8D(Java)=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git "a/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" "b/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" index 055275ad2..8606e20f5 100644 --- "a/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" +++ "b/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" @@ -225,7 +225,9 @@ Error类和Exception类的父类都是throwable类,他们的区别是: - Checked异常继承java.lang.Exception类, 除了Error和RuntimeException及其子类之外,如:ClassNotFoundException, NamingException, ServletException, SQLException, IOException等。 - Checked异常必须被显式地捕获或者传递, 需要try catch处理或throws声明抛出异常。 - +## 22. Java中如何实现代理机制(JDK、CGLIB) +- JDK动态代理:代理类和目标类实现了共同的接口,用到InvocationHandler接口。 +- CGLIB动态代理:代理类是目标类的子类,用到MethodInterceptor接口。 ## Todo: transient, volatile关键字, Fail-fast https://www.cnblogs.com/dolphin0520/p/3920373.html From 9bfa71a7f770142bac8c3c1db9ebe234418f1005 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 18 Apr 2018 15:24:50 -0500 Subject: [PATCH 0495/2496] =?UTF-8?q?Update=20=E5=BC=80=E5=8F=91=E5=B2=97?= =?UTF-8?q?=E4=BD=8D(Java)=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...1\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" | 3 +++ 1 file changed, 3 insertions(+) diff --git "a/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" "b/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" index 8606e20f5..32c443af2 100644 --- "a/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" +++ "b/docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" @@ -229,6 +229,9 @@ Error类和Exception类的父类都是throwable类,他们的区别是: - JDK动态代理:代理类和目标类实现了共同的接口,用到InvocationHandler接口。 - CGLIB动态代理:代理类是目标类的子类,用到MethodInterceptor接口。 +## 23. 多线程的实现方式 +继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。 + ## Todo: transient, volatile关键字, Fail-fast https://www.cnblogs.com/dolphin0520/p/3920373.html From 9e206ec1e02a7aff6b6da451b5093cc918f85a35 Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 18 Apr 2018 18:31:09 -0500 Subject: [PATCH 0496/2496] change name of interview --- .../paipaidai.md" => docs/Interview/PPd/ppd.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename "docs/interview/\346\213\215\346\213\215\350\264\267/paipaidai.md" => docs/Interview/PPd/ppd.md (100%) diff --git "a/docs/interview/\346\213\215\346\213\215\350\264\267/paipaidai.md" b/docs/Interview/PPd/ppd.md similarity index 100% rename from "docs/interview/\346\213\215\346\213\215\350\264\267/paipaidai.md" rename to docs/Interview/PPd/ppd.md From 19d64b1f3a471a7b301526c41e75eb69087d999a Mon Sep 17 00:00:00 2001 From: Keqi Huang Date: Wed, 18 Apr 2018 18:36:05 -0500 Subject: [PATCH 0497/2496] . --- docs/Interview/PPd/ppd.md | 91 ------- docs/interview/Google/Google.md | 59 ----- docs/interview/WePay/WePay.jpg | Bin 492900 -> 0 bytes docs/interview/WePay/WePay.md | 34 --- docs/interview/WePay/power_number.md | 36 --- docs/interview/pocketgems/pocketgems.md | 121 --------- ...\275\215(Java)\346\200\273\347\273\223.md" | 246 ------------------ 7 files changed, 587 deletions(-) delete mode 100644 docs/Interview/PPd/ppd.md delete mode 100644 docs/interview/Google/Google.md delete mode 100644 docs/interview/WePay/WePay.jpg delete mode 100644 docs/interview/WePay/WePay.md delete mode 100644 docs/interview/WePay/power_number.md delete mode 100644 docs/interview/pocketgems/pocketgems.md delete mode 100644 "docs/interview/\345\274\200\345\217\221\345\262\227\344\275\215(Java)\346\200\273\347\273\223.md" diff --git a/docs/Interview/PPd/ppd.md b/docs/Interview/PPd/ppd.md deleted file mode 100644 index 74b73713d..000000000 --- a/docs/Interview/PPd/ppd.md +++ /dev/null @@ -1,91 +0,0 @@ -# 第一轮(一个很nice的QA小姐姐) -### 1. 介绍自己及相关项目 - -### 2. 一道简单算法热身,2个排好序的数组,如何取出它们中相同的元素 -答:O(N),就是两个数组同时从```index = 0```开始比较,小的往前进一步,如果相同就加入到```res```中,这样```n```步肯定可以走完。所以是```O(N)``` - -### 3. 类是怎么加载的 -答:五大步骤:加载、验证、准备、解析、初始化,其中解析根据是静态绑定还是动态绑定, 略... -详见[类加载机制](https://blog.csdn.net/ns_code/article/details/17881581),当时在这里看到的,就记了一下 - -### 4. GC 的原理 -答:没引用的对象就是可以回收的了,不定时选择回收与否, 略... - -### 5. 栈和堆内存的区别 -答:略... - -### 6. 永生代是什么,为啥要有这个 -答:略... - -### 7. Spring如何实现AOP和IOC -答:略... - -### 8. 平常开发管理代码用什么方法,Git clone 还是 Git branch,解释一下它们的区别 -答:平常用Git branch,就是按照功能,bug修复开分支,不断merge, 略... - -### 9. 解释RESTful的好处 -答:根据方法不同判断api的功能,非常方便,略... - -### 10. 遇到的困难和如何解决的 -答:略... - -### 11. 你有什么问题要问我的 -答:内心。。没啥要问的哈哈哈😂,略... - - -# 第二轮(一个很严谨的后端开发小哥哥) -### 1. 45分钟做了一套java试题(20单选,2编程,2问答) -反馈:说我做得还可以 - -### 1. 介绍自己及相关项目 - -### 2. 简单解释下面向对象的基本概念:继承、封装和多态 -答: -- 继承就是说现在有一个类A,我们如果想要有更多的有着相同功能的类,那么只要继承最开始的这个类A,我们就可以拥有跟类A一样的功能,根据自己条件的不同还可以对A的方法进行重写或者重载 -- 封装使得内部功能和外部隔离开来,一来安全,二来可以更加具有模块化 -- 多态就是说,类似于Father f = new Son();这种,这种可以用于任何时候我们想应用更加specific功能的时候,此时多态就产生效果了。嗯,多态其实就是基于同一个接口,使用不同的实例就可以使用不同的功能 - -### 3. Java应用程序有没有可能内存泄露?具体场景。如果有一个Java应用程序在生产上发现有内存泄漏问题,作为开发人员你打算如何对其进行问题定位?现在就有这么一个程序,代码也给到你,你怎么弄?流程思路? -答:第一印象是使用测试工具,先进行模块化检测,我一般手动,注释掉一部分然后检查,采用二分法,一般可以定位到,然后仔细检查下代码逻辑,看看会不会有长期不用的对象仍然被引用着。我觉得工业上肯定会有很多高级工具可以检查内存,但是目前我还没有使用过 - -### 4. 简单讲讲哈希表的数据结构和算法(get/put操作)。 -答:略...小学生题目不会估计就GG了 - -### 5. 如果有一个100G的大文件(假定文件里头都是一行行的字符串记录、每个记录约100个字符),要求对这个文件进行排序,请给出你的排序算法。 -答:过程讨论持续15分钟,先后给出3种方法不断优化。 -- 我们可以先遍历所有行,根据每行的前3个字符作为键放到一个hash结构中,这样问题已经可以用O(N^2*lgn)解决了。被否决,有可能前三个字符都是一样的,需要对整个字符串进行排序 -- 或者我们可以先搞一个Trie树,然后遍历一遍全部存好,每一最后字符再多存一个数字表示这一字符串出现次数,然后对这个Trie树进行层次遍历,依次append,返回。回复说文件有100G大小,假设你手头电脑只有8g内存。嗯嗯,我可能会采用先把所有的文件分开很多份分别处理,关键在于最后怎么合并起来还是有序的 -- 其实就是外部排序,先将这个大文件分成很多份,把这些子文件依次读入内存,并利用自定义的有效的内部排序方法(也就是我的方法吧)对它们进行排序,再将排序后得到的有序子文件重新写入外存;可以使用多路归并排序。 - -### 6. 谈谈你对软件研发生命周期过程的理解,如何确保软件的质量。 -答:生命周期主要有问题定义,可行性分析,系统架构设计,编码实现,测试,验收,最后维护。至于确保软件的质量,就是要选用好的,合适的软件生命周期模型。 -大概模型有瀑布模型,螺旋模型,快速原型模型。 -- 需求明确,使用瀑布模型; -- 需求很不明确,快速原型模型; -- 项目不确定性太多使用螺旋模型 - -### 7. 你是如何管理自己的时间的?举一个你设定并达成目标的例子。 -答:略... - -### 8. 你如何理解领导力?举一个由你主动牵头推进的事情。 -答:略... - -### 9. 谈谈你的强项和弱项,基于对自己的认识,你打算如何规划你的职业道路? -答:略... - -### 10. 你有什么问题要问我的 -答:这次我准备了,哈哈哈哈😂,不告诉你们,略... - - -# 总结: -1. 两点最重要:1)开放学习成长的心态,2)积极主动 -2. 后端开发的话,一开始协助做好单元和性能测试,做样例sample,先学习,证明有足够能力后,开始自己独立设计和开发小型模块。最重要的内容是打好基本功,写好像模像样的单元测试,养成良好的工程习惯。 - - - - - - - - - diff --git a/docs/interview/Google/Google.md b/docs/interview/Google/Google.md deleted file mode 100644 index d14b8fae0..000000000 --- a/docs/interview/Google/Google.md +++ /dev/null @@ -1,59 +0,0 @@ -### 第一轮: -1. Talk about the work experience of you - - -2. 算法题:给一个number,例如21200, - - - -Idx: 0 1 2 3 4 -Number: 2 1 2 0 0 - -- 0th位置有个2,并且整个number里面有2个0; -- 1th有个1,所以整个number里面有一个1; -- 2th有个2,所以整个number里面有两个2; -- 3th有个0,所以整个number里面有0个3; -- 4th有个0,所以整个number里面有0个4 - -满足这个property的number是self_describing的 -叫你写一个函数 -def self_describing(self, number), return 这个number是不是满足self_describing,True or False - - - -3. 算法题,面试官自己工作中的,写了一串, -- 问你是```BFS```还是DFS, -- 问你是```recursive```还是iterative,recursive方法有什么limitation -- 不管结果,你给他的代码转换成```iterative``` or recursive - - - - -### 第二轮: -1. talk about the most challenging work that you have been worked on - - -2. HashTable 和 BST的比较,你知道什么说什么,时间复杂度,实现,插入,删除,查找 - -3. HashTable 和 BST 的concurrency对比 - - - -4. 算法题 - -首先,morse_code = { - 'a': '..', - 'b': '.-', - 'c': '...', - ‘d’: '-' - , - , - ......... - } -给你一串words, -- 例如['ab','cd'],这时候因为words里面的两个word的对应的morse_code是一样的,所以我们返回他们的morse_code,即['...-'] -- 再例如有很多words,有着相同morse_code的words很多,你要返回所有相同morse_code 的words所对应的那个morse_code,例如['...-', '..'] - - - - diff --git a/docs/interview/WePay/WePay.jpg b/docs/interview/WePay/WePay.jpg deleted file mode 100644 index 9f5eeadb506a3264da89a6f07240aac5d463eae5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 492900 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

    %l6IX6ug0wb@mdSBdKnQ{+CYVB2T`k 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�w~~A4?|M_*FRp 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

    IC!5d5@1%~7+z6U}9w0MC}0{6`fU0`yOp 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 z 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

y&B`PeXKeQE9zPYAF!+)Lg=x*9vJS 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 literal 0 HcmV?d00001 diff --git "a/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.md" "b/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.md" new file mode 100644 index 000000000..bf50419f3 --- /dev/null +++ "b/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.md" @@ -0,0 +1,227 @@ +### Python刷题技巧笔记 + +备份自己的帖子 + +有的时候 + + +**用Python解题经常可以作弊,Python 处理string非常方便, python内置模块非常多,比如排列组合啥的各种....** + + +有的时候 + + +**Python大法好,就是偶尔慢** + + + + +Python也是可以追求运行速度的,除了算法方面的提升,也有些常见函数之间的区别 + + +还有我刷的Python 2 和 3 已经迷茫了,如果有说错的地方敬请指出 + + + + +===========初级技巧================= + + + + +-  排序 + + +用lst.sort() 而不是nlst = sorted(lst) + + +区别在于lst.sort()是 in-place sort,改变lst, sorted会创建新list,成本比较高。 + + + + +- 用xrange  + + +xrangge 和 range的区别是在于 range会产生list存在memory中,xrange更像是生成器,generate on demand + + +所以有的时候xrange会更快 + + +-  三目运算符 + + +python 的三目运算符是这么写的 x if y else z + + +考虑这种list of list: matrix = [ [1,2,3] , [4,5,6] ] + + +row  = len(matrix) +col = len(matrix[0]) if row else 0  + + +这样写通用的原因是, 当matrix = [], row = 0, col =0 + + +- list 填 0 + + +lst = [0 for i in range(3)] # lst = [0,0,0] + + +lst  = [[0 for i in range(3)] for j in range(2)]  # lst =  [[0, 0, 0], [0, 0, 0]] + + + + +下面这种写法危险: + + +lst1 = [ 0, 0, 0 ] +lst2  = [lst1] * 2  # lst2 = [ [0,0,0] , [0,0,0] ] +lst2\[0]\[0] = 1  # lst2 = [ [1,0,0], [1,0,0]] + + +因为lst1是object,这样写会踩坑 + + + + +- D.get(key, default) + + +如果这个key 没有在dict里面,给它一个默认值: + + +D = {} +if 1 in D: +  val = D[1] +else : +  val = 0 + + +等同于这样写: + + +val = D.get(1, 0) + + + + +- reverse list + + +lst = [1,2,3] + + +print lst[::-1] #[3,2,1] + + +lst 也有reverse函数 + + +这也也适用于str, str可是没有reverse 函数的,str[::-1] 可用 √ + + + + +=================进阶一下===================== + + +Python 也是有自己的数据结构的!!!! + + +- deque +   还在用list来做queue么? deque,当求快queue的时候,你值得拥有 + + +- Counter +   Counter做啥就顾名思义了 + + +- yield +   用yield不用return ( 我也还在学习阶段 + + + + + + + + +import collections就可以用了,参见  [collections — High-performance container datatypes](https://docs.python.org/2/library/collections.html) + + + + + + +===============举个当时我就震惊了的例子=============== + + + + +看到在stackoverflow上看到有人求这样一个数据结构: + + +[Anyone know this Python data structure?](http://stackoverflow.com/questions/4098179/anyone-know-this-python-data-structure) + + + + + +Close to **O(1) performance** for as many of the following four operations. +Maintaining **sorted order while inserting** an object into the container. +Ability to **peek at last value** (the largest value) contained in the object. +Allowing for **pops on both sides** (getting the smallest or largest values). +Capability of **getting the total size** or number of objects being stored. +Being a **ready made solution** like the code in Python's standard library. + + + + + +然后真的可以implement出来 + +import collections +import bisect + +class FastTable: + +    def __init__(self): +        self.__deque = collections.deque() + +    def __len__(self): +        return len(self.__deque) + +    def head(self): +        return self.__deque.popleft() + +    def tail(self): +        return self.__deque.pop() + +    def peek(self): +        return self.__deque[-1] + +    def insert(self, obj): +        index = bisect.bisect_left(self.__deque, obj) +        self.__deque.rotate(-index) +        self.__deque.appendleft(obj) +        self.__deque.rotate(index) + +复制代码 +对此我只想表示牛,并且我硬生生的用它来解过人家不是要这种思路的题目。 + + + + +**补充内容 (2016-10-28 00:40):** +Python有built-inheap,是min heap.  heapq,如何来用它实现max heap呢,看到过一个有意思的方法是把key取负,比如把100变成-100,5变成-5。 + + + + + + diff --git a/Range Sum Query 2D - Immutable.pdf b/Range Sum Query 2D - Immutable.pdf new file mode 100644 index 0000000000000000000000000000000000000000..09410e209c3adc3ad41ebbdfdf0de177bb229e9e GIT binary patch literal 167781 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 z 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 literal 0 HcmV?d00001 diff --git a/Readme.md b/Readme.md new file mode 100644 index 000000000..859d89797 --- /dev/null +++ b/Readme.md @@ -0,0 +1,16 @@ +### LeetCode × Python × CLRS + + +Finally, going to take LeetCode, Python can make you focus on the ideas, while CLRS is really kind of tedious, so whenever you finished some reading, you just, just would feel so happy that you can do LeetCode. + + - 📚📖✏️📓 + - 🍔🍝🍛🍣 + - 😕😐😮😏 + - 🙌👎👍💪 + + + + + + + diff --git a/Recusrion & BackTracking.md b/Recusrion & BackTracking.md new file mode 100644 index 000000000..16e0f9279 --- /dev/null +++ b/Recusrion & BackTracking.md @@ -0,0 +1,237 @@ +#Recusrion & BackTracking + +##Recusrion + +### DrawFractal + +``` +void DrawFractal(double x, double y, double w, double h) +{ + DrawTriangel(x, y, w, h); + if(w < .2 || h < .2) return ; + double halfH = h/2; + double halfw = w/2; + DrawFractal(x, y, halfW, halfH); + DrawFractal(x + halfW/2, y + halfH, halfW, halfH); + DrawFractal(x + halfW, y, halfW, halfH); +} +``` + + +Sierpinski triangle更伪码的写法: + +``` +void DrawFractal (x, y, w, h){ + if (too small) return ; + DrawTriangle(x, y, w, h); + DrawFractal(.left); + DrawFractal(.top); + DrawFractal(.right); +} +``` + +实际上老师故意调了里面几句代码的顺序,让来看到虽然结果相同,但是画的过程是不一样的。 + +然后老师还在黑板上画了过程树,分枝是怎样的,实际上当学到DFS的preOrder, inOrder 和 postOrder的时候会更印象深刻。 + +一个分支走完之后再回去走另一些。 + + +### DrawMondrian + + + +``` +void DrawMondrian(double x, double y, double w, double h){ + + if(w < 1 || h < 1) return ;// base case + + FillRectangle(x,y,w,h,RandomColor()); // fill background + + switch(RandomInteger(0, 2)){ + case 0: // do nothing + break; + case 1: // bisect vertically + double midX = RandomReal(0,w); + DrawBlackLine( x + midX, y, h); + DrawMondrian(x, y, midX, h); + DrawMondrian(x + midx, y, w- midX, h); + break; + case 2: // bisect horizontally + double midY = RandomReal(0,h); + DrawBlackLine( x, y+ midY, h); + DrawMondrian(x, y, w, midY); + DrawMondrian(x, y+midY,w, midY); + break; + } +} +``` + + +### The tower of Hanoi + + +``` +void MoveTower(int n, char src, char dst, char tmp){ + if (n > 0){ + MoveTower(n - 1, src, tmp, dst ); + MoveSingleDisk(src, dst); + MoveTower(n -1, tmp, dst, src); + } +} + +``` + + +### Permutation + +老师说permutation 和 subset 是 mother problems of all recursion. + + +given a string, print out its all permutations + +思路如下: + +- 使用了的string sofar,以及还未使用的string rest +- 一开始rest就是给的string本身,然后sofar是空 +- 每次挑一个rest里面的char,然后递归的再把rest剩下的拿来permutation,这样每次都会有一个char从rest shuffle到sofar +- n 次之后 rest为空,制造了一个permutation + + +``` +void RecPermute(string sofar, string rest){ + if(rest = ""){ + cout << soFar << endl; + } else { + for(int i = 0 ; i < rest.length(); i++){ + string next = soFar + rest[i]; + string remaining = rest.substr(0,i) + rest.substr(i+1); + RecPermute(next, remaining); + } + } +} + + +// "wrapper" function +void ListPermutations(string s) +{ + RecPermute("",s); +} +``` + + +老师的黑板图真的是击中要害。 + +因为老师强调的是,也要用mind来trace它是如何操作的。 + + + +### Subsets + + +``` +void RecSubsets(string soFar, string rest) +{ + if(rest = "") + cout << soFar << endl; + else { + // add to subset, remove from rest, recur + RecSubsets(soFar + rest[0],rest.substr(1)); + //don't add to substr, remove from rest, recur + RecSubsets(soFar, rest.substr(1)); + } +} + + +void ListSubsets(string str) +{ + RecSubsets("",str); +} + +``` + +代码非常容易理解 + + +比较一下:两个都是有关选择,permutation是每次选哪一个char,而subsets是选择这个char 是否in. + +两个recursion tree都是有branching 和 depth的, depth都是n,每次选一个,知道n个选完. + +branching是how many recusive calls 每次made,subset每次都是两个,in/out,而permutation则是n,n-1.......grows very quickly. + +因为permutation是n!,subsets是2^n,跟树对应。这些都是比较intractable的问题,并不是因为recursion,而是问题本身的复杂度。 + + +这两个问题都是exhaustive的,然而,我们会更多碰到一些问题,有着 + +similar exhaustive structure,但是遇到'satisfactory' outcome就会stop的 -> 也就是backtracking了. + +##BackTracking + + + +### pseudocode + +把问题转成decision problem,然后开始make choice. + +``` +bool Solve(configuration conf) +{ + if (no more choices) // BASE CASE + return (conf is goal state); + + for (all available choices){ + try one choice c; + // sove from here, it works out. you're done. + if (Solve(conf with choice c made)) return true; + unmake choice c; + } + return false; //tried all choices, no soln found +} +``` + + +###IsAnagram + + +``` +bool IsAnagram(string soFar, string rest, Lexicon & lex) +{ + if(rest == ""){ + if(lex.contains(soFar)){ + cout << soFar << endl; + return true; + } + } else { + for(int i = 0; i < rest.length() ; i++ ){ + string next = soFar + rest[i]; + string remaining = rest.substr(0,i) + rest.substr(i+1); + if(IsAnagram(next, remaining, lex)) return true; + } + } + return false; +} +``` + + +### 8 Queens + + +``` + +bool Solve(Grid &board, int col) +{ + if(col > = board.numCols()) return true; + + for(int rowToTry = 0; rowToTry < board.numRows(); rowToTry++){ + if (IsSafe(board,rowToTry, col)){ + PlaceQueen(board,rowToTry,col); + if (Solve(board,col+1)) return true; + RemoveQueen(board,rowToTry, col); + } + } + return false; +} + +``` + diff --git "a/backtracking\346\200\235\350\267\257.md" "b/backtracking\346\200\235\350\267\257.md" new file mode 100644 index 000000000..27e61d352 --- /dev/null +++ "b/backtracking\346\200\235\350\267\257.md" @@ -0,0 +1,68 @@ +##以Generate Parentheses为例,backtrack的题到底该怎么去思考? + + +所谓Backtracking都是这样的思路:在当前局面下,你有若干种选择。那么尝试每一种选择。如果已经发现某种选择肯定不行(因为违反了某些限定条件),就返回;如果某种选择试到最后发现是正确解,就将其加入解集 + +所以你思考递归题时,只要明确三点就行:选择 (Options),限制 (Restraints),结束条件 (Termination)。即“ORT原则”(这个是我自己编的) + + + + +对于这道题,在任何时刻,你都有两种选择: +1. 加左括号。 +2. 加右括号。 + +同时有以下限制: +1. 如果左括号已经用完了,则不能再加左括号了。 +2. 如果已经出现的右括号和左括号一样多,则不能再加右括号了。因为那样的话新加入的右括号一定无法匹配。 + +结束条件是: +左右括号都已经用完。 + +结束后的正确性: +左右括号用完以后,一定是正确解。因为1. 左右括号一样多,2. 每个右括号都一定有与之配对的左括号。因此一旦结束就可以加入解集(有时也可能出现结束以后不一定是正确解的情况,这时要多一步判断)。 + +递归函数传入参数: +限制和结束条件中有“用完”和“一样多”字样,因此你需要知道左右括号的数目。 +当然你还需要知道当前局面sublist和解集res。 + +因此,把上面的思路拼起来就是代码: + + if (左右括号都已用完) { + 加入解集,返回 + } + //否则开始试各种选择 + if (还有左括号可以用) { + 加一个左括号,继续递归 + } + if (右括号小于左括号) { + 加一个右括号,继续递归 + } + + + +你帖的那段代码逻辑中加了一条限制:“3. 是否还有右括号剩余。如有才加右括号”。这是合理的。不过对于这道题,如果满足限制1、2时,3一定自动满足,所以可以不判断3。 + +这题其实是最好的backtracking初学练习之一,因为ORT三者都非常简单明显。你不妨按上述思路再梳理一遍,还有问题的话再说。 + + + +以上文字来自 1point3arces的牛人解答 + + + +Backtracking 伪码 + + +``` +Pick a starting point. +while(Problem is not solved) + For each path from the starting point. + check if selected path is safe, if yes select it + and make recursive call to rest of the problem + If recursive calls returns true, then return true. + else undo the current move and return false. + End For + If none of the move works out, return false, NO SOLUTON. + +``` \ No newline at end of file diff --git "a/delete_node_in_a_linked_list\351\227\256\351\242\230.md" "b/delete_node_in_a_linked_list\351\227\256\351\242\230.md" new file mode 100644 index 000000000..e148bb218 --- /dev/null +++ "b/delete_node_in_a_linked_list\351\227\256\351\242\230.md" @@ -0,0 +1,69 @@ +##Delete Node in a Linked List问题 + + +This is a LeetCode question, I knew its solution, but wondering about why my code not work. + + +>Write a function to delete a node (except the tail) in a singly linked list, given only access to that node. + +>Supposed the linked list is 1 -> 2 -> 3 -> 4 and you are given the third node with value 3, the linked list should become 1 -> 2 -> 4 after calling your function + + +At first glance, my intution is delete like an array: + +shift all the node values one front, then delete the tail, here's my implementation and test case: + + + + class ListNode(object): + def __init__(self, x): + self.val = x + self.next = None + + node1 = ListNode(1) + node2 = ListNode(2) + node3 = ListNode(3) + node4 = ListNode(4) + node5 = ListNode(5) + + node1.next = node2 + node2.next = node3 + node3.next = node4 + node4.next = node5 + + + + def deleteNode(node): + """ + :type node: ListNode + :rtype: void Do not return anything, modify node in-place instead. + """ + while node.next: + node.val = node.next.val + node = node.next + node = None + + + deleteNode(node4) + +But After deletion, it has two 5 value nodes, the tail was still kept, can anyone please explain to me what's wrong here? + + deleteNode(node4) + + node1.val + Out[162]: 1 + + node1.next.val + Out[163]: 2 + + node1.next.next.val + Out[164]: 3 + + node1.next.next.next.val + Out[165]: 5 + + node1.next.next.next.next.val + Out[166]: 5 + + +Really appreciate any help. \ No newline at end of file diff --git "a/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" "b/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" new file mode 100644 index 000000000..864326ec7 --- /dev/null +++ "b/local_search\357\274\214_\344\270\200\344\272\233\346\226\260\347\232\204\346\200\235\350\267\257.md" @@ -0,0 +1,14 @@ +# Local Search, 一些新的思路 + +当一个问题我们只关心解法,而不是其达到解的顺序,那么考虑使用local search,比如八皇后问题,我们只关心哪个皇后放哪,根本不关心加入皇后的顺序。 + +local search还能用来解一类问题,求最优。 + + + +> A complete local search algorithm always finds a goal if one exists; an optimal algorithm always finds a global minimum/maximum. + + +一个解八皇后的新思路是我们根本就random来放皇后,然后如果state 合法,就get解答一枚,否则可以Move only to neighboring states,当然,选之剑attack数量最少的state. + +这种方法叫 hill - climbing,很多问题,可能被卡,然后random restart \ No newline at end of file diff --git "a/python\347\232\204\345\220\204\347\247\215pass.md" "b/python\347\232\204\345\220\204\347\247\215pass.md" new file mode 100644 index 000000000..c1ac085a8 --- /dev/null +++ "b/python\347\232\204\345\220\204\347\247\215pass.md" @@ -0,0 +1,123 @@ +#Python的各种Pass + +感觉最近对于pass by reference 和 pass by value又有了一点/一些认识 + + +1. python不允许程序员选择采用传值还是传引用。Python参数传递采用的肯定是“传对象引用”的方式。实际上,这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值——相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象——相当于通过“传值'来传递对象。 +2. 当人们复制列表或字典时,就复制了对象列表的引用同,如果改变引用的值,则修改了原始的参数。 +3. 为了简化内存管理,Python通过引用计数机制实现自动垃圾回收功能,Python中的每个对象都有一个引用计数,用来计数该对象在不同场所分别被引用了多少次。每当引用一次Python对象,相应的引用计数就增1,每当消毁一次Python对象,则相应的引用就减1,只有当引用计数为零时,才真正从内存中删除Python对象。 + + +##### Linked List的例子 + + + +``` +class ListNode(object): + def __init__(self, x): + self.val = x + self.next = None + +node1 = ListNode(1) +node2 = ListNode(2) +node3 = ListNode(3) +node4 = ListNode(4) +node5 = ListNode(5) + +node1.next = node2 +node2.next = node3 +node3.next = node4 +node4.next = node5 + +``` + + + +来改变head + +``` +def testWithPointers1(head): + head.next = None +``` + + + +运行 testWithPointers1(node1) + +然后node1.next 为None了 + +// 可以理解,因为传进去的是head这个可变对象。 + + + +``` +def testWithPointers2(head): + cur = head + cur.next = None +``` + + + +运行 testWithPointers2(node1) +// node1.next 同样为None了 + +Python的object,list都是pass by reference,所以是改变的 + +看另外一个例子: + +``` +def printLinkedList(head): + while head: + print(head) + head = head.next +``` + + +输出 + +``` + printLinkedList(head) + +<__main__.ListNode object at 0x1044c0e10> + +1 + +<__main__.ListNode object at 0x1044c0fd0> + +2 + +<__main__.ListNode object at 0x1044c0c88> + +3 + +<__main__.ListNode object at 0x1044c0be0> + +4 + +<__main__.ListNode object at 0x1044c0780> + +5 + +head + +Out[39]: <__main__.ListNode at 0x1044c0e10> + +``` + +其实这里的head为什么没有改变有点疑惑 + + + +##### String看一下 + + + a = "abc" + + def changeA(s): + s = "" + changeA(a) + + +a 并不会改变,依旧为'abc' + + \ No newline at end of file diff --git "a/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" "b/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" new file mode 100644 index 000000000..7dccde3ec --- /dev/null +++ "b/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" @@ -0,0 +1,183 @@ +# Tree Search, Graph Search, DFS, BFS + + +其实原本是根本不知道还有tree search的,只知道graph search,原来graph search就是一般我看到的dfs,bfs,有一个结构来记录visited node,这样在寻找邻居的时候,防止已经visit的node再被visit. + + +### Tree Search + +general tree search pseudocode + + +``` +function TREE_SEARCH(problem, strategy) returns a solution, or failure + initialize the search tree using the initial state of problem + loop do + if there are no candidates for expansion then return failure + choose a leaf node for expansion according to strategy + if the node contains a goal state then return the corresponding solution + else expand the node and add the resulting nodes to the search tree + end +``` + + + + +### Graph Search + +very simple fix: never expand a state type twice + +``` +function GRAPH_SEARCH(problem, fringe) returns a solution, or failure + closed <- an empty set + fringe <- INSERT(MAKE-NODE(INITIAL-STATE[problem]),fringe) + loop do + if fringe is empty then return failure + node <- REMOVE-FRONT(fringe) + if GOAL-TEST(problem, STATE[node]) then return node + if STATE[node] is not in closed then + add STATE[node] to closed + fringe <- INSERTALL(EXPAND(node, problem)) + end + +``` + + +重要的点: + +- fringe +- strategy + +然后没有查重的过程 + +####DFS + +递归伪码 + +``` +1 procedure DFS(G,v): +2 label v as discovered +3 for all edges from v to w in G.adjacentEdges(v) do +4 if vertex w is not labeled as discovered then +5 recursively call DFS(G,w) +``` + +非递归伪码,其实递归在计算机内部就是用的stack,所以这里用stack可以解决问题 + +每次都expand deepest node + +``` +1 procedure DFS-iterative(G,v): +2 let S be a stack +3 S.push(v) +4 while S is not empty +5 v = S.pop() +6 for all edges from v to w in G.adjacentEdges(v) do +7 if w is not labeled as discovered: +8 label w as discovered +9 S.push(w) +``` + + +#### BFS + +伪码,这个伪码提供的信息有点多啊,把Unweighted shortest distance顺便也求出来了。 + +``` + 1 Breadth-First-Search(Graph, root): + 2 + 3 for each node n in Graph: + 4 n.distance = INFINITY + 5 n.parent = NIL + 6 + 7 create empty queue Q + 8 + 9 root.distance = 0 +10 Q.enqueue(root) +11 +12 while Q is not empty: +13 +14 current = Q.dequeue() +15 +16 for each node n that is adjacent to current: +17 if n.distance == INFINITY: +18 n.distance = current.distance + 1 +19 n.parent = current +20 Q.enqueue(n) +``` + +其实跟以上DFS的非递归写成一样也行 + +expand the shallowest node + + +``` +1 procedure BFS-iterative(G,v): +2 let Q be a queue +3 Q.enqueue(v) +4 while Q is not empty +5 v = Q.dequeue() +6 for all edges from v to w in G.adjacentEdges(v) do +7 if w is not labeled as discovered: +8 label w as discovered +9 Q.enqueue(w) +``` + +BFS和DFS其实就是每次选下一个expand的node用的strategy不同. + + +#### DFS/BFS with Path + +可以让stack/queue记录更多一些的东西,因为反正stack/queue更像通用结构 + +``` + A + / \ + C B + \ / \ + \ D E + \ / + F + + +graph = {'A': set(['B', 'C']), + 'B': set(['A', 'D', 'E']), + 'C': set(['A', 'F']), + 'D': set(['B']), + 'E': set(['B', 'F']), + 'F': set(['C', 'E'])} + + + + +def dfs_paths(graph, start, goal): + stack = [(start, [start])] + visited = set() + while stack: + (vertex, path) = stack.pop() + if vertex not in visited: + if vertex == goal: + return path + visited.add(vertex) + for neighbor in graph[vertex]: + stack.append((neighbor, path + [neighbor])) + +print (dfs_paths(graph, 'A', 'F')) #['A', 'B', 'E', 'F'] +``` + +一旦BFS/DFS与更具体的,更有特性的data structure结合起来,比如binary search tree,那么BFS/DFS会针对这个tree traversal显得更有特性。 + + +#### UCS + +expand the cheapest node first + +Fringe is a priority queue + +乃Dijkstra算法 + + +#### Greedy + +#### A* + diff --git "a/\344\275\215\350\277\220\347\256\227.md" "b/\344\275\215\350\277\220\347\256\227.md" new file mode 100644 index 000000000..aeaa44c4d --- /dev/null +++ "b/\344\275\215\350\277\220\347\256\227.md" @@ -0,0 +1,38 @@ +### 位运算 + +位运算包括: 加 减 乘 取反 and 异或 + +- 0110 + 0110 = 0110 * 2 ,也就是0110左移1位 + +- 0011 * 0100 0100 = 4, 一个数乘以 2^n 即是将这个数左移n + +- a ^(~a) = 0 + +- x & (~0 << n ) 这样来看,0取反全部为1,然后将其右移n位,后面的全是0,x & (~0 <>:右移 + + ​ + +Bit Facts and Tricks + +``` +x ^ 0s = x x & 0s = 0 x | 0s = x +x ^ 1s = ~x x & 1s = x x | 1s = 1s +x ^ x = 0 x & x = x x | x = x +``` + diff --git "a/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" "b/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" new file mode 100644 index 000000000..c371aba66 --- /dev/null +++ "b/\345\205\250\346\216\222\345\210\227\347\256\227\346\263\225.md" @@ -0,0 +1,194 @@ +###全排列算法 + + +#### 46. Permutations + + +Given a collection of distinct numbers, return all possible permutations. + +For example, +[1,2,3] have the following permutations: + + [ + [1,2,3], + [1,3,2], + [2,1,3], + [2,3,1], + [3,1,2], + [3,2,1] + ] + + +#####从空开始加 + +先跳离开这道题,来看类似的'ABC',我们要求它的全排列 + + +``` +def recPermute(sofar, rest): + if rest == '': + print sofar + else: + for i in range(len(rest)): + nxt = sofar + rest[i] + remaining = rest[:i] + rest[i+1:] + recPermute(nxt, remaining) + +// "wrapper" function +def listPermute(s): + recPermute('',s) +``` + +会正确输出`ABC ACB BAC BCA CAB CBA`,题目依靠的是每次我们从余下的字母中选一个,如果画图则会是这样: + + +``` + A B C + B C A C A B + C B C A B A +``` + +时间复杂度应该是O(n!) + +- n choose 1 +- n-1 choose 1 +- ... + + + +#####另一种市面上常见思路是交换: + +思路是这样的,同样看上面的图: + +- n个元素的全排列 = (n-1)个元素的全排列 + 另一个元素作为前缀 +- 如果只有一个元素,那么这个元素本身就是它的全排列 +- 不断将每个元素放作第一个元素,然后将这个元素作为前缀,并将其余元素继续全排列,等到出口,出口出去后还需要还原数组 + + +这个用数组来测试更容易写代码和直观: + + +``` +def recPermute(nums,begin): + n = len(nums) + if begin == n: + print nums, + + for i in range(begin,n): + nums[begin], nums[i] = nums[i],nums[begin] + recPermute(nums,begin+1) + nums[begin],nums[i] = nums[i],nums[begin] + +recPermute(['A','B','C'],0) + +``` + +这样的写法更容易理解: + + +``` +class Solution: + # @param num, a list of integer + # @return a list of lists of integers + def permute(self, num): + if len(num) == 0: return [] + if len(num) == 1: return [num] + res = [] + for i in range(len(num)): + x = num[i] + xs = num[:i] + num[i+1:] + for j in self.permute(xs): + res.append([x] + j) + return res +``` + +每次用一个没有用过的头元素,然后加上全排列产生的结果. + +如果分析复杂度,应该也是O(n!) + + +#### 47. Permutations II + + +最简单的想法: + +- 排序 +- 如果碰到重复的就继续处理下一个 + +``` +class Solution(object): + def permuteUnique(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + if len(nums) == 0: return [] + if len(nums) == 1: return [nums] + res = [] + nums.sort() + for i in range(len(nums)): + if i > 0 and nums[i] == nums[i-1]: continue + for j in self.permuteUnique(nums[:i] + nums[i+1:]): + res.append([nums[i]] + j) + return res + +``` + + + + +#### 31. Next Permutation + +实际上这个题目也就是Generation in lexicographic order, + +wikipedia 和 [这里](https://www.nayuki.io/page/next-lexicographical-permutation-algorithm) 有很好,很精妙的算法,也有点two pointer的意思 + + +``` +1. Find the highest index i such that s[i] < s[i+1]. If no such index exists, the permutation is the last permutation. +2. Find the highest index j > i such that s[j] > s[i]. Such a j must exist, since i+1 is such an index. +3. Swap s[i] with s[j]. +4. Reverse the order of all of the elements after index i till the last element. +``` + + +看例子: + +125430 + + +- 从末尾开始,找到decreasing subsequence,5430,因为来调5330无论怎么调,都不可能有比它更小的,数也被自然的分成两部分(1,2) 和 (5,4,3,0) +- 下一步是找这个sequence里面第一个比前面部分,比2大的,3,也很容易理解,因为下一个必定是(1,3)打头 +- 交换 3和2 ,变成 (1,3,5,4,2,0),再把后面的部分reverse,得到后面部分可得到的最小的 + +这个时候,得到下一个sequence 130245 + + + +``` +class Solution(object): + def nextPermutation(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + m, n = 0, 0 + for i in range(len(nums) - 2, 0 , -1): + if nums[i] < nums[i+1]: + m = i + break + + for i in range(len(nums) - 1, 0 , -1): + if nums[i] > nums[m]: + n = i + break + + if m < n : + nums[m], nums[n] = nums[n], nums[m] + nums[m+1:] = nums[len(nums):m:-1] + else: + nums = nums.reverse() +``` + + +所以可以用这个next permutation来解46/47也可以,然后我兴奋了一下,这个算法很快的!然后我又冷静了,因为permutation的个数是O(n!)个啊|||,所以也不可能有啥大的提升吧 \ No newline at end of file diff --git "a/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" "b/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" new file mode 100644 index 000000000..0d4afa96a --- /dev/null +++ "b/\345\255\220\351\233\206\345\220\210\351\227\256\351\242\230.md" @@ -0,0 +1,114 @@ +###子集合问题 + +####78. Subsets + +子集合是全排列的好朋友,也是combination组合的好朋友,排列·组合·子集,他们三个都是好朋友. + + +#####从空开始加 + +同样先来看'ABC' + +``` +def recsubsets(sofar, rest): + if rest == '': + print sofar, + else: + recsubsets(sofar, rest[1:]) + recsubsets(sofar + rest[0], rest[1:]) + +def listsubsets(s): + recsubsets('',s) + + +listsubsets('ABC') +``` + +##### 市面流行思路 + +市面上流行的思路: + +- [[],[1]] 是 [1] 的子集合 +- [[],[1],[2],[1,2]] 是 [1,2] 的子集合,实际上就是1的子集合们加了一个2 + + +所以用python写起来也很简单/精美 + +``` +def subsets(nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + results = [[]] + for num in nums: + results.extend([result + [num] for result in results]) + return results +``` +我在这里犯过错,所以这一句 + +`results.extend([result + [num] for result in results])` 实际上等于: + + +``` +tmp = [] +for result in results: + tmp.append(result + [num]) +results.extend(tmp) +``` + + + + + +#### 90. Subsets II + + +要去重了,比如如果有 [1,2,2],那么解答为: + + + [ + [2], + [1], + [1,2,2], + [2,2], + [1,2], + [] + ] + + +现在来观察规律,与之前有不同之处是我们需要一个位置来mark,因为不再需要往之前出现过的地方再加了,看这个: + + +``` +[[],[1]] 是 [1] 的子集合 +[[],[1],[2],[1,2]] 是 [1,2] 的子集合,实际上就是1的子集合们加了一个2 +新来的2不能再从头开始加了,它需要从[ .., [2],[1,2] ]加 才是合理的 +``` + +所以看到非常精妙的代码 + + +``` +def subsets(nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + nums.sort() + result = [[]] + temp_size = 0 + + for i in range(len(nums)): + start = temp_size if i >= 1 and nums[i] == nums[i-1] else 0 + temp_size = len(result) + #print start,temp_size,result + for j in range(start, temp_size): + result.append(result[j] + [nums[i]]) + print result + +subsets([1,2,2]) +``` + +这里这个start是来记录了之前一次数组的长度,temp_size记住目前数组的长度,然后用这个来达到去重的目的,非常聪明 + diff --git "a/\347\273\204\345\220\210\351\227\256\351\242\230.md" "b/\347\273\204\345\220\210\351\227\256\351\242\230.md" new file mode 100644 index 000000000..33f295e82 --- /dev/null +++ "b/\347\273\204\345\220\210\351\227\256\351\242\230.md" @@ -0,0 +1,84 @@ +### 组合问题 + + +#### 77.Combinations + + +##### 会超时的recursion + + + +``` +class Solution(object): + def combine(self, n, k): + """ + :type n: int + :type k: int + :rtype: List[List[int]] + """ + ans = [] + self.dfs(n, k, 1, [], ans) + return ans + + def dfs(self, n, k ,start, lst, ans): + if k == 0 : + ans.append(lst) + return + for i in range(start, n+1): + self.dfs(n, k - 1, i + 1,lst +[i], ans) +``` + +理解方式 + +``` + + 1 2 3 + 12 13 14 23 24 34 +``` + +可以参照这里 + + + + + +##### 市面上流行解法 + +递归的思想: n选k + +- 如果 k==n ,则全选。 +- n > k 又可以分成两类: + - 选了n, 则在余下的n-1中选k-1 + - 没有选n, 则在余下的n-1中选k + +注意一下会有两个base case,因为k在不断减小和n在不断减小,所以写起来可以这样: + + +``` +def combine(n,k): + if k == 1: + return [[i+1] for i in range(n)] + if n == k: + return [range(1, k+1)] + # choose n , not choose n + return [r + [n] for r in combine(n-1,k-1)] + combine(n-1,k) + + +print combine(20,16) +``` + + +#### 39. Combination Sum + + +使用正常递归思路 + + +#### 40. Combination Sum II + +重复做跳过处理 + +#### 216. Combination Sum III + + +#### 377. Combination Sum IV diff --git "a/\351\200\222\345\275\222_recursion.md" "b/\351\200\222\345\275\222_recursion.md" new file mode 100644 index 000000000..413872965 --- /dev/null +++ "b/\351\200\222\345\275\222_recursion.md" @@ -0,0 +1,39 @@ +#递归 Recursion + +### 递归 + +递归绝对是一个非常重要的概念。比如安利? 不断的delegate,本来想要完成1000个人的销售,找10个人,每人完成100人的,这10个人每人再去找10个人,每人完成10人的销售,这样就完成了1000人的销售(不懂安利是否这样,拿来举例)。 + + +递归之所以重要,这里面存在的概念太多了,首先上面这个例子里面就有divide and conquer的意思,把task divide小,然后来解决它。 + + +同样有趣的例子 → 吃完一个bowl of chips: + +- for loop,知道多少薯片,然后从0开始吃到最后 +- while, while 碗里还有薯片,就吃 +- 递归,吃一片,然后继续吃剩下的 N - 1 片,直到碗里的薯片数量只剩下0片了 + + +典型的例子: + +- pow(x,n) +- isPalindrome +- TowerofHanoi +- binarySearch + + + +### 链表, 树, 图 + +链表(linked list) 是数据结构的基础,而链表本身就是具有递归特性的,看C++中对于linked list node的定义, next指向本身这样的结构,就是再这个node定义还未完成之时,我们已经指向自己。 + + +``` +struct node{ + int data; + node* next; +}; +``` + +binary tree定义就是靠递归来实现的。 From eb7d9bfeccf443b95ceab7734c8afd02380f4ec9 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 1 Oct 2017 07:25:26 -0500 Subject: [PATCH 0002/2496] add .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..5509140f2 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.DS_Store From 0d086a4c91771e0f2b9ed9e894517ac8fe42b479 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 1 Oct 2017 07:28:58 -0500 Subject: [PATCH 0003/2496] add .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 5509140f2..c288fcde3 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -*.DS_Store +# *.DS_Store From 9e6b59e0fa4946c4139d8090df948d3414dda2b9 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 1 Oct 2017 07:37:11 -0500 Subject: [PATCH 0004/2496] add .gitignore --- .DS_Store | Bin 6148 -> 28676 bytes .gitconfig | 7 +++++++ .gitignore | 1 - .gitignore_global | 25 +++++++++++++++++++++++++ 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 .gitconfig delete mode 100644 .gitignore create mode 100644 .gitignore_global diff --git a/.DS_Store b/.DS_Store index b9081167bec57b03803a6eb35b4bd974f4f5755a..e92deb31688ce3b5de2b93544199cc43d1557614 100644 GIT binary patch literal 28676 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 literal 6148 zcmeHK&1%~~5T141MkbW{5J--DDdgaSOiJBS0>VxXfgD0q+Cx(kDH63n)dpLRNgM~g zM)F2^f<8|B?T_6Sx6oWnTV`PP8_mwlqHo2nhKNLWl(dPOMC3s=)*2XoA$nfxg4CR6 z1t?679w|yFrRUUJh-Sy%$bjCvbvnSFrBq_qzVF`w9Z`s#Jfus^^f6QH=jtrZRg4_{ z!MuTPeKi8>0d?Z>@Z8n8kI(aLSo;1KQCq1$dc5j28eZdx_c83Naacy>XxNPgAIwvh zq_MN#DwWUeD1MivKsO8AGv0slji1R((zxl ze0epwp5EM=S0sTC-N;jiGq{8C$3$L)gCbYO zC*;iP&FU~R1Iz$3umlF&(c`TxVJ%*Q8DIwfEe7=YAfXxqhm}QhbYL(o0I&|X5!m|I zQ0GX8fy2roW+1|*0&S{rErzh^@JkmLIIJw%bP}%l5N>7RIuv16M}29+Ndy*oWCoal zpBd1-AEc@8|GnS$|0akBW`G&^KN%49-Eg;ycXM~^!dvRQRzgpqT6A1xah?LhT*Zjh dSMes)2>enTz`$W;5grKt2pAf8U Date: Sun, 1 Oct 2017 07:40:52 -0500 Subject: [PATCH 0005/2496] add .gitignore --- .DS_Store | Bin 28676 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index e92deb31688ce3b5de2b93544199cc43d1557614..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28676 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 From b9f34da35c3a7991366fa76a9bf3a1f3b3f614b8 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 1 Oct 2017 07:41:37 -0500 Subject: [PATCH 0006/2496] add .gitignore --- .gitconfig | 7 ------- .gitignore_global | 25 ------------------------- 2 files changed, 32 deletions(-) delete mode 100644 .gitconfig delete mode 100644 .gitignore_global diff --git a/.gitconfig b/.gitconfig deleted file mode 100644 index 2afdd8b4e..000000000 --- a/.gitconfig +++ /dev/null @@ -1,7 +0,0 @@ -[user] -name = Keqi Huang -email = keqih@smu.edu -[push] -default = matching -[core] -excludesfile =/Users/lisanaaa/Documents/GitHub/lc/.gitignore diff --git a/.gitignore_global b/.gitignore_global deleted file mode 100644 index 8040a71fb..000000000 --- a/.gitignore_global +++ /dev/null @@ -1,25 +0,0 @@ -# .gitignore_global -#################################### -######## OS generated files ######## -#################################### -.DS_Store -.DS_Store? -*.swp -._* -.Spotlight-V100 -.Trashes -Icon? -ehthumbs.db -Thumbs.db -#################################### -############# packages ############# -#################################### -*.7z -*.dmg -*.gz -*.iso -*.jar -*.rar -*.tar -*.zip - From 957cfa8c97bd45e892d92eaac724777026519197 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 12 Oct 2017 02:44:01 -0500 Subject: [PATCH 0007/2496] java change of types --- 001._two_sum.md | 62 ++-- ..._substring_without_repeating_characters.md | 81 +++-- 004._median_of_two_sorted_arrays.md | 308 +++++++++--------- 005._longest_palindromic_substring.md | 294 +++++++++-------- 007._Reverse_Integer.md | 60 ++++ 015._3sum.md | 174 +++++----- 038._Count_and_Say.md | 99 ++++++ ...mbing Stairs.md => 070. Climbing Stairs.md | 0 230._kth_smallest_element_in_a_bst.md | 62 ++-- 237._delete_node_in_a_linked_list.md | 70 ++-- 316._Remove_Duplicate_Letters.md | 46 +++ 319._Bulb_Switcher.md | 72 ++++ ..._Unique_Substrings_in_Wraparound_String.md | 42 +++ 647._Palindromic_Substrings.md | 64 ++++ 672._Bulb_Switcher_II.md | 70 ++++ 682._Baseball_Game.md | 37 +++ ...h \344\270\215\346\230\223\345\206\231.md" | 12 +- ...13\347\232\204\350\275\254\346\215\242.md" | 239 ++++++++++++++ "LinkedList\346\212\200\345\267\247.md" | 12 +- Readme.md | 6 +- 20 files changed, 1311 insertions(+), 499 deletions(-) create mode 100644 007._Reverse_Integer.md create mode 100644 038._Count_and_Say.md rename 70. Climbing Stairs.md => 070. Climbing Stairs.md (100%) create mode 100644 316._Remove_Duplicate_Letters.md create mode 100644 319._Bulb_Switcher.md create mode 100644 467._Unique_Substrings_in_Wraparound_String.md create mode 100644 647._Palindromic_Substrings.md create mode 100644 672._Bulb_Switcher_II.md create mode 100644 682._Baseball_Game.md create mode 100644 "Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" diff --git a/001._two_sum.md b/001._two_sum.md index ab93b9bdf..fdec21f60 100644 --- a/001._two_sum.md +++ b/001._two_sum.md @@ -1,30 +1,30 @@ -###1. Two Sum - -题目: - - - -难度: - -Easy - - -思路 - -可以用O(n^2) loop - -但是也可以牺牲空间换取时间,异常聪明的AC解法 - -``` - 2 7 11 15 - 不存在 存在之中 -lookup {2:0} [0,1] -``` - -一点字典有了这个 `target - 当前数字`,找到它的index和当前index一起返回。 - - -``` +###1. Two Sum + +题目: + + + +难度: + +Easy + + +思路 + +可以用O(n^2) loop + +但是也可以牺牲空间换取时间,异常聪明的AC解法 + +``` + 2 7 11 15 + 不存在 存在之中 +lookup {2:0} [0,1] +``` + +一但字典内有了这个 `target - 当前数字`,找到它的index和当前index一起返回。 + + +``` class Solution(object): def twoSum(self, nums, target): """ @@ -37,7 +37,7 @@ class Solution(object): if target - num in lookup: return [lookup[target - num],i] lookup[num] = i - return [] -``` - - + return [] +``` + + diff --git a/003._longest_substring_without_repeating_characters.md b/003._longest_substring_without_repeating_characters.md index 74e95c8ce..08ede7eaa 100644 --- a/003._longest_substring_without_repeating_characters.md +++ b/003._longest_substring_without_repeating_characters.md @@ -15,42 +15,71 @@ Medium 粗一看是dp,细一看是greedy +我们先从第一个字符开始,只要碰到已经出现过的字符我们就必须从之前出现该字符的index开始重新往后看。 - idx 0 1 2 3 4 5 6 7 - a b c a b c b b - rnd ↑ stop↑ - ↑ stop↑ - ↑ stop↑ +例如‘xyzxlkjh’,当看到第二个‘x’时我们就应该从y开始重新往后看了。 +那么怎么判断字符已经出现过了呢?我们使用一个hashmap,将每一个已经阅读过的字符作为键,而它的值就是它在原字符串中的index,如果我们现在的字符不在hashmap里面我们就把它加进hashmap中去,因此,只要目前的这个字符在该hashmap中的值大于等于了这一轮字符串的首字符,就说明它已经出现过了,我们就将首字符的index加1,即从后一位又重新开始读,然后比较目前的子串长度与之前的最大长度,取大者。 -因为其实只要每次记录下重复开始的位置,就可以解决问题。 +### 程序变量解释 +- l(字母L) 代表目前最大子串的长度 +- start 是这一轮未重复子串首字母的index +- maps 放置每一个字符的index,如果maps.get(s[i], -1)大于等于start的话,就说明字符重复了,此时就要重置 l(字母L) 和start的值了, -注意最后还有一个 n - start 和 l 来比较,这相当于是最后一个round +最后还要进行一次比较,因为最后一次没有比较,即 n - start 和 l (字母L) 的比较,这是最后一个round -如果当前重复的这个s[i]取值是限定大于start,就是在start之后再出现重复 -``` +```python +python class Solution(object): - def lengthOfLongestSubstring(self, s): - """ - :type s: str - :rtype: int - """ - n = len(s) - l = 0 - maps = {} - start = 0 - - for i in range(n): - if maps.get(s[i],-1) >= start: - l = max(i - start, l) - start = maps.get(s[i]) + 1 - print start - maps[s[i]] = i - return max(n - start, l) + def lengthOfLongestSubstring(self, s): + """ + :type s: str + :rtype: int + """ + l, start, n = 0, 0, len(s) + maps = {} + for i in range(n): + if maps.get(s[i], -1) >= start: + l = max(l, i - start) + start = maps.get(s[i]) + 1 + maps[s[i]] = i + return max(l, n - start) +``` + +```java +java +class Solution { + public int lengthOfLongestSubstring(String s) { + HashMap map = new HashMap(); + int l= 0; + int start = 0; + int n = s.length(); + for (int i = 0; i < n; i++){ + if(returnDef(map, s.charAt(i)) >= start){ + l = Math.max(l, i-start); + start = map.get(s.charAt(i)) + 1; + } + map.put(s.charAt(i), i); + } + return Math.max(n-start,l); + } + public int returnDef(HashMap map, Character c){ + if (map.get(c) == null){ + return -1; + } + return map.get(c); + } +} ``` + +Author: Keqi Huang + +If you like it, please spread your support + +![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) diff --git a/004._median_of_two_sorted_arrays.md b/004._median_of_two_sorted_arrays.md index 32f419e3a..8714c2abf 100644 --- a/004._median_of_two_sorted_arrays.md +++ b/004._median_of_two_sorted_arrays.md @@ -1,151 +1,157 @@ -###4. Median of Two Sorted Arrays - -题目: - - - -难度: - -Hard - - -一看到的时候,觉得跟CLRS书上的一道习题类似 -求X[1....n] Y[1....n] 的 median - -习题 9.3-8 - - -Let X[1..n] and Y [1..n] be two arrays, each containing n numbers already in sorted order. Give an O(lg n)-time algorithn to find the median of all 2n elements in arrays X and Y . - - -> The median can be obtained recursively as follows. Pick the median of the sorted array A. This is just O(1) time as median is the n/2th element in the sorted array. Now compare the median of A, call is a∗ with median of B, b∗. We have two cases. - - a∗ < b∗ : In this case, the elements in B[n/2 ···n] are also greater than a . So the median cannot lie in either A[1 · · · n/2 ] or B[n/2 · · · n]. So we can just throw these away and recursively - - a∗ > b∗ : In this case, we can still throw away B[1··· n/2] and also A[ n/ · · · n] and solve a smaller subproblem recursively. - In either case, our subproblem size reduces by a factor of half and we spend only constant time to compare the medians of A and B. So the recurrence relation would be T (n) = T (n/2) + O(1) which has a solution T (n) = O(log n). -divide and conquer - -- 如果X[n/2] == Y[n/2],则找到,return -- 如果X[n/2] < Y[n/2],找X[n/2+1….n]和Y[1,2…n/2]之间 -- 否则找X[1..n/2]和Y[n/2…n] - - - - -但是实际上不同,这里需要考虑的问题更多: - -- 两个数组长度不一样 -- 并不是只找一个median,如果median有两个,需要算平均 - -思路 - -把它转化成经典的findKth问题 - -参考: - - -首先转成求A和B数组中第k小的数的问题, 然后用k/2在A和B中分别找。 - - -比如k = 6, 分别看A和B中的第3个数, 已知 A1 < A2 < A3 < A4 < A5... 和 B1 < B2 < B3 < B4 < B5..., 如果A3 <= B3, 那么第6小的数肯定不会是A1, A2, A3, 因为最多有两个数小于A1, 三个数小于A2, 四个数小于A3。 关键点是从 k/2 开始来找。 - - - -B3至少大于5个数, 所以第6小的数有可能是B1 (A1 < A2 < A3 < A4 < A5 < B1), 有可能是B2 (A1 < A2 < A3 < B1 < A4 < B2), 有可能是B3 (A1 < A2 < A3 < B1 < B2 < B3)。那就可以排除掉A1, A2, A3, 转成求A4, A5, ... B1, B2, B3, ...这些数中第3小的数的问题, k就被减半了。每次都假设A的元素个数少, pa = min(k/2, lenA)的结果可能导致k == 1或A空, 这两种情况都是终止条件。 - - -发问,为什么要从k/2开始寻找,依旧k = 6, 我可以比较A1 和 B5的关系么,可以这样做,但是明显的问题出现在如果A1 > B5,那么这个第6小的数应该存在于B6和A1中。 - -如果A1 < B5,这个时间可能性就很多了,比如A1 < A2 < A3 < A4 < B1 < B2,各种可能,无法排除元素,所以还是要从k/2开始寻找。 - -这个跟习题算法的区别是每次扔的东西明显少一些,但是k也在不断变小。 - - -``` -class Solution(object): - def findMedianSortedArrays(self, nums1, nums2): - """ - :type nums1: List[int] - :type nums2: List[int] - :rtype: float - """ - n = len(nums1) + len(nums2) - if n % 2 == 1: - return self.findKth(nums1, nums2, n / 2 + 1) - else: - smaller = self.findKth(nums1, nums2, n / 2) - bigger = self.findKth(nums1, nums2, n / 2 + 1) - return (smaller + bigger) / 2.0 - - - def findKth(self, A, B, k): - if len(A) == 0: - return B[k-1] - if len(B) == 0: - return A[k-1] - if k == 1 : - return min(A[0],B[0]) - - - a = A[ k / 2 - 1 ] if len(A) >= k / 2 else None - b = B[ k / 2 - 1 ] if len(B) >= k / 2 else None - - if b is None or (a is not None and a < b): - return self.findKth(A[k/2:], B, k - k/2) - return self.findKth(A, B[k/2:],k - k/2) - -``` - -这个findKth的算法单独抽出来也是题目。 - -给定两个已经排序好的数组,求第k大的,算法有O(m+n).类似merge sort的原理。否则利用的就是之上提到的,利用已经有序的原理,然后每次丢。 - -之所以这里还有一个丢弃条件是b is None 丢A的一部分,是因为B的数组长度是有限的,这个时候很明显丢A的k/2是不影响的,因为无论B[-1]是如何大或者小,因为整个B的长度没有达到k/2,所以丢掉的这部分最大的A[k/2-1]也不可能是第k个,因为即使整个B都比A[k/2-1],拼起来也不能使A[k/2-1]第k大,所以可以放心丢弃。 - - -这里是两个sorted list/array findKth,想到了类似的题目,如果给一个n个linked list,findKth,能想到的办法也只能是用heap吧,类似merge k sorted lists. - - -再写一个O(m+n)类似merge sort的也可以AC的代码 - -``` -class Solution(object): - def findMedianSortedArrays(self, nums1, nums2): - """ - :type nums1: List[int] - :type nums2: List[int] - :rtype: float - """ - def findKth(A, pa, B, pb, k): - res = 0 - m = 0 - while pa < len(A) and pb < len(B) and m < k: - if A[pa] < B[pb]: - res = A[pa] - m += 1 - pa += 1 - else: - res = B[pb] - m += 1 - pb += 1 - - while pa < len(A) and m < k: - res = A[pa] - pa += 1 - m += 1 - - - while pb < len(B) and m < k: - res = B[pb] - pb += 1 - m += 1 - return res - - n = len(nums1) + len(nums2) - if n % 2 == 1: - return findKth(nums1,0, nums2,0, n / 2 + 1) - else: - smaller = findKth(nums1,0, nums2,0, n / 2) - bigger = findKth(nums1,0, nums2,0, n / 2 + 1) - return (smaller + bigger) / 2.0 - -``` \ No newline at end of file +###4. Median of Two Sorted Arrays + +题目: + + + +难度: + +Hard + + +一看到的时候,觉得跟CLRS书上的一道习题类似 +求X[1....n] Y[1....n] 的 median + +习题 9.3-8 + + +Let X[1..n] and Y [1..n] be two arrays, each containing n numbers already in sorted order. Give an O(lg n)-time algorithn to find the median of all 2n elements in arrays X and Y . + + +> The median can be obtained recursively as follows. Pick the median of the sorted array A. This is just O(1) time as median is the n/2th element in the sorted array. Now compare the median of A, call is a∗ with median of B, b∗. We have two cases. + +- a∗ < b∗ : In this case, the elements in B[n/2 ···n] are also greater than a . So the median cannot lie in either A[1 · · · n/2 ] or B[n/2 · · · n]. So we can just throw these away and recursively + +- a∗ > b∗ : In this case, we can still throw away B[1··· n/2] and also A[ n/ · · · n] and solve a smaller subproblem recursively. + + +In either case, our subproblem size reduces by a factor of half and we spend only constant time to compare the medians of A and B. So the recurrence relation would be T (n) = T (n/2) + O(1) which has a solution T (n) = O(log n). + + +divide and conquer + +- 如果X[n/2] == Y[n/2],则找到,return +- 如果X[n/2] < Y[n/2],找X[n/2+1….n]和Y[1,2…n/2]之间 +- 否则找X[1..n/2]和Y[n/2…n] + + + + +但是实际上不同,这里需要考虑的问题更多: + +- 两个数组长度不一样 +- 并不是只找一个median,如果median有两个,需要算平均 + +思路 + +把它转化成经典的findKth问题 + +参考: + + +首先转成求A和B数组中第k小的数的问题, 然后用k/2在A和B中分别找。 + + +比如k = 6, 分别看A和B中的第3个数, 已知 A1 < A2 < A3 < A4 < A5... 和 B1 < B2 < B3 < B4 < B5..., 如果A3 <= B3, 那么第6小的数肯定不会是A1, A2, A3, 因为最多有两个数小于A1, 三个数小于A2, 四个数小于A3。 关键点是从 k/2 开始来找。 + + + +B3至少大于5个数, 所以第6小的数有可能是B1 (A1 < A2 < A3 < A4 < A5 < B1), 有可能是B2 (A1 < A2 < A3 < B1 < A4 < B2), 有可能是B3 (A1 < A2 < A3 < B1 < B2 < B3)。那就可以排除掉A1, A2, A3, 转成求A4, A5, ... B1, B2, B3, ...这些数中第3小的数的问题, k就被减半了。每次都假设A的元素个数少, pa = min(k/2, lenA)的结果可能导致k == 1或A空, 这两种情况都是终止条件。 + + +发问,为什么要从k/2开始寻找,依旧k = 6, 我可以比较A1 和 B5的关系么,可以这样做,但是明显的问题出现在如果A1 > B5,那么这个第6小的数应该存在于B6和A1中。 + +如果A1 < B5,这个时间可能性就很多了,比如A1 < A2 < A3 < A4 < B1 < B2,各种可能,无法排除元素,所以还是要从k/2开始寻找。 + +这个跟习题算法的区别是每次扔的东西明显少一些,但是k也在不断变小。下面的代码的时间复杂度是O(lg(m+n)) + + +```python +class Solution(object): + def findMedianSortedArrays(self, nums1, nums2): + """ + :type nums1: List[int] + :type nums2: List[int] + :rtype: float + """ + n = len(nums1) + len(nums2) + if n % 2 == 1: + return self.findKth(nums1, nums2, n / 2 + 1) + else: + smaller = self.findKth(nums1, nums2, n / 2) + bigger = self.findKth(nums1, nums2, n / 2 + 1) + return (smaller + bigger) / 2.0 + + + def findKth(self, A, B, k): + if len(A) == 0: + return B[k-1] + if len(B) == 0: + return A[k-1] + if k == 1 : + return min(A[0],B[0]) + + + a = A[ k / 2 - 1 ] if len(A) >= k / 2 else None + b = B[ k / 2 - 1 ] if len(B) >= k / 2 else None + + if b is None or (a is not None and a < b): + return self.findKth(A[k/2:], B, k - k/2) +   return self.findKth(A, B[k/2:],k - k/2) //这里要注意:因为 k/2 不一定 等于 (k - k/2) + +``` + +这个findKth的算法单独抽出来也是题目。 + +给定两个已经排序好的数组,求第k大的,算法有O(m+n).类似merge sort的原理。否则利用的就是之上提到的,利用已经有序的原理,然后每次丢。 + +之所以这里还有一个丢弃条件是b is None 丢A的一部分,是因为B的数组长度是有限的,这个时候很明显丢A的k/2是不影响的,因为无论B[-1]是如何大或者小,因为整个B的长度没有达到k/2,所以丢掉的这部分最大的A[k/2-1]也不可能是第k个,因为即使整个B都比A[k/2-1],拼起来也不能使A[k/2-1]第k大,所以可以放心丢弃。 + + +这里是两个sorted list/array findKth,想到了类似的题目,如果给一个n个linked list,findKth,能想到的办法也只能是用heap吧,类似merge k sorted lists. + + +再写一个O(m+n)类似merge sort的也可以AC的代码 + +```python +class Solution(object): + def findMedianSortedArrays(self, nums1, nums2): + """ + :type nums1: List[int] + :type nums2: List[int] + :rtype: float + """ + def findKth(A, pa, B, pb, k): + res = 0 + m = 0 + while pa < len(A) and pb < len(B) and m < k: + if A[pa] < B[pb]: + res = A[pa] + m += 1 + pa += 1 + else: + res = B[pb] + m += 1 + pb += 1 + + while pa < len(A) and m < k: + res = A[pa] + pa += 1 + m += 1 + + + while pb < len(B) and m < k: + res = B[pb] + pb += 1 + m += 1 + return res + + n = len(nums1) + len(nums2) + if n % 2 == 1: + return findKth(nums1,0, nums2,0, n / 2 + 1) + else: + smaller = findKth(nums1,0, nums2,0, n / 2) + bigger = findKth(nums1,0, nums2,0, n / 2 + 1) + return (smaller + bigger) / 2.0 + +``` diff --git a/005._longest_palindromic_substring.md b/005._longest_palindromic_substring.md index b09aad051..da5949b7c 100644 --- a/005._longest_palindromic_substring.md +++ b/005._longest_palindromic_substring.md @@ -1,9 +1,8 @@ -###5. Longest Palindromic Substring - +5. Longest Palindromic Substring 题目: - +https://leetcode.com/problems/longest-palindromic-substring/ 难度: @@ -15,11 +14,12 @@ Medium 暴力解法绝对不行 - 思路1: 所以一个好的想法是 s 和 reverse(s) 共有的最长的 substring就是longest palindromic substring -> 问题转成求Longest common substring problem -参见[wikipedia](https://en.wikipedia.org/wiki/Longest_common_substring_problem) + +参见wikipedia + ,典型动归 LCSuff(S1...p, T1...q) = LCS(S1...p1, T1...q-1) if S[p] = T[q] else 0 @@ -28,58 +28,50 @@ LCSuff(S1...p, T1...q) = LCS(S1...p1, T1...q-1) if S[p] = T[q] else 0 伪码也有了,代码也有: - - +https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Longest_common_substring#Python_2 这样也超时? - -``` -class Solution(object): - def longestPalindrome(self, s): - """ - :type s: str - :rtype: str - """ - def lcs(s1, s2): - m = [[0] * (1 + len(s2)) for i in xrange(1 + len(s1))] - longest, x_longest = 0, 0 - for x in xrange(1, 1 + len(s1)): - for y in xrange(1, 1 + len(s2)): - if s1[x - 1] == s2[y - 1]: - m[x][y] = m[x - 1][y - 1] + 1 - if m[x][y] > longest: - longest = m[x][y] - x_longest = x - else: - m[x][y] = 0 - return s1[x_longest - longest: x_longest] - - return lcs(s, s[::-1]) -``` + class Solution(object): + def longestPalindrome(self, s): + """ + :type s: str + :rtype: str + """ + def lcs(s1, s2): + m = [[0] * (1 + len(s2)) for i in xrange(1 + len(s1))] + longest, x_longest = 0, 0 + for x in xrange(1, 1 + len(s1)): + for y in xrange(1, 1 + len(s2)): + if s1[x - 1] == s2[y - 1]: + m[x][y] = m[x - 1][y - 1] + 1 + if m[x][y] > longest: + longest = m[x][y] + x_longest = x + else: + m[x][y] = 0 + return s1[x_longest - longest: x_longest] + + return lcs(s, s[::-1]) 因为以为这样s[::-1]已经很快了. +这个方法是buggy的,看字符串abcxgcba,它reverse之后是abcgxcba,它们有公共字符串,但是这里面没有回文,修复方式是: -这个方法是buggy的,看字符串`abcxgcba`,它reverse之后是`abcgxcba`,它们有公共字符串,但是这里面没有回文,修复方式是: - -> we check if the substring’s indices are the same as the reversed substring’s original indices. If it is, then we attempt to update the longest palindrome found so far; if not, we skip this and find the next candidate. +we check if the substring’s indices are the same as the reversed substring’s original indices. If it is, then we attempt to update the longest palindrome found so far; if not, we skip this and find the next candidate. 我觉得的修复方式这样么: -``` -原本 翻转 -ABXYBA ABYXBA - -求出来的substring indices是 0:2 但是这个s1[0:2] 和 s2[0:2]一样,所以不行 -同理common substring indices还是s[4:6] 和s2[4:6]一样,不行 - -而比如ABAD和 DABA - -substring indice 一个是0:3, 一个是1:4,这样就没问题 - - -``` + 原本 翻转 + ABXYBA ABYXBA + + 求出来的substring indices是 0:2 但是这个s1[0:2] 和 s2[0:2]一样,所以不行 + 同理common substring indices还是s[4:6] 和s2[4:6]一样,不行 + + 而比如ABAD和 DABA + + substring indice 一个是0:3, 一个是1:4,这样就没问题 + @@ -87,107 +79,137 @@ substring indice 一个是0:3, 一个是1:4,这样就没问题 -> 依次把每一个字符当做回文字符串的中间字符,找到以该字符为中间字符的回文串的最大长度。分别对奇偶的情况进行讨论,接下来的关键就是对边界的把握,确保下标不要越界。当子串已经包含首字符或最后一个字符且此时还是回文串的时候,下标分别会向两边多移一位,需要补回来。 - -参考 +依次把每一个字符当做回文字符串的中间字符,找到以该字符为中间字符的回文串的最大长度。分别对奇偶的情况进行讨论,接下来的关键就是对边界的把握,确保下标不要越界。当子串已经包含首字符或最后一个字符且此时还是回文串的时候,下标分别会向两边多移一位,需要补回来。 + +参考https://shenjie1993.gitbooks.io/leetcode-python/content/005%20Longest%20Palindromic%20Substring.html + + class Solution(object): + def longestPalindrome(self, s): + """ + :type s: str + :rtype: str + """ + n = len(s) + + # empty or one char + if n < 2: + return s + + # left index of the target substring + l = 0 + # right index of the target substring + r = 0 + # length of the longest palindromic substring for now + m = 0 + # length of the current substring + c = 0 + + # Whether the substring contains the first character or last character and is palindromic + b = True + for i in range(n): + # Odd situation + for j in range(min(n-i,i+1)): + if s[i-j] != s [i+j]: + b = False + break + else: + c = 2 * j + 1 + + if c > m : + l = i - j + 1 - b + r = i + j + b + m = c + b = True + + # Even situation + for j in range(min(n - i - 1, i + 1)): + if (s[i - j] != s[i + j + 1]): + b = False + break + else: + c = 2 * j + 2 + if (c > m): + l = i - j + 1 - b + r = i + j + 1 + b + m = c + b = True + return s[l:r] +以上是参考版本,自己写的版本: -``` -class Solution(object): - def longestPalindrome(self, s): - """ - :type s: str - :rtype: str - """ - n = len(s) - - # empty or one char - if n < 2: - return s - - # left index of the target substring - l = 0 - # right index of the target substring - r = 0 - # length of the longest palindromic substring for now - m = 0 - # length of the current substring - c = 0 - - # Whether the substring contains the first character or last character and is palindromic - b = True - for i in range(n): - # Odd situation - for j in range(min(n-i,i+1)): - if s[i-j] != s [i+j]: - b = False - break - else: - c = 2 * j + 1 - - if c > m : - l = i - j + 1 - b - r = i + j + b - m = c - b = True + class Solution(object): + def longestPalindrome(self, s): + """ + :type s: str + :rtype: str + """ + n = len(s) + + m,l,r = 0,0,0 + + for i in range(n): + # odd case + for j in range(min(i+1,n-i)): + if s[i-j] != s[i+j]: + break + if 2*j + 1 > m : + m = 2 * j + 1 + l = i-j + r = i+j + + + if i+1 < n and s[i] == s[i+1]: + for j in range(min(i+1,n-i-1)): + if s[i-j] != s[i+j+1]: + break + if 2 * j + 2 > m : + m = 2*j +2 + l = i-j + r = i+j+1 + + + return s[l:r+1] - # Even situation - for j in range(min(n - i - 1, i + 1)): - if (s[i - j] != s[i + j + 1]): - b = False - break - else: - c = 2 * j + 2 - if (c > m): - l = i - j + 1 - b - r = i + j + 1 + b - m = c - b = True - return s[l:r] -``` -以上是参考版本,自己写的版本: +思路3: -``` +[Manacher算法](https://www.felix021.com/blog/read.php?2040) +```python class Solution(object): def longestPalindrome(self, s): """ :type s: str :rtype: str """ - n = len(s) - - m,l,r = 0,0,0 - - for i in range(n): - # odd case - for j in range(min(i+1,n-i)): - if s[i-j] != s[i+j]: - break - if 2*j + 1 > m : - m = 2 * j + 1 - l = i-j - r = i+j - - - if i+1 < n and s[i] == s[i+1]: - for j in range(min(i+1,n-i-1)): - if s[i-j] != s[i+j+1]: - break - if 2 * j + 2 > m : - m = 2*j +2 - l = i-j - r = i+j+1 - - - return s[l:r+1] + def preProcess(s): + if not s: + return ['^', '$'] + T = ['^'] + for c in s: + T += ['#', c] + T += ['#', '$'] + return T + T = preProcess(s) + P = [0] * len(T) + id, mx = 0, 0 + for i in range(1,len(T) - 1): + j = 2*id - i + if mx > i: + P[i] = min(mx - i, P[j]) + else: + P[i] = 0 + while T[i+P[i]+1] == T[i-P[i]-1]: + P[i] += 1 + if (i + P[i]) > mx: + id, mx = i, i + P[i] + max_i = 0 + for i in range(1, len(T)-1): + if P[i] > P[max_i]: + max_i = i + start = (max_i - P[max_i] - 1) / 2 + return s[start : start + P[max_i]] ``` + - - -思路3: - -在查看wikipedia,有一个[Longest palindromic substring](https://en.wikipedia.org/wiki/Longest_palindromic_substring), 有一个Manacher算法,to be 学 - diff --git a/007._Reverse_Integer.md b/007._Reverse_Integer.md new file mode 100644 index 000000000..96060cc4f --- /dev/null +++ b/007._Reverse_Integer.md @@ -0,0 +1,60 @@ +###7. Reverse Integer + +题目: + + + +难度: + +Easy + + +思路 + +如果输入的是负数,就递归调用原函数,参数变成-x即可 +最后要处理overflow + + +```python +class Solution(object): + def reverse(self, x): + """ + :type x: int + :rtype: int + """ + if x < 0: + return -self.reverse(-x) + res = 0 + while x: + res = res * 10 + x % 10 + x /= 10 + return res if res <= 0x7fffffff else 0 +``` + +```python +class Solution(object): + def reverse2(self, x): + """ + :type x: int + :rtype: int + """ + if x < 0: + x = int(str(x)[::-1][-1] + str(x)[::-1][:-1]) + else: + x = int(str(x)[::-1]) + x = 0 if abs(x) > 0x7FFFFFFF else x + return x +``` +```python +class Solution(object): + def reverse3(self, x): + """ + :type x: int + :rtype: int + """ + s = cmp(x, 0) + r = int(`s * x`[::-1]) + return s * r * (r < 2 ** 31) +``` + + diff --git a/015._3sum.md b/015._3sum.md index c7ac15c01..7db404066 100644 --- a/015._3sum.md +++ b/015._3sum.md @@ -1,17 +1,17 @@ -###15. 3Sum - -题目: - - - -难度: - -Medium - - -第一想法,先把nums排序,用三个loop,无法AC - -``` +###15. 3Sum + +题目: + + + +难度: + +Medium + + +第一想法,先把nums排序,用三个loop,无法AC + +``` class Solution(object): def threeSum(self, nums): """ @@ -29,76 +29,76 @@ class Solution(object): if curRes not in res: res.append(curRes) - return res -``` - - -然后查了一下2sum,用2sum的花样,因为要排除重复以及输出是按照从小到大的输出: - - -``` -class Solution(object): - def threeSum(self, nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - def twoSum(nums, target): - """ - :type nums: List[int] - :type target: int - :rtype: List[int] - """ - lookup = {} - for num in nums: - if target - num in lookup: - if (-target ,target - num, num) not in res: - res.append((-target ,target - num, num)) - lookup[num] = target - num - - n = len(nums) - nums.sort() - res = [] - for i in range(n): - twoSum(nums[i+1:], 0-nums[i]) - return [list(i) for i in res] -``` - - -谷歌看别人的代码,思路非常清晰的,运行起来比直接调用 Two Sum快. - -清晰的思路: - -- 排序 -- 固定左边,如果左边重复,继续 -- 左右弄边界,去重,针对不同的左右边界情况处理 - - -``` -class Solution(object): - def threeSum(self, nums): - """ - :type nums: List[int] - :rtype: List[List[int]] - """ - n = len(nums) - nums.sort() - ans = [] - for i in range(n): - if i > 0 and nums[i] == nums[i-1] : continue - l, r = i+1, n -1 - while l < r: - temp = nums[i] + nums[l] + nums[r] - if temp == 0: - ans.append([nums[i],nums[l],nums[r]]) - l += 1 - r -= 1 - while l < r and nums[l] == nums[l-1]: l += 1 - while l < r and nums[r] == nums[r+1]: r -= 1 - elif temp > 0: - r -= 1 - else: - l += 1 - return ans -``` - + return res +``` + + +然后查了一下2sum,用2sum的花样,因为要排除重复以及输出是按照从小到大的输出: + + +``` +class Solution(object): + def threeSum(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + def twoSum(nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[int] + """ + lookup = {} + for num in nums: + if target - num in lookup: + if (-target ,target - num, num) not in res: + res.append((-target ,target - num, num)) + lookup[num] = target - num + + n = len(nums) + nums.sort() + res = [] + for i in range(n): + twoSum(nums[i+1:], 0-nums[i]) + return [list(i) for i in res] +``` + + +谷歌看别人的代码,思路非常清晰的,运行起来比直接调用 Two Sum快. + +清晰的思路: + +- 排序 +- 固定左边,如果左边重复,继续 +- 左右弄边界,去重,针对不同的左右边界情况处理 + + +```python +class Solution(object): + def threeSum(self, nums): + """ + :type nums: List[int] + :rtype: List[List[int]] + """ + n = len(nums) + nums.sort() + ans = [] + for i in range(n): +            if i > 0 and nums[i] == nums[i-1] : continue   #因为i=0这个元素会直接往下执行 +            l, r = i+1, n -1 + while l < r: + temp = nums[i] + nums[l] + nums[r] + if temp == 0: + ans.append([nums[i],nums[l],nums[r]]) + l += 1 + r -= 1 + while l < r and nums[l] == nums[l-1]: l += 1 + while l < r and nums[r] == nums[r+1]: r -= 1 + elif temp > 0: + r -= 1 + else: + l += 1 + return ans +``` + diff --git a/038._Count_and_Say.md b/038._Count_and_Say.md new file mode 100644 index 000000000..ac4542b5b --- /dev/null +++ b/038._Count_and_Say.md @@ -0,0 +1,99 @@ +###38. Count and Say + +题目: + + + +难度: + +Easy + + +思路 + + +1. i代表字符下标,从0开始取值,也就是从第一个字符开始,因为要让i取到最后一个字符,并且后面还要进行i+1的操作,所以将原字符串随意加上一个‘*’字符防止溢出 +2. sum代表此时已经连续相同的字符个数 +3. res代表最终输出的字符串 + +- 只要i下标对应的字符等于下一个字符,则sum和i都加1,无限循环 +- 如果i下标对应的字符不等于下一个字符了,则res应该加上str(sum)和i下标对应的那个字符,并且i加1,sum复原回0 + +``` +Examples of nth sequence + + 1. 1 + 2. 11 + 3. 21 + 4. 1211 + 5. 111221 + 6. 312211 + 7. 13112221 + 8. 1113213211 + 9. 31131211131221 + 10. 13211311123113112211 + +``` +```python +解法1 +class Solution(object): + def countAndSay(self, n): + """ + :type n: int + :rtype: str + """ + if n == 1: + return '1' + s = self.countAndSay(n-1) + '*' + res = '' + i, sum = 0, 1 + while i < len(s) - 1: + if s[i] == s[i+1]: + sum += 1 + else: + res += (str(sum) + s[i]) + sum = 1 + i += 1 + return res +``` +```python +解法2 +class Solution(object): + def countAndSay(self, n): + """ + :type n: int + :rtype: str + """ + res = '1' + for i in xrange(n-1): + res = ''.join([str(len(list(group))) + digit for digit, group in itertools.groupby(res)]) + return res +``` + +```java +解法3 +class Solution { + public String countAndSay(int n) { + if(n == 1){ + return "1"; + } + //递归调用,然后对字符串处理 + String str = countAndSay(n-1) + "*";//为了str末尾的标记,方便循环读数 + char[] c = str.toCharArray(); + int count = 1; + String s = ""; + for(int i = 0; i < c.length - 1;i++){ + if(c[i] == c[i+1]){ + count++;//计数增加 + }else{ + s = s + count + c[i];//上面的*标记这里方便统一处理 + count = 1;//初始化 + } + } + return s; + + } +} +``` + + diff --git a/70. Climbing Stairs.md b/070. Climbing Stairs.md similarity index 100% rename from 70. Climbing Stairs.md rename to 070. Climbing Stairs.md diff --git a/230._kth_smallest_element_in_a_bst.md b/230._kth_smallest_element_in_a_bst.md index 4068afd8a..c583cdca1 100644 --- a/230._kth_smallest_element_in_a_bst.md +++ b/230._kth_smallest_element_in_a_bst.md @@ -1,19 +1,19 @@ -###230. Kth Smallest Element in a BST - -题目: - - - -难度: -Medium - - -跟昨天做的一道题类似,一上来就走取巧之路。 - -InOrder排序,输出,当然也完全可以用昨天的binary tree iterator,入stack,出stack,知道输出第k位 - - -``` +###230. Kth Smallest Element in a BST + +题目: + + + +难度: +Medium + + +跟昨天做的一道题类似,一上来就走取巧之路。 + +InOrder排序,输出,当然也完全可以用昨天的binary tree iterator,入stack,出stack,直到输出第k位 + + +``` class Solution(object): def kthSmallest(self, root, k): """ @@ -31,18 +31,18 @@ class Solution(object): return self.inOrder(root.left) self.lst.append(root.val) - self.inOrder(root.right) -``` - - -现在看到kth 就条件反射的想用divide & conquer, 扫root的左子树看nodes量,如果nodes数量是k-1,那么node就刚好是第k个,如果大于k > 左子树数量,扫右子树,同时更新root为root.right。 - -看到的言论: - -> If we can change the BST node structure, We can add a new Integer to mark the number of element in the left sub-tree. - -when the node is not null. - -- if k == node.leftNum + 1, return node -- if k > node.leftNum + 1, make k -= node.leftNum + 1, and then node = node.right -- otherwise, node = node.left \ No newline at end of file + self.inOrder(root.right) +``` + + +现在看到kth 就条件反射的想用divide & conquer, 扫root的左子树看nodes量,如果nodes数量是k-1,那么node就刚好是第k个,如果大于k > 左子树数量,扫右子树,同时更新root为root.right。 + +看到的言论: + +> If we can change the BST node structure, We can add a new Integer to mark the number of element in the left sub-tree. + +when the node is not null. + +- if k == node.leftNum + 1, return node +- if k > node.leftNum + 1, make k -= node.leftNum + 1, and then node = node.right +- otherwise, node = node.left diff --git a/237._delete_node_in_a_linked_list.md b/237._delete_node_in_a_linked_list.md index 5e4a505ef..8c1ed5e28 100644 --- a/237._delete_node_in_a_linked_list.md +++ b/237._delete_node_in_a_linked_list.md @@ -1,26 +1,32 @@ -###237. Delete Node in a Linked List - -题目: - - - -难度: -Easy - - - -这道题,第一感觉,像删链表一样来删,把所有的node val前移一个,但是有个问题,为什么tail那个node还是存在?哼(ˉ(∞)ˉ)唧.. - -已经去提问,被解答: - - - - - -另外一个O(1)的办法更好,把后一个node的val移到待删这个节点,并且把node.next = node.next.next -很好理解,但是为嘛不对 - -``` +###237. Delete Node in a Linked List + +题目: + + + +难度: +Easy + + + +这道题,第一感觉,像删链表一样来删,把所有的node val前移一个,但是有个问题,为什么tail那个node还是存在?哼(ˉ(∞)ˉ)唧.. + +已经被解答: + + + + + +另外一个O(1)的办法更好,把后一个node的val移到待删这个节点,并且把node.next = node.next.next + +题目说了不会删最后一个点,所以node.next.next一定存在,所以直接让node的val等于它next的val,然后让node的next指向它的next的next,举个例子: + 1->2->3->4->5->None,要删除第四个节点,就让4变成5,然后让第四个节点指向第五个节点的next, +这样原来的第四个节点就不存在了,虽然原来的第五个节点仍然存在且指向None,变成了1->2->3->5->None-<5 + + + +```python +O(1)时间 class Solution(object): def deleteNode(self, node): """ @@ -28,5 +34,19 @@ class Solution(object): :rtype: void Do not return anything, modify node in-place instead. """ node.val = node.next.val - node.next = node.next.next -``` \ No newline at end of file + node.next = node.next.next +``` +```python +O(n)时间 +class Solution(object): + def deleteNode(self, node): + """ + :type node: ListNode + :rtype: void Do not return anything, modify node in-place instead. + """ + while node.next: + node.val = node.next.val + prev, node = node, node.next + # clear reference to tail + prev.next = None +``` diff --git a/316._Remove_Duplicate_Letters.md b/316._Remove_Duplicate_Letters.md new file mode 100644 index 000000000..ab7f8c6ff --- /dev/null +++ b/316._Remove_Duplicate_Letters.md @@ -0,0 +1,46 @@ +###316. Remove Duplicate Letters + +题目: + + + +难度: + +Hard + + +思路 + +这道题让我们移除重复字母,使得每个字符只能出现一次,而且结果要按最优的字母顺序排列,前提是不能打乱其原本的相对位置。 +- 先用remaining统计所有出现字母出现过的次数; +- res就是输出结果的字母顺序(list),最后用join连接起来作为返回值(str); +- 在stack(set)中的元素意味着其已经出现在最终结果中; + +对s中每个字母c,首先看它在stack中有没有出现过: +1. 如果没有那么只要res最后一个字母的ASCII值大于c,且其剩余次数大于0,就将其在res和stack中删去,不停做此操作 +2. 如果有了那么说明已经出现在最终结果中,只需要将其统计次数减去1以防后面挪动位置要做判断 + +做完这些后必须要把c加入到stack和res中去,代表c已经加入到最终结果中的目前应该处于的位置 + +``` +class Solution(object): + def removeDuplicateLetters(self, s): + """ + :type s: str + :rtype: str + """ + remaining = collections.defaultdict(int) + for c in s: + remaining[c] += 1 + stack, res = set(), [] + for c in s: + if c not in stack: + while res and res[-1] > c and remaining[res[-1]] > 0: + stack.remove(res.pop()) + stack.add(c) + res += c + remaining[c] -= 1 + return ''.join(res) +``` + + diff --git a/319._Bulb_Switcher.md b/319._Bulb_Switcher.md new file mode 100644 index 000000000..c39b68392 --- /dev/null +++ b/319._Bulb_Switcher.md @@ -0,0 +1,72 @@ +###319. Bulb Switcher + +题目: + + + +难度: + +Medium + + +思路 + +bulb代表第一轮结束后的所有灯亮灭的情况,从第二轮开始 +- 如果是最后一轮,则bulb的最后一个灯要switch +- 对于其他轮,相应的第i-1+C(i)个灯要siwitch,且C为常数,i-1+C(i)必须<=n-1 + +但是发现这样提交会超时 +Last executed input: +999999 + + +```python +class Solution(object): + def bulbSwitch(self, n): + """ + :type n: int + :rtype: int + """ + bulb = [1] * n + for i in range(2,n+1): + if i == n: + bulb[n-1] = 1 if bulb[n-1] == 0 else 0 + else: + for x in range(i-1, n, i): + bulb[x] = 1 if bulb[x] == 0 else 0 + return bulb.count(1) +``` + +原来,这是一道智商碾压题: + +> A bulb ends up on iff it is switched an odd number of times. +Bulb i is switched in round d iff d divides i. +So bulb i ends up on iff it has an odd number of >divisors. +Divisors come in pairs, like i=12 has divisors 1 and 12, 2 and 6, and 3 and 4. +Except if i is a >square, like 36 has divisors 1 and 36, 2 and 18, 3 and 12, 4 and 9, +and double divisor 6. So bulb >i ends up on iff and only if i is a square. So just count the square numbers. + +大概解释一下,当一个灯泡被执行偶数次switch操作时它是灭着的,当被执行奇数次switch操作时它是亮着的,那么这题就是要找出哪些编号的灯泡会被执行奇数次操作。 + +现在假如我们执行第i次操作,即从编号i开始对编号每次+i进行switch操作,对于这些灯来说, +如果其编号j(j=1,2,3,⋯,n)能够整除i,则编号j的灯需要执switch操作。 +具备这样性质的i是成对出现的,比如: +- 12 = 1 * 12, +- 12 = 2 * 6 +- 12 = 3 * 4 + +所以编号为12的灯,在第1次,第12次;第2次,第6次;第3次,第4次一定会被执行Switch操作,这样的话,编号为12的灯执行偶数次switch,肯定为灭。 +这样推出,完全平方数一定是亮着的,因为它有两个相同的因子,总因子数为奇数,如36 = 6 * 6,所以本题的关键在于找完全平方数的个数。 + +```python +class Solution(object): + def bulbSwitch(self, n): + """ + type n: int + rtype: int + """ + # The number of full squares. + return int(math.sqrt(n)) +``` + + diff --git a/467._Unique_Substrings_in_Wraparound_String.md b/467._Unique_Substrings_in_Wraparound_String.md new file mode 100644 index 000000000..a4d86d0ce --- /dev/null +++ b/467._Unique_Substrings_in_Wraparound_String.md @@ -0,0 +1,42 @@ +###467. Unique Substrings in Wraparound String + +题目: + + + +难度: + +Medium + + +思路 + +有个无限长的字符串s,是由无数个「abcdefghijklmnopqrstuvwxyz」组成的。现在给你一个字符串p,求多少个p的非空子串在s中出现了? +   + +先考虑s的特性,满足条件(在s中)的p的子串只可能是abcd……z的连续序列(z后面是a), 我们只需要处理p中连续的部分就可以了。但是 举个例子,h-k的序列出现了,a-z的序列也出现了,那么只需要计算a-z的子串个数就可以了,因为h-k已经包含在a-z里了。考虑所有包含的情况,似乎就变得复杂了,a-z还可能被包含在x-za-z中,甚至更长的序列中。 + +  但是如果考虑以某个字母结尾的子串个数,那么p中以该字母结尾的连续序列长度,就是满足条件的子串个数。如果以字母x结尾的连续序列有多个, 我们只需要最长的一个即可,因为其他短的序列都已经被长的包含进去了,例如'bcd'和'abcd',有了'abcd'就知道以d结尾的子串有4个,分别是‘d’,'cd','bcd','abcd',‘bcd’已经被包含进去了。最后求和,问题就解决了。 这样思考就非常简单了,代码也可以很容易写出来。 + + + +``` +class Solution(object): + def findSubstringInWraproundString(self, p): + """ + :type p: str + :rtype: int + """ +        letters = [0] * 26         #开始默认每个都是0 +        length = 0 + for i in xrange(len(p)): + curr = ord(p[i]) - ord('a') +            if i > 0 and ord(p[i-1]) != (curr-1)%26 + ord('a'):   #一旦开始不相等了就要将length重置为0 +                length = 0 +            length += 1     #否则就说明继续与前面一个字符是连续的,length要加1才行 +            if length > letters[curr]:     #length一直加,如果到i这个字符length比它的目前的最大连续子串长度还要长,那么肯定要更新letters +                letters[curr] = length + return sum(letters) +``` + + diff --git a/647._Palindromic_Substrings.md b/647._Palindromic_Substrings.md new file mode 100644 index 000000000..6b99a5d87 --- /dev/null +++ b/647._Palindromic_Substrings.md @@ -0,0 +1,64 @@ +###647. Palindromic Substrings + +题目: + + + +难度: + +Medium + + +思路 + +这道题要求给定一个字符串中的所有回文子串的个数,所以我想到了Manacher算法, +Manacher算法增加两个辅助变量id和mx,其中id表示最大回文子串中心的位置,mx则为id+P[id],也就是最大回文子串的边界。得到一个很重要的结论: + +- 如果mx > i,那么P[i] >= Min(P[2 * id - i], mx - i) + +下面,令j = 2*id - i,也就是说j是i关于id的对称点。 + +- 当 mx - i > P[j] 的时候,以S[j]为中心的回文子串包含在以S[id]为中心的回文子串中,由于i和j对称,以S[i]为中心的回文子串必然包含在以S[id]为中心的回文子串中,所以必有P[i] = P[j]; + +- 当 P[j] >= mx - i 的时候,以S[j]为中心的回文子串不一定完全包含于以S[id]为中心的回文子串中,但是基于对称性可知,下图中两个绿框所包围的部分是相同的,也就是说以S[i]为中心的回文子串,其向右至少会扩张到mx的位置,也就是说 P[i] >= mx - i。至于mx之后的部分是否对称,再具体匹配。 + +- 此外,对于 mx <= i 的情况,因为无法对 P[i]做更多的假设,只能让P[i] = 1,然后再去匹配。 + +最后,当P[i]等于1时,即以它为中心的回文子串就只有它自己的时候。但是其实这个字符本身也是一个回文子串,所以叠加的形式是count += (P[i]+1)/2 + + +```python +class Solution(object): + def countSubstrings(self, s): + """ + :type s: str + :rtype: str + """ + def preProcess(s): + if not s: + return ['^', '$'] + T = ['^'] + for c in s: + T += ['#', c] + T += ['#', '$'] + return T + T = preProcess(s) + P = [0] * len(T) + id, mx, count = 0, 0, 0 + for i in range(1,len(T) - 1): + j = 2*id - i + if mx > i: + P[i] = min(mx - i, P[j]) + else: + P[i] = 0 + while T[i+P[i]+1] == T[i-P[i]-1]: + P[i] += 1 + if (i + P[i]) > mx: + id, mx = i, i + P[i] + for i in range(len(P)): + count += (P[i]+1)/2 + return count +``` + + + diff --git a/672._Bulb_Switcher_II.md b/672._Bulb_Switcher_II.md new file mode 100644 index 000000000..08f5d0584 --- /dev/null +++ b/672._Bulb_Switcher_II.md @@ -0,0 +1,70 @@ +###672. Bulb Switcher II + +题目: + + + +难度: + +Medium + + +思路 + +这道题又是一个数学题。找规律呀找规律。 +我们只需要考虑当 n<=2 and m < 3 的特殊情形。因为当 n >2 and m >=3, 结果肯定是 8. +The four buttons: + +Flip all the lights. +Flip lights with even numbers. +Flip lights with odd numbers. +Flip lights with (3k + 1) numbers, k = 0, 1, 2, ... +如果我们使用了 button 1 和 2, 其效果等同于使用 button 3 。 +类似的.. + +1 + 2 --> 3, 1 + 3 --> 2, 2 + 3 --> 1 +所以,只有 8 种情形。 + +***All_on, 1, 2, 3, 4, 1+4, 2+4, 3+4*** + +并且当 n>2 and m>=3 时,我们就能够获得所有的情形。 + +| m\n | 0 | 1 | 2 | 3 | 4 | + --- | ---|--- |----|---|---| +| 0 | 1 | 1 | 1 | 1 | 8 | +| 1 | 1 | 2 | 3 | 4 | 8 | +| 2 | 1 | 2 | 4 | 7 | 8 | +| 3 | 8 | 8 | 8 | 8 | 8 | + +```python +class Solution(object): + def flipLights(self, n, m): + """ + :type n: int + :type m: int + :rtype: int + """ + if m * n == 0: return 1 + if n == 1: return 2 + if n == 2: return 4 - (m % 2) + if m == 1: return 4 + if m == 2: return 7 + return 8 +``` + +还有两位大佬的两行解法: +```python +class Solution(object): + def flipLights(self, n, m): + m, n = min(3, m), min(3, n) + return 1 if n * m == 0 else self.flipLights(n - 1, m) + self.flipLights( n - 1, m - 1) +``` +```python +class Solution(object): + def flipLights(self, n, m): + n = min(n, 3) + return min(1< + + +难度: + +Easy + + +思路 + +points用来存放每一次的分数,最后求和。 + + +```python +class Solution(object): + def calPoints(self, ops): + """ + :type ops: List[str] + :rtype: int + """ + points = [] + for i in ops: + if i == 'C': + points.pop() + elif i == 'D': + points.append(2 * points[-1]) + elif i == '+': + points.append(points[-1] + points[-2]) + else: + points.append(int(i)) + return sum(points) +``` + + diff --git "a/Binary Search \344\270\215\346\230\223\345\206\231.md" "b/Binary Search \344\270\215\346\230\223\345\206\231.md" index 0b07a1c98..9a09b8ac9 100644 --- "a/Binary Search \344\270\215\346\230\223\345\206\231.md" +++ "b/Binary Search \344\270\215\346\230\223\345\206\231.md" @@ -48,17 +48,17 @@ function Binary_Search(x, A, l, u) 或者这样,正确代码 -``` +```python def binarySearch(nums, target): l, r = 0, len(nums) -1 while l <= r: - mid = (l+r) / 2 - if nums[mid] == target: - return mid - elif nums[mid] > target: + mid = l + ((r-l) >> 2) + if nums[mid] > target: r = mid - 1 - else: + elif: l = mid + 1 + else: + return mid return -1 ``` diff --git "a/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" "b/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" new file mode 100644 index 000000000..c1d3e5522 --- /dev/null +++ "b/Java\345\220\204\347\247\215\347\261\273\345\236\213\347\232\204\350\275\254\346\215\242.md" @@ -0,0 +1,239 @@ +之前在写java程序的时候,经常会遇到很多的需要需要转换基础数据类型的情况,然后我就一直去记录这些情况,今天做了一下总结,当然转换的方法肯定不止我写的这些,有的我可能只会写其中的一种,以后再遇到其他的情况的话,我会慢慢来补充,希望这篇文章会对大家能有所帮助。 + +------ + +# String的转换 + +首先介绍一下String类型的转换,一般遇到的情况可能会有以下几种:Strng转int,String转long,String转byte数组,String转float,下面主要介绍这四种情况。 + +## String转int + +把String类型转换为int类型,常用的有以下三种方法: + +``` +public class StringToInt { + public static void main(String[] args) { + String number = "123456"; + int num1 = Integer.parseInt(number);//使用Integer的parseInt方法 + int num2 = new Integer(number);//强制转换 + int num3 = Integer.valueOf(number).intValue();//先转Integer类型,再调用intValue()转为int + } +} +``` + +## String转long + +把String类型转换为long类型的方法跟上面的方法类似。 + +``` +public class StringToLong { + public static void main(String[] args) { + String number = "1234567890"; + long num1 = Long.parseLong(number);//调用Long类型的parseLong方法 + long num2 = new Long(number);//强制转换 + long num3 = Long.valueOf(number).longValue();//先转换Long类型,再使用longValue方法转为long + } +} +``` + +## String转float + +把String类型转换为float类型的方法也跟上面的类似。 + +``` +public class StringToFloat { + public static void main(String[] args) { + String number = "1234.202"; + float num1 = Float.parseFloat(number);//调用Float的parseFloat方法 + float num2 = new Float(number);//强制转换 + float num3 = Float.valueOf(number).floatValue();//先转为Float类型再使用floatValue转为float + } +} +``` + +## String转byte[] + +String类型转byte数组方法一般使用String类自带的`getBytes()`方法。 + +``` +public class StringToByte { + public static void main(String[] args) { + byte[] num = new byte[200]; + String number = "1234567890"; + num = number.getBytes(); + } +} +``` + +这里补充一个path类型转换为String类型的方法: + +``` +String fileName=path.getFileName().toString(); +``` + +------ + +# long类型转换 + +long类型的转换,这一部分用的情况也很多,下面介绍几种常见的情况。 + +## long转String + +long类型转String类型,这里主要介绍三种方法: + +``` +public class LongToString { + public static void main(String[] args) { + long number = 1234567890l; + String num1 = Long.toString(number);//Long的tostring方法 + String num2 = String.valueOf(number);//使用String的valueOf方法 + String num3 = "" + number;//这个应该属于强制转换吧 + } +} +``` + +## long转int + +long类型转换为int类型,这里也主要介绍三种方法: + +``` +public class LongToInt { + public static void main(String[] args) { + long number = 121121121l; + int num1 = (int) number;// 强制类型转换 + int num2 = new Long(number).intValue();// 调用intValue方法 + int num3 = Integer.parseInt(String.valueOf(number));// 先把long转换位字符串String,然后转换为Integer + } +} +``` + +## long与byte数组的相互转换 + +一直都感觉byte数组转换比较繁琐,这里也不再叙述,我就给出一篇别人的博客让大家作为参考吧,这里面byte数组与多种数据类型的转换——[ java Byte和各数据类型(short,int,long,float,double)之间的转换](http://blog.csdn.net/cshichao/article/details/9813973) + +------ + +# int类型的转换 + +int类型的转换也是我们经常使用的情况,下面也主要介绍几种常见的情况。 + +## int转String + +int类型转换为String类型与long转String的类似,一般也有以下三种方法。 + +``` +public class IntToString { + public static void main(String[] args) { + int number = 121121; + String num1 = Integer.toString(number);//使用Integer的toString方法 + String num2 = String.valueOf(number);//使用String的valueOf方法 + String num3 = "" + number;//也是强制转换吧 + } +} +``` + +## int与Byte的相互转换 + +关于int类型与byte[]数组的转换,一般情况下,我们使用条件都是在这里转换过来,在另外一个地方就要转换回来,这里介绍两种int与byte数组互相转换的方式。 + +``` +//int类型转换为byte[]数组 +public static byte[] intToByteArray(int i) { + byte[] result = new byte[4]; + // 由高位到低位 + result[0] = (byte) ((i >> 24) & 0xFF); + result[1] = (byte) ((i >> 16) & 0xFF); + result[2] = (byte) ((i >> 8) & 0xFF); + result[3] = (byte) (i & 0xFF); + return result; +} + +//byte数组转换为int类型 +public static int byteArrayToInt(byte[] bytes) { + int value = 0; + // 由高位到低位 + for (int i = 0; i < 4; i++) { + int shift = (4 - 1 - i) * 8; + value += (bytes[i] & 0x000000FF) << shift;// 往高位游 + } + return value; +} +``` + +还有一种为: + +``` +//int类型转换为byte[]数组 +public static byte[] intToByteArray(int x) { + byte[] bb = new byte[4]; + bb[3] = (byte) (x >> 24); + bb[2] = (byte) (x >> 16); + bb[1] = (byte) (x >> 8); + bb[0] = (byte) (x >> 0); + return bb; +} + +//byte数组转换为int类型 +public static int byteArrayToInt(byte[] bb) { + return (int) ((((bb[3] & 0xff) << 24) | ((bb[2] & 0xff) << 16) | ((bb[1] & 0xff) << 8) | ((bb[0] & 0xff) << 0))); +} +``` + +## int转long + +int类型转换为long类型的情况并不是大多,这里主要接收几种转换方法: + +``` +public class IntToLong { + public static void main(String[] args) { + int number = 123111; + long num1 = (long) number;//强制 + long num2 = Long.parseLong(new Integer(number).toString());//先转String再进行转换 + long num3 = Long.valueOf(number); + } +} +``` + +## int转Interger + +int类型转换为Interger类型的情况,我是基本上每怎么遇到过,在这里也上网查询一些资料找到了两种方法。 + +``` +public class IntToInterge { + public static void main(String[] args) { + int number = 123456; + Integer num1 = Integer.valueOf(number); + Integer num2 = new Integer(number); + } +} +``` + +------ + +# byte数组的转换 + +关于byte数组的转换,上面有几个都是它们只见相互转换的,所以这里就不再介绍那么多,只介绍一个byte数组转换String类型的方法,其他的类型可以通过String类型再进行转换。 + +byte数组转String类型的方法经常用的可能就是下面这种方法。 + +``` +public class ByteToString { + public static void main(String[] args) { + byte[] number = "121121".getBytes(); + String num1 = new String(number); + } +} +``` + +------ + +最后简单补充以下Java基本数据类型的一些知识: + +| 类型 | 字节数 | 类名称 | 范围 | +| ------ | ---- | -------- | ---------------------------------------- | +| int | 4字节 | Interger | -2147483648 ~ 2147483647 | +| short | 2字节 | Short | -32768 ~ 32767 | +| long | 8字节 | Long | -9223372036854775808 ~ 9223372036854775807 | +| byte | 1字节 | Byte | -128 ~ 127 | +| float | 4字节 | Float | | +| double | 8字节 | Double | | \ No newline at end of file diff --git "a/LinkedList\346\212\200\345\267\247.md" "b/LinkedList\346\212\200\345\267\247.md" index 85cbfef68..677a083a2 100644 --- "a/LinkedList\346\212\200\345\267\247.md" +++ "b/LinkedList\346\212\200\345\267\247.md" @@ -1,4 +1,4 @@ -#LinkedList +# LinkedList 结点定义如下: @@ -11,14 +11,16 @@ 可以使用的技巧包括: -##Dummy head +## Dummy head 有的时候因为边界条件,需要判定是否是list的head,因为处理起来会有些不同,而创造一个dummy head则可以极大的解决一些问题。 - dummy = ListNode(-1) +``` + dummy = ListNode(-1) dummy.next = head +``` -##双指针 +## 双指针 - 19. Remove Nth Node From End of List @@ -78,7 +80,7 @@ class Solution(object): ``` -##寻找LinkedList中间项 +## 寻找LinkedList中间项 依旧使用双指针,快慢指针:快指针每次走两步,慢指针每次走一步,快指针如果到头了,那么慢指针也会在中间了,这个中间可以考量,如果是奇数的话必然是中间。 diff --git a/Readme.md b/Readme.md index 859d89797..18ccfc183 100644 --- a/Readme.md +++ b/Readme.md @@ -1,8 +1,12 @@ -### LeetCode × Python × CLRS +### Appreciation + +This repository is modified and added based on https://github.com/KrisYu/LeetCode-CLRS-Python, appreciate for his effort. +### LeetCode × Python × CLRS Finally, going to take LeetCode, Python can make you focus on the ideas, while CLRS is really kind of tedious, so whenever you finished some reading, you just, just would feel so happy that you can do LeetCode. + - 📚📖✏️📓 - 🍔🍝🍛🍣 - 😕😐😮😏 From 5681ba94dae77b8cca244affc171010cd09b2a6d Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 14 Oct 2017 00:45:34 -0500 Subject: [PATCH 0008/2496] add 218 --- 218._The _Skyline_Problem .md | 133 ++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 218._The _Skyline_Problem .md diff --git a/218._The _Skyline_Problem .md b/218._The _Skyline_Problem .md new file mode 100644 index 000000000..8c80c5f24 --- /dev/null +++ b/218._The _Skyline_Problem .md @@ -0,0 +1,133 @@ +### 218. The Skyline Problem + +题目: + + + +难度: + +Hard + +思路 + +观察发现,skyline的points的横坐标一定是某个building的左边界或者右边界。 + +开始,假设只有2个建筑物,拿出第一个buiding B1,我们先把它的左上顶点加进我们的output结果skyline中,然后继续拿下一个building B2,我们现在需要将B2的左上顶点对应的x coordinate与B1的右上顶点所对应的x coordinate做比较: + +- 如果前者小且B2的高度大于B1的高度,则我们将B2的左上顶点也加入skyline中去。 +- 如果前者小且B2的高度小于于B1的高度,则忽略B2的左上顶点 + +接下来考虑更多建筑物的情况,从左到右扫描,当我们遇到一个楼的左边界时,把它push到一个heap中。如果后面扫描的楼的高度比heap中最高的楼还高,那么它的左上顶点一定会被加入到skyline中。当我们遇到一个building的右边界时,我们需要将其从heap中pop掉,如果heap中max height有变化,则push到结果中。 + + + +#### 程序代码解释 + +- liveBuildings代表(左上顶点已经被加入output中但右上顶点还没有做判断的building)的右上顶点的集合,形式为[(height, x-coordinate)…..] +- skyline是output +- 程序里面的这句代码```while idx < n and buildings[idx][0] == start:```是为了防止有左右坐标完全相同但是height不同的building的存在,it's not useless!!! +- python里面的heapq模块如果有不懂的同学可以看看这个文章:[heapq](http://blog.csdn.net/calling_wisdom/article/details/41676133) + + +```python +class Solution(object): + def getSkyline(self, buildings): + """ + :type buildings: List[List[int]] + :rtype: List[List[int]] + """ + idx, n = 0, len(buildings) + liveBuildings, skyline = [], [] + while idx < n or len(liveBuildings) > 0: + if len(liveBuildings) == 0 or (idx < n and buildings[idx][0] <= -liveBuildings[0][1]): + start = buildings[idx][0] + while idx < n and buildings[idx][0] == start: + heapq.heappush(liveBuildings, [-buildings[idx][2], -buildings[idx][1]]) + idx += 1 + else: + start = -liveBuildings[0][1] + while len(liveBuildings) > 0 and -liveBuildings[0][1] <= start: + heapq.heappop(liveBuildings) + height = len(liveBuildings) and -liveBuildings[0][0] + if len(skyline) == 0 or skyline[-1][1] != height: + skyline.append([start, height]) + return skyline +``` +#####另外还有一个超级6的大神的代码,但是今天我要赶报告,就只先贴代码了 + +```python +class Solution(object): + def getSkyline(self, buildings): + """ + :type buildings: List[List[int]] + :rtype: List[List[int]] + """ + events = sorted([(L, -H, R) for L, R, H in buildings] + list(set((R, 0, None) for L, R, H in buildings))) + #events = sorted(event for L, R, H in buildings for event in ((L, -H, R), (R, 0, None))) + res, hp = [[0, 0]], [(0, float("inf"))] + for x, negH, R in events: + while x >= hp[0][1]: + heapq.heappop(hp) + if negH: heapq.heappush(hp, (negH, R)) + if res[-1][1] + hp[0][0]: + res += [x, -hp[0][0]], + return res[1:] +``` + +```Java +public class Solution { + public List getSkyline(int[][] buildings) { + List result = new ArrayList(); + if (buildings == null || buildings.length == 0 || buildings[0].length == 0) { + return result; + } + + List heights = new ArrayList(); + for (int[] building : buildings) { + heights.add(new Height(building[0], -building[2])); + heights.add(new Height(building[1], building[2])); + } + Collections.sort(heights, new Comparator() { + @Override + public int compare(Height h1, Height h2) { + return h1.index != h2.index ? h1.index - h2.index : h1.height - h2.height; + } + }); + + PriorityQueue pq = new PriorityQueue(1000, Collections.reverseOrder()); + pq.offer(0); + int prev = 0; + for (Height h : heights) { + if (h.height < 0) { + pq.offer(-h.height); + } else { + pq.remove(h.height); + } + int cur = pq.peek(); + if (cur != prev) { + result.add(new int[]{h.index, cur}); + prev = cur; + } + } + + return result; + } + + class Height { + int index; + int height; + Height(int index, int height) { + this.index = index; + this.height = height; + } + } +} +``` + + + +Author: Keqi Huang + +If you like it, please spread your support + +![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) From e369e806a4eb5abf08c095c938d74ae8e92d9074 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 17 Oct 2017 16:11:59 -0500 Subject: [PATCH 0009/2496] add 587 --- ..._substring_without_repeating_characters.md | 2 +- 141._linked_list_cycle.md | 184 ++++++++++-------- 587.-Erect-the-Fence .md | 101 ++++++++++ 3 files changed, 206 insertions(+), 81 deletions(-) create mode 100644 587.-Erect-the-Fence .md diff --git a/003._longest_substring_without_repeating_characters.md b/003._longest_substring_without_repeating_characters.md index 08ede7eaa..188a6c26d 100644 --- a/003._longest_substring_without_repeating_characters.md +++ b/003._longest_substring_without_repeating_characters.md @@ -1,4 +1,4 @@ -###3. Longest Substring Without Repeating Characters +### 3. Longest Substring Without Repeating Characters 题目: diff --git a/141._linked_list_cycle.md b/141._linked_list_cycle.md index e671e4942..2cf604e4e 100644 --- a/141._linked_list_cycle.md +++ b/141._linked_list_cycle.md @@ -1,81 +1,105 @@ -###141. Linked List Cycle - -题目: - - - - -难度: - -Easy - - -想法一: - -直接超时 - +### 141. Linked List Cycle + +题目: + + + + +难度: + +Easy + + +想法一: + +直接超时 + ``` -class Solution(object): - def hasCycle(self, head): - """ - :type head: ListNode - :rtype: bool - """ - if head == None: return False - lst = [] - cur = head - while cur: - if cur in lst: - return True - lst.append(cur) - cur = cur.next - return False -``` - - - -想法二:相当用boolean array记录某个点是否被访问过,时间,空间复杂度都是O(n) - -``` -class Solution(object): - def hasCycle(self, head): - """ - :type head: ListNode - :rtype: bool - """ - if head == None: return False - dictx = {} - cur = head - while cur: - if cur in dictx: - return True - dictx[cur] = 1 - cur = cur.next - return False -``` - -结果这种方法的run time还比较快 - -查了一下,有解答说可以有空间复杂度O(1),时间复杂度O(n)。两个指针,一个快一个慢,快的每次走两步,慢的每次走一步,如果有环,最终会在某处相遇。这也是一个算法。这种快慢指针配合已经不是第一次遇到了,比如找linklist中间的node。 - - - -但是并没有觉得这样的算法是O(n), worst case time complexity is O(N+K), which is O(n). - - -``` -class Solution(object): - def hasCycle(self, head): - """ - :type head: ListNode - :rtype: bool - """ - slow = head - fast = head - while slow and fast and fast.next: - slow = slow.next - fast = fast.next.next - if slow == fast: - return True - return False -``` +class Solution(object): + def hasCycle(self, head): + """ + :type head: ListNode + :rtype: bool + """ + if head == None: return False + lst = [] + cur = head + while cur: + if cur in lst: + return True + lst.append(cur) + cur = cur.next + return False +``` + + + +想法二:相当用boolean array记录某个点是否被访问过,时间,空间复杂度都是O(n) + +``` +class Solution(object): + def hasCycle(self, head): + """ + :type head: ListNode + :rtype: bool + """ + if head == None: return False + dictx = {} + cur = head + while cur: + if cur in dictx: + return True + dictx[cur] = 1 + cur = cur.next + return False +``` + +结果这种方法的run time还比较快 + +查了一下,有解答说可以有空间复杂度O(1),时间复杂度O(n)。两个指针,一个快一个慢,快的每次走两步,慢的每次走一步,如果有环,最终会在某处相遇。这也是一个算法。这种快慢指针配合已经不是第一次遇到了,比如找linklist中间的node。 + + + +但是并没有觉得这样的算法是O(n), worst case time complexity is O(N+K), which is O(n). + + +```python +python +class Solution(object): + def hasCycle(self, head): + """ + :type head: ListNode + :rtype: bool + """ + slow = head + fast = head + while slow and fast and fast.next: + slow = slow.next + fast = fast.next.next + if slow == fast: + return True + return False +``` + + +```java +java +public class Solution { + public boolean hasCycle(ListNode head) { + if (head == null){ + return false; + } + ListNode fast = head; + ListNode slow = head; + while (fast != null && slow != null && fast.next != null){ + fast = fast.next.next; + slow = slow.next; + if (slow == fast){ + return true; + } + } + return false; + } +} +``` + diff --git a/587.-Erect-the-Fence .md b/587.-Erect-the-Fence .md new file mode 100644 index 000000000..396e5e18c --- /dev/null +++ b/587.-Erect-the-Fence .md @@ -0,0 +1,101 @@ +### 587. Erect the Fence + + +题目: + + + +难度: + +Hard + + + +思路 + +题目要求用一个围栏把所有的点(🌲)围起来,然后求处于围栏上点(🌲)的集合。 + +我们可以发现,从最左边的那个点一直往右走,只要一直都是走的逆时针方向,那么我们一定可以找到这条围栏。那么接下来就考虑最简单的情况, + +- 只有两个点```p```和```q```,我们从```p```走到```q```,当```p```到原点这条直线的斜率小于```q```到原点这条直线的斜率时,```p->q```就是沿逆时针方向走的; +- 接下来考虑3个点:```p,q,r```,以```p```为参照点(即前面的原点),那么从```q```走到```r```的时候,只要```q```到```q```这条直线的斜率小于```r```到```p```这条直线的斜率,```q->r```就是沿逆时针方向走的。 + +因此,我们只要构建一个```orientation```函数,就可以判断出目前我们的围栏是不是沿着逆时针在走下去了。 + +我们用一个```stack```来存放目前认为在围栏上的点的集合,然后把所有的点按照指定规则排好序:```先按照点的x坐标升序排列,如果x相等则按照点的y坐标升序排列```。这样我们依次取点,只要stack里面的点大于等于2个我们就要无限进行判断是否走的是逆时针,如果不是就把stack里面最后那个点pop出去(可能一直pop到只剩一个点),否则就把目前的这个点加入到stack中去,因为目前它还是在逆时针方向上的。 + +从左往右走完一遍points之后,我们围栏的下部分lower hull就构建好了,此时我们还要构建围栏的upper hull,因此我们将points逆序一下,从右往左再来一次遍历,仍然看是否走的是逆时针。但是这次遍历我们需要进行一个判断,就是之前放进stack的点,此时我们还是会经过它,如果它已经在stack里面了,我们就不需要再加进去了,同时这样也避免了我们把最左边的点重复加进去。 + + + +```python +python +import functools +class Solution: + def outerTrees(self, points): + """ + :type points: List[Point] + :rtype: List[Point] + """ + def orientation(p, q, r): + return (q.y - p.y)*(r.x - p.x) - (r.y - p.y)*(q.x - p.x) + def myComparator(p,q): + return p.x - q.x if p.x != q.x else p.y - q.y + + stack= [] + points.sort(key = functools.cmp_to_key(myComparator)) + for i in range(len(points)): + while (len(stack) >= 2 and orientation(stack[-2],stack[-1],points[i]) > 0): + stack.pop() + stack.append(points[i]) + points.reverse(); + for i in range(len(points)): + while (len(stack) >= 2 and orientation(stack[-2],stack[-1],points[i]) > 0): + stack.pop() + if points[i] not in stack: + stack.append(points[i]) + return stack +``` + +```java +java +class Solution { + public List outerTrees(Point[] points) { + List res = new ArrayList(); + Arrays.sort(points, new Comparator(){ + @Override + public int compare(Point p, Point q){ + return p.x == q.x ? p.y - q.y : p.x - q.x; + } + }); + Stack stack = new Stack<>(); + for (int i = 0; i < points.length; i++){ + while(stack.size() >= 2 && orientation(stack.get(stack.size() - 2), stack.peek(), points[i]) > 0){ + stack.pop(); + } + stack.push(points[i]); + } + //stack.pop(); + for (int i = points.length - 1; i >= 0; i--){ + while(stack.size() >= 2 && orientation(stack.get(stack.size() - 2), stack.peek(), points[i]) > 0){ + stack.pop(); + } + stack.push(points[i]); + } + res.addAll(new HashSet<>(stack)); + return res; + } + + public int orientation(Point p, Point q, Point r){ + return (q.y - p.y)*(r.x - p.x) - (r.y - p.y)*(q.x - p.x); + } +} +``` + + + +Author: Keqi Huang + +If you like it, please spread your support + +![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) \ No newline at end of file From 668bb9a48001771623f61a40706bb17bb0caccf9 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 17 Oct 2017 16:22:40 -0500 Subject: [PATCH 0010/2496] add 587 --- "001._clone\346\234\200\346\226\260" | 1 + ...Erect-the-Fence .md => 587._Erect_the_Fence .md | 14 +++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 "001._clone\346\234\200\346\226\260" rename 587.-Erect-the-Fence .md => 587._Erect_the_Fence .md (75%) diff --git "a/001._clone\346\234\200\346\226\260" "b/001._clone\346\234\200\346\226\260" new file mode 100644 index 000000000..9135c5048 --- /dev/null +++ "b/001._clone\346\234\200\346\226\260" @@ -0,0 +1 @@ +001._记得先clone最新 diff --git a/587.-Erect-the-Fence .md b/587._Erect_the_Fence .md similarity index 75% rename from 587.-Erect-the-Fence .md rename to 587._Erect_the_Fence .md index 396e5e18c..bcade46c4 100644 --- a/587.-Erect-the-Fence .md +++ b/587._Erect_the_Fence .md @@ -1,3 +1,5 @@ + + ### 587. Erect the Fence @@ -22,9 +24,9 @@ Hard 因此,我们只要构建一个```orientation```函数,就可以判断出目前我们的围栏是不是沿着逆时针在走下去了。 -我们用一个```stack```来存放目前认为在围栏上的点的集合,然后把所有的点按照指定规则排好序:```先按照点的x坐标升序排列,如果x相等则按照点的y坐标升序排列```。这样我们依次取点,只要stack里面的点大于等于2个我们就要无限进行判断是否走的是逆时针,如果不是就把stack里面最后那个点pop出去(可能一直pop到只剩一个点),否则就把目前的这个点加入到stack中去,因为目前它还是在逆时针方向上的。 +我们用一个```stack```来存放目前认为在围栏上的点的集合,然后把所有的点按照指定规则排好序:```先按照点的x坐标升序排列,如果x相等则按照点的y坐标升序排列```。这样我们依次取点,只要```stack```里面的点大于等于```2```个我们就要无限进行判断是否走的是逆时针,如果不是就把```stack```里面最后那个点```pop```出去(可能一直```pop```到只剩一个点),否则就把目前的这个点加入到```stack```中去,因为目前它还是在逆时针方向上的。 -从左往右走完一遍points之后,我们围栏的下部分lower hull就构建好了,此时我们还要构建围栏的upper hull,因此我们将points逆序一下,从右往左再来一次遍历,仍然看是否走的是逆时针。但是这次遍历我们需要进行一个判断,就是之前放进stack的点,此时我们还是会经过它,如果它已经在stack里面了,我们就不需要再加进去了,同时这样也避免了我们把最左边的点重复加进去。 +从左往右走完一遍```points```之后,我们围栏的下部分```lower hull```就构建好了,此时我们还要构建围栏的```upper hull```,因此我们将```points```逆序一下,从右往左再来一次遍历,仍然看是否走的是逆时针。但是这次遍历我们需要进行一个判断,就是之前放进```stack```的点,此时我们还是会经过它,如果它已经在```stack```里面了,我们就不需要再加进去了,同时这样也避免了我们把最左边的点重复加进去。 @@ -57,6 +59,10 @@ class Solution: return stack ``` +下面是小傅大神的代码,本来想叫‘’傅神‘’的,结果这名字🤦‍♂️(手动捂脸) + +另外其中的```stack.pop()```这行代码注释掉也是可以的 + ```java java class Solution { @@ -94,8 +100,10 @@ class Solution { + + Author: Keqi Huang If you like it, please spread your support -![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) \ No newline at end of file +![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) From 467c5847a4fb1b50ce66f02a5b300679febc44af Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 17 Oct 2017 16:49:06 -0500 Subject: [PATCH 0011/2496] Update 242._valid_anagram.md --- 242._valid_anagram.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/242._valid_anagram.md b/242._valid_anagram.md index 28ddbe9c6..e2d9004b9 100644 --- a/242._valid_anagram.md +++ b/242._valid_anagram.md @@ -9,6 +9,17 @@ 对Python来说,又是一块蛋糕,基本不本地测试 就是这么自信 +我的一行解法: +```python +class Solution(object): + def isAnagram(self, s, t): + """ + :type s: str + :type t: str + :rtype: bool + """ + return len(s) == len(t) and collections.Counter(s) == collections.Counter(t) +``` ``` class Solution(object): @@ -27,7 +38,6 @@ class Solution(object): 作弊神奇python大法,看了看别人的解法,用字数统计,因为只可能是26个字母 -然后发现作弊大法居然更快 ``` From 654fab76243b233cc8d2a542d34193643104a09e Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 17 Oct 2017 17:16:33 -0500 Subject: [PATCH 0012/2496] Update 350._intersection_of_two_arrays_ii.md --- 350._intersection_of_two_arrays_ii.md | 44 +++++++++++++++------------ 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/350._intersection_of_two_arrays_ii.md b/350._intersection_of_two_arrays_ii.md index bd43b8dc8..4e088757d 100644 --- a/350._intersection_of_two_arrays_ii.md +++ b/350._intersection_of_two_arrays_ii.md @@ -1,19 +1,19 @@ -###350. Intersection of Two Arrays II - -题目: - - - - -难度: - -Easy - - -sort之后用了双指针来走和看 - - -``` +### 350. Intersection of Two Arrays II + +题目: + + + + +难度: + +Easy + + +sort之后用了双指针来走和看 + + +``` class Solution(object): def intersect(self, nums1, nums2): """ @@ -41,6 +41,12 @@ class Solution(object): res.append(nums1[p1]) p1 += 1 p2 += 1 - return res -``` - \ No newline at end of file + return res +``` + + + + + + + From ed2a6f749d5e12bf51c2abbc92d63f1159b58c5a Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 17 Oct 2017 17:16:48 -0500 Subject: [PATCH 0013/2496] Update 350._intersection_of_two_arrays_ii.md --- 350._intersection_of_two_arrays_ii.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/350._intersection_of_two_arrays_ii.md b/350._intersection_of_two_arrays_ii.md index 4e088757d..5b6c5632e 100644 --- a/350._intersection_of_two_arrays_ii.md +++ b/350._intersection_of_two_arrays_ii.md @@ -13,7 +13,7 @@ Easy sort之后用了双指针来走和看 -``` +```python class Solution(object): def intersect(self, nums1, nums2): """ From 093469ff122af7378c83993a489bef8bad532507 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 17 Oct 2017 17:48:45 -0500 Subject: [PATCH 0014/2496] Create 345._Reverse_Vowels_of_a_String --- 345._Reverse_Vowels_of_a_String | 59 +++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 345._Reverse_Vowels_of_a_String diff --git a/345._Reverse_Vowels_of_a_String b/345._Reverse_Vowels_of_a_String new file mode 100644 index 000000000..41fc053c6 --- /dev/null +++ b/345._Reverse_Vowels_of_a_String @@ -0,0 +1,59 @@ +### 345. Reverse Vowels of a String + + +题目: + + + +难度: + +Easy + + + +思路 + +字符串不可变,所以用list代替,最后join + + + +```python +python +class Solution(object): + def reverseVowels(self, s): + """ + :type s: str + :rtype: str + """ + vowels = 'aeiou' + string = list(s) + i, j = 0, len(s) -1 + while i < j: + if string[i].lower() not in vowels: + i += 1 + elif string[j].lower() not in vowels: + j -= 1 + else: + string[i], string[j] = string[j], string[i] + i += 1 + j -= 1 + return ''.join(string) +``` + + + + + +Author: Keqi Huang + +If you like it, please spread your support + +![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) + + + + + + + + From 1ab2dd0666773bc92fbba3a4acdf55d2b93836d8 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 17 Oct 2017 18:16:20 -0500 Subject: [PATCH 0015/2496] Update 058._length_of_last_word.md --- 058._length_of_last_word.md | 52 ++++++++++++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 3 deletions(-) diff --git a/058._length_of_last_word.md b/058._length_of_last_word.md index 7e9ff8a5d..82eadabe5 100644 --- a/058._length_of_last_word.md +++ b/058._length_of_last_word.md @@ -6,11 +6,46 @@ 难度 : Easy - +我的解法: +```python +class Solution(object): + def lengthOfLastWord(self, s): + """ + :type s: str + :rtype: int + """ + if not s: + return 0 + string = list(s) + i = len(s)-1 + res = [] + while i >= 0 and string[i] == ' ': + i -= 1 + while i >= 0 and string[i] != ' ': + res.append(string[i]) + i -= 1 + return len(res) +``` +上面这个判断可以精简成下面的代码: +```python +class Solution(object): + def lengthOfLastWord(self, s): + """ + :type s: str + :rtype: int + """ + length = 0 + for i in reversed(s): + if i == ' ': + if length: + break + else: + length += 1 + return length +``` 作弊式做法 ``` - class Solution(object): def lengthOfLastWord(self, s): """ @@ -21,4 +56,15 @@ class Solution(object): if len(lst) >= 1: return len(lst[-1]) return 0 -``` \ No newline at end of file +``` +split()方法最低可以分0组,split(' ')最低可以分1组 +```python +一行解法: +class Solution(object): + def lengthOfLastWord(self, s): + """ + :type s: str + :rtype: int + """ + return len(s.strip().split(" ")[-1]) +``` From a27b0678d5c69f91638dca778d9b48009bdb83ee Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 17 Oct 2017 18:20:41 -0500 Subject: [PATCH 0016/2496] Update 587._Erect_the_Fence .md --- 587._Erect_the_Fence .md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/587._Erect_the_Fence .md b/587._Erect_the_Fence .md index bcade46c4..e2737fe28 100644 --- a/587._Erect_the_Fence .md +++ b/587._Erect_the_Fence .md @@ -59,7 +59,7 @@ class Solution: return stack ``` -下面是小傅大神的代码,本来想叫‘’傅神‘’的,结果这名字🤦‍♂️(手动捂脸) +下面是小傅大神的代码,本来想叫‘’傅神‘’的,结果这名字🤦‍♂️(手动捂脸)[小傅每日一题](https://www.bilibili.com/video/av15446980/) 另外其中的```stack.pop()```这行代码注释掉也是可以的 From 30e35746d0115dae9be0c8411d1ef6994598e99a Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 17 Oct 2017 18:21:06 -0500 Subject: [PATCH 0017/2496] Update 587._Erect_the_Fence .md --- 587._Erect_the_Fence .md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/587._Erect_the_Fence .md b/587._Erect_the_Fence .md index e2737fe28..cb3cb7f00 100644 --- a/587._Erect_the_Fence .md +++ b/587._Erect_the_Fence .md @@ -59,7 +59,7 @@ class Solution: return stack ``` -下面是小傅大神的代码,本来想叫‘’傅神‘’的,结果这名字🤦‍♂️(手动捂脸)[小傅每日一题](https://www.bilibili.com/video/av15446980/) +下面是小傅大神的代码,本来想叫‘’傅神‘’的,结果这名字🤦‍♂️(手动捂脸)[小傅每日一题587](https://www.bilibili.com/video/av15446980/) 另外其中的```stack.pop()```这行代码注释掉也是可以的 From ee08bad7f64b241372c5207eab2cf97c0dec830b Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 17 Oct 2017 18:48:07 -0500 Subject: [PATCH 0018/2496] Update 067._add_binary.md --- 067._add_binary.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/067._add_binary.md b/067._add_binary.md index 8ddec55c7..33470e6a4 100644 --- a/067._add_binary.md +++ b/067._add_binary.md @@ -10,7 +10,7 @@ 几种case: - a or b 为空,最简单 -- 唯一的问题是如果有进位的处理,进位的处理就是先让其中的一个数addBinary +1 ,然后再用addBinary +- 唯一的问题是如果有进位的处理,进位的处理就是先让其中的一个数和```‘1’```做```addBinary```处理 ,然后再用```addBinary``` ``` @@ -30,4 +30,4 @@ class Solution(object): return self.addBinary(a[:-1], self.addBinary(b[:-1],'1')) + '0' else: return self.addBinary(a[:-1], b[:-1]) + '1' -``` \ No newline at end of file +``` From b9d316b94a19dc0c22df91cd91e48e2dccee84f2 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 17 Oct 2017 18:48:45 -0500 Subject: [PATCH 0019/2496] Update 067._add_binary.md --- 067._add_binary.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/067._add_binary.md b/067._add_binary.md index 33470e6a4..875dc9e63 100644 --- a/067._add_binary.md +++ b/067._add_binary.md @@ -12,9 +12,7 @@ - a or b 为空,最简单 - 唯一的问题是如果有进位的处理,进位的处理就是先让其中的一个数和```‘1’```做```addBinary```处理 ,然后再用```addBinary``` -``` - - +```python class Solution(object): def addBinary(self, a, b): """ From 5d02f42b9e2bd93a3def334e199630503b06c158 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 17 Oct 2017 22:25:09 -0500 Subject: [PATCH 0020/2496] Create 459._Repeated_Substring_Pattern.md --- 459._Repeated_Substring_Pattern.md | 40 ++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 459._Repeated_Substring_Pattern.md diff --git a/459._Repeated_Substring_Pattern.md b/459._Repeated_Substring_Pattern.md new file mode 100644 index 000000000..8840c1c31 --- /dev/null +++ b/459._Repeated_Substring_Pattern.md @@ -0,0 +1,40 @@ +### 459. Repeated Substring Pattern + + +题目: + + + +难度: + +Easy + + +思路 + +- 如果存在这样的子串,那么子串的第一个字符和最后一个字符肯定跟父字符串```s```的相同。 +- 因此构建一个新字符串```s*2```(两个父字符串相加),去掉首尾字符 +- 如果此时能在其中找到```s```,说明存在这样的子串 + + + + +```python +python +class Solution(object): + def repeatedSubstringPattern(self, s): + """ + :type s: str + :rtype: bool + """ + return (s*2)[1:-1].find(s) != -1 +``` + + + + +Author: Keqi Huang + +If you like it, please spread your support + +![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) From 490561c931d38094da830d58501a6778499acf86 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 17 Oct 2017 22:31:12 -0500 Subject: [PATCH 0021/2496] =?UTF-8?q?Update=20Python=E5=88=B7=E9=A2=98?= =?UTF-8?q?=E6=8A=80=E5=B7=A7=E7=AC=94=E8=AE=B0.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...42\230\346\212\200\345\267\247\347\254\224\350\256\260.md" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.md" "b/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.md" index bf50419f3..9287535cb 100644 --- "a/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.md" +++ "b/Python\345\210\267\351\242\230\346\212\200\345\267\247\347\254\224\350\256\260.md" @@ -58,8 +58,8 @@ python 的三目运算符是这么写的 x if y else z 考虑这种list of list: matrix = [ [1,2,3] , [4,5,6] ] -row  = len(matrix) -col = len(matrix[0]) if row else 0  +```row  = len(matrix)```, +```col = len(matrix[0]) if row else 0 ``` 这样写通用的原因是, 当matrix = [], row = 0, col =0 From 986641259a56acf1d50f6a9597a5325cb7b74980 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 18 Oct 2017 01:46:30 -0500 Subject: [PATCH 0022/2496] Update 587._Erect_the_Fence .md python comparator new type --- 587._Erect_the_Fence .md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/587._Erect_the_Fence .md b/587._Erect_the_Fence .md index cb3cb7f00..ee94a6c55 100644 --- a/587._Erect_the_Fence .md +++ b/587._Erect_the_Fence .md @@ -32,7 +32,7 @@ Hard ```python python -import functools +# import functools class Solution: def outerTrees(self, points): """ @@ -41,11 +41,11 @@ class Solution: """ def orientation(p, q, r): return (q.y - p.y)*(r.x - p.x) - (r.y - p.y)*(q.x - p.x) - def myComparator(p,q): - return p.x - q.x if p.x != q.x else p.y - q.y - + # def myComparator(p,q): + # return p.x - q.x if p.x != q.x else p.y - q.y stack= [] - points.sort(key = functools.cmp_to_key(myComparator)) + # points.sort(key = functools.cmp_to_key(myComparator)) + points.sort(key = lambda p: (p.x, p.y)) for i in range(len(points)): while (len(stack) >= 2 and orientation(stack[-2],stack[-1],points[i]) > 0): stack.pop() From db3d1e16c24dff94715203b1b14eac49a1200f9e Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 19 Oct 2017 19:48:49 -0500 Subject: [PATCH 0023/2496] Update 049._group_anagrams_python.md --- 049._group_anagrams_python.md | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/049._group_anagrams_python.md b/049._group_anagrams_python.md index c6d15903c..aa6962957 100644 --- a/049._group_anagrams_python.md +++ b/049._group_anagrams_python.md @@ -6,10 +6,10 @@ 难度 : Medium -我又来使用我的取巧神奇python大法 +python大法好 -``` +```python class Solution(object): def groupAnagrams(self, strs): """ @@ -17,22 +17,12 @@ class Solution(object): :rtype: List[List[str]] """ mapx = {} - for str1 in strs: - key = self.sortedWord(str1) - if key in mapx: - mapx[key].append(str1) - else: - mapx[key] = [str1] - return list(mapx.values()) - - def sortedWord(self,s): - """ - :type s: str - :type t: str - :rtype: bool - """ - sList = sorted(list(s)) - str1 = ''.join(sList) - return str1 + for i in strs: + x = ''.join(sorted(list(i))) + if x in mapx: + mapx[x].append(i) + else: + mapx[x] = [i] + return mapx.values() ``` From c2e7444265d97287ad79aecd56610e4d303154f6 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 20 Oct 2017 16:57:33 -0500 Subject: [PATCH 0024/2496] Create 438._Find_All_Anagrams_in_a_String.md --- 438._Find_All_Anagrams_in_a_String.md | 69 +++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 438._Find_All_Anagrams_in_a_String.md diff --git a/438._Find_All_Anagrams_in_a_String.md b/438._Find_All_Anagrams_in_a_String.md new file mode 100644 index 000000000..f7427756d --- /dev/null +++ b/438._Find_All_Anagrams_in_a_String.md @@ -0,0 +1,69 @@ +### 438. Find All Anagrams in a String + + +题目: + + + +难度: + +Easy + + + +思路 + +刚开始打算直接遍历整个s,时间复杂度为O(m*n),m和n分别为字符串p和s的长度,但是超时了 + + + +```python +python +class Solution(object): + def findAnagrams(self, s, p): + """ + :type s: str + :type p: str + :rtype: List[int] + """ + l, res = len(p), [] + for i in range(len(s)): + if collections.Counter(s[i:i+l]) == collections.Counter(p): + res.append(i) + return res +``` +于是用双指针,left和right都从0开始往后遍历 +```python +class Solution(object): + def findAnagrams(self, s, p): + """ + :type s: str + :type p: str + :rtype: List[int] + """ + result = [] + + cnts = [0] * 26 + for c in p: + cnts[ord(c) - ord('a')] += 1 + + left, right = 0, 0 + while right < len(s): + cnts[ord(s[right]) - ord('a')] -= 1 + while left <= right and cnts[ord(s[right]) - ord('a')] < 0: + cnts[ord(s[left]) - ord('a')] += 1 + left += 1 + if right - left + 1 == len(p): + result.append(left) + right += 1 + + return result +``` + + + +Author: Keqi Huang + +If you like it, please spread your support + +![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) From cb0c340c24c703f1c405d7ae2059c423b6268c52 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 21 Oct 2017 12:01:40 -0500 Subject: [PATCH 0025/2496] Update 587._Erect_the_Fence .md --- 587._Erect_the_Fence .md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/587._Erect_the_Fence .md b/587._Erect_the_Fence .md index ee94a6c55..f61d75b3c 100644 --- a/587._Erect_the_Fence .md +++ b/587._Erect_the_Fence .md @@ -58,6 +58,30 @@ class Solution: stack.append(points[i]) return stack ``` +简化python版本 +```python +class Solution(object): + def outerTrees(self, points): + """ + :type points: List[Point] + :rtype: List[Point] + """ + def orientation(p, q, r): + return (q.y - p.y) * (r.x - q.x) - \ + (q.x - p.x) * (r.y - q.y) + + hull = [] + points.sort(key=lambda p: (p.x, p.y)) + + for i in itertools.chain(xrange(len(points)), \ + reversed(xrange(len(points)))): + while len(hull) >= 2 and \ + orientation(hull[-2], hull[-1], points[i]) > 0: + hull.pop() + hull.append(points[i]) + + return list(set(hull)) +``` 下面是小傅大神的代码,本来想叫‘’傅神‘’的,结果这名字🤦‍♂️(手动捂脸)[小傅每日一题587](https://www.bilibili.com/video/av15446980/) From 46543b2c85c519f7e344fa862a698cd0bbf8234b Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 21 Oct 2017 12:35:15 -0500 Subject: [PATCH 0026/2496] Update 003._longest_substring_without_repeating_characters.md --- ...est_substring_without_repeating_characters.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/003._longest_substring_without_repeating_characters.md b/003._longest_substring_without_repeating_characters.md index 188a6c26d..24f30c7c6 100644 --- a/003._longest_substring_without_repeating_characters.md +++ b/003._longest_substring_without_repeating_characters.md @@ -49,7 +49,23 @@ class Solution(object): maps[s[i]] = i return max(l, n - start) ``` +简化python版本 +```python +class Solution(object): + def lengthOfLongestSubstring(self, s): + """ + :type s: str + :rtype: int + """ + l, start, n = 0, 0, len(s) + maps = {} + for i in range(n): + start = max(start, maps.get(s[i], -1)+1) + l = max(l, i - start+1) + maps[s[i]] = i + return l +``` ```java java class Solution { From 8fbe50f501ccbb826864ab81f82112e28f65563e Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 30 Oct 2017 13:16:45 -0500 Subject: [PATCH 0027/2496] Create 665._Non-decreasing_Array.md --- 665._Non-decreasing_Array.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 665._Non-decreasing_Array.md diff --git a/665._Non-decreasing_Array.md b/665._Non-decreasing_Array.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/665._Non-decreasing_Array.md @@ -0,0 +1 @@ + From f95e660d1fc489fa26bb97a8ee828cf3bc9c33b3 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 30 Oct 2017 13:32:18 -0500 Subject: [PATCH 0028/2496] Update 665._Non-decreasing_Array.md --- 665._Non-decreasing_Array.md | 47 ++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/665._Non-decreasing_Array.md b/665._Non-decreasing_Array.md index 8b1378917..3b90e5772 100644 --- a/665._Non-decreasing_Array.md +++ b/665._Non-decreasing_Array.md @@ -1 +1,48 @@ +### 665. Non-decreasing Array + +题目: + + + +难度: + +Easy + + +思路 + +从index=1的元素依次检查,只要不符合规则则让count+1,如果count>1则肯定不符合返回False +但是我们在发现nums[i]小于nums[i-1]的时候,我们就必须要对原数组作出改变了,来让它的后面index部分尽可能满足条件 +下面就是两种情况: +1. 2,4,2,6 + +如果是这种情况,当index=2时,不满足条件,但是i=0的元素是小于i=2处元素的,我们需要改变的是i-1处的元素,也就是将4改变成i=2处元素即2,最终变成2,2,2,6 + +2. 3,4,2,6 + +这种情况如果我们将4变成2那么仍然是不满足条件的,此时我们需要将2变成4,即将i处元素变为i-1处元素 + +在每一次不符合条件的时候我们都检查一下count,如果count大于1的话我们就返回False,否则最终就返回True + +```python +class Solution(object): + def checkPossibility(self, nums): + """ + :type nums: List[int] + :rtype: bool + """ + count = 0 + for i in range(1,len(nums)): + if nums[i] < nums[i-1]: + count += 1 + if count > 1: + return False + if i - 2 < 0 or nums[i-2] <= nums[i]: + nums[i-1] = nums[i] + else: + nums[i] = nums[i-1] + return True +``` + + From 3566abb9ec2059e1bc457cf841340a0d528718b8 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 30 Oct 2017 13:32:45 -0500 Subject: [PATCH 0029/2496] Update 665._Non-decreasing_Array.md --- 665._Non-decreasing_Array.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/665._Non-decreasing_Array.md b/665._Non-decreasing_Array.md index 3b90e5772..cfb621a98 100644 --- a/665._Non-decreasing_Array.md +++ b/665._Non-decreasing_Array.md @@ -14,11 +14,11 @@ Easy 从index=1的元素依次检查,只要不符合规则则让count+1,如果count>1则肯定不符合返回False 但是我们在发现nums[i]小于nums[i-1]的时候,我们就必须要对原数组作出改变了,来让它的后面index部分尽可能满足条件 下面就是两种情况: -1. 2,4,2,6 +1.2,4,2,6 如果是这种情况,当index=2时,不满足条件,但是i=0的元素是小于i=2处元素的,我们需要改变的是i-1处的元素,也就是将4改变成i=2处元素即2,最终变成2,2,2,6 -2. 3,4,2,6 +2.3,4,2,6 这种情况如果我们将4变成2那么仍然是不满足条件的,此时我们需要将2变成4,即将i处元素变为i-1处元素 From 61a5d49855936d275bb9d1012ddd6944aafc2d0d Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 30 Oct 2017 13:33:00 -0500 Subject: [PATCH 0030/2496] Update 665._Non-decreasing_Array.md --- 665._Non-decreasing_Array.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/665._Non-decreasing_Array.md b/665._Non-decreasing_Array.md index cfb621a98..62db06891 100644 --- a/665._Non-decreasing_Array.md +++ b/665._Non-decreasing_Array.md @@ -14,11 +14,11 @@ Easy 从index=1的元素依次检查,只要不符合规则则让count+1,如果count>1则肯定不符合返回False 但是我们在发现nums[i]小于nums[i-1]的时候,我们就必须要对原数组作出改变了,来让它的后面index部分尽可能满足条件 下面就是两种情况: -1.2,4,2,6 +- 2,4,2,6 如果是这种情况,当index=2时,不满足条件,但是i=0的元素是小于i=2处元素的,我们需要改变的是i-1处的元素,也就是将4改变成i=2处元素即2,最终变成2,2,2,6 -2.3,4,2,6 +- 3,4,2,6 这种情况如果我们将4变成2那么仍然是不满足条件的,此时我们需要将2变成4,即将i处元素变为i-1处元素 From 4433869fa9d1053a21948c889c2c6c3cd978e27e Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 30 Oct 2017 13:33:26 -0500 Subject: [PATCH 0031/2496] Update 665._Non-decreasing_Array.md --- 665._Non-decreasing_Array.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/665._Non-decreasing_Array.md b/665._Non-decreasing_Array.md index 62db06891..cf05d3c9e 100644 --- a/665._Non-decreasing_Array.md +++ b/665._Non-decreasing_Array.md @@ -14,7 +14,7 @@ Easy 从index=1的元素依次检查,只要不符合规则则让count+1,如果count>1则肯定不符合返回False 但是我们在发现nums[i]小于nums[i-1]的时候,我们就必须要对原数组作出改变了,来让它的后面index部分尽可能满足条件 下面就是两种情况: -- 2,4,2,6 +- 2,4,2,6 如果是这种情况,当index=2时,不满足条件,但是i=0的元素是小于i=2处元素的,我们需要改变的是i-1处的元素,也就是将4改变成i=2处元素即2,最终变成2,2,2,6 From fb2ec12700b7ebd027893e5ba266f023b5c887b7 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 14 Nov 2017 17:37:32 -0600 Subject: [PATCH 0032/2496] Update 088._merge_sorted_array.md --- 088._merge_sorted_array.md | 34 ++++++++++++---------------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/088._merge_sorted_array.md b/088._merge_sorted_array.md index 935310045..b1e83bd7b 100644 --- a/088._merge_sorted_array.md +++ b/088._merge_sorted_array.md @@ -7,7 +7,7 @@ 难度 : Easy -并不easy和容易写对 +思路: 给的数组可能是这样的 @@ -17,16 +17,14 @@ nums2 : [1] n : 1 -设置指针p = m + n -1, p1 = m - 1, p2 = n - 1 - -从末端开始,哪个数更大就放末端,两个指针都走到-1才算走完,问题可能出现在p1走完但是p2还没走完,所以添加一个多的loop来检查,想之上的例子就可以理解 +所以要判断m和n是不是仍然大于0 AC代码 ``` -class Solution(object): +class Solution: def merge(self, nums1, m, nums2, n): """ :type nums1: List[int] @@ -35,22 +33,14 @@ class Solution(object): :type n: int :rtype: void Do not return anything, modify nums1 in-place instead. """ - p = m + n -1 - p1 = m - 1 - p2 = n - 1 - while p2 >= 0 and p1 >= 0 : - if nums2[p2] > nums1[p1]: - nums1[p] = nums2[p2] - p2 -= 1 + while m > 0 and n > 0: + if nums1[m-1] > nums2[n-1]: + nums1[m+n-1] = nums1[m-1] + m -= 1 else: - nums1[p] = nums1[p1] - p1 -= 1 - p -= 1 - - + nums1[m+n-1] = nums2[n-1] + n -= 1 + if n > 0: + nums1[:n] = nums2[:n] - for i in range(p2,-1,-1): - nums1[p] = nums2[i] - p -= 1 - -``` \ No newline at end of file +``` From dbe98b99fb3d85ec977a33b927e6307aebb1d250 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 14 Nov 2017 17:37:52 -0600 Subject: [PATCH 0033/2496] Update 088._merge_sorted_array.md --- 088._merge_sorted_array.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/088._merge_sorted_array.md b/088._merge_sorted_array.md index b1e83bd7b..dc8815e67 100644 --- a/088._merge_sorted_array.md +++ b/088._merge_sorted_array.md @@ -1,4 +1,4 @@ -###88. Merge Sorted Array +### 88. Merge Sorted Array 题目: @@ -7,7 +7,7 @@ 难度 : Easy -思路: +### 思路: 给的数组可能是这样的 From 8fb3a6c5fa1fffc4846675cdd86cbba41f78babb Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 17 Nov 2017 07:26:06 -0600 Subject: [PATCH 0034/2496] Create 599._Minimum_Index_Sum_of_Two_Lists.md --- 599._Minimum_Index_Sum_of_Two_Lists.md | 58 ++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 599._Minimum_Index_Sum_of_Two_Lists.md diff --git a/599._Minimum_Index_Sum_of_Two_Lists.md b/599._Minimum_Index_Sum_of_Two_Lists.md new file mode 100644 index 000000000..1682fab62 --- /dev/null +++ b/599._Minimum_Index_Sum_of_Two_Lists.md @@ -0,0 +1,58 @@ +### 599. Minimum Index Sum of Two Lists + + +题目: + + + +难度: + +Easy + + + +思路 + +两个list,我们首先要取得它们相同的部分,并且之后我们还要知道哪个相同的字符串在两个list中的index之和是最小的。 +- 所以我们首先遍历list1,只要目前这个字符串在list2中,我们就以[字符串,index之和]的形式将其存放到ress中,同时维护一个index保持为最小index之和的值 +- 对于ress,我们遍历,只要某一项的index之和等于最小index之和我们就将他的字符串以i[0]的形式append到res中去, +- return res + +### 程序变量解释 + +- ress format: [[string1, sumOfIndex1], [string2, sumOfIndex2]... ] +- index 最小sunOfIndex值 +- res 最终结果,foramt: [string1, string2,. ...] + + + + +```python +python +class Solution: + def findRestaurant(self, list1, list2): + """ + :type list1: List[str] + :type list2: List[str] + :rtype: List[str] + """ + ress = [] + index = 2000 + for i in list1: + if i in list2: + ress.append([i, list1.index(i)+list2.index(i)]) + index = min(index, list1.index(i)+list2.index(i)) + res = [] + for i in ress: + if i[1] == index: + res.append(i[0]) + return res +``` + + + +Author: Keqi Huang + +If you like it, please spread your support + +![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) From 2497e6378f33fa8ddbc739a08b51dcfd95afcf2e Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 22 Nov 2017 04:52:53 -0600 Subject: [PATCH 0035/2496] Update 004._median_of_two_sorted_arrays.md --- 004._median_of_two_sorted_arrays.md | 69 +++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/004._median_of_two_sorted_arrays.md b/004._median_of_two_sorted_arrays.md index 8714c2abf..409e923d3 100644 --- a/004._median_of_two_sorted_arrays.md +++ b/004._median_of_two_sorted_arrays.md @@ -102,6 +102,75 @@ class Solution(object): ``` 这个findKth的算法单独抽出来也是题目。 +寻找最小的k个数 + +题目描述 + +输入n个整数,输出其中最小的k个。 +分析与解法 + +解法一 + +要求一个序列中最小的k个数,按照惯有的思维方式,则是先对这个序列从小到大排序,然后输出前面的最小的k个数。 +至于选取什么的排序方法,我想你可能会第一时间想到快速排序(我们知道,快速排序平均所费时间为n*logn),然后再遍历序列中前k个元素输出即可。因此,总的时间复杂度:```O(n * log n)+O(k)=O(n * log n)```。 +解法二 + +咱们再进一步想想,题目没有要求最小的```k```个数有序,也没要求最后```n-k```个数有序。既然如此,就没有必要对所有元素进行排序。这时,咱们想到了用选择或交换排序,即: +1、遍历```n```个数,把最先遍历到的k个数存入到大小为```k```的数组中,假设它们即是最小的```k```个数; +2、对这```k```个数,利用选择或交换排序找到这k个元素中的最大值```kmax```(找最大值需要遍历这```k```个数,时间复杂度为```O(k))```; +3、继续遍历剩余```n-k```个数。假设每一次遍历到的新的元素的值为```x```,把```x```与```kmax```比较:如果```x``` < ```kmax``` ,用```x```替换```kmax```,并回到第二步重新找出k个元素的数组中最大元素kmax‘;如果```x >= kmax```,则继续遍历不更新数组。 +每次遍历,更新或不更新数组的所用的时间为```O(k)```或```O(0)```。故整趟下来,时间复杂度为```n*O(k)=O(n*k)```。 +解法三 + +更好的办法是维护容量为k的最大堆,原理跟解法二的方法相似: +1、用容量为```k```的最大堆存储最先遍历到的```k```个数,同样假设它们即是最小的```k```个数; +2、堆中元素是有序的,令```k1 pivot ){ } + if( i < j ) + swap( &a[ i ], &a[ j ] ); + else + break; + } + //重置枢纽元 + swap( &a[ i ], &a[ right - 1 ] ); + + if( k <= i ) + QuickSelect( a, k, left, i - 1 ); + else if( k > i + 1 ) + QuickSelect( a, k, i + 1, right ); + } + else + InsertSort( a + left, right - left + 1 ); +} +``` +这个快速选择SELECT算法,类似快速排序的划分方法。N个数存储在数组S中,再从数组中选取“中位数的中位数”作为枢纽元X,把数组划分为Sa和Sb俩部分,Sa<=X<=Sb,如果要查找的k个元素小于Sa的元素个数,则返回Sa中较小的k个元素,否则返回Sa中所有元素+Sb中小的k-|Sa|个元素,这种解法在平均情况下能做到O(n)的复杂度。 +更进一步,《算法导论》第9章第9.3节介绍了一个最坏情况下亦为O(n)时间的SELECT算法,有兴趣的读者可以参看。 给定两个已经排序好的数组,求第k大的,算法有O(m+n).类似merge sort的原理。否则利用的就是之上提到的,利用已经有序的原理,然后每次丢。 From 4d0cbddf66514d4ff85680574cdc99dc10ed8eaa Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 22 Nov 2017 04:56:26 -0600 Subject: [PATCH 0036/2496] Update 004._median_of_two_sorted_arrays.md --- 004._median_of_two_sorted_arrays.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/004._median_of_two_sorted_arrays.md b/004._median_of_two_sorted_arrays.md index 409e923d3..eae9ceb7a 100644 --- a/004._median_of_two_sorted_arrays.md +++ b/004._median_of_two_sorted_arrays.md @@ -174,7 +174,7 @@ void QuickSelect( int a[], int k, int left, int right ) 给定两个已经排序好的数组,求第k大的,算法有O(m+n).类似merge sort的原理。否则利用的就是之上提到的,利用已经有序的原理,然后每次丢。 -之所以这里还有一个丢弃条件是b is None 丢A的一部分,是因为B的数组长度是有限的,这个时候很明显丢A的k/2是不影响的,因为无论B[-1]是如何大或者小,因为整个B的长度没有达到k/2,所以丢掉的这部分最大的A[k/2-1]也不可能是第k个,因为即使整个B都比A[k/2-1],拼起来也不能使A[k/2-1]第k大,所以可以放心丢弃。 +之所以这里还有一个丢弃条件是b is None 丢A的一部分,是因为B的数组长度是有限的,这个时候很明显丢A的k/2是不影响的,因为无论B[-1]是如何大或者小,因为整个B的长度没有达到k/2小,所以丢掉的这部分最大的A[k/2-1]也不可能是第k个,因为即使整个B都比A[k/2-1],拼起来也不能使A[k/2-1]第k大,所以可以放心丢弃。 这里是两个sorted list/array findKth,想到了类似的题目,如果给一个n个linked list,findKth,能想到的办法也只能是用heap吧,类似merge k sorted lists. From 6d3bd34edf35755e7bac74dcbcda7ee7d57963d5 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 22 Nov 2017 05:07:26 -0600 Subject: [PATCH 0037/2496] Update 004._median_of_two_sorted_arrays.md --- 004._median_of_two_sorted_arrays.md | 30 ++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/004._median_of_two_sorted_arrays.md b/004._median_of_two_sorted_arrays.md index eae9ceb7a..0af062cc5 100644 --- a/004._median_of_two_sorted_arrays.md +++ b/004._median_of_two_sorted_arrays.md @@ -109,32 +109,32 @@ class Solution(object): 输入n个整数,输出其中最小的k个。 分析与解法 -解法一 +## 解法一 要求一个序列中最小的k个数,按照惯有的思维方式,则是先对这个序列从小到大排序,然后输出前面的最小的k个数。 至于选取什么的排序方法,我想你可能会第一时间想到快速排序(我们知道,快速排序平均所费时间为n*logn),然后再遍历序列中前k个元素输出即可。因此,总的时间复杂度:```O(n * log n)+O(k)=O(n * log n)```。 -解法二 +## 解法二 咱们再进一步想想,题目没有要求最小的```k```个数有序,也没要求最后```n-k```个数有序。既然如此,就没有必要对所有元素进行排序。这时,咱们想到了用选择或交换排序,即: -1、遍历```n```个数,把最先遍历到的k个数存入到大小为```k```的数组中,假设它们即是最小的```k```个数; -2、对这```k```个数,利用选择或交换排序找到这k个元素中的最大值```kmax```(找最大值需要遍历这```k```个数,时间复杂度为```O(k))```; -3、继续遍历剩余```n-k```个数。假设每一次遍历到的新的元素的值为```x```,把```x```与```kmax```比较:如果```x``` < ```kmax``` ,用```x```替换```kmax```,并回到第二步重新找出k个元素的数组中最大元素kmax‘;如果```x >= kmax```,则继续遍历不更新数组。 +1. 遍历```n```个数,把最先遍历到的k个数存入到大小为```k```的数组中,假设它们即是最小的```k```个数; +2. 对这```k```个数,利用选择或交换排序找到这k个元素中的最大值```kmax```(找最大值需要遍历这```k```个数,时间复杂度为```O(k))```; +3. 继续遍历剩余```n-k```个数。假设每一次遍历到的新的元素的值为```x```,把```x```与```kmax```比较:如果```x``` < ```kmax``` ,用```x```替换```kmax```,并回到第二步重新找出k个元素的数组中最大元素kmax‘;如果```x >= kmax```,则继续遍历不更新数组。 每次遍历,更新或不更新数组的所用的时间为```O(k)```或```O(0)```。故整趟下来,时间复杂度为```n*O(k)=O(n*k)```。 -解法三 +## 解法三 更好的办法是维护容量为k的最大堆,原理跟解法二的方法相似: -1、用容量为```k```的最大堆存储最先遍历到的```k```个数,同样假设它们即是最小的```k```个数; -2、堆中元素是有序的,令```k1 Date: Wed, 22 Nov 2017 05:07:59 -0600 Subject: [PATCH 0038/2496] Update 004._median_of_two_sorted_arrays.md --- 004._median_of_two_sorted_arrays.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/004._median_of_two_sorted_arrays.md b/004._median_of_two_sorted_arrays.md index 0af062cc5..8adfb6d1a 100644 --- a/004._median_of_two_sorted_arrays.md +++ b/004._median_of_two_sorted_arrays.md @@ -102,7 +102,7 @@ class Solution(object): ``` 这个findKth的算法单独抽出来也是题目。 -寻找最小的k个数 +### 寻找最小的k个数 题目描述 From 945b60c34f33eaf941bd5f92e3dbb13327f94d95 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 22 Nov 2017 05:43:09 -0600 Subject: [PATCH 0039/2496] Update 004._median_of_two_sorted_arrays.md --- 004._median_of_two_sorted_arrays.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/004._median_of_two_sorted_arrays.md b/004._median_of_two_sorted_arrays.md index 8adfb6d1a..2a4313a46 100644 --- a/004._median_of_two_sorted_arrays.md +++ b/004._median_of_two_sorted_arrays.md @@ -97,7 +97,7 @@ class Solution(object): if b is None or (a is not None and a < b): return self.findKth(A[k/2:], B, k - k/2) -   return self.findKth(A, B[k/2:],k - k/2) //这里要注意:因为 k/2 不一定 等于 (k - k/2) +   return self.findKth(A, B[k/2:],k - k/2) #这里要注意:因为 k/2 不一定 等于 (k - k/2) ``` From 021203e176cd96942f97b1d557f7c10314b3d51c Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 22 Nov 2017 06:00:26 -0600 Subject: [PATCH 0040/2496] Update 004._median_of_two_sorted_arrays.md --- 004._median_of_two_sorted_arrays.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/004._median_of_two_sorted_arrays.md b/004._median_of_two_sorted_arrays.md index 2a4313a46..ccdc8baae 100644 --- a/004._median_of_two_sorted_arrays.md +++ b/004._median_of_two_sorted_arrays.md @@ -97,7 +97,7 @@ class Solution(object): if b is None or (a is not None and a < b): return self.findKth(A[k/2:], B, k - k/2) -   return self.findKth(A, B[k/2:],k - k/2) #这里要注意:因为 k/2 不一定 等于 (k - k/2) +   return self.findKth(A, B[k/2:],k - k/2) #这里要注意:因为 k/2 不一定 等于 (k - k/2), python3里面要用向下取整函数才可以AC,否则报错,TypeError: list indices must be integers or slices, not float ``` From 5a6902035177dbc7a27bf9ecf643e6ec46e02411 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 22 Nov 2017 06:00:51 -0600 Subject: [PATCH 0041/2496] Update 004._median_of_two_sorted_arrays.md --- 004._median_of_two_sorted_arrays.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/004._median_of_two_sorted_arrays.md b/004._median_of_two_sorted_arrays.md index ccdc8baae..ccfc12877 100644 --- a/004._median_of_two_sorted_arrays.md +++ b/004._median_of_two_sorted_arrays.md @@ -97,7 +97,8 @@ class Solution(object): if b is None or (a is not None and a < b): return self.findKth(A[k/2:], B, k - k/2) -   return self.findKth(A, B[k/2:],k - k/2) #这里要注意:因为 k/2 不一定 等于 (k - k/2), python3里面要用向下取整函数才可以AC,否则报错,TypeError: list indices must be integers or slices, not float +   return self.findKth(A, B[k/2:],k - k/2) #这里要注意:因为 k/2 不一定 等于 (k - k/2), + #python3里面要用向下取整函数才可以AC,否则报错,TypeError: list indices must be integers or slices, not float ``` From c0769c7c0871488762baf50b6fe128a2af3b53bd Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 22 Nov 2017 06:01:21 -0600 Subject: [PATCH 0042/2496] Update 004._median_of_two_sorted_arrays.md --- 004._median_of_two_sorted_arrays.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/004._median_of_two_sorted_arrays.md b/004._median_of_two_sorted_arrays.md index ccfc12877..f5d0a0c07 100644 --- a/004._median_of_two_sorted_arrays.md +++ b/004._median_of_two_sorted_arrays.md @@ -98,7 +98,7 @@ class Solution(object): if b is None or (a is not None and a < b): return self.findKth(A[k/2:], B, k - k/2)   return self.findKth(A, B[k/2:],k - k/2) #这里要注意:因为 k/2 不一定 等于 (k - k/2), - #python3里面要用向下取整函数才可以AC,否则报错,TypeError: list indices must be integers or slices, not float +#python3里面要用向下取整函数才可以AC,否则报错,TypeError: list indices must be integers or slices, not float ``` From 31d7f7fb8b4945e831c84c5f0c5468f4de1f0a4b Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 22 Nov 2017 07:44:27 -0600 Subject: [PATCH 0043/2496] Update 003._longest_substring_without_repeating_characters.md --- ..._substring_without_repeating_characters.md | 47 +------------------ 1 file changed, 1 insertion(+), 46 deletions(-) diff --git a/003._longest_substring_without_repeating_characters.md b/003._longest_substring_without_repeating_characters.md index 24f30c7c6..02b5c55e8 100644 --- a/003._longest_substring_without_repeating_characters.md +++ b/003._longest_substring_without_repeating_characters.md @@ -28,28 +28,7 @@ Medium - maps 放置每一个字符的index,如果maps.get(s[i], -1)大于等于start的话,就说明字符重复了,此时就要重置 l(字母L) 和start的值了, -最后还要进行一次比较,因为最后一次没有比较,即 n - start 和 l (字母L) 的比较,这是最后一个round - - -```python -python -class Solution(object): - def lengthOfLongestSubstring(self, s): - """ - :type s: str - :rtype: int - """ - l, start, n = 0, 0, len(s) - maps = {} - for i in range(n): - if maps.get(s[i], -1) >= start: - l = max(l, i - start) - start = maps.get(s[i]) + 1 - maps[s[i]] = i - return max(l, n - start) -``` -简化python版本 ```python class Solution(object): def lengthOfLongestSubstring(self, s): @@ -66,31 +45,7 @@ class Solution(object): maps[s[i]] = i return l ``` -```java -java -class Solution { - public int lengthOfLongestSubstring(String s) { - HashMap map = new HashMap(); - int l= 0; - int start = 0; - int n = s.length(); - for (int i = 0; i < n; i++){ - if(returnDef(map, s.charAt(i)) >= start){ - l = Math.max(l, i-start); - start = map.get(s.charAt(i)) + 1; - } - map.put(s.charAt(i), i); - } - return Math.max(n-start,l); - } - public int returnDef(HashMap map, Character c){ - if (map.get(c) == null){ - return -1; - } - return map.get(c); - } -} -``` + From 800ee1ea6dbfd4341b7dc23c21b250ed811a354c Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 22 Nov 2017 22:10:42 -0600 Subject: [PATCH 0044/2496] =?UTF-8?q?Create=20=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\346\200\273\347\273\223.md" | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 "\346\200\273\347\273\223.md" diff --git "a/\346\200\273\347\273\223.md" "b/\346\200\273\347\273\223.md" new file mode 100644 index 000000000..6621c78e4 --- /dev/null +++ "b/\346\200\273\347\273\223.md" @@ -0,0 +1,2 @@ +# 1 +solution下自定义函数func(self, fargs, *args, **kwargs), 调用时self.func()的格式 From 19585c901ada10295ac1bc8a05a777aa6d50aa6c Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 22 Nov 2017 22:42:16 -0600 Subject: [PATCH 0045/2496] Update 004._median_of_two_sorted_arrays.md --- 004._median_of_two_sorted_arrays.md | 33 +++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/004._median_of_two_sorted_arrays.md b/004._median_of_two_sorted_arrays.md index f5d0a0c07..5b5dcf95f 100644 --- a/004._median_of_two_sorted_arrays.md +++ b/004._median_of_two_sorted_arrays.md @@ -98,8 +98,41 @@ class Solution(object): if b is None or (a is not None and a < b): return self.findKth(A[k/2:], B, k - k/2)   return self.findKth(A, B[k/2:],k - k/2) #这里要注意:因为 k/2 不一定 等于 (k - k/2), + + +``` +```python3 #python3里面要用向下取整函数才可以AC,否则报错,TypeError: list indices must be integers or slices, not float +from math import floor +class Solution: + def findMedianSortedArrays(self, nums1, nums2): + """ + :type nums1: List[int] + :type nums2: List[int] + :rtype: float + """ + n = len(nums1) + len(nums2) + if n % 2 == 1: + return self.findKth(nums1, nums2, floor(n/2)+1) + else: + smaller = self.findKth(nums1, nums2, floor(n/2)) + bigger = self.findKth(nums1, nums2, floor(n/2)+1) + return (smaller + bigger) / 2.0 + def findKth(self, A, B, k): + + if len(A) == 0: + return B[k-1] + if len(B) == 0: + return A[k-1] + if k == 1: + return min(A[0], B[0]) + a = A[floor(k/2)-1] if len(A) >= k/2 else None + b = B[floor(k/2)-1] if len(B) >= k/2 else None + if b is None or (a is not None and a < b): + return self.findKth(A[floor(k/2):], B, k - floor(k/2)) + else: + return self.findKth(A, B[floor(k/2):], k - floor(k/2)) ``` 这个findKth的算法单独抽出来也是题目。 From ae35b547b1355504d597baa79cbeb18da3278e49 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 22 Nov 2017 22:42:48 -0600 Subject: [PATCH 0046/2496] Update 004._median_of_two_sorted_arrays.md --- 004._median_of_two_sorted_arrays.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/004._median_of_two_sorted_arrays.md b/004._median_of_two_sorted_arrays.md index 5b5dcf95f..4c59a14db 100644 --- a/004._median_of_two_sorted_arrays.md +++ b/004._median_of_two_sorted_arrays.md @@ -101,7 +101,7 @@ class Solution(object): ``` -```python3 +```python #python3里面要用向下取整函数才可以AC,否则报错,TypeError: list indices must be integers or slices, not float from math import floor From b97fba24ac066fd8de1a7f85a8ff758048527906 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 22 Nov 2017 22:45:19 -0600 Subject: [PATCH 0047/2496] Update 002._add_two_numbers.md --- 002._add_two_numbers.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/002._add_two_numbers.md b/002._add_two_numbers.md index 828fd7610..534275a10 100644 --- a/002._add_two_numbers.md +++ b/002._add_two_numbers.md @@ -1,16 +1,16 @@ -###2. Add Two Numbers - -题目: - - - -难度 : Medium - - -跟plus One, add Binary 玩的同一种花样 - - -``` +###2. Add Two Numbers + +题目: + + + +难度 : Medium + + +跟plus One, add Binary 玩的同一种花样 + + +```python class Solution(object): def addTwoNumbers(self, l1, l2): """ @@ -33,5 +33,5 @@ class Solution(object): tmp = ListNode(1) tmp.next = None l3.next = self.addTwoNumbers(l1.next, self.addTwoNumbers(l2.next ,tmp)) - return l3 -``` + return l3 +``` From b79f0242e76cf48dc423e45201115e302e30aa95 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 15:10:59 -0600 Subject: [PATCH 0048/2496] Update 647._Palindromic_Substrings.md --- 647._Palindromic_Substrings.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/647._Palindromic_Substrings.md b/647._Palindromic_Substrings.md index 6b99a5d87..3aa4475bf 100644 --- a/647._Palindromic_Substrings.md +++ b/647._Palindromic_Substrings.md @@ -1,4 +1,4 @@ -###647. Palindromic Substrings +### 647. Palindromic Substrings 题目: From f6c11410d5c48aeb4fd66fff550f574c31f82e98 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 15:26:55 -0600 Subject: [PATCH 0049/2496] Update 647._Palindromic_Substrings.md --- 647._Palindromic_Substrings.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/647._Palindromic_Substrings.md b/647._Palindromic_Substrings.md index 3aa4475bf..c50c2ad45 100644 --- a/647._Palindromic_Substrings.md +++ b/647._Palindromic_Substrings.md @@ -12,16 +12,20 @@ Medium 思路 这道题要求给定一个字符串中的所有回文子串的个数,所以我想到了Manacher算法, +[Manacher算法](https://www.felix021.com/blog/read.php?2040) + Manacher算法增加两个辅助变量id和mx,其中id表示最大回文子串中心的位置,mx则为id+P[id],也就是最大回文子串的边界。得到一个很重要的结论: -- 如果mx > i,那么P[i] >= Min(P[2 * id - i], mx - i) +- 如果mx > i,那么P[i] >= Min(P[2 * id - i], mx - i) . 为什么这样说呢,下面解释 下面,令j = 2*id - i,也就是说j是i关于id的对称点。 - 当 mx - i > P[j] 的时候,以S[j]为中心的回文子串包含在以S[id]为中心的回文子串中,由于i和j对称,以S[i]为中心的回文子串必然包含在以S[id]为中心的回文子串中,所以必有P[i] = P[j]; +![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher1.png) - 当 P[j] >= mx - i 的时候,以S[j]为中心的回文子串不一定完全包含于以S[id]为中心的回文子串中,但是基于对称性可知,下图中两个绿框所包围的部分是相同的,也就是说以S[i]为中心的回文子串,其向右至少会扩张到mx的位置,也就是说 P[i] >= mx - i。至于mx之后的部分是否对称,再具体匹配。 - +![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher2.png) +所以P[i] >= Min(P[2 * id - i], mx - i),因为以j为中心的绘回文子串的左边界可能会比mx关于id的对称点要大,此时只能证明P[i]=P[2 * id - i] - 此外,对于 mx <= i 的情况,因为无法对 P[i]做更多的假设,只能让P[i] = 1,然后再去匹配。 最后,当P[i]等于1时,即以它为中心的回文子串就只有它自己的时候。但是其实这个字符本身也是一个回文子串,所以叠加的形式是count += (P[i]+1)/2 From db5bb2a06f78e5ab686c46eee88debc9ecba1c4c Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 15:27:10 -0600 Subject: [PATCH 0050/2496] Update 005._longest_palindromic_substring.md --- 005._longest_palindromic_substring.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/005._longest_palindromic_substring.md b/005._longest_palindromic_substring.md index da5949b7c..05b09f01d 100644 --- a/005._longest_palindromic_substring.md +++ b/005._longest_palindromic_substring.md @@ -1,4 +1,4 @@ -5. Longest Palindromic Substring +### 5. Longest Palindromic Substring 题目: @@ -175,6 +175,20 @@ we check if the substring’s indices are the same as the reversed substring’s 思路3: [Manacher算法](https://www.felix021.com/blog/read.php?2040) + +Manacher算法增加两个辅助变量id和mx,其中id表示最大回文子串中心的位置,mx则为id+P[id],也就是最大回文子串的边界。得到一个很重要的结论: + +- 如果mx > i,那么P[i] >= Min(P[2 * id - i], mx - i) . 为什么这样说呢,下面解释 + +下面,令j = 2*id - i,也就是说j是i关于id的对称点。 + +- 当 mx - i > P[j] 的时候,以S[j]为中心的回文子串包含在以S[id]为中心的回文子串中,由于i和j对称,以S[i]为中心的回文子串必然包含在以S[id]为中心的回文子串中,所以必有P[i] = P[j]; +![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher1.png) + +- 当 P[j] >= mx - i 的时候,以S[j]为中心的回文子串不一定完全包含于以S[id]为中心的回文子串中,但是基于对称性可知,下图中两个绿框所包围的部分是相同的,也就是说以S[i]为中心的回文子串,其向右至少会扩张到mx的位置,也就是说 P[i] >= mx - i。至于mx之后的部分是否对称,再具体匹配。 +![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher2.png) +所以P[i] >= Min(P[2 * id - i], mx - i),因为以j为中心的绘回文子串的左边界可能会比mx关于id的对称点要大,此时只能证明P[i]=P[2 * id - i] +- 此外,对于 mx <= i 的情况,因为无法对 P[i]做更多的假设,只能让P[i] = 1,然后再去匹配。 ```python class Solution(object): def longestPalindrome(self, s): From 626b0809fb8e22ad8193edb11464cefe377d21c3 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 15:46:16 -0600 Subject: [PATCH 0051/2496] Update 005._longest_palindromic_substring.md --- 005._longest_palindromic_substring.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/005._longest_palindromic_substring.md b/005._longest_palindromic_substring.md index 05b09f01d..ab4716a09 100644 --- a/005._longest_palindromic_substring.md +++ b/005._longest_palindromic_substring.md @@ -189,6 +189,12 @@ Manacher算法增加两个辅助变量id和mx,其中id表示最大回文子串 ![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher2.png) 所以P[i] >= Min(P[2 * id - i], mx - i),因为以j为中心的绘回文子串的左边界可能会比mx关于id的对称点要大,此时只能证明P[i]=P[2 * id - i] - 此外,对于 mx <= i 的情况,因为无法对 P[i]做更多的假设,只能让P[i] = 1,然后再去匹配。 + +在下面的程序中我的P数组保存的是该回文子串的长度(包含当前字符自身) + + +简单地用 + ```python class Solution(object): def longestPalindrome(self, s): @@ -217,8 +223,8 @@ class Solution(object): P[i] += 1 if (i + P[i]) > mx: id, mx = i, i + P[i] - max_i = 0 - for i in range(1, len(T)-1): +        max_i = 0 #保存的是当前最大回文子串中心位置的index +        for i in range(1, len(T)-1): if P[i] > P[max_i]: max_i = i start = (max_i - P[max_i] - 1) / 2 From 5b50283adfe408602486b0c4ca1843f5c9de5871 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 16:11:53 -0600 Subject: [PATCH 0052/2496] Update 005._longest_palindromic_substring.md --- 005._longest_palindromic_substring.md | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/005._longest_palindromic_substring.md b/005._longest_palindromic_substring.md index ab4716a09..1c84245f1 100644 --- a/005._longest_palindromic_substring.md +++ b/005._longest_palindromic_substring.md @@ -31,7 +31,7 @@ LCSuff(S1...p, T1...q) = LCS(S1...p1, T1...q-1) if S[p] = T[q] else 0 https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Longest_common_substring#Python_2 这样也超时? - +```python class Solution(object): def longestPalindrome(self, s): """ @@ -53,7 +53,7 @@ https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Longest_common_su return s1[x_longest - longest: x_longest] return lcs(s, s[::-1]) - +``` 因为以为这样s[::-1]已经很快了. 这个方法是buggy的,看字符串abcxgcba,它reverse之后是abcgxcba,它们有公共字符串,但是这里面没有回文,修复方式是: @@ -82,7 +82,7 @@ we check if the substring’s indices are the same as the reversed substring’s 依次把每一个字符当做回文字符串的中间字符,找到以该字符为中间字符的回文串的最大长度。分别对奇偶的情况进行讨论,接下来的关键就是对边界的把握,确保下标不要越界。当子串已经包含首字符或最后一个字符且此时还是回文串的时候,下标分别会向两边多移一位,需要补回来。 参考https://shenjie1993.gitbooks.io/leetcode-python/content/005%20Longest%20Palindromic%20Substring.html - +```python class Solution(object): def longestPalindrome(self, s): """ @@ -134,9 +134,9 @@ we check if the substring’s indices are the same as the reversed substring’s m = c b = True return s[l:r] - +``` 以上是参考版本,自己写的版本: - +```python class Solution(object): def longestPalindrome(self, s): """ @@ -169,7 +169,7 @@ we check if the substring’s indices are the same as the reversed substring’s return s[l:r+1] - +``` 思路3: @@ -190,10 +190,16 @@ Manacher算法增加两个辅助变量id和mx,其中id表示最大回文子串 所以P[i] >= Min(P[2 * id - i], mx - i),因为以j为中心的绘回文子串的左边界可能会比mx关于id的对称点要大,此时只能证明P[i]=P[2 * id - i] - 此外,对于 mx <= i 的情况,因为无法对 P[i]做更多的假设,只能让P[i] = 1,然后再去匹配。 -在下面的程序中我的P数组保存的是该回文子串的长度(包含当前字符自身) +在下面的程序中我的P数组保存的是,以当前字符为回文子串中心时,该回文子串的长度(不包含当前字符自身) + + +简单地用一个小例子来解释:原字符串为'qacbcaw',一眼就可以看出来最大回文子串是'acbca', +index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 +mod-s ^ # q # a # c # b # c # a # w # $ +P数组 0 0 1 0 1 0 1 0 5 0 1 0 1 0 1 0 0 -简单地用 +所以最终代码中的max_i就是字符'b'所对应的index8,start的值就是(max_i - P[max_i] - 1) / 2 = 1,最终输出结果为s[1:6],即‘acbca’ ```python class Solution(object): From 8837bca30aa47f7779aedf75d4a32fa4b40cdeca Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 16:23:34 -0600 Subject: [PATCH 0053/2496] Update 005._longest_palindromic_substring.md --- 005._longest_palindromic_substring.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/005._longest_palindromic_substring.md b/005._longest_palindromic_substring.md index 1c84245f1..433406a21 100644 --- a/005._longest_palindromic_substring.md +++ b/005._longest_palindromic_substring.md @@ -195,9 +195,13 @@ Manacher算法增加两个辅助变量id和mx,其中id表示最大回文子串 简单地用一个小例子来解释:原字符串为'qacbcaw',一眼就可以看出来最大回文子串是'acbca', -index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 -mod-s ^ # q # a # c # b # c # a # w # $ -P数组 0 0 1 0 1 0 1 0 5 0 1 0 1 0 1 0 0 + index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + Modified-string ^ # q # a # c # b # c # a # w # $ + P-array 0 0 1 0 1 0 1 0 5 0 1 0 1 0 1 0 0 + + + + 所以最终代码中的max_i就是字符'b'所对应的index8,start的值就是(max_i - P[max_i] - 1) / 2 = 1,最终输出结果为s[1:6],即‘acbca’ From 1ef251518b753d29f4830e165f1e5ad4cd3981f5 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 16:29:14 -0600 Subject: [PATCH 0054/2496] Update 005._longest_palindromic_substring.md --- 005._longest_palindromic_substring.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/005._longest_palindromic_substring.md b/005._longest_palindromic_substring.md index 433406a21..3ea04f398 100644 --- a/005._longest_palindromic_substring.md +++ b/005._longest_palindromic_substring.md @@ -195,11 +195,7 @@ Manacher算法增加两个辅助变量id和mx,其中id表示最大回文子串 简单地用一个小例子来解释:原字符串为'qacbcaw',一眼就可以看出来最大回文子串是'acbca', - index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 - Modified-string ^ # q # a # c # b # c # a # w # $ - P-array 0 0 1 0 1 0 1 0 5 0 1 0 1 0 1 0 0 - - +![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher3.png) From d2fc7c0a8c71f89ac3a2caeee92ea195f326e9df Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 16:31:53 -0600 Subject: [PATCH 0055/2496] Update 005._longest_palindromic_substring.md --- 005._longest_palindromic_substring.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/005._longest_palindromic_substring.md b/005._longest_palindromic_substring.md index 3ea04f398..c66315feb 100644 --- a/005._longest_palindromic_substring.md +++ b/005._longest_palindromic_substring.md @@ -195,7 +195,7 @@ Manacher算法增加两个辅助变量id和mx,其中id表示最大回文子串 简单地用一个小例子来解释:原字符串为'qacbcaw',一眼就可以看出来最大回文子串是'acbca', -![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher3.png) +![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher3.jpg) From 44d1a77dac2e25a9a5aafc6a01655c56d77335cd Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 16:40:06 -0600 Subject: [PATCH 0056/2496] Update 005._longest_palindromic_substring.md --- 005._longest_palindromic_substring.md | 1 + 1 file changed, 1 insertion(+) diff --git a/005._longest_palindromic_substring.md b/005._longest_palindromic_substring.md index c66315feb..9de5e248e 100644 --- a/005._longest_palindromic_substring.md +++ b/005._longest_palindromic_substring.md @@ -194,6 +194,7 @@ Manacher算法增加两个辅助变量id和mx,其中id表示最大回文子串 简单地用一个小例子来解释:原字符串为'qacbcaw',一眼就可以看出来最大回文子串是'acbca', +下面是我做的图,累shi了! ![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher3.jpg) From 49cb28678d11e12894a5adf4a04c3798d1d07a2c Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 16:41:43 -0600 Subject: [PATCH 0057/2496] Update 647._Palindromic_Substrings.md --- 647._Palindromic_Substrings.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/647._Palindromic_Substrings.md b/647._Palindromic_Substrings.md index c50c2ad45..f867560d6 100644 --- a/647._Palindromic_Substrings.md +++ b/647._Palindromic_Substrings.md @@ -27,6 +27,8 @@ Manacher算法增加两个辅助变量id和mx,其中id表示最大回文子串 ![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher2.png) 所以P[i] >= Min(P[2 * id - i], mx - i),因为以j为中心的绘回文子串的左边界可能会比mx关于id的对称点要大,此时只能证明P[i]=P[2 * id - i] - 此外,对于 mx <= i 的情况,因为无法对 P[i]做更多的假设,只能让P[i] = 1,然后再去匹配。 +此题还可以借鉴我leetcode第5题的解析, +[lc5](https://github.com/Lisanaaa/thinking_in_lc/blob/master/005._longest_palindromic_substring.md) 最后,当P[i]等于1时,即以它为中心的回文子串就只有它自己的时候。但是其实这个字符本身也是一个回文子串,所以叠加的形式是count += (P[i]+1)/2 From d6935d7c237de58664c3813a7c56b42b401765c6 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 16:42:21 -0600 Subject: [PATCH 0058/2496] Update 647._Palindromic_Substrings.md --- 647._Palindromic_Substrings.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/647._Palindromic_Substrings.md b/647._Palindromic_Substrings.md index f867560d6..cfd99f47c 100644 --- a/647._Palindromic_Substrings.md +++ b/647._Palindromic_Substrings.md @@ -28,7 +28,7 @@ Manacher算法增加两个辅助变量id和mx,其中id表示最大回文子串 所以P[i] >= Min(P[2 * id - i], mx - i),因为以j为中心的绘回文子串的左边界可能会比mx关于id的对称点要大,此时只能证明P[i]=P[2 * id - i] - 此外,对于 mx <= i 的情况,因为无法对 P[i]做更多的假设,只能让P[i] = 1,然后再去匹配。 此题还可以借鉴我leetcode第5题的解析, -[lc5](https://github.com/Lisanaaa/thinking_in_lc/blob/master/005._longest_palindromic_substring.md) +[thining-in-lc-5](https://github.com/Lisanaaa/thinking_in_lc/blob/master/005._longest_palindromic_substring.md) 最后,当P[i]等于1时,即以它为中心的回文子串就只有它自己的时候。但是其实这个字符本身也是一个回文子串,所以叠加的形式是count += (P[i]+1)/2 From 512e967d05e1469b0675db72398603523ffc2bec Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 16:44:41 -0600 Subject: [PATCH 0059/2496] Update 005._longest_palindromic_substring.md --- 005._longest_palindromic_substring.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/005._longest_palindromic_substring.md b/005._longest_palindromic_substring.md index 9de5e248e..f468efc05 100644 --- a/005._longest_palindromic_substring.md +++ b/005._longest_palindromic_substring.md @@ -237,6 +237,6 @@ class Solution(object): start = (max_i - P[max_i] - 1) / 2 return s[start : start + P[max_i]] ``` - +还可以转到[647题](https://github.com/Lisanaaa/thinking_in_lc/blob/master/647._Palindromic_Substrings.md)去看一看,也可以用这个算法解 From 0ee21ca13caeb213659fd1e244f4dfa5e34507f8 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 16:50:10 -0600 Subject: [PATCH 0060/2496] Update 005._longest_palindromic_substring.md --- 005._longest_palindromic_substring.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/005._longest_palindromic_substring.md b/005._longest_palindromic_substring.md index f468efc05..4a76b65ab 100644 --- a/005._longest_palindromic_substring.md +++ b/005._longest_palindromic_substring.md @@ -220,8 +220,8 @@ class Solution(object): T = preProcess(s) P = [0] * len(T) id, mx = 0, 0 - for i in range(1,len(T) - 1): - j = 2*id - i +        for i in range(1,len(T) - 1): #首尾两个字符不需要处理 +            j = 2*id - i if mx > i: P[i] = min(mx - i, P[j]) else: From 6ff69d3224293bee782f802a8ceb8d74fb13494d Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 17:03:05 -0600 Subject: [PATCH 0061/2496] Update 005._longest_palindromic_substring.md --- 005._longest_palindromic_substring.md | 1 + 1 file changed, 1 insertion(+) diff --git a/005._longest_palindromic_substring.md b/005._longest_palindromic_substring.md index 4a76b65ab..eb240a4b0 100644 --- a/005._longest_palindromic_substring.md +++ b/005._longest_palindromic_substring.md @@ -237,6 +237,7 @@ class Solution(object): start = (max_i - P[max_i] - 1) / 2 return s[start : start + P[max_i]] ``` +run code的时候结果会跟expected不一样,但是该input确实2个结果都可以,所以放心地submit吧 还可以转到[647题](https://github.com/Lisanaaa/thinking_in_lc/blob/master/647._Palindromic_Substrings.md)去看一看,也可以用这个算法解 From ff7ca5b3445dc9d9b7e9c331ab5dc2402488e448 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 17:25:05 -0600 Subject: [PATCH 0062/2496] Update 647._Palindromic_Substrings.md --- 647._Palindromic_Substrings.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/647._Palindromic_Substrings.md b/647._Palindromic_Substrings.md index cfd99f47c..1768185ac 100644 --- a/647._Palindromic_Substrings.md +++ b/647._Palindromic_Substrings.md @@ -65,6 +65,17 @@ class Solution(object): count += (P[i]+1)/2 return count ``` - +python无敌啊!!!有没有天理啊,手动滑稽!一行解法: +```python +class Solution(object): + def countSubstrings(self, s): + """ + :type s: str + :rtype: int + """ + return sum(len(os.path.commonprefix((s[:i][::-1], s[i:]))) + + len(os.path.commonprefix((s[:i][::-1], s[i + 1:]))) + 1 + for i in range(len(s))) +``` From 92ab6d7f24e89d82d85b5767039b7e9a512da06c Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 17:26:10 -0600 Subject: [PATCH 0063/2496] Update 647._Palindromic_Substrings.md --- 647._Palindromic_Substrings.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/647._Palindromic_Substrings.md b/647._Palindromic_Substrings.md index 1768185ac..f449fd41a 100644 --- a/647._Palindromic_Substrings.md +++ b/647._Palindromic_Substrings.md @@ -65,7 +65,7 @@ class Solution(object): count += (P[i]+1)/2 return count ``` -python无敌啊!!!有没有天理啊,手动滑稽!一行解法: +python无敌啊!!!有没有天理啊,手动滑稽😏😏😏😏!一行解法: ```python class Solution(object): def countSubstrings(self, s): From bf986534fd466271eedf1110c0e6624d0d6b9565 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 17:31:00 -0600 Subject: [PATCH 0064/2496] Update 647._Palindromic_Substrings.md --- 647._Palindromic_Substrings.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/647._Palindromic_Substrings.md b/647._Palindromic_Substrings.md index f449fd41a..1ceca30ae 100644 --- a/647._Palindromic_Substrings.md +++ b/647._Palindromic_Substrings.md @@ -77,5 +77,7 @@ class Solution(object): + len(os.path.commonprefix((s[:i][::-1], s[i + 1:]))) + 1 for i in range(len(s))) ``` - +解释下为啥要加两次,因为回文串有以下两种形式: +- ‘abcba’ +- 'abba' From 5c292362f788550c8448d5652d62708b6ca707a2 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 18:08:12 -0600 Subject: [PATCH 0065/2496] Update 647._Palindromic_Substrings.md --- 647._Palindromic_Substrings.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/647._Palindromic_Substrings.md b/647._Palindromic_Substrings.md index 1ceca30ae..df119a54a 100644 --- a/647._Palindromic_Substrings.md +++ b/647._Palindromic_Substrings.md @@ -30,7 +30,12 @@ Manacher算法增加两个辅助变量id和mx,其中id表示最大回文子串 此题还可以借鉴我leetcode第5题的解析, [thining-in-lc-5](https://github.com/Lisanaaa/thinking_in_lc/blob/master/005._longest_palindromic_substring.md) -最后,当P[i]等于1时,即以它为中心的回文子串就只有它自己的时候。但是其实这个字符本身也是一个回文子串,所以叠加的形式是count += (P[i]+1)/2 +这道题的基本思想是将以每一个字符为中心的回文子串个数相加,还是用一个小例子来解释 +![](https://github.com/Lisanaaa/myTODOs/blob/master/manacher3.jpg) +其实,以‘#’为中心的回文子串就代表这个子串的长度是偶数,类似于'abba'这种 +但是其实这个字符本身也是一个回文子串,所以叠加的形式是count += (P[i]+1)/2,为什么呢,以下是解释: +- 对于每一个以字符‘#’为中心的回文子串,其P值绝对是偶数,所以```(P[i]+1)/2 = P[i]/2```,并不影响 +- 对于每一个以非字符‘#’为中心的回文子串,其P值绝对是奇数,这就保证了单个字母的回文子串(例如'a'也算一个回文子串)也被加起来了,因为```(P[i]+1)/2 = P[i]/2+1``` ```python From 65b1ce9d289caf2bcccf904c1df2598a30869c41 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 18:08:40 -0600 Subject: [PATCH 0066/2496] Update 647._Palindromic_Substrings.md --- 647._Palindromic_Substrings.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/647._Palindromic_Substrings.md b/647._Palindromic_Substrings.md index df119a54a..424aa2f7d 100644 --- a/647._Palindromic_Substrings.md +++ b/647._Palindromic_Substrings.md @@ -35,7 +35,7 @@ Manacher算法增加两个辅助变量id和mx,其中id表示最大回文子串 其实,以‘#’为中心的回文子串就代表这个子串的长度是偶数,类似于'abba'这种 但是其实这个字符本身也是一个回文子串,所以叠加的形式是count += (P[i]+1)/2,为什么呢,以下是解释: - 对于每一个以字符‘#’为中心的回文子串,其P值绝对是偶数,所以```(P[i]+1)/2 = P[i]/2```,并不影响 -- 对于每一个以非字符‘#’为中心的回文子串,其P值绝对是奇数,这就保证了单个字母的回文子串(例如'a'也算一个回文子串)也被加起来了,因为```(P[i]+1)/2 = P[i]/2+1``` +- 对于每一个以非字符‘#’为中心的回文子串,其P值绝对是奇数,这就保证了单个字母的回文子串(```例如'a'也算一个回文子串```)也被加起来了,因为```(P[i]+1)/2 = P[i]/2+1``` ```python From 66eb82373ba074e2cf7f2964f32008c3a3ac8538 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 18:32:13 -0600 Subject: [PATCH 0067/2496] Update 014._longest_common_prefix.md --- 014._longest_common_prefix.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/014._longest_common_prefix.md b/014._longest_common_prefix.md index 14e6247dd..325843e7f 100644 --- a/014._longest_common_prefix.md +++ b/014._longest_common_prefix.md @@ -73,4 +73,14 @@ class Solution(object): ``` -这个题解锁之后可以看到各种各样的解法,to be 读 + +python无敌啊!!!有没有天理啊,手动滑稽😏😏😏😏!一行解法: +```python +class Solution(object): + def longestCommonPrefix(self, strs): + """ + :type strs: List[str] + :rtype: str + """ + return os.path.commonprefix(strs) +``` From 36d4907f2782d18abdf7db23959c30b393c91c25 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 18:40:21 -0600 Subject: [PATCH 0068/2496] Update 014._longest_common_prefix.md --- 014._longest_common_prefix.md | 41 +++++++++++------------------------ 1 file changed, 13 insertions(+), 28 deletions(-) diff --git a/014._longest_common_prefix.md b/014._longest_common_prefix.md index 325843e7f..7f1ff76f4 100644 --- a/014._longest_common_prefix.md +++ b/014._longest_common_prefix.md @@ -14,44 +14,29 @@ Easy 找出最短的string,然后一个一个对比,缺点是时间复杂度会比较高,AC代码,这代码优雅程度也是负数啊 -``` +```python class Solution(object): def longestCommonPrefix(self, strs): """ :type strs: List[str] :rtype: str """ - if strs == []: return '' - - shortStr = '' - shortLen = float('inf') - - for s in strs: - if len(s) < shortLen: - shortLen = len(s) - shortStr = s - - # print shortStr, shortLen - - n = len(strs) - i = 0 - same = True - while i < shortLen and same: - j = 0 - while j < n : - if strs[j][i] != shortStr[i]: - same = False - break - j += 1 - if same: - i += 1 - else: - break - return shortStr[:i] + '''dp[i]代表前i个字符串的最大前缀串, + 如果第i+1个字符串不以dp[i]为前缀,就去掉dp[i]的最后一个字符再试一次 + 都去完了那么dp[i+1]肯定就是空串了,也就等于这时候的dp[i],因为dp[i]的每个字符已经被去完了''' + if not strs or strs == None: + return '' + dp = [strs[0]]*len(strs) + for i in range(1,len(strs)): + while not strs[i].startswith(dp[i-1]): + dp[i-1] = dp[i-1][:-1] + dp[i] = dp[i-1] + return dp[len(strs)-1] ``` + 看一下别人写的优雅程度 佳 From 738e3ee5cafe59b121464e36f012ccae14398973 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 20:42:13 -0600 Subject: [PATCH 0069/2496] Update 014._longest_common_prefix.md --- 014._longest_common_prefix.md | 51 +++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/014._longest_common_prefix.md b/014._longest_common_prefix.md index 7f1ff76f4..acafdc097 100644 --- a/014._longest_common_prefix.md +++ b/014._longest_common_prefix.md @@ -12,9 +12,34 @@ Easy 思路: -找出最短的string,然后一个一个对比,缺点是时间复杂度会比较高,AC代码,这代码优雅程度也是负数啊 +以一个小例子来解释,strs=['laa', 'lab', 'lac'], 如果存在LCP的话它肯定就在第一个字符串strs[0]中,并且LCP的长度肯定不会大于strs[0]的长度 +- 依次假设LCP长度为0到len(strs[0]),在每一轮循环中: +-   -只要strs中存在比当前长度i更短的string,立刻返回上一轮LCP,即strs[0][:i] +    -只要strs中存在当前index字符与LCP该index不相同的字符串,立刻返回上一轮LCP,即strs[0][:i] +如果一直没返回,说明strs[0]本身就是LCP,返回它 +``` +class Solution(object): + def longestCommonPrefix(self, strs): + """ + :type strs: List[str] + :rtype: str + """ + if not strs: + return "" + for i in range(len(strs[0])): + for str in strs: + if len(str) <= i or strs[0][i] != str[i]: + return strs[0][:i] + return strs[0] + +``` + +#### 解法2: +- dp[i]代表前i个字符串的最大前缀串, +- 如果第i+1个字符串不以dp[i]为前缀,就去掉dp[i]的最后一个字符再试一次 +- 都去完了那么dp[i+1]肯定就是空串了,也就等于这时候的dp[i],因为dp[i]的每个字符已经被去完了 ```python class Solution(object): def longestCommonPrefix(self, strs): @@ -22,10 +47,8 @@ class Solution(object): :type strs: List[str] :rtype: str """ - '''dp[i]代表前i个字符串的最大前缀串, - 如果第i+1个字符串不以dp[i]为前缀,就去掉dp[i]的最后一个字符再试一次 - 都去完了那么dp[i+1]肯定就是空串了,也就等于这时候的dp[i],因为dp[i]的每个字符已经被去完了''' - if not strs or strs == None: + + if not strs: return '' dp = [strs[0]]*len(strs) for i in range(1,len(strs)): @@ -37,26 +60,8 @@ class Solution(object): -看一下别人写的优雅程度 佳 -``` -class Solution(object): - def longestCommonPrefix(self, strs): - """ - :type strs: List[str] - :rtype: str - """ - if not strs: - return "" - longest = strs[0] - for i in range(len(strs[0])): - for str in strs: - if len(str) <= i or strs[0][i] != str[i]: - return strs[0][:i] - return strs[0] - -``` python无敌啊!!!有没有天理啊,手动滑稽😏😏😏😏!一行解法: From 5a17d52831c626a27f66a4f8a4a2022cfad4e94c Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 20:43:28 -0600 Subject: [PATCH 0070/2496] =?UTF-8?q?Update=20=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\346\200\273\347\273\223.md" | 3 +++ 1 file changed, 3 insertions(+) diff --git "a/\346\200\273\347\273\223.md" "b/\346\200\273\347\273\223.md" index 6621c78e4..2d86b7207 100644 --- "a/\346\200\273\347\273\223.md" +++ "b/\346\200\273\347\273\223.md" @@ -1,2 +1,5 @@ # 1 solution下自定义函数func(self, fargs, *args, **kwargs), 调用时self.func()的格式 + +# 2 +not fargs 和 fargs == None不一样,前者可能为[], '', 0等等 From 6ffffe1230afb27c1bff147df907cf25525c8b1a Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 20:44:08 -0600 Subject: [PATCH 0071/2496] =?UTF-8?q?Update=20=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\346\200\273\347\273\223.md" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/\346\200\273\347\273\223.md" "b/\346\200\273\347\273\223.md" index 2d86b7207..436593603 100644 --- "a/\346\200\273\347\273\223.md" +++ "b/\346\200\273\347\273\223.md" @@ -1,5 +1,5 @@ # 1 -solution下自定义函数func(self, fargs, *args, **kwargs), 调用时self.func()的格式 +```solution```下自定义函数```func(self, fargs, *args, **kwargs)```, 调用时使用```self.func()```的格式 # 2 -not fargs 和 fargs == None不一样,前者可能为[], '', 0等等 +```not fargs``` 和 ```fargs == None```不一样,前者可能为[], '', 0等等 From 21eabf212ddc57402f990aa1d70a9b04e248b20e Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 20:44:36 -0600 Subject: [PATCH 0072/2496] =?UTF-8?q?Update=20=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\346\200\273\347\273\223.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/\346\200\273\347\273\223.md" "b/\346\200\273\347\273\223.md" index 436593603..6875cbe28 100644 --- "a/\346\200\273\347\273\223.md" +++ "b/\346\200\273\347\273\223.md" @@ -2,4 +2,4 @@ ```solution```下自定义函数```func(self, fargs, *args, **kwargs)```, 调用时使用```self.func()```的格式 # 2 -```not fargs``` 和 ```fargs == None```不一样,前者可能为[], '', 0等等 +```not fargs``` 和 ```fargs == None```不一样,前者```fargs```可能为[], '', 0, etc From 76d35ef273793ae45cd3520e40cc1c3ead47ffc2 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 20:50:17 -0600 Subject: [PATCH 0073/2496] Update 014._longest_common_prefix.md --- 014._longest_common_prefix.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/014._longest_common_prefix.md b/014._longest_common_prefix.md index acafdc097..e439b5f8c 100644 --- a/014._longest_common_prefix.md +++ b/014._longest_common_prefix.md @@ -1,4 +1,4 @@ -###14. Longest Common Prefix +### 14. Longest Common Prefix 题目: @@ -47,7 +47,6 @@ class Solution(object): :type strs: List[str] :rtype: str """ - if not strs: return '' dp = [strs[0]]*len(strs) @@ -55,7 +54,7 @@ class Solution(object): while not strs[i].startswith(dp[i-1]): dp[i-1] = dp[i-1][:-1] dp[i] = dp[i-1] - return dp[len(strs)-1] + return dp[-1] ``` From 8955123b0488f91bea2e700054fee176115f37cb Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 20:51:56 -0600 Subject: [PATCH 0074/2496] Update 014._longest_common_prefix.md --- 014._longest_common_prefix.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/014._longest_common_prefix.md b/014._longest_common_prefix.md index e439b5f8c..a3df666d1 100644 --- a/014._longest_common_prefix.md +++ b/014._longest_common_prefix.md @@ -14,9 +14,10 @@ Easy 以一个小例子来解释,strs=['laa', 'lab', 'lac'], 如果存在LCP的话它肯定就在第一个字符串strs[0]中,并且LCP的长度肯定不会大于strs[0]的长度 - 依次假设LCP长度为0到len(strs[0]),在每一轮循环中: --   -只要strs中存在比当前长度i更短的string,立刻返回上一轮LCP,即strs[0][:i] -    -只要strs中存在当前index字符与LCP该index不相同的字符串,立刻返回上一轮LCP,即strs[0][:i] -如果一直没返回,说明strs[0]本身就是LCP,返回它 +   +- 1. 只要strs中存在比当前长度i更短的string,立刻返回上一轮LCP,即strs[0][:i] + 2. 只要strs中存在当前index字符与LCP该index不相同的字符串,立刻返回上一轮LCP,即strs[0][:i] +- 如果一直没返回,说明strs[0]本身就是LCP,返回它 ``` From d033cc43467db36d63418daaeac5075400559342 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 20:52:25 -0600 Subject: [PATCH 0075/2496] Update 014._longest_common_prefix.md --- 014._longest_common_prefix.md | 1 + 1 file changed, 1 insertion(+) diff --git a/014._longest_common_prefix.md b/014._longest_common_prefix.md index a3df666d1..18eb18f56 100644 --- a/014._longest_common_prefix.md +++ b/014._longest_common_prefix.md @@ -12,6 +12,7 @@ Easy 思路: +#### 解法1: 以一个小例子来解释,strs=['laa', 'lab', 'lac'], 如果存在LCP的话它肯定就在第一个字符串strs[0]中,并且LCP的长度肯定不会大于strs[0]的长度 - 依次假设LCP长度为0到len(strs[0]),在每一轮循环中:   From fccc88e29e852fed9eecfcc1cd301683588dbc32 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 20:56:59 -0600 Subject: [PATCH 0076/2496] Update 014._longest_common_prefix.md --- 014._longest_common_prefix.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/014._longest_common_prefix.md b/014._longest_common_prefix.md index 18eb18f56..a64997ef1 100644 --- a/014._longest_common_prefix.md +++ b/014._longest_common_prefix.md @@ -39,8 +39,8 @@ class Solution(object): ``` #### 解法2: -- dp[i]代表前i个字符串的最大前缀串, -- 如果第i+1个字符串不以dp[i]为前缀,就去掉dp[i]的最后一个字符再试一次 +- dp[i]代表前i+1个字符串的最大前缀串, +- 如果第i+2个字符串不以dp[i]为前缀,就去掉dp[i]的最后一个字符再试一次 - 都去完了那么dp[i+1]肯定就是空串了,也就等于这时候的dp[i],因为dp[i]的每个字符已经被去完了 ```python class Solution(object): From 03ee836e5a34537c34f052fdde5af21ac889da1a Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 21:55:45 -0600 Subject: [PATCH 0077/2496] Update 007._Reverse_Integer.md --- 007._Reverse_Integer.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/007._Reverse_Integer.md b/007._Reverse_Integer.md index 96060cc4f..4d655ef04 100644 --- a/007._Reverse_Integer.md +++ b/007._Reverse_Integer.md @@ -1,4 +1,4 @@ -###7. Reverse Integer +### 7. Reverse Integer 题目: @@ -11,8 +11,10 @@ Easy 思路 +翻转数字问题需要注意的就是溢出问题,为什么会存在溢出问题呢,我们知道int型的数值范围是 -2147483648~2147483647(负的2的31次方~2的31次方-1), 那么如果我们要翻转 1000000009 这个在范围内的数得到 9000000001,而翻转后的数就超过了范围。 + +#### 解法1: 如果输入的是负数,就递归调用原函数,参数变成-x即可 -最后要处理overflow ```python @@ -30,24 +32,22 @@ class Solution(object): x /= 10 return res if res <= 0x7fffffff else 0 ``` - +#### 解法2: +按照参数正负号先将其转成字符串,然后再反转,根据是否溢出决定输出0还是反转结果 ```python class Solution(object): - def reverse2(self, x): + def reverse(self, x): """ :type x: int :rtype: int - """ - if x < 0: - x = int(str(x)[::-1][-1] + str(x)[::-1][:-1]) - else: - x = int(str(x)[::-1]) + """ + x = -int(str(x)[::-1][:-1]) if x < 0 else int(str(x)[::-1]) x = 0 if abs(x) > 0x7FFFFFFF else x return x ``` ```python class Solution(object): - def reverse3(self, x): + def reverse(self, x): """ :type x: int :rtype: int From cd2ae50c9d24940d8700c9daf620be3cee50b4c0 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 22:01:08 -0600 Subject: [PATCH 0078/2496] Update 007._Reverse_Integer.md --- 007._Reverse_Integer.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/007._Reverse_Integer.md b/007._Reverse_Integer.md index 4d655ef04..df4154866 100644 --- a/007._Reverse_Integer.md +++ b/007._Reverse_Integer.md @@ -45,6 +45,8 @@ class Solution(object): x = 0 if abs(x) > 0x7FFFFFFF else x return x ``` +#### 解法3: +看这个解法前先看[backticks](https://docs.python.org/2.7/reference/expressions.html#string-conversions) ```python class Solution(object): def reverse(self, x): From b3b6977c1719e7f914e14bc44c347a43f743692e Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 22:02:55 -0600 Subject: [PATCH 0079/2496] Update 007._Reverse_Integer.md --- 007._Reverse_Integer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/007._Reverse_Integer.md b/007._Reverse_Integer.md index df4154866..82f6cbb66 100644 --- a/007._Reverse_Integer.md +++ b/007._Reverse_Integer.md @@ -45,7 +45,7 @@ class Solution(object): x = 0 if abs(x) > 0x7FFFFFFF else x return x ``` -#### 解法3: +#### 解法3(StefanPochmann大神): 看这个解法前先看[backticks](https://docs.python.org/2.7/reference/expressions.html#string-conversions) ```python class Solution(object): From 5680c451d04e9bada52ef843c93ba08e2e1a0cad Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 25 Nov 2017 22:06:38 -0600 Subject: [PATCH 0080/2496] Update 007._Reverse_Integer.md --- 007._Reverse_Integer.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/007._Reverse_Integer.md b/007._Reverse_Integer.md index 82f6cbb66..3b9b58273 100644 --- a/007._Reverse_Integer.md +++ b/007._Reverse_Integer.md @@ -47,6 +47,9 @@ class Solution(object): ``` #### 解法3(StefanPochmann大神): 看这个解法前先看[backticks](https://docs.python.org/2.7/reference/expressions.html#string-conversions) + + +cmp函数在python3.x中用不了了,import operator用gt或者lt吧,或者回归if/else condition爸爸的怀抱吧! ```python class Solution(object): def reverse(self, x): From 4de48070a939214755104afd0f0a6ee0173e093f Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 8 Dec 2017 00:38:46 -0600 Subject: [PATCH 0081/2496] Create 681._Next_Closest_Time.md --- 681._Next_Closest_Time.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 681._Next_Closest_Time.md diff --git a/681._Next_Closest_Time.md b/681._Next_Closest_Time.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/681._Next_Closest_Time.md @@ -0,0 +1 @@ + From 4f9a5c6d391925a7095086b8df6a90b7663ca469 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 8 Dec 2017 00:38:57 -0600 Subject: [PATCH 0082/2496] Update 001._two_sum.md --- 001._two_sum.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/001._two_sum.md b/001._two_sum.md index fdec21f60..b0d14b7d0 100644 --- a/001._two_sum.md +++ b/001._two_sum.md @@ -1,4 +1,4 @@ -###1. Two Sum +### 1. Two Sum 题目: From 323549a7d1c0f25b9905e209ec8ae7caf56d5103 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 8 Dec 2017 00:54:35 -0600 Subject: [PATCH 0083/2496] Update 681._Next_Closest_Time.md --- 681._Next_Closest_Time.md | 45 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/681._Next_Closest_Time.md b/681._Next_Closest_Time.md index 8b1378917..9fda4e0e3 100644 --- a/681._Next_Closest_Time.md +++ b/681._Next_Closest_Time.md @@ -1 +1,46 @@ +### 681. Next Closest Time + + +题目: + + + +难度: + +Medium + + + +思路 + +题目说输入一个时间,format是HH:MM, 然后输出接下来最近的一个时间,且这个时间的数字必须要在输入的时间中可以找到,所以我们用```h```, ```m``` +分别代表输入时间的小时数和分钟数,然后可以计算出输入时间的总分钟数```curr```,在未来的一天之内,我们一分钟一分钟往下面试,第一个满足的就直接 +作为结果就行了. + + + + +```python +class Solution(object): + def nextClosestTime(self, time): + """ + :type time: str + :rtype: str + """ + h, m = time.split(":") +        curr = int(h) * 60 + int(m) # 这里要注意h可能会是0开头的,如输入的时间为01:22,所以需要int(h)和int(m) +        result = None + for i in xrange(curr+1, curr+1441): + t = i % 1440 + h, m = t // 60, t % 60 + result = "%02d:%02d" % (h, m) + if set(result) <= set(time): + break + return result +``` + + + + + From 01c2de1712a52100094837500042d4c0c70ff58b Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 8 Dec 2017 01:46:25 -0600 Subject: [PATCH 0084/2496] Create 687._Longest_Univalue_Path.md --- 687._Longest_Univalue_Path.md | 58 +++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 687._Longest_Univalue_Path.md diff --git a/687._Longest_Univalue_Path.md b/687._Longest_Univalue_Path.md new file mode 100644 index 000000000..0b7a2eef5 --- /dev/null +++ b/687._Longest_Univalue_Path.md @@ -0,0 +1,58 @@ +### 687. Longest Univalue Path + + +题目: + + + +难度: + +Easy + + + +思路 + +这道题也只能算个```easy```题目,根据传进来的```root```,我们只要从它的左右节点不停的递归下去,只要其```value```值与```root```一样, +该方向上的```length```就加```1```,最后我们将左右方向上的```length```相加, 递归取最大值 +##### 很重要的一点就是,Note: The length of path between two nodes is represented by the number of edges between them. +- 因此是```self.res = max(self.res, left_arrow + right_arrow)```, ```return max(left_arrow, right_arrow)``` +- 而不是```self.res = max(self.res, left_arrow + right_arrow + 1)```, ```return max(left_arrow + 1, right_arrow + 1)``` + + + + + +```python +# Definition for a binary tree node. +# class TreeNode(object): +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None + +class Solution(object): + def longestUnivaluePath(self, root): + """ + :type root: TreeNode + :rtype: int + """ + self.res = 0 + def dir_length(node): + if not node: + return 0 + left_len = dir_length(node.left) # 左节点的length + right_len = dir_length(node.right) # 右节点的length + left_dir, right_dir = 0, 0 + if node.left and node.left.val == node.val: + left_dir = left_len + 1 # 当前节点的左节点方向的length + if node.right and node.right.val == node.val: + right_dir = right_len + 1 # 当前节点的右边节点方向的length + self.res = max(self.res, left_dir + right_dir) + return max(left_dir, right_dir) + dir_length(root) + return self.res +``` + + + From be327a69b691da50a86372a794e75d8f7991e633 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 8 Dec 2017 04:37:36 -0600 Subject: [PATCH 0085/2496] Update 020._valid_parentheses.md --- 020._valid_parentheses.md | 58 +++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/020._valid_parentheses.md b/020._valid_parentheses.md index 3e41265df..41413b6e3 100644 --- a/020._valid_parentheses.md +++ b/020._valid_parentheses.md @@ -1,29 +1,29 @@ -###20. Valid Parentheses - -题目: - - - - -难度: - -Easy - - -虽然知道肯定是用stack来解决,但是我是看了hint才自己解答的,因为可能想复杂了。 - -因为一共只有三种状况"(" -> ")", "[" -> "]", "{" -> "}". - -一遇到左括号就入栈,右括号出栈,这样来寻找对应 - -需要检查几件事: - -- 右括号时stack里还有没有东西 -- 出stack的是否对应 -- 最终stack是否为空 - - - +### 20. Valid Parentheses + +题目: + + + + +难度: + +Easy + + +思路: + +因为一共只有三种状况"(" -> ")", "[" -> "]", "{" -> "}". + +一遇到左括号就入栈,右括号出栈,这样来寻找对应 + +需要检查几件事: + +- 出现右括号时stack里还有没有东西 +- 出stack时是否对应 +- 最终stack是否为空 + + + ``` class Solution(object): def isValid(self, s): @@ -48,6 +48,6 @@ class Solution(object): return False elif char == "}" and item != "{": return False - return stack == [] -``` - + return stack == [] +``` + From 3504897b3e0ed15337f258fb5d71e35d9ef39ddc Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 8 Dec 2017 04:40:00 -0600 Subject: [PATCH 0086/2496] Update 020._valid_parentheses.md --- 020._valid_parentheses.md | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/020._valid_parentheses.md b/020._valid_parentheses.md index 41413b6e3..3b008ac91 100644 --- a/020._valid_parentheses.md +++ b/020._valid_parentheses.md @@ -10,7 +10,7 @@ Easy -思路: +### 思路: 因为一共只有三种状况"(" -> ")", "[" -> "]", "{" -> "}". @@ -24,29 +24,28 @@ Easy -``` +```python class Solution(object): def isValid(self, s): """ :type s: str :rtype: bool """ - leftP = "([{" - rightP = ")]}" - + leftP = '([{' + rightP = ')]}' stack = [] for char in s: if char in leftP: stack.append(char) - elif char in rightP: - if stack == []: - return False - item = stack.pop() - if char == "]" and item != "[": + if char in rightP: + if not stack: return False - elif char == ")" and item != "(": + tmp = stack.pop() + if char == ')' and tmp != '(': return False - elif char == "}" and item != "{": + if char == ']' and tmp != '[': + return False + if char == '}' and tmp != '{': return False return stack == [] ``` From b8d18af653deb08816103794e8697418f8543508 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 8 Dec 2017 05:01:11 -0600 Subject: [PATCH 0087/2496] Update 467._Unique_Substrings_in_Wraparound_String.md --- 467._Unique_Substrings_in_Wraparound_String.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/467._Unique_Substrings_in_Wraparound_String.md b/467._Unique_Substrings_in_Wraparound_String.md index a4d86d0ce..d7dd32c89 100644 --- a/467._Unique_Substrings_in_Wraparound_String.md +++ b/467._Unique_Substrings_in_Wraparound_String.md @@ -1,4 +1,4 @@ -###467. Unique Substrings in Wraparound String +### 467. Unique Substrings in Wraparound String 题目: @@ -9,7 +9,7 @@ Medium -思路 +思路: 有个无限长的字符串s,是由无数个「abcdefghijklmnopqrstuvwxyz」组成的。现在给你一个字符串p,求多少个p的非空子串在s中出现了?    @@ -29,7 +29,7 @@ class Solution(object): """        letters = [0] * 26         #开始默认每个都是0        length = 0 - for i in xrange(len(p)): + for i in range(len(p)): curr = ord(p[i]) - ord('a')            if i > 0 and ord(p[i-1]) != (curr-1)%26 + ord('a'):   #一旦开始不相等了就要将length重置为0                length = 0 From 69f44979763d429afa11ec0fc548efa33339d040 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 8 Dec 2017 05:01:24 -0600 Subject: [PATCH 0088/2496] Update 467._Unique_Substrings_in_Wraparound_String.md --- 467._Unique_Substrings_in_Wraparound_String.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/467._Unique_Substrings_in_Wraparound_String.md b/467._Unique_Substrings_in_Wraparound_String.md index d7dd32c89..85c7a9d97 100644 --- a/467._Unique_Substrings_in_Wraparound_String.md +++ b/467._Unique_Substrings_in_Wraparound_String.md @@ -20,7 +20,7 @@ Medium -``` +```python class Solution(object): def findSubstringInWraproundString(self, p): """ From a52fa5c4ee368e67e6dcfcc56fa4976ecb8d4c88 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 8 Dec 2017 05:02:37 -0600 Subject: [PATCH 0089/2496] Update 001._two_sum.md --- 001._two_sum.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/001._two_sum.md b/001._two_sum.md index b0d14b7d0..120db871d 100644 --- a/001._two_sum.md +++ b/001._two_sum.md @@ -24,7 +24,7 @@ lookup {2:0} [0,1] 一但字典内有了这个 `target - 当前数字`,找到它的index和当前index一起返回。 -``` +```python class Solution(object): def twoSum(self, nums, target): """ From 9c4152903a5eacc49d26eb4058c157be878a64f1 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 8 Dec 2017 05:03:17 -0600 Subject: [PATCH 0090/2496] Update 002._add_two_numbers.md --- 002._add_two_numbers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/002._add_two_numbers.md b/002._add_two_numbers.md index 534275a10..7ead7c7c4 100644 --- a/002._add_two_numbers.md +++ b/002._add_two_numbers.md @@ -1,4 +1,4 @@ -###2. Add Two Numbers +### 2. Add Two Numbers 题目: From 07647f67c91364182b141f6c47e323c6f14f1d06 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 8 Dec 2017 05:16:53 -0600 Subject: [PATCH 0091/2496] Update 004._median_of_two_sorted_arrays.md --- 004._median_of_two_sorted_arrays.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/004._median_of_two_sorted_arrays.md b/004._median_of_two_sorted_arrays.md index 4c59a14db..8ad14bbb6 100644 --- a/004._median_of_two_sorted_arrays.md +++ b/004._median_of_two_sorted_arrays.md @@ -1,4 +1,4 @@ -###4. Median of Two Sorted Arrays +### 4. Median of Two Sorted Arrays 题目: From fb79b9c3fca8ca74ac9df89bddb9300607f631e4 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 8 Dec 2017 05:32:08 -0600 Subject: [PATCH 0092/2496] Update 005._longest_palindromic_substring.md --- 005._longest_palindromic_substring.md | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/005._longest_palindromic_substring.md b/005._longest_palindromic_substring.md index eb240a4b0..14fd335f3 100644 --- a/005._longest_palindromic_substring.md +++ b/005._longest_palindromic_substring.md @@ -211,31 +211,29 @@ class Solution(object): """ def preProcess(s): if not s: - return ['^', '$'] + return ['^', '&'] T = ['^'] - for c in s: - T += ['#', c] + for i in s: + T += ['#', i] T += ['#', '$'] return T T = preProcess(s) P = [0] * len(T) id, mx = 0, 0 -        for i in range(1,len(T) - 1): #首尾两个字符不需要处理 -            j = 2*id - i + for i in range(1, len(T)-1): + j = 2 * id - i if mx > i: - P[i] = min(mx - i, P[j]) + P[i] = min(P[j], mx-i) else: - P[i] = 0 + P[i]= 0 while T[i+P[i]+1] == T[i-P[i]-1]: P[i] += 1 - if (i + P[i]) > mx: + if i + P[i] > mx: id, mx = i, i + P[i] -        max_i = 0 #保存的是当前最大回文子串中心位置的index -        for i in range(1, len(T)-1): - if P[i] > P[max_i]: - max_i = i + max_i = P.index(max(P)) #保存的是当前最大回文子串中心位置的index start = (max_i - P[max_i] - 1) / 2 - return s[start : start + P[max_i]] + res = s[start:start+P[max_i]] + return res ``` run code的时候结果会跟expected不一样,但是该input确实2个结果都可以,所以放心地submit吧 还可以转到[647题](https://github.com/Lisanaaa/thinking_in_lc/blob/master/647._Palindromic_Substrings.md)去看一看,也可以用这个算法解 From 110ed7486952119826fa1accc80930f19e55331f Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 8 Dec 2017 05:57:52 -0600 Subject: [PATCH 0093/2496] Update 647._Palindromic_Substrings.md --- 647._Palindromic_Substrings.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/647._Palindromic_Substrings.md b/647._Palindromic_Substrings.md index 424aa2f7d..d10f1790e 100644 --- a/647._Palindromic_Substrings.md +++ b/647._Palindromic_Substrings.md @@ -85,4 +85,4 @@ class Solution(object): 解释下为啥要加两次,因为回文串有以下两种形式: - ‘abcba’ - 'abba' - +那为啥要加那个1呢,上面解释过了,单个字符也算是一个回文子串呀,嘻嘻😁 From c5890c748d4bc39741477c6aa42a7ad2ebb8de3d Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 8 Dec 2017 05:58:09 -0600 Subject: [PATCH 0094/2496] Update 647._Palindromic_Substrings.md --- 647._Palindromic_Substrings.md | 1 + 1 file changed, 1 insertion(+) diff --git a/647._Palindromic_Substrings.md b/647._Palindromic_Substrings.md index d10f1790e..8ee312ad5 100644 --- a/647._Palindromic_Substrings.md +++ b/647._Palindromic_Substrings.md @@ -85,4 +85,5 @@ class Solution(object): 解释下为啥要加两次,因为回文串有以下两种形式: - ‘abcba’ - 'abba' + 那为啥要加那个1呢,上面解释过了,单个字符也算是一个回文子串呀,嘻嘻😁 From 6b8b1aaa10ac4ab2b95e9ecb7562efba141cedae Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 8 Dec 2017 06:19:44 -0600 Subject: [PATCH 0095/2496] Update 066._plus_one.md --- 066._plus_one.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/066._plus_one.md b/066._plus_one.md index af4f118ef..01954efa9 100644 --- a/066._plus_one.md +++ b/066._plus_one.md @@ -1,4 +1,4 @@ -###66. Plus One +### 66. Plus One 题目: @@ -8,9 +8,6 @@ -奇怪的AC了 -😄 -搞笑 —> 😓 这里是用的递归,很容易理解,如果空列表直接加1,最后一位小于9,那么直接就最后一位加1,否则添加一个0,然后再把余下的递归加1 From 74dfd5891f89f54776f7c26b8bd21df24b26670b Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 8 Dec 2017 06:19:56 -0600 Subject: [PATCH 0096/2496] Update 066._plus_one.md --- 066._plus_one.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/066._plus_one.md b/066._plus_one.md index 01954efa9..8897d3919 100644 --- a/066._plus_one.md +++ b/066._plus_one.md @@ -12,7 +12,7 @@ 这里是用的递归,很容易理解,如果空列表直接加1,最后一位小于9,那么直接就最后一位加1,否则添加一个0,然后再把余下的递归加1 -``` +```python class Solution(object): def plusOne(self, digits): From 32a26034a018030ffd15d560331f737525829b7b Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 8 Dec 2017 14:22:07 -0600 Subject: [PATCH 0097/2496] Create 388._Longest_Absolute_File_Path.md --- 388._Longest_Absolute_File_Path.md | 93 ++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 388._Longest_Absolute_File_Path.md diff --git a/388._Longest_Absolute_File_Path.md b/388._Longest_Absolute_File_Path.md new file mode 100644 index 000000000..b241055f7 --- /dev/null +++ b/388._Longest_Absolute_File_Path.md @@ -0,0 +1,93 @@ +### 388. Longest Absolute File Path + + +题目: + + + +难度: + +Medium + + + +思路 + +我们首先观察到每个```文件夹```或者是```文件```前面都会有一个```'\n'```, 还有对应其层数个数的```'\t'```. +- 所以首先根据```'\n'```分行,然后算出该```文件/文件夹```的层数```depth``` +- 如果是```文件```,我们需要更新```maxlen``` +- 如果是```文件夹```,我们需要更新该```depth```下的```pathlen``` + +### 程序变量解释 + +- ```maxlen``` 代表目前最大子串的长度 +- ```pathlen``` 每一个```depth```下对应的```path```长度 + +#### 特别需要注意的是,```'\t'```的长度是1 +有的人仍然会有疑问,每次碰到文件夹都直接更新```pathlen```会不会导致本来长的反而变得短了,但是我们可以看到字符串的排版格式,每层```path```都是严格有自己的分级的, +因此不会出现这样的问题。 +例如: +- The string ```"dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext"``` represents: +``` +dir + subdir1 + file1.ext + subsubdir1 + subdir2 + subsubdir2 + file2.ext +``` +其最大长度是```32```, ```"dir/subdir2/subsubdir2/file2.ext"``` + +- 如果变成```"dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir20\n\t\tsubsubdir2\n\t\t\tfile2.ext"```, + +``` +dir + subdir1 + file1.ext + subsubdir1 + subdir20 + subsubdir2 + file2.ext +``` + +最大长度就是```33```, +```"dir/subdir2/subsubdir20/file2.ext"``` + + +- 如果变成 +```"dir\n\tsubdir1000000000000\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext"``` + +``` +dir + subdir10000000000000 + file1.ext + subsubdir1 + subdir20 + subsubdir2 + file2.ext +``` + +最大长度就是```34```,```"dir/subdir10000000000000/file1.ext"``` + + +```python +class Solution(object): + def lengthLongestPath(self, input): + """ + :type input: str + :rtype: int + """ + maxlen = 0 + pathlen = {0 : 0} + for line in input.splitlines(): + name = line.lstrip('\t') + depth = len(line) - len(name) # 前面有几个'\t', depth就是几 + if '.' in name: + maxlen = max(maxlen, pathlen[depth] + len(name)) + else: + pathlen[depth+1] = pathlen[depth] + len(name) + 1 #加1是为了加上'\t'的长度 + return maxlen +``` + + From 7f53fcdc2d3000f9c9d2c25a610e58bb9ddda581 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 8 Dec 2017 15:58:43 -0600 Subject: [PATCH 0098/2496] =?UTF-8?q?Update=20Binary=20Search=20=E4=B8=8D?= =?UTF-8?q?=E6=98=93=E5=86=99.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "Binary Search \344\270\215\346\230\223\345\206\231.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/Binary Search \344\270\215\346\230\223\345\206\231.md" "b/Binary Search \344\270\215\346\230\223\345\206\231.md" index 9a09b8ac9..bd65c3c65 100644 --- "a/Binary Search \344\270\215\346\230\223\345\206\231.md" +++ "b/Binary Search \344\270\215\346\230\223\345\206\231.md" @@ -55,7 +55,7 @@ def binarySearch(nums, target): mid = l + ((r-l) >> 2) if nums[mid] > target: r = mid - 1 - elif: + elif nums[mid] < target: l = mid + 1 else: return mid From a3d49e9a076424a2f7e7faad7759b64da1ed4003 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 8 Dec 2017 18:28:17 -0600 Subject: [PATCH 0099/2496] Update 070. Climbing Stairs.md --- 070. Climbing Stairs.md | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/070. Climbing Stairs.md b/070. Climbing Stairs.md index 10df88fcc..0b80b4419 100644 --- a/070. Climbing Stairs.md +++ b/070. Climbing Stairs.md @@ -1,4 +1,4 @@ -###70. Climbing Stairs +### 70. Climbing Stairs 题目: @@ -12,10 +12,10 @@ Easy Fibonacci 的DP版本 -对于DP的不同理解造成不同的写法 - -- memoize - +对于DP的不同理解造成不同的写法 +Memoization will usually add on your time-complexity to your space-complexity (e.g. with tabulation you have more liberty to throw away calculations, like using tabulation with Fib lets you use O(1) space, but memoization with Fib uses O(N) stack space). +详看[Dynamic programming and memoization: bottom-up vs top-down approaches](https://stackoverflow.com/questions/6164629/dynamic-programming-and-memoization-bottom-up-vs-top-down-approaches) +- top-down(memorize) ``` memo = {} @@ -27,26 +27,23 @@ def fib(n): memo[n] = f return f ``` -- bottom up +- bottom up(tabulation) ``` fib = {} for k in range(n): if k <= 2 : f = 1 - else: f = fib[n-1] + fib[n-2] + else: f = fib[k-1] + fib[k-2] fib[k] = f -return fib(n) +return fib[n] ``` - -感觉针对这个问题,我觉得bottom up更容易理解一点,其实就是倒着往大的长树, - 这里memo用dict,用array也一样。当然用bottom up还有一点,可以只存每次最后两个数,可以save space.,这样就只用到constant space. AC 代码 -``` +```python class Solution(object): def climbStairs(self, n): """ @@ -54,12 +51,12 @@ class Solution(object): :rtype: int """ memo = {} + memo[2] = 2 memo[1] = 1 - memo[0] = 1 - for i in range(2,n+1): - f = memo[i-1] + memo[i-2] - memo[i] = f + for i in range(3,n+1): + f = memo[i-1] + memo[i-2] # 这里用一个临时变量f来存储值,所以不用像memorize方法一样一直保存着 + memo[i] = f # 因此永远只存每次最后两个数,save space return memo[n] ``` From 8b96d7ed852705288f2aa293293e6e00ea2049a9 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 8 Dec 2017 18:55:55 -0600 Subject: [PATCH 0100/2496] Update 070. Climbing Stairs.md --- 070. Climbing Stairs.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/070. Climbing Stairs.md b/070. Climbing Stairs.md index 0b80b4419..079c2ae10 100644 --- a/070. Climbing Stairs.md +++ b/070. Climbing Stairs.md @@ -59,6 +59,13 @@ class Solution(object): memo[i] = f # 因此永远只存每次最后两个数,save space return memo[n] ``` +- Complexity Analysis + - Time complexity : O(log(n))O(log(n)). powpow method takes log(n)log(n) time. + + - Space complexity : O(1)O(1). Constant space is used. +另外还有一个公式法: +$F_{n} = \cfrac{1}{\sqrt{5}}$ +质能方程$$E = mc^2$$ From d190a8ef8a7ade8293b6ddb2d235b564ed53e0f2 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 8 Dec 2017 19:58:26 -0600 Subject: [PATCH 0101/2496] Update 070. Climbing Stairs.md --- 070. Climbing Stairs.md | 82 ++++++++++++++++++++++++++--------------- 1 file changed, 52 insertions(+), 30 deletions(-) diff --git a/070. Climbing Stairs.md b/070. Climbing Stairs.md index 079c2ae10..6572b7ca8 100644 --- a/070. Climbing Stairs.md +++ b/070. Climbing Stairs.md @@ -14,34 +14,46 @@ Fibonacci 的DP版本 对于DP的不同理解造成不同的写法 Memoization will usually add on your time-complexity to your space-complexity (e.g. with tabulation you have more liberty to throw away calculations, like using tabulation with Fib lets you use O(1) space, but memoization with Fib uses O(N) stack space). -详看[Dynamic programming and memoization: bottom-up vs top-down approaches](https://stackoverflow.com/questions/6164629/dynamic-programming-and-memoization-bottom-up-vs-top-down-approaches) +详看 + +[Dynamic programming and memoization: bottom-up vs top-down approaches](https://awjin.me/algos-js/dp/tab-memo.html) + +[Tabulation vs Memoizatation](http://www.geeksforgeeks.org/tabulation-vs-memoizatation/) - top-down(memorize) ``` -memo = {} -def fib(n): - if n in memo: return memo[n] - else: - if n <= 2 : f = 1 - else: f = fib(n-1) + fib(n-2) - memo[n] = f - return f +def memorize_fib(n): # n为第几个Fibonacci数 + memo = {1:1, 2:1} + if n in memo: + return memo[n] + else: + memo[n] = memorize_fib(n-1) + memorize_fib(n-2) + return memo[n] + +print(memorize_fib(4)) ``` +输出```3``` + + - bottom up(tabulation) ``` -fib = {} -for k in range(n): - if k <= 2 : f = 1 - else: f = fib[k-1] + fib[k-2] - fib[k] = f -return fib[n] +def tabulation_fib(n): # n为第几个Fibonacci数 + fib = [1, 1, 2] + if n < 4: + return fib[n-1] + for k in range(3, n+1): + fib[2] = fib[0] + fib[1] + fib[0], fib[1] = fib[1], fib[2] + return fib[2] + +print(tabulation_fib(4)) ``` - +输出```3``` 这里memo用dict,用array也一样。当然用bottom up还有一点,可以只存每次最后两个数,可以save space.,这样就只用到constant space. -AC 代码 +AC 代码(这里采用bottom up思想) ```python class Solution(object): @@ -50,22 +62,32 @@ class Solution(object): :type n: int :rtype: int """ - memo = {} - memo[2] = 2 - memo[1] = 1 - - for i in range(3,n+1): - f = memo[i-1] + memo[i-2] # 这里用一个临时变量f来存储值,所以不用像memorize方法一样一直保存着 - memo[i] = f # 因此永远只存每次最后两个数,save space - return memo[n] + fib = [1, 1, 2] + if n < 4: + return fib[n-1] + for k in range(3, n+1): + fib[2] = fib[0] + fib[1] + fib[0], fib[1] = fib[1], fib[2] + return fib[2] ``` - Complexity Analysis - - Time complexity : O(log(n))O(log(n)). powpow method takes log(n)log(n) time. + - Time complexity : O(n) - - Space complexity : O(1)O(1). Constant space is used. + - Space complexity : O(1). Constant space is used. 另外还有一个公式法: -$F_{n} = \cfrac{1}{\sqrt{5}}$ -质能方程$$E = mc^2$$ - +![]() +由于这里面相当于```standard Fibonacci```函数向前进了一步,排列为1,2,3,5而非原本的1,1,2,3,所以用```n+1``` +```python +class Solution(object): + def climbStairs(self, n): + """ + :type n: int + :rtype: int + """ + import math + sqrt5 = math.sqrt(5) + fibn = pow((1 + sqrt5) / 2, n+1) - pow((1 - sqrt5) / 2, n+1) + return int(float(fibn/sqrt5)) +``` From 060e65ea4835a1733821b04eeb607ddeda841a60 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 8 Dec 2017 20:00:31 -0600 Subject: [PATCH 0102/2496] Update 070. Climbing Stairs.md --- 070. Climbing Stairs.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/070. Climbing Stairs.md b/070. Climbing Stairs.md index 6572b7ca8..71e4937ad 100644 --- a/070. Climbing Stairs.md +++ b/070. Climbing Stairs.md @@ -66,8 +66,8 @@ class Solution(object): if n < 4: return fib[n-1] for k in range(3, n+1): - fib[2] = fib[0] + fib[1] - fib[0], fib[1] = fib[1], fib[2] +            fib[2] = fib[0] + fib[1]             # 永远只存3个元素,save space +            fib[0], fib[1] = fib[1], fib[2] return fib[2] ``` - Complexity Analysis @@ -90,4 +90,8 @@ class Solution(object): fibn = pow((1 + sqrt5) / 2, n+1) - pow((1 - sqrt5) / 2, n+1) return int(float(fibn/sqrt5)) ``` +- Complexity Analysis + + - Time complexity : O(lg(n)). pow method takes log(n) time. + - Space complexity : O(1). Constant space is used. From a2ba81282d6437d1c482bb454388f3ee41bcb425 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 8 Dec 2017 20:04:58 -0600 Subject: [PATCH 0103/2496] Update 070. Climbing Stairs.md --- 070. Climbing Stairs.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/070. Climbing Stairs.md b/070. Climbing Stairs.md index 71e4937ad..7e6a216a8 100644 --- a/070. Climbing Stairs.md +++ b/070. Climbing Stairs.md @@ -76,8 +76,10 @@ class Solution(object): - Space complexity : O(1). Constant space is used. 另外还有一个公式法: -![]() -由于这里面相当于```standard Fibonacci```函数向前进了一步,排列为1,2,3,5而非原本的1,1,2,3,所以用```n+1``` + +![](https://github.com/Lisanaaa/myTODOs/blob/master/41512784914_.pic.jpg) + +由于这里面相当于```standard Fibonacci```函数向前进了一步,排列为1,2,3,5而非原本的1,1,2,3,所以代码中使用```n+1``` ```python class Solution(object): def climbStairs(self, n): From ae41f7e2ca3c775f4402d903329190b0cc1def31 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 8 Dec 2017 20:16:29 -0600 Subject: [PATCH 0104/2496] Update 070. Climbing Stairs.md --- 070. Climbing Stairs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/070. Climbing Stairs.md b/070. Climbing Stairs.md index 7e6a216a8..890b2f338 100644 --- a/070. Climbing Stairs.md +++ b/070. Climbing Stairs.md @@ -62,7 +62,7 @@ class Solution(object): :type n: int :rtype: int """ - fib = [1, 1, 2] + fib = [1, 2, 3] if n < 4: return fib[n-1] for k in range(3, n+1): From 07f2fb0fd0242542d7480c6c52b09ad47810a1cb Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 9 Dec 2017 17:15:52 -0600 Subject: [PATCH 0105/2496] Update 100._same_tree.md --- 100._same_tree.md | 51 ++++++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/100._same_tree.md b/100._same_tree.md index 47dc25545..ecc8c94f8 100644 --- a/100._same_tree.md +++ b/100._same_tree.md @@ -1,19 +1,26 @@ -###100. Same Tree - -题目: - - - - -难度: - -Easy - - -递归 - - -``` +### 100. Same Tree + +题目: + + + + +难度: + +Easy + + +太简单了,递归一行! + + +```python +# Definition for a binary tree node. +# class TreeNode(object): +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None + class Solution(object): def isSameTree(self, p, q): """ @@ -21,12 +28,6 @@ class Solution(object): :type q: TreeNode :rtype: bool """ - if p == None or q == None: - if p == None and q == None: - return True - else: - return False - else: - return p.val == q.val and self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right) -``` - + return p.val == q.val and all(map(self.isSameTree, (p.left, p.right), (q.left, q.right))) if p and q else p is q +``` + From 7efe665f296e9490e37eac5fd81e85808d5cfa76 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 9 Dec 2017 17:41:46 -0600 Subject: [PATCH 0106/2496] Update 111._minimum_depth_of_binary_tree.md --- 111._minimum_depth_of_binary_tree.md | 57 ++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 4 deletions(-) diff --git a/111._minimum_depth_of_binary_tree.md b/111._minimum_depth_of_binary_tree.md index a04d4164e..9fae7348e 100644 --- a/111._minimum_depth_of_binary_tree.md +++ b/111._minimum_depth_of_binary_tree.md @@ -1,4 +1,4 @@ -###111. Minimum Depth of Binary Tree +### 111. Minimum Depth of Binary Tree 题目: @@ -8,7 +8,24 @@ Easy -注意leaf node反正就是没有left和right的 + +思路,看完题目我想当然的认为就是直接递归取最小的值,代码如下: +``` +class Solution(object): + def minDepth(self, root): + """ + :type root: TreeNode + :rtype: int + """ + if not root: + return 0 + return 1 + min(map(self.minDepth, (root.left, root.right))) +``` + + +但是没过,有一种特殊情况就是 + +注意```leaf node```反正就是没有```left```和```right```的 比如下图 @@ -19,10 +36,42 @@ Easy 2 ``` -2是一个孩子节点 +```2```是一个孩子节点 + +这种情况应该输出```2```而不是```1``` + +唯一的特殊情况就是上面这种了,因为```root```下只有一个左节点或者是右节点,这样另外一边的空节点并不算是```leaf node``` + +```leaf node: itself is not null but it has both children null``` + +因此要避免这种情况,代码改成下面: + + +```python +# Definition for a binary tree node. +# class TreeNode(object): +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None + +class Solution(object): + def minDepth(self, root): + """ + :type root: TreeNode + :rtype: int + """ + if not root: + return 0 + len_under_root = map(self.minDepth, (root.left, root.right)) + return 1 + (min(len_under_root) or max(len_under_root)) ``` + + +所以还是要养成多写edge case的好习惯,也许就帮你避免了general写法的特例,代码如下 +```python class Solution(object): def minDepth(self, root): """ @@ -41,4 +90,4 @@ class Solution(object): else: return min(1+ self.minDepth(root.left), 1+ self.minDepth(root.right)) -``` \ No newline at end of file +``` From de42d32ec8a2d2b7a8e8e12ba28190a457686144 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 9 Dec 2017 20:56:58 -0600 Subject: [PATCH 0107/2496] Update 111._minimum_depth_of_binary_tree.md --- 111._minimum_depth_of_binary_tree.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/111._minimum_depth_of_binary_tree.md b/111._minimum_depth_of_binary_tree.md index 9fae7348e..d84421b0c 100644 --- a/111._minimum_depth_of_binary_tree.md +++ b/111._minimum_depth_of_binary_tree.md @@ -51,6 +51,7 @@ class Solution(object): ```python # Definition for a binary tree node. +# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x @@ -65,8 +66,8 @@ class Solution(object): """ if not root: return 0 - len_under_root = map(self.minDepth, (root.left, root.right)) - return 1 + (min(len_under_root) or max(len_under_root)) + depth_under_root = map(self.minDepth, (root.left, root.right)) + return 1 + (min(depth_under_root) or max(depth_under_root)) ``` From 1fe5dd18188c9a2425171e83b56c5d6d6390fab6 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 10 Dec 2017 00:45:12 -0600 Subject: [PATCH 0108/2496] Update 033._search_in_rotated_sorted_array.md --- 033._search_in_rotated_sorted_array.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/033._search_in_rotated_sorted_array.md b/033._search_in_rotated_sorted_array.md index c3e076259..8505bcfee 100644 --- a/033._search_in_rotated_sorted_array.md +++ b/033._search_in_rotated_sorted_array.md @@ -11,15 +11,16 @@ Medium 思路: -最直观的是O(N)解法 -but tag是binary search,应该和find min in rotated array类似。 -判断是否有序,然后做二分。 -最容易理解的写法 +下面是rotated-array图解, +![rotated-array图解](https://github.com/Lisanaaa/myTODOs/blob/master/rotated-array12:09:2017.jpg) + + +所以直接用二分,O(lg(n)) - 如果是mid,return mid -- 左边有序,判断是否在左边,否则在右边中寻找 -- 右边有序,判断是否在右边,否则在左边寻找 +- 如果mid在绿色线上,就对绿色线进行二分 +- 如果mid在红色线上,就对红色线进行二分 - 都没找到,return -1 From ccefaaf09964b38b6aa34a2ad16808947af95ba3 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 10 Dec 2017 00:45:20 -0600 Subject: [PATCH 0109/2496] Update 033._search_in_rotated_sorted_array.md --- 033._search_in_rotated_sorted_array.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/033._search_in_rotated_sorted_array.md b/033._search_in_rotated_sorted_array.md index 8505bcfee..a66bec92e 100644 --- a/033._search_in_rotated_sorted_array.md +++ b/033._search_in_rotated_sorted_array.md @@ -1,4 +1,4 @@ -###33. Search in Rotated Sorted Array +### 33. Search in Rotated Sorted Array 题目: From ed0204bee2a3db11b789cbbba16476e34e3f6316 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 10 Dec 2017 00:53:41 -0600 Subject: [PATCH 0110/2496] Update 033._search_in_rotated_sorted_array.md --- 033._search_in_rotated_sorted_array.md | 33 +++++++++++++------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/033._search_in_rotated_sorted_array.md b/033._search_in_rotated_sorted_array.md index a66bec92e..c2e6eb74c 100644 --- a/033._search_in_rotated_sorted_array.md +++ b/033._search_in_rotated_sorted_array.md @@ -24,7 +24,7 @@ Medium - 都没找到,return -1 -``` +```python class Solution(object): def search(self, nums, target): """ @@ -32,22 +32,21 @@ class Solution(object): :type target: int :rtype: int """ - l,r = 0, len(nums) - 1 - - while l <= r : - mid = (l+r)/2 - if target == nums[mid]: - return mid - if nums[mid] < nums[r]: - if nums[mid] < target <= nums[r]: - l = mid + 1 - else: - r = mid - 1 - else: - if nums[l] <= target < nums[mid]: - r = mid - 1 - else: - l = mid + 1 + l, r = 0, len(nums) - 1 + while l <= r: + mid = l + ((r - l) >> 2) + if nums[mid] == target: + return mid + if nums[mid] < nums[r]: + if nums[mid] < target <= nums[r]: + l = mid + 1 + else: + r = mid - 1 + else: + if nums[l] <= target < nums[mid]: + r = mid - 1 + else: + l = mid + 1 return -1 ``` From bff7fa99628fd4b586f71e4ac90c4c4ebf9963db Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 10 Dec 2017 10:31:30 -0600 Subject: [PATCH 0111/2496] Rename 034. Search for a Range.md to 034._Search for a Range.md --- 034. Search for a Range.md => 034._Search for a Range.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename 034. Search for a Range.md => 034._Search for a Range.md (100%) diff --git a/034. Search for a Range.md b/034._Search for a Range.md similarity index 100% rename from 034. Search for a Range.md rename to 034._Search for a Range.md From fcaec8c452a77e3cb5a790f5a0659d3cf1880ac3 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 10 Dec 2017 22:36:16 -0600 Subject: [PATCH 0112/2496] Update 034._Search for a Range.md --- 034._Search for a Range.md | 42 ++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/034._Search for a Range.md b/034._Search for a Range.md index 99685e45d..06d2ae990 100644 --- a/034._Search for a Range.md +++ b/034._Search for a Range.md @@ -33,11 +33,14 @@ - middle的计算不能写在while循环外,否则无法得到更新。 - ​ +------------------------------------- AC 代码 -``` + + + +```python class Solution(object): def searchRange(self, nums, target): """ @@ -47,33 +50,32 @@ class Solution(object): """ if not nums : return [-1, -1] - result = [] - l, r = 0, len(nums) - - while l < r: - mid = (l + r) // 2 + res = [] + l, r = 0, len(nums)-1 + # search for left bound + while l <= r: + mid = l + ((r - l) >> 2) if nums[mid] == target and (mid == 0 or nums[mid-1] != target): - result.append(mid) + res.append(mid) break if nums[mid] < target: l = mid + 1 else: - r = mid - if not result: + r = mid - 1 + if not res: return [-1, -1] - - l,r = 0, len(nums) - while l < r: - mid = ( l + r )// 2 + # search for right bound + r = len(nums)-1 + while l <= r: + mid = l + ((r - l) >> 2) if nums[mid] == target and (mid == len(nums)-1 or nums[mid+1] != target): - result.append(mid) + res.append(mid) break - if nums[mid] <= target: - l = mid + 1 + if nums[mid] > target: + r = mid - 1 else: - r = mid - - return result + l = mid + 1 + return res ``` From daccf9bfce9bcefccebc1892a206fc681db76392 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 10 Dec 2017 23:06:51 -0600 Subject: [PATCH 0113/2496] Update 034._Search for a Range.md --- 034._Search for a Range.md | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/034._Search for a Range.md b/034._Search for a Range.md index 06d2ae990..b351b937f 100644 --- a/034._Search for a Range.md +++ b/034._Search for a Range.md @@ -14,27 +14,20 @@ 思路: -一开始想啊想,觉得虽然用到了二分,但都不是O(logN) +二分法,先找```target```出现的左边界,判断是否有```target```后再判断右边界 -后来看到hint: +- 1. 找左边界:二分,找到一个```index``` + - 1.1 该```index```对应的值为```target``` +    - 1.2 并且它左边```index-1```对应的值不是```target```(如果index为0则此不需要判断此条件) +    - 1.3 如果存在```index```就将其```append```到```res```中 +- 2. 判断此时res是否为空,如果为空,说明压根不存在target,返回```[-1, -1]``` +- 3. 找右边界:二分,找到一个```index```(但是此时用于二分循环的```l```可以保持不变,```r```重置为```len(nums)-1```,这样程序可以更快一些) +    - 3.1 该```index```对应的值为```target``` +    - 3.2 并且它右边```index-1```对应的值不是```target```(如果```index```为```len(nums)-1```则此不需要判断此条件) +    - 3.3 如果存在```index```就将其```append```到```res```中 -> 采用两次二分查找。首先二分找到第一个该值出现的位置,譬如m,然后在[m, n)区间内第二次二分找到最后一个该值出现的位置。 - -二分查找其实不容易写对,看到哪里写的,其实是的,有要点: - - - -- 关于right的赋值 - -- - right = n-1 => while(left <= right) => right = middle-1; - - right = n => while(left < right) => right = middle; - -- middle的计算不能写在while循环外,否则无法得到更新。 - -------------------------------------- - AC 代码 From 51cdc8b1cf7c42d89ba90827dd5f00b89eff1ca1 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 10 Dec 2017 23:09:24 -0600 Subject: [PATCH 0114/2496] Update 034._Search for a Range.md --- 034._Search for a Range.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/034._Search for a Range.md b/034._Search for a Range.md index b351b937f..2a0813478 100644 --- a/034._Search for a Range.md +++ b/034._Search for a Range.md @@ -16,15 +16,15 @@ 二分法,先找```target```出现的左边界,判断是否有```target```后再判断右边界 -- 1. 找左边界:二分,找到一个```index``` - - 1.1 该```index```对应的值为```target``` -    - 1.2 并且它左边```index-1```对应的值不是```target```(如果index为0则此不需要判断此条件) -    - 1.3 如果存在```index```就将其```append```到```res```中 -- 2. 判断此时res是否为空,如果为空,说明压根不存在target,返回```[-1, -1]``` -- 3. 找右边界:二分,找到一个```index```(但是此时用于二分循环的```l```可以保持不变,```r```重置为```len(nums)-1```,这样程序可以更快一些) -    - 3.1 该```index```对应的值为```target``` -    - 3.2 并且它右边```index-1```对应的值不是```target```(如果```index```为```len(nums)-1```则此不需要判断此条件) -    - 3.3 如果存在```index```就将其```append```到```res```中 +- 找左边界:二分,找到一个```index``` + - 该```index```对应的值为```target``` + - 并且它左边```index-1```对应的值不是```target```(如果```index```为```0```则此不需要判断此条件) + - 如果存在```index```就将其```append```到```res```中 +- 判断此时```res```是否为空,如果为空,说明压根不存在```target```,返回```[-1, -1]``` +- 找右边界:二分,找到一个```index```(但是此时用于二分循环的```l```可以保持不变,```r```重置为```len(nums)-1```,这样程序可以更快一些) + - 该```index```对应的值为```target``` + - 并且它右边```index-1```对应的值不是```target```(如果```index```为```len(nums)-1```则此不需要判断此条件) + - 如果存在```index```就将其```append```到```res```中 From ebbf48ba07d4af200940d527208d1fb2d5b765e7 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 24 Dec 2017 12:19:31 -0600 Subject: [PATCH 0115/2496] Update 007._Reverse_Integer.md --- 007._Reverse_Integer.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/007._Reverse_Integer.md b/007._Reverse_Integer.md index 3b9b58273..f4120c1ea 100644 --- a/007._Reverse_Integer.md +++ b/007._Reverse_Integer.md @@ -41,8 +41,8 @@ class Solution(object): :type x: int :rtype: int """ - x = -int(str(x)[::-1][:-1]) if x < 0 else int(str(x)[::-1]) - x = 0 if abs(x) > 0x7FFFFFFF else x +        x = -int(str(x)[::-1][:-1]) if x < 0 else int(str(x)[::-1]) # [:-1]相当于把负号去掉 +        x = 0 if abs(x) > 0x7FFFFFFF else x return x ``` #### 解法3(StefanPochmann大神): From a306867bf5525663c02d18fd0a618155c2381e6d Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 24 Dec 2017 12:44:05 -0600 Subject: [PATCH 0116/2496] Update 388._Longest_Absolute_File_Path.md --- 388._Longest_Absolute_File_Path.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/388._Longest_Absolute_File_Path.md b/388._Longest_Absolute_File_Path.md index b241055f7..7d92da63a 100644 --- a/388._Longest_Absolute_File_Path.md +++ b/388._Longest_Absolute_File_Path.md @@ -86,7 +86,7 @@ class Solution(object): if '.' in name: maxlen = max(maxlen, pathlen[depth] + len(name)) else: - pathlen[depth+1] = pathlen[depth] + len(name) + 1 #加1是为了加上'\t'的长度 +                pathlen[depth+1] = pathlen[depth] + len(name) + 1   #加1是为了加上一个path分隔符'/'的长度 return maxlen ``` From 3aa960f05f33b682091a85eee08b1bef9bfdaf0d Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 24 Dec 2017 14:31:44 -0600 Subject: [PATCH 0117/2496] Update 034._Search for a Range.md --- 034._Search for a Range.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/034._Search for a Range.md b/034._Search for a Range.md index 2a0813478..e5a7048b1 100644 --- a/034._Search for a Range.md +++ b/034._Search for a Range.md @@ -18,12 +18,12 @@ - 找左边界:二分,找到一个```index``` - 该```index```对应的值为```target``` - - 并且它左边```index-1```对应的值不是```target```(如果```index```为```0```则此不需要判断此条件) + - 并且它左边```index-1```对应的值不是```target```(如果```index```为```0```则不需要判断此条件) - 如果存在```index```就将其```append```到```res```中 - 判断此时```res```是否为空,如果为空,说明压根不存在```target```,返回```[-1, -1]``` - 找右边界:二分,找到一个```index```(但是此时用于二分循环的```l```可以保持不变,```r```重置为```len(nums)-1```,这样程序可以更快一些) - 该```index```对应的值为```target``` - - 并且它右边```index-1```对应的值不是```target```(如果```index```为```len(nums)-1```则此不需要判断此条件) + - 并且它右边```index+1```对应的值不是```target```(如果```index```为```len(nums)-1```则不需要判断此条件) - 如果存在```index```就将其```append```到```res```中 From 7e2d1238ff4e86824965e3ac954135c1f7a969e6 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 26 Dec 2017 16:01:25 -0600 Subject: [PATCH 0118/2496] Update 011._container_with_most_water.md --- 011._container_with_most_water.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/011._container_with_most_water.md b/011._container_with_most_water.md index ef6efbc71..218045aa7 100644 --- a/011._container_with_most_water.md +++ b/011._container_with_most_water.md @@ -1,4 +1,4 @@ -###11. Container With Most Water +### 11. Container With Most Water @@ -23,7 +23,7 @@ height = [3,2,1,3] | | | | | | | | | - 1 2 3 4 + 1 2 3 4 一开始我的理解走偏的地方是这个9是如何得到的,因为根据最短板原理,明显不可能得到9啊,后来发现是·Find two lines, which together with x-axis forms a container, such that the container contains the most water. ``` @@ -106,4 +106,4 @@ class Solution(object): return mostWater -``` \ No newline at end of file +``` From aae1a243663017295ecdea5b47893b434778e3b5 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 26 Dec 2017 16:04:40 -0600 Subject: [PATCH 0119/2496] Update 011._container_with_most_water.md --- 011._container_with_most_water.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/011._container_with_most_water.md b/011._container_with_most_water.md index 218045aa7..9c6a3bed9 100644 --- a/011._container_with_most_water.md +++ b/011._container_with_most_water.md @@ -25,7 +25,7 @@ height = [3,2,1,3] | | | | 1 2 3 4 - 一开始我的理解走偏的地方是这个9是如何得到的,因为根据最短板原理,明显不可能得到9啊,后来发现是·Find two lines, which together with x-axis forms a container, such that the container contains the most water. + 一开始我的理解走偏的地方是这个9是如何得到的,因为根据最短板原理,明显不可能得到9,后来发现是·Find two lines, which together with x-axis forms a container, such that the container contains the most water. ``` 所以代码写起来就简单了,AC无能,超时,时间复杂度O(N^2) From 32681bc30a5afc4f6a32d111519ff98323892334 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 26 Dec 2017 16:05:04 -0600 Subject: [PATCH 0120/2496] Update 011._container_with_most_water.md --- 011._container_with_most_water.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/011._container_with_most_water.md b/011._container_with_most_water.md index 9c6a3bed9..218045aa7 100644 --- a/011._container_with_most_water.md +++ b/011._container_with_most_water.md @@ -25,7 +25,7 @@ height = [3,2,1,3] | | | | 1 2 3 4 - 一开始我的理解走偏的地方是这个9是如何得到的,因为根据最短板原理,明显不可能得到9,后来发现是·Find two lines, which together with x-axis forms a container, such that the container contains the most water. + 一开始我的理解走偏的地方是这个9是如何得到的,因为根据最短板原理,明显不可能得到9啊,后来发现是·Find two lines, which together with x-axis forms a container, such that the container contains the most water. ``` 所以代码写起来就简单了,AC无能,超时,时间复杂度O(N^2) From 4d4282fa3decaec4b0c18f6f50843ad98f126bb9 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 26 Dec 2017 16:05:33 -0600 Subject: [PATCH 0121/2496] Update 011._container_with_most_water.md --- 011._container_with_most_water.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/011._container_with_most_water.md b/011._container_with_most_water.md index 218045aa7..3e5341855 100644 --- a/011._container_with_most_water.md +++ b/011._container_with_most_water.md @@ -23,7 +23,7 @@ height = [3,2,1,3] | | | | | | | | | - 1 2 3 4 + 1 2 3 4 一开始我的理解走偏的地方是这个9是如何得到的,因为根据最短板原理,明显不可能得到9啊,后来发现是·Find two lines, which together with x-axis forms a container, such that the container contains the most water. ``` From e81ff76f92fe2ebb05c484d7a4063d2e38e5a6db Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 26 Dec 2017 16:06:21 -0600 Subject: [PATCH 0122/2496] Update 011._container_with_most_water.md --- 011._container_with_most_water.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/011._container_with_most_water.md b/011._container_with_most_water.md index 3e5341855..be51b2dca 100644 --- a/011._container_with_most_water.md +++ b/011._container_with_most_water.md @@ -20,10 +20,10 @@ height = [3,2,1,3] 解是 9 - | | - | | | - | | | | - 1 2 3 4 +| | +| | | +| | | | +1 2 3 4 一开始我的理解走偏的地方是这个9是如何得到的,因为根据最短板原理,明显不可能得到9啊,后来发现是·Find two lines, which together with x-axis forms a container, such that the container contains the most water. ``` From e9837d5008aba1596cd09efb70629d616443ff9d Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 26 Dec 2017 16:06:54 -0600 Subject: [PATCH 0123/2496] Update 011._container_with_most_water.md --- 011._container_with_most_water.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/011._container_with_most_water.md b/011._container_with_most_water.md index be51b2dca..784c0bc1e 100644 --- a/011._container_with_most_water.md +++ b/011._container_with_most_water.md @@ -23,7 +23,7 @@ height = [3,2,1,3] | | | | | | | | | -1 2 3 4 +1 2 3 4 一开始我的理解走偏的地方是这个9是如何得到的,因为根据最短板原理,明显不可能得到9啊,后来发现是·Find two lines, which together with x-axis forms a container, such that the container contains the most water. ``` From c70b03c7b358821c0d068d9d8c9b3456f35e6fd8 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 26 Dec 2017 16:17:10 -0600 Subject: [PATCH 0124/2496] Update 011._container_with_most_water.md --- 011._container_with_most_water.md | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/011._container_with_most_water.md b/011._container_with_most_water.md index 784c0bc1e..61ee3719d 100644 --- a/011._container_with_most_water.md +++ b/011._container_with_most_water.md @@ -62,20 +62,26 @@ class Solution(object): 由于ai和aj (i=i, j'<=j) >= S(i,j),由于j'-i' <= j-i,必然要有min(ai',aj')>=min(ai,aj)才行。同样可以采用头尾双指针向中间移动: +所以对于任何```S(i'>=i, j'<=j) >= S(i,j)```,由于```j'-i' <= j-i```,必然要有```min(ai',aj')>=min(ai,aj)```才行。同样可以采用头尾双指针向中间移动: -当a(left) < a(right)时,对任何j S(left, j a(right)时,需要左移right`。`而当a(left) = a(right)时,需要同时移动left和right。` +所以S(left, right) > S(left, j a(right)时,需要左移right`。 + +`而当a(left) = a(right)时,需要同时移动left和right。` 思路整理: left = 0, right = n-1 -(1) a[left] < a[right], left++ -(2) a[left] > a[right], right-- -(3) a[left] = a[right], left++, right-- +1. a[left] < a[right], left++ +2. a[left] > a[right], right-- +3. a[left] = a[right], left++, right-- 终止条件:left >= right 这个证明大快人心 @@ -104,6 +110,5 @@ class Solution(object): else: right -= 1 - return mostWater ``` From c0347da957052470ea0bda13d3153a90721ecd65 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 26 Dec 2017 16:34:55 -0600 Subject: [PATCH 0125/2496] Update 011._container_with_most_water.md --- 011._container_with_most_water.md | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/011._container_with_most_water.md b/011._container_with_most_water.md index 61ee3719d..5fe3476a8 100644 --- a/011._container_with_most_water.md +++ b/011._container_with_most_water.md @@ -90,7 +90,7 @@ left = 0, right = n-1 这样写也能过: -``` +```python class Solution(object): def maxArea(self, height): """ @@ -98,17 +98,18 @@ class Solution(object): :rtype: int """ n = len(height) - left, right = 0, n - 1 - - mostWater = 0 - while left < right: - water = min(height[left], height[right]) * (right - left) - mostWater = max(water, mostWater) - - if height[left] < height[right]: - left += 1 - else: - right -= 1 - - return mostWater + left, right = 0, n-1 + most_water = 0 + while left <= right: + water = (right - left) * min(height[left], height[right]) + most_water = max(water, most_water) + if height[left] < height[right]: + left += 1 + elif height[left] > height[right]: + right -= 1 + else: + left += 1 + right -= 1 + return most_water + ``` From 6f8b0b6b3b07401f6913a4bda931db48be28ce2c Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 26 Dec 2017 16:35:47 -0600 Subject: [PATCH 0126/2496] Update 011._container_with_most_water.md --- 011._container_with_most_water.md | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/011._container_with_most_water.md b/011._container_with_most_water.md index 5fe3476a8..4fac0f11c 100644 --- a/011._container_with_most_water.md +++ b/011._container_with_most_water.md @@ -32,22 +32,19 @@ height = [3,2,1,3] ``` -class Solution(object): +class Solution(object): # 此法超时 def maxArea(self, height): """ :type height: List[int] :rtype: int """ n = len(height) - mostWater = 0 - + most_water = 0 for i in range(n-1): - for j in range(i,n): - lowest = min(height[i], height[j]) - water = (j - i) * lowest - if water > mostWater: - mostWater = water - return mostWater + for j in range(i, n): + water = (j-i) * min(height[i], height[j]) + most_water = max(water, most_water) + return most_water ``` From 2f1e7c6050ba93291ca66cbe60d0ef1098a8178f Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 26 Dec 2017 23:12:26 -0600 Subject: [PATCH 0127/2496] Update 015._3sum.md --- 015._3sum.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/015._3sum.md b/015._3sum.md index 7db404066..92a4f7020 100644 --- a/015._3sum.md +++ b/015._3sum.md @@ -33,12 +33,12 @@ class Solution(object): ``` -然后查了一下2sum,用2sum的花样,因为要排除重复以及输出是按照从小到大的输出: +然后查了一下2sum,用2sum的花样,因为要排除重复以及输出是按照从小到大的输出:但是还是超时 ``` -class Solution(object): - def threeSum(self, nums): +class Solution(object): # 此法也超时 +    def threeSum(self, nums): """ :type nums: List[int] :rtype: List[List[int]] From 6f21df72ec45389e27538b1c35154aa749e98531 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 26 Dec 2017 23:28:28 -0600 Subject: [PATCH 0128/2496] Update 015._3sum.md --- 015._3sum.md | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/015._3sum.md b/015._3sum.md index 92a4f7020..72a73cb31 100644 --- a/015._3sum.md +++ b/015._3sum.md @@ -81,24 +81,26 @@ class Solution(object): :type nums: List[int] :rtype: List[List[int]] """ - n = len(nums) + n, res = len(nums), [] nums.sort() - ans = [] for i in range(n): -            if i > 0 and nums[i] == nums[i-1] : continue   #因为i=0这个元素会直接往下执行 -            l, r = i+1, n -1 + if i > 0 and nums[i] == nums[i-1]: # 因为i=0这个元素会直接往下执行 + continue + l, r = i+1, n-1 while l < r: - temp = nums[i] + nums[l] + nums[r] - if temp == 0: - ans.append([nums[i],nums[l],nums[r]]) - l += 1 + tmp = nums[i] + nums[l] + nums[r] + if tmp == 0: + res.append([nums[i], nums[l], nums[r]]) + l += 1 r -= 1 - while l < r and nums[l] == nums[l-1]: l += 1 - while l < r and nums[r] == nums[r+1]: r -= 1 - elif temp > 0: + while l < r and nums[l] == nums[l-1]: + l += 1 + while l < r and nums[r] == nums[r+1]: + r -= 1 + elif tmp > 0: r -= 1 else: l += 1 - return ans + return res ``` From 3f0aa41bc5fdc9bf443e6093fd50d4c444c1c170 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 26 Dec 2017 23:41:54 -0600 Subject: [PATCH 0129/2496] Update 016._3sum_closest.md --- 016._3sum_closest.md | 53 ++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/016._3sum_closest.md b/016._3sum_closest.md index 75304fb4c..96b012ad2 100644 --- a/016._3sum_closest.md +++ b/016._3sum_closest.md @@ -1,4 +1,4 @@ -###16. 3Sum Closest +### 16. 3Sum Closest 题目: @@ -15,38 +15,37 @@ Medium 用两个指针来循环 -``` - +```python class Solution(object): def threeSumClosest(self, nums, target): """ :type nums: List[int] - :type target: int - :rtype: int + :rtype: List[List[int]] """ - n = len(nums) + n, res, diff = len(nums), None, float('inf') nums.sort() - ans = None - diff = float('inf') # infinity for i in range(n): - if i > 0 and nums[i] == nums[i-1] : continue - l, r = i+1, n -1 + if i > 0 and nums[i] == nums[i-1]: + continue + l, r = i+1, n-1 while l < r: - temp = nums[i] + nums[l] + nums[r] - if temp == target: + tmp = nums[i] + nums[l] + nums[r] + if tmp == target: return target - if temp < target: - l += 1 - if abs(temp - target) < diff: - diff = abs(temp - target) - ans = temp - while l < r and nums[l] == nums[l-1]: l += 1 - elif temp > target : - r -= 1 - if abs(temp - target) < diff: - diff = abs(temp - target) - ans = temp - while l < r and nums[r] == nums[r+1]: r -= 1 - return ans - -``` \ No newline at end of file + elif tmp > target: + r -= 1 + if abs(tmp-target) < diff: + diff = abs(tmp-target) + res = tmp + while l < r and nums[r] == nums[r+1]: + r -= 1 + else: + l += 1 + if abs(tmp-target) < diff: + diff = abs(tmp-target) + res = tmp + while l < r and nums[l] == nums[l-1]: + l += 1 + return res + +``` From 69c033fa988ade3e881ee27734d6c22569afa560 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 27 Dec 2017 15:25:55 -0600 Subject: [PATCH 0130/2496] Update 021._merge_two_sorted_lists.md --- 021._merge_two_sorted_lists.md | 94 +++++++++++++++++----------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/021._merge_two_sorted_lists.md b/021._merge_two_sorted_lists.md index 79619e9d7..40517726c 100644 --- a/021._merge_two_sorted_lists.md +++ b/021._merge_two_sorted_lists.md @@ -1,48 +1,48 @@ -###21. Merge Two Sorted Lists - -题目: - - - - -难度: Easy - - -同样适用dummy head - +### 21. Merge Two Sorted Lists + +题目: + + + + +难度: Easy + + +同样适用dummy head + +```python +class Solution(object): + def mergeTwoLists(self, l1, l2): + """ + :type l1: ListNode + :type l2: ListNode + :rtype: ListNode + """ + if l1 == None: + return l2 + if l2 == None: + return l1 + + dummy = ListNode(-1) + cur = dummy + + while l1 and l2: + if l1.val < l2.val: + cur.next = l1 + l1 = l1.next + else: + cur.next = l2 + l2 = l2.next + cur = cur.next + + if l1: + cur.next = l1 + else: + cur.next = l2 + return dummy.next + ``` -class Solution(object): - def mergeTwoLists(self, l1, l2): - """ - :type l1: ListNode - :type l2: ListNode - :rtype: ListNode - """ - if l1 == None: - return l2 - if l2 == None: - return l1 - - dummy = ListNode(-1) - cur = dummy - - while l1 and l2: - if l1.val < l2.val: - cur.next = l1 - l1 = l1.next - else: - cur.next = l2 - l2 = l2.next - cur = cur.next - - if l1: - cur.next = l1 - else: - cur.next = l2 - return dummy.next - -``` - - - - + + + + From 34af9d8190f052b772ec80301f5e193807a4e9db Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 27 Dec 2017 18:12:03 -0600 Subject: [PATCH 0131/2496] Update 104._maximum_depth_of_binary_tree.md --- 104._maximum_depth_of_binary_tree.md | 34 ++++++++++++++-------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/104._maximum_depth_of_binary_tree.md b/104._maximum_depth_of_binary_tree.md index a11c7d872..9e0bc626a 100644 --- a/104._maximum_depth_of_binary_tree.md +++ b/104._maximum_depth_of_binary_tree.md @@ -1,18 +1,18 @@ -###104. Maximum Depth of Binary Tree - -题目: - - - -难度: - -Easy - - -简单题 - - -``` +### 104. Maximum Depth of Binary Tree + +题目: + + + +难度: + +Easy + + +简单题 + + +```python class Solution(object): def maxDepth(self, root): @@ -23,5 +23,5 @@ class Solution(object): if root == None: return 0 elif root.right == None and root.left == None: return 1 else: - return max(1 + self.maxDepth(root.left), 1+ self.maxDepth(root.right)) -``` + return max(1 + self.maxDepth(root.left), 1+ self.maxDepth(root.right)) +``` From 110056a305fb54852232f72f7d02bd0b1d257c72 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 27 Dec 2017 18:18:10 -0600 Subject: [PATCH 0132/2496] Update 104._maximum_depth_of_binary_tree.md --- 104._maximum_depth_of_binary_tree.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/104._maximum_depth_of_binary_tree.md b/104._maximum_depth_of_binary_tree.md index 9e0bc626a..451160d32 100644 --- a/104._maximum_depth_of_binary_tree.md +++ b/104._maximum_depth_of_binary_tree.md @@ -9,19 +9,15 @@ Easy -简单题 +简单题,但是这道题跟[leetcode111](https://github.com/Lisanaaa/thinking_in_lc/blob/master/111._minimum_depth_of_binary_tree.md)不一样,这道题没有特殊情况,所以一行就够了 ```python - class Solution(object): def maxDepth(self, root): """ :type root: TreeNode :rtype: int """ - if root == None: return 0 - elif root.right == None and root.left == None: return 1 - else: - return max(1 + self.maxDepth(root.left), 1+ self.maxDepth(root.right)) + return 1 + max(map(self.maxDepth, (root.left, root.right))) if root else 0 ``` From f1e2223adbbfe40dabbbd7792a1c0088e499a358 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 27 Dec 2017 18:51:47 -0600 Subject: [PATCH 0133/2496] Update 053._maximum_subarray.md --- 053._maximum_subarray.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/053._maximum_subarray.md b/053._maximum_subarray.md index c3d8cce5b..984552d8f 100644 --- a/053._maximum_subarray.md +++ b/053._maximum_subarray.md @@ -39,7 +39,7 @@ ms(i) = max(ms[i-1]+ a[i],a[i]) 到i处的最大值两个可能,一个是加上a[i],另一个从a[i]起头,重新开始。可以AC -``` +```python class Solution(object): def maxSubArray(self, nums): """ @@ -77,7 +77,7 @@ return max_so_far AC代码: -``` +```python class Solution(object): def maxSubArray(self, nums): """ @@ -143,4 +143,4 @@ class Solution(object): return find_max_subarray(nums, 0, len(nums)-1) -``` \ No newline at end of file +``` From a608ba0bdb06ee0e2905d37d16a4df5bfd76078a Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 28 Dec 2017 00:44:33 -0600 Subject: [PATCH 0134/2496] Update 136._single_number.md --- 136._single_number.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/136._single_number.md b/136._single_number.md index 67fdc7dcf..3035c08fa 100644 --- a/136._single_number.md +++ b/136._single_number.md @@ -1,4 +1,4 @@ -###136. Single Number +### 136. Single Number From 40892dc628420c32b141f049cb87dd8bf7bde3f7 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 28 Dec 2017 00:44:42 -0600 Subject: [PATCH 0135/2496] Update 136._single_number.md --- 136._single_number.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/136._single_number.md b/136._single_number.md index 3035c08fa..b591f4d11 100644 --- a/136._single_number.md +++ b/136._single_number.md @@ -27,7 +27,7 @@ Python的位操作: 神奇的解法: -``` +```python class Solution(object): def singleNumber(self, nums): """ From b2035cd9cbc80fb52f8a9424336a6b2a0231bba5 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 28 Dec 2017 00:48:07 -0600 Subject: [PATCH 0136/2496] Update 136._single_number.md --- 136._single_number.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/136._single_number.md b/136._single_number.md index b591f4d11..18540da0f 100644 --- a/136._single_number.md +++ b/136._single_number.md @@ -34,10 +34,9 @@ class Solution(object): :type nums: List[int] :rtype: int """ - result = nums[0] - + res = nums[0] for i in nums[1:]: - result ^= i - return result + res ^= i + return res ``` From fd57ad86cdef0ee99ab6179528f185efcffdd1fe Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 28 Dec 2017 00:56:41 -0600 Subject: [PATCH 0137/2496] Update 101._symmetric_tree.md --- 101._symmetric_tree.md | 91 ++++++++++++++++++++---------------------- 1 file changed, 44 insertions(+), 47 deletions(-) diff --git a/101._symmetric_tree.md b/101._symmetric_tree.md index 58651ac01..404acfa56 100644 --- a/101._symmetric_tree.md +++ b/101._symmetric_tree.md @@ -1,48 +1,45 @@ -###101. Symmetric Tree - -题目: - - - - -难度: - -Easy - - -两棵树symmetric, 有几种可能: - -- 均为none ,symmetric -- 左孩子,右孩子都不存在,并且值相等, symmetric -- 右子树 和 另一棵树的左子树相等,左子树 和另一颗树的右子树相等 🌲 - - +### 101. Symmetric Tree + +题目: + + + + +难度: + +Easy + + +两棵树symmetric, 有几种可能: + +- 均为none ,symmetric +- 左孩子,右孩子都不存在,并且值相等, symmetric +- 右子树 和 另一棵树的左子树相等,左子树 和另一颗树的右子树相等 🌲 + + ``` -class Solution(object): - def isSymmetric(self, root): - """ - :type root: TreeNode - :rtype: bool - """ - if root == None : - return True - return self.symmetric(root.left, root.right) - - - def symmetric(self,t1, t2): - # empty tree - if t1 == None or t2 == None: - if t1 == t2 == None: - return True - else: - return False - elif t1.val == t2.val: - return self.symmetric(t1.left,t2.right) and self.symmetric(t1.right, t2.left) - else: - return False -``` - -其实函数不应该定义为symmetric,应该定义为qual?更合适。 - - - +class Solution(object): + def isSymmetric(self, root): + """ + :type root: TreeNode + :rtype: bool + """ + if not root: + return True + return self.symmetric(root.left, root.right) + + def symmetric(self, l1, l2): + if not l1 or not l2: + if not l1 and not l2: + return True + else: + return False + if l1.val == l2.val: + return self.symmetric(l1.left, l2.right) and self.symmetric(l1.right, l2.left) + else: + return False +``` + + + + From 243ef381c54d07ab3a988b9f0bd5d8023869c7e0 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 28 Dec 2017 00:56:50 -0600 Subject: [PATCH 0138/2496] Update 101._symmetric_tree.md --- 101._symmetric_tree.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/101._symmetric_tree.md b/101._symmetric_tree.md index 404acfa56..cb6f5219b 100644 --- a/101._symmetric_tree.md +++ b/101._symmetric_tree.md @@ -17,7 +17,7 @@ Easy - 右子树 和 另一棵树的左子树相等,左子树 和另一颗树的右子树相等 🌲 -``` +```python class Solution(object): def isSymmetric(self, root): """ From 7c153d25d2cb9f40ca2da457d6dcdb38a479a1cb Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 28 Dec 2017 15:36:19 -0600 Subject: [PATCH 0139/2496] Update 438._Find_All_Anagrams_in_a_String.md --- 438._Find_All_Anagrams_in_a_String.md | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/438._Find_All_Anagrams_in_a_String.md b/438._Find_All_Anagrams_in_a_String.md index f7427756d..10e1da070 100644 --- a/438._Find_All_Anagrams_in_a_String.md +++ b/438._Find_All_Anagrams_in_a_String.md @@ -17,10 +17,10 @@ Easy -```python -python -class Solution(object): - def findAnagrams(self, s, p): +``` + +class Solution(object): # 此法超时 +    def findAnagrams(self, s, p): """ :type s: str :type p: str @@ -32,6 +32,7 @@ class Solution(object): res.append(i) return res ``` + 于是用双指针,left和right都从0开始往后遍历 ```python class Solution(object): @@ -62,8 +63,3 @@ class Solution(object): -Author: Keqi Huang - -If you like it, please spread your support - -![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) From 24c53d3d4acfe5b3584f4766ddde4ddad37d03a9 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 28 Dec 2017 15:45:33 -0600 Subject: [PATCH 0140/2496] Update 438._Find_All_Anagrams_in_a_String.md --- 438._Find_All_Anagrams_in_a_String.md | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/438._Find_All_Anagrams_in_a_String.md b/438._Find_All_Anagrams_in_a_String.md index 10e1da070..47417e197 100644 --- a/438._Find_All_Anagrams_in_a_String.md +++ b/438._Find_All_Anagrams_in_a_String.md @@ -42,23 +42,19 @@ class Solution(object): :type p: str :rtype: List[int] """ - result = [] - - cnts = [0] * 26 + res, cnts = [], [0] * 26 for c in p: cnts[ord(c) - ord('a')] += 1 - - left, right = 0, 0 + left, right = 0, 0 while right < len(s): cnts[ord(s[right]) - ord('a')] -= 1 while left <= right and cnts[ord(s[right]) - ord('a')] < 0: cnts[ord(s[left]) - ord('a')] += 1 left += 1 if right - left + 1 == len(p): - result.append(left) + res.append(left) right += 1 - - return result + return res ``` From cdc3bb80bdcee0251001f6cbee0d199cd7beb967 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 28 Dec 2017 16:16:50 -0600 Subject: [PATCH 0141/2496] Update 102._binary_tree_level_order_traversal.md --- 102._binary_tree_level_order_traversal.md | 71 +++++++++++------------ 1 file changed, 35 insertions(+), 36 deletions(-) diff --git a/102._binary_tree_level_order_traversal.md b/102._binary_tree_level_order_traversal.md index 80f7145d3..7d4ac4efb 100644 --- a/102._binary_tree_level_order_traversal.md +++ b/102._binary_tree_level_order_traversal.md @@ -1,4 +1,4 @@ -###102. Binary Tree Level Order Traversal +### 102. Binary Tree Level Order Traversal 题目: @@ -7,57 +7,56 @@ 难度: -Easy +Medium +第一种做法:利用curLevel和nextLevel来记录,然后按层append. -我觉得并不easy -两种做法,利用curLevel和nextLevel来记录,然后按层append. - - -``` +```python class Solution(object): def levelOrder(self, root): """ :type root: TreeNode :rtype: List[List[int]] """ - res = [] - - if root == None: return [] - - curLevel = [root] - while curLevel: - nextLevel = [] - tmpRes = [] - for node in curLevel: - tmpRes.append(node.val) - if node.left: nextLevel.append(node.left) - if node.right: nextLevel.append(node.right) - res.append(tmpRes) - curLevel = nextLevel - + if not root: + return [] + res, cur_level = [], [root] + while cur_level: + next_level, tmp_res = [], [] + for node in cur_level: + tmp_res.append(node.val) + if node.left: + next_level.append(node.left) + if node.right: + next_level.append(node.right) + res.append(tmp_res) + cur_level = next_level return res ``` -第二种做法: +第二种做法:递归 -``` -class Solution: - # @param root, a tree node - # @return a list of lists of integers - def preorder(self, root, level, res): - if root: - if len(res) < level+1: res.append([]) - res[level].append(root.val) - self.preorder(root.left, level+1, res) - self.preorder(root.right, level+1, res) +```python +class Solution(object): def levelOrder(self, root): - res=[] - self.preorder(root, 0, res) + """ + :type root: TreeNode + :rtype: List[List[int]] + """ + res = [] + self.iter_order(root, 0, res) return res + + def iter_order(self, root, level, res): + if not root: return + if len(res) < level + 1: + res.append([]) + res[level].append(root.val) + self.iter_order(root.left, level+1, res) + self.iter_order(root.right, level+1, res) ``` -用递归来记录每一层,需要更加学习,不算easy \ No newline at end of file +用递归来记录每一层,需要更加学习,不算easy From 7bff88c54383657ef3e2c472de7f9b03caf67e47 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 16:12:18 -0600 Subject: [PATCH 0142/2496] Update 103._binary_tree_zigzag_level_order_traversal.md --- ...inary_tree_zigzag_level_order_traversal.md | 77 +++++++++---------- 1 file changed, 36 insertions(+), 41 deletions(-) diff --git a/103._binary_tree_zigzag_level_order_traversal.md b/103._binary_tree_zigzag_level_order_traversal.md index 3598fd91e..edc9b3986 100644 --- a/103._binary_tree_zigzag_level_order_traversal.md +++ b/103._binary_tree_zigzag_level_order_traversal.md @@ -1,48 +1,43 @@ -###103. Binary Tree Zigzag Level Order Traversal - -题目: - - - - -难度: - -Medium - - -继续用102 的算法作弊 - -使用102作弊的题目都需要再努力寻求一下别家解法 - -``` +### 103. Binary Tree Zigzag Level Order Traversal + +题目: + + + + +难度: + +Medium + + +```python class Solution(object): def zigzagLevelOrder(self, root): """ :type root: TreeNode :rtype: List[List[int]] """ - res = [] - if root == None: return [] - - curLevel = [root] - levelCount = 0 - while curLevel: - nextLevel = [] - tmpRes = [] - for node in curLevel: - tmpRes.append(node.val) - if node.left: nextLevel.append(node.left) - if node.right: nextLevel.append(node.right) - if levelCount % 2 == 0: - res.append(tmpRes) - else : - tmpRes.reverse() - res.append(tmpRes) - levelCount += 1 - curLevel = nextLevel - - return res -``` - - + if not root: + return [] + res, cur_level, level_count = [], [root], 0 + while cur_level: + next_level, tmp_res = [], [] + for node in cur_level: + tmp_res.append(node.val) + if node.left: + next_level.append(node.left) + if node.right: + next_level.append(node.right) + if level_count % 2 == 0: + res.append(tmp_res) + else: + tmp_res.reverse() + res.append(tmp_res) + level_count += 1 + cur_level = next_level + + return res +``` + + From caf6cb678fd98b8a24f67711f463f7771592db02 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 16:25:47 -0600 Subject: [PATCH 0143/2496] Update 094._binary_tree_inorder_traversal.md --- 094._binary_tree_inorder_traversal.md | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/094._binary_tree_inorder_traversal.md b/094._binary_tree_inorder_traversal.md index 6056c4b47..85366edfd 100644 --- a/094._binary_tree_inorder_traversal.md +++ b/094._binary_tree_inorder_traversal.md @@ -1,4 +1,4 @@ -###94. Binary Tree Inorder Traversal +### 94. Binary Tree Inorder Traversal 题目: @@ -9,9 +9,30 @@ Medium -递归 +递归版本1⃣️:自己瞬秒的 + + + +```python +class Solution(object): + def inorderTraversal(self, root): + """ + :type root: TreeNode + :rtype: List[int] + """ + res = [] + if not root: + return res + if root.left: + res.extend(self.inorderTraversal(root.left)) + res.append(root.val) + if root.right: + res.extend(self.inorderTraversal(root.right)) + return res ``` + +```python class Solution(object): def inorderTraversal(self, root): """ @@ -67,4 +88,4 @@ iterativeInorder(node) node ← s.pop() visit(node) node ← node.right -``` \ No newline at end of file +``` From 4c5f4436b871e1221c44b8c97fb323ec12f84bd0 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 16:26:12 -0600 Subject: [PATCH 0144/2496] Update 094._binary_tree_inorder_traversal.md --- 094._binary_tree_inorder_traversal.md | 1 + 1 file changed, 1 insertion(+) diff --git a/094._binary_tree_inorder_traversal.md b/094._binary_tree_inorder_traversal.md index 85366edfd..dc288f127 100644 --- a/094._binary_tree_inorder_traversal.md +++ b/094._binary_tree_inorder_traversal.md @@ -32,6 +32,7 @@ class Solution(object): return res ``` +递归版本2⃣️: ```python class Solution(object): def inorderTraversal(self, root): From 8950be4377cedd6fb7506e12fdc68802ee201c4d Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 16:45:57 -0600 Subject: [PATCH 0145/2496] Update 144._binary_tree_preorder_traversal.md --- 144._binary_tree_preorder_traversal.md | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/144._binary_tree_preorder_traversal.md b/144._binary_tree_preorder_traversal.md index 805a59dca..8f5e21689 100644 --- a/144._binary_tree_preorder_traversal.md +++ b/144._binary_tree_preorder_traversal.md @@ -1,4 +1,4 @@ -###144. Binary Tree Preorder Traversal +### 144. Binary Tree Preorder Traversal 题目: @@ -9,10 +9,28 @@ Medium -Recursive +Recursive,瞬秒 +```python +class Solution(object): + def preorderTraversal(self, root): + """ + :type root: TreeNode + :rtype: List[int] + """ + res = [] + if not root: + return res + res.append(root.val) + if root.left: + res.extend(self.preorderTraversal(root.left)) + if root.right: + res.extend(self.preorderTraversal(root.right)) + return res ``` + +```python class Solution(object): def preorderTraversal(self, root): """ @@ -38,7 +56,7 @@ class Solution(object): Iterative -``` +```python class Solution(object): def preorderTraversal(self, root): """ @@ -60,4 +78,4 @@ class Solution(object): stack.append(node.left) return res -``` \ No newline at end of file +``` From dfcf9159c8ddc6cc0ce376de12e84c664f6053fe Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 17:16:44 -0600 Subject: [PATCH 0146/2496] Create 255._ --- 255._ | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 255._ diff --git a/255._ b/255._ new file mode 100644 index 000000000..149fb0564 --- /dev/null +++ b/255._ @@ -0,0 +1,27 @@ +### 255. Verify Preorder Sequence in Binary Search Tree + +题目: + + + +难度: + +Medium + + +思路: +思路 +二叉搜索树先序遍历序列的特点是降序的部分一定是向左走的,一旦开始升序说明开始向右走了, +则上一个降序的点则限定了后面的数的最小值。如果继续降序,说明又向左走了,这样等到下次向右走得时候也要再次更新最小值。 + + +> 10 +> / \ +> 5 12 +> / \ +> 2 6 + + +```python + +``` From 283e4af60b823e77e31a3d57f1a054e63f9be4ef Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 17:17:49 -0600 Subject: [PATCH 0147/2496] Rename 255._ to 255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md --- 255._ => 255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename 255._ => 255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md (100%) diff --git a/255._ b/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md similarity index 100% rename from 255._ rename to 255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md From 1df70d64c060376fdbb288777a5da3cf0c28f384 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 17:18:22 -0600 Subject: [PATCH 0148/2496] Update 255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md --- 255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md b/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md index 149fb0564..e98d95de1 100644 --- a/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md +++ b/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md @@ -16,10 +16,10 @@ Medium > 10 -> / \ -> 5 12 -> / \ -> 2 6 + / \ + 5 12 + / \ + 2 6 ```python From dc55687134baec8a3b44743258dc551d258ece23 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 17:19:59 -0600 Subject: [PATCH 0149/2496] Update 255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md --- ...Preorder_Sequence_in_Binary_Search_Tree.md | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md b/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md index e98d95de1..c7e921472 100644 --- a/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md +++ b/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md @@ -14,14 +14,30 @@ Medium 二叉搜索树先序遍历序列的特点是降序的部分一定是向左走的,一旦开始升序说明开始向右走了, 则上一个降序的点则限定了后面的数的最小值。如果继续降序,说明又向左走了,这样等到下次向右走得时候也要再次更新最小值。 - -> 10 +``` + 10 / \ 5 12 / \ 2 6 +``` +如这个例子,我们在10的位置是没有最小值限定的,然后降序走到5,依然没有最小值,降序走到2,依然没有,然后开始升序了,遇到6,这时候之后的数字一定大于2,同时也大于5,所以最小值更新为之前遍历过的,且比当前数稍微小一点的那个数。这里我们可以用一个栈来暂存之前的路径,所以升序时就是将栈中元素不断pop出来直到栈顶大于当前数,而最小值就是最后一个pop出来的数,最后再把该数push进去。对于降序的时候,直接向里面push就行了。这样,序列无效的条件就是违反了这个最小值的限定。 ```python - +class Solution(object): + def verifyPreorder(self, preorder): + """ + :type preorder: List[int] + :rtype: bool + """ + stack = [] + lower = -1 << 31 + for x in preorder: + if x < lower: + return False + while stack and x > stack[-1]: + lower = stack.pop() + stack.append(x) + return True ``` From e053e2fc53b787103d17231c7b9785dba94308d7 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 17:21:36 -0600 Subject: [PATCH 0150/2496] Update 255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md --- 255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md b/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md index c7e921472..5d5f98aa7 100644 --- a/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md +++ b/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md @@ -24,6 +24,8 @@ Medium 如这个例子,我们在10的位置是没有最小值限定的,然后降序走到5,依然没有最小值,降序走到2,依然没有,然后开始升序了,遇到6,这时候之后的数字一定大于2,同时也大于5,所以最小值更新为之前遍历过的,且比当前数稍微小一点的那个数。这里我们可以用一个栈来暂存之前的路径,所以升序时就是将栈中元素不断pop出来直到栈顶大于当前数,而最小值就是最后一个pop出来的数,最后再把该数push进去。对于降序的时候,直接向里面push就行了。这样,序列无效的条件就是违反了这个最小值的限定。 + +参考[Ethan Li 的技术专栏](https://segmentfault.com/a/1190000003874375) ```python class Solution(object): def verifyPreorder(self, preorder): From a35dd9935df79d03a2b6f02aa470edb49805e58d Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 17:22:47 -0600 Subject: [PATCH 0151/2496] Update 255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md --- 255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md b/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md index 5d5f98aa7..dd02e42e6 100644 --- a/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md +++ b/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md @@ -34,12 +34,12 @@ class Solution(object): :rtype: bool """ stack = [] - lower = -1 << 31 + lower = -1 << 31 # 初始化最小值为最小整数 for x in preorder: - if x < lower: - return False - while stack and x > stack[-1]: + if x < lower: # 违反最小值限定则是无效的 + return False + while stack and x > stack[-1]: # 将路径中所有小于当前的数pop出来并更新最小值 lower = stack.pop() - stack.append(x) + stack.append(x) # 将当前值push进去 return True ``` From 6daa16d6d3377dfc5f2ae10da1a796b3828b45f3 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 17:48:52 -0600 Subject: [PATCH 0152/2496] Update 255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md --- ...Preorder_Sequence_in_Binary_Search_Tree.md | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md b/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md index dd02e42e6..04b0e9ad4 100644 --- a/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md +++ b/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md @@ -20,6 +20,8 @@ Medium 5 12 / \ 2 6 + + preorder:[10, 5, 2, 6, 12] ``` 如这个例子,我们在10的位置是没有最小值限定的,然后降序走到5,依然没有最小值,降序走到2,依然没有,然后开始升序了,遇到6,这时候之后的数字一定大于2,同时也大于5,所以最小值更新为之前遍历过的,且比当前数稍微小一点的那个数。这里我们可以用一个栈来暂存之前的路径,所以升序时就是将栈中元素不断pop出来直到栈顶大于当前数,而最小值就是最后一个pop出来的数,最后再把该数push进去。对于降序的时候,直接向里面push就行了。这样,序列无效的条件就是违反了这个最小值的限定。 @@ -34,12 +36,35 @@ class Solution(object): :rtype: bool """ stack = [] - lower = -1 << 31 # 初始化最小值为最小整数 + min_num = -1 << 31 # 初始化最小值为最小整数 for x in preorder: - if x < lower: # 违反最小值限定则是无效的 + if x < min_num: # 违反最小值限定则是无效的 return False while stack and x > stack[-1]: # 将路径中所有小于当前的数pop出来并更新最小值 - lower = stack.pop() + min_num = stack.pop() stack.append(x) # 将当前值push进去 return True ``` + +Follow up: O(1) space +we realize that the preorder array can be reused as the stack thus achieve O(1) extra space, since the scanned items of preorder array is always more than or equal to the length of the stack. +```python +class Solution(object): + def verifyPreorder(self, preorder): + """ + :type preorder: List[int] + :rtype: bool + """ + # stack = preorder[:i], reuse preorder as stack + lower = -1 << 31 + i = 0 + for x in preorder: + if x < lower: + return False + while i > 0 and x > preorder[i - 1]: + lower = preorder[i - 1] + i -= 1 + preorder[i] = x + i += 1 + return True +``` From a07a93f0faffdb519ef1731c99664e2dac24e930 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 17:54:20 -0600 Subject: [PATCH 0153/2496] Update 255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md --- ...Verify_Preorder_Sequence_in_Binary_Search_Tree.md | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md b/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md index 04b0e9ad4..fef130c8e 100644 --- a/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md +++ b/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md @@ -10,10 +10,8 @@ Medium 思路: -思路 -二叉搜索树先序遍历序列的特点是降序的部分一定是向左走的,一旦开始升序说明开始向右走了, -则上一个降序的点则限定了后面的数的最小值。如果继续降序,说明又向左走了,这样等到下次向右走得时候也要再次更新最小值。 +这道题让给了我们一个一维数组,让我们验证其是否为一个二叉搜索树的先序遍历出的顺序,我们都知道二叉搜索树的性质是左<根<右,如果用中序遍历得到的结果就是有序数组,而先序遍历的结果就不是有序数组了,但是难道一点规律都没有了吗,其实规律还是有的,根据二叉搜索树的性质,当前节点的值一定大于其左子树中任何一个节点值,而且其右子树中的任何一个节点值都不能小于当前节点值,那么我们可以用这个性质来验证,举个例子,比如下面这棵二叉搜索树: ``` 10 / \ @@ -24,7 +22,7 @@ Medium preorder:[10, 5, 2, 6, 12] ``` -如这个例子,我们在10的位置是没有最小值限定的,然后降序走到5,依然没有最小值,降序走到2,依然没有,然后开始升序了,遇到6,这时候之后的数字一定大于2,同时也大于5,所以最小值更新为之前遍历过的,且比当前数稍微小一点的那个数。这里我们可以用一个栈来暂存之前的路径,所以升序时就是将栈中元素不断pop出来直到栈顶大于当前数,而最小值就是最后一个pop出来的数,最后再把该数push进去。对于降序的时候,直接向里面push就行了。这样,序列无效的条件就是违反了这个最小值的限定。 +如这个例子,我们先设一个最小值min_num,然后遍历数组,如果当前值小于这个最小值min_num,返回false,对于根节点,我们将其压入栈中,然后往后遍历,如果遇到的数字比栈顶元素小,说明是其左子树的点,继续压入栈中,直到遇到的数字比栈顶元素大,那么就是右边的值了,我们需要找到是哪个节点的右子树,所以我们更新low值并删掉栈顶元素,然后继续和下一个栈顶元素比较,如果还是大于,则继续更新low值和删掉栈顶,直到栈为空或者当前栈顶元素大于当前值停止,压入当前值,这样如果遍历完整个数组之前都没有返回false的话,最后返回true即可 参考[Ethan Li 的技术专栏](https://segmentfault.com/a/1190000003874375) @@ -56,13 +54,13 @@ class Solution(object): :rtype: bool """ # stack = preorder[:i], reuse preorder as stack - lower = -1 << 31 + min_num = -1 << 31 i = 0 for x in preorder: - if x < lower: + if x < min_num: return False while i > 0 and x > preorder[i - 1]: - lower = preorder[i - 1] + min_num = preorder[i - 1] i -= 1 preorder[i] = x i += 1 From 76ecc55c0289630f1f731cd890bac8ac8f8bb518 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 18:08:07 -0600 Subject: [PATCH 0154/2496] Update 255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md --- 255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md b/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md index fef130c8e..dfe1f7039 100644 --- a/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md +++ b/255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md @@ -26,6 +26,8 @@ Medium 参考[Ethan Li 的技术专栏](https://segmentfault.com/a/1190000003874375) + +O(n) time, O(n) space ```python class Solution(object): def verifyPreorder(self, preorder): @@ -44,7 +46,9 @@ class Solution(object): return True ``` -Follow up: O(1) space +### Follow up: +O(n) time, O(1) space + we realize that the preorder array can be reused as the stack thus achieve O(1) extra space, since the scanned items of preorder array is always more than or equal to the length of the stack. ```python class Solution(object): From 88b455f663306fb78d62acfc7099de9a9faff40e Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 18:46:18 -0600 Subject: [PATCH 0155/2496] Update 173._binary_search_tree_iterator.md --- 173._binary_search_tree_iterator.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/173._binary_search_tree_iterator.md b/173._binary_search_tree_iterator.md index f41778d71..6bbeac943 100644 --- a/173._binary_search_tree_iterator.md +++ b/173._binary_search_tree_iterator.md @@ -1,4 +1,4 @@ -###173. Binary Search Tree Iterator +### 173. Binary Search Tree Iterator 题目: @@ -49,7 +49,7 @@ class BSTIterator(object): 谷歌了一下,得到如何满足题目要求的hint,从root开始,往左走,把左孩子压入stack,直到左边为空。 -然后开始取node,如果node有右孩子,则同样要把node的左孩子入stack,画了一个图,可行。 +然后开始取node,如果node有右孩子,则同样要把node的右孩子append入stack,画了一个图,可行。 @@ -64,7 +64,7 @@ class BSTIterator(object): """ self.root = root self.stack = [] - self.pushLeft(root) + self.push(root) def hasNext(self): @@ -81,10 +81,10 @@ class BSTIterator(object): while self.hasNext(): cur = self.stack.pop() if cur.right: - self.pushLeft(cur.right) + self.push(cur.right) return cur.val - def pushLeft(self, node): + def push(self, node): """ :type node: TreeNode """ @@ -92,4 +92,4 @@ class BSTIterator(object): while cur: self.stack.append(cur) cur = cur.left -``` \ No newline at end of file +``` From a87d7d9f068f81cd583af485608d52e4aa0b4c84 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 18:46:41 -0600 Subject: [PATCH 0156/2496] Update 173._binary_search_tree_iterator.md --- 173._binary_search_tree_iterator.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/173._binary_search_tree_iterator.md b/173._binary_search_tree_iterator.md index 6bbeac943..2cfb6ebf4 100644 --- a/173._binary_search_tree_iterator.md +++ b/173._binary_search_tree_iterator.md @@ -11,7 +11,7 @@ Medium 同样没有听题目要求,一开始就取巧,用InOrder,这样得到BSF有序排列,然后使用 -``` +```python class BSTIterator(object): def __init__(self, root): @@ -55,7 +55,7 @@ class BSTIterator(object): -``` +```python class BSTIterator(object): def __init__(self, root): From 819b2bfb082e304d5020d283edc0d7f3cfb4c323 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 18:48:26 -0600 Subject: [PATCH 0157/2496] Update 173._binary_search_tree_iterator.md --- 173._binary_search_tree_iterator.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/173._binary_search_tree_iterator.md b/173._binary_search_tree_iterator.md index 2cfb6ebf4..f3168414b 100644 --- a/173._binary_search_tree_iterator.md +++ b/173._binary_search_tree_iterator.md @@ -64,7 +64,7 @@ class BSTIterator(object): """ self.root = root self.stack = [] - self.push(root) + self.pushAllLeft(root) def hasNext(self): @@ -81,10 +81,10 @@ class BSTIterator(object): while self.hasNext(): cur = self.stack.pop() if cur.right: - self.push(cur.right) + self.pushAllLeft(cur.right) return cur.val - def push(self, node): + def pushAllLeft(self, node): """ :type node: TreeNode """ From 32d4327bb2c9c331729b9f46c7fb6bcd8116ee7c Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 18:54:27 -0600 Subject: [PATCH 0158/2496] Update 173._binary_search_tree_iterator.md --- 173._binary_search_tree_iterator.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/173._binary_search_tree_iterator.md b/173._binary_search_tree_iterator.md index f3168414b..e5d69606e 100644 --- a/173._binary_search_tree_iterator.md +++ b/173._binary_search_tree_iterator.md @@ -78,7 +78,7 @@ class BSTIterator(object): """ :rtype: int """ - while self.hasNext(): + if self.hasNext(): cur = self.stack.pop() if cur.right: self.pushAllLeft(cur.right) From 1e061003fa9e8f27357179180bda8e6a9d21dc8c Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 18:57:54 -0600 Subject: [PATCH 0159/2496] Update 173._binary_search_tree_iterator.md --- 173._binary_search_tree_iterator.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/173._binary_search_tree_iterator.md b/173._binary_search_tree_iterator.md index e5d69606e..a8b6fd9cc 100644 --- a/173._binary_search_tree_iterator.md +++ b/173._binary_search_tree_iterator.md @@ -49,7 +49,7 @@ class BSTIterator(object): 谷歌了一下,得到如何满足题目要求的hint,从root开始,往左走,把左孩子压入stack,直到左边为空。 -然后开始取node,如果node有右孩子,则同样要把node的右孩子append入stack,画了一个图,可行。 +然后开始取node,如果node有右孩子,则同样要把node的右孩子的所有左孩子全部append入stack,画了一个图,可行。 From f6a1067b870528d1319ad94f774ae7d3a1f7f0f0 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 19:08:05 -0600 Subject: [PATCH 0160/2496] Update 412._fizz_buzz.md --- 412._fizz_buzz.md | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/412._fizz_buzz.md b/412._fizz_buzz.md index 7d9ee87f5..7b5057c7d 100644 --- a/412._fizz_buzz.md +++ b/412._fizz_buzz.md @@ -1,4 +1,4 @@ -###412. Fizz Buzz +### 412. Fizz Buzz 题目: @@ -7,29 +7,31 @@ 难度: Easy +一行 +```python +class Solution(object): + def fizzBuzz(self, n): + """ + :type n: int + :rtype: List[str] + """ + return [(not i%3)*"Fizz" + (not i%5)*"Buzz" or str(i) for i in range(1, n+1)] ``` +```python class Solution(object): def fizzBuzz(self, n): """ :type n: int :rtype: List[str] """ - res = [] - - for i in range(1,n+1): - item = '' - if i % 3 == 0: - item += 'Fizz' - if i % 5 == 0: - item += 'Buzz' - res.append(item || str(n)) - return res + return [str(i) if (i%3!=0 and i%5!=0) else (('Fizz'*(i%3==0)) + ('Buzz'*(i%5==0))) for i in range(1,n+1)] ``` + 就是easy,不过可以参见这里,有一些讨论 -我觉得这里一个用yield的想法还蛮不错 \ No newline at end of file +我觉得这里一个用yield的想法还蛮不错 From a23a2085560a5df3db40689558afa3e062d2b09f Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 19:11:56 -0600 Subject: [PATCH 0161/2496] Update 412._fizz_buzz.md --- 412._fizz_buzz.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/412._fizz_buzz.md b/412._fizz_buzz.md index 7b5057c7d..76551be9f 100644 --- a/412._fizz_buzz.md +++ b/412._fizz_buzz.md @@ -35,3 +35,34 @@ class Solution(object): 我觉得这里一个用yield的想法还蛮不错 +``` +# the fizbuz logic, returns an iterator object that +# calculates one value at a time, not all ot them at once +def fiz(numbers): + for i in numbers: + if i % 15 == 0: + yield 'fizbuz' + elif i % 5 == 0: + yield 'buz' + elif i % 3 == 0: + yield 'fiz' + else: + yield str(i) + +# xrange evaluates lazily, good for big numbers +# matches well with the lazy-eval generator function +numbers = xrange(1,2**20) + +# this gets one number, turns that one number into fuz, repeat +print ' '.join(fiz(numbers)) + +# returns: 1 2 fiz 4 buz fiz [...] fiz 1048573 1048574 fizbuz +``` +- clearly separates fizbuz logic from concatenation +- is as plain and readeable as possible +- generator iterator does not keep all the array in memory +- so that you can do it on arbitrary numbers (see Euler problem #10) + +What I do not like in this solution is the three ifs, whereas the problem can be solved with two. + +Answer: because yield is efficient when you do not want to keep big arrays in memory just to iterate through them. But this question is not about big arrays. From 826c784df14af9832d0e8c30479e692411274f43 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 19:34:24 -0600 Subject: [PATCH 0162/2496] Update 319._Bulb_Switcher.md --- 319._Bulb_Switcher.md | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/319._Bulb_Switcher.md b/319._Bulb_Switcher.md index c39b68392..840cce518 100644 --- a/319._Bulb_Switcher.md +++ b/319._Bulb_Switcher.md @@ -1,4 +1,4 @@ -###319. Bulb Switcher +### 319. Bulb Switcher 题目: @@ -20,7 +20,7 @@ Last executed input: 999999 -```python +``` class Solution(object): def bulbSwitch(self, n): """ @@ -29,11 +29,8 @@ class Solution(object): """ bulb = [1] * n for i in range(2,n+1): - if i == n: - bulb[n-1] = 1 if bulb[n-1] == 0 else 0 - else: - for x in range(i-1, n, i): - bulb[x] = 1 if bulb[x] == 0 else 0 + for x in range(i-1, n, i): + bulb[x] = 1 if bulb[x] == 0 else 0 return bulb.count(1) ``` @@ -49,7 +46,7 @@ and double divisor 6. So bulb >i ends up on iff and only if i is a square. So ju 大概解释一下,当一个灯泡被执行偶数次switch操作时它是灭着的,当被执行奇数次switch操作时它是亮着的,那么这题就是要找出哪些编号的灯泡会被执行奇数次操作。 现在假如我们执行第i次操作,即从编号i开始对编号每次+i进行switch操作,对于这些灯来说, -如果其编号j(j=1,2,3,⋯,n)能够整除i,则编号j的灯需要执switch操作。 +如果其编号j(j=1,2,3,⋯,n)能够整除i,则编号j的灯需要执行switch操作。 具备这样性质的i是成对出现的,比如: - 12 = 1 * 12, - 12 = 2 * 6 From ad319ae4fa7482c8c31566a7d4c1fec2e2c87753 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 19:40:18 -0600 Subject: [PATCH 0163/2496] Update 672._Bulb_Switcher_II.md --- 672._Bulb_Switcher_II.md | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/672._Bulb_Switcher_II.md b/672._Bulb_Switcher_II.md index 08f5d0584..e48f5cdd0 100644 --- a/672._Bulb_Switcher_II.md +++ b/672._Bulb_Switcher_II.md @@ -1,4 +1,4 @@ -###672. Bulb Switcher II +### 672. Bulb Switcher II 题目: @@ -15,14 +15,18 @@ Medium 我们只需要考虑当 n<=2 and m < 3 的特殊情形。因为当 n >2 and m >=3, 结果肯定是 8. The four buttons: -Flip all the lights. -Flip lights with even numbers. -Flip lights with odd numbers. -Flip lights with (3k + 1) numbers, k = 0, 1, 2, ... +- Flip all the lights. +- Flip lights with even numbers. +- Flip lights with odd numbers. +- Flip lights with (3k + 1) numbers, k = 0, 1, 2, ... + 如果我们使用了 button 1 和 2, 其效果等同于使用 button 3 。 类似的.. -1 + 2 --> 3, 1 + 3 --> 2, 2 + 3 --> 1 +- 1 + 2 --> 3 +- 1 + 3 --> 2 +- 2 + 3 --> 1 + 所以,只有 8 种情形。 ***All_on, 1, 2, 3, 4, 1+4, 2+4, 3+4*** @@ -30,7 +34,7 @@ Flip lights with (3k + 1) numbers, k = 0, 1, 2, ... 并且当 n>2 and m>=3 时,我们就能够获得所有的情形。 | m\n | 0 | 1 | 2 | 3 | 4 | - --- | ---|--- |----|---|---| + --- |----|--- |----|---|---| | 0 | 1 | 1 | 1 | 1 | 8 | | 1 | 1 | 2 | 3 | 4 | 8 | | 2 | 1 | 2 | 4 | 7 | 8 | From 0fde5496050535ea55feeeb265ad11a6b58c4d0f Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 19:57:03 -0600 Subject: [PATCH 0164/2496] Update 672._Bulb_Switcher_II.md --- 672._Bulb_Switcher_II.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/672._Bulb_Switcher_II.md b/672._Bulb_Switcher_II.md index e48f5cdd0..2441178f4 100644 --- a/672._Bulb_Switcher_II.md +++ b/672._Bulb_Switcher_II.md @@ -29,16 +29,16 @@ The four buttons: 所以,只有 8 种情形。 -***All_on, 1, 2, 3, 4, 1+4, 2+4, 3+4*** +***灯全亮, 操作1, 操作2, 操作3, 操作4, 操作1+4, 操作2+4, 操作3+4*** 并且当 n>2 and m>=3 时,我们就能够获得所有的情形。 | m\n | 0 | 1 | 2 | 3 | 4 | --- |----|--- |----|---|---| -| 0 | 1 | 1 | 1 | 1 | 8 | -| 1 | 1 | 2 | 3 | 4 | 8 | -| 2 | 1 | 2 | 4 | 7 | 8 | -| 3 | 8 | 8 | 8 | 8 | 8 | +| 0 | 1 | 1 | 1 | 1 | 1 | +| 1 | 1 | 2 | 3 | 4 | 4 | +| 2 | 1 | 2 | 4 | 7 | 7 | +| 3 | 1 | 2 | 3 | 8 | 8 | ```python class Solution(object): From 726c73f4f5a6d8e1cfbb9e57eb9305b0f74d169b Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 21:56:24 -0600 Subject: [PATCH 0165/2496] Update 039._combination_sum.md --- 039._combination_sum.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/039._combination_sum.md b/039._combination_sum.md index 147d5da68..1ea31c837 100644 --- a/039._combination_sum.md +++ b/039._combination_sum.md @@ -1,4 +1,4 @@ -###39. Combination Sum +### 39. Combination Sum 题目: @@ -40,7 +40,7 @@ Out[9]: [[2, 2, 3], [2, 3, 2], [3, 2, 2], [7]] 所以最终的除重大法如下,根据hint做出: -``` +```python class Solution(object): def combinationSum(self, candidates, target): """ @@ -48,19 +48,19 @@ class Solution(object): :type target: int :rtype: List[List[int]] """ - candidates = list(set(candidates)) - candidates.sort() - self.res = [] - self.combSum(candidates, target, 0, []) - return self.res - - - def combSum(self, candidates, target, start, valueList): - length = len(candidates) - if target == 0: - self.res.append(valueList) - for i in range(start, length): - if target < candidates[i]: + def dfs(remain, combo, index): + if remain == 0: + result.append(combo) return - self.combSum(candidates, target - candidates[i], i, valueList + [candidates[i]]) + for i in range(index, len(candy)): + if candy[i] > remain: + # exceeded the sum with candidate[i] + break #the for loop + + dfs(remain - candy[i], combo + [candy[i]], i) + + candy = sorted(candidates) + result = [] + dfs(target, [], 0) + return result ``` From 4e25cd7ed3ae572dfe7bea7c91e5575237b8b615 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 22:04:42 -0600 Subject: [PATCH 0166/2496] Update 039._combination_sum.md --- 039._combination_sum.md | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/039._combination_sum.md b/039._combination_sum.md index 1ea31c837..6bb8614bb 100644 --- a/039._combination_sum.md +++ b/039._combination_sum.md @@ -50,17 +50,15 @@ class Solution(object): """ def dfs(remain, combo, index): if remain == 0: - result.append(combo) + res.append(combo) return - for i in range(index, len(candy)): - if candy[i] > remain: - # exceeded the sum with candidate[i] - break #the for loop + for i in range(index, len(candidates)): + if candidates[i] > remain: + break + dfs(remain - candidates[i], combo + [candidates[i]], i) - dfs(remain - candy[i], combo + [candy[i]], i) - - candy = sorted(candidates) - result = [] + candidates.sort() + res = [] dfs(target, [], 0) - return result + return res ``` From 7e38fdf81c95b253b6877ffd12839b8c31fe8655 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 22:36:47 -0600 Subject: [PATCH 0167/2496] Update 039._combination_sum.md --- 039._combination_sum.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/039._combination_sum.md b/039._combination_sum.md index 6bb8614bb..b5579c25d 100644 --- a/039._combination_sum.md +++ b/039._combination_sum.md @@ -56,7 +56,7 @@ class Solution(object): if candidates[i] > remain: break dfs(remain - candidates[i], combo + [candidates[i]], i) - + candidates = list(set(candidates)) candidates.sort() res = [] dfs(target, [], 0) From 901777f3e790199ffab98f8de6c7ddfb75003a50 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 22:58:54 -0600 Subject: [PATCH 0168/2496] Update 040._combination_sum_ii.md --- 040._combination_sum_ii.md | 66 ++++++-------------------------------- 1 file changed, 10 insertions(+), 56 deletions(-) diff --git a/040._combination_sum_ii.md b/040._combination_sum_ii.md index 8ebce3aa6..b6a82ee57 100644 --- a/040._combination_sum_ii.md +++ b/040._combination_sum_ii.md @@ -1,4 +1,4 @@ -###40. Combination Sum II +### 40. Combination Sum II 题目: @@ -12,43 +12,7 @@ Medium Combination Sum 已经AC,做了minor change. -``` -class Solution(object): - def combinationSum2(self, candidates, target): - """ - :type candidates: List[int] - :type target: int - :rtype: List[List[int]] - """ - candidates.sort() - self.res = [] - self.combSum(candidates, target, 0, []) - return self.res - - def combSum(self, candidates, target, start, valueList): - length = len(candidates) - if target == 0: - if valueList not in self.res: - self.res.append(valueList) - if length == 0: - return - for i in range(start, length): - if target < candidates[i]: - return - self.combSum(candidates[:i] + candidates[i+1:], target - candidates[i], i, valueList + [candidates[i]]) - -``` - - - -以上是偷懒解法, 优化就是碰到已经碰到过的元素我们直接略过. - -这里的‘碰到’是比如我们已经有它,举个例子 - -然后也不用担心两个相同的放不进去,因为当我们处理第一个的时候,它并没拿来跟已经放入的元素比较了,只是在和还没放入的元素比较. - - -``` +```python class Solution(object): def combinationSum2(self, candidates, target): """ @@ -56,27 +20,17 @@ class Solution(object): :type target: int :rtype: List[List[int]] """ - def combSum(candidates, target, start, valueList): - length = len(candidates) - if target < 0 : + def dfs(remain, combo, index): + if remain == 0 and combo not in res: + res.append(combo) return - if target == 0 : - res.append(valueList) - for i in range(start, length): - if candidates[i] > target: return - if i > 0 and candidates[i] == candidates[i-1]: continue - combSum(candidates[i+1:], target - candidates[i], 0, valueList + [candidates[i]]) - - + for i in range(index, len(candidates)): + if candidates[i] > remain: + break + dfs(remain - candidates[i], combo + [candidates[i]], i+1) candidates.sort() res = [] - combSum(candidates, target, 0, []) + dfs(target, [], 0) return res - - ``` - - - -多重优化 \ No newline at end of file From 97faa8ecf8d209332faed24c20e375a53aa5c0b0 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 23:02:49 -0600 Subject: [PATCH 0169/2496] Update 040._combination_sum_ii.md --- 040._combination_sum_ii.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/040._combination_sum_ii.md b/040._combination_sum_ii.md index b6a82ee57..7abb448f3 100644 --- a/040._combination_sum_ii.md +++ b/040._combination_sum_ii.md @@ -11,6 +11,9 @@ Medium Combination Sum 已经AC,做了minor change. +- 现在不需要```set```化```candidates```了 +- 但是递归的时候```index```要从```i+1```开始了 +- 要判断```combo not in res```才```append```到```res```中去 ```python class Solution(object): From 8bc54a3f4d9c90c59bf65b7df563ec21a64881b9 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 23:34:24 -0600 Subject: [PATCH 0170/2496] Update and rename 013.Roman to Integer.md to 013._Roman_to_Integer.md --- 013.Roman to Integer.md | 80 ---------------------------------------- 013._Roman_to_Integer.md | 70 +++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 80 deletions(-) delete mode 100644 013.Roman to Integer.md create mode 100644 013._Roman_to_Integer.md diff --git a/013.Roman to Integer.md b/013.Roman to Integer.md deleted file mode 100644 index f8ddb8667..000000000 --- a/013.Roman to Integer.md +++ /dev/null @@ -1,80 +0,0 @@ -### 13.Roman to Integer - - - -题目: - - -难度: -Easy - -思路: - -integer to Roman 是 Medium,这个roman to integer是easy - -所以用的傻方法,特殊处理4,9,40,90,400,900,再加上剩下的数字 - - - -AC代码 - -``` -class Solution(object): - def romanToInt(self, s): - """ - :type s: str - :rtype: int - """ - lookup1 = {'CM':900,'CD':400,'XC':90,'XL':40,'IX':9,'IV':4} - lookup2 = {'M':1000, 'D':500, 'C':100, 'L':50, 'X':10, 'V':5, 'I':1} - - num = 0 - for i in lookup1.keys(): - if i in s: - num += lookup1[i] - s = s.replace(i,'') - - for char in s: - num += lookup2[char] - - return num -``` - - - - - -然后可以有更好的方法: - -> 从前往后扫描,用一个临时变量记录分段数字。 -> -> 如果当前比前一个大,说明这一段的值应当是这个值减去上一个值。比如IV = 5-1 =4; 否则,将当前值加入到结果中,然后开始下一段记录,比如VI = 5 + 1, II = 1 +1 - - - -所以这也就是罗马数字的基础,感觉?这样才不会读串? - - - -AC代码 - -``` -class Solution(object): - def romanToInt(self, s): - """ - :type s: str - :rtype: int - """ - lookup = {'M':1000, 'D':500, 'C':100, 'L':50, 'X':10, 'V':5, 'I':1} - - num = 0 - - for i in range(len(s)): - if i > 0 and lookup[s[i]] > lookup[s[i-1]]: - num += lookup[s[i]] - 2 * lookup[s[i-1]] - else: - num += lookup[s[i]] - - return num -``` - diff --git a/013._Roman_to_Integer.md b/013._Roman_to_Integer.md new file mode 100644 index 000000000..ca7579f93 --- /dev/null +++ b/013._Roman_to_Integer.md @@ -0,0 +1,70 @@ +### 13.Roman to Integer + + + +题目: + + +难度: +Easy + +思路: + + +``` +罗马数字是最古老的数字表示方式,比阿拉伯数组早2000多年,起源于罗马 + +罗马数字有如下符号: + +基本字符 I V X L C D M +对应阿拉伯数字 1 5 10 50 100 500 1000 +计数规则: +相同的数字连写,所表示的数等于这些数字相加得到的数,例如:III = 3 +小的数字在大的数字右边,所表示的数等于这些数字相加得到的数,例如:VIII = 8 +小的数字,限于(I、X和C)在大的数字左边,所表示的数等于大数减去小数所得的数,例如:IV = 4,这条规则好像这题不管 +正常使用时,连续的数字重复不得超过三次 +在一个数的上面画横线,表示这个数扩大1000倍(本题只考虑3999以内的数,所以用不到这条规则) +从前向后遍历罗马数字,如果某个数比前一个数小,则加上该数。反之,减去前一个数的两倍然后加上该数 +``` + + + +integer to Roman 是 Medium,这个roman to integer是easy + + +> 从前往后扫描,用一个临时变量记录分段数字。 +> +> 如果当前比前一个大,说明这一段的值应当是这个值减去上一个值。比如IV = 5-1 =4; 否则,将当前值加入到结果中,然后开始下一段记录,比如VI = 5 + 1, II = 1 +1 + + +所以这也就是罗马数字的基础,感觉?这样才不会读串? + + + +AC代码 + +```python +class Solution(object): + def romanToInt(self, s): + """ + :type s: str + :rtype: int + """ + lookup = { + 'M': 1000, + 'D': 500, + 'C': 100, + 'L': 50, + 'X': 10, + 'V': 5, + 'I': 1 + } + res = 0 + for i in range(len(s)): + if i > 0 and lookup[s[i]] > lookup[s[i-1]]: + res = res + lookup[s[i]] - 2 * lookup[s[i-1]] + else: + res += lookup[s[i]] + return res +``` + From babf713861f3fb71618ab7876d037cda15941993 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 23:35:12 -0600 Subject: [PATCH 0171/2496] Update 013._Roman_to_Integer.md --- 013._Roman_to_Integer.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/013._Roman_to_Integer.md b/013._Roman_to_Integer.md index ca7579f93..cb0c771e6 100644 --- a/013._Roman_to_Integer.md +++ b/013._Roman_to_Integer.md @@ -18,6 +18,7 @@ Easy 基本字符 I V X L C D M 对应阿拉伯数字 1 5 10 50 100 500 1000 + 计数规则: 相同的数字连写,所表示的数等于这些数字相加得到的数,例如:III = 3 小的数字在大的数字右边,所表示的数等于这些数字相加得到的数,例如:VIII = 8 @@ -32,9 +33,8 @@ Easy integer to Roman 是 Medium,这个roman to integer是easy -> 从前往后扫描,用一个临时变量记录分段数字。 -> -> 如果当前比前一个大,说明这一段的值应当是这个值减去上一个值。比如IV = 5-1 =4; 否则,将当前值加入到结果中,然后开始下一段记录,比如VI = 5 + 1, II = 1 +1 +- 从前往后扫描,用一个临时变量记录分段数字。 +- 如果当前比前一个大,说明这一段的值应当是这个值减去上一个值。比如IV = 5-1 =4; 否则,将当前值加入到结果中,然后开始下一段记录,比如VI = 5 + 1, II = 1 +1 所以这也就是罗马数字的基础,感觉?这样才不会读串? From 10c0c348ea09f023633479d00dcf7b3e3b9ab905 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 23:37:50 -0600 Subject: [PATCH 0172/2496] Update 013._Roman_to_Integer.md --- 013._Roman_to_Integer.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/013._Roman_to_Integer.md b/013._Roman_to_Integer.md index cb0c771e6..d226c3a32 100644 --- a/013._Roman_to_Integer.md +++ b/013._Roman_to_Integer.md @@ -67,4 +67,16 @@ class Solution(object): res += lookup[s[i]] return res ``` - +或者甚至可以建立一个新函数用于取对应数值: +``` + def table(x): + return { + 'I':1, + 'V':5, + 'X':10, + 'L':50, + 'C':100, + 'D':500, + 'M':1000 + }.get(x) +``` From 5ff7ea686cbf687d0b9fa8e2fea8b348d60dbdf6 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 23:38:13 -0600 Subject: [PATCH 0173/2496] Update 013._Roman_to_Integer.md --- 013._Roman_to_Integer.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/013._Roman_to_Integer.md b/013._Roman_to_Integer.md index d226c3a32..fd4fa933f 100644 --- a/013._Roman_to_Integer.md +++ b/013._Roman_to_Integer.md @@ -20,12 +20,12 @@ Easy 对应阿拉伯数字 1 5 10 50 100 500 1000 计数规则: -相同的数字连写,所表示的数等于这些数字相加得到的数,例如:III = 3 -小的数字在大的数字右边,所表示的数等于这些数字相加得到的数,例如:VIII = 8 -小的数字,限于(I、X和C)在大的数字左边,所表示的数等于大数减去小数所得的数,例如:IV = 4,这条规则好像这题不管 -正常使用时,连续的数字重复不得超过三次 -在一个数的上面画横线,表示这个数扩大1000倍(本题只考虑3999以内的数,所以用不到这条规则) -从前向后遍历罗马数字,如果某个数比前一个数小,则加上该数。反之,减去前一个数的两倍然后加上该数 +- 相同的数字连写,所表示的数等于这些数字相加得到的数,例如:III = 3 +- 小的数字在大的数字右边,所表示的数等于这些数字相加得到的数,例如:VIII = 8 +- 小的数字,限于(I、X和C)在大的数字左边,所表示的数等于大数减去小数所得的数,例如:IV = 4,这条规则好像这题不管 +- 正常使用时,连续的数字重复不得超过三次 +- 在一个数的上面画横线,表示这个数扩大1000倍(本题只考虑3999以内的数,所以用不到这条规则) +- 从前向后遍历罗马数字,如果某个数比前一个数小,则加上该数。反之,减去前一个数的两倍然后加上该数 ``` From c2738ae3abfbf03565fb9723d50c31429b0a230d Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 29 Dec 2017 23:40:51 -0600 Subject: [PATCH 0174/2496] Update 013._Roman_to_Integer.md --- 013._Roman_to_Integer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/013._Roman_to_Integer.md b/013._Roman_to_Integer.md index fd4fa933f..4f1184b8a 100644 --- a/013._Roman_to_Integer.md +++ b/013._Roman_to_Integer.md @@ -16,7 +16,7 @@ Easy 罗马数字有如下符号: -基本字符 I V X L C D M +基本字符 I V X L C D M 对应阿拉伯数字 1 5 10 50 100 500 1000 计数规则: From 90861cc00b4a139c25a3adb68005f59821e41d61 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 00:09:27 -0600 Subject: [PATCH 0175/2496] Create 26._md --- 26._md | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 26._md diff --git a/26._md b/26._md new file mode 100644 index 000000000..fc7982c4b --- /dev/null +++ b/26._md @@ -0,0 +1,51 @@ +### 26. Remove Duplicates from Sorted Array + + + +题目: + + + +难度: +Easy + +思路: +因为题目说了是```sorted array```,所以只需要不停判断当前位置值和下一位置是否相等,若相等则```remove当前值```,否则```move```到下一位置做重复判断 + + +```python +class Solution(object): + def removeDuplicates(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + i = 0 + while i < (len(nums) - 1): + if nums[i] == nums[i+1]: + nums.remove(nums[i]) + else: + i += 1 + return len(nums) +``` + + +这里代码用```while loop```而不用```for loop```是因为```remove```操作之后```nums```的长度会变化 + + + + + + + + + + + + + + + + + + From 05f278277fa7e423e1e8ec4358c723066cbecdce Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 00:10:10 -0600 Subject: [PATCH 0176/2496] Rename 26._md to 26._Remove_Duplicates_from_Sorted_Array.md --- 26._md => 26._Remove_Duplicates_from_Sorted_Array.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename 26._md => 26._Remove_Duplicates_from_Sorted_Array.md (100%) diff --git a/26._md b/26._Remove_Duplicates_from_Sorted_Array.md similarity index 100% rename from 26._md rename to 26._Remove_Duplicates_from_Sorted_Array.md From 7639cdb1426b74b7a9d461a8ea84e873fdb4d09b Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 00:11:55 -0600 Subject: [PATCH 0177/2496] Update and rename 26._Remove_Duplicates_from_Sorted_Array.md to 026._Remove_Duplicates_from_Sorted_Array.md --- ...rted_Array.md => 026._Remove_Duplicates_from_Sorted_Array.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename 26._Remove_Duplicates_from_Sorted_Array.md => 026._Remove_Duplicates_from_Sorted_Array.md (83%) diff --git a/26._Remove_Duplicates_from_Sorted_Array.md b/026._Remove_Duplicates_from_Sorted_Array.md similarity index 83% rename from 26._Remove_Duplicates_from_Sorted_Array.md rename to 026._Remove_Duplicates_from_Sorted_Array.md index fc7982c4b..44172a326 100644 --- a/26._Remove_Duplicates_from_Sorted_Array.md +++ b/026._Remove_Duplicates_from_Sorted_Array.md @@ -30,7 +30,7 @@ class Solution(object): ``` -这里代码用```while loop```而不用```for loop```是因为```remove```操作之后```nums```的长度会变化 +这里代码用```while loop```而不用```for loop```是因为```remove```操作之后```nums```的长度会变化, ```for i in range(len(nums)-1)```实际上固定了```range```里面的值了,不会二次判断 From 390cf2a92798ee2bcfba5e04f65990957d6b03e0 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 00:15:17 -0600 Subject: [PATCH 0178/2496] Update 026._Remove_Duplicates_from_Sorted_Array.md --- 026._Remove_Duplicates_from_Sorted_Array.md | 24 ++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/026._Remove_Duplicates_from_Sorted_Array.md b/026._Remove_Duplicates_from_Sorted_Array.md index 44172a326..bed57dc42 100644 --- a/026._Remove_Duplicates_from_Sorted_Array.md +++ b/026._Remove_Duplicates_from_Sorted_Array.md @@ -30,7 +30,29 @@ class Solution(object): ``` -这里代码用```while loop```而不用```for loop```是因为```remove```操作之后```nums```的长度会变化, ```for i in range(len(nums)-1)```实际上固定了```range```里面的值了,不会二次判断 +这里代码用```while loop```而不用```for loop```是因为```remove```操作之后```nums```的长度会变化 + +如:```for i in range(len(nums)-1)```实际上固定了```range```里面的值了,不会二次判断 + +``` +n = 10 +for i in range(n): + n = n - 1 # 尽管n在变化 + print(i) + +上面这段代码的输出结果为: + +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +``` From 97d15b45883d17760023fa94ae7c672c9d37e5de Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 00:17:16 -0600 Subject: [PATCH 0179/2496] Update 026._Remove_Duplicates_from_Sorted_Array.md --- 026._Remove_Duplicates_from_Sorted_Array.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/026._Remove_Duplicates_from_Sorted_Array.md b/026._Remove_Duplicates_from_Sorted_Array.md index bed57dc42..23b43561c 100644 --- a/026._Remove_Duplicates_from_Sorted_Array.md +++ b/026._Remove_Duplicates_from_Sorted_Array.md @@ -10,7 +10,7 @@ Easy 思路: -因为题目说了是```sorted array```,所以只需要不停判断当前位置值和下一位置是否相等,若相等则```remove当前值```,否则```move```到下一位置做重复判断 +因为题目说了是```sorted array```,所以只需要不停判断当前位置值和下一位置是否相等,若相等则```pop掉当前值```,否则```move```到下一位置做重复判断 ```python @@ -30,7 +30,7 @@ class Solution(object): ``` -这里代码用```while loop```而不用```for loop```是因为```remove```操作之后```nums```的长度会变化 +这里代码用```while loop```而不用```for loop```是因为```pop```操作之后```nums```的长度会变化 如:```for i in range(len(nums)-1)```实际上固定了```range```里面的值了,不会二次判断 From dbb912f361b4a93f113122e459f616796f01b188 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 00:22:15 -0600 Subject: [PATCH 0180/2496] Create 27._Remove_Element.md --- 27._Remove_Element.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 27._Remove_Element.md diff --git a/27._Remove_Element.md b/27._Remove_Element.md new file mode 100644 index 000000000..6aefeee1d --- /dev/null +++ b/27._Remove_Element.md @@ -0,0 +1,26 @@ +### 27. Remove Element + + + +题目: + + + +难度: +Easy + +瞬秒 + +```python +class Solution(object): + def removeElement(self, nums, val): + """ + :type nums: List[int] + :type val: int + :rtype: int + """ + + while val in nums: + nums.remove(val) + return len(nums) +``` From 3ea1aa0087b28881040c21112a51689621b0ef08 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 00:22:39 -0600 Subject: [PATCH 0181/2496] Update and rename 27._Remove_Element.md to 027._Remove_Element.md --- 27._Remove_Element.md => 027._Remove_Element.md | 1 - 1 file changed, 1 deletion(-) rename 27._Remove_Element.md => 027._Remove_Element.md (97%) diff --git a/27._Remove_Element.md b/027._Remove_Element.md similarity index 97% rename from 27._Remove_Element.md rename to 027._Remove_Element.md index 6aefeee1d..3603a5b3d 100644 --- a/27._Remove_Element.md +++ b/027._Remove_Element.md @@ -19,7 +19,6 @@ class Solution(object): :type val: int :rtype: int """ - while val in nums: nums.remove(val) return len(nums) From 95b68a8a976ba573f6da6bcb4594cdbeb96a235e Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 00:31:32 -0600 Subject: [PATCH 0182/2496] Update 283._move_zeroes.md --- 283._move_zeroes.md | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/283._move_zeroes.md b/283._move_zeroes.md index 239b57188..67572ade8 100644 --- a/283._move_zeroes.md +++ b/283._move_zeroes.md @@ -1,4 +1,4 @@ -###283. Move Zeroes +### 283. Move Zeroes 题目: @@ -11,9 +11,25 @@ Easy 思路: -思路一: +思路一:暴力 -这个题我很笨,但是思路是可以朝逆天的方向走的,一旦遇到不是0的就把它往前移动,移动非0完成,剩下的全部填0,看例子 +```python +class Solution(object): + def moveZeroes(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + i = 0 + while 0 in nums: + nums.remove(0) + i += 1 + nums.extend([0]*i) +``` + +思路二: + +一旦遇到不是0的就把它往前移动,移动非0完成,剩下的全部填0,看例子 @@ -37,7 +53,7 @@ Easy 这样知道变换完成,简直逆天啊,因为cur 总是小于idx,所以总可以保持这样的稳定性 -``` +```python class Solution(object): def moveZeroes(self, nums): """ @@ -67,14 +83,14 @@ class Solution(object): -``` +```python class Solution(object): def moveZeroes(self, nums): """ :type nums: List[int] :rtype: void Do not return anything, modify nums in-place instead. """ - p0, p1 = 0,0 + p0, p1 = 0, 0 while p0 < len(nums) and p1 < len(nums): if nums[p0] != 0: p0 += 1 From c27f3513af9777a3ec9311607aee39ffc619e8b9 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 00:42:10 -0600 Subject: [PATCH 0183/2496] Update 283._move_zeroes.md --- 283._move_zeroes.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/283._move_zeroes.md b/283._move_zeroes.md index 67572ade8..ded5c9818 100644 --- a/283._move_zeroes.md +++ b/283._move_zeroes.md @@ -75,7 +75,7 @@ class Solution(object): ``` -思路二: +思路三: 传统的双指针,参考这里 @@ -106,4 +106,18 @@ class Solution(object): 相反,我觉得这样双指针反而没有上面的代码容易理解 +思路四: + +一个比较巧妙的方法: +```python +class Solution(object): + def moveZeroes(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + nums.sort(key= lambda x: 1 if x == 0 else 0) +``` +原理就是原先为0的数优先级在此次sort中更高了,所以全部升序排列排到后面去了 + From 5a8b90c8961d43265a4a2d5a856960018adcd61d Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 00:47:06 -0600 Subject: [PATCH 0184/2496] Update 283._move_zeroes.md --- 283._move_zeroes.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/283._move_zeroes.md b/283._move_zeroes.md index ded5c9818..dfd4beebe 100644 --- a/283._move_zeroes.md +++ b/283._move_zeroes.md @@ -120,4 +120,6 @@ class Solution(object): ``` 原理就是原先为0的数优先级在此次sort中更高了,所以全部升序排列排到后面去了 +但是这个解法被人说是没有满足题目```no extra space```的条件,详见[Sayo](https://leetcode.com/problems/move-zeroes/discuss/72074/) + From bcb8f898192addfd22c66d353507a62d413b2bf4 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 00:47:41 -0600 Subject: [PATCH 0185/2496] Update 283._move_zeroes.md --- 283._move_zeroes.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/283._move_zeroes.md b/283._move_zeroes.md index dfd4beebe..52917fd11 100644 --- a/283._move_zeroes.md +++ b/283._move_zeroes.md @@ -121,5 +121,8 @@ class Solution(object): 原理就是原先为0的数优先级在此次sort中更高了,所以全部升序排列排到后面去了 但是这个解法被人说是没有满足题目```no extra space```的条件,详见[Sayo](https://leetcode.com/problems/move-zeroes/discuss/72074/) +``` +timsort can require a temp array containing as many as N//2 pointers, which means as many as 2*N extra bytes on 32-bit boxes. +``` From c354b8b37fcf129880db41aa861fba4dbdd64efa Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 00:50:39 -0600 Subject: [PATCH 0186/2496] Update 283._move_zeroes.md --- 283._move_zeroes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/283._move_zeroes.md b/283._move_zeroes.md index 52917fd11..62702fc9f 100644 --- a/283._move_zeroes.md +++ b/283._move_zeroes.md @@ -81,7 +81,7 @@ class Solution(object): - +此法最快,```beats 90.50%``` ```python class Solution(object): From c5dfd169ecf1c85729adda323f1bc2337553adde Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 00:51:28 -0600 Subject: [PATCH 0187/2496] Update 283._move_zeroes.md --- 283._move_zeroes.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/283._move_zeroes.md b/283._move_zeroes.md index 62702fc9f..4be3f76ea 100644 --- a/283._move_zeroes.md +++ b/283._move_zeroes.md @@ -11,7 +11,7 @@ Easy 思路: -思路一:暴力 +### 思路一:暴力 ```python class Solution(object): @@ -27,7 +27,7 @@ class Solution(object): nums.extend([0]*i) ``` -思路二: +### 思路二: 一旦遇到不是0的就把它往前移动,移动非0完成,剩下的全部填0,看例子 @@ -75,13 +75,13 @@ class Solution(object): ``` -思路三: +### 思路三: 传统的双指针,参考这里 -此法最快,```beats 90.50%``` +```此法最快,beats 90.50%``` ```python class Solution(object): @@ -106,7 +106,7 @@ class Solution(object): 相反,我觉得这样双指针反而没有上面的代码容易理解 -思路四: +### 思路四: 一个比较巧妙的方法: ```python From 9ac213b487a59c132a6584bf4a94fe08b14007df Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 00:54:31 -0600 Subject: [PATCH 0188/2496] Update 283._move_zeroes.md --- 283._move_zeroes.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/283._move_zeroes.md b/283._move_zeroes.md index 4be3f76ea..a5e887c05 100644 --- a/283._move_zeroes.md +++ b/283._move_zeroes.md @@ -90,8 +90,8 @@ class Solution(object): :type nums: List[int] :rtype: void Do not return anything, modify nums in-place instead. """ - p0, p1 = 0, 0 - while p0 < len(nums) and p1 < len(nums): +        p0, p1 = 0, 0 # P1指向非0,p0指向0 +        while p0 < len(nums) and p1 < len(nums): if nums[p0] != 0: p0 += 1 p1 = p0 From 912d94ac8b044cbdf833da1e7daa2452d93b17ff Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 01:14:21 -0600 Subject: [PATCH 0189/2496] Update 028._implement_strstr().md --- 028._implement_strstr().md | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/028._implement_strstr().md b/028._implement_strstr().md index d1470c30b..cecd6a5e5 100644 --- a/028._implement_strstr().md +++ b/028._implement_strstr().md @@ -1,4 +1,4 @@ -###28. Implement strStr() +### 28. Implement strStr() 题目: @@ -10,12 +10,23 @@ Easy -这个题目其实可以引来一大类,那就是关于string的算法,但是此处先用暴力算法来AC,然后再来细读/品味别的string相关算法吧。 +一行解法如何? +```python +class Solution(object): + def strStr(self, haystack, needle): + """ + :type haystack: str + :type needle: str + :rtype: int + """ + return haystack.find(needle) +``` -虽然是暴力算法,但是也不容易写对啊 +这个题目其实可以引来一大类,那就是关于string的算法,但是此处先用暴力算法来AC,然后再来细读/品味别的string相关算法吧。 -``` +虽然是暴力算法,但是也不容易写对啊 +```python class Solution(object): def strStr(self, haystack, needle): """ @@ -33,4 +44,4 @@ class Solution(object): if j == len(needle): return i return -1 -``` \ No newline at end of file +``` From 0f4cc3652c08b8e2919f05261dcceee5271d2e15 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 01:20:37 -0600 Subject: [PATCH 0190/2496] Update 035._search_insert_position.md --- 035._search_insert_position.md | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/035._search_insert_position.md b/035._search_insert_position.md index a45141cbe..ba17f3497 100644 --- a/035._search_insert_position.md +++ b/035._search_insert_position.md @@ -1,4 +1,4 @@ -###35. Search Insert Position +### 35. Search Insert Position 题目: @@ -8,10 +8,9 @@ Medium +找到第一个比```target```大的值的```index```,如果没找到则返回```len(nums)```,但是代码中直接返回```i```值就行了 -递归 - -``` +```python class Solution(object): def searchInsert(self, nums, target): """ @@ -19,14 +18,10 @@ class Solution(object): :type target: int :rtype: int """ - n = len(nums) - if target <= nums[0]: - return 0 - if target > nums[n-1]: - return n - for i in range(1,n): - if target == nums[i]: + i = 0 + while nums[i] < target: + i += 1 + if i == len(nums): return i - elif target > nums[i-1] and target < nums[i]: - return i -``` \ No newline at end of file + return i +``` From 75e9f5a7da1c6f60a31ba336f2e983ac1f2964d7 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 01:32:16 -0600 Subject: [PATCH 0191/2496] Update 035._search_insert_position.md --- 035._search_insert_position.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/035._search_insert_position.md b/035._search_insert_position.md index ba17f3497..1b14c88ce 100644 --- a/035._search_insert_position.md +++ b/035._search_insert_position.md @@ -10,6 +10,8 @@ Medium 找到第一个比```target```大的值的```index```,如果没找到则返回```len(nums)```,但是代码中直接返回```i```值就行了 +### 思路一:暴力 + ```python class Solution(object): def searchInsert(self, nums, target): @@ -25,3 +27,22 @@ class Solution(object): return i return i ``` +### 思路二:二分 + +```python +class Solution(object): + def searchInsert(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: int + """ + left, right = 0, len(nums) - 1 + while left <= right: + mid = left + ((right - left) >> 2) + if nums[mid] < target: + left = mid + 1 + else: + right = mid - 1 + return left +``` From bad2f35d3ecc5605d20395460588dc2fd7f45bcf Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 01:45:28 -0600 Subject: [PATCH 0192/2496] Update 038._Count_and_Say.md --- 038._Count_and_Say.md | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/038._Count_and_Say.md b/038._Count_and_Say.md index ac4542b5b..8a61793a7 100644 --- a/038._Count_and_Say.md +++ b/038._Count_and_Say.md @@ -1,4 +1,4 @@ -###38. Count and Say +### 38. Count and Say 题目: @@ -13,7 +13,7 @@ Easy 1. i代表字符下标,从0开始取值,也就是从第一个字符开始,因为要让i取到最后一个字符,并且后面还要进行i+1的操作,所以将原字符串随意加上一个‘*’字符防止溢出 -2. sum代表此时已经连续相同的字符个数 +2. count代表此时已经连续相同的字符个数 3. res代表最终输出的字符串 - 只要i下标对应的字符等于下一个字符,则sum和i都加1,无限循环 @@ -45,15 +45,13 @@ class Solution(object): if n == 1: return '1' s = self.countAndSay(n-1) + '*' - res = '' - i, sum = 0, 1 - while i < len(s) - 1: + res, count = '', 1 + for i in range(len(s)-1): if s[i] == s[i+1]: - sum += 1 + count += 1 else: - res += (str(sum) + s[i]) - sum = 1 - i += 1 + res += str(count) + str(s[i]) + count = 1 return res ``` ```python @@ -65,7 +63,7 @@ class Solution(object): :rtype: str """ res = '1' - for i in xrange(n-1): + for i in range(n-1): res = ''.join([str(len(list(group))) + digit for digit, group in itertools.groupby(res)]) return res ``` From 9fd87adf34176bb6aa1e74a9b61631695a08186c Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 01:51:26 -0600 Subject: [PATCH 0193/2496] Update 038._Count_and_Say.md --- 038._Count_and_Say.md | 1 + 1 file changed, 1 insertion(+) diff --git a/038._Count_and_Say.md b/038._Count_and_Say.md index 8a61793a7..02444e098 100644 --- a/038._Count_and_Say.md +++ b/038._Count_and_Say.md @@ -68,6 +68,7 @@ class Solution(object): return res ``` + ```java 解法3 class Solution { From 469d806e8f90efcd9a7746b1b7238215a4a6ad70 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 01:55:40 -0600 Subject: [PATCH 0194/2496] Update 038._Count_and_Say.md --- 038._Count_and_Say.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/038._Count_and_Say.md b/038._Count_and_Say.md index 02444e098..c735ca188 100644 --- a/038._Count_and_Say.md +++ b/038._Count_and_Say.md @@ -67,7 +67,7 @@ class Solution(object): res = ''.join([str(len(list(group))) + digit for digit, group in itertools.groupby(res)]) return res ``` - +详见[python进阶-ITERTOOLS模块小结](http://www.wklken.me/posts/2013/08/20/python-extra-itertools.html#itertoolsgroupbyiterable-key) ```java 解法3 From 37b5d1d03d3bc5a40ae9c0dc562c602c581ec7aa Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 02:01:59 -0600 Subject: [PATCH 0195/2496] Update 049._group_anagrams_python.md --- 049._group_anagrams_python.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/049._group_anagrams_python.md b/049._group_anagrams_python.md index aa6962957..1371afdb4 100644 --- a/049._group_anagrams_python.md +++ b/049._group_anagrams_python.md @@ -1,4 +1,4 @@ -###49. Group Anagrams python +### 49. Group Anagrams python 题目: From 0a948882016508b230e39f3e9f4ee862fae78746 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 02:06:20 -0600 Subject: [PATCH 0196/2496] Update 058._length_of_last_word.md --- 058._length_of_last_word.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/058._length_of_last_word.md b/058._length_of_last_word.md index 82eadabe5..bb6029a34 100644 --- a/058._length_of_last_word.md +++ b/058._length_of_last_word.md @@ -1,4 +1,4 @@ -###58. Length of Last Word +### 58. Length of Last Word 题目: @@ -45,7 +45,7 @@ class Solution(object): ``` 作弊式做法 -``` +```python class Solution(object): def lengthOfLastWord(self, s): """ From ee48ad601af947ac83b8d1a409c78c6438b2d747 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 02:33:34 -0600 Subject: [PATCH 0197/2496] Update 058._length_of_last_word.md --- 058._length_of_last_word.md | 31 +++---------------------------- 1 file changed, 3 insertions(+), 28 deletions(-) diff --git a/058._length_of_last_word.md b/058._length_of_last_word.md index bb6029a34..b9ec0160c 100644 --- a/058._length_of_last_word.md +++ b/058._length_of_last_word.md @@ -7,6 +7,7 @@ 难度 : Easy 我的解法: + ```python class Solution(object): def lengthOfLastWord(self, s): @@ -14,34 +15,8 @@ class Solution(object): :type s: str :rtype: int """ - if not s: - return 0 - string = list(s) - i = len(s)-1 - res = [] - while i >= 0 and string[i] == ' ': - i -= 1 - while i >= 0 and string[i] != ' ': - res.append(string[i]) - i -= 1 - return len(res) -``` -上面这个判断可以精简成下面的代码: -```python -class Solution(object): - def lengthOfLastWord(self, s): - """ - :type s: str - :rtype: int - """ - length = 0 - for i in reversed(s): - if i == ' ': - if length: - break - else: - length += 1 - return length + s = s[::-1].strip() + return s.find(' ') if s.find(' ') != -1 else len(s) ``` 作弊式做法 From d73fbeeb8b76fda10afc7c68d1131c9725fb53df Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 02:44:15 -0600 Subject: [PATCH 0198/2496] Update 069._sqrt(x).md --- 069._sqrt(x).md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/069._sqrt(x).md b/069._sqrt(x).md index 47f0363e7..04bda77bb 100644 --- a/069._sqrt(x).md +++ b/069._sqrt(x).md @@ -1,4 +1,4 @@ -###69. Sqrt(x) +### 69. Sqrt(x) 题目: @@ -43,15 +43,15 @@ class Solution(object): """ if x == 1 : return 1 if x == 0 : return 0 - l,r = 0, x - while l < r: - mid = (l+r)/2 + l, r = 0, x -1 + while l <= r: + mid = l + ((r - l) >> 2) if mid * mid <= x and (mid+1)*(mid+1) > x: return mid elif mid * mid > x: - r = mid + r = mid - 1 else: - l = mid + l = mid + 1 ``` 其实这个else感觉是没有意义的,因为其root不可能比它的一半还大吧? @@ -70,9 +70,9 @@ class Solution(object): :type x: int :rtype: int """ - result = 1.0 - while abs(result * result - x) > 0.1: - result = (result + x / result) / 2 - return int(result) + res = 1.0 + while abs(res * res - x) > 0.1: + res = (res + x / res) / 2 + return int(res) ``` From e0fa9784f548d88c2fb734737b9c0d2242c53038 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 02:44:31 -0600 Subject: [PATCH 0199/2496] Update 069._sqrt(x).md --- 069._sqrt(x).md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/069._sqrt(x).md b/069._sqrt(x).md index 04bda77bb..7cb2bc698 100644 --- a/069._sqrt(x).md +++ b/069._sqrt(x).md @@ -34,7 +34,7 @@ class Solution(object): 莫名其妙过了的代码: -``` +```python class Solution(object): def mySqrt(self, x): """ @@ -63,7 +63,7 @@ class Solution(object): -``` +```python class Solution(object): def mySqrt(self, x): """ From 8d683ad393d3b6c5e445fb97e8264b5731d6a7e4 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 02:49:10 -0600 Subject: [PATCH 0200/2496] Update 069._sqrt(x).md --- 069._sqrt(x).md | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/069._sqrt(x).md b/069._sqrt(x).md index 7cb2bc698..70c28f6e2 100644 --- a/069._sqrt(x).md +++ b/069._sqrt(x).md @@ -43,7 +43,7 @@ class Solution(object): """ if x == 1 : return 1 if x == 0 : return 0 - l, r = 0, x -1 + l, r = 0, x - 1 while l <= r: mid = l + ((r - l) >> 2) if mid * mid <= x and (mid+1)*(mid+1) > x: @@ -54,7 +54,30 @@ class Solution(object): l = mid + 1 ``` -其实这个else感觉是没有意义的,因为其root不可能比它的一半还大吧? +或者 +```python +class Solution(object): + def mySqrt(self, x): + """ + :type x: int + :rtype: int + """ + if x == 1: + return 1 + if x == 0: + return 0 + l, r = 0, x-1 + while l <= r: + mid = l + ((r - l) >> 2) + if (mid * mid - x == 0): + return mid + elif (mid * mid - x > 0): + r = mid - 1 + else: + l = mid + 1 + return r +``` + 牛顿法 From 0eea087a4d982dac1899dc21cb33e3dfe4d5b5b3 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 02:55:35 -0600 Subject: [PATCH 0201/2496] Update 088._merge_sorted_array.md --- 088._merge_sorted_array.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/088._merge_sorted_array.md b/088._merge_sorted_array.md index dc8815e67..029b3c330 100644 --- a/088._merge_sorted_array.md +++ b/088._merge_sorted_array.md @@ -11,10 +11,10 @@ 给的数组可能是这样的 -nums1 : [0] -m : 0 -nums2 : [1] -n : 1 +- nums1 : [0] +- m : 0 +- nums2 : [1] +- n : 1 所以要判断m和n是不是仍然大于0 @@ -23,7 +23,7 @@ n : 1 AC代码 -``` +```python class Solution: def merge(self, nums1, m, nums2, n): """ From e9d9e19972923ec1eee96f52db87f9264b5f7aa7 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 03:03:31 -0600 Subject: [PATCH 0202/2496] Update 125._valid_palindrome.md --- 125._valid_palindrome.md | 45 +++++++--------------------------------- 1 file changed, 7 insertions(+), 38 deletions(-) diff --git a/125._valid_palindrome.md b/125._valid_palindrome.md index f79899e2d..0850af088 100644 --- a/125._valid_palindrome.md +++ b/125._valid_palindrome.md @@ -1,4 +1,4 @@ -###125. Valid Palindrome +### 125. Valid Palindrome 题目: @@ -8,42 +8,12 @@ Easy -根据这个palindrome原理来看,running time比较慢 -``` -class Solution(object): - def isPalindrome(self,s): - """ - :type s: str - :rtype: bool - """ - Alphabets = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9'] - i = 0 - j = len(s) - 1 - palindrome = True - lowerS = s.lower() - while i < j: - if lowerS[i] not in Alphabets: - i += 1 - continue - if lowerS[j] not in Alphabets: - j -= 1 - continue - if lowerS[i] != lowerS[j]: - print(i,lowerS[i],j,lowerS[j]) - return False - # s[i] == s[j] - else: - i += 1 - j -= 1 - return palindrome - -``` -当然也有取巧的办法,就是比较reversed string 和原本的是否相等. -Running time 提升了一点 +就是比较reversed string 和原本的是否相等. -``` + +```python class Solution(object): def isPalindrome(self,s): """ @@ -52,12 +22,11 @@ class Solution(object): """ new=[] - - s=s.lower() + s = s.lower() for i in s: if '0'<=i<='9' or 'a'<=i<='z': new.append(i) - return new==new[::-1] -``` \ No newline at end of file + return new == new[::-1] +``` From 5e85047f842aff6d886229207a90fa8d475adf3c Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 03:08:24 -0600 Subject: [PATCH 0203/2496] Update 125._valid_palindrome.md --- 125._valid_palindrome.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/125._valid_palindrome.md b/125._valid_palindrome.md index 0850af088..7b29f6621 100644 --- a/125._valid_palindrome.md +++ b/125._valid_palindrome.md @@ -30,3 +30,16 @@ class Solution(object): return new == new[::-1] ``` + +或者用re正则 +```python +class Solution(object): + def isPalindrome(self, s): + """ + :type s: str + :rtype: bool + """ + newString = re.sub("[^0-9a-zA-Z]+", "", s) + return newString.lower() == newString.lower()[::-1] +``` + From 2a7e37f2c5627a59802e270187dbb03c22fe117b Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 03:15:50 -0600 Subject: [PATCH 0204/2496] Update 125._valid_palindrome.md --- 125._valid_palindrome.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/125._valid_palindrome.md b/125._valid_palindrome.md index 7b29f6621..b09773b57 100644 --- a/125._valid_palindrome.md +++ b/125._valid_palindrome.md @@ -31,7 +31,7 @@ class Solution(object): return new == new[::-1] ``` -或者用re正则 +或者用正则,详见[re.sub()用法](http://blog.csdn.net/geekleee/article/details/75309433) ```python class Solution(object): def isPalindrome(self, s): From 03a6559bf11fc4f44466db0b403aa59443baa22b Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 03:17:28 -0600 Subject: [PATCH 0205/2496] Update 125._valid_palindrome.md --- 125._valid_palindrome.md | 1 + 1 file changed, 1 insertion(+) diff --git a/125._valid_palindrome.md b/125._valid_palindrome.md index b09773b57..d3e09f6c2 100644 --- a/125._valid_palindrome.md +++ b/125._valid_palindrome.md @@ -32,6 +32,7 @@ class Solution(object): ``` 或者用正则,详见[re.sub()用法](http://blog.csdn.net/geekleee/article/details/75309433) +瞬间```beats 97.71%``` ```python class Solution(object): def isPalindrome(self, s): From 57a075f75093476c37d952ab6db47ea1f5a54f89 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 03:36:41 -0600 Subject: [PATCH 0206/2496] Create 142_Linked_List_Cycle_II.md --- 142_Linked_List_Cycle_II.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 142_Linked_List_Cycle_II.md diff --git a/142_Linked_List_Cycle_II.md b/142_Linked_List_Cycle_II.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/142_Linked_List_Cycle_II.md @@ -0,0 +1 @@ + From 5ec032c4902dcf8bbd213c9824c46f2f6ba6d019 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 03:38:25 -0600 Subject: [PATCH 0207/2496] Update 142_Linked_List_Cycle_II.md --- 142_Linked_List_Cycle_II.md | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/142_Linked_List_Cycle_II.md b/142_Linked_List_Cycle_II.md index 8b1378917..8f6f74324 100644 --- a/142_Linked_List_Cycle_II.md +++ b/142_Linked_List_Cycle_II.md @@ -1 +1,37 @@ +### 141. Linked List Cycle + +题目: + + + + +难度: + +Medium + +思路: +稍微改了一下[141](),这里稍微注意一下```while-else clause```就行 + + +```python +class Solution(object): + def detectCycle(self, head): + """ + :type head: ListNode + :rtype: bool + """ + slow = fast = head + while fast and fast.next: + slow = slow.next + fast = fast.next.next + if slow == fast: + break + else: + return None + while head != slow: + slow = slow.next + head = head.next + return head +``` + From 943488350987b714a21cd7bc8a775952c2db16e2 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 03:38:42 -0600 Subject: [PATCH 0208/2496] Update 142_Linked_List_Cycle_II.md --- 142_Linked_List_Cycle_II.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/142_Linked_List_Cycle_II.md b/142_Linked_List_Cycle_II.md index 8f6f74324..953ddc645 100644 --- a/142_Linked_List_Cycle_II.md +++ b/142_Linked_List_Cycle_II.md @@ -10,7 +10,7 @@ Medium 思路: -稍微改了一下[141](),这里稍微注意一下```while-else clause```就行 +稍微改了一下[141](https://github.com/Lisanaaa/thinking_in_lc/blob/master/141._linked_list_cycle.md),这里稍微注意一下```while-else clause```就行 ```python From 46706218007480d519632301884a5efef08f5c67 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 03:54:52 -0600 Subject: [PATCH 0209/2496] Update 142_Linked_List_Cycle_II.md --- 142_Linked_List_Cycle_II.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/142_Linked_List_Cycle_II.md b/142_Linked_List_Cycle_II.md index 953ddc645..7ca9e24d3 100644 --- a/142_Linked_List_Cycle_II.md +++ b/142_Linked_List_Cycle_II.md @@ -12,7 +12,26 @@ Medium 思路: 稍微改了一下[141](https://github.com/Lisanaaa/thinking_in_lc/blob/master/141._linked_list_cycle.md),这里稍微注意一下```while-else clause```就行 +Let’s say, the first node is node 0, the cycle starts at node L, and the length of the cycle is C; +Moreover, after t steps, fast catches slow. +Now we know that fast totally traveled 2t nodes, and slow traveled t nodes + +Then we have: +2t - t = nC (where n is an positive integer.) +i.e. t=nC + +Now, think about that, at step t, if we travels L more steps, where are we? +i.e. if we travel L+t = L + nC steps in total, where are we? + +Absolutely, at the start of the cycle, because we have covered the first L nodes once and the entire cycle n times. + +So, if we travel L more steps at time t, then we get the start of the cycle. + +However, how can we travel exactly L step? +The answer is to use an other pointer to travel from node 0, and when they meet together, it is exactly L steps and both of them are at the start of the cycle. + +参考[LostSummer233的解答](https://leetcode.com/problems/linked-list-cycle-ii/discuss/44833) ```python class Solution(object): def detectCycle(self, head): From 57f61d4746b7332864b8100df4926ac2bf39b635 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 03:57:27 -0600 Subject: [PATCH 0210/2496] Update 142_Linked_List_Cycle_II.md --- 142_Linked_List_Cycle_II.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/142_Linked_List_Cycle_II.md b/142_Linked_List_Cycle_II.md index 7ca9e24d3..0952995be 100644 --- a/142_Linked_List_Cycle_II.md +++ b/142_Linked_List_Cycle_II.md @@ -12,24 +12,24 @@ Medium 思路: 稍微改了一下[141](https://github.com/Lisanaaa/thinking_in_lc/blob/master/141._linked_list_cycle.md),这里稍微注意一下```while-else clause```就行 -Let’s say, the first node is node 0, the cycle starts at node L, and the length of the cycle is C; -Moreover, after t steps, fast catches slow. +Let’s say, the first node is node ```0```, the cycle starts at node ```L```, and the length of the cycle is ```C```; +Moreover, after ```t``` steps, ```fast``` catches ```slow```. -Now we know that fast totally traveled 2t nodes, and slow traveled t nodes +Now we know that fast totally traveled ```2t``` nodes, and slow traveled ```t``` nodes Then we have: -2t - t = nC (where n is an positive integer.) -i.e. t=nC +```2t - t = nC``` (where ```n``` is an positive integer.) +i.e. ```t=nC``` -Now, think about that, at step t, if we travels L more steps, where are we? -i.e. if we travel L+t = L + nC steps in total, where are we? +Now, think about that, at step ```t```, if we travels ```L``` more steps, where are we? +i.e. if we travel ```L+t = L + nC``` steps in total, where are we? -Absolutely, at the start of the cycle, because we have covered the first L nodes once and the entire cycle n times. +Absolutely, at the start of the cycle, because we have covered the first ```L``` nodes once and the entire cycle ```n``` times. -So, if we travel L more steps at time t, then we get the start of the cycle. +So, if we travel ```L``` more steps at time ```t```, then we get the start of the cycle. -However, how can we travel exactly L step? -The answer is to use an other pointer to travel from node 0, and when they meet together, it is exactly L steps and both of them are at the start of the cycle. +However, how can we travel exactly ```L``` step? +The answer is to use an other pointer to travel from node ```0```, and when they meet together, it is exactly ```L``` steps and both of them are at the start of the cycle. 参考[LostSummer233的解答](https://leetcode.com/problems/linked-list-cycle-ii/discuss/44833) ```python From 8b4afb2ac90c40c1e4155ecb4976cd68d85a1c67 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 03:57:58 -0600 Subject: [PATCH 0211/2496] Update 141._linked_list_cycle.md --- 141._linked_list_cycle.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/141._linked_list_cycle.md b/141._linked_list_cycle.md index 2cf604e4e..2d50901e9 100644 --- a/141._linked_list_cycle.md +++ b/141._linked_list_cycle.md @@ -73,7 +73,7 @@ class Solution(object): """ slow = head fast = head - while slow and fast and fast.next: + while fast and fast.next: slow = slow.next fast = fast.next.next if slow == fast: From 3fa2df23fc2816ca231e06c5ac39358359e09491 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 03:58:45 -0600 Subject: [PATCH 0212/2496] Update 142_Linked_List_Cycle_II.md --- 142_Linked_List_Cycle_II.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/142_Linked_List_Cycle_II.md b/142_Linked_List_Cycle_II.md index 0952995be..cd8875929 100644 --- a/142_Linked_List_Cycle_II.md +++ b/142_Linked_List_Cycle_II.md @@ -1,8 +1,8 @@ -### 141. Linked List Cycle +### 142. Linked List Cycle II 题目: - + 难度: From 90456850eb9b5a317a6d158e06eeaebdff88a165 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 14:09:56 -0600 Subject: [PATCH 0213/2496] Update 160._intersection_of_two_linked_lists.md --- 160._intersection_of_two_linked_lists.md | 57 ++++-------------------- 1 file changed, 8 insertions(+), 49 deletions(-) diff --git a/160._intersection_of_two_linked_lists.md b/160._intersection_of_two_linked_lists.md index 689528c48..7f8f5bf24 100644 --- a/160._intersection_of_two_linked_lists.md +++ b/160._intersection_of_two_linked_lists.md @@ -1,4 +1,4 @@ -###160. Intersection of Two Linked Lists +### 160. Intersection of Two Linked Lists 题目: @@ -24,62 +24,21 @@ B: b1 → b2 → b3 ``` -然后这个题AC也花了一点时间,因为Python有recursion的limit限制,一开始用的一个求linkedlist len的报错 - -用这个会导致我无法AC,recursion limit达到上限 - -``` -def len(self, head): - if head == None: - return 0 - else: - return 1 + self.len(head.next) -``` AC代码如下: - - -``` +```python class Solution(object): def getIntersectionNode(self, headA, headB): """ :type head1, head1: ListNode :rtype: ListNode """ - lenA = self.len(headA) - lenB = self.len(headB) + pointer_a, pointer_b = headA, headB - if lenA == 0 or lenB == 0: - return None - - pA = headA - pB = headB - - if lenA > lenB: - for i in range(lenA - lenB): - pA = pA.next - else: - for i in range(lenB - lenA): - pB = pB.next - - while pA and pB: - if pA == pB: - return pA - else: - pA = pA.next - pB = pB.next - - return None - - - def len(self, head): - p = head - count = 0 - while p: - count += 1 - p = p.next - return count - -``` \ No newline at end of file + while pointer_a is not pointer_b: + pointer_a = headB if pointer_a is None else pointer_a.next + pointer_b = headA if pointer_b is None else pointer_b.next + return pointer_a +``` From 5f7574b0aadf8c484c8daec232c8ee37084a8549 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 14:21:20 -0600 Subject: [PATCH 0214/2496] Update 160._intersection_of_two_linked_lists.md --- 160._intersection_of_two_linked_lists.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/160._intersection_of_two_linked_lists.md b/160._intersection_of_two_linked_lists.md index 7f8f5bf24..6b0a85ffd 100644 --- a/160._intersection_of_two_linked_lists.md +++ b/160._intersection_of_two_linked_lists.md @@ -11,8 +11,6 @@ Easy 如果两个linkedlist有intersection的话,可以看到,其实如果一开始我们就走到b2的话,那么我们就可以两个pointer一个一个的对比,到哪一个地址一样,接下来就是intersection部分。 -就一开始把长的那条list走掉多余部分。 - ``` From 09f2bacf85fdb3e8e619523089c710d72ac38389 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 14:43:28 -0600 Subject: [PATCH 0215/2496] Update 160._intersection_of_two_linked_lists.md --- 160._intersection_of_two_linked_lists.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/160._intersection_of_two_linked_lists.md b/160._intersection_of_two_linked_lists.md index 6b0a85ffd..2d6a916e2 100644 --- a/160._intersection_of_two_linked_lists.md +++ b/160._intersection_of_two_linked_lists.md @@ -33,10 +33,11 @@ class Solution(object): :type head1, head1: ListNode :rtype: ListNode """ - pointer_a, pointer_b = headA, headB - - while pointer_a is not pointer_b: - pointer_a = headB if pointer_a is None else pointer_a.next - pointer_b = headA if pointer_b is None else pointer_b.next - return pointer_a + pA, pB = headA, headB + while pA is not pB: + pA = pA.next if pA else headB + pB = pB.next if pB else headA + return pA ``` +Just count the number of moves by each pointer before they meet. One pointer will traverse entire list1 for N moves and then jump to the head of list1 to move (M-K) steps to intersection, where K represents the length of common part. Now the other pointer must also moved the same number of steps since they are both moved at the same time. The second pointer traverses the entire list2 for M steps and jumped to the head of list1 to move (N-K) steps. So the loop finished with M+N-K times. +详见[zzg_zzm的评论](https://leetcode.com/problems/intersection-of-two-linked-lists/discuss/49799) From 4519aed6dd46f6f94e1ee493ff1c0b6914a244a5 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 14:47:23 -0600 Subject: [PATCH 0216/2496] Update 160._intersection_of_two_linked_lists.md --- 160._intersection_of_two_linked_lists.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/160._intersection_of_two_linked_lists.md b/160._intersection_of_two_linked_lists.md index 2d6a916e2..da7df31a2 100644 --- a/160._intersection_of_two_linked_lists.md +++ b/160._intersection_of_two_linked_lists.md @@ -41,3 +41,19 @@ class Solution(object): ``` Just count the number of moves by each pointer before they meet. One pointer will traverse entire list1 for N moves and then jump to the head of list1 to move (M-K) steps to intersection, where K represents the length of common part. Now the other pointer must also moved the same number of steps since they are both moved at the same time. The second pointer traverses the entire list2 for M steps and jumped to the head of list1 to move (N-K) steps. So the loop finished with M+N-K times. 详见[zzg_zzm的评论](https://leetcode.com/problems/intersection-of-two-linked-lists/discuss/49799) + +This algorithm is sooooo perfect! + +I was wonder if the running time is O(n+m), but later I figured out that the actually running time is just: + +- m+n for non-intersection case + +With intersection: + +- Suppose for LL-A, it’s a+b=n, a is the # of nodes before intersection + +- Suppose for LL-B, it’s c+b=m, c is the # of nodes before intersection + +Thus the actual running time is a+b+c = n+c = m+a. + +Actually, when b=0, this just stands for the case with no intersection with a+b+c=n+m From d718b79764e4f143b5c537d6fa31fbed6dd551ad Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 14:50:04 -0600 Subject: [PATCH 0217/2496] Update 160._intersection_of_two_linked_lists.md --- 160._intersection_of_two_linked_lists.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/160._intersection_of_two_linked_lists.md b/160._intersection_of_two_linked_lists.md index da7df31a2..b403f01f9 100644 --- a/160._intersection_of_two_linked_lists.md +++ b/160._intersection_of_two_linked_lists.md @@ -20,7 +20,7 @@ A: a1 → a2 ↗ B: b1 → b2 → b3 ``` - +比较巧妙的数学解法,看下面的解释和代码 From e6852503f3442608b6763dd6a3aede7a835f5f0b Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 14:56:00 -0600 Subject: [PATCH 0218/2496] Update 167._two_sum_ii_-_input_array_is_sorted.md --- 167._two_sum_ii_-_input_array_is_sorted.md | 28 ++++++++++------------ 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/167._two_sum_ii_-_input_array_is_sorted.md b/167._two_sum_ii_-_input_array_is_sorted.md index b0ded8c46..841181264 100644 --- a/167._two_sum_ii_-_input_array_is_sorted.md +++ b/167._two_sum_ii_-_input_array_is_sorted.md @@ -1,4 +1,4 @@ -###167. Two Sum II - Input array is sorted +### 167. Two Sum II - Input array is sorted @@ -12,12 +12,12 @@ Medium 思路: -作为2sum, 3sum, 4sum 的姐妹题,明显我一上来被误导了一下,非要想用binary search(|||因为不小心看了tag),但素其实人家就是用的两个指针,一个指头,一个指尾巴,如果大了就尾巴左移,小了就头部右移,没看出来哪里用了binary 的思想 +双指针 AC Code -``` +```python class Solution(object): def twoSum(self, numbers, target): """ @@ -25,15 +25,13 @@ class Solution(object): :type target: int :rtype: List[int] """ - left, right = 0, len(numbers) - 1 - while left < right: - temp = numbers[left] + numbers[right] - if temp == target: - return [left + 1, right + 1] - elif temp < target: - left += 1 - else: - right -= 1 - return [] - -``` \ No newline at end of file + l, r = 0, len(numbers) - 1 + while l < r: + if numbers[l] + numbers[r] == target: + return [l+1, r+1] + elif numbers[l] + numbers[r] > target: + r -= 1 + else: + l += 1 + +``` From 7084754d14263a652fd0ff9459d36bb994ad0936 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 14:56:20 -0600 Subject: [PATCH 0219/2496] Update 167._two_sum_ii_-_input_array_is_sorted.md --- 167._two_sum_ii_-_input_array_is_sorted.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/167._two_sum_ii_-_input_array_is_sorted.md b/167._two_sum_ii_-_input_array_is_sorted.md index 841181264..8fcd51708 100644 --- a/167._two_sum_ii_-_input_array_is_sorted.md +++ b/167._two_sum_ii_-_input_array_is_sorted.md @@ -9,14 +9,12 @@ 难度: Medium + 思路: 双指针 - -AC Code - ```python class Solution(object): def twoSum(self, numbers, target): From 948d99964908bdec3402f61ab6346acaeeccb09d Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 15:41:02 -0600 Subject: [PATCH 0220/2496] Update 218._The _Skyline_Problem .md --- 218._The _Skyline_Problem .md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/218._The _Skyline_Problem .md b/218._The _Skyline_Problem .md index 8c80c5f24..3ee9b8721 100644 --- a/218._The _Skyline_Problem .md +++ b/218._The _Skyline_Problem .md @@ -19,7 +19,7 @@ Hard 接下来考虑更多建筑物的情况,从左到右扫描,当我们遇到一个楼的左边界时,把它push到一个heap中。如果后面扫描的楼的高度比heap中最高的楼还高,那么它的左上顶点一定会被加入到skyline中。当我们遇到一个building的右边界时,我们需要将其从heap中pop掉,如果heap中max height有变化,则push到结果中。 - +参考[Brian Gordon的blog](https://briangordon.github.io/2014/08/the-skyline-problem.html) #### 程序代码解释 From 44e0a27489809103e2d4aa17d140187b6ec81e83 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 19:36:30 -0600 Subject: [PATCH 0221/2496] Update 218._The _Skyline_Problem .md --- 218._The _Skyline_Problem .md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/218._The _Skyline_Problem .md b/218._The _Skyline_Problem .md index 3ee9b8721..096c7c455 100644 --- a/218._The _Skyline_Problem .md +++ b/218._The _Skyline_Problem .md @@ -38,8 +38,8 @@ class Solution(object): """ idx, n = 0, len(buildings) liveBuildings, skyline = [], [] - while idx < n or len(liveBuildings) > 0: - if len(liveBuildings) == 0 or (idx < n and buildings[idx][0] <= -liveBuildings[0][1]): +        while idx < n or len(liveBuildings) > 0: # 只要所有的点没处理完就一直循环 +            if len(liveBuildings) == 0 or (idx < n and buildings[idx][0] <= -liveBuildings[0][1]): start = buildings[idx][0] while idx < n and buildings[idx][0] == start: heapq.heappush(liveBuildings, [-buildings[idx][2], -buildings[idx][1]]) From b51bc130568443f9758cb55797166fbcb9904dfe Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 20:17:28 -0600 Subject: [PATCH 0222/2496] Update 218._The _Skyline_Problem .md --- 218._The _Skyline_Problem .md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/218._The _Skyline_Problem .md b/218._The _Skyline_Problem .md index 096c7c455..050f5c3ef 100644 --- a/218._The _Skyline_Problem .md +++ b/218._The _Skyline_Problem .md @@ -15,7 +15,7 @@ Hard 开始,假设只有2个建筑物,拿出第一个buiding B1,我们先把它的左上顶点加进我们的output结果skyline中,然后继续拿下一个building B2,我们现在需要将B2的左上顶点对应的x coordinate与B1的右上顶点所对应的x coordinate做比较: - 如果前者小且B2的高度大于B1的高度,则我们将B2的左上顶点也加入skyline中去。 -- 如果前者小且B2的高度小于于B1的高度,则忽略B2的左上顶点 +- 如果前者小且B2的高度小于等于B1的高度,则忽略B2的左上顶点 接下来考虑更多建筑物的情况,从左到右扫描,当我们遇到一个楼的左边界时,把它push到一个heap中。如果后面扫描的楼的高度比heap中最高的楼还高,那么它的左上顶点一定会被加入到skyline中。当我们遇到一个building的右边界时,我们需要将其从heap中pop掉,如果heap中max height有变化,则push到结果中。 From cbdd922a5639ba927caf706310550c609e22eaff Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 20:19:14 -0600 Subject: [PATCH 0223/2496] Update 218._The _Skyline_Problem .md --- 218._The _Skyline_Problem .md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/218._The _Skyline_Problem .md b/218._The _Skyline_Problem .md index 050f5c3ef..c44680872 100644 --- a/218._The _Skyline_Problem .md +++ b/218._The _Skyline_Problem .md @@ -17,7 +17,7 @@ Hard - 如果前者小且B2的高度大于B1的高度,则我们将B2的左上顶点也加入skyline中去。 - 如果前者小且B2的高度小于等于B1的高度,则忽略B2的左上顶点 -接下来考虑更多建筑物的情况,从左到右扫描,当我们遇到一个楼的左边界时,把它push到一个heap中。如果后面扫描的楼的高度比heap中最高的楼还高,那么它的左上顶点一定会被加入到skyline中。当我们遇到一个building的右边界时,我们需要将其从heap中pop掉,如果heap中max height有变化,则push到结果中。 +接下来考虑更多建筑物的情况,从左到右扫描,当我们遇到第一个楼的左边界时,把它push到一个heap中。如果后面扫描的楼的高度比heap中最高的楼还高,那么它的左上顶点一定会被加入到skyline中。当我们遇到一个building的右边界时,我们需要将其从heap中pop掉,如果heap中max height有变化,则push到结果中。 参考[Brian Gordon的blog](https://briangordon.github.io/2014/08/the-skyline-problem.html) From 3f34c3653088ffff5346d0cc75916b1659fe9b85 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 20:54:43 -0600 Subject: [PATCH 0224/2496] Update 218._The _Skyline_Problem .md --- 218._The _Skyline_Problem .md | 1 + 1 file changed, 1 insertion(+) diff --git a/218._The _Skyline_Problem .md b/218._The _Skyline_Problem .md index c44680872..78e9efba6 100644 --- a/218._The _Skyline_Problem .md +++ b/218._The _Skyline_Problem .md @@ -20,6 +20,7 @@ Hard 接下来考虑更多建筑物的情况,从左到右扫描,当我们遇到第一个楼的左边界时,把它push到一个heap中。如果后面扫描的楼的高度比heap中最高的楼还高,那么它的左上顶点一定会被加入到skyline中。当我们遇到一个building的右边界时,我们需要将其从heap中pop掉,如果heap中max height有变化,则push到结果中。 参考[Brian Gordon的blog](https://briangordon.github.io/2014/08/the-skyline-problem.html) +[Stefan大神的题解](https://leetcode.com/problems/the-skyline-problem/discuss/61194) #### 程序代码解释 From 9e2a17d1573a03896d730b8561989ff68db062b8 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 30 Dec 2017 20:55:21 -0600 Subject: [PATCH 0225/2496] Update 218._The _Skyline_Problem .md --- 218._The _Skyline_Problem .md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/218._The _Skyline_Problem .md b/218._The _Skyline_Problem .md index 78e9efba6..34d9c9176 100644 --- a/218._The _Skyline_Problem .md +++ b/218._The _Skyline_Problem .md @@ -20,7 +20,7 @@ Hard 接下来考虑更多建筑物的情况,从左到右扫描,当我们遇到第一个楼的左边界时,把它push到一个heap中。如果后面扫描的楼的高度比heap中最高的楼还高,那么它的左上顶点一定会被加入到skyline中。当我们遇到一个building的右边界时,我们需要将其从heap中pop掉,如果heap中max height有变化,则push到结果中。 参考[Brian Gordon的blog](https://briangordon.github.io/2014/08/the-skyline-problem.html) -[Stefan大神的题解](https://leetcode.com/problems/the-skyline-problem/discuss/61194) + 和 [Stefan大神的题解](https://leetcode.com/problems/the-skyline-problem/discuss/61194) #### 程序代码解释 From 148db54a46c4487ba97685a8fb526adf32a5059b Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 31 Dec 2017 15:55:19 -0600 Subject: [PATCH 0226/2496] Update 230._kth_smallest_element_in_a_bst.md --- 230._kth_smallest_element_in_a_bst.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/230._kth_smallest_element_in_a_bst.md b/230._kth_smallest_element_in_a_bst.md index c583cdca1..058951853 100644 --- a/230._kth_smallest_element_in_a_bst.md +++ b/230._kth_smallest_element_in_a_bst.md @@ -1,4 +1,4 @@ -###230. Kth Smallest Element in a BST +### 230. Kth Smallest Element in a BST 题目: From 85c4eb8dafff0a23bd8c1876173a20fa214c6e0a Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 31 Dec 2017 15:55:32 -0600 Subject: [PATCH 0227/2496] Update 230._kth_smallest_element_in_a_bst.md --- 230._kth_smallest_element_in_a_bst.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/230._kth_smallest_element_in_a_bst.md b/230._kth_smallest_element_in_a_bst.md index 058951853..b51fc7a07 100644 --- a/230._kth_smallest_element_in_a_bst.md +++ b/230._kth_smallest_element_in_a_bst.md @@ -13,7 +13,7 @@ Medium InOrder排序,输出,当然也完全可以用昨天的binary tree iterator,入stack,出stack,直到输出第k位 -``` +```python class Solution(object): def kthSmallest(self, root, k): """ From a46178784c9e868f7337ce0fb82e38bb5ae282ef Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 31 Dec 2017 15:59:48 -0600 Subject: [PATCH 0228/2496] Update 237._delete_node_in_a_linked_list.md --- 237._delete_node_in_a_linked_list.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/237._delete_node_in_a_linked_list.md b/237._delete_node_in_a_linked_list.md index 8c1ed5e28..d401e090d 100644 --- a/237._delete_node_in_a_linked_list.md +++ b/237._delete_node_in_a_linked_list.md @@ -1,4 +1,4 @@ -###237. Delete Node in a Linked List +### 237. Delete Node in a Linked List 题目: From b06894164178eefd2d2fbbdaf6ca13b827b86c3f Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 31 Dec 2017 16:11:11 -0600 Subject: [PATCH 0229/2496] Update 242._valid_anagram.md --- 242._valid_anagram.md | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/242._valid_anagram.md b/242._valid_anagram.md index e2d9004b9..46d8cd269 100644 --- a/242._valid_anagram.md +++ b/242._valid_anagram.md @@ -1,4 +1,4 @@ -###242. Valid Anagram +### 242. Valid Anagram 题目: @@ -7,9 +7,8 @@ 难度 : Easy -对Python来说,又是一块蛋糕,基本不本地测试 -就是这么自信 -我的一行解法: +一行瞬秒: + ```python class Solution(object): def isAnagram(self, s, t): @@ -18,10 +17,10 @@ class Solution(object): :type t: str :rtype: bool """ - return len(s) == len(t) and collections.Counter(s) == collections.Counter(t) + return collections.Counter(s) == collections.Counter(t) ``` -``` +```python class Solution(object): def isAnagram(self, s, t): """ @@ -29,14 +28,12 @@ class Solution(object): :type t: str :rtype: bool """ - sList = sorted(list(s)) - tList = sorted(list(t)) - return sList == tList + return sorted(s) == sorted(t) ``` -作弊神奇python大法,看了看别人的解法,用字数统计,因为只可能是26个字母 +用字数统计,因为只可能是26个字母 ``` From 8ddc1b6f2773aa13146a7855f002d56bdab9acf3 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 31 Dec 2017 16:17:01 -0600 Subject: [PATCH 0230/2496] Update 268._missing_number.md --- 268._missing_number.md | 58 ++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 31 deletions(-) diff --git a/268._missing_number.md b/268._missing_number.md index d86b99d54..9ca2106dd 100644 --- a/268._missing_number.md +++ b/268._missing_number.md @@ -1,37 +1,33 @@ -###268. Missing Number - -题目: - - - -难度: - -Medium - - - -等差数列前n项和 - 数组之和 - - - -``` +###268. Missing Number + +题目: + + + +难度: + +Medium + + + +等差数列前n项和减去数组之和,一行瞬秒 +```(注意题目input从0开始取值)``` + + +```python class Solution(object): def missingNumber(self, nums): """ :type nums: List[int] :rtype: int """ - m = len(nums) - res = (m+1)*m /2 - for num in nums: - res -= num - return res -``` - - - -第二种解法是位运算:位运算(异或运算) - -原理应该是就是两个数不同,这样才为True,待到研究位运算的时候扩展 - - + return len(nums) * (len(nums) + 1) / 2 - sum(nums) +``` + + + +第二种解法是位运算:位运算(异或运算) + +原理应该是就是两个数不同,这样才为True,待到研究位运算的时候扩展 + + From 46f7c88793cd6c1e467c33cdb1d30e8e1553ae05 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 31 Dec 2017 16:23:00 -0600 Subject: [PATCH 0231/2496] Update 268._missing_number.md --- 268._missing_number.md | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/268._missing_number.md b/268._missing_number.md index 9ca2106dd..fbd54da5a 100644 --- a/268._missing_number.md +++ b/268._missing_number.md @@ -1,4 +1,4 @@ -###268. Missing Number +### 268. Missing Number 题目: @@ -28,6 +28,22 @@ class Solution(object): 第二种解法是位运算:位运算(异或运算) -原理应该是就是两个数不同,这样才为True,待到研究位运算的时候扩展 + + +```python +class Solution(object): + def missingNumber(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + res = n = len(nums) + for i in range(n): + res ^= i + res ^= nums[i] + return res +``` + + From b2795e5619602870f144b77c1ff682e1fb43da2c Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 31 Dec 2017 16:26:52 -0600 Subject: [PATCH 0232/2496] Update 292._nim_game.md --- 292._nim_game.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/292._nim_game.md b/292._nim_game.md index 23cad3b13..9f78914f5 100644 --- a/292._nim_game.md +++ b/292._nim_game.md @@ -1,4 +1,4 @@ -###292. Nim Game +### 292. Nim Game 题目: @@ -36,7 +36,7 @@ Easy - n == 8, 先手如何选,总可以转成5,6,7 对方总会赢 -所以 n % 4 != 0 时候,先手必胜 +所以 n % 4 == 0 时候,先手必输 简直是啊,有些游戏就是这样来必赢的啊,没想到你是这样的题目 @@ -52,4 +52,4 @@ class Solution(object): return n % 4 != 0 ``` - \ No newline at end of file + From 91c5b1121d64255c9e55fc0e7ca2a95d842cb3b1 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 31 Dec 2017 16:34:41 -0600 Subject: [PATCH 0233/2496] =?UTF-8?q?Update=20=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\346\200\273\347\273\223.md" | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git "a/\346\200\273\347\273\223.md" "b/\346\200\273\347\273\223.md" index 6875cbe28..cdbdf2890 100644 --- "a/\346\200\273\347\273\223.md" +++ "b/\346\200\273\347\273\223.md" @@ -3,3 +3,18 @@ # 2 ```not fargs``` 和 ```fargs == None```不一样,前者```fargs```可能为[], '', 0, etc + +# 3 +递归问题 +Any problem can be solved using dp. Solving using a greedy strategy is harder though, since you need to prove that greedy will work for that problem. There are some tell-tale signs of a problem where greedy may be applicable, but isn’t immediately apparent. Example: + +- Choice of an element depends only on its immediate neighbours (wiggle sort). +- Answer is monotonically non-decreasing or non-increasing (sorting). This is also applicable for LIS for example. +- Anything that requires lexicographically largest or smallest of something. +- Anything where processing the input in sorted order will help. +- Anything where processing the input in forward or reverse (as given) will help. +- Anything which requires you to track the minimum or maximum of something (think of sliding window problems). + +There’s matroid theory which deal with greedy algorithms, but I don’t really understand it. If someone does, I’ll be super grateful to them to explain it to me in simple language! + +In general, try to see if for a problem, the solution doesn’t depend on a lot of history about the solution itself, but the next part of the solution is somewhat independent from the rest of the solution. These are all indicative of the fact that a greedy strategy could be applicable. From b551d02c89f7081b42dcf05541af5b6d18043698 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 31 Dec 2017 20:20:52 -0600 Subject: [PATCH 0234/2496] Update 316._Remove_Duplicate_Letters.md --- 316._Remove_Duplicate_Letters.md | 66 +++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 2 deletions(-) diff --git a/316._Remove_Duplicate_Letters.md b/316._Remove_Duplicate_Letters.md index ab7f8c6ff..d8447ebf3 100644 --- a/316._Remove_Duplicate_Letters.md +++ b/316._Remove_Duplicate_Letters.md @@ -1,4 +1,4 @@ -###316. Remove Duplicate Letters +### 316. Remove Duplicate Letters 题目: @@ -22,7 +22,9 @@ Hard 做完这些后必须要把c加入到stack和res中去,代表c已经加入到最终结果中的目前应该处于的位置 -``` +参考[python的colloections之defaultdict模块](https://docs.python.org/2/library/collections.html) + +```python class Solution(object): def removeDuplicateLetters(self, s): """ @@ -42,5 +44,65 @@ class Solution(object): remaining[c] -= 1 return ''.join(res) ``` +还有别的一些优美的解法,参考[stefan的回答](https://leetcode.com/problems/remove-duplicate-letters/discuss/76787) + + + +```python +递归贪心版本 +class Solution(object): + def removeDuplicateLetters(self, s): + """ + :type s: str + :rtype: str + """ + for c in sorted(set(s)): + suffix = s[s.index(c):] + if set(suffix) == set(s): + return c + self.removeDuplicateLetters(suffix.replace(c, '')) + return '' +``` +```python +class Solution(object): + def removeDuplicateLetters(self, s): + """ + :type s: str + :rtype: str + """ + result = '' + while s: + i = min(map(s.rindex, set(s))) + c = min(s[:i+1]) + result += c + s = s[s.index(c):].replace(c, '') + return result +``` + +```python +class Solution(object): + def removeDuplicateLetters(self, s): + """ + :type s: str + :rtype: str + """ + rindex = {c: i for i, c in enumerate(s)} + result = '' + for i, c in enumerate(s): + if c not in result: + while c < result[-1:] and i < rindex[result[-1]]: + result = result[:-1] + result += c + return result +``` + + + + + + + + + + From 4d83745fb4a7cd762b435c277ab549f6982fbd8a Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 31 Dec 2017 20:37:44 -0600 Subject: [PATCH 0235/2496] Update 316._Remove_Duplicate_Letters.md --- 316._Remove_Duplicate_Letters.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/316._Remove_Duplicate_Letters.md b/316._Remove_Duplicate_Letters.md index d8447ebf3..cce1a8b43 100644 --- a/316._Remove_Duplicate_Letters.md +++ b/316._Remove_Duplicate_Letters.md @@ -34,13 +34,13 @@ class Solution(object): remaining = collections.defaultdict(int) for c in s: remaining[c] += 1 - stack, res = set(), [] + res, stack = [], set() for c in s: if c not in stack: while res and res[-1] > c and remaining[res[-1]] > 0: stack.remove(res.pop()) + res.append(c) stack.add(c) - res += c remaining[c] -= 1 return ''.join(res) ``` From 50caefd71344592ebd6459ae4c17a4b81c576e2c Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 31 Dec 2017 21:29:29 -0600 Subject: [PATCH 0236/2496] Update 344._reverse_string.md --- 344._reverse_string.md | 82 +++++++++++++++++++++--------------------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/344._reverse_string.md b/344._reverse_string.md index ebaecf53c..0e4c0f4fb 100644 --- a/344._reverse_string.md +++ b/344._reverse_string.md @@ -1,47 +1,47 @@ -###344. Reverse String - - - -题目: - - - -难度: -Easy - -思路: - -不要脸的python AC code: - - -``` +### 344. Reverse String + + + +题目: + + + +难度: +Easy + +思路: + +不要脸的python AC code: + + +```python class Solution(object): def reverseString(self, s): """ :type s: str :rtype: str """ - return s[::-1] -``` - -因为python不支持item assignment - -所以如果非要用two pointer来做的话,那么会是这样 - -``` -class Solution(object): - def reverseString(self, s): - """ - :type s: str - :rtype: str - """ - lst = list(s) - n = len(lst) - start, end = 0, n - 1 - - while start < end: - lst[end], lst[start] = lst[start],lst[end] - start += 1 - end -= 1 - return ''.join(lst) -``` + return s[::-1] +``` + +因为python不支持item assignment + +所以如果非要用two pointer来做的话,那么会是这样 + +```python +class Solution(object): + def reverseString(self, s): + """ + :type s: str + :rtype: str + """ + lst = list(s) + n = len(lst) + start, end = 0, n - 1 + + while start < end: + lst[end], lst[start] = lst[start],lst[end] + start += 1 + end -= 1 + return ''.join(lst) +``` From eda7810d4be23ae9a53d7f342017326d0207efa5 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 31 Dec 2017 21:30:52 -0600 Subject: [PATCH 0237/2496] Rename 345._Reverse_Vowels_of_a_String to 345._Reverse_Vowels_of_a_String.md --- ...verse_Vowels_of_a_String => 345._Reverse_Vowels_of_a_String.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename 345._Reverse_Vowels_of_a_String => 345._Reverse_Vowels_of_a_String.md (100%) diff --git a/345._Reverse_Vowels_of_a_String b/345._Reverse_Vowels_of_a_String.md similarity index 100% rename from 345._Reverse_Vowels_of_a_String rename to 345._Reverse_Vowels_of_a_String.md From 82f7c855943bff440db675c0dff4aa2bf8ffc1fc Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 31 Dec 2017 21:39:54 -0600 Subject: [PATCH 0238/2496] Update 345._Reverse_Vowels_of_a_String.md --- 345._Reverse_Vowels_of_a_String.md | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/345._Reverse_Vowels_of_a_String.md b/345._Reverse_Vowels_of_a_String.md index 41fc053c6..238022466 100644 --- a/345._Reverse_Vowels_of_a_String.md +++ b/345._Reverse_Vowels_of_a_String.md @@ -18,7 +18,6 @@ Easy ```python -python class Solution(object): def reverseVowels(self, s): """ @@ -40,15 +39,18 @@ class Solution(object): return ''.join(string) ``` +正则版本 - - - -Author: Keqi Huang - -If you like it, please spread your support - -![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) +```python +class Solution(object): + def reverseVowels(self, s): + """ + :type s: str + :rtype: str + """ + vowels = re.findall('(?i)[aeiou]', s) + return re.sub('(?i)[aeiou]', lambda m: vowels.pop(), s) +``` From 30a381ae2e4624eb33d07a0917717260a4763557 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 31 Dec 2017 21:41:46 -0600 Subject: [PATCH 0239/2496] Update 349._intersection_of_two_arrays.md --- 349._intersection_of_two_arrays.md | 36 +++++++++++++++--------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/349._intersection_of_two_arrays.md b/349._intersection_of_two_arrays.md index d3c1f5868..2f79b8dd9 100644 --- a/349._intersection_of_two_arrays.md +++ b/349._intersection_of_two_arrays.md @@ -1,18 +1,18 @@ -###349. Intersection of Two Arrays - -题目: - - - -难度: - -Easy - - - -Python一句话作弊 - -``` +### 349. Intersection of Two Arrays + +题目: + + + +难度: + +Easy + + + +Python一句话作弊 + +```python class Solution(object): def intersection(self, nums1, nums2): """ @@ -20,6 +20,6 @@ class Solution(object): :type nums2: List[int] :rtype: List[int] """ - return list(set(nums1).intersection(nums2)) -``` - + return list(set(nums1).intersection(nums2)) +``` + From 806f2994105e40b6191b1e1afbe126c28a3bdce0 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 31 Dec 2017 21:46:26 -0600 Subject: [PATCH 0240/2496] Update 350._intersection_of_two_arrays_ii.md --- 350._intersection_of_two_arrays_ii.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/350._intersection_of_two_arrays_ii.md b/350._intersection_of_two_arrays_ii.md index 5b6c5632e..d2a444772 100644 --- a/350._intersection_of_two_arrays_ii.md +++ b/350._intersection_of_two_arrays_ii.md @@ -44,6 +44,19 @@ class Solution(object): return res ``` +两行版本 +```python +class Solution(object): + def intersect(self, nums1, nums2): + """ + :type nums1: List[int] + :type nums2: List[int] + :rtype: List[int] + """ + a, b = map(collections.Counter, (nums1, nums2)) + return list((a & b).elements()) +``` + From dc80002bf96ba0ea6b754b66cf3d929567131a35 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 31 Dec 2017 21:52:27 -0600 Subject: [PATCH 0241/2496] =?UTF-8?q?Update=20=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\346\200\273\347\273\223.md" | 3 +++ 1 file changed, 3 insertions(+) diff --git "a/\346\200\273\347\273\223.md" "b/\346\200\273\347\273\223.md" index cdbdf2890..36a3c25c2 100644 --- "a/\346\200\273\347\273\223.md" +++ "b/\346\200\273\347\273\223.md" @@ -18,3 +18,6 @@ Any problem can be solved using dp. Solving using a greedy strategy is harder th There’s matroid theory which deal with greedy algorithms, but I don’t really understand it. If someone does, I’ll be super grateful to them to explain it to me in simple language! In general, try to see if for a problem, the solution doesn’t depend on a lot of history about the solution itself, but the next part of the solution is somewhat independent from the rest of the solution. These are all indicative of the fact that a greedy strategy could be applicable. + +# 4 +[Counter.elments()](https://docs.python.org/2/library/collections.html) From e28ff6f05aa6d83e4215c027bbbb920d71b69dfc Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 31 Dec 2017 21:52:37 -0600 Subject: [PATCH 0242/2496] =?UTF-8?q?Update=20=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\346\200\273\347\273\223.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/\346\200\273\347\273\223.md" "b/\346\200\273\347\273\223.md" index 36a3c25c2..6cbed571c 100644 --- "a/\346\200\273\347\273\223.md" +++ "b/\346\200\273\347\273\223.md" @@ -20,4 +20,4 @@ There’s matroid theory which deal with greedy algorithms, but I don’t really In general, try to see if for a problem, the solution doesn’t depend on a lot of history about the solution itself, but the next part of the solution is somewhat independent from the rest of the solution. These are all indicative of the fact that a greedy strategy could be applicable. # 4 -[Counter.elments()](https://docs.python.org/2/library/collections.html) +[Counter.elements()](https://docs.python.org/2/library/collections.html) From 21694c520427d7cd63aa2f0cbb957076d1155c81 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 31 Dec 2017 22:13:55 -0600 Subject: [PATCH 0243/2496] Update 378._kth_smallest_element_in_a_sorted_matrix.md --- ...kth_smallest_element_in_a_sorted_matrix.md | 30 ++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/378._kth_smallest_element_in_a_sorted_matrix.md b/378._kth_smallest_element_in_a_sorted_matrix.md index 69ec45988..1cb52400f 100644 --- a/378._kth_smallest_element_in_a_sorted_matrix.md +++ b/378._kth_smallest_element_in_a_sorted_matrix.md @@ -1,4 +1,4 @@ -###378. Kth Smallest Element in a Sorted Matrix +### 378. Kth Smallest Element in a Sorted Matrix @@ -9,9 +9,26 @@ 难度: Medium -思路: +### 思路一:暴力法 + +```python +class Solution(object): + def kthSmallest(self, matrix, k): + """ + :type matrix: List[List[int]] + :type k: int + :rtype: int + """ + tmp = [] + for row in matrix: + for column in row: + tmp.append(column) + tmp.sort() + return tmp[k-1] if tmp and len(tmp)>0 else None +``` +### 思路二: 两个tag : binary search, heap ######先来heap @@ -26,8 +43,7 @@ Medium 参考: -``` -from heapq import * +```python class Solution(object): def kthSmallest(self, matrix, k): """ @@ -44,7 +60,7 @@ class Solution(object): for i in range(col): # heap store its value and location - heappush(heap, (matrix[0][i], 0, i)) + heapq.heappush(heap, (matrix[0][i], 0, i)) print heap @@ -53,9 +69,9 @@ class Solution(object): x = cur[1] y = cur[2] if x+1 < row: - heappush(heap, (matrix[x+1][y],x+1,y)) + heapq.heappush(heap, (matrix[x+1][y],x+1,y)) return heap[0][0] ``` -##### 必然还有利用binary search的算法 \ No newline at end of file +##### 必然还有利用binary search的算法 From 71ec0d26c22eecc6f2356f6746673813c57925c5 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 31 Dec 2017 22:18:39 -0600 Subject: [PATCH 0244/2496] Update 378._kth_smallest_element_in_a_sorted_matrix.md --- 378._kth_smallest_element_in_a_sorted_matrix.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/378._kth_smallest_element_in_a_sorted_matrix.md b/378._kth_smallest_element_in_a_sorted_matrix.md index 1cb52400f..9a4bee187 100644 --- a/378._kth_smallest_element_in_a_sorted_matrix.md +++ b/378._kth_smallest_element_in_a_sorted_matrix.md @@ -74,4 +74,17 @@ class Solution(object): return heap[0][0] ``` +### 思路三: 一行 + +```python +class Solution(object): + def kthSmallest(self, matrix, k): + """ + :type matrix: List[List[int]] + :type k: int + :rtype: int + """ + return list(heapq.merge(*matrix))[k-1] +``` + ##### 必然还有利用binary search的算法 From 72419b95da029e07aa3ef2156e5f7f9ed19f32fb Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 31 Dec 2017 22:22:00 -0600 Subject: [PATCH 0245/2496] Update 378._kth_smallest_element_in_a_sorted_matrix.md --- ...kth_smallest_element_in_a_sorted_matrix.md | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/378._kth_smallest_element_in_a_sorted_matrix.md b/378._kth_smallest_element_in_a_sorted_matrix.md index 9a4bee187..ec4e3a1da 100644 --- a/378._kth_smallest_element_in_a_sorted_matrix.md +++ b/378._kth_smallest_element_in_a_sorted_matrix.md @@ -74,7 +74,7 @@ class Solution(object): return heap[0][0] ``` -### 思路三: 一行 +### 思路三: heapq一行 ```python class Solution(object): @@ -87,4 +87,21 @@ class Solution(object): return list(heapq.merge(*matrix))[k-1] ``` -##### 必然还有利用binary search的算法 +#### binary search +```python +class Solution(object): + def kthSmallest(self, matrix, k): + """ + :type matrix: List[List[int]] + :type k: int + :rtype: int + """ + l, r = matrix[0][0], matrix[-1][-1] + while l <= r: + mid = l + ((r - l) >> 2) + if sum(bisect.bisect_right(row, mid) for row in matrix) < k: + l = mid + 1 + else: + r = mid - 1 + return l +``` From 73d9bd2482a473e48359579e3ba97486a4efec86 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 31 Dec 2017 22:22:09 -0600 Subject: [PATCH 0246/2496] Update 378._kth_smallest_element_in_a_sorted_matrix.md --- 378._kth_smallest_element_in_a_sorted_matrix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/378._kth_smallest_element_in_a_sorted_matrix.md b/378._kth_smallest_element_in_a_sorted_matrix.md index ec4e3a1da..1998dead8 100644 --- a/378._kth_smallest_element_in_a_sorted_matrix.md +++ b/378._kth_smallest_element_in_a_sorted_matrix.md @@ -87,7 +87,7 @@ class Solution(object): return list(heapq.merge(*matrix))[k-1] ``` -#### binary search +### binary search ```python class Solution(object): def kthSmallest(self, matrix, k): From bdf3f33d4ab6f4ab60a2ed0275b1b0a02d7eba63 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 31 Dec 2017 22:27:08 -0600 Subject: [PATCH 0247/2496] Update 378._kth_smallest_element_in_a_sorted_matrix.md --- 378._kth_smallest_element_in_a_sorted_matrix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/378._kth_smallest_element_in_a_sorted_matrix.md b/378._kth_smallest_element_in_a_sorted_matrix.md index 1998dead8..34c267b41 100644 --- a/378._kth_smallest_element_in_a_sorted_matrix.md +++ b/378._kth_smallest_element_in_a_sorted_matrix.md @@ -87,7 +87,7 @@ class Solution(object): return list(heapq.merge(*matrix))[k-1] ``` -### binary search +### 思路四; binary search ```python class Solution(object): def kthSmallest(self, matrix, k): From 66c7fc450aebe532131c67e47468c387edbb4a47 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 5 Jan 2018 08:07:58 -0600 Subject: [PATCH 0248/2496] Update 383._ransom_note.md --- 383._ransom_note.md | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/383._ransom_note.md b/383._ransom_note.md index 6d6e0cf2d..52341ba07 100644 --- a/383._ransom_note.md +++ b/383._ransom_note.md @@ -1,17 +1,17 @@ -###383. Ransom Note - -题目: - - - -难度 : Easy - - - -略微想了一下,用了一个dictionary来存magazine里面的单字出现的个数,然后来对应check是否可以用来组成ransomNote - - -``` +### 383. Ransom Note + +题目: + + + +难度 : Easy + + + +略微想了一下,用了一个dictionary来存magazine里面的单字出现的个数,然后来对应check是否可以用来组成ransomNote + + +``` class Solution(object): def canConstruct(self, ransomNote, magazine): """ @@ -29,9 +29,9 @@ class Solution(object): for i in ransomNote: if i not in mapx: return False - elif i in mapx: +            else: mapx[i] -= 1 if mapx[i] < 0: return False - return True -``` + return True +``` From 17b05af97a4f8a696c9aaa541fd7b33a5c6cfb64 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 5 Jan 2018 08:16:07 -0600 Subject: [PATCH 0249/2496] Update 383._ransom_note.md --- 383._ransom_note.md | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/383._ransom_note.md b/383._ransom_note.md index 52341ba07..6a6ee16e7 100644 --- a/383._ransom_note.md +++ b/383._ransom_note.md @@ -11,7 +11,7 @@ 略微想了一下,用了一个dictionary来存magazine里面的单字出现的个数,然后来对应check是否可以用来组成ransomNote -``` +```python class Solution(object): def canConstruct(self, ransomNote, magazine): """ @@ -19,19 +19,35 @@ class Solution(object): :type magazine: str :rtype: bool """ - mapx = {} + maps = {} for i in magazine: - if i not in mapx: - mapx[i] = 1 + if i in maps: + maps[i] += 1 else: - mapx[i] += 1 - + maps[i] = 1 for i in ransomNote: - if i not in mapx: + if i not in maps: return False -            else: - mapx[i] -= 1 - if mapx[i] < 0: + else: + maps[i] -= 1 + if maps[i] < 0: return False return True ``` +解法2: + +```python +class Solution(object): + def canConstruct(self, ransomNote, magazine): + """ + :type ransomNote: str + :type magazine: str + :rtype: bool + """ + magCounter = collections.Counter(magazine) + ranCounter = collections.Counter(ransomNote) + for k in ranCounter: + if ranCounter.get(k) > magCounter.get(k): + return False + return True +``` From ac5db7284100eecb12ad245f952e265fe2cf27b4 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 5 Jan 2018 08:18:41 -0600 Subject: [PATCH 0250/2496] Update 434._number_of_segments_in_a_string.md --- 434._number_of_segments_in_a_string.md | 42 +++++++++++++------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/434._number_of_segments_in_a_string.md b/434._number_of_segments_in_a_string.md index 2f478e20c..0b900c5b5 100644 --- a/434._number_of_segments_in_a_string.md +++ b/434._number_of_segments_in_a_string.md @@ -1,27 +1,27 @@ -###434. Number of Segments in a String - -题目: - - - -难度: - -Easy - - -作弊神器Python - - -``` +### 434. Number of Segments in a String + +题目: + + + +难度: + +Easy + + +作弊神器Python + + +``` class Solution(object): def countSegments(self, s): """ :type s: str :rtype: int """ - return len(s.split()) -``` - -不过对于比如C++这种语言来说,应该是O(N),扫一圈应该也能得到正确答案 - -总之拿Python做string的题目就是作弊啊 \ No newline at end of file + return len(s.split()) +``` + +不过对于比如C++这种语言来说,应该是O(N),扫一圈应该也能得到正确答案 + +总之拿Python做string的题目就是作弊啊 From edf179c36c7062b0f93125c1b2fcede5cd192dc4 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 5 Jan 2018 08:21:20 -0600 Subject: [PATCH 0251/2496] Update 434._number_of_segments_in_a_string.md --- 434._number_of_segments_in_a_string.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/434._number_of_segments_in_a_string.md b/434._number_of_segments_in_a_string.md index 0b900c5b5..424472a5a 100644 --- a/434._number_of_segments_in_a_string.md +++ b/434._number_of_segments_in_a_string.md @@ -12,7 +12,7 @@ Easy 作弊神器Python -``` +```python class Solution(object): def countSegments(self, s): """ From 2a49150f176b75a337245ef953d4e0ad4283797e Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 5 Jan 2018 09:56:28 -0600 Subject: [PATCH 0252/2496] Update 003._longest_substring_without_repeating_characters.md --- ..._substring_without_repeating_characters.md | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/003._longest_substring_without_repeating_characters.md b/003._longest_substring_without_repeating_characters.md index 02b5c55e8..8b8ef18eb 100644 --- a/003._longest_substring_without_repeating_characters.md +++ b/003._longest_substring_without_repeating_characters.md @@ -46,6 +46,34 @@ class Solution(object): return l ``` +```python +class Solution(object): + def lengthOfLongestSubstring(self, s): + """ + :type s: str + :rtype: int + """ + maps = {} + begin, end, counter, d = 0, 0, 0, 0 + while end < len(s): + if s[end] in maps: + maps[s[end]] += 1 + else: + maps[s[end]] = 1 + if maps[s[end]] > 1: + counter += 1 + end += 1 + while counter > 0: + if maps[s[begin]] > 1: + counter -= 1 + maps[s[begin]] -= 1 + begin += 1 + d = max(d, end - begin) + return d +``` + + + From cd251ba714ad05d40f5492100e31d1019ddbb1c7 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 5 Jan 2018 10:33:49 -0600 Subject: [PATCH 0253/2496] Create 076._Minimum_Window_Substring.md --- 076._Minimum_Window_Substring.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 076._Minimum_Window_Substring.md diff --git a/076._Minimum_Window_Substring.md b/076._Minimum_Window_Substring.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/076._Minimum_Window_Substring.md @@ -0,0 +1 @@ + From ab8350214175b74c7eb029f43c8599704392256e Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 5 Jan 2018 10:35:23 -0600 Subject: [PATCH 0254/2496] Update 076._Minimum_Window_Substring.md --- 076._Minimum_Window_Substring.md | 43 ++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/076._Minimum_Window_Substring.md b/076._Minimum_Window_Substring.md index 8b1378917..1407d82d3 100644 --- a/076._Minimum_Window_Substring.md +++ b/076._Minimum_Window_Substring.md @@ -1 +1,44 @@ +### 76. Minimum Window Substring +题目: + + + +难度 : Hard + + +模板大法 + + +```python +class Solution(object): + def minWindow(self, s, t): + """ + :type s: str + :type t: str + :rtype: str + """ + if len(t) > len(s): + return '' + maps = collections.Counter(t) + counter = len(maps.keys()) + begin, end, head, length = 0, 0, 0, float('inf') + while end < len(s): + if s[end] in maps: + maps[s[end]] -= 1 + if maps[s[end]] == 0: + counter -= 1 + end += 1 + while counter == 0: + if s[begin] in maps: + maps[s[begin]] += 1 + if maps[s[begin]] > 0: + counter += 1 + if end - begin < length: + length = end - begin + head = begin + begin += 1 + if length == float('inf'): + return '' + return s[head:head+length] +``` From 42507d7f437c370fe9a643b705e5c15de53d5ce4 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 5 Jan 2018 10:56:15 -0600 Subject: [PATCH 0255/2496] Create slide_windows_template.md --- slide_windows_template.md | 82 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 slide_windows_template.md diff --git a/slide_windows_template.md b/slide_windows_template.md new file mode 100644 index 000000000..dcd6f2df4 --- /dev/null +++ b/slide_windows_template.md @@ -0,0 +1,82 @@ +带注释版本 +```python +class Solution(object): + def slideWindowTemplate(self, s, t): + """ + :type s: str + :type t: str + :rtype: 具体题目具体分析 + """ + # init a collection or int value to save the result according the question. + res = [] + if len(t) > len(s): + return res + + # create a hashmap to save the Characters of the target substring. + # (K, V) = (Character, Frequence of the Characters) + maps = collections.Counter(t) + + # maintain a counter to check whether match the target string. + # must be the map size, NOT the string size because the char may be duplicate. + counter = len(maps.keys()) + + # Two Pointers: begin - left pointer of the window; end - right pointer of the window + begin, end = 0, 0 + + # the length of the substring which match the target string. + length = sys.maxint + + # loop at the begining of the source string + while end < len(s): + if s[end] in maps: + maps[s[end]] += 1 # plus or minus one + if maps[s[end]] == 0: + counter -= 1 # modify the counter according the requirement(different condition). + end += 1 + + # increase begin pointer to make it invalid/valid again + while counter == 0: + if s[begin] in maps: + maps[s[begin]] -= 1 # plus or minus one + if maps[s[begin]] > 0: + counter += 1 # modify the counter according the requirement(different condition). + begin += 1 + + ''' + type your code here according to the question + 1. save / update(min/max) the result if find a target + 2. result: collections or int value + ''' + return res +``` + +无注释版本: +```python +class Solution(object): + def minWindow(self, s, t): + res = [] + if len(t) > len(s): + return res + maps = collections.Counter(t) + counter = len(maps.keys()) + begin, end = 0, 0 + length = sys.maxint + while end < len(s): + if s[end] in maps: + maps[s[end]] += 1 + if maps[s[end]] == 0: + counter -= 1 + end += 1 + while counter == 0: + if s[begin] in maps: + maps[s[begin]] -= 1 + if maps[s[begin]] > 0: + counter += 1 + begin += 1 + + ''' + 1. save / update(min/max) the result if find a target + 2. result: collections or int value + ''' + return res +``` From 0d958d34d01549e26df1ac46dfa7979cf1730c9d Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 5 Jan 2018 11:11:02 -0600 Subject: [PATCH 0256/2496] Update slide_windows_template.md --- slide_windows_template.md | 100 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 97 insertions(+), 3 deletions(-) diff --git a/slide_windows_template.md b/slide_windows_template.md index dcd6f2df4..35f2856d0 100644 --- a/slide_windows_template.md +++ b/slide_windows_template.md @@ -1,4 +1,4 @@ -带注释版本 +带注释python版本 ```python class Solution(object): def slideWindowTemplate(self, s, t): @@ -35,7 +35,7 @@ class Solution(object): end += 1 # increase begin pointer to make it invalid/valid again - while counter == 0: + while counter == 0: # counter condition. different question may have different condition if s[begin] in maps: maps[s[begin]] -= 1 # plus or minus one if maps[s[begin]] > 0: @@ -50,7 +50,7 @@ class Solution(object): return res ``` -无注释版本: +无注释python版本: ```python class Solution(object): def minWindow(self, s, t): @@ -80,3 +80,97 @@ class Solution(object): ''' return res ``` +带注释java版本 +```java +public class Solution { + public List slidingWindowTemplateByHarryChaoyangHe(String s, String t) { + //init a collection or int value to save the result according the question. + List result = new LinkedList<>(); + if(t.length()> s.length()) return result; + + //create a hashmap to save the Characters of the target substring. + //(K, V) = (Character, Frequence of the Characters) + Map map = new HashMap<>(); + for(char c : t.toCharArray()){ + map.put(c, map.getOrDefault(c, 0) + 1); + } + //maintain a counter to check whether match the target string. + int counter = map.size();//must be the map size, NOT the string size because the char may be duplicate. + + //Two Pointers: begin - left pointer of the window; end - right pointer of the window + int begin = 0, end = 0; + + //the length of the substring which match the target string. + int len = Integer.MAX_VALUE; + + //loop at the begining of the source string + while(end < s.length()){ + + char c = s.charAt(end);//get a character + + if( map.containsKey(c) ){ + map.put(c, map.get(c)-1);// plus or minus one + if(map.get(c) == 0) counter--;//modify the counter according the requirement(different condition). + } + end++; + + //increase begin pointer to make it invalid/valid again + while(counter == 0 /* counter condition. different question may have different condition */){ + + char tempc = s.charAt(begin);//***be careful here: choose the char at begin pointer, NOT the end pointer + if(map.containsKey(tempc)){ + map.put(tempc, map.get(tempc) + 1);//plus or minus one + if(map.get(tempc) > 0) counter++;//modify the counter according the requirement(different condition). + } + + /* save / update(min/max) the result if find a target*/ + // result collections or result int value + + begin++; + } + } + return result; + } +} +``` + +无注释java版本: +```java +public class Solution { + public List slidingWindowTemplateByHarryChaoyangHe(String s, String t) { + List result = new LinkedList<>(); + if(t.length()> s.length()) return result; + Map map = new HashMap<>(); + for(char c : t.toCharArray()){ + map.put(c, map.getOrDefault(c, 0) + 1); + } + int counter = map.size(); + int begin = 0, end = 0; + int len = Integer.MAX_VALUE; + while(end < s.length()){ + char c = s.charAt(end); + if( map.containsKey(c) ){ + map.put(c, map.get(c)-1); + if(map.get(c) == 0) counter--; + } + end++; + while(counter == 0){ + char tempc = s.charAt(begin); + if(map.containsKey(tempc)){ + map.put(tempc, map.get(tempc) + 1); + if(map.get(tempc) > 0) counter++; + } + + /* + save / update(min/max) the result if find a target + result collections or result int value + */ + + begin++; + } + } + return result; + } +} +``` + From 94ee0c509a2adef4fb4b02b1acf65b3cbfd2e6a5 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 5 Jan 2018 11:17:59 -0600 Subject: [PATCH 0257/2496] Create 159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md --- ...ubstring_with_At_Most_Two_Distinct_Characters.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md diff --git a/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md b/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md new file mode 100644 index 000000000..8c6b2f955 --- /dev/null +++ b/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md @@ -0,0 +1,13 @@ +### 159. Longest Substring with At Most Two Distinct Characters + +题目: + + + +难度 : Hard + + + +```python + +``` From c1cfdffeefaa825e624330df3b9b29da3822d425 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 5 Jan 2018 11:18:31 -0600 Subject: [PATCH 0258/2496] Update slide_windows_template.md --- slide_windows_template.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/slide_windows_template.md b/slide_windows_template.md index 35f2856d0..7fa98a951 100644 --- a/slide_windows_template.md +++ b/slide_windows_template.md @@ -1,3 +1,10 @@ +能用此模板解决的题目目前有如下: +[leetcode 003](https://github.com/Lisanaaa/thinking_in_lc/blob/master/003._longest_substring_without_repeating_characters.md), +[leetcode 076](https://github.com/Lisanaaa/thinking_in_lc/blob/master/076._Minimum_Window_Substring.md), +[leetcode 159](https://github.com/Lisanaaa/thinking_in_lc/blob/master/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md) + + + 带注释python版本 ```python class Solution(object): From 9097b27ca5a10eb50fca7440aca20ae8a3350de3 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 5 Jan 2018 11:19:37 -0600 Subject: [PATCH 0259/2496] Update 159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md --- ...ng_with_At_Most_Two_Distinct_Characters.md | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md b/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md index 8c6b2f955..e093cc6e1 100644 --- a/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md +++ b/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md @@ -9,5 +9,24 @@ ```python - +class Solution(object): + def lengthOfLongestSubstringTwoDistinct(self, s): + """ + :type s: str + :rtype: int + """ + maps = {} + begin, end, counter, length = 0, 0, 0, 0 + while end < len(s): + maps[s[end]] = maps.get(s[end], 0) + 1 + if maps[s[end]] == 1: + counter += 1 + end += 1 + while counter > 2: + maps[s[begin]] -= 1 + if maps[s[begin]] == 0: + counter -= 1 + begin += 1 + length = max(length, end - begin) + return length ``` From eeb96448c5a1082bacd59e00df2c9f7b22b16bd5 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 5 Jan 2018 11:45:18 -0600 Subject: [PATCH 0260/2496] Update 438._Find_All_Anagrams_in_a_String.md --- 438._Find_All_Anagrams_in_a_String.md | 33 ++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/438._Find_All_Anagrams_in_a_String.md b/438._Find_All_Anagrams_in_a_String.md index 47417e197..2b8519852 100644 --- a/438._Find_All_Anagrams_in_a_String.md +++ b/438._Find_All_Anagrams_in_a_String.md @@ -34,7 +34,7 @@ class Solution(object): # 此法超时 ``` 于是用双指针,left和right都从0开始往后遍历 -```python +``` class Solution(object): def findAnagrams(self, s, p): """ @@ -56,6 +56,37 @@ class Solution(object): right += 1 return res ``` +模板大法好 +```python +class Solution(object): + def findAnagrams(self, s, p): + """ + :type s: str + :type p: str + :rtype: List[int] + """ + res = [] + if len(p) > len(s): + return res + maps = collections.Counter(p) + counter = len(maps.keys()) + begin, end, head, length = 0, 0, 0, sys.maxint + while end < len(s): + if s[end] in maps: + maps[s[end]] -= 1 + if maps[s[end]] == 0: + counter -= 1 + end += 1 + while counter == 0: + if s[begin] in maps: + maps[s[begin]] += 1 + if maps[s[begin]] > 0: + counter += 1 + if end - begin == len(p): + res.append(begin) + begin += 1 + return res +``` From ba3e461e475508bd0b125a2c6fda38e20c8da773 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 5 Jan 2018 11:50:51 -0600 Subject: [PATCH 0261/2496] Create 30._Substring_with_Concatenation_of_All_Words.md --- 30._Substring_with_Concatenation_of_All_Words.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 30._Substring_with_Concatenation_of_All_Words.md diff --git a/30._Substring_with_Concatenation_of_All_Words.md b/30._Substring_with_Concatenation_of_All_Words.md new file mode 100644 index 000000000..a24a9bed0 --- /dev/null +++ b/30._Substring_with_Concatenation_of_All_Words.md @@ -0,0 +1,13 @@ +### 30. Substring with Concatenation of All Words + +题目: + + + +难度 : Hard + + + +```python + +``` From b2e5b09cfca07b1d27240d2cd37efd659a330aac Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 5 Jan 2018 11:53:01 -0600 Subject: [PATCH 0262/2496] Update slide_windows_template.md --- slide_windows_template.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/slide_windows_template.md b/slide_windows_template.md index 7fa98a951..a061d1131 100644 --- a/slide_windows_template.md +++ b/slide_windows_template.md @@ -1,7 +1,9 @@ 能用此模板解决的题目目前有如下: [leetcode 003](https://github.com/Lisanaaa/thinking_in_lc/blob/master/003._longest_substring_without_repeating_characters.md), +[leetcode 030](https://github.com/Lisanaaa/thinking_in_lc/edit/master/30._Substring_with_Concatenation_of_All_Words.md), [leetcode 076](https://github.com/Lisanaaa/thinking_in_lc/blob/master/076._Minimum_Window_Substring.md), -[leetcode 159](https://github.com/Lisanaaa/thinking_in_lc/blob/master/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md) +[leetcode 159](https://github.com/Lisanaaa/thinking_in_lc/blob/master/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md), +[leetcode 438](https://github.com/Lisanaaa/thinking_in_lc/blob/master/438._Find_All_Anagrams_in_a_String.md) From 34b2ec80860a715f4da1617273cfcda5083a9190 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 5 Jan 2018 12:09:57 -0600 Subject: [PATCH 0263/2496] Update 159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md --- ...gest_Substring_with_At_Most_Two_Distinct_Characters.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md b/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md index e093cc6e1..7d65fb605 100644 --- a/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md +++ b/159._Longest_Substring_with_At_Most_Two_Distinct_Characters.md @@ -21,12 +21,12 @@ class Solution(object): maps[s[end]] = maps.get(s[end], 0) + 1 if maps[s[end]] == 1: counter += 1 - end += 1 - while counter > 2: +            end += 1   # end 永远指向下一个待处理的字符 +            while counter > 2: maps[s[begin]] -= 1 if maps[s[begin]] == 0: counter -= 1 begin += 1 - length = max(length, end - begin) - return length +            length = max(length, end - begin) # 因此这里是```end - begin```而不是```end - begin + 1``` +        return length ``` From 1fa65aaee710e205a49bfb0730a59b2f6e63e2a5 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 6 Jan 2018 00:06:33 -0600 Subject: [PATCH 0264/2496] Update slide_windows_template.md --- slide_windows_template.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/slide_windows_template.md b/slide_windows_template.md index a061d1131..c4768d23f 100644 --- a/slide_windows_template.md +++ b/slide_windows_template.md @@ -10,7 +10,7 @@ 带注释python版本 ```python class Solution(object): - def slideWindowTemplate(self, s, t): + def slideWindowTemplateByLisanaaa(self, s, t): """ :type s: str :type t: str @@ -62,7 +62,7 @@ class Solution(object): 无注释python版本: ```python class Solution(object): - def minWindow(self, s, t): + def slideWindowTemplateByLisanaaa(self, s, t): res = [] if len(t) > len(s): return res From 3999f73343059b6f29c4abc8fe9cea713ef89dc4 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 6 Jan 2018 09:25:34 -0600 Subject: [PATCH 0265/2496] Update and rename 30._Substring_with_Concatenation_of_All_Words.md to 030._Substring_with_Concatenation_of_All_Words.md --- ...bstring_with_Concatenation_of_All_Words.md | 54 +++++++++++++++++++ ...bstring_with_Concatenation_of_All_Words.md | 13 ----- 2 files changed, 54 insertions(+), 13 deletions(-) create mode 100644 030._Substring_with_Concatenation_of_All_Words.md delete mode 100644 30._Substring_with_Concatenation_of_All_Words.md diff --git a/030._Substring_with_Concatenation_of_All_Words.md b/030._Substring_with_Concatenation_of_All_Words.md new file mode 100644 index 000000000..0dd9eea26 --- /dev/null +++ b/030._Substring_with_Concatenation_of_All_Words.md @@ -0,0 +1,54 @@ +### 30. Substring with Concatenation of All Words + +题目: + + + +难度 : Hard + + + +```python +class Solution(object): + def findSubstring(self, s, words): + """ + :type s: str + :type words: List[str] + :rtype: List[int] + """ + res = [] + if len(words) == 0 or len(s) < len(words) * len(words[0]): + return res + n, m, wl = len(s), len(words), len(words[0]) + maps, cur_map = {}, {} + maps = collections.Counter(words) + for i in range(wl): + count, start, r = 0, i, i + while r + wl <= n: + string = s[r:r+wl] + if string in maps: + cur_map[string] = cur_map.get(string, 0) + 1 + if cur_map[string] <= maps[string]: + count += 1 + while cur_map[string] > maps[string]: + tmp = s[start:start+wl] + cur_map[tmp] -= 1 + start += wl + if cur_map[tmp] < maps[tmp]: + count -= 1 + if count == m: + res.append(start) + tmp = s[start:start+wl] + cur_map[tmp] -= 1 + start += wl + count -= 1 + else: + cur_map = {} + count = 0 + start = r + wl + r += wl + cur_map = {} + return res + + +``` diff --git a/30._Substring_with_Concatenation_of_All_Words.md b/30._Substring_with_Concatenation_of_All_Words.md deleted file mode 100644 index a24a9bed0..000000000 --- a/30._Substring_with_Concatenation_of_All_Words.md +++ /dev/null @@ -1,13 +0,0 @@ -### 30. Substring with Concatenation of All Words - -题目: - - - -难度 : Hard - - - -```python - -``` From 314fc80b252cd245a2dc15486f4df0a7126c0799 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 6 Jan 2018 09:45:08 -0600 Subject: [PATCH 0266/2496] Update slide_windows_template.md --- slide_windows_template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/slide_windows_template.md b/slide_windows_template.md index c4768d23f..09a1917f5 100644 --- a/slide_windows_template.md +++ b/slide_windows_template.md @@ -38,7 +38,7 @@ class Solution(object): # loop at the begining of the source string while end < len(s): if s[end] in maps: - maps[s[end]] += 1 # plus or minus one + maps[s[end]] -= 1 # plus or minus one if maps[s[end]] == 0: counter -= 1 # modify the counter according the requirement(different condition). end += 1 From 6e8b082fd8b383355c056c830a963bd03d6fa152 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 6 Jan 2018 09:47:18 -0600 Subject: [PATCH 0267/2496] Update slide_windows_template.md --- slide_windows_template.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/slide_windows_template.md b/slide_windows_template.md index 09a1917f5..919d1c0f9 100644 --- a/slide_windows_template.md +++ b/slide_windows_template.md @@ -46,7 +46,7 @@ class Solution(object): # increase begin pointer to make it invalid/valid again while counter == 0: # counter condition. different question may have different condition if s[begin] in maps: - maps[s[begin]] -= 1 # plus or minus one + maps[s[begin]] += 1 # plus or minus one if maps[s[begin]] > 0: counter += 1 # modify the counter according the requirement(different condition). begin += 1 @@ -72,13 +72,13 @@ class Solution(object): length = sys.maxint while end < len(s): if s[end] in maps: - maps[s[end]] += 1 + maps[s[end]] -= 1 if maps[s[end]] == 0: counter -= 1 end += 1 while counter == 0: if s[begin] in maps: - maps[s[begin]] -= 1 + maps[s[begin]] += 1 if maps[s[begin]] > 0: counter += 1 begin += 1 From 1d3a6ec13ba2d1d445ac35039dff5ca8c7d07b28 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 7 Jan 2018 14:17:22 -0600 Subject: [PATCH 0268/2496] Update 682._Baseball_Game.md --- 682._Baseball_Game.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/682._Baseball_Game.md b/682._Baseball_Game.md index 14d8f614a..e775cbf8c 100644 --- a/682._Baseball_Game.md +++ b/682._Baseball_Game.md @@ -1,4 +1,4 @@ -###682. Baseball Game +### 682. Baseball Game 题目: From d4b4a854a962fe58cba59e36a924f61fe847ad39 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 7 Jan 2018 14:22:05 -0600 Subject: [PATCH 0269/2496] Update 450. Delete Node in a BST.md --- 450. Delete Node in a BST.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/450. Delete Node in a BST.md b/450. Delete Node in a BST.md index 81c26c173..3f622c90a 100644 --- a/450. Delete Node in a BST.md +++ b/450. Delete Node in a BST.md @@ -24,7 +24,7 @@ AC代码 -``` +```python class Solution(object): def deleteNode(self, root, key): """ From 3db998c2fcf7f8c8038d88fa4ead0d40f46a52b3 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 7 Jan 2018 14:33:47 -0600 Subject: [PATCH 0270/2496] Update 112._path_sum.md --- 112._path_sum.md | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/112._path_sum.md b/112._path_sum.md index db20ec2aa..1f6b07a51 100644 --- a/112._path_sum.md +++ b/112._path_sum.md @@ -1,4 +1,4 @@ -###112. Path Sum +### 112. Path Sum 题目: @@ -11,7 +11,7 @@ Easy 递归 -``` +```python class Solution(object): def hasPathSum(self, root, sum): """ @@ -19,12 +19,10 @@ class Solution(object): :type sum: int :rtype: bool """ - if root == None: - return False + if not root: + return False + if root.left or root.right: + return self.hasPathSum(root.left, sum-root.val) or self.hasPathSum(root.right, sum-root.val) else: - if root.val == sum and (root.left == None and root.right == None): - return True - else: - return self.hasPathSum(root.left, sum - root.val) or self.hasPathSum(root.right, sum - root.val) - + return root.val == sum ``` From a7e345f56f048d43626fc946107e840f05fd7854 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 7 Jan 2018 16:46:00 -0600 Subject: [PATCH 0271/2496] =?UTF-8?q?Update=20backtracking=E6=80=9D?= =?UTF-8?q?=E8=B7=AF.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "backtracking\346\200\235\350\267\257.md" | 227 +++++++++++++++++++++- 1 file changed, 225 insertions(+), 2 deletions(-) diff --git "a/backtracking\346\200\235\350\267\257.md" "b/backtracking\346\200\235\350\267\257.md" index 27e61d352..f854b479b 100644 --- "a/backtracking\346\200\235\350\267\257.md" +++ "b/backtracking\346\200\235\350\267\257.md" @@ -1,4 +1,227 @@ -##以Generate Parentheses为例,backtrack的题到底该怎么去思考? +## backtracking 全集 + +### 回溯是啥 +用爬山来比喻回溯,好比从山脚下找一条爬上山顶的路,起初有好几条道可走,当选择一条道走到某处时,又有几条岔道可供选择,只能选择其中一条道往前走,若能这样子顺利爬上山顶则罢了,否则走到一条绝路上时,只好返回到最近的一个路口,重新选择另一条没走过的道往前走。如果该路口的所有路都走不通,只得从该路口继续回返。照此规则走下去,要么找到一条到达山顶的路,要么最终试过所有可能的道,无法到达山顶。 +回溯是一种穷举,但与brute force有一些区别,回溯带了两点脑子的,并不多,brute force一点也没带。 +第一点脑子是回溯知道回头;相反如果是brute force,发现走不通立刻跳下山摔死,换第二条命从头换一条路走。 +第二点脑子是回溯知道剪枝;如果有一条岔路上放了一坨屎,那这条路我们不走,就可以少走很多不必要走的路。 + +还有一些爱混淆的概念:递归,回溯,DFS。 +回溯是一种找路方法,搜索的时候走不通就回头换路接着走,直到走通了或者发现此山根本不通。 +DFS是一种开路策略,就是一条道先走到头,再往回走一步换一条路走到头,这也是回溯用到的策略。在树和图上回溯时人们叫它DFS。 +递归是一种行为,回溯和递归如出一辙,都是一言不合就回到来时的路,所以一般回溯用递归实现;当然也可以不用,用栈。 +以下以回溯统称,因为这个词听上去很文雅。 + +### 识别回溯 +判断回溯很简单,拿到一个问题,你感觉如果不穷举一下就没法知道答案,那就可以开始回溯了。 +一般回溯的问题有三种: + +1. Find a path to success 有没有解 +2. Find all paths to success 求所有解,求所有解的个数,求所有解的具体信息 +3. Find the best path to success 求最优解 + +理解回溯:给一堆选择, 必须从里面选一个. 选完之后我又有了新的一组选择. ```This procedure is repeated over and over until you reach a final state. If you made a good sequence of choices, your final state is a goal state; if you didn't, it isn't.``` + +回溯可以抽象为一棵树,我们的目标可以是找这个树有没有good leaf,也可以是问有多少个good leaf,也可以是找这些good leaf都在哪,也可以问哪个good leaf最好,分别对应上面所说回溯的问题分类。 +good leaf都在leaf上。good leaf是我们的goal state,leaf node是final state,是解空间的边界。 + +对于第一类问题(问有没有解),基本都是长着个样子的,理解了它,其他类别迎刃而解: +```java +boolean solve(Node n) { + if n is a leaf node { + if the leaf is a goal node, return true + else return false + } else { + for each child c of n { + if solve(c) succeeds, return true + } + return false + } +} +``` +请读以下这段话以加深理解: +```Notice that the algorithm is expressed as a boolean function. This is essential to understanding the algorithm. If solve(n) is true, that means node n is part of a solution--that is, node n is one of the nodes on a path from the root to some goal node. We say that n is solvable. If solve(n) is false, then there is no path that includes n to any goal node.``` + +还不懂的话请通读全文吧:[Backtracking - David Matuszek](https://www.cis.upenn.edu/~matuszek/cit594-2012/Pages/backtracking.html) + +关于回溯的三种问题,模板略有不同, +第一种,返回值是true/false。 +第二种,求个数,设全局counter,返回值是void;求所有解信息,设result,返回值void。 +第三种,设个全局变量best,返回值是void。 + +第一种: +```java +boolean solve(Node n) { + if n is a leaf node { + if the leaf is a goal node, return true + else return false + } else { + for each child c of n { + if solve(c) succeeds, return true + } + return false + } +} +``` +第二种: +```java +void solve(Node n) { + if n is a leaf node { + if the leaf is a goal node, count++, return; + else return + } else { + for each child c of n { + solve(c) + } + } +} +``` +第三种: +```java +void solve(Node n) { + if n is a leaf node { + if the leaf is a goal node, update best result, return; + else return + } else { + for each child c of n { + solve(c) + } + } +} +``` +题目 + +八皇后 N-Queens + +问题 + +1. 给个n,问有没有解; +2. 给个n,有几种解;(Leetcode N-Queens II) +3. 给个n,给出所有解;(Leetcode N-Queens I) + +解答 + +1.有没有解 + +怎么做:一行一行的放queen,每行尝试n个可能,有一个可达,返回true;都不可达,返回false. + +边界条件leaf:放完第n行 或者 该放第n+1行(出界,返回) + +目标条件goal:n行放满且isValid,即目标一定在leaf上 + +helper函数: +boolean solve(int i, int[][] matrix) +在进来的一瞬间,满足property:第i行还没有被放置,前i-1行放置完毕且valid +solve要在给定的matrix上试图给第i行每个位置放queen。 +```java +public static boolean solve1(int i, List matrix, int n) { + if (i == n) { + if (isValid(matrix)) + return true; + return false; + } else { + for (int j = 0; j < n; j++) { + matrix.add(j); + if (isValid(matrix)) { //剪枝 + if (solve1(i + 1, matrix, n)) + return true; + } + matrix.remove(matrix.size() - 1); + } + return false; + } +} +``` +2.求解的个数 + +怎么做:一行一行的放queen,每行尝试n个可能。这回因为要找所有,返回值就没有了意义,用void即可。在搜索时,如果有一个可达,仍要继续尝试;每个子选项都试完了,返回. + +边界条件leaf:放完第n行 或者 该放第n+1行(出界,返回) + +目标条件goal:n行放满且isValid,即目标一定在leaf上 + +helper函数: +void solve(int i, int[][] matrix) +在进来的一瞬间,满足property:第i行还没有被放置,前i-1行放置完毕且valid +solve要在给定的matrix上试图给第i行每个位置放queen。 +这里为了记录解的个数,设置一个全局变量(static)int是比较efficient的做法。 +```java +public static void solve2(int i, List matrix, int n) { + if (i == n) { + if (isValid(matrix)) + count++; + return; + } else { + for (int j = 0; j < n; j++) { + matrix.add(j); + if (isValid(matrix)) { //剪枝 + solve2(i + 1, matrix, n); + } + matrix.remove(matrix.size() - 1); + } + } +} +``` +3.求所有解的具体信息 + +怎么做:一行一行的放queen,每行尝试n个可能。返回值同样用void即可。在搜索时,如果有一个可达,仍要继续尝试;每个子选项都试完了,返回. + +边界条件leaf:放完第n行 或者 该放第n+1行(出界,返回) + +目标条件goal:n行放满且isValid,即目标一定在leaf上 + +helper函数: +void solve(int i, int[][] matrix) +在进来的一瞬间,满足property:第i行还没有被放置,前i-1行放置完毕且valid +solve要在给定的matrix上试图给第i行每个位置放queen。 +这里为了记录解的具体情况,设置一个全局变量(static)集合是比较efficient的做法。 +当然也可以把结果集合作为参数传来传去。 +```java +public static void solve3(int i, List matrix, int n) { + if (i == n) { + if (isValid(matrix)) + result.add(new ArrayList(matrix)); + return; + } else { + for (int j = 0; j < n; j++) { + matrix.add(j); + if (isValid(matrix)) { //剪枝 + solve3(i + 1, matrix, n); + } + matrix.remove(matrix.size() - 1); + } + } +} +``` +优化 + +上面的例子用了省空间的方法。 +由于每行只能放一个,一共n行的话,用一个大小为n的数组,数组的第i个元素表示第i行放在了第几列上。 + +Utility(给一个list判断他的最后一行是否和前面冲突): +```java +public static boolean isValid(List list){ + int row = list.size() - 1; + int col = list.get(row); + for (int i = 0; i <= row - 1; i++) { + int row1 = i; + int col1 = list.get(i); + if (col == col1) + return false; + if (row1 - row == col1 - col) + return false; + if (row1 - row == col - col1) + return false; + } + return true; + +} +``` + + + + +## 以Generate Parentheses为例,backtrack的题到底该怎么去思考? 所谓Backtracking都是这样的思路:在当前局面下,你有若干种选择。那么尝试每一种选择。如果已经发现某种选择肯定不行(因为违反了某些限定条件),就返回;如果某种选择试到最后发现是正确解,就将其加入解集 @@ -65,4 +288,4 @@ while(Problem is not solved) End For If none of the move works out, return false, NO SOLUTON. -``` \ No newline at end of file +``` From e1d7d26ecef96b39f517def6779cf575b02e686a Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 7 Jan 2018 16:48:02 -0600 Subject: [PATCH 0272/2496] =?UTF-8?q?Update=20backtracking=E6=80=9D?= =?UTF-8?q?=E8=B7=AF.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "backtracking\346\200\235\350\267\257.md" | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git "a/backtracking\346\200\235\350\267\257.md" "b/backtracking\346\200\235\350\267\257.md" index f854b479b..16fc5e3c0 100644 --- "a/backtracking\346\200\235\350\267\257.md" +++ "b/backtracking\346\200\235\350\267\257.md" @@ -17,7 +17,9 @@ DFS是一种开路策略,就是一条道先走到头,再往回走一步换 一般回溯的问题有三种: 1. Find a path to success 有没有解 -2. Find all paths to success 求所有解,求所有解的个数,求所有解的具体信息 +2. Find all paths to success 求所有解 + - 2.1 求所有解的个数, + - 2.2 求所有解的具体信息 3. Find the best path to success 求最优解 理解回溯:给一堆选择, 必须从里面选一个. 选完之后我又有了新的一组选择. ```This procedure is repeated over and over until you reach a final state. If you made a good sequence of choices, your final state is a goal state; if you didn't, it isn't.``` From 6341b08acad0ff656e1e4fa9b8406c24d3e0042f Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 7 Jan 2018 16:49:07 -0600 Subject: [PATCH 0273/2496] =?UTF-8?q?Update=20backtracking=E6=80=9D?= =?UTF-8?q?=E8=B7=AF.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "backtracking\346\200\235\350\267\257.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/backtracking\346\200\235\350\267\257.md" "b/backtracking\346\200\235\350\267\257.md" index 16fc5e3c0..e2b352fef 100644 --- "a/backtracking\346\200\235\350\267\257.md" +++ "b/backtracking\346\200\235\350\267\257.md" @@ -220,7 +220,7 @@ public static boolean isValid(List list){ } ``` - +参考[](https://segmentfault.com/a/1190000006121957) ## 以Generate Parentheses为例,backtrack的题到底该怎么去思考? From c1a5354e025dbc6f1c8f55eb9e6d19a937e0ba57 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 7 Jan 2018 16:52:20 -0600 Subject: [PATCH 0274/2496] =?UTF-8?q?Update=20backtracking=E6=80=9D?= =?UTF-8?q?=E8=B7=AF.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "backtracking\346\200\235\350\267\257.md" | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git "a/backtracking\346\200\235\350\267\257.md" "b/backtracking\346\200\235\350\267\257.md" index e2b352fef..395026208 100644 --- "a/backtracking\346\200\235\350\267\257.md" +++ "b/backtracking\346\200\235\350\267\257.md" @@ -220,7 +220,9 @@ public static boolean isValid(List list){ } ``` -参考[](https://segmentfault.com/a/1190000006121957) +参考[Backtracking回溯法(又称DFS,递归)全解](https://segmentfault.com/a/1190000006121957), +[Python Patterns - Implementing Graphs](https://www.python.org/doc/essays/graphs/) + ## 以Generate Parentheses为例,backtrack的题到底该怎么去思考? From e46219c4735d3f594fee796dd301a26b10cd6052 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 7 Jan 2018 16:53:16 -0600 Subject: [PATCH 0275/2496] =?UTF-8?q?Update=20backtracking=E6=80=9D?= =?UTF-8?q?=E8=B7=AF.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "backtracking\346\200\235\350\267\257.md" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/backtracking\346\200\235\350\267\257.md" "b/backtracking\346\200\235\350\267\257.md" index 395026208..dbb7e8cf1 100644 --- "a/backtracking\346\200\235\350\267\257.md" +++ "b/backtracking\346\200\235\350\267\257.md" @@ -220,8 +220,8 @@ public static boolean isValid(List list){ } ``` -参考[Backtracking回溯法(又称DFS,递归)全解](https://segmentfault.com/a/1190000006121957), -[Python Patterns - Implementing Graphs](https://www.python.org/doc/essays/graphs/) +参考[Backtracking回溯法(又称DFS,递归)全解](https://segmentfault.com/a/1190000006121957) +以及 [Python Patterns - Implementing Graphs](https://www.python.org/doc/essays/graphs/) From 4359e54912dc775598fce2c2e9c203266c6a08aa Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 7 Jan 2018 18:15:27 -0600 Subject: [PATCH 0276/2496] =?UTF-8?q?Update=20tree=5Fsearch=EF=BC=8C=5Fgra?= =?UTF-8?q?ph=5Fsearch=EF=BC=8C=5Fdfs,=5Fbfs.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\214_graph_search\357\274\214_dfs,_bfs.md" | 226 ++++++++---------- 1 file changed, 96 insertions(+), 130 deletions(-) diff --git "a/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" "b/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" index 7dccde3ec..64500f324 100644 --- "a/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" +++ "b/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" @@ -4,7 +4,7 @@ 其实原本是根本不知道还有tree search的,只知道graph search,原来graph search就是一般我看到的dfs,bfs,有一个结构来记录visited node,这样在寻找邻居的时候,防止已经visit的node再被visit. -### Tree Search +## Tree Search general tree search pseudocode @@ -21,112 +21,7 @@ function TREE_SEARCH(problem, strategy) returns a solution, or failure ``` - - -### Graph Search - -very simple fix: never expand a state type twice - -``` -function GRAPH_SEARCH(problem, fringe) returns a solution, or failure - closed <- an empty set - fringe <- INSERT(MAKE-NODE(INITIAL-STATE[problem]),fringe) - loop do - if fringe is empty then return failure - node <- REMOVE-FRONT(fringe) - if GOAL-TEST(problem, STATE[node]) then return node - if STATE[node] is not in closed then - add STATE[node] to closed - fringe <- INSERTALL(EXPAND(node, problem)) - end - -``` - - -重要的点: - -- fringe -- strategy - -然后没有查重的过程 - -####DFS - -递归伪码 - -``` -1 procedure DFS(G,v): -2 label v as discovered -3 for all edges from v to w in G.adjacentEdges(v) do -4 if vertex w is not labeled as discovered then -5 recursively call DFS(G,w) -``` - -非递归伪码,其实递归在计算机内部就是用的stack,所以这里用stack可以解决问题 - -每次都expand deepest node - -``` -1 procedure DFS-iterative(G,v): -2 let S be a stack -3 S.push(v) -4 while S is not empty -5 v = S.pop() -6 for all edges from v to w in G.adjacentEdges(v) do -7 if w is not labeled as discovered: -8 label w as discovered -9 S.push(w) -``` - - -#### BFS - -伪码,这个伪码提供的信息有点多啊,把Unweighted shortest distance顺便也求出来了。 - -``` - 1 Breadth-First-Search(Graph, root): - 2 - 3 for each node n in Graph: - 4 n.distance = INFINITY - 5 n.parent = NIL - 6 - 7 create empty queue Q - 8 - 9 root.distance = 0 -10 Q.enqueue(root) -11 -12 while Q is not empty: -13 -14 current = Q.dequeue() -15 -16 for each node n that is adjacent to current: -17 if n.distance == INFINITY: -18 n.distance = current.distance + 1 -19 n.parent = current -20 Q.enqueue(n) -``` - -其实跟以上DFS的非递归写成一样也行 - -expand the shallowest node - - -``` -1 procedure BFS-iterative(G,v): -2 let Q be a queue -3 Q.enqueue(v) -4 while Q is not empty -5 v = Q.dequeue() -6 for all edges from v to w in G.adjacentEdges(v) do -7 if w is not labeled as discovered: -8 label w as discovered -9 Q.enqueue(w) -``` - -BFS和DFS其实就是每次选下一个expand的node用的strategy不同. - - -#### DFS/BFS with Path +## DFS/BFS 可以让stack/queue记录更多一些的东西,因为反正stack/queue更像通用结构 @@ -146,38 +41,109 @@ graph = {'A': set(['B', 'C']), 'D': set(['B']), 'E': set(['B', 'F']), 'F': set(['C', 'E'])} - - - - -def dfs_paths(graph, start, goal): +``` +### DFS +The implementation below uses the stack data-structure to build-up and return a set of vertices that are accessible within the subjects connected component. Using Python’s overloading of the subtraction operator to remove items from a set, we are able to add only the unvisited adjacent vertices. +```python +def dfs(graph, start): # iterative + visited, stack = [], [start] + while stack: + vertex = stack.pop() + if vertex not in visited: + visited.append(vertex) + stack.extend(graph[vertex] - set(visited)) + return visited +print(dfs(graph, 'A')) # ['A', 'C', 'F', 'E', 'B', 'D'] 这只是其中一种答案 +``` +The second implementation provides the same functionality as the first, however, this time we are using the more succinct recursive form. Due to a common Python gotcha with default parameter values being created only once, we are required to create a new visited set on each user invocation. Another Python language detail is that function variables are passed by reference, resulting in the visited mutable set not having to reassigned upon each recursive call. +```python +def dfs(graph, start, visited=None): # recursive + if visited is None: + visited = [] + print('visiting', start) + visited.append(start) + for next in graph[start]: + if next not in visited: + dfs(graph, next, visited) + return visited +print(dfs(graph, 'A')) # ['A', 'C', 'F', 'E', 'B', 'D'] 这只是其中一种答案 +``` +We are able to tweak both of the previous implementations to return all possible paths between a start and goal vertex. The implementation below uses the stack data-structure again to iteratively solve the problem, yielding each possible path when we locate the goal. Using a generator allows the user to only compute the desired amount of alternative paths. +```python +def dfs_paths(graph, start, goal): # iterative stack = [(start, [start])] - visited = set() while stack: (vertex, path) = stack.pop() - if vertex not in visited: - if vertex == goal: - return path - visited.add(vertex) - for neighbor in graph[vertex]: - stack.append((neighbor, path + [neighbor])) - -print (dfs_paths(graph, 'A', 'F')) #['A', 'B', 'E', 'F'] + for next in graph[vertex] - set(path): + if next == goal: + yield path + [next] + else: + stack.append((next, path + [next])) +print(list(dfs_paths(graph, 'A', 'F'))) # [['A', 'C', 'F'], ['A', 'B', 'E', 'F']] +``` +The implementation below uses the recursive approach calling the ‘yield from’ PEP380 addition to return the invoked located paths. Unfortunately the version of Pygments installed on the server at this time does not include the updated keyword combination. +```python +def dfs_paths(graph, start, goal, path=None): # recursive + if path is None: + path = [start] + if start == goal: + yield path + for next in graph[start] - set(path): + yield from dfs_paths(graph, next, goal, path + [next]) +print(list(dfs_paths(graph, 'C', 'F'))) # [['C', 'A', 'B', 'E', 'F'], ['C', 'F']] ``` -一旦BFS/DFS与更具体的,更有特性的data structure结合起来,比如binary search tree,那么BFS/DFS会针对这个tree traversal显得更有特性。 - - -#### UCS +### BFS -expand the cheapest node first +Similar to the iterative DFS implementation the only alteration required is to remove the next item from the beginning of the list structure instead of the stacks last. +```python +def bfs(graph, start): # iterative + visited, queue = [], [start] + while queue: + vertex = queue.pop(0) + if vertex not in visited: + visited.append(vertex) + queue.extend(graph[vertex] - set(visited)) + return visited +print(bfs(graph, 'A')) # ['A', 'C', 'B', 'F', 'D', 'E'] +``` +This implementation can again be altered slightly to instead return all possible paths between two vertices, the first of which being one of the shortest such path. +```python +def bfs_paths(graph, start, goal): + queue = [(start, [start])] + while queue: + (vertex, path) = queue.pop(0) + for next in graph[vertex] - set(path): + if next == goal: + yield path + [next] + else: + queue.append((next, path + [next])) +print(list(bfs_paths(graph, 'A', 'F'))) # [['A', 'C', 'F'], ['A', 'B', 'E', 'F']] +``` +Knowing that the shortest path will be returned first from the BFS path generator method we can create a useful method which simply returns the shortest path found or ‘None’ if no path exists. As we are using a generator this in theory should provide similar performance results as just breaking out and returning the first matching path in the BFS implementation. +```python +def bfs_paths(graph, start, goal): + queue = [(start, [start])] + while queue: + (vertex, path) = queue.pop(0) + for next in graph[vertex] - set(path): + if next == goal: + yield path + [next] + else: + queue.append((next, path + [next])) +def shortest_path(graph, start, goal): + try: + return next(bfs_paths(graph, start, goal)) + except StopIteration: + return None +print(shortest_path(graph, 'A', 'F')) # ['A', 'C', 'F'] +``` -Fringe is a priority queue +#### Improvement/Follow up -乃Dijkstra算法 +1. 一旦BFS/DFS与更具体的,更有特性的data structure结合起来,比如binary search tree,那么BFS/DFS会针对这个tree traversal显得更有特性。 +2. it's worth mentioning that there is an optimized queue object in the collections module called [deque](https://docs.python.org/2/library/collections.html#collections.deque)) for which removing items from the beginning ( or popleft ) takes constant time as opposed to O(n) time for lists. -#### Greedy -#### A* From 41aa3c6e78111bab08898ffc3963f16186308a59 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 7 Jan 2018 18:20:16 -0600 Subject: [PATCH 0277/2496] =?UTF-8?q?Update=20tree=5Fsearch=EF=BC=8C=5Fgra?= =?UTF-8?q?ph=5Fsearch=EF=BC=8C=5Fdfs,=5Fbfs.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...earch\357\274\214_graph_search\357\274\214_dfs,_bfs.md" | 7 +++++++ 1 file changed, 7 insertions(+) diff --git "a/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" "b/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" index 64500f324..364b5e0c8 100644 --- "a/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" +++ "b/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" @@ -146,4 +146,11 @@ print(shortest_path(graph, 'A', 'F')) # ['A', 'C', 'F'] +### Resources + +[Depth-and Breadth-First Search](https://jeremykun.com/2013/01/22/depth-and-breadth-first-search/) +[Edd Mann](http://eddmann.com/posts/depth-first-search-and-breadth-first-search-in-python/) +[graph - Depth-first search in Python](https://codereview.stackexchange.com/questions/78577/depth-first-search-in-python) + + From 62badcd4f548866191fc5e687bbf1656a97f981b Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 7 Jan 2018 18:20:39 -0600 Subject: [PATCH 0278/2496] =?UTF-8?q?Update=20tree=5Fsearch=EF=BC=8C=5Fgra?= =?UTF-8?q?ph=5Fsearch=EF=BC=8C=5Fdfs,=5Fbfs.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git "a/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" "b/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" index 364b5e0c8..656ec8a1f 100644 --- "a/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" +++ "b/tree_search\357\274\214_graph_search\357\274\214_dfs,_bfs.md" @@ -148,9 +148,9 @@ print(shortest_path(graph, 'A', 'F')) # ['A', 'C', 'F'] ### Resources -[Depth-and Breadth-First Search](https://jeremykun.com/2013/01/22/depth-and-breadth-first-search/) -[Edd Mann](http://eddmann.com/posts/depth-first-search-and-breadth-first-search-in-python/) -[graph - Depth-first search in Python](https://codereview.stackexchange.com/questions/78577/depth-first-search-in-python) +1. [Depth-and Breadth-First Search](https://jeremykun.com/2013/01/22/depth-and-breadth-first-search/) +2. [Edd Mann](http://eddmann.com/posts/depth-first-search-and-breadth-first-search-in-python/) +3. [graph - Depth-first search in Python](https://codereview.stackexchange.com/questions/78577/depth-first-search-in-python) From b0574d77352b272009fe28a1d6c64abae25de36c Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 7 Jan 2018 23:48:41 -0600 Subject: [PATCH 0279/2496] Update 113._path_sum_ii.md --- 113._path_sum_ii.md | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/113._path_sum_ii.md b/113._path_sum_ii.md index 21cb0fabf..d1f2ea9c6 100644 --- a/113._path_sum_ii.md +++ b/113._path_sum_ii.md @@ -1,4 +1,4 @@ -###113. Path Sum II +### 113. Path Sum II 题目: @@ -14,14 +14,7 @@ tag : DFS 注意宁愿写几次curList + [root.val] 也不要直接传一个list进去,因为list pass by reference的亏已经吃过了 -``` -# Definition for a binary tree node. -# class TreeNode(object): -# def __init__(self, x): -# self.val = x -# self.left = None -# self.right = None - +```python class Solution(object): def pathSum(self, root, sum): """ @@ -29,20 +22,19 @@ class Solution(object): :type sum: int :rtype: List[List[int]] """ - result = [] - self.auxPathSum(root,sum,[],result) - return result - - def auxPathSum(self, root, sum, curList, curLists): - if root == None: + res = [] + self.auxPathSum(root, sum, [], res) + return res + def auxPathSum(self, root, sum, cur_list, cur_lists): + if not root: return sum -= root.val - if sum == 0 and (root.left == None and root.right == None): - curLists.append(curList + [root.val]) + if sum == 0 and not root.left and not root.right: + cur_lists.append(cur_list + [root.val]) return - if root.left != None: - self.auxPathSum(root.left, sum - root.val, curList + [root.val],curLists) - if root.right != None: - self.auxPathSum(root.right, sum - root.val, curList + [root.val],curLists) + if root.left: + self.auxPathSum(root.left, sum, cur_list + [root.val], cur_lists) + if root.right: + self.auxPathSum(root.right, sum, cur_list + [root.val], cur_lists) ``` From 6e56f92dd81163155aef0b4b326db95d16fa865a Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 8 Jan 2018 10:56:56 -0600 Subject: [PATCH 0280/2496] Update 022._generate_parentheses.md --- 022._generate_parentheses.md | 144 +++++++++++++++++------------------ 1 file changed, 72 insertions(+), 72 deletions(-) diff --git a/022._generate_parentheses.md b/022._generate_parentheses.md index 17bac762b..ae14c9089 100644 --- a/022._generate_parentheses.md +++ b/022._generate_parentheses.md @@ -1,18 +1,18 @@ -###22. Generate Parentheses - -题目: - - - -难度: - -Medium - - - - - -``` +### 22. Generate Parentheses + +题目: + + + +难度: + +Medium + + + + + +```python class Solution(object): def generateParenthesis(self,n): """ @@ -29,60 +29,60 @@ class Solution(object): if left < n: self.singleStr(s + '(',left + 1, right,n) if right < left: - self.singleStr(s + ')',left, right + 1, n) - -``` - - -非常牛逼的讲解,需要这样的人来给我们讲算法 - -####以Generate Parentheses为例,backtrack的题到底该怎么去思考? - - -所谓Backtracking都是这样的思路:在当前局面下,你有若干种选择。那么尝试每一种选择。如果已经发现某种选择肯定不行(因为违反了某些限定条件),就返回;如果某种选择试到最后发现是正确解,就将其加入解集 - -所以你思考递归题时,只要明确三点就行:选择 (Options),限制 (Restraints),结束条件 (Termination)。即“ORT原则”(这个是我自己编的) - - - - -对于这道题,在任何时刻,你都有两种选择: -1. 加左括号。 -2. 加右括号。 - -同时有以下限制: -1. 如果左括号已经用完了,则不能再加左括号了。 -2. 如果已经出现的右括号和左括号一样多,则不能再加右括号了。因为那样的话新加入的右括号一定无法匹配。 - -结束条件是: -左右括号都已经用完。 - -结束后的正确性: -左右括号用完以后,一定是正确解。因为1. 左右括号一样多,2. 每个右括号都一定有与之配对的左括号。因此一旦结束就可以加入解集(有时也可能出现结束以后不一定是正确解的情况,这时要多一步判断)。 - -递归函数传入参数: -限制和结束条件中有“用完”和“一样多”字样,因此你需要知道左右括号的数目。 -当然你还需要知道当前局面sublist和解集res。 - -因此,把上面的思路拼起来就是代码: - - if (左右括号都已用完) { - 加入解集,返回 - } - //否则开始试各种选择 - if (还有左括号可以用) { - 加一个左括号,继续递归 - } - if (右括号小于左括号) { - 加一个右括号,继续递归 - } - - - -你帖的那段代码逻辑中加了一条限制:“3. 是否还有右括号剩余。如有才加右括号”。这是合理的。不过对于这道题,如果满足限制1、2时,3一定自动满足,所以可以不判断3。 - -这题其实是最好的backtracking初学练习之一,因为ORT三者都非常简单明显。你不妨按上述思路再梳理一遍,还有问题的话再说。 - - - -以上文字来自 1point3arces的牛人解答 \ No newline at end of file + self.singleStr(s + ')',left, right + 1, n) + +``` + + +非常牛逼的讲解,需要这样的人来给我们讲算法 + +####以Generate Parentheses为例,backtrack的题到底该怎么去思考? + + +所谓Backtracking都是这样的思路:在当前局面下,你有若干种选择。那么尝试每一种选择。如果已经发现某种选择肯定不行(因为违反了某些限定条件),就返回;如果某种选择试到最后发现是正确解,就将其加入解集 + +所以你思考递归题时,只要明确三点就行:选择 (Options),限制 (Restraints),结束条件 (Termination)。即“ORT原则”(这个是我自己编的) + + + + +对于这道题,在任何时刻,你都有两种选择: +1. 加左括号。 +2. 加右括号。 + +同时有以下限制: +1. 如果左括号已经用完了,则不能再加左括号了。 +2. 如果已经出现的右括号和左括号一样多,则不能再加右括号了。因为那样的话新加入的右括号一定无法匹配。 + +结束条件是: +左右括号都已经用完。 + +结束后的正确性: +左右括号用完以后,一定是正确解。因为1. 左右括号一样多,2. 每个右括号都一定有与之配对的左括号。因此一旦结束就可以加入解集(有时也可能出现结束以后不一定是正确解的情况,这时要多一步判断)。 + +递归函数传入参数: +限制和结束条件中有“用完”和“一样多”字样,因此你需要知道左右括号的数目。 +当然你还需要知道当前局面sublist和解集res。 + +因此,把上面的思路拼起来就是代码: + + if (左右括号都已用完) { + 加入解集,返回 + } + //否则开始试各种选择 + if (还有左括号可以用) { + 加一个左括号,继续递归 + } + if (右括号小于左括号) { + 加一个右括号,继续递归 + } + + + +你帖的那段代码逻辑中加了一条限制:“3. 是否还有右括号剩余。如有才加右括号”。这是合理的。不过对于这道题,如果满足限制1、2时,3一定自动满足,所以可以不判断3。 + +这题其实是最好的backtracking初学练习之一,因为ORT三者都非常简单明显。你不妨按上述思路再梳理一遍,还有问题的话再说。 + + + +以上文字来自 1point3arces的牛人解答 From 9150815512274b0ecaa7cb6e06fb46ada76e52a0 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 8 Jan 2018 14:26:30 -0600 Subject: [PATCH 0281/2496] Update 437._path_sum_iii.md --- 437._path_sum_iii.md | 46 ++++++++++++++++---------------------------- 1 file changed, 17 insertions(+), 29 deletions(-) diff --git a/437._path_sum_iii.md b/437._path_sum_iii.md index 5d738d2b9..ac5c314a6 100644 --- a/437._path_sum_iii.md +++ b/437._path_sum_iii.md @@ -1,4 +1,4 @@ -###437. Path Sum III +### 437. Path Sum III @@ -11,22 +11,10 @@ Easy 思路: -这题一看到,时间复杂度就把我给吓尿了,不是么|||科科 -我的🐟👄的代码 -是有优化,待做 - - - -``` -# Definition for a binary tree node. -# class TreeNode(object): -# def __init__(self, x): -# self.val = x -# self.left = None -# self.right = None +```python class Solution(object): def pathSum(self, root, sum): """ @@ -34,18 +22,18 @@ class Solution(object): :type sum: int :rtype: int """ - # empty - def nodeValue(root, sum): - if not root: return 0 - # one node - if root.val == sum: - return 1 + nodeValue(root.left, 0) + nodeValue(root.right,0) - else: - return nodeValue(root.left, sum - root.val) + nodeValue(root.right, sum - root.val) - - if not root: return 0 - ans = nodeValue(root,sum) - ans += self.pathSum(root.left, sum) - ans += self.pathSum(root.right, sum) - return ans -``` \ No newline at end of file + if not root: + return 0 + res = self.auxPathSum(root, sum) + res += self.pathSum(root.left, sum) + res += self.pathSum(root.right, sum) + return res + def auxPathSum(self, root, sum): + if not root: + return 0 + if sum == root.val: +            # 因为可能有负值, 所以sum为0也会有解, 必须加上 +            return 1 + self.auxPathSum(root.left, 0) + self.auxPathSum(root.right, 0) + else: + return self.auxPathSum(root.left, sum - root.val) + self.auxPathSum(root.right, sum - root.val) +``` From 10fd5cf408df6e41058fb9053a4a90e73a1a4e8a Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 8 Jan 2018 14:29:18 -0600 Subject: [PATCH 0282/2496] Update 459._Repeated_Substring_Pattern.md --- 459._Repeated_Substring_Pattern.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/459._Repeated_Substring_Pattern.md b/459._Repeated_Substring_Pattern.md index 8840c1c31..f32b6eb4b 100644 --- a/459._Repeated_Substring_Pattern.md +++ b/459._Repeated_Substring_Pattern.md @@ -20,7 +20,6 @@ Easy ```python -python class Solution(object): def repeatedSubstringPattern(self, s): """ @@ -30,11 +29,3 @@ class Solution(object): return (s*2)[1:-1].find(s) != -1 ``` - - - -Author: Keqi Huang - -If you like it, please spread your support - -![Support](https://github.com/Lisanaaa/myTODOs/blob/master/WechatIMG17.jpeg) From ebe5fce865212e3d94dd6f866ac3748ca17f2815 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 8 Jan 2018 14:30:49 -0600 Subject: [PATCH 0283/2496] Rename 461. Hamming Distance.md to 461._Hamming Distance.md --- 461. Hamming Distance.md => 461._Hamming Distance.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename 461. Hamming Distance.md => 461._Hamming Distance.md (100%) diff --git a/461. Hamming Distance.md b/461._Hamming Distance.md similarity index 100% rename from 461. Hamming Distance.md rename to 461._Hamming Distance.md From 118f239a536373e57e6f1abcc15246a17d13241e Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 8 Jan 2018 14:34:26 -0600 Subject: [PATCH 0284/2496] Update 461._Hamming Distance.md --- 461._Hamming Distance.md | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/461._Hamming Distance.md b/461._Hamming Distance.md index 1a8e05606..4a8d63d81 100644 --- a/461._Hamming Distance.md +++ b/461._Hamming Distance.md @@ -27,9 +27,22 @@ https://en.wikipedia.org/wiki/Hamming_distance > > -AC代码 + +一行无敌 +```python +class Solution(object): + def hammingDistance(self, x, y): + """ + :type x: int + :type y: int + :rtype: int + """ + return bin(x^y).count('1') ``` +AC代码 + +```python class Solution(object): def hammingDistance(self, x, y): """ @@ -41,8 +54,8 @@ class Solution(object): val = x ^ y while val: - dist += 1 - val &= val - 1 + dist += 1 + val &= val - 1 return dist ``` From cd83c4c46f254076ff906ef043083e8bd133e54c Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 8 Jan 2018 15:08:14 -0600 Subject: [PATCH 0285/2496] Create 477._Total_Hamming_Distance.md --- 477._Total_Hamming_Distance.md | 66 ++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 477._Total_Hamming_Distance.md diff --git a/477._Total_Hamming_Distance.md b/477._Total_Hamming_Distance.md new file mode 100644 index 000000000..817136a0e --- /dev/null +++ b/477._Total_Hamming_Distance.md @@ -0,0 +1,66 @@ +### 477. Total Hamming Distance + + + +题目: + + + +难度: +Medium + +思路: + + +第一想法就是暴力,直接超时 + +``` +class Solution(object): # 此法超时 + def totalHammingDistance(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + res = 0 + for i in range(len(nums)): + for j in range(i+1, len(nums)): + res += bin(nums[i]^nums[j]).count('1') + return res +``` + + +前面的解法是```O(n^2)```所以超时,所以我们想想有没有```O(n)```的解法 +对于所有的数字,我们先从右数第一位开始算,如果一共有```n```个数字,其中```k```个数字的右数第一位是```‘1’```,其他```n-k```个数字的右数第一位是```‘0’```, +所以这一位对最终```res```的贡献就是```k*(n-k)```,这样我们的时间复杂度就是```O(32n)```,也就是```O(N)```了 + +``` +for each “column” or bit position, once you count the number of set bits you can figure out the number of pairs that will contribute to the count using combination logic. + +Consider you have 10 numbers and only one of them is a 1 the rest are zeros. How many (1, 0) pairs can you make? Clearly you can make 9, pair the 1 with each of the other 9 zeros. If you have 2 ones, you can pair each of those with the other 8 zeros giving 2*8 = 16. Keep going and you see that you can pair each 1 with each zero so the number of pairs is just the number of 1’s times the number of 0’s. + +This would be an O(32 * n) solution which is an O(n) solution, no space used. +``` + +AC代码 + +```python +class Solution(object): + def totalHammingDistance(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + # iterate thru "column" or bit position + # Note: you could stop at 10^9 as stated in the problem if you want to optimize + res = 0 + for i in range(32): + mask = 1 << i + count_ones, count_zeros = 0, 0 + for num in nums: + if num & mask != 0: + count_ones += 1 + else: + count_zeros += 1 + res += count_ones * count_zeros + return res +``` From d81ad5e56fc10dff07840ec74866fb9fd98125ad Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 8 Jan 2018 15:09:14 -0600 Subject: [PATCH 0286/2496] Update 477._Total_Hamming_Distance.md --- 477._Total_Hamming_Distance.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/477._Total_Hamming_Distance.md b/477._Total_Hamming_Distance.md index 817136a0e..6a8759daf 100644 --- a/477._Total_Hamming_Distance.md +++ b/477._Total_Hamming_Distance.md @@ -34,9 +34,13 @@ class Solution(object): # 此法超时 所以这一位对最终```res```的贡献就是```k*(n-k)```,这样我们的时间复杂度就是```O(32n)```,也就是```O(N)```了 ``` -for each “column” or bit position, once you count the number of set bits you can figure out the number of pairs that will contribute to the count using combination logic. +for each “column” or bit position, once you count the number of set bits you can figure out the number of pairs +that will contribute to the count using combination logic. -Consider you have 10 numbers and only one of them is a 1 the rest are zeros. How many (1, 0) pairs can you make? Clearly you can make 9, pair the 1 with each of the other 9 zeros. If you have 2 ones, you can pair each of those with the other 8 zeros giving 2*8 = 16. Keep going and you see that you can pair each 1 with each zero so the number of pairs is just the number of 1’s times the number of 0’s. +Consider you have 10 numbers and only one of them is a 1 the rest are zeros. How many (1, 0) pairs can you make? +Clearly you can make 9, pair the 1 with each of the other 9 zeros. If you have 2 ones, +you can pair each of those with the other 8 zeros giving 2*8 = 16. +Keep going and you see that you can pair each 1 with each zero so the number of pairs is just the number of 1’s times the number of 0’s. This would be an O(32 * n) solution which is an O(n) solution, no space used. ``` From 72c41f985b548d571c0d4ef6bcdf0b440cd402a9 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 8 Jan 2018 15:11:23 -0600 Subject: [PATCH 0287/2496] Update 477._Total_Hamming_Distance.md --- 477._Total_Hamming_Distance.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/477._Total_Hamming_Distance.md b/477._Total_Hamming_Distance.md index 6a8759daf..a5d4f6376 100644 --- a/477._Total_Hamming_Distance.md +++ b/477._Total_Hamming_Distance.md @@ -68,3 +68,15 @@ class Solution(object): res += count_ones * count_zeros return res ``` + +上面的代码简化一下就是[stephan老流氓]()的无敌一行了 + +```python +class Solution(object): # 此法超时 + def totalHammingDistance(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + return sum(b.count('0') * b.count('1') for b in zip(*map('{:032b}'.format, nums))) +``` From 1fd44132ade66e6d949ab4f4268c9cdcae7eacc2 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 8 Jan 2018 15:12:41 -0600 Subject: [PATCH 0288/2496] Update 477._Total_Hamming_Distance.md --- 477._Total_Hamming_Distance.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/477._Total_Hamming_Distance.md b/477._Total_Hamming_Distance.md index a5d4f6376..cf5bc54a7 100644 --- a/477._Total_Hamming_Distance.md +++ b/477._Total_Hamming_Distance.md @@ -69,7 +69,7 @@ class Solution(object): return res ``` -上面的代码简化一下就是[stephan老流氓]()的无敌一行了 +上面的代码简化一下就是[stefan大神(老流氓罒ω罒)](https://leetcode.com/problems/total-hamming-distance/discuss/96229)的无敌一行了 ```python class Solution(object): # 此法超时 From e8426f5d3485cac3bc528062fae3cd1dc0d60f52 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 8 Jan 2018 15:20:05 -0600 Subject: [PATCH 0289/2496] Create 463._Island_Perimeter.md --- 463._Island_Perimeter.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 463._Island_Perimeter.md diff --git a/463._Island_Perimeter.md b/463._Island_Perimeter.md new file mode 100644 index 000000000..bedc5f8a1 --- /dev/null +++ b/463._Island_Perimeter.md @@ -0,0 +1,38 @@ +### 463. Island Perimeter + + + +题目: + + + +难度: +Easy + +思路: + + + + +```python +class Solution(object): + def islandPerimeter(self, grid): + """ + :type grid: List[List[int]] + :rtype: int + """ + # 每一个陆地单元格的周长为4,当两单元格上下或者左右相邻时,令周长减2 + h = len(grid) + w = len(grid[0]) if h else 0 + ans = 0 + for x in range(h): + for y in range(w): + if grid[x][y] == 1: + ans += 4 + # 因为x+1还在后面,所以不需要考虑,即只需要考虑左边和上边,因为循环已经出现过该点了 + if x > 0 and grid[x - 1][y]: + ans -= 2 + if y > 0 and grid[x][y - 1]: + ans -= 2 + return ans +``` From 21de3a28c76f226b5337c6db0d95110db8915a18 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 8 Jan 2018 15:41:49 -0600 Subject: [PATCH 0290/2496] Create 476._Number_Complement.md --- 476._Number_Complement.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 476._Number_Complement.md diff --git a/476._Number_Complement.md b/476._Number_Complement.md new file mode 100644 index 000000000..91b253972 --- /dev/null +++ b/476._Number_Complement.md @@ -0,0 +1,28 @@ +### 476. Number Complement + + + +题目: + + + +难度: +Easy + + + + + +```python +class Solution(object): + def findComplement(self, num): + """ + :type num: int + :rtype: int + """ + i = 1 << (len(bin(num)) -2) # 因为bin函数转化成的格式是‘0bXXXX’,头两个‘0b’要减掉去 + return (i - 1) ^ num + # return (i - 1) - num # 这样也可以 +``` + + From 7af8520bd8e4345d705fba4108a449b915708f62 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 8 Jan 2018 15:53:44 -0600 Subject: [PATCH 0291/2496] Create 485._Max_Consecutive_Ones.md --- 485._Max_Consecutive_Ones.md | 40 ++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 485._Max_Consecutive_Ones.md diff --git a/485._Max_Consecutive_Ones.md b/485._Max_Consecutive_Ones.md new file mode 100644 index 000000000..422a70c92 --- /dev/null +++ b/485._Max_Consecutive_Ones.md @@ -0,0 +1,40 @@ +### 485. Max Consecutive Ones + + + +题目: + + + +难度: +Easy + +思路: + + +一行无敌 +```python +class Solution(object): + def findMaxConsecutiveOnes(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + return len(max(''.join(map(str, nums)).split('0'))) +``` + +```python +class Solution(object): + def findMaxConsecutiveOnes(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + res, count = [], 0 + for x in nums: + count = 0 if x == 0 else count + 1 + res.append(count) + return max(res) +``` + + From 537e412d3bc16597f9ea8fe30e4f63f1b0b6227d Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 8 Jan 2018 16:51:52 -0600 Subject: [PATCH 0292/2496] Update 010._regular_expression_matching.md --- 010._regular_expression_matching.md | 42 ++++++++++++++--------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/010._regular_expression_matching.md b/010._regular_expression_matching.md index a2ef0a109..493461b72 100644 --- a/010._regular_expression_matching.md +++ b/010._regular_expression_matching.md @@ -1,4 +1,4 @@ -###010. Regular Expression Matching +### 010. Regular Expression Matching 题目: @@ -17,8 +17,15 @@ Hard 暴力解法居然也能AC? +是这样来分情况看得: -``` +- 如果s[i] = p[j] 或者 p[j]= . : 往前匹配一位 +- 如果p[j] = ' * ', 检查一下,如果这个时候p[j-1] = . 或者p[j-1] = s[i] ,那么就往前匹配,如果这样能匹配过,就return True, 否者我们忽略 ' X* ',这里注意里面的递推关系 +- 再处理一下边界状况: + - s已经匹配完了, 如果此时p还有,那么如果剩下的是 X* 这种可以过,所以检查 + - p匹配完毕,如果s还有那么报错 + +```python class Solution(object): def isMatch(self, s, p): """ @@ -26,37 +33,28 @@ class Solution(object): :type p: str :rtype: bool """ - FRONT = -1 def helper(s, i, p, j): - if(j == FRONT): - return (i == FRONT) - if(i == FRONT): + if j == -1: + return i == -1 + if i == -1: if p[j] != '*': return False - return helper(s,i,p,j-2) - if(p[j] == '*'): - if(p[j-1] == '.' or p[j-1] == s[i]): + return helper(s, i, p, j-2) + if p[j] == '*': + if p[j-1] == '.' or p[j-1] == s[i]: if helper(s, i-1, p, j): return True - return helper(s,i,p,j-2) - if(p[j] == '.' or p[j] == s[i]): - return helper(s,i-1,p,j-1) + return helper(s, i, p, j-2) + if p[j] == '.' or p[j] == s[i]: + return helper(s, i-1, p, j-1) return False return helper(s, len(s)-1, p, len(p)-1) - ``` -是这样来分情况看得: - -- 如果s[i] = p[j] 或者 p[j]= . : 往前匹配一位 -- 如果p[j] = ' * ', 检查一下,如果这个时候p[j-1] = . 或者p[j-1] = s[i] ,那么就往前匹配,如果这样能匹配过,就return True, 否者我们忽略 ' X* ',这里注意里面的递推关系 -- 再处理一下边界状况: - - s已经匹配完了, 如果此时p还有,那么如果剩下的是 X* 这种可以过,所以检查 - - p匹配完毕,如果s还有那么报错 - +---------- dp优化,感觉和edit distance很像。 DP优化待代码化,感觉学DP的一个重点除了递归学好以外,另一点是一定要会画表格。 @@ -138,4 +136,4 @@ class Solution(object): -发现自己喜欢这道题目 \ No newline at end of file +发现自己喜欢这道题目 From 8b48b18253af43471016e6cf9c75fa9e5ea7e351 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 8 Jan 2018 17:20:44 -0600 Subject: [PATCH 0293/2496] Update 010._regular_expression_matching.md --- 010._regular_expression_matching.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/010._regular_expression_matching.md b/010._regular_expression_matching.md index 493461b72..00c76bd2d 100644 --- a/010._regular_expression_matching.md +++ b/010._regular_expression_matching.md @@ -87,7 +87,6 @@ b 3 0 0 0 0 0 1 - p[j-1] != s[i] : dp[i][j] = dp[i][j-2] 匹配0个的状况 - p[j-1] == s[i] or p[i-1] == '.': - dp[i][j] = dp[i-1][j] 匹配多个s[i] - - dp[i][j] = dp[i][j-1] 匹配一个 - dp[i][j] = dp[i][j-2] 匹配0个 AC代码,注意一下,因为上表为了表达方便,用的是1-based string系统,实际写代码的时候我们心里还是清楚这个string还是从0开始的,不过也可以尝试往前面添东西来方便。 @@ -95,7 +94,7 @@ AC代码,注意一下,因为上表为了表达方便,用的是1-based stri AC代码 -``` +```python class Solution(object): def isMatch(self, s, p): """ @@ -119,13 +118,12 @@ class Solution(object): if p[j-2] != s[i-1] and p[j-2] != '.': dp[i][j] = dp[i][j-2] elif p[j-2] == s[i-1] or p[j-2] == '.': - dp[i][j] = dp[i-1][j] or dp[i][j-1] or dp[i][j-2] + dp[i][j] = dp[i-1][j] or dp[i][j-2] elif s[i-1] == p[j-1] or p[j-1] == '.': dp[i][j] = dp[i-1][j-1] return dp[m][n] == 1 - ``` @@ -136,4 +134,3 @@ class Solution(object): -发现自己喜欢这道题目 From c7342f41aaa83cd793cacc3ae46178cfd51b3e7a Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 8 Jan 2018 17:21:36 -0600 Subject: [PATCH 0294/2496] Update 010._regular_expression_matching.md --- 010._regular_expression_matching.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/010._regular_expression_matching.md b/010._regular_expression_matching.md index 00c76bd2d..00bd1e4ae 100644 --- a/010._regular_expression_matching.md +++ b/010._regular_expression_matching.md @@ -131,6 +131,6 @@ class Solution(object): 参考: - +[动态规划](https://hk029.gitbooks.io/leetbook/content/动态规划/010.%20Regular%20Expression%20Matching/010.%20Regular%20Expression%20Matching.html) From 9eef8dc8d30b69b4c08e8c047eafe1314cf1407c Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 8 Jan 2018 17:23:11 -0600 Subject: [PATCH 0295/2496] Update 010._regular_expression_matching.md --- 010._regular_expression_matching.md | 93 +++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/010._regular_expression_matching.md b/010._regular_expression_matching.md index 00bd1e4ae..0add6cf1a 100644 --- a/010._regular_expression_matching.md +++ b/010._regular_expression_matching.md @@ -126,7 +126,100 @@ class Solution(object): return dp[m][n] == 1 ``` +写个测试案例 +```python +import unittest +class Solution(object): + def isMatch(self, s, p): + """ + :type s: str + :type p: str + :rtype: bool + """ + m, n = len(s), len(p) + dp = [ [0 for i in range(n+1)] for j in range(m+1)] + + dp[0][0] = 1 + # init the first line + for i in range(2,n+1): + if p[i-1] == '*': + dp[0][i] = dp[0][i-2] + + for i in range(1,m+1): + for j in range(1,n+1): + if p[j-1] == '*': + if p[j-2] != s[i-1] and p[j-2] != '.': + dp[i][j] = dp[i][j-2] + elif p[j-2] == s[i-1] or p[j-2] == '.': + dp[i][j] = dp[i-1][j] or dp[i][j-2] + + elif s[i-1] == p[j-1] or p[j-1] == '.': + dp[i][j] = dp[i-1][j-1] + + return dp[m][n] == 1 + + +class TestSolution(unittest.TestCase): + def test_none_0(self): + s = "" + p = "" + self.assertTrue(Solution().isMatch(s, p)) + + def test_none_1(self): + s = "" + p = "a" + self.assertFalse(Solution().isMatch(s, p)) + + def test_no_symbol_equal(self): + s = "abcd" + p = "abcd" + self.assertTrue(Solution().isMatch(s, p)) + + def test_no_symbol_not_equal_0(self): + s = "abcd" + p = "efgh" + self.assertFalse(Solution().isMatch(s, p)) + + def test_no_symbol_not_equal_1(self): + s = "ab" + p = "abb" + self.assertFalse(Solution().isMatch(s, p)) + + def test_symbol_0(self): + s = "" + p = "a*" + self.assertTrue(Solution().isMatch(s, p)) + + def test_symbol_1(self): + s = "a" + p = "ab*" + self.assertTrue(Solution().isMatch(s, p)) + + def test_symbol_2(self): + # E.g. + # s a b b + # p 1 0 0 0 + # a 0 1 0 0 + # b 0 0 1 0 + # * 0 1 1 1 + s = "abb" + p = "ab*" + self.assertTrue(Solution().isMatch(s, p)) + + +if __name__ == "__main__": + unittest.main() + + + +输出: +........ +---------------------------------------------------------------------- +Ran 8 tests in 0.001s + +OK +``` 参考: From 7df95c154ca458a898d76a40a5871633a633be72 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 8 Jan 2018 17:23:52 -0600 Subject: [PATCH 0296/2496] Update 010._regular_expression_matching.md --- 010._regular_expression_matching.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/010._regular_expression_matching.md b/010._regular_expression_matching.md index 0add6cf1a..f3d51b109 100644 --- a/010._regular_expression_matching.md +++ b/010._regular_expression_matching.md @@ -215,7 +215,7 @@ if __name__ == "__main__": 输出: ........ ----------------------------------------------------------------------- + Ran 8 tests in 0.001s OK From 75a9d092db8f5833a60f902e25c384160256a644 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 9 Jan 2018 09:58:24 -0600 Subject: [PATCH 0297/2496] Update 017._letter_combinations_of_a_phone_number.md --- 017._letter_combinations_of_a_phone_number.md | 34 ++++++++----------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/017._letter_combinations_of_a_phone_number.md b/017._letter_combinations_of_a_phone_number.md index 5f61a7e96..e951ad85d 100644 --- a/017._letter_combinations_of_a_phone_number.md +++ b/017._letter_combinations_of_a_phone_number.md @@ -1,4 +1,4 @@ -###17. Letter Combinations of a Phone Number +### 17. Letter Combinations of a Phone Number 题目: @@ -18,38 +18,34 @@ Medium -``` +```python class Solution(object): def letterCombinations(self, digits): """ :type digits: str :rtype: List[str] """ - if digits == "": + if digits == '': return [] - self.res = [] - self.singleResult('',digits) + self.singleResult('', digits) return self.res - + def singleResult(self, s, digits): if len(digits) == 0: self.res.append(s) else: mapx = {'2':['a','b','c'], - '3':['d','e','f'], - '4':['g','h','i'], - '5':['j','k','l'], - '6':['m','n','o'], - '7':['p','q','r','s'], - '8':['t','u','v'], - '9':['w','x','y','z']} - - curDigit = digits[0] - for alpha in mapx[curDigit]: - self.singleResult(s + alpha, digits[1:]) - - + '3':['d','e','f'], + '4':['g','h','i'], + '5':['j','k','l'], + '6':['m','n','o'], + '7':['p','q','r','s'], + '8':['t','u','v'], + '9':['w','x','y','z']} + cur_digit = digits[0] + for c in mapx[cur_digit]: + self.singleResult(s+c, digits[1:]) ``` From 3ad0c6aa29a9e368aa5ad8de9dc22bcf064042da Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 9 Jan 2018 10:04:51 -0600 Subject: [PATCH 0298/2496] Update 280. Wiggle Sort.md --- 280. Wiggle Sort.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/280. Wiggle Sort.md b/280. Wiggle Sort.md index 4a239c466..636493011 100644 --- a/280. Wiggle Sort.md +++ b/280. Wiggle Sort.md @@ -62,7 +62,7 @@ class Solution(object): AC 代码 -``` +```python class Solution(object): def wiggleSort(self, nums): """ From 015eaae40e439e1dcc9cf2360bd9a243d30fcc73 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 9 Jan 2018 10:14:49 -0600 Subject: [PATCH 0299/2496] Update 280. Wiggle Sort.md --- 280. Wiggle Sort.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/280. Wiggle Sort.md b/280. Wiggle Sort.md index 636493011..38cbbee3d 100644 --- a/280. Wiggle Sort.md +++ b/280. Wiggle Sort.md @@ -29,8 +29,8 @@ ``` class Solution(object): - def wiggleSort(self, nums): - """ +    def wiggleSort(self, nums): # 此法超时 +        """ :type nums: List[int] :rtype: void Do not return anything, modify nums in-place instead. """ From 5d4a9b3ac52e22ef6863eb584808afa86c964ab0 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 9 Jan 2018 10:18:48 -0600 Subject: [PATCH 0300/2496] Update 280. Wiggle Sort.md --- 280. Wiggle Sort.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/280. Wiggle Sort.md b/280. Wiggle Sort.md index 38cbbee3d..3188ca405 100644 --- a/280. Wiggle Sort.md +++ b/280. Wiggle Sort.md @@ -69,9 +69,9 @@ class Solution(object): :type nums: List[int] :rtype: void Do not return anything, modify nums in-place instead. """ - for i in xrange(1,len(nums)): - if ((i % 2) and nums[i] < nums[i-1]) or ( not (i%2) and nums[i] > nums[i-1]): - nums[i-1],nums[i] = nums[i],nums[i-1] + for i in xrange(1, len(nums)): + if ((i % 2) and nums[i] < nums[i-1]) or ((not i % 2) and nums[i] > nums[i-1]): + nums[i], nums[i-1] = nums[i-1], nums[i] ``` From 6ebf08c2d74e9e50b485781dddbe67b72462ef7a Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 9 Jan 2018 11:43:30 -0600 Subject: [PATCH 0301/2496] Rename 280. Wiggle Sort.md to 280._Wiggle_Sort.md --- 280. Wiggle Sort.md => 280._Wiggle_Sort.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename 280. Wiggle Sort.md => 280._Wiggle_Sort.md (100%) diff --git a/280. Wiggle Sort.md b/280._Wiggle_Sort.md similarity index 100% rename from 280. Wiggle Sort.md rename to 280._Wiggle_Sort.md From c1607d32bd2c7eda3d70702e95f611adf5d300eb Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 9 Jan 2018 11:48:23 -0600 Subject: [PATCH 0302/2496] Create 324._Wiggle_Sort_II.md --- 324._Wiggle_Sort_II.md | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 324._Wiggle_Sort_II.md diff --git a/324._Wiggle_Sort_II.md b/324._Wiggle_Sort_II.md new file mode 100644 index 000000000..5ebc2594b --- /dev/null +++ b/324._Wiggle_Sort_II.md @@ -0,0 +1,42 @@ +### 324. Wiggle Sort II + + + +题目: + + + +难度: +Medium + +思路: + +首先这道题和[Wiggle Sort](https://github.com/Lisanaaa/thinking_in_lc/blob/master/280._Wiggle_Sort.md)要求不一样,不能有等于, +所以如果碰到一串```‘1,1,1,1,1,1’```,当调换顺序时候还是不会满足。 + +因此我们用新方法,首先将原数组排序,然后大的那一半数字降序插在奇数```index```上,小的那一半数字降序插在偶数```index```上 + + +```python +class Solution(object): + def wiggleSort(self, nums): + """ + :type nums: List[int] + :rtype: void Do not return anything, modify nums in-place instead. + """ + nums.sort() + half = len(nums[::2]) + nums[::2], nums[1::2] = nums[:half][::-1], nums[half:][::-1] +``` + + +### Follow up +O(n) time, O(1) space + +思路: +首先想到的是将我们上面的排序方法用堆排序实现即可,建堆O(n),调整堆O(lgN) + + +```python + +``` From d592d995995bc2ac693a1fd45105d33297b78f0a Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 9 Jan 2018 12:17:20 -0600 Subject: [PATCH 0303/2496] Update 155._min_stack.md --- 155._min_stack.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/155._min_stack.md b/155._min_stack.md index c663119df..fac02c17e 100644 --- a/155._min_stack.md +++ b/155._min_stack.md @@ -1,4 +1,4 @@ -###155. Min Stack +### 155. Min Stack 题目: @@ -14,7 +14,7 @@ Easy 用lst和系统的heapq,提升一下,用deque和heapq,这样也没太大提升 -``` +```python from heapq import * class MinStack(object): @@ -122,7 +122,7 @@ Auxiliary Stack 这样无论是用deque还是本身的lst都有一些提升 -``` +```python from collections import deque class MinStack(object): @@ -166,4 +166,4 @@ class MinStack(object): :rtype: int """ return self.aux[-1] -``` \ No newline at end of file +``` From 88bbfe82be4e4b313003b42b1b67a2f6df8c395b Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 9 Jan 2018 12:26:34 -0600 Subject: [PATCH 0304/2496] Update and rename 231. Power of Two.md to 231. _Power_of_Two.md --- ... Power of Two.md => 231. _Power_of_Two.md | 30 ++++++++----------- 1 file changed, 13 insertions(+), 17 deletions(-) rename 231. Power of Two.md => 231. _Power_of_Two.md (77%) diff --git a/231. Power of Two.md b/231. _Power_of_Two.md similarity index 77% rename from 231. Power of Two.md rename to 231. _Power_of_Two.md index 7850b2947..084414a8e 100644 --- a/231. Power of Two.md +++ b/231. _Power_of_Two.md @@ -18,14 +18,14 @@ Easy power of two 那是这个数字的binary 表示一定只有一个1 -套用以前的代码数1的位数的 +套用以前的代码,数1的位数的 这样会超时 ``` class Solution(object): - def isPowerOfTwo(self, n): - """ +    def isPowerOfTwo(self, n): # 此法超时 +        """ :type n: int :rtype: bool """ @@ -42,22 +42,21 @@ class Solution(object): -``` +```python class Solution(object): def isPowerOfTwo(self, n): """ :type n: int :rtype: bool """ - if n <= 0 : - return False + if n <= 0: + return False if n == 1: - return True - if n%2 == 0: - return self.isPowerOfTwo(n/2) - else: - return False - + return True + if n % 2 == 0: + return self.isPowerOfTwo(n/2) + return False + ``` @@ -76,17 +75,14 @@ class Solution(object): 注意特殊case 0的处理 -``` +```python class Solution(object): def isPowerOfTwo(self, n): """ :type n: int :rtype: bool """ - if n == 0 :return False - else: - res = n & (n-1) - return res == 0 + return n & (n-1) == 0 if n != 0 else False ``` From 017d552d1850743db978beba653137ba2576c47d Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 9 Jan 2018 12:29:40 -0600 Subject: [PATCH 0305/2496] Update 191._number_of_1_bits.md --- 191._number_of_1_bits.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/191._number_of_1_bits.md b/191._number_of_1_bits.md index ac09a2c84..4700c242f 100644 --- a/191._number_of_1_bits.md +++ b/191._number_of_1_bits.md @@ -12,18 +12,14 @@ Easy 转成二进制,数1的个数 -``` +```python class Solution(object): def hammingWeight(self, n): """ :type n: int :rtype: int """ - count = 0 - while n > 0: - count += n % 2 - n = n//2 - return count + return bin(n).count('1') ``` @@ -54,7 +50,7 @@ AC代码 -``` +```python class Solution(object): def hammingWeight(self, n): """ From e4d80cc992f07f96505bfea75de2fb8942bec3f2 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 9 Jan 2018 12:29:48 -0600 Subject: [PATCH 0306/2496] Update 191._number_of_1_bits.md --- 191._number_of_1_bits.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/191._number_of_1_bits.md b/191._number_of_1_bits.md index 4700c242f..dcba66c7b 100644 --- a/191._number_of_1_bits.md +++ b/191._number_of_1_bits.md @@ -1,4 +1,4 @@ -###191. Number of 1 Bits +### 191. Number of 1 Bits 题目: From b9c086be53d3ac00468f83d30636ba05aa10afc9 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 9 Jan 2018 12:30:47 -0600 Subject: [PATCH 0307/2496] Update 231. _Power_of_Two.md --- 231. _Power_of_Two.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/231. _Power_of_Two.md b/231. _Power_of_Two.md index 084414a8e..c90024d2e 100644 --- a/231. _Power_of_Two.md +++ b/231. _Power_of_Two.md @@ -18,7 +18,7 @@ Easy power of two 那是这个数字的binary 表示一定只有一个1 -套用以前的代码,数1的位数的 +套用以前的代码[leetcode191](https://github.com/Lisanaaa/thinking_in_lc/blob/master/191._number_of_1_bits.md) 这样会超时 @@ -31,7 +31,7 @@ class Solution(object): """ cnt = 0 while n != 0: - n &= n -1 + n &= n - 1 cnt += 1 return cnt == 1 ``` From c696c8af8f363a4ec4896a0f4afc5a037315f28d Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 9 Jan 2018 12:36:54 -0600 Subject: [PATCH 0308/2496] Update 326._power_of_three.md --- 326._power_of_three.md | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/326._power_of_three.md b/326._power_of_three.md index 87a6ab083..9cd035d9c 100644 --- a/326._power_of_three.md +++ b/326._power_of_three.md @@ -1,4 +1,4 @@ -###326. Power of Three +### 326. Power of Three 题目: @@ -11,7 +11,7 @@ 直接就上的递归 -``` +```python class Solution(object): def isPowerOfThree(self,n): """ @@ -22,10 +22,9 @@ class Solution(object): return False if n == 1: return True - if n%3 == 0: + if n % 3 == 0: return self.isPowerOfThree(n/3) - else: - return False + return False ``` @@ -36,15 +35,14 @@ class Solution(object): 只用检查是否能被这个数整除 -``` +```python class Solution(object): def isPowerOfThree(self, n): """ :type n: int :rtype: bool """ - return n > 0 and 1162261467 % n == 0 + return n > 0 and pow(3, 19) % n == 0 + ``` - -结果跑出来这个running time 更慢||| From d2dfb70e3a4eff848b98af7cb4ddb213b27f18ce Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 9 Jan 2018 12:38:24 -0600 Subject: [PATCH 0309/2496] Update and rename 342. Power of Four.md to 342._Power_of_Four.md --- 342. Power of Four.md => 342._Power_of_Four.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) rename 342. Power of Four.md => 342._Power_of_Four.md (91%) diff --git a/342. Power of Four.md b/342._Power_of_Four.md similarity index 91% rename from 342. Power of Four.md rename to 342._Power_of_Four.md index dce04d62a..c895a7c24 100644 --- a/342. Power of Four.md +++ b/342._Power_of_Four.md @@ -11,7 +11,7 @@ 继续照抄power of three -``` +```python class Solution(object): def isPowerOfFour(self, num): """ @@ -24,8 +24,7 @@ class Solution(object): return True if num % 4 == 0: return self.isPowerOfFour(num/4) - else: - return False + return False ``` From 22764ec4fa4da17a74b66d1242558ac6ad615c29 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 9 Jan 2018 12:45:34 -0600 Subject: [PATCH 0310/2496] Update 387._first_unique_character_in_a_string.md --- 387._first_unique_character_in_a_string.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/387._first_unique_character_in_a_string.md b/387._first_unique_character_in_a_string.md index db3256c39..dfbb89ae1 100644 --- a/387._first_unique_character_in_a_string.md +++ b/387._first_unique_character_in_a_string.md @@ -1,4 +1,4 @@ -###387. First Unique Character in a String +### 387. First Unique Character in a String 题目: @@ -20,14 +20,13 @@ Python作弊法 -``` +```python class Solution(object): def firstUniqChar(self, s): """ :type s: str :rtype: int """ - import collections d = collections.Counter(s) for x,c in enumerate(s): if d[c] == 1: @@ -40,7 +39,7 @@ class Solution(object): 利用问题的特性,因为只有可能是小写字母,所以可以用一个长度为26的array, 先数一遍char的数量,然后enumerate从左往右又来 -``` +```python class Solution(object): def firstUniqChar(self, s): """ From e43baa60595fff37cc9b17e090162f583639cac9 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Tue, 9 Jan 2018 12:59:49 -0600 Subject: [PATCH 0311/2496] Create 374._Guess_Number_Higher_or_Lower.md --- 374._Guess_Number_Higher_or_Lower.md | 34 ++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 374._Guess_Number_Higher_or_Lower.md diff --git a/374._Guess_Number_Higher_or_Lower.md b/374._Guess_Number_Higher_or_Lower.md new file mode 100644 index 000000000..d7d3072f2 --- /dev/null +++ b/374._Guess_Number_Higher_or_Lower.md @@ -0,0 +1,34 @@ +### 374. Guess Number Higher or Lower + +题目: + + + +难度: + +Easy + + +思路 + +二分 + +```python +class Solution(object): + def guessNumber(self, n): + """ + :type n: int + :rtype: int + """ + l, r = 1, n + while l <= r: + mid = l + ((r - l) >> 2) + if guess(mid) == 1: + l = mid + 1 + elif guess(mid) == -1: + r = mid - 1 + else: + return mid +``` + + From 23bd498843b48e9b00d75cafc614b500e276f25a Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 10 Jan 2018 12:04:56 -0600 Subject: [PATCH 0312/2496] Create 448._Find_All_Numbers_Disappeared_in_an_Array.md --- ...ind_All_Numbers_Disappeared_in_an_Array.md | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 448._Find_All_Numbers_Disappeared_in_an_Array.md diff --git a/448._Find_All_Numbers_Disappeared_in_an_Array.md b/448._Find_All_Numbers_Disappeared_in_an_Array.md new file mode 100644 index 000000000..b03105e6b --- /dev/null +++ b/448._Find_All_Numbers_Disappeared_in_an_Array.md @@ -0,0 +1,25 @@ +### 448. Find All Numbers Disappeared in an Array + +题目: + + + +难度: + +Easy + + + + + +```python +class Solution(object): + def findDisappearedNumbers(self, nums): + """ + :type nums: List[int] + :rtype: List[int] + """ + return list(set(range(1, len(nums)+1)) - set(nums)) +``` + + From 7f4d7c9f6ff6b90f1ad958ba9109637770088e70 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 10 Jan 2018 13:06:32 -0600 Subject: [PATCH 0313/2496] Create 657._Judge_Route_Circle.md --- 657._Judge_Route_Circle.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 657._Judge_Route_Circle.md diff --git a/657._Judge_Route_Circle.md b/657._Judge_Route_Circle.md new file mode 100644 index 000000000..12827f576 --- /dev/null +++ b/657._Judge_Route_Circle.md @@ -0,0 +1,23 @@ +### 657. Judge Route Circle +题目: + + + +难度: + +Easy + + + + +```python +class Solution(object): + def judgeCircle(self, moves): + """ + :type moves: str + :rtype: bool + """ + return moves.count('D') == moves.count('U') and moves.count('R') == moves.count('L') +``` + + From ebb48450ed3aced88e2dac341d2d08199cf73e7e Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 10 Jan 2018 14:37:29 -0600 Subject: [PATCH 0314/2496] Update 050._pow(x,_n).md --- 050._pow(x,_n).md | 44 ++++++++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/050._pow(x,_n).md b/050._pow(x,_n).md index d7a2d0e31..697863e2f 100644 --- a/050._pow(x,_n).md +++ b/050._pow(x,_n).md @@ -1,4 +1,4 @@ -###50. Pow(x, n) +### 50. Pow(x, n) 题目: @@ -9,10 +9,9 @@ Medium -幼时的我写的代码 🔽 +Recursive - -``` +```python class Solution(object): def myPow(self, x, n): """ @@ -20,17 +19,30 @@ class Solution(object): :type n: int :rtype: float """ - def myPosPow(x, n): - if n == 0 : - return 1 - v = myPosPow(x, n / 2) - if n % 2 == 0: - return v * v - else: - return x * v * v - - if n < 0 : - return 1 / myPosPow(x, -n) + if n == 0: + return 1 + if n < 0: + return 1 / self.myPow(x, -n) + if n % 2 == 0: + return self.myPow(x*x, n/2) else: - return myPosPow(x, n) + return x * self.myPow(x*x, n/2) + +``` +iterative + + +```python +class Solution: + def myPow(self, x, n): + if n < 0: + x = 1 / x + n = -n + pow = 1 + while n: + if n & 1: + pow *= x + x *= x + n >>= 1 + return pow ``` From 67d5a43254cf3831d332c2d32e529b8e8d335f23 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 10 Jan 2018 15:44:24 -0600 Subject: [PATCH 0315/2496] Create 56._Merge_Intervals.md --- 56._Merge_Intervals.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 56._Merge_Intervals.md diff --git a/56._Merge_Intervals.md b/56._Merge_Intervals.md new file mode 100644 index 000000000..86c83405f --- /dev/null +++ b/56._Merge_Intervals.md @@ -0,0 +1,31 @@ +### 56. Merge Intervals + +题目: + + + +难度: + +Medium + + +Just go through the intervals sorted by start coordinate and +either combine the current interval with the previous one if they overlap, or add it to the output by itself if they don’t. + +```python +class Solution(object): + def twoSum(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[int] + """ + lookup = {} + for i, num in enumerate(nums): + if target - num in lookup: + return [lookup[target - num],i] + lookup[num] = i + return [] +``` + + From fbdffb1fb1712c34bc227544ed123dd0b1d766da Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 10 Jan 2018 15:44:43 -0600 Subject: [PATCH 0316/2496] Rename 56._Merge_Intervals.md to 056._Merge_Intervals.md --- 56._Merge_Intervals.md => 056._Merge_Intervals.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename 56._Merge_Intervals.md => 056._Merge_Intervals.md (100%) diff --git a/56._Merge_Intervals.md b/056._Merge_Intervals.md similarity index 100% rename from 56._Merge_Intervals.md rename to 056._Merge_Intervals.md From 6f271cf9ddc34e73bfc025c88e488fb0df9eeac2 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 10 Jan 2018 15:45:22 -0600 Subject: [PATCH 0317/2496] Update 056._Merge_Intervals.md --- 056._Merge_Intervals.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/056._Merge_Intervals.md b/056._Merge_Intervals.md index 86c83405f..1f5ab7aa6 100644 --- a/056._Merge_Intervals.md +++ b/056._Merge_Intervals.md @@ -14,18 +14,18 @@ either combine the current interval with the previous one if they overlap, or ad ```python class Solution(object): - def twoSum(self, nums, target): + def merge(self, intervals): """ - :type nums: List[int] - :type target: int - :rtype: List[int] + :type intervals: List[Interval] + :rtype: List[Interval] """ - lookup = {} - for i, num in enumerate(nums): - if target - num in lookup: - return [lookup[target - num],i] - lookup[num] = i - return [] + res = [] + for i in sorted(intervals, key = lambda i: i.start): + if res and i.start <= res[-1].end: + res[-1].end = max(i.end, res[-1].end) + else: + res.append(i) + return res ``` From 202c89e66b78f941b05794d1fceaa2b396e86491 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 10 Jan 2018 16:51:54 -0600 Subject: [PATCH 0318/2496] =?UTF-8?q?Update=20=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\346\200\273\347\273\223.md" | 97 +++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git "a/\346\200\273\347\273\223.md" "b/\346\200\273\347\273\223.md" index 6cbed571c..99fcba752 100644 --- "a/\346\200\273\347\273\223.md" +++ "b/\346\200\273\347\273\223.md" @@ -21,3 +21,100 @@ In general, try to see if for a problem, the solution doesn’t depend on a lot # 4 [Counter.elements()](https://docs.python.org/2/library/collections.html) + +# 5 +测试案例写法 + +```python +import unittest +class Solution(object): + def isMatch(self, s, p): + """ + :type s: str + :type p: str + :rtype: bool + """ + m, n = len(s), len(p) + dp = [ [0 for i in range(n+1)] for j in range(m+1)] + + dp[0][0] = 1 + + # init the first line + for i in range(2,n+1): + if p[i-1] == '*': + dp[0][i] = dp[0][i-2] + + for i in range(1,m+1): + for j in range(1,n+1): + if p[j-1] == '*': + if p[j-2] != s[i-1] and p[j-2] != '.': + dp[i][j] = dp[i][j-2] + elif p[j-2] == s[i-1] or p[j-2] == '.': + dp[i][j] = dp[i-1][j] or dp[i][j-2] + + elif s[i-1] == p[j-1] or p[j-1] == '.': + dp[i][j] = dp[i-1][j-1] + + return dp[m][n] == 1 + + +class TestSolution(unittest.TestCase): + def test_none_0(self): + s = "" + p = "" + self.assertTrue(Solution().isMatch(s, p)) + + def test_none_1(self): + s = "" + p = "a" + self.assertFalse(Solution().isMatch(s, p)) + + def test_no_symbol_equal(self): + s = "abcd" + p = "abcd" + self.assertTrue(Solution().isMatch(s, p)) + + def test_no_symbol_not_equal_0(self): + s = "abcd" + p = "efgh" + self.assertFalse(Solution().isMatch(s, p)) + + def test_no_symbol_not_equal_1(self): + s = "ab" + p = "abb" + self.assertFalse(Solution().isMatch(s, p)) + + def test_symbol_0(self): + s = "" + p = "a*" + self.assertTrue(Solution().isMatch(s, p)) + + def test_symbol_1(self): + s = "a" + p = "ab*" + self.assertTrue(Solution().isMatch(s, p)) + + def test_symbol_2(self): + # E.g. + # s a b b + # p 1 0 0 0 + # a 0 1 0 0 + # b 0 0 1 0 + # * 0 1 1 1 + s = "abb" + p = "ab*" + self.assertTrue(Solution().isMatch(s, p)) + + +if __name__ == "__main__": + unittest.main() + + + +输出: +........ + +Ran 8 tests in 0.001s + +OK +``` From 78076a85a82ce46ec51d877239e0913925d6cb16 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 10 Jan 2018 17:09:35 -0600 Subject: [PATCH 0319/2496] Update 031._next_permutation.md --- 031._next_permutation.md | 82 +++++++++++++++++++++++++++++++--------- 1 file changed, 64 insertions(+), 18 deletions(-) diff --git a/031._next_permutation.md b/031._next_permutation.md index 7d33a3470..35c92949f 100644 --- a/031._next_permutation.md +++ b/031._next_permutation.md @@ -1,5 +1,5 @@ -###31. Next Permutation +### 31. Next Permutation 题目: @@ -14,7 +14,55 @@ Medium +首先,关于什么是全排列不做解释。如果一个排列为A,下一个排列为A_NEXT,那么A_NEXT一定与A有尽可能长的公共前缀。 +看具体例子,一个排列为124653,如何找到它的下一个排列,因为下一个排列一定与124653有尽可能长的前缀,所以,脑洞大开一下,从后面往前看这个序列,如果后面的若干个数字有下一个排列,问题就得到了解决。 + +第一步:找最后面1个数字的下一个全排列。 + +124653,显然最后1个数字3不具有下一个全排列。 + +第二步:找最后面2个数字的下一个全排列。 + +124653,显然最后2个数字53不具有下一个全排列。 + +第三步:找最后面3个数字的下一个全排列。 + +124653,显然最后3个数字653不具有下一个全排列。 + + +------插曲:到这里相信大家已经看出来,如果一个序列是递减的,那么它不具有下一个排列。 + + +第四步:找最后面4个数字的下一个全排列。 + +124653,我们发现显然最后4个数字4653具有下一个全排列。因为它不是递减的,例如6453,5643这些排列都在4653的后面。 + + +我们总结上面的操作,并总结出重复上面操作的两种终止情况: + +1:从后向前比较相邻的两个元素,直到前一个元素小于后一个元素,停止 + +2:如果已经没有了前一个元素,则说明这个排列是递减的,所以这个排列是没有下一个排列的。 + + +124653这个排列终止情况是上面介绍的第一种,从后向前比较相邻的2个元素,遇到4<6的情况停止。 + +并且我们可以知道: + +1:124653和它的下一个排列的公共前缀为12(因为4653存在下一个排列,所以前面的数字12保持不变) + +2:4后面的元素是递减的(上面介绍的终止条件是前一个元素小于后一个元素,这里是4<6) + + +现在,我们开始考虑如何找到4653的下个排列,首先明确4后面的几个数字中至少有一个大于4. + +4肯定要和653这3个数字中大于4的数字中(6,5)的某一个进行交换。这里就是4要和6,5中的某一个交换,很明显要和5交换,如果找到这样的元素呢,因为我们知道4后面的元素是递减的,所以在653中从后面往前查找,找到第一个大于4的数字,这就是需要和4进行交换的数字。这里我们找到了5,交换之后得到的临时序列为5643.,交换后得到的643也是一个递减序列。 + + +所以得到的4653的下一个临时序列为5643,但是既然前面数字变大了(4653--->5643),后面的自然要变为升序才行,变换5643得到5346. + +所以124653的下一个序列为125346. 看一个permutation,比如 @@ -29,29 +77,27 @@ Medium AC 代码 -``` +```python class Solution(object): def nextPermutation(self, nums): """ :type nums: List[int] :rtype: void Do not return anything, modify nums in-place instead. """ - m, n = 0, 0 - for i in range(len(nums) - 2, 0 , -1): - if nums[i] < nums[i+1]: - m = i - break - - for i in range(len(nums) - 1, 0 , -1): - if nums[i] > nums[m]: - n = i - break - - if m < n : - nums[m], nums[n] = nums[n], nums[m] - nums[m+1:] = nums[len(nums):m:-1] - else: - nums = nums.reverse() + if len(nums) <= 1: + return + idx = 0 + for i in range(len(nums)-1, 0, -1): + if nums[i] > nums[i-1]: # find first number which is smaller than it's after number + idx = i + break + if idx != 0: # if the number exist,which means that the nums not like{5,4,3,2,1} + for i in range(len(nums)-1, 0, -1): + if nums[i] > nums[idx-1]: + nums[i], nums[idx-1] = nums[idx-1], nums[i] + break + + nums[idx:] = nums[idx:][::-1] ``` From 29aa98110497f6d43d065106a4905cb209301aa3 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 10 Jan 2018 17:17:50 -0600 Subject: [PATCH 0320/2496] Update 074._search_a_2d_matrix.md --- 074._search_a_2d_matrix.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/074._search_a_2d_matrix.md b/074._search_a_2d_matrix.md index bef2e7ffb..ef80c1db5 100644 --- a/074._search_a_2d_matrix.md +++ b/074._search_a_2d_matrix.md @@ -1,11 +1,11 @@ -###74. Search a 2D Matrix +### 74. Search a 2D Matrix 题目: 难度: -Easy +Medium @@ -48,4 +48,4 @@ class Solution(object): -``` \ No newline at end of file +``` From a8aa911e36c3097065bee5ca2ce122da2aefa71b Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 10 Jan 2018 17:21:12 -0600 Subject: [PATCH 0321/2496] Update 074._search_a_2d_matrix.md --- 074._search_a_2d_matrix.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/074._search_a_2d_matrix.md b/074._search_a_2d_matrix.md index ef80c1db5..aaf420076 100644 --- a/074._search_a_2d_matrix.md +++ b/074._search_a_2d_matrix.md @@ -8,9 +8,11 @@ Medium +思路: +想过将```2D matrix```看成一个大```sorted list```,但是后面觉得不行 +原因如下:```There are two main reasons why treating the matrix as a sorted array is a bad idea, considering that it doesn’t bring any improvement on time complexity : 1. as zhongjp058 mentioned, m*n may cause overflow; 2. it uses multiple expensive operations such as / and %``` - -二分Search +因此二分Search,``` binary search by row first, then binary search by column.``` ``` From 17249c4be10e5dc212a76c9ca0cc1cbc02648cea Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 10 Jan 2018 17:22:10 -0600 Subject: [PATCH 0322/2496] Update 074._search_a_2d_matrix.md --- 074._search_a_2d_matrix.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/074._search_a_2d_matrix.md b/074._search_a_2d_matrix.md index aaf420076..868e7e938 100644 --- a/074._search_a_2d_matrix.md +++ b/074._search_a_2d_matrix.md @@ -10,7 +10,10 @@ Medium 思路: 想过将```2D matrix```看成一个大```sorted list```,但是后面觉得不行 -原因如下:```There are two main reasons why treating the matrix as a sorted array is a bad idea, considering that it doesn’t bring any improvement on time complexity : 1. as zhongjp058 mentioned, m*n may cause overflow; 2. it uses multiple expensive operations such as / and %``` + +原因如下: +1. m * n may overflow for large m and n; +2. it will use multiple expensive operations such as / and %``` 因此二分Search,``` binary search by row first, then binary search by column.``` From fc4aca3c3e582845ee444ce0194b2cb39c5e11fb Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 10 Jan 2018 17:22:25 -0600 Subject: [PATCH 0323/2496] Update 074._search_a_2d_matrix.md --- 074._search_a_2d_matrix.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/074._search_a_2d_matrix.md b/074._search_a_2d_matrix.md index 868e7e938..780a49cfb 100644 --- a/074._search_a_2d_matrix.md +++ b/074._search_a_2d_matrix.md @@ -13,7 +13,7 @@ Medium 原因如下: 1. m * n may overflow for large m and n; -2. it will use multiple expensive operations such as / and %``` +2. it will use multiple expensive operations such as / and % 因此二分Search,``` binary search by row first, then binary search by column.``` From 434ec6b1202aed4b3c5bcb2395d5da2ef0295312 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Wed, 10 Jan 2018 17:55:41 -0600 Subject: [PATCH 0324/2496] Update 074._search_a_2d_matrix.md --- 074._search_a_2d_matrix.md | 77 +++++++++++++++++++++++++------------- 1 file changed, 51 insertions(+), 26 deletions(-) diff --git a/074._search_a_2d_matrix.md b/074._search_a_2d_matrix.md index 780a49cfb..026a5d34d 100644 --- a/074._search_a_2d_matrix.md +++ b/074._search_a_2d_matrix.md @@ -9,16 +9,44 @@ Medium 思路: -想过将```2D matrix```看成一个大```sorted list```,但是后面觉得不行 +想过将```2D matrix```看成一个大```sorted list```,代码如下: +```python +class Solution(object): + def searchMatrix(self, matrix, target): + """ + :type matrix: List[List[int]] + :type target: int + :rtype: bool + """ + row = len(matrix) + col = len(matrix[0]) if row else 0 + l, r = 0, row * col - 1 + while l <= r: + mid = l + ((r - l) >> 2) + if target > matrix[mid/col][mid%col]: + l = mid + 1 + elif target < matrix[mid/col][mid%col]: + r = mid - 1 + else: + return True + return False +``` + +但是后面觉得不行, 原因如下: 1. m * n may overflow for large m and n; 2. it will use multiple expensive operations such as / and % + + + + + 因此二分Search,``` binary search by row first, then binary search by column.``` -``` +```python class Solution(object): def searchMatrix(self, matrix, target): """ @@ -26,31 +54,28 @@ class Solution(object): :type target: int :rtype: bool """ - if len(matrix) == 0: + if not matrix or not matrix[0]: return False - else: - n = len(matrix[0]) - half = len(matrix)//2 - if target >= matrix[half][0] and target <= matrix[half][n-1]: - return self.searchList(matrix[half],target) - elif target < matrix[half][0]: - return self.searchMatrix(matrix[:half],target) + row = len(matrix) + col = len(matrix[0]) if row else 0 + l, r = 0, row - 1 + while l <= r: + mid_row = l + ((r - l) >> 2) + if matrix[mid_row][0] <= target <= matrix[mid_row][-1]: + m, n = 0, col - 1 + while m <= n: + mid_col = m + ((n - m) >> 2) + if matrix[mid_row][mid_col] > target: + n = mid_col - 1 + elif matrix[mid_row][mid_col] < target: + m = mid_col + 1 + else: + return True + return False + elif target < matrix[mid_row][0]: + r = mid_row - 1 else: - return self.searchMatrix(matrix[half+1:],target) - - def searchList(self, lst, target): - if len(lst) == 0: - return False - else: - mid = len(lst) // 2 - if target == lst[mid]: - return True - elif target < lst[mid]: - return self.searchList(lst[:mid],target) - else: - return self.searchList(lst[mid+1:],target) - - - + l = mid_row + 1 + return False ``` From ef3f27f028fe80183ac4ba07e33ed8d94c4f79e7 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 11 Jan 2018 12:49:26 -0600 Subject: [PATCH 0325/2496] Update 278. First Bad Version.md --- 278. First Bad Version.md | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/278. First Bad Version.md b/278. First Bad Version.md index 7d15e1ce8..7c6d94240 100644 --- a/278. First Bad Version.md +++ b/278. First Bad Version.md @@ -15,29 +15,25 @@ 思路: -根据 search for a range 改的,这个binary search的边界也是令人着(chi)迷(dai)啊 +根据 search for a range 改的 -这里使用 `n+1` 一是边界令人着迷,二是version是从1开始的 - -``` +```python class Solution(object): def firstBadVersion(self, n): """ :type n: int :rtype: int """ - l, r = 0, n+1 - - while l < r: - mid = (l+r) // 2 - if isBadVersion(mid) and (mid == 0 or (not isBadVersion(mid-1))): - return mid - if isBadVersion(mid): - r = mid - else: - l = mid + 1 + l, r = 0, n - 1 + while l <= r: + mid = l + ((r - l) >> 2) + if not isBadVersion(mid): + l = mid + 1 + else: + r = mid - 1 + return l ``` From a33c613d82adf6fe175f1a88fd58caea5f09722d Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 11 Jan 2018 12:51:05 -0600 Subject: [PATCH 0326/2496] Update 240._search_a_2d_matrix_ii.md --- 240._search_a_2d_matrix_ii.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/240._search_a_2d_matrix_ii.md b/240._search_a_2d_matrix_ii.md index 1f3ea3ca5..1710c0ffa 100644 --- a/240._search_a_2d_matrix_ii.md +++ b/240._search_a_2d_matrix_ii.md @@ -1,4 +1,4 @@ -###240. Search a 2D Matrix II +### 240. Search a 2D Matrix II @@ -62,4 +62,4 @@ class Solution(object): return True return False -``` \ No newline at end of file +``` From b949df2f77446d382d2766ef2298d9848a4877d3 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 11 Jan 2018 12:51:31 -0600 Subject: [PATCH 0327/2496] Rename 278. First Bad Version.md to 278._First_Bad _Version.md --- 278. First Bad Version.md => 278._First_Bad _Version.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename 278. First Bad Version.md => 278._First_Bad _Version.md (100%) diff --git a/278. First Bad Version.md b/278._First_Bad _Version.md similarity index 100% rename from 278. First Bad Version.md rename to 278._First_Bad _Version.md From 170e122cb208054f7611d2dfcd3e41c5cdfd0c48 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 11 Jan 2018 12:55:47 -0600 Subject: [PATCH 0328/2496] Update 240._search_a_2d_matrix_ii.md --- 240._search_a_2d_matrix_ii.md | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/240._search_a_2d_matrix_ii.md b/240._search_a_2d_matrix_ii.md index 1710c0ffa..545732ebc 100644 --- a/240._search_a_2d_matrix_ii.md +++ b/240._search_a_2d_matrix_ii.md @@ -38,7 +38,7 @@ m, n = 0, col - 1 -``` +```python class Solution(object): def searchMatrix(self, matrix, target): """ @@ -47,19 +47,17 @@ class Solution(object): :rtype: bool """ if not matrix: - return False - + return False row = len(matrix) - col = len(matrix[0]) - m, n = 0, col - 1 - + col = len(matrix[0]) if row else 0 + m, n = 0, col - 1 while m < row and n >= 0: - if matrix[m][n] < target: - m += 1 - elif matrix[m][n] > target: - n -= 1 - else: - return True + if matrix[m][n] < target: + m += 1 + elif matrix[m][n] > target: + n -= 1 + else: + return True return False ``` From ee1d9ffe4592033443cbe85cb7686875a23474f4 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 11 Jan 2018 13:26:15 -0600 Subject: [PATCH 0329/2496] Update 139._word_break.md --- 139._word_break.md | 107 ++++++++++++++++++++++----------------------- 1 file changed, 52 insertions(+), 55 deletions(-) diff --git a/139._word_break.md b/139._word_break.md index 45d941fb3..dbb29989a 100644 --- a/139._word_break.md +++ b/139._word_break.md @@ -1,61 +1,58 @@ -###139. Word Break - -题目: - - - -难度: - -Medium - - - -超时,无法AC - -backtracking,或者叫递归,简直超时小公主了 - -``` +### 139. Word Break + +题目: + + + +难度: + +Medium + + + + +```python class Solution(object): def wordBreak(self, s, wordDict): """ :type s: str - :type wordDict: Set[str] + :type wordDict: List[str] :rtype: bool """ - self.res = [] - self.wordBreakLst([],s,wordDict) - for r in self.res: - return set(wordDict) >= set(r) - return False - - - def wordBreakLst(self, lst, rest, wordDict): - if rest == '': - self.res.append(lst) - for i in range(1+len(rest)): - if rest[:i] in wordDict: - self.wordBreakLst(lst+[rest[:i]],rest[i:],wordDict) -``` - - -然后发现别人家的孩子,大家都用的动规.时间复杂度由O(2^n) -> O(n^2) - -``` -class Solution(object): - def wordBreak(self, s, wordDict): - """ - :type s: str - :type wordDict: Set[str] - :rtype: bool - """ - dp = [False for i in range(1+len(s))] - dp[0] = True - for i in range(1,len(s)+1): - for k in range(i): - if dp[k] and s[k:i] in wordDict: - dp[i] = True - return dp[len(s)] -``` - -还是刷的不够多 - + ok = [True] + for i in range(1, len(s)+1): + ok += [any(ok[j] and s[j:i] in wordDict for j in range(i))] + return ok[-1] +``` + +但是往list里面加数据的方法有快有慢,下面是对比: +``` +>>> from timeit import timeit +>>> timeit('x.append(1)', 'x = []', number=10000000) +1.9880003412529277 +>>> timeit('x += 1,', 'x = []', number=10000000) +1.2676891852971721 +>>> timeit('x += [1]', 'x = []', number=10000000) +3.361207239950204 +``` +因此我们可以将代码直接换成下面的格式 +```python +ok += any(ok[j] and s[j:i] in wordDict for j in range(i)) +``` +但是这样会报错,TypeError: 'bool' object is not iterable,因此bool类型数据不能这样加,别的可以(list类型本身当然要注意哈) + +因此在这个例子中我们这样: +```python +class Solution(object): + def wordBreak(self, s, wordDict): + """ + :type s: str + :type wordDict: List[str] + :rtype: bool + """ + ok = [True] + for i in range(1, len(s)+1): + ok += any(ok[j] and s[j:i] in wordDict for j in range(i)), + return ok[-1] +``` +代码里面的那个逗号构建了一个tuple,也会快一点 From b2b52d2561d33de408603d286218a700023c5478 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 11 Jan 2018 13:26:52 -0600 Subject: [PATCH 0330/2496] Update 139._word_break.md --- 139._word_break.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/139._word_break.md b/139._word_break.md index dbb29989a..c95c9a852 100644 --- a/139._word_break.md +++ b/139._word_break.md @@ -37,7 +37,7 @@ class Solution(object): ``` 因此我们可以将代码直接换成下面的格式 ```python -ok += any(ok[j] and s[j:i] in wordDict for j in range(i)) +ok += any(ok[j] and s[j:i] in wordDict for j in range(i)) # 会报错 ``` 但是这样会报错,TypeError: 'bool' object is not iterable,因此bool类型数据不能这样加,别的可以(list类型本身当然要注意哈) From 98cd16648dce5e4ed7e40d74dd105a78eee97838 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 11 Jan 2018 14:58:16 -0600 Subject: [PATCH 0331/2496] Update 140._word_break_ii.md --- 140._word_break_ii.md | 78 ++++++++++++++++++++----------------------- 1 file changed, 36 insertions(+), 42 deletions(-) diff --git a/140._word_break_ii.md b/140._word_break_ii.md index 2f48adf7b..d9504ebf2 100644 --- a/140._word_break_ii.md +++ b/140._word_break_ii.md @@ -1,5 +1,5 @@ -###140. Word Break II +### 140. Word Break II 题目: @@ -45,60 +45,30 @@ class Solution(object): 做法如下,聪明: 就是对于每一个s,我们来check它是否可以break,如果不可以,就不用做相应的操作了 - -举例 - -``` -s = "catsanddog" -传入wordBreakLst函数 - -首先check它是可以被分割的,于是开始分割 -stringLst = cat s[:i] = sanddog -继续传入s[:i] 进wordBreakLst again,还是可以分割,stringLst = ' cat sand' -继续 - -另外的是s[:i] = cats s[:i] = anddog -也是可以分割 - -画图就是类似这样 - - - catsanddog | | - cat cats - | | sand and - / \ - dog dog - -``` - - - 解法 -``` + +```python class Solution(object): def wordBreak(self, s, wordDict): """ :type s: str - :type wordDict: Set[str] - :rtype: bool + :type wordDict: List[str] + :rtype: List[str] """ self.res = [] - self.wordBreakLst(s,wordDict,"") + self.wordBreakLst(s, wordDict, '') return self.res def check(self, s, wordDict): - dp = [False for i in range(1+len(s))] - dp[0] = True - for i in range(1,len(s)+1): - for k in range(i): - if dp[k] and s[k:i] in wordDict: - dp[i] = True - return dp[len(s)] + ok = [True] + for i in range(1, len(s) + 1): + ok += any(ok[j] and s[j:i] in wordDict for j in range(i)), + return ok[-1] def wordBreakLst(self, s, wordDict, stringLst): - if self.check(s,wordDict): - if len(s) == 0 : self.res.append(stringLst[1:]) + if self.check(s, wordDict): + if len(s) == 0 : self.res.append(stringLst[1:]) # 因为最开始也加了一个空格 for i in range(1,len(s)+1): if s[:i] in wordDict: self.wordBreakLst(s[i:], wordDict, stringLst + ' ' + s[:i]) @@ -117,3 +87,27 @@ s = "aabbb" wordDict = ["a","abbb"] 就会极其的减少loop次数 ``` + + +看看stefan大神的做法: + +```sentences(i)``` returns a list of all sentences that can be built from the suffix ```s[i:]```. + +```python +class Solution(object): + def wordBreak(self, s, wordDict): + """ + :type s: str + :type wordDict: List[str] + :rtype: List[str] + """ + memo = {len(s): ['']} + def sentences(i): + if i not in memo: + memo[i] = [s[i:j] + (tail and ' ' + tail) + for j in range(i+1, len(s)+1) + if s[i:j] in wordDict + for tail in sentences(j)] + return memo[i] + return sentences(0) +``` From 4b6287b9c9802977fcc224932dff9cffb35c4852 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 11 Jan 2018 14:58:43 -0600 Subject: [PATCH 0332/2496] Update 140._word_break_ii.md --- 140._word_break_ii.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/140._word_break_ii.md b/140._word_break_ii.md index d9504ebf2..6333bf8fe 100644 --- a/140._word_break_ii.md +++ b/140._word_break_ii.md @@ -14,8 +14,8 @@ Medium 还是backtracking,会超时 ``` -class Solution(object): - def wordBreak(self, s, wordDict): +class Solution(object): # 此法超时 +    def wordBreak(self, s, wordDict): """ :type s: str :type wordDict: Set[str] From f431b2e636e7eba9f21e6a816adf802af5dabc53 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 11 Jan 2018 14:59:51 -0600 Subject: [PATCH 0333/2496] Update 139._word_break.md --- 139._word_break.md | 1 + 1 file changed, 1 insertion(+) diff --git a/139._word_break.md b/139._word_break.md index c95c9a852..815737dec 100644 --- a/139._word_break.md +++ b/139._word_break.md @@ -10,6 +10,7 @@ Medium +```ok[i]``` tells whether ```s[:i]``` can be built. ```python class Solution(object): From 28ddabe41dd1d95236b833b6315fa578677d284b Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 11 Jan 2018 15:58:51 -0600 Subject: [PATCH 0334/2496] Update 054._spiral_matrix.md --- 054._spiral_matrix.md | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/054._spiral_matrix.md b/054._spiral_matrix.md index 15c9d97f2..8d48ba47d 100644 --- a/054._spiral_matrix.md +++ b/054._spiral_matrix.md @@ -1,4 +1,4 @@ -###54. Spiral Matrix +### 54. Spiral Matrix 题目: @@ -117,4 +117,19 @@ class Solution(object): ``` -明显别人的代码写的更精妙,因为这里两个boundary都很明确,所以用for in range就能很好的解决问题了. \ No newline at end of file +明显别人的代码写的更精妙,因为这里两个boundary都很明确,所以用for in range就能很好的解决问题了. + + + +最后放一个无敌一行,怕你看完不想看上面的代码了 +```python +class Solution(object): + def spiralOrder(self, matrix): + """ + :type matrix: List[List[int]] + :rtype: List[int] + """ + return matrix and list(matrix.pop(0)) + self.spiralOrder(zip(*matrix)[::-1]) +``` + +oh, my god! From e4db3240911988ba5a28816fe93c8784fab660ed Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 11 Jan 2018 15:59:27 -0600 Subject: [PATCH 0335/2496] Update 054._spiral_matrix.md --- 054._spiral_matrix.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/054._spiral_matrix.md b/054._spiral_matrix.md index 8d48ba47d..ca2219ec1 100644 --- a/054._spiral_matrix.md +++ b/054._spiral_matrix.md @@ -17,7 +17,7 @@ Medium -``` +```python class Solution(object): def spiralOrder(self, matrix): """ @@ -54,7 +54,7 @@ class Solution(object): 以上的写法非常精妙,看看我自己用同样的思路写的|||| -``` +```python class Solution(object): def spiralOrder(self, matrix): """ @@ -121,6 +121,10 @@ class Solution(object): + + +----------- + 最后放一个无敌一行,怕你看完不想看上面的代码了 ```python class Solution(object): From 7c1397218b0bd322847edbd590e9fca2b1e00cf0 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 11 Jan 2018 17:17:58 -0600 Subject: [PATCH 0336/2496] Update 059._spiral_matrix_ii.md --- 059._spiral_matrix_ii.md | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/059._spiral_matrix_ii.md b/059._spiral_matrix_ii.md index 319314846..bfd67bbbb 100644 --- a/059._spiral_matrix_ii.md +++ b/059._spiral_matrix_ii.md @@ -1,4 +1,4 @@ -###59. Spiral Matrix II +### 59. Spiral Matrix II 题目: @@ -48,4 +48,20 @@ class Solution(object): if curNum >= n*n: return matrix direction = (direction + 1 ) % 4 -``` \ No newline at end of file +``` + +Same idea with [spiral matrix I](https://github.com/Lisanaaa/thinking_in_lc/blob/master/054._spiral_matrix.md) +```python +class Solution(object): + def generateMatrix(self, n): + """ + :type n: int + :rtype: List[List[int]] + """ + res = [] + l = n * n + 1 + while l > 1: + l, r = l - len(res), l + res = [range(l, r)] + zip(*res) + return res +``` From f9ee054a42ccd0944e30b127b1009787b7dbc75e Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 11 Jan 2018 17:18:10 -0600 Subject: [PATCH 0337/2496] Update 059._spiral_matrix_ii.md --- 059._spiral_matrix_ii.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/059._spiral_matrix_ii.md b/059._spiral_matrix_ii.md index bfd67bbbb..3500e4acf 100644 --- a/059._spiral_matrix_ii.md +++ b/059._spiral_matrix_ii.md @@ -12,7 +12,7 @@ Medium 也许还有待挖掘trick -``` +```python class Solution(object): def generateMatrix(self,n): """ From 50fc95a1a020f9e0d131b4637f66aa06d8a65e85 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 11 Jan 2018 17:19:31 -0600 Subject: [PATCH 0338/2496] Update 059._spiral_matrix_ii.md --- 059._spiral_matrix_ii.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/059._spiral_matrix_ii.md b/059._spiral_matrix_ii.md index 3500e4acf..42ae52662 100644 --- a/059._spiral_matrix_ii.md +++ b/059._spiral_matrix_ii.md @@ -62,6 +62,6 @@ class Solution(object): l = n * n + 1 while l > 1: l, r = l - len(res), l - res = [range(l, r)] + zip(*res) + res = [range(l, r)] + zip(*res[::-1]) return res ``` From 37c528de8220a82c12327d32d2425448ae13feff Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 11 Jan 2018 22:53:51 -0600 Subject: [PATCH 0339/2496] Update 200._number_of_islands.md --- 200._number_of_islands.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/200._number_of_islands.md b/200._number_of_islands.md index eef73b54e..73c5aecf4 100644 --- a/200._number_of_islands.md +++ b/200._number_of_islands.md @@ -1,4 +1,4 @@ -###200. Number of Islands +### 200. Number of Islands 题目: @@ -111,3 +111,20 @@ class Solution(object): return count ``` +厉害的解法:Sink and count the islands. +```python +class Solution(object): + def numIslands(self, grid): + """ + :type grid: List[List[str]] + :rtype: int + """ + def sink(i, j): + if 0 <= i < len(grid) and 0 <= j < len(grid[0]) and grid[i][j] == '1': + grid[i][j] = '0' + map(sink, (i+1, i-1, i, i), (j, j, j+1, j-1)) + return 1 + return 0 + return sum(sink(i, j) for i in range(len(grid)) for j in range(len(grid[0]))) +``` + From bf936ed09bccdb5395e7451fc5a964bf757a62ea Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Thu, 11 Jan 2018 23:59:52 -0600 Subject: [PATCH 0340/2496] Update 162._find_peak_element.md --- 162._find_peak_element.md | 40 ++++++++++++++++----------------------- 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/162._find_peak_element.md b/162._find_peak_element.md index 6c7517530..2aad9b1c8 100644 --- a/162._find_peak_element.md +++ b/162._find_peak_element.md @@ -1,4 +1,4 @@ -###162. Find Peak Element +### 162. Find Peak Element 题目: @@ -13,57 +13,49 @@ Medium 最直观的是O(N)解法 -``` +```python class Solution(object): def findPeakElement(self, nums): """ :type nums: List[int] :rtype: int """ - n = len(nums) - if n == 1: - return 0 - if nums[0] > nums[1]: - return 0 - elif nums[n-1] > nums[n-2]: - return n-1 - for i in range(1,n-1): - if nums[i] > nums[i-1] and nums[i] > nums[i+1]: - return i + for i in range(1, len(nums)): + if nums[i] < nums[i-1]: + return i-1 + return len(nums) - 1 ``` O(lgN) 解法 这是一个经典题目 -- a[n/2] < a[n/2-1] only look at the left side -- a[n/2] < a[n/2+1] only look at the right side +- a[mid] < a[mid] only look at the left side +- a[mid] < a[mid] only look at the right side - else peak found -证明就是用反正法,或者看peak,因为这里已经限制了num[i] ≠ num[i+1],所以peak element 一定存在。然后a[n/2] < a[n/2-1],那么说明这里一定是下降的,说明之前一定有一个peak存在,否则我们可以用反证法证明. +证明就是用反证法,或者看peak,因为这里已经限制了num[i] ≠ num[i+1],所以peak element 一定存在。然后a[mid] < a[mid-1],那么说明这里一定是下降的,说明之前一定有一个peak存在,否则我们可以用反证法证明. -写到这里,我非常相信就是binary search能写对其实不容易。注意附加条件mid > l 和mid < r,这是针对mid+1和mid-1需要附加的,否则不容易对。 +写到这里,我非常相信就是binary search能写对其实不容易。 AC代码 -``` +```python class Solution(object): def findPeakElement(self, nums): """ :type nums: List[int] :rtype: int """ - l,r = 0, len(nums) - 1 + l, r = 0, len(nums) - 1 while l <= r: if l == r : return l - mid = (l+r)/2 - if mid > l and nums[mid] < nums[mid-1]: - r = mid - 1 - elif mid < r and nums[mid] < nums[mid+1]: + mid = l + ((r - l) >> 2) + if nums[mid] < nums[mid+1]: l = mid + 1 else: - return mid - + r = mid ``` + From 11b691549d2497797f7f6699da849351ce9b312f Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 12 Jan 2018 09:43:43 -0600 Subject: [PATCH 0341/2496] Update 228._summary_ranges.md --- 228._summary_ranges.md | 96 +++++++++++++++++++----------------------- 1 file changed, 43 insertions(+), 53 deletions(-) diff --git a/228._summary_ranges.md b/228._summary_ranges.md index 95e8d2faf..9276298ff 100644 --- a/228._summary_ranges.md +++ b/228._summary_ranges.md @@ -1,59 +1,49 @@ -###228. Summary Ranges - -题目: - - - -难度: - -Medium - - -用一个head和headIdx来记录当前consecutive的开始,一旦不再consecutive,push it in - - -然后应该可以把代码写的更简单 - -``` +### 228. Summary Ranges + +题目: + + + +难度: + +Medium + + +Just collect the ranges, then format and return them. + +```python class Solution(object): def summaryRanges(self, nums): """ :type nums: List[int] :rtype: List[str] """ - if nums == []: - return [] - tmp = [] - tmpl = [] - - - head = nums[0] - headIdx = 0 - - tmpl = [head] - - for i in range(1,len(nums)): - #not consective anymore - if nums[i] != head + i - headIdx : - tmp.append(tmpl) - head = nums[i] - headIdx = i - tmpl = [] - tmpl.append(head) - #consective nums - else: - tmpl.append(nums[i]) - #push the last sequence in - tmp.append(tmpl) - - - res = [] - for t in tmp: - if len(t) == 1: - res.append(str(t[0])) - else: - res.append(str(t[0])+"->" +str(t[-1])) - return res - - -``` + ranges = [] + for i in nums: + if not ranges or i > ranges[-1][-1] + 1: + ranges += [], + ranges[-1][1:] = i, + return ['->'.join(map(str, r)) for r in ranges] +``` +About the commas :-) + +``` +ranges += [], +r[1:] = n, +``` +Why the trailing commas? Because it turns the right hand side into a tuple and I get the same effects as these more common alternatives: +``` +ranges += [[]] +or +ranges.append([]) + +r[1:] = [n] +``` +Without the comma, … + +- ranges += [] wouldn’t add [] itself but only its elements, i.e., nothing. +- r[1:] = n wouldn’t work, because my n is not an iterable. + +Why do it this way instead of the more common alternatives I showed above? Because it’s shorter and faster (according to tests I did a while back). + +参考[stefan](https://leetcode.com/problems/summary-ranges/discuss/63193) From 00507ae2505f8eeaee095e5da17f0a9c7e635604 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 12 Jan 2018 10:35:42 -0600 Subject: [PATCH 0342/2496] Update 228._summary_ranges.md --- 228._summary_ranges.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/228._summary_ranges.md b/228._summary_ranges.md index 9276298ff..ce9dce0f9 100644 --- a/228._summary_ranges.md +++ b/228._summary_ranges.md @@ -46,4 +46,13 @@ Without the comma, … Why do it this way instead of the more common alternatives I showed above? Because it’s shorter and faster (according to tests I did a while back). +写到这里可能又有疑问了🤔️,为什么不可以直接写```ranges[-1][1] = i```呢,当然是会报```IndexError: list assignment index out of range```错误啦,那为什么```ranges[-1][1:] = i,```可以呢? + +简单来说 + +L1=L 与 L1=L[:] +- L1和L 都是对同一个对象的引用(所谓绑定的意思)。 +- L[:] 是生成了一个和L不同的新的对象,L1 变为了L[:] 这个对象的引用。 + + 参考[stefan](https://leetcode.com/problems/summary-ranges/discuss/63193) From edbc003452f5fc5ae8ac692a156ed686ce05ab40 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 12 Jan 2018 10:37:50 -0600 Subject: [PATCH 0343/2496] Update 279._perfect_squares.md --- 279._perfect_squares.md | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/279._perfect_squares.md b/279._perfect_squares.md index 7fd6c3143..d772f9f39 100644 --- a/279._perfect_squares.md +++ b/279._perfect_squares.md @@ -1,5 +1,5 @@ -###279. Perfect Squares +### 279. Perfect Squares 题目: @@ -11,35 +11,27 @@ Medium -状态转移方程 +DP, 状态转移方程: -思路一: -dp[i] = min(dp[j] + dp[i-j], dp[i]) -会超时 +```dp[i] = min(dp[i], dp[i - j * j] + 1)``` -思路二: -dp[i + j * j] = min(dp[i] + 1, dp[i + j * j]) -已经不能更好了,但是因为Python的特性,依旧超时 - -``` +```python class Solution(object): def numSquares(self, n): """ :type n: int :rtype: int """ - dp = [ n+1 for i in range(1+n)] - dp[0] = 0 - - for i in range(n): - j = 0 - while (i + j * j <= n) : - dp[ i + j * j ] = min(dp[ i + j * j], dp[i] + 1) - j += 1 - - return dp[n] + dp = [0] * (n+1) + for i in range(n+1): + dp[i] = i + j = 1 + while j * j <= i: + dp[i] = min(dp[i], dp[i-j*j] + 1) + j += 1 + return dp[-1] ``` From f83e02e5817aaa716987a9b0193bab413c25f87c Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 12 Jan 2018 10:49:50 -0600 Subject: [PATCH 0344/2496] Update 279._perfect_squares.md --- 279._perfect_squares.md | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/279._perfect_squares.md b/279._perfect_squares.md index d772f9f39..1550e02b2 100644 --- a/279._perfect_squares.md +++ b/279._perfect_squares.md @@ -10,7 +10,7 @@ Medium - +### 思路一: DP, 状态转移方程: ```dp[i] = min(dp[i], dp[i - j * j] + 1)``` @@ -35,3 +35,29 @@ class Solution(object): return dp[-1] ``` +但是这个方法贼慢,有时候提交甚至会超时,有时候又不会。。。。因此想别的办法 + +### 思路二: + +Static DP + +```python +class Solution(object): + def numSquares(self, n): + """ + :type n: int + :rtype: int + """ + dp = [0] + while len(dp) <= n: + m = len(dp) + inf = float('inf') + i = 1 + while i * i <= m: + inf = min(inf, dp[m-i*i] + 1) + i += 1 + dp.append(inf) + return dp[-1] +``` + + From e701c77e28c2b58a6920480ffc4f77a4f374a212 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 12 Jan 2018 12:56:49 -0600 Subject: [PATCH 0345/2496] Update 279._perfect_squares.md --- 279._perfect_squares.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/279._perfect_squares.md b/279._perfect_squares.md index 1550e02b2..78efe42a6 100644 --- a/279._perfect_squares.md +++ b/279._perfect_squares.md @@ -59,5 +59,35 @@ class Solution(object): dp.append(inf) return dp[-1] ``` +还是慢,有个数学方法, runtime beats 98.48% +```python +import math +class Solution(object): + def numSquares(self, n): + """ + :type n: int + :rtype: int + """ + def isSquare(num): + tmp = int(math.sqrt(num)) + return tmp * tmp == num + while n & 3 == 0: # n % 4 == 0 + n >>= 2 + if n & 7 == 7: # n % 8 == 7 + return 4 + if isSquare(n): + return 1 + sqrt_n = int(math.sqrt(n)) + for i in range(1, sqrt_n + 1): + if isSquare(n-i*i): + return 2 + return 3 +``` +in order to understand, I suggest u read: + +here is the 【[Lagrange's Four Square theorem](https://en.wikipedia.org/wiki/Lagrange%27s_four-square_theorem +) - Limit the result to <= 4: + +And this [article](http://www.alpertron.com.ar/4SQUARES.HTM), in which you can also find the way to present a number as a sum of four squares: From 008a30561c55510eb5dcc309192b3b36530b9951 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 12 Jan 2018 12:57:06 -0600 Subject: [PATCH 0346/2496] Update 279._perfect_squares.md --- 279._perfect_squares.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/279._perfect_squares.md b/279._perfect_squares.md index 78efe42a6..e2927cb26 100644 --- a/279._perfect_squares.md +++ b/279._perfect_squares.md @@ -85,7 +85,7 @@ class Solution(object): ``` in order to understand, I suggest u read: -here is the 【[Lagrange's Four Square theorem](https://en.wikipedia.org/wiki/Lagrange%27s_four-square_theorem +here is the [Lagrange's Four Square theorem](https://en.wikipedia.org/wiki/Lagrange%27s_four-square_theorem ) - Limit the result to <= 4: And this [article](http://www.alpertron.com.ar/4SQUARES.HTM), in which you can also find the way to present a number as a sum of four squares: From b58eb99fd38175e8ea231aee9017967b690d5cc0 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 12 Jan 2018 13:03:40 -0600 Subject: [PATCH 0347/2496] Update 279._perfect_squares.md --- 279._perfect_squares.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/279._perfect_squares.md b/279._perfect_squares.md index e2927cb26..a6daecc2d 100644 --- a/279._perfect_squares.md +++ b/279._perfect_squares.md @@ -59,6 +59,9 @@ class Solution(object): dp.append(inf) return dp[-1] ``` + +### 思路三: + 还是慢,有个数学方法, runtime beats 98.48% ```python import math From 4ae09b3f5d5a2063a028fc1c98b5fe76bd6ad42d Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 12 Jan 2018 22:24:49 -0600 Subject: [PATCH 0348/2496] Create 421.Maximum_XOR_of_Two_Numbers_in_an_Array.md --- 421.Maximum_XOR_of_Two_Numbers_in_an_Array.md | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 421.Maximum_XOR_of_Two_Numbers_in_an_Array.md diff --git a/421.Maximum_XOR_of_Two_Numbers_in_an_Array.md b/421.Maximum_XOR_of_Two_Numbers_in_an_Array.md new file mode 100644 index 000000000..c70d18884 --- /dev/null +++ b/421.Maximum_XOR_of_Two_Numbers_in_an_Array.md @@ -0,0 +1,54 @@ +### 421. Maximum XOR of Two Numbers in an Array + +题目: + + + +难度: + +Medium + +题目要求O(N)时间 + +看了半天的解法居然超时, +```python +class Solution(object): + def findMaximumXOR(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + '''The maxResult is a record of the largest XOR we got so far. if it's 11100 at i = 2, it means + before we reach the last two bits, 11100 is the biggest XOR we have, and we're going to explore + whether we can get another two '1's and put them into maxResult''' + max_res, mask = 0, 0 + + '''This is a greedy part, since we're looking for the largest XOR, we start + from the very begining, aka, the 31st postition of bits.''' + for i in range(32)[::-1]: + + '''The mask will grow like 100..000 , 110..000, 111..000, then 1111...111 + for each iteration, we only care about the left parts''' + mask |= (1 << i) + tmp = [] + for num in nums: + '''we only care about the left parts, for example, if i = 2, then we have + {1100, 1000, 0100, 0000} from {1110, 1011, 0111, 0010}''' + tmp.append(num & mask) + + '''if i = 1 and before this iteration, the maxResult we have now is 1100, + my wish is the maxResult will grow to 1110, so I will try to find a candidate + which can give me the greedyTry;''' + greedy_try = max_res | (1 << i) + + for i in tmp: + '''This is the most tricky part, coming from a fact that if a ^ b = c, then a ^ c = b; + now we have the 'c', which is greedyTry, and we have the 'a', which is leftPartOfNum + If we hope the formula a ^ b = c to be valid, then we need the b, + and to get b, we need a ^ c, if a ^ c exisited in our set, then we're good to go''' + if i ^ greedy_try in tmp: + max_res = greedy_try + '''If unfortunately, we didn't get the greedyTry, we still have our max, + So after this iteration, the max will stay at 1100.''' + return max_res +``` From 567c8917aecac3aec743c4b58eb760a28d0799a5 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 12 Jan 2018 22:25:41 -0600 Subject: [PATCH 0349/2496] Update and rename 421.Maximum_XOR_of_Two_Numbers_in_an_Array.md to 421._Maximum_XOR_of_Two_Numbers_in_an_Array.md --- ....md => 421._Maximum_XOR_of_Two_Numbers_in_an_Array.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) rename 421.Maximum_XOR_of_Two_Numbers_in_an_Array.md => 421._Maximum_XOR_of_Two_Numbers_in_an_Array.md (95%) diff --git a/421.Maximum_XOR_of_Two_Numbers_in_an_Array.md b/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md similarity index 95% rename from 421.Maximum_XOR_of_Two_Numbers_in_an_Array.md rename to 421._Maximum_XOR_of_Two_Numbers_in_an_Array.md index c70d18884..b8732f4db 100644 --- a/421.Maximum_XOR_of_Two_Numbers_in_an_Array.md +++ b/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md @@ -11,9 +11,9 @@ Medium 题目要求O(N)时间 看了半天的解法居然超时, -```python -class Solution(object): - def findMaximumXOR(self, nums): +``` +class Solution(object): # 此法超时 +    def findMaximumXOR(self, nums): """ :type nums: List[int] :rtype: int @@ -52,3 +52,6 @@ class Solution(object): So after this iteration, the max will stay at 1100.''' return max_res ``` + + +只好想别的办法 From 38c0d4bd913b491d5ccbc0877dd8a5841d1e7fb8 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Fri, 12 Jan 2018 22:42:23 -0600 Subject: [PATCH 0350/2496] Update 421._Maximum_XOR_of_Two_Numbers_in_an_Array.md --- ..._Maximum_XOR_of_Two_Numbers_in_an_Array.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md b/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md index b8732f4db..b0697b2a6 100644 --- a/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md +++ b/421._Maximum_XOR_of_Two_Numbers_in_an_Array.md @@ -11,7 +11,7 @@ Medium 题目要求O(N)时间 看了半天的解法居然超时, -``` +```python class Solution(object): # 此法超时    def findMaximumXOR(self, nums): """ @@ -55,3 +55,20 @@ class Solution(object): # 此法超时 只好想别的办法 + + +参考[stefan](https://leetcode.com/problems/maximum-xor-of-two-numbers-in-an-array/discuss/91050?page=3) +```python +class Solution(object): + def findMaximumXOR(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + answer = 0 + for i in range(32)[::-1]: + answer <<= 1 + prefixes = {num >> i for num in nums} + answer += any(answer^1 ^ p in prefixes for p in prefixes) + return answer +``` From a39766f3802d5c20e9da00591b0a50a8cd35c63c Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 13 Jan 2018 01:15:20 -0600 Subject: [PATCH 0351/2496] Update 289._game_of_life.md --- 289._game_of_life.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/289._game_of_life.md b/289._game_of_life.md index 059a98caa..097ffc3ed 100644 --- a/289._game_of_life.md +++ b/289._game_of_life.md @@ -1,4 +1,4 @@ -###289. Game of Life +### 289. Game of Life 题目: @@ -17,7 +17,7 @@ AC的效率还ok: -``` +```python class Solution(object): def gameOfLife(self, board): """ @@ -74,7 +74,7 @@ class Solution(object): 我们可以使用状态机转换 o(╯□╰)o 感觉不知道在听什么 还是很迷茫的感觉, in-place AC代码 -``` +```python class Solution(object): def gameOfLife(self, board): """ From acf6e1bdf20a93ea065240374e20cdf745907bd5 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 13 Jan 2018 01:34:02 -0600 Subject: [PATCH 0352/2496] Update 341. Flatten Nested List Iterator.md --- 341. Flatten Nested List Iterator.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/341. Flatten Nested List Iterator.md b/341. Flatten Nested List Iterator.md index 14c4f8737..2acc186f5 100644 --- a/341. Flatten Nested List Iterator.md +++ b/341. Flatten Nested List Iterator.md @@ -10,13 +10,9 @@ 难度: Medium -思路: -懒就一个字,您的AC代码击败了全国0.34%的Python用户,AC代码效率这么低,也是厉害。 -AC代码: - -``` +```python class NestedIterator(object): def __init__(self, nestedList): From ea6ccbf0c46603ed181b0383ed2511f0b72b07b8 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 13 Jan 2018 01:34:22 -0600 Subject: [PATCH 0353/2496] Rename 341. Flatten Nested List Iterator.md to 341._Flatten_Nested_List_Iterator.md --- ...ested List Iterator.md => 341._Flatten_Nested_List_Iterator.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename 341. Flatten Nested List Iterator.md => 341._Flatten_Nested_List_Iterator.md (100%) diff --git a/341. Flatten Nested List Iterator.md b/341._Flatten_Nested_List_Iterator.md similarity index 100% rename from 341. Flatten Nested List Iterator.md rename to 341._Flatten_Nested_List_Iterator.md From 8d471ad2c30c591925d24082a8565c4b32b06faa Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 13 Jan 2018 03:34:48 -0600 Subject: [PATCH 0354/2496] Update 208._implement_trie_(prefix_tree).md --- 208._implement_trie_(prefix_tree).md | 172 +++++++++++++-------------- 1 file changed, 86 insertions(+), 86 deletions(-) diff --git a/208._implement_trie_(prefix_tree).md b/208._implement_trie_(prefix_tree).md index 39707fe83..1a442748c 100644 --- a/208._implement_trie_(prefix_tree).md +++ b/208._implement_trie_(prefix_tree).md @@ -1,87 +1,87 @@ -###208. Implement Trie (Prefix Tree) - -题目: - - - - -难度: - -Medium - -这个Python实现也太精美了吧,谷歌复写之 - -然后还unlock了一个solution,to read - -Trie整个都需要 to read,精美,可爱😊 - - - - +### 208. Implement Trie (Prefix Tree) + +题目: + + + + +难度: + +Medium + +这个Python实现也太精美了吧,谷歌复写之 + +然后还unlock了一个solution,to read + +Trie整个都需要 to read,精美,可爱😊 + + + + +```python +class TrieNode(object): + def __init__(self): + """ + Initialize your data structure here. + """ + self.childs = dict() + self.isWord = False + + + +class Trie(object): + + def __init__(self): + self.root = TrieNode() + + def insert(self, word): + """ + Inserts a word into the trie. + :type word: str + :rtype: void + """ + node = self.root + for letter in word: + child = node.childs.get(letter) + if child is None: + child = TrieNode() + node.childs[letter] = child + node = child + node.isWord = True + + def search(self, word): + """ + Returns if the word is in the trie. + :type word: str + :rtype: bool + """ + node = self.root + for letter in word: + node = node.childs.get(letter) + if node is None: + return False + return node.isWord + + + def startsWith(self, prefix): + """ + Returns if there is any word in the trie + that starts with the given prefix. + :type prefix: str + :rtype: bool + """ + node = self.root + for letter in prefix: + node = node.childs.get(letter) + if node is None: + return False + return True + + +# Your Trie object will be instantiated and called as such: +# trie = Trie() +# trie.insert("somestring") +# trie.search("key") + ``` -class TrieNode(object): - def __init__(self): - """ - Initialize your data structure here. - """ - self.childs = dict() - self.isWord = False - - - -class Trie(object): - - def __init__(self): - self.root = TrieNode() - - def insert(self, word): - """ - Inserts a word into the trie. - :type word: str - :rtype: void - """ - node = self.root - for letter in word: - child = node.childs.get(letter) - if child is None: - child = TrieNode() - node.childs[letter] = child - node = child - node.isWord = True - - def search(self, word): - """ - Returns if the word is in the trie. - :type word: str - :rtype: bool - """ - node = self.root - for letter in word: - node = node.childs.get(letter) - if node is None: - return False - return node.isWord - - - def startsWith(self, prefix): - """ - Returns if there is any word in the trie - that starts with the given prefix. - :type prefix: str - :rtype: bool - """ - node = self.root - for letter in prefix: - node = node.childs.get(letter) - if node is None: - return False - return True - - -# Your Trie object will be instantiated and called as such: -# trie = Trie() -# trie.insert("somestring") -# trie.search("key") - -``` - + From 3324fdb38a0b013e6fb76a708291f5b37ab1a50d Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 13 Jan 2018 03:47:36 -0600 Subject: [PATCH 0355/2496] Create 166._ --- 166._ | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 166._ diff --git a/166._ b/166._ new file mode 100644 index 000000000..d4285fe4b --- /dev/null +++ b/166._ @@ -0,0 +1,42 @@ +### 166. Fraction to Recurring Decimal + +题目: + + + +难度: + +Medium + + + + +```python +class Solution: + # @return a string + def fractionToDecimal(self, n, d): + res = '' + if n == 0: # zero numerator + return str(n) + if (n < 0) ^ (d < 0): # determine the sign + res += '-' + n = abs(n) # remove sign of operands + d = abs(d) + res += str(n / d) # append integral part + if (n % d == 0): # in case no fractional part + return res + res += '.' + r = n % d + m = {} + while r: # simulate the division process + if r in m: # meet a known remainder + res = res[:m[r]] + '(' + res[m[r]:] + ')' # so we reach the end of the repeating part + break + m[r] = len(res) # if the remainder is first seen, remember the current position for it + r *= 10 + res += str(r / d) # append the quotient digit + r %= d + return res +``` + + From 6cf5260e80f2b1d4416e2e85f04b83fff5b02592 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 13 Jan 2018 03:48:22 -0600 Subject: [PATCH 0356/2496] Rename 166._ to 166._Fraction_to_Recurring_Decimal.md --- 166._ => 166._Fraction_to_Recurring_Decimal.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename 166._ => 166._Fraction_to_Recurring_Decimal.md (100%) diff --git a/166._ b/166._Fraction_to_Recurring_Decimal.md similarity index 100% rename from 166._ rename to 166._Fraction_to_Recurring_Decimal.md From b4caab82fd61b317982d44e2433f9d75a0e509bd Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 13 Jan 2018 04:09:43 -0600 Subject: [PATCH 0357/2496] Create 406._Queue_Reconstruction_by_Height.md --- 406._Queue_Reconstruction_by_Height.md | 45 ++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 406._Queue_Reconstruction_by_Height.md diff --git a/406._Queue_Reconstruction_by_Height.md b/406._Queue_Reconstruction_by_Height.md new file mode 100644 index 000000000..49ae597e4 --- /dev/null +++ b/406._Queue_Reconstruction_by_Height.md @@ -0,0 +1,45 @@ +### 406. Queue Reconstruction by Height + +题目: + + + +难度: + +Medium + + +思路: +People are only counting (in their k-value) taller or equal-height others standing in front of them. +So a smallest person is completely irrelevant for all taller ones. And of all smallest people, +the one standing most in the back is even completely irrelevant for everybody else. Nobody is counting that person. +So we can first arrange everybody else, ignoring that one person. And then just insert that person appropriately. +Now note that while this person is irrelevant for everybody else, everybody else is relevant for this person - +this person counts exactly everybody in front of them. So their count-value tells you exactly the index they must be standing. + +So you can first solve the sub-problem with all but that one person and then just insert that person appropriately. +And you can solve that sub-problem the same way, first solving the sub-sub-problem with all +but the last-smallest person of the subproblem. And so on. The base case is when you have the sub-…-sub-problem of zero people. +You’re then inserting the people in the reverse order, i.e., that overall last-smallest person in the very end +and thus the first-tallest person in the very beginning. That’s what the above solution does, +Sorting the people from the first-tallest to the last-smallest, and inserting them one by one as appropriate. + +参考[stfan](https://leetcode.com/problems/queue-reconstruction-by-height/discuss/89359) + +```python +class Solution(object): + def twoSum(self, nums, target): + """ + :type nums: List[int] + :type target: int + :rtype: List[int] + """ + lookup = {} + for i, num in enumerate(nums): + if target - num in lookup: + return [lookup[target - num],i] + lookup[num] = i + return [] +``` + + From 0e885520d81794b4dd869b5492a4e0f6d827af5a Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 13 Jan 2018 04:10:26 -0600 Subject: [PATCH 0358/2496] Update 406._Queue_Reconstruction_by_Height.md --- 406._Queue_Reconstruction_by_Height.md | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/406._Queue_Reconstruction_by_Height.md b/406._Queue_Reconstruction_by_Height.md index 49ae597e4..87e551963 100644 --- a/406._Queue_Reconstruction_by_Height.md +++ b/406._Queue_Reconstruction_by_Height.md @@ -24,22 +24,20 @@ You’re then inserting the people in the reverse order, i.e., that overall last and thus the first-tallest person in the very beginning. That’s what the above solution does, Sorting the people from the first-tallest to the last-smallest, and inserting them one by one as appropriate. -参考[stfan](https://leetcode.com/problems/queue-reconstruction-by-height/discuss/89359) +参考[stefan](https://leetcode.com/problems/queue-reconstruction-by-height/discuss/89359) ```python class Solution(object): - def twoSum(self, nums, target): + def reconstructQueue(self, people): """ - :type nums: List[int] - :type target: int - :rtype: List[int] + :type people: List[List[int]] + :rtype: List[List[int]] """ - lookup = {} - for i, num in enumerate(nums): - if target - num in lookup: - return [lookup[target - num],i] - lookup[num] = i - return [] + people.sort(key=lambda (h, k): (-h, k)) + queue = [] + for p in people: + queue.insert(p[1], p) + return queue ``` From 04b2a2661d83cacef20eeee923a52065230ac3cc Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 13 Jan 2018 20:51:41 -0600 Subject: [PATCH 0359/2496] Update 023._merge_k_sorted_lists.md --- 023._merge_k_sorted_lists.md | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/023._merge_k_sorted_lists.md b/023._merge_k_sorted_lists.md index 10fd0a3b8..9cd97355c 100644 --- a/023._merge_k_sorted_lists.md +++ b/023._merge_k_sorted_lists.md @@ -1,4 +1,4 @@ -###23. Merge k Sorted Lists +### 23. Merge k Sorted Lists @@ -11,7 +11,7 @@ Hard 思路: -看到思路有heap,similar question有ugly number|| -》 这个是用heapq来解决的 +看到思路有heap,similar question有ugly number|| -> 这个是用heapq来解决的 那么就用heap吧? heapsort @@ -20,7 +20,7 @@ Hard 写到这里瞬间明白和ugly number ii像的点了,甚至感觉跟find in sorted matrix ii也像 -``` +```python class Solution(object): def mergeKLists(self, lists): """ @@ -29,21 +29,18 @@ class Solution(object): """ import heapq h = [] - - for listhead in lists: - if listhead: - heapq.heappush(h, (listhead.val,listhead)) - + for lst_head in lists: + if lst_head: + heapq.heappush(h, (lst_head.val, lst_head)) cur = ListNode(-1) dummy = cur - while h: - smallestNode = heapq.heappop(h)[1] - cur.next = smallestNode + smallest_node = heapq.heappop(h)[1] + cur.next = smallest_node cur = cur.next - if smallestNode.next: - heapq.heappush(h, (smallestNode.next.val,smallestNode.next)) + if smallest_node.next: + heapq.heappush(h, (smallest_node.next.val, smallest_node.next)) return dummy.next ``` -当然还像merge two sorted list \ No newline at end of file +当然还像merge two sorted list From 7a6e3b9dd2d7a83cd8a8231415be55b38190043b Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sat, 13 Jan 2018 21:28:43 -0600 Subject: [PATCH 0360/2496] Update 042._trapping_rain_water.md --- 042._trapping_rain_water.md | 37 +++++++++++++------------------------ 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/042._trapping_rain_water.md b/042._trapping_rain_water.md index 08d0dd0b7..15379369d 100644 --- a/042._trapping_rain_water.md +++ b/042._trapping_rain_water.md @@ -11,40 +11,29 @@ Hard 思路: -题目有几个特性可用,bar width = 1,然后第一个和最后一个是不能trap water,其次中间的部分能trap多少水是看`左右高度差教低的那个 - 本身的高度`,所以就是本身的比较高就不能trap water了,这种情况取0. +题目有几个特性可用,bar width = 1,然后第一个和最后一个是不能trap water,其次中间的部分能trap多少水是看`左右高度差较低的那个 - 本身的高度` +The basic idea is that we set two pointers ```l``` and ```r``` to the left and right end of ```height```. Then we get the minimum height (```min_height```) of these pointers (similar to Container with Most Water due to the Leaking Bucket Effect) since the level of the water cannot be higher than it. Then we move the two pointers towards the center. If the coming level is less than ```min_height```, then it will hold some water. Fill the water until we meet some “barrier” (with height larger than ```min_height```) and update ```l``` and ```r``` to repeat this process in a new interval. AC代码: -``` +```python class Solution(object): def trap(self, height): """ :type height: List[int] :rtype: int """ - if not height: return 0 - n = len(height) - - rightH = [0 for i in range(n)] - rightH[n-1] = height[n-1] - - for i in range(n-2,0,-1): - rightH[i] = max(rightH[i+1],height[i+1]) - # print rightH - - - leftH = [0 for i in range(n)] - leftH[0] = height[0] - for i in range(1,n): - leftH[i] = max(leftH[i-1],height[i-1]) - # print leftH - - water = 0 - for i in range(1,n-1): - water += max(0, min(leftH[i],rightH[i]) - height[i]) - print water + l, r, water, min_height = 0, len(height) - 1, 0, 0 + while l < r: + min_height = min(height[l], height[r]) + while l < r and height[l] <= min_height: + water += min_height - height[l] + l += 1 + while l < r and height[r] <= min_height: + water += min_height - height[r] + r -= 1 return water -``` \ No newline at end of file +``` From 7d00d9c60f8a2870b3a88d8a021844b096855168 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 14 Jan 2018 22:18:29 -0600 Subject: [PATCH 0361/2496] Update 042._trapping_rain_water.md --- 042._trapping_rain_water.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/042._trapping_rain_water.md b/042._trapping_rain_water.md index 15379369d..17e03b9ea 100644 --- a/042._trapping_rain_water.md +++ b/042._trapping_rain_water.md @@ -1,4 +1,4 @@ -###42. Trapping Rain Water +### 42. Trapping Rain Water From c64b212761df917367ddb4a52e0bf0e84ab74e04 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 14 Jan 2018 22:36:38 -0600 Subject: [PATCH 0362/2496] Create 128._Longest_Consecutive_Sequence.md --- 128._Longest_Consecutive_Sequence.md | 47 ++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 128._Longest_Consecutive_Sequence.md diff --git a/128._Longest_Consecutive_Sequence.md b/128._Longest_Consecutive_Sequence.md new file mode 100644 index 000000000..ea6a85c2f --- /dev/null +++ b/128._Longest_Consecutive_Sequence.md @@ -0,0 +1,47 @@ +### 1. Two Sum + +题目: + + + +难度: + +Hard + + +### 思路 +首先去重复,时间O(N),然后将所有元素都放到一个字典中,这样判断一个数字的后续在不在这个字典中,如果存在就一直判断下去,每次判断只要O(1)。 + +对于每个数,如果他的前续已经判断过了,他就没有必要判断了,继续判断下一个数,即: +``` +if num - 1 in nums: + continue +``` + + +AC代码: + +```python +class Solution(object): + def longestConsecutive(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + nums = set(nums) + tmp = {} + for num in nums: + tmp[num] = 1 + res = 0 + for num in nums: + if num - 1 not in nums: + y = num + 1 + while y in nums: + y += 1 + res = max(res, y - num) + return res +``` + + + + From ff696a2685fde5fe84297dbcda12ebf1d8982d23 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 14 Jan 2018 22:37:13 -0600 Subject: [PATCH 0363/2496] Update 128._Longest_Consecutive_Sequence.md --- 128._Longest_Consecutive_Sequence.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/128._Longest_Consecutive_Sequence.md b/128._Longest_Consecutive_Sequence.md index ea6a85c2f..23636c8e3 100644 --- a/128._Longest_Consecutive_Sequence.md +++ b/128._Longest_Consecutive_Sequence.md @@ -1,7 +1,7 @@ -### 1. Two Sum +### 128. Longest Consecutive Sequence 题目: - + 难度: From 07523aeff7822a998f27818b27cf41c90e951548 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Sun, 14 Jan 2018 22:48:35 -0600 Subject: [PATCH 0364/2496] Update 128._Longest_Consecutive_Sequence.md --- 128._Longest_Consecutive_Sequence.md | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/128._Longest_Consecutive_Sequence.md b/128._Longest_Consecutive_Sequence.md index 23636c8e3..53e57505e 100644 --- a/128._Longest_Consecutive_Sequence.md +++ b/128._Longest_Consecutive_Sequence.md @@ -10,7 +10,7 @@ Hard ### 思路 -首先去重复,时间O(N),然后将所有元素都放到一个字典中,这样判断一个数字的后续在不在这个字典中,如果存在就一直判断下去,每次判断只要O(1)。 +首先去重复,时间```O(N)```,然后将所有元素都放到一个字典中,这样判断一个数字的后续在不在这个字典中,如果存在就一直判断下去,每次判断只要```O(1)```。 对于每个数,如果他的前续已经判断过了,他就没有必要判断了,继续判断下一个数,即: ``` @@ -42,6 +42,29 @@ class Solution(object): return res ``` +但其实```set```和字典的```in```判断都是```O(1)``` +```dict```与```set```实现原理是一样的,都是将实际的值放到```list```中。唯一不同的在于hash函数操作的对象,对于```dict```,```hash```函数操作的是其```key```,而对于```set```是直接操作的它的元素,假设操作内容为```x```,其作为因变量,放入```hash```函数,通过运算后取```list```的余数,转化为一个```list```的下标,此下标位置对于```set```而言用来放其本身,而对于```dict```则是创建了两个```list```,一个```list```该下表放此```key```,另一个```list```中该下标方对应的```value```。参考[python dict与set 的实现](http://www.cnblogs.com/pengsixiong/p/5326893.html) +  其中,我们把实现set的方式叫做Hash Set,实现dict的方式叫做Hash Map/Table(注:map指的就是通过key来寻找value的过程) +```set```和```dict```的唯一区别仅在于没有存储对应的```value```,但是,```set```的原理和```dict```一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证```set```内部“不会有重复元素”。 + +因此,代码也可以写成这样 +```python +class Solution(object): + def longestConsecutive(self, nums): + """ + :type nums: List[int] + :rtype: int + """ + nums = set(nums) + res = 0 + for num in nums: + if num - 1 not in nums: + y = num + 1 + while y in nums: + y += 1 + res = max(res, y - num) + return res +``` From c5eba16c709823041e2dfe41e7d25f6f34e31b8b Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 15 Jan 2018 11:12:45 -0600 Subject: [PATCH 0365/2496] =?UTF-8?q?Create=20python=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E5=85=AB=E5=A4=A7=E6=8E=92=E5=BA=8F.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...53\345\244\247\346\216\222\345\272\217.md" | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 "python\345\256\236\347\216\260\345\205\253\345\244\247\346\216\222\345\272\217.md" diff --git "a/python\345\256\236\347\216\260\345\205\253\345\244\247\346\216\222\345\272\217.md" "b/python\345\256\236\347\216\260\345\205\253\345\244\247\346\216\222\345\272\217.md" new file mode 100644 index 000000000..730fdef0f --- /dev/null +++ "b/python\345\256\236\347\216\260\345\205\253\345\244\247\346\216\222\345\272\217.md" @@ -0,0 +1,21 @@ +### 直接插入排序 + +直接插入排序的核心思想就是:将数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已排序的元素小,则交换,直到全部元素都比较过。 +因此,从上面的描述中我们可以发现,直接插入排序可以用两个循环完成: + +1. 第一层循环:遍历待比较的所有数组元素 +2. 第二层循环:将本轮选择的元素(selected)与已经排好序的元素(ordered)相比较。 + - 如果```selected > ordered```,那么将二者交换 + +```python +#直接插入排序 +def insert_sort(L): + #遍历数组中的所有元素,其中0号索引元素默认已排序,因此从1开始 + for x in range(1,len(L)): + #将该元素与已排序好的前序数组依次比较,如果该元素小,则交换 + #range(x-1,-1,-1):从x-1倒序循环到0 + for i in range(x-1,-1,-1): + #判断:如果符合条件则交换 + if L[i] > L[i+1]: + L[i], L[i+1] = L[i+1], L[i] +``` From b017f4110ff87e6365281393df227618efbe7911 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 15 Jan 2018 11:36:51 -0600 Subject: [PATCH 0366/2496] =?UTF-8?q?Create=20=E5=85=AB=E5=A4=A7=E6=8E=92?= =?UTF-8?q?=E5=BA=8F=E7=AE=97=E6=B3=95=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...5\272\217\347\256\227\346\263\225\346\200\273\347\273\223.md" | 1 + 1 file changed, 1 insertion(+) create mode 100644 "images/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\273\347\273\223.md" diff --git "a/images/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\273\347\273\223.md" "b/images/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\273\347\273\223.md" new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ "b/images/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\273\347\273\223.md" @@ -0,0 +1 @@ + From 77382d522628b581ba3a05dc067378a7b8d850e1 Mon Sep 17 00:00:00 2001 From: KEQI HUANG Date: Mon, 15 Jan 2018 11:49:34 -0600 Subject: [PATCH 0367/2496] add some sort images --- .gitignore | 7 +++++++ ...47\350\203\275\346\257\224\350\276\203.png" | Bin 0 -> 316912 bytes ...227\346\263\225\346\200\273\347\273\223.md" | 1 - ...27\346\263\225\346\200\273\347\273\223.png" | Bin 0 -> 56719 bytes ...22\346\263\241\346\216\222\345\272\217.gif" | Bin 0 -> 106607 bytes ...72\346\225\260\346\216\222\345\272\217.gif" | Bin 0 -> 98897 bytes ...14\345\260\224\346\216\222\345\272\217.png" | Bin 0 -> 77786 bytes ...22\345\271\266\346\216\222\345\272\217.gif" | Bin 0 -> 154709 bytes ...53\351\200\237\346\216\222\345\272\217.gif" | Bin 0 -> 75585 bytes ...72\345\244\247\351\241\266\345\240\206.png" | Bin 0 -> 31763 bytes ...22\345\205\245\346\216\222\345\272\217.gif" | Bin 0 -> 115616 bytes ...11\346\213\251\346\216\222\345\272\217.gif" | Bin 0 -> 146405 bytes ...64\345\244\247\351\241\266\345\240\206.png" | Bin 0 -> 31919 bytes 13 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 "images/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\247\350\203\275\346\257\224\350\276\203.png" delete mode 100644 "images/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\273\347\273\223.md" create mode 100644 "images/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\273\347\273\223.png" create mode 100644 "images/\345\206\222\346\263\241\346\216\222\345\272\217.gif" create mode 100644 "images/\345\237\272\346\225\260\346\216\222\345\272\217.gif" create mode 100644 "images/\345\270\214\345\260\224\346\216\222\345\272\217.png" create mode 100644 "images/\345\275\222\345\271\266\346\216\222\345\272\217.gif" create mode 100644 "images/\345\277\253\351\200\237\346\216\222\345\272\217.gif" create mode 100644 "images/\346\236\204\345\273\272\345\244\247\351\241\266\345\240\206.png" create mode 100644 "images/\347\233\264\346\216\245\346\217\222\345\205\245\346\216\222\345\272\217.gif" create mode 100644 "images/\347\256\200\345\215\225\351\200\211\346\213\251\346\216\222\345\272\217.gif" create mode 100644 "images/\350\260\203\346\225\264\345\244\247\351\241\266\345\240\206.png" diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..cd1fbccc7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +.DS_Store +Thumbs.db +db.json +*.log +node_modules/ +public/ +.deploy*/ diff --git "a/images/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\247\350\203\275\346\257\224\350\276\203.png" "b/images/\345\205\253\345\244\247\346\216\222\345\272\217\347\256\227\346\263\225\346\200\247\350\203\275\346\257\224\350\276\203.png" new file mode 100644 index 0000000000000000000000000000000000000000..77b48e419d558db0970967e2590dd494f4ca018a GIT binary patch literal 316912 zcmV*004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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